@astrasyncai/verification-gateway 4.5.1 → 5.0.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 (140) hide show
  1. package/README.md +1 -1
  2. package/dist/adapter-interface/interface.d.mts +2 -2
  3. package/dist/adapter-interface/interface.d.ts +2 -2
  4. package/dist/adapters/express.d.mts +2 -2
  5. package/dist/adapters/express.d.ts +2 -2
  6. package/dist/adapters/express.js +11 -33
  7. package/dist/adapters/express.js.map +1 -1
  8. package/dist/adapters/express.mjs +11 -33
  9. package/dist/adapters/express.mjs.map +1 -1
  10. package/dist/adapters/mcp.d.mts +2 -2
  11. package/dist/adapters/mcp.d.ts +2 -2
  12. package/dist/adapters/mcp.js +28 -65
  13. package/dist/adapters/mcp.js.map +1 -1
  14. package/dist/adapters/mcp.mjs +27 -64
  15. package/dist/adapters/mcp.mjs.map +1 -1
  16. package/dist/adapters/nextjs.d.mts +2 -2
  17. package/dist/adapters/nextjs.d.ts +2 -2
  18. package/dist/adapters/nextjs.js +9 -30
  19. package/dist/adapters/nextjs.js.map +1 -1
  20. package/dist/adapters/nextjs.mjs +9 -30
  21. package/dist/adapters/nextjs.mjs.map +1 -1
  22. package/dist/adapters/sdk.d.mts +2 -2
  23. package/dist/adapters/sdk.d.ts +2 -2
  24. package/dist/adapters/sdk.js +8 -124
  25. package/dist/adapters/sdk.js.map +1 -1
  26. package/dist/adapters/sdk.mjs +8 -122
  27. package/dist/adapters/sdk.mjs.map +1 -1
  28. package/dist/agent/index.d.mts +2 -2
  29. package/dist/agent/index.d.ts +2 -2
  30. package/dist/agent/index.js +1 -1
  31. package/dist/agent/index.js.map +1 -1
  32. package/dist/agent/index.mjs +1 -1
  33. package/dist/agent/index.mjs.map +1 -1
  34. package/dist/bin/astrasync-claude-hook.js +63 -41
  35. package/dist/bin/astrasync-codex-hook.js +63 -41
  36. package/dist/bin/astrasync-guard.js +63 -41
  37. package/dist/bin/astrasync.js +75 -48
  38. package/dist/browser/background.js +63 -41
  39. package/dist/browser/background.js.map +1 -1
  40. package/dist/browser/background.mjs +63 -41
  41. package/dist/browser/background.mjs.map +1 -1
  42. package/dist/browser/browser-adapter.d.mts +2 -2
  43. package/dist/browser/browser-adapter.d.ts +2 -2
  44. package/dist/claude-code/claude-code-adapter.d.mts +2 -2
  45. package/dist/claude-code/claude-code-adapter.d.ts +2 -2
  46. package/dist/cli/index.d.mts +2 -2
  47. package/dist/cli/index.d.ts +2 -2
  48. package/dist/cli/index.js +33 -6
  49. package/dist/cli/index.js.map +1 -1
  50. package/dist/cli/index.mjs +33 -6
  51. package/dist/cli/index.mjs.map +1 -1
  52. package/dist/codex/index.d.mts +2 -2
  53. package/dist/codex/index.d.ts +2 -2
  54. package/dist/codex/index.js +63 -41
  55. package/dist/codex/index.js.map +1 -1
  56. package/dist/codex/index.mjs +63 -41
  57. package/dist/codex/index.mjs.map +1 -1
  58. package/dist/cursor/cursor-adapter.d.mts +2 -2
  59. package/dist/cursor/cursor-adapter.d.ts +2 -2
  60. package/dist/cursor/extension.d.mts +2 -2
  61. package/dist/cursor/extension.d.ts +2 -2
  62. package/dist/cursor/extension.js +63 -41
  63. package/dist/cursor/extension.js.map +1 -1
  64. package/dist/cursor/extension.mjs +63 -41
  65. package/dist/cursor/extension.mjs.map +1 -1
  66. package/dist/edge-config.d.mts +1 -1
  67. package/dist/edge-config.d.ts +1 -1
  68. package/dist/edge-config.js +1 -1
  69. package/dist/edge-config.js.map +1 -1
  70. package/dist/edge-config.mjs +1 -1
  71. package/dist/edge-config.mjs.map +1 -1
  72. package/dist/edge-core/index.d.mts +1 -3
  73. package/dist/edge-core/index.d.ts +1 -3
  74. package/dist/edge-core/index.js +11 -33
  75. package/dist/edge-core/index.js.map +1 -1
  76. package/dist/edge-core/index.mjs +11 -33
  77. package/dist/edge-core/index.mjs.map +1 -1
  78. package/dist/{express-DaqL11tx.d.ts → express-B5lWuemA.d.ts} +1 -1
  79. package/dist/{express-CR6F3njD.d.mts → express-Dm-snUuY.d.mts} +1 -1
  80. package/dist/gateway/gateway.d.mts +2 -2
  81. package/dist/gateway/gateway.d.ts +2 -2
  82. package/dist/gateway/gateway.js +63 -41
  83. package/dist/gateway/gateway.js.map +1 -1
  84. package/dist/gateway/gateway.mjs +63 -41
  85. package/dist/gateway/gateway.mjs.map +1 -1
  86. package/dist/git-trigger/git-hooks.d.mts +2 -2
  87. package/dist/git-trigger/git-hooks.d.ts +2 -2
  88. package/dist/{index-Cub7lK-T.d.mts → index-B5k_vUmK.d.mts} +1 -1
  89. package/dist/{index-BfIxCYIZ.d.ts → index-BOzM6xUq.d.mts} +1 -2
  90. package/dist/{index-CwAh7Tln.d.mts → index-dRfxUdFA.d.ts} +1 -2
  91. package/dist/{index-B5Ts1WtM.d.ts → index-y8xToocF.d.ts} +1 -1
  92. package/dist/index.d.mts +10 -10
  93. package/dist/index.d.ts +10 -10
  94. package/dist/index.js +30 -217
  95. package/dist/index.js.map +1 -1
  96. package/dist/index.mjs +30 -210
  97. package/dist/index.mjs.map +1 -1
  98. package/dist/local-evaluator/evaluator.d.mts +2 -2
  99. package/dist/local-evaluator/evaluator.d.ts +2 -2
  100. package/dist/local-evaluator/evaluator.js +22 -7
  101. package/dist/local-evaluator/evaluator.js.map +1 -1
  102. package/dist/local-evaluator/evaluator.mjs +22 -7
  103. package/dist/local-evaluator/evaluator.mjs.map +1 -1
  104. package/dist/{mcp-BgBJu4Jl.d.mts → mcp-DgsyQiQq.d.mts} +53 -52
  105. package/dist/{mcp--DgKOwfu.d.ts → mcp-OosmAcKf.d.ts} +53 -52
  106. package/dist/{nextjs-DlX6xwbU.d.mts → nextjs-B1sBdEav.d.mts} +1 -1
  107. package/dist/{nextjs-DL6uE1ye.d.ts → nextjs-DoRmhV_Z.d.ts} +1 -1
  108. package/dist/registration/index.d.mts +5 -1
  109. package/dist/registration/index.d.ts +5 -1
  110. package/dist/registration/index.js +1 -1
  111. package/dist/registration/index.js.map +1 -1
  112. package/dist/registration/index.mjs +1 -1
  113. package/dist/registration/index.mjs.map +1 -1
  114. package/dist/sdk-B83N3xKc.d.mts +142 -0
  115. package/dist/sdk-H_9BTNBS.d.ts +142 -0
  116. package/dist/transport/index.d.mts +2 -2
  117. package/dist/transport/index.d.ts +2 -2
  118. package/dist/transport/index.js +1 -1
  119. package/dist/transport/index.js.map +1 -1
  120. package/dist/transport/index.mjs +1 -1
  121. package/dist/transport/index.mjs.map +1 -1
  122. package/dist/{types-DwSfO7Sb.d.ts → types-BK2POWNc.d.ts} +23 -50
  123. package/dist/{types-C0zfSXMB.d.mts → types-CJjZvPr9.d.mts} +23 -50
  124. package/dist/{types-C7Rb-w0d.d.mts → types-CXf3q4kZ.d.ts} +14 -3
  125. package/dist/{types-nIh3HtuA.d.ts → types-DQmop7ZW.d.mts} +14 -3
  126. package/dist/ui/index.d.mts +2 -17
  127. package/dist/ui/index.d.ts +2 -17
  128. package/dist/ui/index.js +1 -43
  129. package/dist/ui/index.js.map +1 -1
  130. package/dist/ui/index.mjs +1 -42
  131. package/dist/ui/index.mjs.map +1 -1
  132. package/dist/verify.d.mts +3 -4
  133. package/dist/verify.d.ts +3 -4
  134. package/dist/verify.js +8 -28
  135. package/dist/verify.js.map +1 -1
  136. package/dist/verify.mjs +8 -28
  137. package/dist/verify.mjs.map +1 -1
  138. package/package.json +1 -1
  139. package/dist/sdk-Bbh9B_dw.d.mts +0 -215
  140. package/dist/sdk-C6SASmsh.d.ts +0 -215
