@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,5 +1,5 @@
1
1
  import { RequestHandler, Request } from 'express';
2
- import { x as VerificationResult, k as ExpressMiddlewareOptions, c as AstraSyncCredentials } from './types-DwSfO7Sb.js';
2
+ import { w as VerificationResult, j as ExpressMiddlewareOptions, b as AstraSyncCredentials } from './types-BK2POWNc.js';
3
3
 
4
4
  /**
5
5
  * AstraSync Universal Verification Gateway - Express Middleware
@@ -1,5 +1,5 @@
1
1
  import { RequestHandler, Request } from 'express';
2
- import { x as VerificationResult, k as ExpressMiddlewareOptions, c as AstraSyncCredentials } from './types-C0zfSXMB.mjs';
2
+ import { w as VerificationResult, j as ExpressMiddlewareOptions, b as AstraSyncCredentials } from './types-CJjZvPr9.mjs';
3
3
 
4
4
  /**
5
5
  * AstraSync Universal Verification Gateway - Express Middleware
@@ -1,5 +1,5 @@
1
- import { a as AstraSyncGatewayConfig, P as PDLSSContext, V as VerificationDecision } from '../types-C7Rb-w0d.mjs';
2
- import '../types-C0zfSXMB.mjs';
1
+ import { a as AstraSyncGatewayConfig, P as PDLSSContext, V as VerificationDecision } from '../types-DQmop7ZW.mjs';
2
+ import '../types-CJjZvPr9.mjs';
3
3
  import '../metadata-capture.mjs';
4
4
 
5
5
  /**
@@ -1,5 +1,5 @@
1
- import { a as AstraSyncGatewayConfig, P as PDLSSContext, V as VerificationDecision } from '../types-nIh3HtuA.js';
2
- import '../types-DwSfO7Sb.js';
1
+ import { a as AstraSyncGatewayConfig, P as PDLSSContext, V as VerificationDecision } from '../types-CXf3q4kZ.js';
2
+ import '../types-BK2POWNc.js';
3
3
  import '../metadata-capture.js';
4
4
 
5
5
  /**
@@ -257,9 +257,9 @@ var LocalEvaluator = class {
257
257
  if (scopeBlock) {
258
258
  return { recommendation: "DENY", reason: scopeBlock };
259
259
  }
260
- const limitViolation = this.checkLimits(context);
261
- if (limitViolation) {
262
- return { recommendation: "DENY", reason: limitViolation };
260
+ const limitDecision = this.checkLimits(context);
261
+ if (limitDecision) {
262
+ return limitDecision;
263
263
  }
264
264
  if (context.purpose === "sub_agent.spawn" && this.policy.selfInstantiation) {
265
265
  if (!this.policy.selfInstantiation.allowed) {
@@ -324,9 +324,21 @@ var LocalEvaluator = class {
324
324
  checkLimits(context) {
325
325
  const limits = this.policy.limits;
326
326
  if (!limits) return null;
327
- if (limits.maxTransactionAmount !== void 0 && context.transactionValue !== void 0) {
328
- if (context.transactionValue > limits.maxTransactionAmount) {
329
- return `Transaction value ${context.transactionValue} exceeds limit ${limits.maxTransactionAmount}`;
327
+ const value = context.transactionValue;
328
+ if (value !== void 0 && value > 0 && (limits.autonomousThreshold !== void 0 || limits.maxTransactionAmount !== void 0)) {
329
+ const autonomousThreshold = limits.autonomousThreshold ?? 0;
330
+ const hardLimit = limits.maxTransactionAmount ?? limits.autonomousThreshold ?? 0;
331
+ if (value > autonomousThreshold) {
332
+ if (value >= hardLimit) {
333
+ return {
334
+ recommendation: "DENY",
335
+ reason: `Transaction value ${value} at or above Hard Limit ${hardLimit}`
336
+ };
337
+ }
338
+ return {
339
+ recommendation: "MANUAL_REVIEW",
340
+ reason: `Transaction value ${value} is in the human-approval band (${autonomousThreshold}, ${hardLimit})`
341
+ };
330
342
  }
331
343
  }
332
344
  if (limits.maxRequestsPerHour !== void 0) {
@@ -339,7 +351,10 @@ var LocalEvaluator = class {
339
351
  } else {
340
352
  entry.count++;
341
353
  if (entry.count > limits.maxRequestsPerHour) {
342
- return `Rate limit exceeded: ${entry.count}/${limits.maxRequestsPerHour} requests per hour`;
354
+ return {
355
+ recommendation: "DENY",
356
+ reason: `Rate limit exceeded: ${entry.count}/${limits.maxRequestsPerHour} requests per hour`
357
+ };
343
358
  }
344
359
  }
345
360
  }
@@ -3548,10 +3563,16 @@ function validatePurpose(purpose, path) {
3548
3563
  errors.push({ path: `${path}.targets`, message: "targets must be an array of strings" });
3549
3564
  }
3550
3565
  if (p.blockedPatterns !== void 0 && !isStringArray(p.blockedPatterns)) {
3551
- errors.push({ path: `${path}.blockedPatterns`, message: "blockedPatterns must be an array of strings" });
3566
+ errors.push({
3567
+ path: `${path}.blockedPatterns`,
3568
+ message: "blockedPatterns must be an array of strings"
3569
+ });
3552
3570
  }
3553
3571
  if (p.requiresApproval !== void 0 && typeof p.requiresApproval !== "boolean") {
3554
- errors.push({ path: `${path}.requiresApproval`, message: "requiresApproval must be a boolean" });
3572
+ errors.push({
3573
+ path: `${path}.requiresApproval`,
3574
+ message: "requiresApproval must be a boolean"
3575
+ });
3555
3576
  }
3556
3577
  return errors;
3557
3578
  }
@@ -3574,11 +3595,29 @@ function validateLimits(limits, path) {
3574
3595
  return [{ path, message: "limits must be an object" }];
3575
3596
  }
3576
3597
  const l = limits;
3598
+ if (l.autonomousThreshold !== void 0 && typeof l.autonomousThreshold !== "number") {
3599
+ errors.push({
3600
+ path: `${path}.autonomousThreshold`,
3601
+ message: "autonomousThreshold must be a number"
3602
+ });
3603
+ }
3577
3604
  if (l.maxTransactionAmount !== void 0 && typeof l.maxTransactionAmount !== "number") {
3578
- errors.push({ path: `${path}.maxTransactionAmount`, message: "maxTransactionAmount must be a number" });
3605
+ errors.push({
3606
+ path: `${path}.maxTransactionAmount`,
3607
+ message: "maxTransactionAmount must be a number"
3608
+ });
3609
+ }
3610
+ if (typeof l.autonomousThreshold === "number" && typeof l.maxTransactionAmount === "number" && l.autonomousThreshold > l.maxTransactionAmount) {
3611
+ errors.push({
3612
+ path: `${path}.autonomousThreshold`,
3613
+ message: "autonomousThreshold (Autonomous Limit) must be <= maxTransactionAmount (Hard Limit)"
3614
+ });
3579
3615
  }
3580
3616
  if (l.maxRequestsPerHour !== void 0 && typeof l.maxRequestsPerHour !== "number") {
3581
- errors.push({ path: `${path}.maxRequestsPerHour`, message: "maxRequestsPerHour must be a number" });
3617
+ errors.push({
3618
+ path: `${path}.maxRequestsPerHour`,
3619
+ message: "maxRequestsPerHour must be a number"
3620
+ });
3582
3621
  }
3583
3622
  if (l.currency !== void 0 && typeof l.currency !== "string") {
3584
3623
  errors.push({ path: `${path}.currency`, message: "currency must be a string" });
@@ -3593,7 +3632,10 @@ function validateRiskThresholds(thresholds, path) {
3593
3632
  const t = thresholds;
3594
3633
  for (const range of ["autoAllow", "requireApproval", "autoBlock"]) {
3595
3634
  if (!t[range] || typeof t[range] !== "object") {
3596
- errors.push({ path: `${path}.${range}`, message: `${range} is required and must be an object with min and max` });
3635
+ errors.push({
3636
+ path: `${path}.${range}`,
3637
+ message: `${range} is required and must be an object with min and max`
3638
+ });
3597
3639
  continue;
3598
3640
  }
3599
3641
  const r = t[range];
@@ -3689,7 +3731,7 @@ function verifyLocal(evaluator, context) {
3689
3731
  return evaluator.evaluate(context);
3690
3732
  }
3691
3733
 
3692
- // src/access-levels.ts
3734
+ // src/trust-levels.ts
3693
3735
  function getTrustLevel(score) {
3694
3736
  if (score >= 80) return "PLATINUM";
3695
3737
  if (score >= 60) return "GOLD";
@@ -3698,7 +3740,7 @@ function getTrustLevel(score) {
3698
3740
  }
3699
3741
 
3700
3742
  // src/version.ts
3701
- var SDK_VERSION = "4.5.1";
3743
+ var SDK_VERSION = "5.0.0";
3702
3744
 
3703
3745
  // src/http.ts
3704
3746
  var SDK_USER_AGENT = `astrasync-sdk/${SDK_VERSION}`;
@@ -3728,11 +3770,6 @@ function getCachedWellKnownUrls(apiBaseUrl) {
3728
3770
  // src/verify.ts
3729
3771
  var DEFAULT_CONFIG = {
3730
3772
  apiBaseUrl: "https://astrasync.ai/api",
3731
- // v2.3.9 (defect #30): default for unconfigured callers is `'none'` (no
3732
- // access). Pre-rename this defaulted to `'guidance'`, which combined with
3733
- // a route gated at `'guidance'` to silently let unverified traffic
3734
- // through (`hasMinimumAccess('guidance', 'guidance') === true`).
3735
- defaultAccessLevel: "none",
3736
3773
  // minTrustScore + minTrustScoreForFull deprecated in v2.3.0 — server decides.
3737
3774
  // cacheTtl deliberately unset. When undefined, cacheResult applies the 60s
3738
3775
  // default; the caller's explicit value is honoured for cacheable results.
@@ -3893,13 +3930,6 @@ function createGuidanceResponse(_config, reason, options = {}) {
3893
3930
  // policy is not evaluated (we never reached the gate).
3894
3931
  identityVerified: false,
3895
3932
  policyAllowed: false,
3896
- // v2.3.9 (defect #30): denials grant `'none'`, NEVER a positive band.
3897
- // Adapters additionally short-circuit on `!identityVerified ||
3898
- // !policyAllowed` before the gate check, but the access level still has
3899
- // to be honest at the data layer so downstream consumers (SDK adapters
3900
- // in other languages, custom integrations) inherit the correct
3901
- // semantics.
3902
- accessLevel: "none",
3903
3933
  guidance,
3904
3934
  denialReasons: reason ? [reason] : ["No valid agent credentials provided"],
3905
3935
  // Round-10 (#47, O5): on API-error fallback, surface a typed failure so
@@ -3922,6 +3952,11 @@ function createGuidanceResponse(_config, reason, options = {}) {
3922
3952
  // 4.0.0: typed marker so adapters render the misconfig envelope (503 +
3923
3953
  // MERCHANT_VERIFICATION_MISCONFIGURED) without string-matching.
3924
3954
  ...isMisconfig && { misconfigured: true },
3955
+ // 4.6.0: a transient api_error is retryable — mark it so consumers surface
3956
+ // "temporarily unavailable, retry" (recommendation 'error') instead of
3957
+ // coercing the absent recommendation to a policy 'deny'. Misconfig is
3958
+ // deterministic and intentionally NOT marked retryable.
3959
+ ...isApiError && { retryable: true },
3925
3960
  correlationId: options.correlationId,
3926
3961
  attemptId: options.attemptId,
3927
3962
  verifiedAt: /* @__PURE__ */ new Date()