@@ -1,7 +1,7 @@
1
1
  import { PlatformAdapter, AdapterConfig } from '../adapter-interface/interface.mjs';
2
- import { A as AgentAction, I as InterceptResult, P as PDLSSContext, V as VerificationDecision } from '../types-C7Rb-w0d.mjs';
2
+ import { A as AgentAction, I as InterceptResult, P as PDLSSContext, V as VerificationDecision } from '../types-DQmop7ZW.mjs';
3
3
  import { AstraSyncGateway } from '../gateway/gateway.mjs';
4
- import '../types-C0zfSXMB.mjs';
4
+ import '../types-CJjZvPr9.mjs';
5
5
  import '../metadata-capture.mjs';
6
6
 
7
7
  /**
@@ -1,7 +1,7 @@
1
1
  import { PlatformAdapter, AdapterConfig } from '../adapter-interface/interface.js';
2
- import { A as AgentAction, I as InterceptResult, P as PDLSSContext, V as VerificationDecision } from '../types-nIh3HtuA.js';
2
+ import { A as AgentAction, I as InterceptResult, P as PDLSSContext, V as VerificationDecision } from '../types-CXf3q4kZ.js';
3
3
  import { AstraSyncGateway } from '../gateway/gateway.js';
4
- import '../types-DwSfO7Sb.js';
4
+ import '../types-BK2POWNc.js';
5
5
  import '../metadata-capture.js';
6
6
 
7
7
  /**
@@ -544,9 +544,9 @@ var LocalEvaluator = class {
544
544
  if (scopeBlock) {
545
545
  return { recommendation: "DENY", reason: scopeBlock };
546
546
  }
547
- const limitViolation = this.checkLimits(context);
548
- if (limitViolation) {
549
- return { recommendation: "DENY", reason: limitViolation };
547
+ const limitDecision = this.checkLimits(context);
548
+ if (limitDecision) {
549
+ return limitDecision;
550
550
  }
551
551
  if (context.purpose === "sub_agent.spawn" && this.policy.selfInstantiation) {
552
552
  if (!this.policy.selfInstantiation.allowed) {
@@ -611,9 +611,21 @@ var LocalEvaluator = class {
611
611
  checkLimits(context) {
612
612
  const limits = this.policy.limits;
613
613
  if (!limits) return null;
614
- if (limits.maxTransactionAmount !== void 0 && context.transactionValue !== void 0) {
615
- if (context.transactionValue > limits.maxTransactionAmount) {
616
- return `Transaction value ${context.transactionValue} exceeds limit ${limits.maxTransactionAmount}`;
614
+ const value = context.transactionValue;
615
+ if (value !== void 0 && value > 0 && (limits.autonomousThreshold !== void 0 || limits.maxTransactionAmount !== void 0)) {
616
+ const autonomousThreshold = limits.autonomousThreshold ?? 0;
617
+ const hardLimit = limits.maxTransactionAmount ?? limits.autonomousThreshold ?? 0;
618
+ if (value > autonomousThreshold) {
619
+ if (value >= hardLimit) {
620
+ return {
621
+ recommendation: "DENY",
622
+ reason: `Transaction value ${value} at or above Hard Limit ${hardLimit}`
623
+ };
624
+ }
625
+ return {
626
+ recommendation: "MANUAL_REVIEW",
627
+ reason: `Transaction value ${value} is in the human-approval band (${autonomousThreshold}, ${hardLimit})`
628
+ };
617
629
  }
618
630
  }
619
631
  if (limits.maxRequestsPerHour !== void 0) {
@@ -626,7 +638,10 @@ var LocalEvaluator = class {
626
638
  } else {
627
639
  entry.count++;
628
640
  if (entry.count > limits.maxRequestsPerHour) {
629
- return `Rate limit exceeded: ${entry.count}/${limits.maxRequestsPerHour} requests per hour`;
641
+ return {
642
+ recommendation: "DENY",
643
+ reason: `Rate limit exceeded: ${entry.count}/${limits.maxRequestsPerHour} requests per hour`
644
+ };
630
645
  }
631
646
  }
632
647
  }
@@ -3835,10 +3850,16 @@ function validatePurpose(purpose, path) {
3835
3850
  errors.push({ path: `${path}.targets`, message: "targets must be an array of strings" });
3836
3851
  }
3837
3852
  if (p.blockedPatterns !== void 0 && !isStringArray(p.blockedPatterns)) {
3838
- errors.push({ path: `${path}.blockedPatterns`, message: "blockedPatterns must be an array of strings" });
3853
+ errors.push({
3854
+ path: `${path}.blockedPatterns`,
3855
+ message: "blockedPatterns must be an array of strings"
3856
+ });
3839
3857
  }
3840
3858
  if (p.requiresApproval !== void 0 && typeof p.requiresApproval !== "boolean") {
3841
- errors.push({ path: `${path}.requiresApproval`, message: "requiresApproval must be a boolean" });
3859
+ errors.push({
3860
+ path: `${path}.requiresApproval`,
3861
+ message: "requiresApproval must be a boolean"
3862
+ });
3842
3863
  }
3843
3864
  return errors;
3844
3865
  }
@@ -3861,11 +3882,29 @@ function validateLimits(limits, path) {
3861
3882
  return [{ path, message: "limits must be an object" }];
3862
3883
  }
3863
3884
  const l = limits;
3885
+ if (l.autonomousThreshold !== void 0 && typeof l.autonomousThreshold !== "number") {
3886
+ errors.push({
3887
+ path: `${path}.autonomousThreshold`,
3888
+ message: "autonomousThreshold must be a number"
3889
+ });
3890
+ }
3864
3891
  if (l.maxTransactionAmount !== void 0 && typeof l.maxTransactionAmount !== "number") {
3865
- errors.push({ path: `${path}.maxTransactionAmount`, message: "maxTransactionAmount must be a number" });
3892
+ errors.push({
3893
+ path: `${path}.maxTransactionAmount`,
3894
+ message: "maxTransactionAmount must be a number"
3895
+ });
3896
+ }
3897
+ if (typeof l.autonomousThreshold === "number" && typeof l.maxTransactionAmount === "number" && l.autonomousThreshold > l.maxTransactionAmount) {
3898
+ errors.push({
3899
+ path: `${path}.autonomousThreshold`,
3900
+ message: "autonomousThreshold (Autonomous Limit) must be <= maxTransactionAmount (Hard Limit)"
3901
+ });
3866
3902
  }
3867
3903
  if (l.maxRequestsPerHour !== void 0 && typeof l.maxRequestsPerHour !== "number") {
3868
- errors.push({ path: `${path}.maxRequestsPerHour`, message: "maxRequestsPerHour must be a number" });
3904
+ errors.push({
3905
+ path: `${path}.maxRequestsPerHour`,
3906
+ message: "maxRequestsPerHour must be a number"
3907
+ });
3869
3908
  }
3870
3909
  if (l.currency !== void 0 && typeof l.currency !== "string") {
3871
3910
  errors.push({ path: `${path}.currency`, message: "currency must be a string" });
@@ -3880,7 +3919,10 @@ function validateRiskThresholds(thresholds, path) {
3880
3919
  const t = thresholds;
3881
3920
  for (const range of ["autoAllow", "requireApproval", "autoBlock"]) {
3882
3921
  if (!t[range] || typeof t[range] !== "object") {
3883
- errors.push({ path: `${path}.${range}`, message: `${range} is required and must be an object with min and max` });
3922
+ errors.push({
3923
+ path: `${path}.${range}`,
3924
+ message: `${range} is required and must be an object with min and max`
3925
+ });
3884
3926
  continue;
3885
3927
  }
3886
3928
  const r = t[range];
@@ -3976,7 +4018,7 @@ function verifyLocal(evaluator, context) {
3976
4018
  return evaluator.evaluate(context);
3977
4019
  }
3978
4020
 
3979
- // src/access-levels.ts
4021
+ // src/trust-levels.ts
3980
4022
  function getTrustLevel(score) {
3981
4023
  if (score >= 80) return "PLATINUM";
3982
4024
  if (score >= 60) return "GOLD";
@@ -3985,7 +4027,7 @@ function getTrustLevel(score) {
3985
4027
  }
3986
4028
 
3987
4029
  // src/version.ts
3988
- var SDK_VERSION = "4.5.1";
4030
+ var SDK_VERSION = "5.0.0";
3989
4031
 
3990
4032
  // src/http.ts
3991
4033
  var SDK_USER_AGENT = `astrasync-sdk/${SDK_VERSION}`;
@@ -4015,11 +4057,6 @@ function getCachedWellKnownUrls(apiBaseUrl) {
4015
4057
  // src/verify.ts
4016
4058
  var DEFAULT_CONFIG = {
4017
4059
  apiBaseUrl: "https://astrasync.ai/api",
4018
- // v2.3.9 (defect #30): default for unconfigured callers is `'none'` (no
4019
- // access). Pre-rename this defaulted to `'guidance'`, which combined with
4020
- // a route gated at `'guidance'` to silently let unverified traffic
4021
- // through (`hasMinimumAccess('guidance', 'guidance') === true`).
4022
- defaultAccessLevel: "none",
4023
4060
  // minTrustScore + minTrustScoreForFull deprecated in v2.3.0 — server decides.
4024
4061
  // cacheTtl deliberately unset. When undefined, cacheResult applies the 60s
4025
4062
  // default; the caller's explicit value is honoured for cacheable results.
@@ -4180,13 +4217,6 @@ function createGuidanceResponse(_config, reason, options = {}) {
4180
4217
  // policy is not evaluated (we never reached the gate).
4181
4218
  identityVerified: false,
4182
4219
  policyAllowed: false,
4183
- // v2.3.9 (defect #30): denials grant `'none'`, NEVER a positive band.
4184
- // Adapters additionally short-circuit on `!identityVerified ||
4185
- // !policyAllowed` before the gate check, but the access level still has
4186
- // to be honest at the data layer so downstream consumers (SDK adapters
4187
- // in other languages, custom integrations) inherit the correct
4188
- // semantics.
4189
- accessLevel: "none",
4190
4220
  guidance,
4191
4221
  denialReasons: reason ? [reason] : ["No valid agent credentials provided"],
4192
4222
  // Round-10 (#47, O5): on API-error fallback, surface a typed failure so
@@ -4209,6 +4239,11 @@ function createGuidanceResponse(_config, reason, options = {}) {
4209
4239
  // 4.0.0: typed marker so adapters render the misconfig envelope (503 +
4210
4240
  // MERCHANT_VERIFICATION_MISCONFIGURED) without string-matching.
4211
4241
  ...isMisconfig && { misconfigured: true },
4242
+ // 4.6.0: a transient api_error is retryable — mark it so consumers surface
4243
+ // "temporarily unavailable, retry" (recommendation 'error') instead of
4244
+ // coercing the absent recommendation to a policy 'deny'. Misconfig is
4245
+ // deterministic and intentionally NOT marked retryable.
4246
+ ...isApiError && { retryable: true },
4212
4247
  correlationId: options.correlationId,
4213
4248
  attemptId: options.attemptId,
4214
4249
  verifiedAt: /* @__PURE__ */ new Date()