@@ -3988,7 +4023,6 @@ async function callVerifyAccessAPI(config, request) {
3988
4023
  attemptId: typeof data?.attemptId === "string" ? data.attemptId : void 0,
3989
4024
  access: {
3990
4025
  allowed: false,
3991
- accessLevel: "none",
3992
4026
  reason: "endpoint_deactivated",
3993
4027
  failures: [
3994
4028
  {
@@ -4051,7 +4085,7 @@ async function verify(config, request, options) {
4051
4085
  if (!deprecationWarningShown && (config.minTrustScore !== void 0 || config.minTrustScoreForFull !== void 0)) {
4052
4086
  deprecationWarningShown = true;
4053
4087
  console.warn(
4054
- "[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."
4088
+ "[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."
4055
4089
  );
4056
4090
  }
4057
4091
  if (mergedConfig.cacheTtl !== 0 && !options?.bypassCache) {
@@ -4097,14 +4131,6 @@ async function verify(config, request, options) {
4097
4131
  const result2 = {
4098
4132
  identityVerified: idVerifiedFromBackend,
4099
4133
  policyAllowed: false,
4100
- // v2.3.9 (defect #30): denials grant `'none'`, NEVER a positive band.
4101
- // Pre-rename this hardcoded `'guidance'`, which conflated with the
4102
- // colocated `guidance: {...}` help-payload object below and let
4103
- // denied requests pass any route gated at `'guidance'` because
4104
- // `hasMinimumAccess('guidance', 'guidance') === true`. Adapters now
4105
- // ALSO short-circuit on `!identityVerified || !policyAllowed` before
4106
- // the gate check — belt-and-braces.
4107
- accessLevel: "none",
4108
4134
  // 3.6.0: the server now emits top-level denialReasons on every deny
4109
4135
  // path — prefer it verbatim; the failure-message reconstruction remains
4110
4136
  // as the fallback for older backends.
@@ -4153,7 +4179,6 @@ async function verify(config, request, options) {
4153
4179
  trustScore: apiResponse.organization.trustScore
4154
4180
  } : void 0;
4155
4181
  const verificationContext = apiResponse.verificationContext;
4156
- const accessLevel = apiResponse.access?.accessLevel ?? "standard";
4157
4182
  const result = {
4158
4183
  // 4.5.0 (probe F1): read idVerified from verificationContext with the
4159
4184
  // SAME absent⇒false default as the deny branch. The previous `!== false`
@@ -4165,7 +4190,6 @@ async function verify(config, request, options) {
4165
4190
  // this load-bearing must never be defaulted on.
4166
4191
  identityVerified: apiResponse.verificationContext?.idVerified === true,
4167
4192
  policyAllowed: true,
4168
- accessLevel,
4169
4193
  agent,
4170
4194
  developer,
4171
4195
  organization,
@@ -4192,7 +4216,6 @@ async function verify(config, request, options) {
4192
4216
  };
4193
4217
  if (result.recommendation === "deny") {
4194
4218
  result.policyAllowed = false;
4195
- result.accessLevel = "none";
4196
4219
  result.denialReasons = serverDenialReasons ?? result.recommendationReasons ?? ["Access denied by AstraSync recommendation"];
4197
4220
  result.guidance = result.runtimeChallenge ? {
4198
4221
  message: `Verification failed: ${result.runtimeChallenge.reason || "runtime challenge failed"}`,
@@ -4305,7 +4328,6 @@ function toGatewayConfig(config) {
4305
4328
  return {
4306
4329
  apiBaseUrl: config.apiBaseUrl || "https://api.astrasync.ai",
4307
4330
  apiKey: config.apiKey,
4308
- defaultAccessLevel: config.defaultAccessLevel,
4309
4331
  minTrustScore: config.minTrustScore,
4310
4332
  minTrustScoreForFull: config.minTrustScoreForFull,
4311
4333
  cacheTtl: config.cacheTtl,
@@ -4333,7 +4355,7 @@ function toDecision(result) {
4333
4355
  if (result.identityVerified && result.policyAllowed) {
4334
4356
  return {
4335
4357
  recommendation: "ALLOW",
4336
- reason: `Verified with access level: ${result.accessLevel}`,
4358
+ reason: result.agent?.trustScore ? `Verified (trust score ${result.agent.trustScore})` : "Verified",
4337
4359
  trustScore: result.agent?.trustScore,
4338
4360
  sessionId: "sessionId" in result ? result.sessionId : void 0
4339
4361
  };