@@ -4275,7 +4310,6 @@ async function callVerifyAccessAPI(config, request) {
4275
4310
  attemptId: typeof data?.attemptId === "string" ? data.attemptId : void 0,
4276
4311
  access: {
4277
4312
  allowed: false,
4278
- accessLevel: "none",
4279
4313
  reason: "endpoint_deactivated",
4280
4314
  failures: [
4281
4315
  {
@@ -4338,7 +4372,7 @@ async function verify(config, request, options) {
4338
4372
  if (!deprecationWarningShown && (config.minTrustScore !== void 0 || config.minTrustScoreForFull !== void 0)) {
4339
4373
  deprecationWarningShown = true;
4340
4374
  console.warn(
4341
- "[VerificationGateway] minTrustScore / minTrustScoreForFull are deprecated in v2.3.0 and have no effect. Server is now the single source of truth for access-level decisions (the SDK reads access.accessLevel from the verify-access response). To gate access to an endpoint, configure the endpoint's trust_score_requirement server-side."
4375
+ "[VerificationGateway] minTrustScore / minTrustScoreForFull are deprecated in v2.3.0 and have no effect. Server is now the single source of truth for access decisions (verified ID + runtime challenge + PDLSS + trust score). To gate access to an endpoint, configure the endpoint's trust_score_requirement server-side."
4342
4376
  );
4343
4377
  }
4344
4378
  if (mergedConfig.cacheTtl !== 0 && !options?.bypassCache) {
@@ -4384,14 +4418,6 @@ async function verify(config, request, options) {
4384
4418
  const result2 = {
4385
4419
  identityVerified: idVerifiedFromBackend,
4386
4420
  policyAllowed: false,
4387
- // v2.3.9 (defect #30): denials grant `'none'`, NEVER a positive band.
4388
- // Pre-rename this hardcoded `'guidance'`, which conflated with the
4389
- // colocated `guidance: {...}` help-payload object below and let
4390
- // denied requests pass any route gated at `'guidance'` because
4391
- // `hasMinimumAccess('guidance', 'guidance') === true`. Adapters now
4392
- // ALSO short-circuit on `!identityVerified || !policyAllowed` before
4393
- // the gate check — belt-and-braces.
4394
- accessLevel: "none",
4395
4421
  // 3.6.0: the server now emits top-level denialReasons on every deny
4396
4422
  // path — prefer it verbatim; the failure-message reconstruction remains
4397
4423
  // as the fallback for older backends.
@@ -4440,7 +4466,6 @@ async function verify(config, request, options) {
4440
4466
  trustScore: apiResponse.organization.trustScore
4441
4467
  } : void 0;
4442
4468
  const verificationContext = apiResponse.verificationContext;
4443
- const accessLevel = apiResponse.access?.accessLevel ?? "standard";
4444
4469
  const result = {
4445
4470
  // 4.5.0 (probe F1): read idVerified from verificationContext with the
4446
4471
  // SAME absent⇒false default as the deny branch. The previous `!== false`
@@ -4452,7 +4477,6 @@ async function verify(config, request, options) {
4452
4477
  // this load-bearing must never be defaulted on.
4453
4478
  identityVerified: apiResponse.verificationContext?.idVerified === true,
4454
4479
  policyAllowed: true,
4455
- accessLevel,
4456
4480
  agent,
4457
4481
  developer,
4458
4482
  organization,
@@ -4479,7 +4503,6 @@ async function verify(config, request, options) {
4479
4503
  };
4480
4504
  if (result.recommendation === "deny") {
4481
4505
  result.policyAllowed = false;
4482
- result.accessLevel = "none";
4483
4506
  result.denialReasons = serverDenialReasons ?? result.recommendationReasons ?? ["Access denied by AstraSync recommendation"];
4484
4507
  result.guidance = result.runtimeChallenge ? {
4485
4508
  message: `Verification failed: ${result.runtimeChallenge.reason || "runtime challenge failed"}`,
@@ -4592,7 +4615,6 @@ function toGatewayConfig(config) {
4592
4615
  return {
4593
4616
  apiBaseUrl: config.apiBaseUrl || "https://api.astrasync.ai",
4594
4617
  apiKey: config.apiKey,
4595
- defaultAccessLevel: config.defaultAccessLevel,
4596
4618
  minTrustScore: config.minTrustScore,
4597
4619
  minTrustScoreForFull: config.minTrustScoreForFull,
4598
4620
  cacheTtl: config.cacheTtl,
@@ -4620,7 +4642,7 @@ function toDecision(result) {
4620
4642
  if (result.identityVerified && result.policyAllowed) {
4621
4643
  return {
4622
4644
  recommendation: "ALLOW",
4623
- reason: `Verified with access level: ${result.accessLevel}`,
4645
+ reason: result.agent?.trustScore ? `Verified (trust score ${result.agent.trustScore})` : "Verified",
4624
4646
  trustScore: result.agent?.trustScore,
4625
4647
  sessionId: "sessionId" in result ? result.sessionId : void 0
4626
4648
  };