@zktx.io/sui-mcp 0.6.2 → 0.7.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 (42) hide show
  1. package/README.md +13 -12
  2. package/dist/adapters/adapterPromptSurfaces.js +1 -1
  3. package/dist/core/read/deepbookReadHelpers.js +1 -1
  4. package/dist/core/read/readResponseGuidance.js +6 -6
  5. package/dist/core/session/settingsFileProtocol.js +1 -1
  6. package/dist/mcp/prompts.js +10 -4
  7. package/dist/mcp/resources.js +1 -1
  8. package/dist/mcp/server.js +2 -2
  9. package/dist/mcp/serverInfo.js +13 -12
  10. package/dist/mcp/toolNames.js +46 -46
  11. package/dist/mcp/tools/action/prepareSuiActionReview.js +4 -4
  12. package/dist/mcp/tools/read/deepbookReadTools.js +1 -1
  13. package/dist/mcp/tools/read/index.js +2 -2
  14. package/dist/mcp/tools/read/readToolHelpers.js +1 -1
  15. package/dist/mcp/tools/read/serverStatusTools.js +4 -5
  16. package/dist/mcp/tools/read/transactionActivityTools.js +3 -3
  17. package/dist/mcp/tools/session/walletConnectionTools.js +5 -5
  18. package/dist/mcp-app/account.html +1 -1
  19. package/dist/mcp-app/chart.html +1 -1
  20. package/dist/mcp-app/connect.html +1 -1
  21. package/dist/mcp-app/receipt.html +1 -1
  22. package/dist/mcp-app/review.html +1 -1
  23. package/dist/mcp-app/settings.html +1 -1
  24. package/dist/runtime/application.js +2 -2
  25. package/dist/runtime/config.js +3 -6
  26. package/dist/runtime/localSettingsService.js +4 -4
  27. package/dist/runtime/shared/control.js +2 -2
  28. package/dist/runtime/smokeMainnetRead.js +18 -18
  29. package/dist/runtime/smokeReview.js +7 -7
  30. package/dist/runtime/start.js +1 -1
  31. package/docs/AGENT_BEHAVIOR.md +78 -77
  32. package/docs/LOCAL_DB_ARCHITECTURE.md +5 -7
  33. package/docs/MCP_SETUP.md +76 -73
  34. package/docs/MCP_TOOLS.md +103 -102
  35. package/docs/SDK_API.md +8 -5
  36. package/docs/SIGNABLE_ADAPTER_CONTRACT.md +6 -6
  37. package/docs/TRANSACTION_ACTIVITY_LOG.md +7 -7
  38. package/docs/UTILITY_INDEX.md +59 -59
  39. package/docs/WALLET_CONNECTION.md +6 -5
  40. package/package.json +1 -1
  41. package/protocols/deepbook-margin.md +1 -1
  42. package/protocols/deepbook-v3.md +2 -2
@@ -3588,4 +3588,4 @@ zebra
3588
3588
  zero
3589
3589
  zone
3590
3590
  zoo`.split(`
3591
- `)),lv={0:`ED25519`,1:`Secp256k1`,2:`Secp256r1`,3:`MultiSig`,5:`ZkLogin`,6:`Passkey`},uv=e=>Object.freeze(e());function dv(e){return e instanceof Uint8Array||ArrayBuffer.isView(e)&&e.constructor.name===`Uint8Array`&&`BYTES_PER_ELEMENT`in e&&e.BYTES_PER_ELEMENT===1}function fv(e){if(!dv(e))throw TypeError(`Uint8Array expected`)}function pv(e,t){return Array.isArray(t)?t.length===0?!0:e?t.every(e=>typeof e==`string`):t.every(e=>Number.isSafeInteger(e)):!1}function mv(e){if(typeof e!=`function`)throw TypeError(`function expected`);return!0}function hv(e,t){if(typeof t!=`string`)throw TypeError(`${e}: string expected`);return!0}function gv(e,t=`number`){if(typeof e!=`number`)throw TypeError(`${t}: expected number, got ${typeof e}`);if(!Number.isSafeInteger(e))throw RangeError(`${t}: expected safe integer, got ${e}`)}function _v(e,t){if(!pv(!1,t))throw TypeError(`${e}: array of numbers expected`)}var vv=(()=>{let e=[];for(let t=0;t<40;t++)e.push(2**t);return e})();function yv(e,t=e.length){let n=Array(t);for(let r=0;r<t;r++)n[r]=e[r];return n}var bv=(()=>{try{let e=new TextDecoder;return e.decode(Uint8Array.of(65,48,43,127))===`A0+`?e:void 0}catch{return}})(),xv=8192;function Sv(e){let t=e.length;if(bv!==void 0&&t>=12)return bv.decode(e);if(t<=xv)return String.fromCharCode.apply(null,e);let n=``;for(let r=0;r<t;r+=xv)n+=String.fromCharCode.apply(null,e.subarray(r,r+xv));return n}function Cv(e){if(gv(e),e<=0||e>8)throw RangeError(`radix2: bits should be in (0..8]`);let t=vv[e]-1;return{encode:n=>{fv(n);let r=n.length,i=new Uint8Array(Math.ceil(r*8/e)),a=0,o=0,s=0;for(let c=0;c<r;)for(c+2<r?(a=a<<24|n[c]<<16|n[c+1]<<8|n[c+2],o+=24,c+=3):(a=(a<<8|n[c])&65535,o+=8,c++);o-=e,i[s++]=a>>o&t,!(o<e););return o>0&&(i[s]=a<<e-o&t),i},decode:t=>{let n=t.length,r=new Uint8Array(Math.floor(n*e/8)),i=0,a=0,o=0;for(let s=0;s<n;s++)for(i=(i<<e|t[s])&65535,a+=e;a>=8;a-=8)r[o++]=i>>a-8&255;if(i=i<<8-a&255,a>=e)throw Error(`Excess padding`);if(i>0)throw Error(`Non-zero padding: ${i}`);return r}}}function wv(e,t){let n=e.length;if(n>128)throw Error(`alphabet: max 128 letters`);let r=new Uint8Array(n),i=new Int8Array(128).fill(-1);for(let t=0;t<n;t++){let n=e.charCodeAt(t);if(e.codePointAt(t)!==n||n>127)throw Error(`alphabet: single-char ASCII letters only`);r[t]=n,i[n]=t}if(t!==void 0)for(let e of Object.keys(t)){let n=e.charCodeAt(0),r=i[t[e].charCodeAt(0)];if(e.length!==1||n>127||r===void 0||r===-1)throw Error(`alphabet: invalid alias ${e}`);i[n]=r}return{encode:e=>{let t=new Uint8Array(e.length);for(let n=0;n<e.length;n++){let i=e[n],a=r[i];if(a===void 0)throw Error(`alphabet.encode: invalid digit ${i}`);t[n]=a}return Sv(t)},decode:t=>{hv(`decode`,t);let n=t.length,r=new Uint8Array(n);for(let a=0;a<n;a++){let n=t.charCodeAt(a),o=n<128?i[n]:-1;if(o===-1)throw Error(`Unknown letter "${t[a]}". Allowed: ${e}`);r[a]=o}return r}}}function Tv(e){return mv(e),function(...t){try{return e.apply(null,t)}catch{}}}var Ev=wv(`qpzry9x8gf2tvdw0s3jn54khce6mua7l`),Dv=/^[\x21-\x60\x7b-\x7e]+$/;function Ov(e,t){for(let n=0;n<t.length;n++){let r=t.charCodeAt(n);if(r<33||r>126)throw Error(`${e}: printable ASCII expected`)}}function kv(e){let t=e.length,n=new Uint8Array(t);for(let r=0;r<t;r++){let t=e[r];if(t<0||t>=32)throw Error(`alphabet.encode: invalid digit ${t}`);n[r]=t}return n}var Av=[996825010,642813549,513874426,1027748829,705979059];function jv(e){let t=e>>25,n=(e&33554431)<<5;for(let e=0;e<Av.length;e++)(t>>e&1)==1&&(n^=Av[e]);return n}function Mv(e,t,n=1){let r=e.length,i=1;for(let t=0;t<r;t++){let n=e.charCodeAt(t);if(n<33||n>126)throw Error(`Invalid prefix (${e})`);i=jv(i)^n>>5}i=jv(i);for(let t=0;t<r;t++)i=jv(i)^e.charCodeAt(t)&31;for(let e of t)i=jv(i)^e;for(let e=0;e<6;e++)i=jv(i);i^=n;let a=new Uint8Array(6);for(let e=0;e<6;e++)a[e]=i>>>5*(5-e)&31;return Ev.encode(a)}function Nv(e){let t=e===`bech32`?1:734539939,n=Cv(5),r=e=>{fv(e);let t=e.length,n=Array(Math.ceil(t*8/5)),r=0,i=0,a=0;for(let o=0;o<t;o++)for(r=r<<8|e[o],i+=8;i>=5;i-=5)n[a++]=r>>i-5&31;return i>0&&(n[a]=r<<5-i&31),n},i=e=>{_v(`radix2.decode`,e);let t=e.length,r=new Uint8Array(t);for(let n=0;n<t;n++){let t=e[n];if(t<0||t>=32)throw Error(`convertRadix2: invalid word=${t}`);r[n]=t}return n.decode(r)},a=Tv(i);function o(e,n,r=90){hv(`bech32.encode prefix`,e),r!==!1&&gv(r,`limit`),dv(n)&&(n=yv(n)),_v(`bech32.encode`,n);let i=e.length;if(i===0)throw TypeError(`Invalid prefix length ${i}`);let a=i+7+n.length;if(r!==!1&&a>r)throw TypeError(`Length ${a} exceeds limit ${r}`);Ov(`bech32.encode prefix`,e);let o=e.toLowerCase(),s=Mv(o,n,t);return`${o}1${Ev.encode(kv(n))}${s}`}function s(e,n=90){hv(`bech32.decode input`,e),n!==!1&&gv(n,`limit`);let r=e.length;if(r<8||n!==!1&&r>n)throw TypeError(`invalid string length ${r}, expected (8..${n})`);let i=e.toLowerCase();if(e!==i&&!Dv.test(e))throw Ov(`bech32.decode input`,e),Error(`mixed-case string not allowed`);let a=i.lastIndexOf(`1`);if(a===0||a===-1)throw Error(`invalid separator "1"`);let o=i.slice(0,a),s=i.slice(a+1);if(s.length<6)throw Error(`invalid data length`);let c=Ev.decode(s),l=yv(c,c.length-6),u=Mv(o,l,t);if(!s.endsWith(u))throw Error(`Invalid checksum in ${e}`);return{prefix:o,words:l}}let c=Tv(s);function l(e,t=90){let{prefix:n,words:r}=s(e,t);return{prefix:n,words:r,bytes:i(r)}}function u(e,t){return o(e,r(t))}return{encode:o,decode:s,encodeFromBytes:u,decodeToBytes:l,decodeUnsafe:c,fromWords:i,fromWordsUnsafe:a,toWords:r}}var Pv=uv(()=>Nv(`bech32`));function Fv(e){let{prefix:t,words:n}=Pv.decode(e);if(t!==`suiprivkey`)throw Error(`invalid private key prefix`);let r=new Uint8Array(Pv.fromWords(n)),i=r.slice(1);return{scheme:lv[r[0]],secretKey:i}}var Iv=`external-proposal-alpha-2026-05-25`,Lv=`proposal-review-model-alpha-2026-05-25`,Rv=F().refine(e=>{let t=new Date(e);return!Number.isNaN(t.getTime())&&t.toISOString()===e},`Expected ISO 8601 UTC timestamp`),zv=/transaction\s*bytes?|transactionBytes|tx\s*bytes?|serialized\s*transaction|serializedTransaction|signed\s*transaction|signing\s*request|signingRequest|wallet\s*authorization|walletAuthorization|private\s*key|privateKey|secret\s*key|secretKey|seed\s*phrase|mnemonic|suiprivkey|signature|route[-_\s]*selected|routeSelectedPlan|bcs\s*transaction|programmable\s*transaction/i,Bv=/(?:0x[0-9a-fA-F]{160,}|[A-Za-z0-9+/_=-]{160,})/,Vv=/suiprivkey1[023456789acdefghjklmnpqrstuvwxyz]+/gi,Hv=/(^|[^0-9a-fA-F])(?:0x)?[0-9a-fA-F]{64}($|[^0-9a-fA-F])/,Uv=/(^|[^A-Za-z0-9+/_=-])(?:[A-Za-z0-9+/]{43}=|[A-Za-z0-9+/]{44}|[A-Za-z0-9_-]{43,44})($|[^A-Za-z0-9+/_=-])/,Wv=/^(?:0|[1-9][0-9]*)(?:\.[0-9]+)?$/,Gv=[12,15,18,21,24];function Kv(e,t,n={}){return F().min(1).max(e).superRefine((e,r)=>{(zv.test(e)||Bv.test(e)||Jv(e)||Yv(e)||!n.allowRawSecretLikeText&&Xv(e))&&r.addIssue({code:`custom`,message:`${t} must not contain executable, signing, private-key, mnemonic, route-selected, or encoded secret-like material`})})}function qv(e,t){return Kv(e,t,{allowRawSecretLikeText:!0})}function Jv(e){return(e.match(Vv)??[]).some(e=>{try{return Fv(e.toLowerCase()),!0}catch{return e.toLowerCase().startsWith(`suiprivkey1`)}})}function Yv(e){let t=e.normalize(`NFKD`).toLowerCase().replace(/[^a-z]+/g,` `).trim().split(/\s+/).filter(Boolean);for(let e of Gv)if(!(t.length<e)){for(let n=0;n<=t.length-e;n+=1)if(sv(t.slice(n,n+e).join(` `),cv))return!0}return!1}function Xv(e){return Hv.test(e)||Uv.test(e)}var Zv=Kv(80,`amountDisplay`).refine(e=>Wv.test(e)&&/[1-9]/.test(e),{message:`Expected a positive decimal display amount`}),Qv=V({kind:G([`mcp_server`,`ai_client`,`user`,`other`]),name:Kv(120,`source.name`),reference:Kv(256,`source.reference`).optional()}).strict(),$v=V({address:m_.optional(),label:Kv(120,`party.label`).optional()}).strict().refine(e=>e.address!==void 0||e.label!==void 0,{message:`Expected address or label`}),ey=V({amountDisplay:Zv,amountKind:K(`display_proposal`).default(`display_proposal`),symbol:Kv(64,`amount.symbol`).optional(),coinType:qv(512,`amount.coinType`).optional(),denomination:Kv(64,`amount.denomination`).optional()}).strict(),ty=V({packageId:qv(128,`action.target.packageId`).optional(),module:Kv(128,`action.target.module`).optional(),function:Kv(128,`action.target.function`).optional(),objectId:qv(128,`action.target.objectId`).optional(),label:Kv(120,`action.target.label`).optional()}).strict().refine(e=>e.packageId!==void 0||e.module!==void 0||e.function!==void 0||e.objectId!==void 0||e.label!==void 0,{message:`Expected at least one action target field`}),ny=V({direction:G([`outgoing`,`expected_incoming`,`fee`]),amount:ey,recipient:$v.optional(),description:Kv(512,`assetFlow.description`).optional()}).strict(),ry=V({id:Kv(120,`proposal.id`),source:Qv,network:K(`sui:mainnet`),createdAt:Rv,expiresAt:Rv.optional(),purpose:Kv(512,`purpose`),assumptions:B(Kv(512,`assumptions[]`)).max(20).optional(),requiredUserChoices:B(Kv(512,`requiredUserChoices[]`)).max(20).optional()}).strict(),iy=mc(`type`,[ry.extend({type:K(`payment`),payment:V({amount:ey,recipient:$v,target:Kv(512,`payment.target`).optional()}).strict()}).strict(),ry.extend({type:K(`sui_action`),action:V({actionKind:Kv(120,`action.actionKind`),target:ty,recipient:$v.optional(),assetFlow:B(ny).max(20).optional()}).strict()}).strict()]),ay=V({id:F(),label:F(),status:G([`pass`,`warning`,`fail`]),message:F(),source:G([`proposal`,`adapter`,`registry`,`quote`,`wallet`,`simulation`,`network`])}).strict(),oy=V({id:F(),label:F(),reason:F()}).strict(),sy=V({modelVersion:K(Lv),contractVersion:K(Iv),proposalId:F(),proposalType:G([`payment`,`sui_action`]),proposalSource:Qv,proposedAction:V({kind:G([`payment`,`sui_action`]),title:F(),purpose:F(),network:K(`sui:mainnet`),recipient:$v.optional(),target:U([F(),ty]).optional()}).strict(),assetFlow:V({outgoing:B(ey),expectedIncoming:B(ey),fees:B(ey)}).strict(),recipients:B($v),targets:B(U([F(),ty])),evidenceUsed:B(V({id:F(),label:F(),source:G([`external_proposal`,`local_schema`]),summary:F()}).strict()),missingEvidence:B(oy),requiredUserChoices:B(oy),unsupportedClaims:B(V({id:F(),label:F(),reason:F()}).strict()),rejectedExecutableFields:B(V({fieldName:F(),reason:F()}).strict()),freshness:V({proposalCreatedAt:Rv,proposalExpiresAt:Rv.optional(),evaluatedAt:Rv,status:G([`current`,`expired`,`created_in_future`,`expiry_not_provided`]),reason:F()}).strict(),blockingChecks:B(ay),nonSignableReason:V({code:K(`external_proposal_review_only`),message:F(),blockedCapabilities:B(F())}).strict()}).strict();V({requestedIntent:iy,implementationStatus:K(`read_only_review_only`),contractVersion:K(Iv)}).strict();var cy=[`adapter_not_implemented`,`producer_stage_missing`,`wallet_review_contract_emit_missing`,`network_mismatch`,`insufficient_balance`,`insufficient_gas`,`allowlist_violation`,`asset_mismatch`,`amount_mismatch`,`wallet_mismatch`,`unsupported_action`,`object_resolution_failed`,`proposal_review_only`],ly=[`review_evidence_stale`,`quote_stale`,`quote_unavailable`,`simulation_transient_failure`,`review_update_failed`,`wallet_connection_changed`],uy=[`proposed`,`awaiting_wallet`,`wallet_connected`,`ready_for_wallet_review`,`refresh_required`,`blocked`,`expired`],dy=[`humanReadableReview`,`simulation`,`transactionReviewData`,`ptbVisualization`,`assetFlowActual`,`beforeAfterBalance`],fy=G([`client.core.simulateTransaction`,`client.transactionExecutionService.simulateTransaction`]),py=`ptb-visualization-contract-alpha-2026-05-25`,my=[`proposedAction`,`assetFlow`,`recipients`,`targets`,`evidenceUsed`,`missingEvidence`,`requiredUserChoices`,`unsupportedClaims`,`freshness`,`blockingChecks`],hy=[`effects`,`balanceChanges`,`objectTypes`,`transaction`],gy=[`transaction_bytes`,`serialized_transaction`,`wallet_signature_request`,`private_key_material`,`wallet_authorization`,`signing_data`,`signing_readiness`,`payment_execution_readiness`],_y=[`transaction_building_input`,`wallet_authorization`,`signing_data`,`signing_readiness`,`payment_execution_readiness`,`route_recommendation`],vy=p_,yy=`MIST`,by=[`checkedAt`,`expiresAt`],xy=[`checkedAt`,`expiryStatus`],Sy=[`rawAmount`,`asset`,`amountRole`],Cy=[`minOutRaw`,`asset`,`amountRole`],wy=[`gasBudgetRaw`,`asset`,`amountRole`],Ty=[`gasUsedRaw`,`asset`,`amountRole`],Ey=[`checkedAt`,`gasResolutionStatus`,`unresolvedReason`],Dy=[`balanceChanges`,`asset`,`amountRole`],Oy=[`coinType`,`decimals`],ky=[`quoteEvidenceId`,`minOutRaw`],Ay=[`maxSlippageBps`,`userSelection`],jy=[`maxSlippageBps`,`minOutRaw`],My=[`ownerAccount`,`objects`],Ny=[`pinned_sdk_registry`,`verified_mainnet_onchain_metadata`,`wallet_account_read`,`quote_evidence`,`review_time_simulation`,`validated_request_fact`,`user_explicit_choice`],Py=[`input`,`expected_output`,`minimum_output`,`gas_budget`,`gas_used`,`fee`,`balance_delta`],Fy={input:{kinds:[`validated_request_fact`,`wallet_account_read`,`user_explicit_choice`],fields:Sy},expected_output:{kinds:[`quote_evidence`,`review_time_simulation`],fields:Sy},minimum_output:{kinds:[`quote_evidence`],fields:Cy},gas_budget:{kinds:[`review_time_simulation`],fields:wy},gas_used:{kinds:[`review_time_simulation`],fields:Ty},fee:{kinds:[`review_time_simulation`],fields:Sy},balance_delta:{kinds:[`review_time_simulation`],fields:Dy}},Iy={pinned_sdk_metadata:{kinds:[`pinned_sdk_registry`],fields:Oy},verified_mainnet_onchain_metadata:{kinds:[`verified_mainnet_onchain_metadata`],fields:Oy}},Ly={user_explicit:{kinds:[`user_explicit_choice`],fields:Ay},adapter_policy_from_quote_evidence:{kinds:[`quote_evidence`],fields:jy}},Ry={kinds:[`review_time_simulation`],fields:Ey},zy={kinds:[`quote_evidence`],fields:ky},By={kinds:[`validated_request_fact`],fields:by},Vy={kinds:[`validated_request_fact`],fields:xy},Hy={raw_quantity_amount:{byRole:Fy},unit_metadata:{bySource:Iy},gas_unresolved_status:Ry,expiry_status:{current:By,expired:By,not_provided:Vy,not_applicable:Vy},quote_min_out:zy,slippage_policy:{bySource:Ly},object_ownership:{kinds:[`wallet_account_read`],fields:My},simulation_result:{kinds:[`review_time_simulation`],fields:hy}},Uy={gasBudgetClaimId:{factKind:`raw_quantity_amount`,role:`gas_budget`,assetCoinType:vy,rawUnit:yy},gasUsedClaimId:{factKind:`raw_quantity_amount`,role:`gas_used`,assetCoinType:vy,rawUnit:yy},gasObjectOwnershipClaimId:{factKind:`object_ownership`,ownership:`owned_by_account`}},Wy=F().refine(e=>{let t=new Date(e);return!Number.isNaN(t.getTime())&&t.toISOString()===e},`Expected ISO 8601 UTC timestamp`),Gy=S_(`unsigned integer`),Ky=F().regex(/^0x[0-9a-fA-F]{1,64}$/,{message:`Expected a Sui object id`}),qy=F().min(1).max(512).refine(e=>{try{return T_(e)===e}catch{return!1}},`Expected a normalized Sui struct tag coin type`),X=F().min(1).max(120),Jy=V({symbol:F().min(1).max(64).optional(),coinType:qy}).strict(),Yy=/transaction\s*bytes?|tx\s*bytes?|serialized\s*transaction|serializedTransaction|signed\s*transaction|signing\s*request|signingRequest|wallet\s*authorization|walletAuthorization|private\s*key|privateKey|secret\s*key|secretKey|seed\s*phrase|mnemonic|suiprivkey|signature|bcs\s*transaction/i,Xy=/(?:0x[0-9a-fA-F]{160,}|[A-Za-z0-9+/_=-]{160,})/;function Zy(e,t){return F().min(1).max(e).superRefine((e,n)=>{(Yy.test(e)||Xy.test(e))&&n.addIssue({code:`custom`,message:`${t} must not contain executable transaction, signing, private-key, mnemonic, or long encoded material`})})}function Qy(e,t){let n=new Set(e);return t.filter(e=>!n.has(e))}function $y(e,t,n,r,i){let a=Qy(t,n);a.length!==0&&e.addIssue({code:`custom`,path:r,message:`${i} must include ${a.join(`, `)}`})}function eb(e,t,n,r,i){$y(e,t,n,r,i)}function tb(e,t,n){e.addIssue({code:`custom`,path:t,message:`${n} must match referenced evidence claim`})}function Z(e,t,n,r,i){t!==n&&tb(e,r,i)}function nb(e,t,n,r,i){let a=new Set(t),o=new Set(n);if(a.size!==o.size)tb(e,r,i);else for(let t of a)if(!o.has(t)){tb(e,r,i);return}}function rb(e,t,n,r,i){(t.symbol!==n.symbol||t.coinType!==n.coinType)&&tb(e,r,i)}function ib(e,t,n,r,i){try{T_(t.coinType)!==n&&tb(e,r,i)}catch{tb(e,r,i)}}var ab=V({kind:G([`natural_language_intent`,`external_proposal`,`mcp_action_request`,`local_review_request`]),sourceId:F().min(1).max(160),capturedAt:Wy,authority:K(`untrusted_until_review_regenerates_and_verifies`),userSelectionSource:G([`user_explicit`,`prior_user_explicit_context`]).optional()}).strict(),ob=V({id:X,kind:G(Ny),network:K(`sui:mainnet`),source:F().min(1).max(240),verifiedAt:Wy,fields:B(F().min(1).max(120)).min(1)}).strict(),sb=mc(`factKind`,[V({id:X,factKind:K(`raw_quantity_amount`),sourceEvidenceId:X,role:G(Py),asset:Jy,rawAmount:Gy}).strict(),V({id:X,factKind:K(`unit_metadata`),sourceEvidenceId:X,source:G([`pinned_sdk_metadata`,`verified_mainnet_onchain_metadata`]),coinType:qy,decimals:L().int().min(0).max(255)}).strict(),V({id:X,factKind:K(`gas_unresolved_status`),sourceEvidenceId:X,checkedAt:Wy,status:K(`unresolved`),reason:F().min(1).max(240)}).strict(),V({id:X,factKind:K(`expiry_status`),sourceEvidenceId:X,checkedAt:Wy,status:G([`current`,`expired`,`not_provided`,`not_applicable`]),expiresAt:Wy.optional(),reason:F().min(1).max(240).optional()}).strict(),V({id:X,factKind:K(`quote_min_out`),sourceEvidenceId:X,quoteEvidenceId:F().min(1).max(120),minOutRaw:Gy}).strict(),V({id:X,factKind:K(`slippage_policy`),sourceEvidenceId:X,policySource:G([`user_explicit`,`adapter_policy_from_quote_evidence`]),maxSlippageBps:L().int().min(0).max(1e4),minOutRaw:Gy.optional()}).strict(),V({id:X,factKind:K(`object_ownership`),sourceEvidenceId:X,objectId:Ky,ownerAccount:m_,ownership:G([`owned_by_account`,`shared_object`,`immutable_or_package`,`not_owned_by_account`])}).strict(),V({id:X,factKind:K(`simulation_result`),sourceEvidenceId:X,provider:fy,checksEnabled:K(!0),simulatedAt:Wy,status:G([`success`,`failed`,`unavailable`]),requiredFields:B(G(hy)).min(hy.length),missingFields:B(G(hy)).default([]),failureReason:F().min(1).max(240).optional()}).strict()]),cb=V({id:X,role:G(Py),asset:Jy,rawAmount:Gy,unit:V({decimals:L().int().min(0).max(255),source:G([`pinned_sdk_metadata`,`verified_mainnet_onchain_metadata`]),sourceField:F().min(1).max(160),unitClaimId:X}).strict(),amountClaimId:X,displayOnly:V({amountDisplay:F().min(1).max(120),reason:K(`presentation_only_not_signing_input`)}).strict().optional()}).strict(),lb=V({objectId:Ky,ownerAccount:m_,ownershipClaimId:X}).strict(),ub=V({source:K(`review_time_simulation`),checkedAt:Wy,gasBudgetRaw:Gy.optional(),gasBudgetClaimId:X.optional(),gasUsedRaw:Gy.optional(),gasUsedClaimId:X.optional(),gasObjects:B(lb).optional(),unresolvedReason:F().min(1).max(240).optional(),unresolvedClaimId:X.optional()}).strict().superRefine((e,t)=>{let n=e.gasBudgetRaw!==void 0||e.gasUsedRaw!==void 0;!n&&e.unresolvedReason===void 0&&t.addIssue({code:`custom`,message:`Expected gas evidence or unresolvedReason`}),n&&e.unresolvedReason!==void 0&&t.addIssue({code:`custom`,path:[`unresolvedReason`],message:`Resolved gas quantities must not include unresolvedReason`}),e.gasBudgetRaw!==void 0&&e.gasBudgetClaimId===void 0&&t.addIssue({code:`custom`,path:[`gasBudgetClaimId`],message:`gasBudgetRaw requires gasBudgetClaimId`}),e.gasBudgetRaw===void 0&&e.gasBudgetClaimId!==void 0&&t.addIssue({code:`custom`,path:[`gasBudgetClaimId`],message:`gasBudgetClaimId requires gasBudgetRaw`}),e.gasUsedRaw!==void 0&&e.gasUsedClaimId===void 0&&t.addIssue({code:`custom`,path:[`gasUsedClaimId`],message:`gasUsedRaw requires gasUsedClaimId`}),e.gasUsedRaw===void 0&&e.gasUsedClaimId!==void 0&&t.addIssue({code:`custom`,path:[`gasUsedClaimId`],message:`gasUsedClaimId requires gasUsedRaw`}),e.unresolvedReason!==void 0&&e.unresolvedClaimId===void 0&&t.addIssue({code:`custom`,path:[`unresolvedClaimId`],message:`unresolvedReason requires unresolvedClaimId`}),e.unresolvedReason===void 0&&e.unresolvedClaimId!==void 0&&t.addIssue({code:`custom`,path:[`unresolvedClaimId`],message:`unresolvedClaimId requires unresolvedReason`})}),db=mc(`status`,[V({checkedAt:Wy,status:K(`current`),expiresAt:Wy,evidenceClaimId:X}).strict(),V({checkedAt:Wy,status:K(`expired`),expiresAt:Wy,evidenceClaimId:X}).strict(),V({checkedAt:Wy,status:K(`not_provided`),evidenceClaimId:X,reason:F().min(1).max(240),expiresAt:lc().optional()}).strict(),V({checkedAt:Wy,status:K(`not_applicable`),evidenceClaimId:X,reason:F().min(1).max(240),expiresAt:lc().optional()}).strict()]).superRefine((e,t)=>{e.status===`current`&&Date.parse(e.expiresAt)<=Date.parse(e.checkedAt)&&t.addIssue({code:`custom`,path:[`expiresAt`],message:`Current expiry evidence requires expiresAt after checkedAt`}),e.status===`expired`&&Date.parse(e.expiresAt)>Date.parse(e.checkedAt)&&t.addIssue({code:`custom`,path:[`expiresAt`],message:`Expired expiry evidence requires expiresAt at or before checkedAt`})}),fb=V({status:G([`required_and_verified`,`not_required_for_action`,`missing`,`stale`]),quoteEvidenceId:F().min(1).max(120).optional(),quoteEvidenceClaimId:X.optional(),maxSlippageBps:L().int().min(0).max(1e4).optional(),minOutRaw:Gy.optional(),policySource:G([`user_explicit`,`adapter_policy_from_quote_evidence`]).optional(),policyEvidenceClaimId:X.optional()}).strict().superRefine((e,t)=>{e.status===`required_and_verified`&&(e.quoteEvidenceId===void 0||e.quoteEvidenceClaimId===void 0||e.maxSlippageBps===void 0||e.minOutRaw===void 0||e.policySource===void 0||e.policyEvidenceClaimId===void 0)&&t.addIssue({code:`custom`,message:`Verified min-out evidence requires quoteEvidenceId, quoteEvidenceClaimId, maxSlippageBps, minOutRaw, policySource, and policyEvidenceClaimId`}),e.quoteEvidenceId!==void 0&&e.quoteEvidenceClaimId===void 0&&t.addIssue({code:`custom`,path:[`quoteEvidenceClaimId`],message:`quoteEvidenceId requires quoteEvidenceClaimId`}),e.quoteEvidenceId===void 0&&e.quoteEvidenceClaimId!==void 0&&t.addIssue({code:`custom`,path:[`quoteEvidenceClaimId`],message:`quoteEvidenceClaimId requires quoteEvidenceId`}),e.minOutRaw!==void 0&&e.quoteEvidenceClaimId===void 0&&t.addIssue({code:`custom`,path:[`quoteEvidenceClaimId`],message:`minOutRaw requires quoteEvidenceClaimId`}),e.maxSlippageBps!==void 0&&e.policySource===void 0&&t.addIssue({code:`custom`,path:[`policySource`],message:`maxSlippageBps requires policySource`}),e.policySource!==void 0&&e.policyEvidenceClaimId===void 0&&t.addIssue({code:`custom`,path:[`policyEvidenceClaimId`],message:`policySource requires policyEvidenceClaimId`}),e.policySource===void 0&&e.policyEvidenceClaimId!==void 0&&t.addIssue({code:`custom`,path:[`policyEvidenceClaimId`],message:`policyEvidenceClaimId requires policySource`})}),pb=V({checkedAt:Wy,ownerAccount:m_,objects:B(V({objectId:Ky,role:G([`input_coin`,`gas_coin`,`protocol_object`,`shared_object`,`receiving_object`]),ownership:G([`owned_by_account`,`shared_object`,`immutable_or_package`,`not_owned_by_account`]),evidenceClaimId:X}).strict()).min(1)}).strict(),mb=V({evidenceClaimId:X,transactionDigest:h_,provider:fy,checksEnabled:K(!0),simulatedAt:Wy,status:G([`success`,`failed`,`unavailable`]),requiredFields:B(G(hy)).min(hy.length),missingFields:B(G(hy)).default([]),failureReason:F().min(1).max(240).optional()}).strict().refine(e=>e.status!==`success`||e.missingFields.length===0,{message:`Successful simulation evidence must not have missing required fields`}).refine(e=>hy.every(t=>e.requiredFields.includes(t)),{message:`Simulation evidence must include every required simulation field`}).refine(e=>e.status===`success`||e.failureReason!==void 0,{message:`Failed or unavailable simulation evidence requires failureReason`}).refine(e=>e.status!==`success`||e.failureReason===void 0,{message:`Successful simulation evidence must not include failureReason`}),hb=V({fields:B(G(my)).min(my.length),transactionDigest:h_,source:K(`review_model_or_adapter_equivalent`),purpose:K(`human_review_before_wallet_authorization`)}).strict().refine(e=>my.every(t=>e.fields.includes(t)),{message:`Human-readable review fields must include every required review field`}),gb=V({runtimeStatus:K(`emitted_pre_handoff`),mcpAndReviewUiMayExpose:B(G([`human_readable_review`,`ptb_visualization_artifact`,`diagnostics`,`status_checks`])).min(1),prohibited:B(G(gy)).min(1)}).strict().superRefine((e,t)=>{eb(t,e.prohibited,gy,[`prohibited`],`prohibited`)}),_b=V({schemaVersion:K(1),adapterId:F().min(1).max(120),protocol:F().min(1).max(120),actionKind:F().min(1).max(120),network:K(`sui:mainnet`),inputProvenance:ab,sourceReferences:B(ob).min(1),evidenceClaims:B(sb).min(1),rawQuantities:B(cb).min(1),gas:ub,expiry:db,slippageOrMinOut:fb,objectOwnership:pb,simulation:mb,humanReadableReview:hb,outputBoundary:gb,reviewedTransactionDigest:h_}).strict().superRefine((e,t)=>{let n=new Set,r=new Map,i=new Map;e.sourceReferences.forEach((e,a)=>{n.has(e.id)&&t.addIssue({code:`custom`,path:[`sourceReferences`,a,`id`],message:`sourceReferences id must be unique: ${e.id}`}),n.add(e.id),r.has(e.id)||(r.set(e.id,e),i.set(e.id,a))});let a=new Set,o=new Map,s=new Map;e.evidenceClaims.forEach((e,n)=>{a.has(e.id)&&t.addIssue({code:`custom`,path:[`evidenceClaims`,n,`id`],message:`evidenceClaims id must be unique: ${e.id}`}),a.add(e.id),o.has(e.id)||(o.set(e.id,e),s.set(e.id,n))});let c=(e,n)=>{if(e===void 0)return;let i=r.get(e);if(i!==void 0)return i;t.addIssue({code:`custom`,path:n,message:`source evidence id must reference sourceReferences[].id: ${e}`})},l=(e,n,r,a)=>{if(e===void 0)return;let o=c(e,r);if(o===void 0)return;let s=i.get(e),l=s===void 0?r:[`sourceReferences`,s];n.kinds.includes(o.kind)||t.addIssue({code:`custom`,path:[...l,`kind`],message:`${a} source kind must be one of ${n.kinds.join(`, `)}`}),$y(t,o.fields,n.fields,[...l,`fields`],`${a} sourceReferences fields`)},u=(e,n,r,i)=>{if(e===void 0){t.addIssue({code:`custom`,path:r,message:`${i} must reference evidenceClaims[].id`});return}let a=o.get(e);if(a===void 0)t.addIssue({code:`custom`,path:r,message:`${i} must reference evidenceClaims[].id: ${e}`});else{if(a.factKind!==n){let a=s.get(e),o=a===void 0?r:[`evidenceClaims`,a,`factKind`];t.addIssue({code:`custom`,path:o,message:`${i} evidence claim factKind must be ${n}`})}return a}};if(e.evidenceClaims.forEach((e,n)=>{e.factKind===`raw_quantity_amount`&&l(e.sourceEvidenceId,Hy.raw_quantity_amount.byRole[e.role],[`evidenceClaims`,n,`sourceEvidenceId`],`evidenceClaims[${n}].raw_quantity_amount`),e.factKind===`unit_metadata`&&l(e.sourceEvidenceId,Hy.unit_metadata.bySource[e.source],[`evidenceClaims`,n,`sourceEvidenceId`],`evidenceClaims[${n}].unit_metadata`),e.factKind===`gas_unresolved_status`&&l(e.sourceEvidenceId,Hy.gas_unresolved_status,[`evidenceClaims`,n,`sourceEvidenceId`],`evidenceClaims[${n}].gas_unresolved_status`),e.factKind===`expiry_status`&&(l(e.sourceEvidenceId,Hy.expiry_status[e.status],[`evidenceClaims`,n,`sourceEvidenceId`],`evidenceClaims[${n}].expiry_status`),(e.status===`current`||e.status===`expired`)&&e.expiresAt===void 0&&t.addIssue({code:`custom`,path:[`evidenceClaims`,n,`expiresAt`],message:`Current or expired expiry claim requires expiresAt`}),(e.status===`not_provided`||e.status===`not_applicable`)&&e.reason===void 0&&t.addIssue({code:`custom`,path:[`evidenceClaims`,n,`reason`],message:`Unavailable expiry claim requires reason`}),(e.status===`not_provided`||e.status===`not_applicable`)&&e.expiresAt!==void 0&&t.addIssue({code:`custom`,path:[`evidenceClaims`,n,`expiresAt`],message:`Unavailable expiry claim must not include expiresAt`}),e.status===`current`&&e.expiresAt!==void 0&&Date.parse(e.expiresAt)<=Date.parse(e.checkedAt)&&t.addIssue({code:`custom`,path:[`evidenceClaims`,n,`expiresAt`],message:`Current expiry claim requires expiresAt after checkedAt`}),e.status===`expired`&&e.expiresAt!==void 0&&Date.parse(e.expiresAt)>Date.parse(e.checkedAt)&&t.addIssue({code:`custom`,path:[`evidenceClaims`,n,`expiresAt`],message:`Expired expiry claim requires expiresAt at or before checkedAt`})),e.factKind===`quote_min_out`&&l(e.sourceEvidenceId,Hy.quote_min_out,[`evidenceClaims`,n,`sourceEvidenceId`],`evidenceClaims[${n}].quote_min_out`),e.factKind===`slippage_policy`&&(l(e.sourceEvidenceId,Hy.slippage_policy.bySource[e.policySource],[`evidenceClaims`,n,`sourceEvidenceId`],`evidenceClaims[${n}].slippage_policy`),e.policySource===`adapter_policy_from_quote_evidence`&&e.minOutRaw===void 0&&t.addIssue({code:`custom`,path:[`evidenceClaims`,n,`minOutRaw`],message:`Adapter-derived slippage policy claim requires minOutRaw`})),e.factKind===`object_ownership`&&l(e.sourceEvidenceId,Hy.object_ownership,[`evidenceClaims`,n,`sourceEvidenceId`],`evidenceClaims[${n}].object_ownership`),e.factKind===`simulation_result`&&(l(e.sourceEvidenceId,Hy.simulation_result,[`evidenceClaims`,n,`sourceEvidenceId`],`evidenceClaims[${n}].simulation_result`),e.status===`success`&&e.missingFields.length!==0&&t.addIssue({code:`custom`,path:[`evidenceClaims`,n,`missingFields`],message:`Successful simulation claim must not have missing required fields`}),hy.every(t=>e.requiredFields.includes(t))||t.addIssue({code:`custom`,path:[`evidenceClaims`,n,`requiredFields`],message:`Simulation claim must include every required simulation field`}),e.status!==`success`&&e.failureReason===void 0&&t.addIssue({code:`custom`,path:[`evidenceClaims`,n,`failureReason`],message:`Failed or unavailable simulation claim requires failureReason`}),e.status===`success`&&e.failureReason!==void 0&&t.addIssue({code:`custom`,path:[`evidenceClaims`,n,`failureReason`],message:`Successful simulation claim must not include failureReason`}))}),e.rawQuantities.forEach((e,n)=>{let r=u(e.amountClaimId,`raw_quantity_amount`,[`rawQuantities`,n,`amountClaimId`],`rawQuantities[${n}].amountClaimId`);r?.factKind===`raw_quantity_amount`&&(Z(t,e.role,r.role,[`rawQuantities`,n,`role`],`rawQuantities[${n}].role`),Z(t,e.rawAmount,r.rawAmount,[`rawQuantities`,n,`rawAmount`],`rawQuantities[${n}].rawAmount`),rb(t,e.asset,r.asset,[`rawQuantities`,n,`asset`],`rawQuantities[${n}].asset`));let i=u(e.unit.unitClaimId,`unit_metadata`,[`rawQuantities`,n,`unit`,`unitClaimId`],`rawQuantities[${n}].unit.unitClaimId`);i?.factKind===`unit_metadata`&&(Z(t,e.unit.source,i.source,[`rawQuantities`,n,`unit`,`source`],`rawQuantities[${n}].unit.source`),Z(t,e.unit.decimals,i.decimals,[`rawQuantities`,n,`unit`,`decimals`],`rawQuantities[${n}].unit.decimals`),e.asset.coinType!==void 0&&Z(t,e.asset.coinType,i.coinType,[`rawQuantities`,n,`asset`,`coinType`],`rawQuantities[${n}].asset.coinType`))}),e.gas.gasBudgetRaw!==void 0){let n=u(e.gas.gasBudgetClaimId,`raw_quantity_amount`,[`gas`,`gasBudgetClaimId`],`gas.gasBudgetClaimId`);n?.factKind===`raw_quantity_amount`&&(Z(t,n.role,Uy.gasBudgetClaimId.role,[`gas`,`gasBudgetClaimId`],`gas.gasBudgetClaimId role`),ib(t,n.asset,Uy.gasBudgetClaimId.assetCoinType,[`gas`,`gasBudgetClaimId`],`gas.gasBudgetClaimId asset`),Z(t,e.gas.gasBudgetRaw,n.rawAmount,[`gas`,`gasBudgetRaw`],`gas.gasBudgetRaw`))}if(e.gas.gasUsedRaw!==void 0){let n=u(e.gas.gasUsedClaimId,`raw_quantity_amount`,[`gas`,`gasUsedClaimId`],`gas.gasUsedClaimId`);n?.factKind===`raw_quantity_amount`&&(Z(t,n.role,Uy.gasUsedClaimId.role,[`gas`,`gasUsedClaimId`],`gas.gasUsedClaimId role`),ib(t,n.asset,Uy.gasUsedClaimId.assetCoinType,[`gas`,`gasUsedClaimId`],`gas.gasUsedClaimId asset`),Z(t,e.gas.gasUsedRaw,n.rawAmount,[`gas`,`gasUsedRaw`],`gas.gasUsedRaw`))}if(e.gas.unresolvedReason!==void 0){let n=u(e.gas.unresolvedClaimId,`gas_unresolved_status`,[`gas`,`unresolvedClaimId`],`gas.unresolvedClaimId`);n?.factKind===`gas_unresolved_status`&&(Z(t,n.status,`unresolved`,[`gas`,`unresolvedClaimId`],`gas.unresolvedClaimId status`),Z(t,e.gas.checkedAt,n.checkedAt,[`gas`,`checkedAt`],`gas.checkedAt`),Z(t,e.gas.unresolvedReason,n.reason,[`gas`,`unresolvedReason`],`gas.unresolvedReason`))}e.gas.gasObjects?.forEach((e,n)=>{let r=u(e.ownershipClaimId,`object_ownership`,[`gas`,`gasObjects`,n,`ownershipClaimId`],`gas.gasObjects[${n}].ownershipClaimId`);r?.factKind===`object_ownership`&&(Z(t,e.objectId,r.objectId,[`gas`,`gasObjects`,n,`objectId`],`gas.gasObjects[${n}].objectId`),Z(t,e.ownerAccount,r.ownerAccount,[`gas`,`gasObjects`,n,`ownerAccount`],`gas.gasObjects[${n}].ownerAccount`),Z(t,r.ownership,Uy.gasObjectOwnershipClaimId.ownership,[`gas`,`gasObjects`,n,`ownershipClaimId`],`gas.gasObjects[${n}].ownershipClaimId ownership`))});let d=u(e.expiry.evidenceClaimId,`expiry_status`,[`expiry`,`evidenceClaimId`],`expiry.evidenceClaimId`);if(d?.factKind===`expiry_status`&&(Z(t,e.expiry.status,d.status,[`expiry`,`status`],`expiry.status`),Z(t,e.expiry.checkedAt,d.checkedAt,[`expiry`,`checkedAt`],`expiry.checkedAt`),e.expiry.status===`current`||e.expiry.status===`expired`?Z(t,e.expiry.expiresAt,d.expiresAt,[`expiry`,`expiresAt`],`expiry.expiresAt`):Z(t,e.expiry.reason,d.reason,[`expiry`,`reason`],`expiry.reason`)),e.slippageOrMinOut.quoteEvidenceClaimId!==void 0){let n=u(e.slippageOrMinOut.quoteEvidenceClaimId,`quote_min_out`,[`slippageOrMinOut`,`quoteEvidenceClaimId`],`slippageOrMinOut.quoteEvidenceClaimId`);n?.factKind===`quote_min_out`&&(Z(t,e.slippageOrMinOut.quoteEvidenceId,n.quoteEvidenceId,[`slippageOrMinOut`,`quoteEvidenceId`],`slippageOrMinOut.quoteEvidenceId`),Z(t,e.slippageOrMinOut.minOutRaw,n.minOutRaw,[`slippageOrMinOut`,`minOutRaw`],`slippageOrMinOut.minOutRaw`))}if(e.slippageOrMinOut.minOutRaw!==void 0&&(e.rawQuantities.some(t=>t.role===`minimum_output`&&t.rawAmount===e.slippageOrMinOut.minOutRaw)||t.addIssue({code:`custom`,path:[`slippageOrMinOut`,`minOutRaw`],message:`slippageOrMinOut.minOutRaw must match a minimum_output rawQuantities entry`})),e.slippageOrMinOut.policyEvidenceClaimId!==void 0){let n=u(e.slippageOrMinOut.policyEvidenceClaimId,`slippage_policy`,[`slippageOrMinOut`,`policyEvidenceClaimId`],`slippageOrMinOut.policyEvidenceClaimId`);n?.factKind===`slippage_policy`&&(Z(t,e.slippageOrMinOut.policySource,n.policySource,[`slippageOrMinOut`,`policySource`],`slippageOrMinOut.policySource`),Z(t,e.slippageOrMinOut.maxSlippageBps,n.maxSlippageBps,[`slippageOrMinOut`,`maxSlippageBps`],`slippageOrMinOut.maxSlippageBps`),n.policySource===`adapter_policy_from_quote_evidence`&&Z(t,e.slippageOrMinOut.minOutRaw,n.minOutRaw,[`slippageOrMinOut`,`minOutRaw`],`slippageOrMinOut.minOutRaw`))}e.objectOwnership.objects.forEach((n,r)=>{let i=u(n.evidenceClaimId,`object_ownership`,[`objectOwnership`,`objects`,r,`evidenceClaimId`],`objectOwnership.objects[${r}].evidenceClaimId`);i?.factKind===`object_ownership`&&(Z(t,n.objectId,i.objectId,[`objectOwnership`,`objects`,r,`objectId`],`objectOwnership.objects[${r}].objectId`),Z(t,e.objectOwnership.ownerAccount,i.ownerAccount,[`objectOwnership`,`ownerAccount`],`objectOwnership.ownerAccount`),Z(t,n.ownership,i.ownership,[`objectOwnership`,`objects`,r,`ownership`],`objectOwnership.objects[${r}].ownership`))});let f=u(e.simulation.evidenceClaimId,`simulation_result`,[`simulation`,`evidenceClaimId`],`simulation.evidenceClaimId`);f?.factKind===`simulation_result`&&(Z(t,e.simulation.provider,f.provider,[`simulation`,`provider`],`simulation.provider`),Z(t,e.simulation.checksEnabled,f.checksEnabled,[`simulation`,`checksEnabled`],`simulation.checksEnabled`),Z(t,e.simulation.simulatedAt,f.simulatedAt,[`simulation`,`simulatedAt`],`simulation.simulatedAt`),Z(t,e.simulation.status,f.status,[`simulation`,`status`],`simulation.status`),nb(t,e.simulation.requiredFields,f.requiredFields,[`simulation`,`requiredFields`],`simulation.requiredFields`),nb(t,e.simulation.missingFields,f.missingFields,[`simulation`,`missingFields`],`simulation.missingFields`),Z(t,e.simulation.failureReason,f.failureReason,[`simulation`,`failureReason`],`simulation.failureReason`))}).superRefine((e,t)=>{let n=e.reviewedTransactionDigest;Z(t,e.humanReadableReview.transactionDigest,n,[`humanReadableReview`,`transactionDigest`],`humanReadableReview.transactionDigest`),Z(t,e.simulation.transactionDigest,n,[`simulation`,`transactionDigest`],`simulation.transactionDigest`)}),vb=V({contractVersion:K(py),artifactKind:K(`ptb_visualization`),generatedAt:Wy,source:V({adapterId:F().min(1).max(120),planId:F().min(1).max(120).optional(),sourceKind:G([`review_time_generated_transaction_kind`,`review_time_ir`,`renderer_model`]),authority:K(`visualization_only_not_wallet_authorization`),renderer:V({name:F().min(1).max(120),packageName:F().min(1).max(120).optional(),version:F().min(1).max(80).optional()}).strict().optional()}).strict(),mermaid:V({diagramType:K(`flowchart`),text:Zy(2e4,`mermaid.text`),namedText:Zy(2e4,`mermaid.namedText`)}).strict(),diagnostics:B(V({severity:G([`info`,`warning`,`error`]),code:F().min(1).max(120),message:Zy(512,`diagnostics.message`),source:G([`adapter`,`renderer`,`schema`,`simulation`])}).strict()).default([]),unsupportedUse:B(G(_y)).min(1),executableMaterial:V({included:K(!1),policy:K(`mcp_and_review_ui_outputs_must_not_include_executable_transaction_material`)}).strict()}).strict().superRefine((e,t)=>{eb(t,e.unsupportedUse,_y,[`unsupportedUse`],`unsupportedUse`)}),yb=W(F(),z()),bb=G(cy),xb=G(ly);G([`ready_for_wallet_review`,`refresh_required`,`blocked`]);var Sb=G(uy);G([`proposed`,`awaiting_wallet`,`wallet_connected`,`ready_for_wallet_review`,`refresh_required`,`blocked`,`expired`,`awaiting_signature`,`submitting`,`awaiting_chain_result`,`stopped`,`request_failed`,`outcome_unknown`,`completed`]);var Cb=V({id:F(),label:F(),status:G([`pass`,`warning`,`fail`]),message:F(),source:G([`registry`,`quote`,`wallet`,`simulation`,`adapter`,`network`,`proposal`])}),wb=F().min(1),Tb=`human_readable_review`,Eb=`review_time_simulation`,Db=V({stageCatalogId:F().min(1),adapterId:F(),protocol:F(),actionKind:F(),completedStages:B(wb),missingStages:B(wb)}).strict().superRefine((e,t)=>{let n=Ob(e.completedStages);n&&t.addIssue({code:`custom`,path:[`completedStages`],message:`completedStages contains duplicate stage '${n}'`});let r=Ob(e.missingStages);r&&t.addIssue({code:`custom`,path:[`missingStages`],message:`missingStages contains duplicate stage '${r}'`});for(let n of e.completedStages)e.missingStages.includes(n)&&t.addIssue({code:`custom`,path:[`missingStages`],message:`stage '${n}' cannot be both completed and missing`})});function Ob(e){let t=new Set;for(let n of e){if(t.has(n))return n;t.add(n)}}var kb=V({symbol:F(),amount:F(),coinType:F().optional(),approx:R().optional()}).strict(),Ab=kb.extend({amountKind:K(`display_intent`).default(`display_intent`)}),jb=V({outgoing:B(Ab),expectedIncoming:B(Ab),minimumIncoming:B(Ab).optional(),fees:B(Ab).optional()}),Mb=V({outgoing:B(kb),expectedIncoming:B(kb),minimumIncoming:B(kb).optional(),fees:B(kb).optional()}),Nb=V({before:B(kb),after:B(kb),delta:B(kb)}),Pb=V({computationCostRaw:b_(`computationCostRaw`),storageCostRaw:b_(`storageCostRaw`),storageRebateRaw:b_(`storageRebateRaw`),nonRefundableStorageFeeRaw:b_(`nonRefundableStorageFeeRaw`)}).strict(),Fb=V({address:m_,coinType:F().min(1).max(512).refine(e=>{try{return T_(e)===e}catch{return!1}},`Expected a normalized Sui struct tag coin type`),amount:w_(`balanceChanges[].amount`)}).strict(),Ib=V({objectId:m_,objectType:F().min(1).max(512).optional(),inputState:F().min(1).max(80),outputState:F().min(1).max(80),idOperation:F().min(1).max(80)}).strict(),Lb=V({provider:fy,checksEnabled:R(),success:R(),gasCostSummary:Pb.optional(),balanceChanges:B(Fb).optional(),objectChanges:B(Ib).optional(),error:F().optional()}),Rb=Lb,zb=Lb.extend({checksEnabled:K(!0),success:K(!0),gasCostSummary:Pb,balanceChanges:B(Fb),objectChanges:B(Ib),error:lc().optional()}).strict(),Bb=V({role:G([`input`,`expected_output`,`minimum_output`,`fee`]),symbol:F(),coinType:F().min(1).max(512).refine(e=>{try{return T_(e),!0}catch{return!1}},`Expected a Sui struct tag coin type`),decimals:L().int().min(0).max(255),rawAmount:b_(`rawAmount`),rawAmountSource:K(`quote_policy_evidence`),displayAmount:F().optional(),displayAmountSource:K(`user_display_intent_not_signing_input`).optional()}).strict().superRefine((e,t)=>{e.displayAmount!==void 0&&e.displayAmountSource===void 0&&t.addIssue({code:`custom`,path:[`displayAmountSource`],message:`displayAmountSource is required when displayAmount is present`}),e.displayAmount===void 0&&e.displayAmountSource!==void 0&&t.addIssue({code:`custom`,path:[`displayAmount`],message:`displayAmount is required when displayAmountSource is present`})}),Vb=V({role:G([`connected_account`,`output_recipient`]),address:m_}).strict(),Hb=V({kind:K(`swap_output_asset`),symbol:F(),coinType:F().min(1).max(512).refine(e=>{try{return T_(e),!0}catch{return!1}},`Expected a Sui struct tag coin type`),protocol:F(),poolKey:F(),direction:G([`base_to_quote`,`quote_to_base`])}).strict(),Ub=V({id:F(),label:F(),source:U([G([`registry`,`quote`,`wallet`,`simulation`,`adapter`,`network`,`proposal`]),G([`transaction_material`,`digest_commitment`])]),summary:F()}).strict(),Wb=V({id:F(),label:F(),reason:F()}).strict(),Gb=V({proposedAction:V({title:F(),summary:F(),actionKind:F(),adapterId:F(),protocol:F(),network:K(`sui:mainnet`)}).strict(),recipients:B(Vb),evidenceUsed:B(Ub),missingEvidence:B(Wb),requiredUserChoices:B(Wb),unsupportedClaims:B(Wb),freshness:V({status:K(`current`),evaluatedAt:F(),expiresAt:F(),reason:F()}).strict(),blockingChecks:B(Cb)}).strict(),Kb=V({assetFlow:V({outgoing:B(Bb),expectedIncoming:B(Bb),minimumIncoming:B(Bb),fees:B(Bb)}).strict(),targets:B(Hb)}).strict(),qb=mc(`kind`,[Gb.extend({kind:K(`swap_human_readable_review`)}).merge(Kb)]),Jb=V({id:F(),actionKind:F(),adapterId:F(),protocol:F(),title:F(),summary:F(),assetFlowPreview:jb,reviewModel:sy.optional(),adapterData:yb,createdAt:F(),expiresAt:F().optional(),registryVersion:F().optional(),preliminaryChecks:B(Cb).optional()}),Yb=V({planId:F(),reviewSessionId:F(),account:m_,checks:B(Cb),assetFlowActual:Mb.optional(),beforeAfterBalance:Nb.optional(),simulation:Rb.optional(),humanReadableReview:qb.optional(),transactionReviewData:_b.optional(),ptbVisualization:vb.optional(),adapterLifecycle:Db.optional(),updatedAt:F()}),Xb=mc(`status`,[Yb.extend({status:K(`ready_for_wallet_review`),evidenceValidity:lc().optional(),blockedReason:lc().optional(),refreshReason:lc().optional()}),Yb.extend({status:K(`refresh_required`),evidenceValidity:K(`invalidated`).optional(),refreshReason:xb,blockedReason:lc().optional()}),Yb.extend({status:K(`blocked`),evidenceValidity:K(`invalidated`).optional(),blockedReason:bb,refreshReason:lc().optional()})]).superRefine((e,t)=>{if(e.evidenceValidity===`invalidated`)for(let n of dy)e[n]!==void 0&&t.addIssue({code:`custom`,path:[n],message:`Invalidated review evidence cannot carry current material-derived facts`});let n=e.adapterLifecycle;if(n!==void 0&&Zb(e,t),e.humanReadableReview!==void 0&&n===void 0&&t.addIssue({code:`custom`,path:[`humanReadableReview`],message:`humanReadableReview requires adapterLifecycle evidence stage provenance`}),e.simulation!==void 0&&n===void 0&&t.addIssue({code:`custom`,path:[`simulation`],message:`simulation requires adapterLifecycle evidence stage provenance`}),e.ptbVisualization!==void 0){let e=n?.completedStages??[];e.includes(`transaction_material_build_or_verify`)&&e.includes(`digest_commitment`)||t.addIssue({code:`custom`,path:[`ptbVisualization`],message:`ptbVisualization requires completed transaction material and digest commitment lifecycle stages`})}let r=e.status===`ready_for_wallet_review`;e.transactionReviewData!==void 0&&!r&&t.addIssue({code:`custom`,path:[`transactionReviewData`],message:`transactionReviewData is only valid on ready_for_wallet_review`}),e.status===`ready_for_wallet_review`&&n!==void 0&&(e.transactionReviewData===void 0&&t.addIssue({code:`custom`,path:[`transactionReviewData`],message:`ready_for_wallet_review requires an emitted wallet review contract`}),(n===void 0||n.missingStages.length!==0)&&t.addIssue({code:`custom`,path:[`adapterLifecycle`],message:`ready_for_wallet_review requires a completed adapterLifecycle with no missing stages`}),e.humanReadableReview===void 0&&t.addIssue({code:`custom`,path:[`humanReadableReview`],message:`ready_for_wallet_review requires humanReadableReview public evidence`}),e.simulation===void 0&&t.addIssue({code:`custom`,path:[`simulation`],message:`ready_for_wallet_review requires successful simulation public evidence`})),e.status===`blocked`&&(e.blockedReason===`producer_stage_missing`&&n===void 0&&t.addIssue({code:`custom`,path:[`adapterLifecycle`],message:`producer_stage_missing requires adapterLifecycle with at least one missing stage`}),e.blockedReason===`producer_stage_missing`&&n!==void 0&&n.missingStages.length===0&&t.addIssue({code:`custom`,path:[`blockedReason`],message:`producer_stage_missing requires at least one adapterLifecycle.missingStages entry`}),e.blockedReason===`wallet_review_contract_emit_missing`&&e.transactionReviewData!==void 0&&t.addIssue({code:`custom`,path:[`transactionReviewData`],message:`wallet_review_contract_emit_missing requires the wallet review contract to be absent`}),e.blockedReason===`wallet_review_contract_emit_missing`&&n===void 0&&t.addIssue({code:`custom`,path:[`adapterLifecycle`],message:`wallet_review_contract_emit_missing requires adapterLifecycle`}),e.blockedReason===`wallet_review_contract_emit_missing`&&n!==void 0&&n.missingStages.length!==0&&t.addIssue({code:`custom`,path:[`blockedReason`],message:`wallet_review_contract_emit_missing requires a completed adapterLifecycle with no missing stages`}),e.blockedReason===`wallet_review_contract_emit_missing`&&e.evidenceValidity!==`invalidated`&&e.humanReadableReview===void 0&&t.addIssue({code:`custom`,path:[`humanReadableReview`],message:`wallet_review_contract_emit_missing requires humanReadableReview public evidence`}),e.blockedReason===`wallet_review_contract_emit_missing`&&e.evidenceValidity!==`invalidated`&&e.simulation===void 0&&t.addIssue({code:`custom`,path:[`simulation`],message:`wallet_review_contract_emit_missing requires simulation public evidence`}))});function Zb(e,t){let n=e.adapterLifecycle;n&&(e.humanReadableReview!==void 0&&Qb(t,n,Tb,[`humanReadableReview`]),e.simulation!==void 0&&(Qb(t,n,Eb,[`simulation`]),Qb(t,n,Tb,[`simulation`]),$b(t,e.simulation,[`simulation`])),n.missingStages.includes(Eb)&&e.simulation!==void 0&&t.addIssue({code:`custom`,path:[`simulation`],message:`simulation public evidence cannot be present while review_time_simulation is missing`}),n.missingStages.includes(Tb)&&e.humanReadableReview!==void 0&&t.addIssue({code:`custom`,path:[`humanReadableReview`],message:`humanReadableReview public evidence cannot be present while human_readable_review is missing`}))}function Qb(e,t,n,r){t.completedStages.includes(n)||e.addIssue({code:`custom`,path:r,message:`${r.join(`.`)} requires completed adapterLifecycle stage '${n}'`}),t.missingStages.includes(n)&&e.addIssue({code:`custom`,path:r,message:`${r.join(`.`)} cannot be present while adapterLifecycle stage '${n}' is missing`})}function $b(e,t,n){zb.safeParse(t).success||e.addIssue({code:`custom`,path:n,message:`simulation public evidence requires a successful checks-enabled review-time simulation projection`})}var ex=V({topic:F().min(1),accounts:B(m_).min(1),methods:B(F()),chain:K(L_),expiresAt:F().datetime(),walletName:F().optional()}).strict(),tx=mc(`status`,[V({topic:F().min(1),version:L().int().positive(),status:K(`present`),session:ex}).strict(),V({topic:F().min(1),version:L().int().positive(),status:G([`absent`,`unusable`])}).strict()]),nx=V({runId:R_,sequence:L().int().positive(),observedAt:F().datetime()}).strict();nx.extend({sessions:B(tx)}).strict();var rx=V({kind:K(`wallet_service_recovery`),priorRunId:R_,admittedAt:F().datetime(),updatedAt:F().datetime()}),ix=U([rx.extend({phase:K(`stopping`)}).strict(),rx.extend({phase:K(`starting`),nextRunId:R_}).strict(),rx.extend({outcome:G([`available`,`failed`,`superseded`,`server_restarted`]),nextRunId:R_.optional(),message:F().optional()}).strict()]),ax=`A wallet connection provides account context; it is not a transaction approval or proof of address ownership.`,ox=`Review evidence is not a safety guarantee. Only an explicit card action and wallet approval may authorize this exact transaction.`,sx=W_.extend({pendingAction:K(`disconnect`).optional()});G([`input_required`,`awaiting_approval`,`disconnect_pending`]);var cx=V({action:K(`connect`),walletRunId:R_}).strict(),lx=V({action:K(`disconnect`),walletRunId:R_,connectionId:F().min(1)}).strict(),ux=V({action:K(`use_account`),walletRunId:R_,connectionId:F().min(1),account:m_}).strict(),dx=V({action:G([`prepare_review`,`request_signature`]),connectionId:F().min(1),walletRunId:R_,account:m_,reviewRevision:L().int().nonnegative()}).strict(),fx=U([cx,lx,ux,dx,V({action:G([`cancel`,`stop_connection`,`stop_waiting`,`read_result`])}).strict()]),px=U([cx,dx.extend({action:K(`prepare_review`)})]),mx=V({kind:G([`connect`,`review`]),mode:G([`connect`,`review`,`review_manage`]),allowedActions:B(G(q_)),actionRemainingMs:L().int().nonnegative(),nextStateReadAfterMs:L().int().nonnegative().optional(),automaticAction:px.optional(),observe:R(),walletAvailability:V_,walletObservation:nx.optional(),runtimeRecovery:ix.optional(),connectionConflict:G_.optional(),manageableConnectionIds:B(F().min(1)),connectionReconciliationRequired:K(!0).optional(),usableConnectionId:F().min(1).optional(),assetReadAccount:K_.optional(),acceptedWalletRunId:R_.optional(),progress:H_,boundary:G([ax,ox]),connections:B(sx),activeAccount:F().optional(),connection:sx.optional(),connectionAction:G([`connect`,`disconnect`]).optional(),review:V({reviewSessionId:F(),plan:Jb,reviewRevision:L().int().nonnegative(),status:Sb,account:F().optional(),preparing:R(),accountRequestPending:K(!0).optional(),error:F().optional(),state:Xb.optional()}).strict().optional(),request:I_.optional(),receipt:z().optional(),netGasMist:F().regex(/^-?[0-9]+$/).optional(),observationStopped:R().optional()}).strict().superRefine((e,t)=>{let n=e.connections.find(t=>t.connectionId===e.usableConnectionId);e.usableConnectionId&&(!n||n.status!==`connected`||e.walletAvailability.status!==`available`||e.connectionConflict||e.connectionReconciliationRequired||e.connections.some(e=>e.pendingAction||e.status===`awaiting_approval`))&&t.addIssue({code:`custom`,path:[`usableConnectionId`],message:`The usable connection must match current connection facts.`}),(new Set(e.manageableConnectionIds).size!==e.manageableConnectionIds.length||e.manageableConnectionIds.some(t=>!e.connections.some(e=>e.connectionId===t&&!e.pendingAction&&e.status!==`awaiting_approval`)))&&t.addIssue({code:`custom`,path:[`manageableConnectionIds`],message:`Management must name distinct recorded targets without pending operations.`}),e.connectionReconciliationRequired&&(e.usableConnectionId||e.assetReadAccount?.status===`available`||e.allowedActions.some(e=>[`connect`,`use_account`,`prepare_review`,`request_signature`].includes(e)))&&t.addIssue({code:`custom`,path:[`connectionReconciliationRequired`],message:`Unrecorded SDK connections cannot authorize connection or account use.`}),e.assetReadAccount?.status===`available`&&(!n||!n.accounts.includes(e.assetReadAccount.account)||e.activeAccount!==e.assetReadAccount.account)&&t.addIssue({code:`custom`,path:[`assetReadAccount`],message:`The default address must belong to the usable connection and stored selection.`})});function hx(e,t,n=!1){return e.connections.filter(r=>r.connectionId===e.usableConnectionId&&r.accounts.includes(t)&&(!n||r.methods.includes(`sui_signTransaction`)))}var gx=`sui-mcp.local-data`,_x=16777216,Q=F().uuid(),vx=L().int().nonnegative().safe(),yx=F().regex(/^[a-f0-9]{64}$/),bx=mc(`status`,[V({status:K(`no_file`)}).strict(),V({status:K(`receiving`)}).strict(),V({status:K(`checking`)}).strict(),V({status:K(`check_required`),message:F().min(1)}).strict(),V({status:K(`can_restore`)}).strict(),V({status:K(`cannot_restore`),reason:G([`invalid_backup`,`file_unavailable`,`wallet_request_unsettled`,`operation_busy`,`input_unavailable`,`check_failed`]),message:F().min(1)}).strict()]);V({fileId:Q,sha256:yx,totalSize:vx,dataEpoch:vx,userDataRevision:vx,check:bx}).strict();var xx=mc(`kind`,[V({kind:K(`set_endpoint`),endpoint:G([`grpc`,`graphql`]),value:F().min(1)}).strict(),V({kind:K(`restore_endpoint`),endpoint:G([`grpc`,`graphql`])}).strict(),V({kind:G([`clear_read_address`,`export_local_data`,`download_backup`,`import_local_data`,`reset_local_data`,`restart_wallet_service`])}).strict()]),Sx=G([`acknowledged`,`not_completed`,`unconfirmed`,`unsupported`]),Cx=V({method:K(`ui/download-file`),code:K(-32601)}).strict(),wx=G([`acknowledged`,`cancelled`,`expired`,`server_restarted`,`data_replaced`,`source_unavailable`,`stored_locally`,`local_save_failed`]),Tx=V({device:F().regex(/^\d+$/),inode:F().regex(/^\d+$/)}).strict(),Ex=G([`not_published`,`target_conflict`,`source_unavailable`,`interrupted`]),Dx=V({status:G([`needs_consent`,`saving`,`saved`,`failed`]),attemptId:Q,fileId:Q,sha256:yx,totalSize:vx,destination:F(),ownerId:F().min(1),currentSaveAttemptId:Q.optional(),attempts:B(V({saveAttemptId:Q,previousSaveAttemptId:Q.optional(),admittedAt:F().datetime(),allowPossibleCopy:R()}).strict()),sourceIdentity:Tx.optional(),savedAt:F().datetime().optional(),failure:Ex.optional()}).strict().superRefine((e,t)=>{(e.status===`needs_consent`?e.attempts.length!==0||e.currentSaveAttemptId!==void 0:!e.currentSaveAttemptId||!e.attempts.some(t=>t.saveAttemptId===e.currentSaveAttemptId))&&t.addIssue({code:`custom`,message:`A local save must identify its admitted attempt.`}),(new Set(e.attempts.map(e=>e.saveAttemptId)).size!==e.attempts.length||e.status===`saved`!=(e.savedAt!==void 0)||e.status===`saved`&&!e.sourceIdentity||e.status===`failed`!=(e.failure!==void 0))&&t.addIssue({code:`custom`,message:`Local save evidence must match its state.`})});V({currentAttemptId:Q,attempts:B(V({attemptId:Q,admittedAt:F().datetime(),previousAttemptId:Q.optional(),hostReport:Sx.optional(),failure:Cx.optional()}).strict()).min(1),readyAt:F().datetime().optional(),expiresAt:F().datetime().optional(),endReason:wx.optional(),localSave:Dx.optional()}).strict().superRefine((e,t)=>{(new Set(e.attempts.map(e=>e.attemptId)).size!==e.attempts.length||!e.attempts.some(t=>t.attemptId===e.currentAttemptId)||e.readyAt===void 0!=(e.expiresAt===void 0))&&t.addIssue({code:`custom`,message:`Download attempts and lifetime must identify one stored snapshot.`}),(e.endReason===`stored_locally`&&e.localSave?.status!==`saved`||e.endReason===`local_save_failed`&&e.localSave?.status!==`failed`||e.attempts.some(e=>e.hostReport===`unsupported`!=(e.failure!==void 0))||e.localSave&&(e.localSave.attemptId!==e.currentAttemptId||!e.attempts.some(t=>t.attemptId===e.currentAttemptId&&t.hostReport===`unsupported`)||e.localSave.status===`saving`&&e.endReason!==void 0||e.localSave.status===`saved`!=(e.endReason===`stored_locally`)))&&t.addIssue({code:`custom`,message:`Local saving requires the current download's unsupported report.`})});var Ox=G([`settings_retry_download`,`settings_report_download`,`settings_cancel_download`,`settings_store_backup`]),kx=mc(`action`,[V({action:K(`settings_download_backup`),operationId:Q,attemptId:Q}).strict(),V({action:K(`settings_retry_download`),operationId:Q,fileId:Q,previousAttemptId:Q,attemptId:Q}).strict(),V({action:K(`settings_report_download`),operationId:Q,fileId:Q,attemptId:Q,status:Sx,failure:Cx.optional()}).strict().refine(e=>e.status===`unsupported`==(e.failure!==void 0),`Only unsupported downloads require the exact method failure.`),V({action:K(`settings_store_backup`),operationId:Q,fileId:Q,attemptId:Q,saveAttemptId:Q,previousSaveAttemptId:Q.optional(),allowPossibleCopy:R()}).strict(),V({action:K(`settings_cancel_download`),operationId:Q,fileId:Q,attemptId:Q}).strict(),V({action:K(`settings_select`),draft:xx}).strict(),V({action:K(`settings_prepare`),operationId:Q}).strict(),V({action:K(`settings_begin_upload`),operationId:Q,name:F().min(1),totalSize:vx.max(_x),sha256:yx}).strict(),V({action:K(`settings_upload_chunk`),operationId:Q,fileId:Q,offset:vx.max(_x),chunkBase64:F()}).strict(),V({action:K(`settings_seal_upload`),operationId:Q,fileId:Q}).strict(),V({action:K(`settings_confirm`),operationId:Q,preparationId:Q}).strict(),V({action:K(`settings_back`),operationId:Q}).strict(),V({action:K(`settings_cancel`)}).strict()]),Ax=V({outcome:G([`completed`,`failed`,`interrupted`,`superseded`]),recordedAt:F().datetime(),message:F().min(1),details:W(F(),z()).optional(),completionScope:K(`backup_snapshot`).optional()}).strict(),jx=V({storedValue:F(),effectiveValue:F(),source:G([`environment`,`local_db`,`builtin_default`]),pendingStoredValue:F().optional(),appliesAfter:K(`mcp_server_restart`).optional()}).strict(),Mx=V({endpoint:G([`grpc`,`graphql`]),key:G([`suiGrpcUrl`,`suiGraphqlUrl`]),value:F().min(1),status:G([`saved`,`reset`]),storedValue:F(),effectiveValue:F(),source:jx.shape.source}).strict().refine(e=>e.key===(e.endpoint===`grpc`?`suiGrpcUrl`:`suiGraphqlUrl`),`The endpoint kind and preference key must agree.`),Nx=L().int().nonnegative().safe(),Px=V({accounts:Nx,reviewSessions:Nx,reviewStateSnapshots:Nx,reviewStatusTransitions:Nx,reviewExecutions:Nx,reviewRequests:Nx,outcomeUnknownRequests:Nx,externalActivityScans:Nx,externalActivityTransactions:Nx,localSettings:Nx}).strict(),Fx=V({status:K(`valid`),format:K(gx),network:K(`mainnet`),exportedAt:F().datetime(),currentCounts:Px,incomingCounts:Px,willReplace:K(!0),activeAccountChange:G([`unchanged`,`set`,`cleared`]),currentReadAddress:m_.nullable(),incomingReadAddress:m_.nullable(),restartRequiredAfterImport:R()}).strict(),Ix=V({kind:K(`settings`),operationId:Q,phase:G([`draft`,`uploading`,`sealed`,`prepared`,`executing`,`stopping`,`starting`,`terminal`]),draft:xx.optional(),preparationId:Q.optional(),preparation:W(F(),z()).optional(),file:V({fileId:Q,displayName:F(),totalSize:vx,receivedSize:vx,sha256:yx,sealed:R(),cleanup:G([`pending`,`complete`,`failed`])}).strict().optional(),download:V({availability:G([`preparing`,`available`,`ended`]),currentAttemptId:Q,hostReport:Sx.optional(),previousUnconfirmed:R(),endReason:wx.optional(),expiresAt:F().datetime().optional(),remainingMs:vx.optional(),localSave:V({status:G([`needs_consent`,`saving`,`saved`,`failed`]),currentSaveAttemptId:Q.optional(),failure:Ex.optional(),savedAt:F().datetime().optional()}).strict().optional(),allowedFileActions:B(Ox)}).strict().optional(),restoreCheck:bx.optional(),backupLocation:V({directory:F().min(1),filename:F().min(1)}).strict().optional(),result:Ax.optional(),temporaryFileCleanup:G([`pending`,`complete`,`failed`]).optional(),priorRunId:Q.optional(),nextRunId:Q.optional(),supersedesOperationId:Q.optional(),supersededByOperationId:Q.optional(),allowedActions:B(G(kx.options.map(e=>e.shape.action.value))),observe:R(),facts:V({server:V({name:F(),version:F(),network:K(`mainnet`)}).strict(),localSettings:V({suiGrpcUrl:jx,suiGraphqlUrl:jx}).strict(),readAddress:F().optional(),assetReadAccount:K_,walletAvailability:V_,connectionReconciliationRequired:K(!0).optional(),observedAt:F().datetime().optional(),counts:Px}).strict().optional()}).strict().superRefine((e,t)=>{if(e.download&&(e.draft?.kind!==`download_backup`||!e.file||e.download.availability===`available`&&(!e.file.sealed||!e.result||e.download.endReason||!e.download.expiresAt)||e.download.availability===`ended`&&!e.download.endReason)&&t.addIssue({code:`custom`,message:`Download delivery must describe its own snapshot and lifetime.`}),e.draft?.kind===`download_backup`&&e.preparation!==void 0&&t.addIssue({code:`custom`,message:`Private download preparation is not public preparation data.`}),e.restoreCheck&&(e.draft?.kind!==`import_local_data`||e.result)&&t.addIssue({code:`custom`,message:`Restore checks belong to an uncompleted import preparation.`}),e.restoreCheck?.status===`can_restore`&&(e.phase!==`prepared`||!e.file?.sealed||!e.allowedActions.includes(`settings_confirm`))&&t.addIssue({code:`custom`,message:`Restore availability requires a sealed file and current confirmation.`}),e.draft?.kind===`import_local_data`&&e.restoreCheck?.status!==`can_restore`&&e.allowedActions.includes(`settings_confirm`)&&t.addIssue({code:`custom`,message:`An unchecked or blocked import cannot offer confirmation.`}),e.restoreCheck?.status===`receiving`&&(!e.file||e.file.sealed||![`draft`,`uploading`].includes(e.phase))&&t.addIssue({code:`custom`,message:`Receiving requires the selected unsealed upload.`}),e.restoreCheck?.status===`check_required`&&(!e.file?.sealed||e.phase!==`sealed`)&&t.addIssue({code:`custom`,message:`A new check requires the same complete sealed upload.`}),e.restoreCheck?.status===`cannot_restore`&&e.restoreCheck.reason===`invalid_backup`&&(e.phase===`prepared`||e.allowedActions.includes(`settings_prepare`))&&t.addIssue({code:`custom`,message:`A rejected backup requires an explicit new selection.`}),e.backupLocation&&(e.result?.outcome!==`completed`||e.draft?.kind!==`export_local_data`&&(e.draft?.kind!==`download_backup`||e.download?.localSave?.status!==`saved`||e.download.endReason!==`stored_locally`))&&t.addIssue({code:`custom`,message:`A backup location requires its recorded successful export.`}),e.download?.localSave?.status===`saved`&&!e.backupLocation&&t.addIssue({code:`custom`,message:`A saved backup must identify its verified location.`}),e.draft?.kind===`export_local_data`&&e.result?.outcome===`completed`&&typeof e.result.details?.path==`string`&&!e.backupLocation&&t.addIssue({code:`custom`,message:`A recorded backup path must provide its folder and file name.`}),e.temporaryFileCleanup&&!e.result&&t.addIssue({code:`custom`,message:`Cleanup of an applied or ended operation requires its recorded result.`}),(e.phase===`terminal`!=(e.result!==void 0)||e.phase===`terminal`&&(e.observe||e.allowedActions.length))&&t.addIssue({code:`custom`,message:`A terminal Settings result cannot grant input or observation.`}),e.phase===`prepared`&&(!e.preparationId||!e.draft||!e.preparation)&&t.addIssue({code:`custom`,message:`Settings confirmation requires a prepared identity and facts.`}),e.phase===`prepared`&&e.draft?.kind===`import_local_data`&&!Fx.safeParse(e.preparation?.preview).success&&t.addIssue({code:`custom`,path:[`preparation`,`preview`],message:`Import confirmation requires the validated current and incoming read context and record counts.`}),e.phase===`prepared`&&(e.draft?.kind===`set_endpoint`||e.draft?.kind===`restore_endpoint`)){let n=Mx.safeParse(e.preparation?.endpoint);(!n.success||n.data.endpoint!==e.draft.endpoint||n.data.status!==(e.draft.kind===`set_endpoint`?`saved`:`reset`)||e.draft.kind===`set_endpoint`&&n.data.value!==e.draft.value)&&t.addIssue({code:`custom`,path:[`preparation`,`endpoint`],message:`Endpoint confirmation must name its exact prepared target.`})}e.file&&e.file.receivedSize>e.file.totalSize&&t.addIssue({code:`custom`,message:`Received content exceeds the selected file.`})}),Lx=65536;function Rx(e){return new TextEncoder().encode(JSON.stringify(e)).length}function zx(e){let t=Lx-Rx(e);return t>0?3*Math.floor(t/4):0}function Bx(e){if(!e||typeof e!=`object`)return;let t=structuredClone(e);if(t.method===`tools/call`&&t.params?.name===`ui.act_card`&&t.params.arguments?.input?.action===`settings_upload_chunk`)return t.id=2**53-1,t.params.arguments.revision=2**53-1,t.params.arguments.input.offset=_x,t.params.arguments.input.chunkBase64=``,zx(t)}var Vx={uiOpenAccount:`ui.open_account`,uiOpenReceipt:`ui.open_receipt`,uiOpenChart:`ui.open_chart`,uiReadCard:`ui.read_card`,uiSubmitCard:`ui.submit_card`,uiActCard:`ui.act_card`,uiReadSettingsFile:`ui.read_settings_file`,sessionOpenReviewManagement:`session.open_review_management`,readGetServerStatus:`read.get_server_status`,readListSupportedProtocols:`read.list_supported_protocols`,readListDeepbookPools:`read.list_deepbook_pools`,readListDeepbookTokens:`read.list_deepbook_tokens`,readInspectDeepbookOrderbook:`read.inspect_deepbook_orderbook`,readGetDeepbookMidPrice:`read.get_deepbook_mid_price`,readGetDeepbookUsdcPriceHistory:`read.get_deepbook_usdc_price_history`,readGetDeepbookUsdcPriceAtTime:`read.get_deepbook_usdc_price_at_time`,readQuoteDeepbookAction:`read.quote_deepbook_action`,readQuoteDeepbookDisplayAmount:`read.quote_deepbook_display_amount`,readSummarizeDeepbookAccountInventory:`read.summarize_deepbook_account_inventory`,readSummarizeWalletAssets:`read.summarize_wallet_assets`,readClassifyWalletAssets:`read.classify_wallet_assets`,readListSettlementAssetGroups:`read.list_settlement_asset_groups`,readSummarizeSettlementAssetGroupParity:`read.summarize_settlement_asset_group_parity`,readPreviewIntentEvidence:`read.preview_intent_evidence`,readListReviewActivity:`read.list_review_activity`,readSummarizeReviewFunnel:`read.summarize_review_funnel`,readGetReviewSessionDetail:`read.get_review_session_detail`,readInspectSuiTransaction:`read.inspect_sui_transaction`,readScanSuiAccountActivity:`read.scan_sui_account_activity`,readSummarizeSuiActivityScan:`read.summarize_sui_activity_scan`,readScanSuiFunctionActivity:`read.scan_sui_function_activity`,readSummarizeSuiFunctionActivityScan:`read.summarize_sui_function_activity_scan`,readSummarizeSuiAccountActivity:`read.summarize_sui_account_activity`,readGetAccountAssetTimeline:`read.get_account_asset_timeline`,settingsCreateLocalSettingsSession:`settings.create_local_settings_session`,settingsGetLocalSettings:`settings.get_local_settings`,actionPrepareSuiActionReview:`action.prepare_sui_action_review`,actionPrepareExternalProposalReview:`action.prepare_external_proposal_review`,sessionCreateWalletConnection:`session.create_wallet_connection`,sessionGetWalletConnection:`session.get_wallet_connection`,sessionWaitWalletConnection:`session.wait_wallet_connection`,sessionGetInteractionStatus:`session.get_interaction_status`,sessionGetReviewStatus:`session.get_review_status`,sessionGetExecutionResult:`session.get_execution_result`,sessionWaitExecutionResult:`session.wait_execution_result`,accountGetActiveAccount:`account.get_active_account`},Hx=V({connectionId:F().min(1),pairingUri:F().startsWith(`wc:`),expiresAt:F().datetime()}).strict(),Ux=G([`account`,`receipt`,`chart`,`connect`,`review`,`settings`]),Wx=V({cardId:F().min(1),kind:Ux,state:G([`ready`,`running`,`closed`]),revision:L().int().nonnegative(),createdAt:F().datetime(),expiresAt:F().datetime(),input:W(F(),z()),data:z().optional(),reason:G([`completed`,`expired`,`failed`,`server_restarted`,`cancelled`]).optional(),error:F().optional()}).strict().extend({pollAfterMs:L().int().positive(),inputRemainingMs:L().int().nonnegative()}),Gx=V({transactionDigest:F().min(1),pureInputs:B(V({index:L().int().nonnegative(),bytes:F().regex(/^0x(?:[0-9a-f]{2})*$/i)}).strict()).refine(e=>new Set(e.map(e=>e.index)).size===e.length,`Duplicate input index.`),ptbGraph:V({mermaid:V({text:F(),namedText:F()}).strict()}).strict().optional()}).strict(),Kx=`sui-mcp/card`,qx=`sui-mcp/receipt-display`,Jx=`sui-mcp/wallet-display`,Yx=`sui-mcp/settings-file`,Xx=`suimcp://cards/`,Zx=mc(`kind`,[V({kind:K(`account`),status:K(`input_required`),field:K(`account`),message:F().min(1)}).strict(),V({kind:K(`receipt`),status:K(`input_required`),field:K(`digest`),message:F().min(1)}).strict()]),Qx=V({cardId:F().min(1),permission:F().min(1)}).strict();Qx.extend({revision:L().int().nonnegative(),input:W(F(),z())}).strict();var $x=Gx.extend({cardId:F().min(1),revision:L().int().nonnegative(),attemptId:F().min(1).optional()}),eS=Hx.extend({cardId:F().min(1),revision:L().int().nonnegative()}),tS=V({attemptId:F().uuid().optional(),cardId:F().min(1),operationId:F().uuid(),fileId:F().uuid(),offset:L().int().nonnegative().safe(),totalSize:L().int().nonnegative().safe(),sha256:F().regex(/^[a-f0-9]{64}$/),chunkBase64:F()}).strict(),nS={account:Vx.uiOpenAccount,receipt:Vx.uiOpenReceipt,chart:Vx.uiOpenChart,read:Vx.uiReadCard,submit:Vx.uiSubmitCard,act:Vx.uiActCard,readSettingsFile:Vx.uiReadSettingsFile};function $(e){return typeof e==`object`&&e&&!Array.isArray(e)?e:void 0}function rS(e){return e.kind!==`import_local_data`}function iS(e,t,n){if(e.kind!==`settings`||t.kind!==`settings`||e.cardId!==t.cardId||t.state!==`ready`)return;let r=Ix.safeParse(e.data),i=Ix.safeParse(t.data);if(!r.success||!i.success)return;let a=r.data,o=i.data,s=o.draft;if(!s||!a.draft||a.operationId!==o.operationId||n.operationId!==o.operationId||JSON.stringify(a.draft)!==JSON.stringify(s))return;if(rS(s))return n.action===`settings_prepare`?{kind:`preparation_response`,cardId:t.cardId,operationId:o.operationId,draft:s}:void 0;let c=o.file?.fileId;if(!(!c||!a.file?.fileId||a.file.fileId!==c||n.action!==`settings_prepare`&&n.action!==`settings_seal_upload`||n.action===`settings_seal_upload`&&n.fileId!==c))return{kind:`backup_check_response`,cardId:t.cardId,operationId:o.operationId,fileId:c,action:n.action}}function aS(e){return Object.keys(e).filter(t=>e[t]!==void 0)}function oS(e,t){if(e===t)return!0;if(Array.isArray(e)||Array.isArray(t))return Array.isArray(e)&&Array.isArray(t)&&e.length===t.length&&e.every((e,n)=>oS(e,t[n]));let n=$(e),r=$(t);if(!n||!r)return!1;let i=aS(n);return i.length===aS(r).length&&i.every(e=>Object.hasOwn(r,e)&&oS(n[e],r[e]))}function sS(e,t=!0){let n=$(e);if(!n)throw Error(`The app did not provide a usable card response.`);let r=()=>Error(`The app provided inconsistent card response information.`),i,a=e=>{let t=$(e);if(!t||typeof t.ok!=`boolean`||i&&!oS(i,t))throw r();i=t};n.structuredContent!==void 0&&a(n.structuredContent);let o,s;if(Array.isArray(n.content))for(let e of n.content){let n=$(e);if(n?.type!==`text`||typeof n.text!=`string`)continue;let i;try{i=$(JSON.parse(n.text))}catch{continue}if(i){if(i.ok!==void 0)a(i);else if(Array.isArray(i.content)){if(!t||o)throw r();let n=Yu.safeParse(i);if(!n.success)throw r();o=sS(n.data,!1),s=e,o.structuredContent!==void 0&&a(o.structuredContent)}}}let c=Object.create(null),l=!1;for(let e of[n._meta,o?._meta]){if(e===void 0)continue;let t=$(e);if(!t)throw r();for(let e of aS(t)){let n=t[e];if(Object.hasOwn(c,e)&&!oS(c[e],n))throw r();c[e]=n}l=!0}if(n.isError!==void 0&&typeof n.isError!=`boolean`||o?.isError!==void 0&&n.isError!==void 0&&o.isError!==n.isError||(n.isError===!0||o?.isError===!0)&&i?.ok===!0)throw r();return{...o,...n,...o?{content:[...Array.isArray(n.content)?n.content.filter(e=>e!==s):[],...Array.isArray(o.content)?o.content:[]]}:{},...i?{structuredContent:i}:{},...l?{_meta:c}:{}}}function cS(e,t){let n=$($(e?.data)?.request);return!!e&&(e.kind===`receipt`||e.kind===`review`)&&t.cardId===e.cardId&&t.revision===e.revision&&t.transactionDigest===(e.kind===`receipt`?e.input.digest:n?.transactionDigest)&&(e.kind!==`review`||t.attemptId===n?.attemptId)}function lS(e){let t;for(let n of Array.isArray(e.content)?e.content:[]){let e=$(n),r;if(e?.type===`resource_link`&&typeof e.uri==`string`&&e.uri.startsWith(`suimcp://cards/`)&&(r=e.uri),e?.type===`text`&&typeof e.text==`string`){let t=/^\[Resource link: card_([A-Za-z0-9_-]+)\] (suimcp:\/\/cards\/([A-Za-z0-9_-]+)) \(Saved data for this exact card\.\)$/.exec(e.text);if(!t&&e.text.startsWith(`[Resource link:`)&&e.text.includes(`suimcp://cards/`))throw Error(`The saved card links could not be matched to one card.`);if(t){if(t[1]!==t[3])throw Error(`The saved card links could not be matched to one card.`);r=t[2]}}if(r===void 0)continue;let i=r.slice(Xx.length);if(!i||encodeURIComponent(i)!==i||t!==void 0&&i!==t||e?.type===`resource_link`&&typeof e.name==`string`&&e.name.startsWith(`card_`)&&e.name!==`card_${i}`)throw Error(`The saved card links could not be matched to one card.`);t=i}return t}function uS(e){let t=$(e.structuredContent),n=t?.ok===!0?Zx.safeParse(t.data):void 0,r=$($(t?.error)?.details),i=n?.success?void 0:t?.ok===!0?$(t.data)?.card??t.data:r?.snapshot,a=i===void 0?void 0:Wx.parse(i);a?.kind===`settings`&&Ix.parse(a.data);let o=$(e._meta)?.[qx],s=o===void 0?void 0:$x.parse(o);if(s&&!cS(a,s))throw Error(`Transaction details do not match this saved result.`);let c=$(e._meta)?.[Jx],l=c===void 0?void 0:eS.parse(c);if(l&&(!a||a.kind!==`connect`||l.cardId!==a.cardId||l.revision!==a.revision||l.connectionId!==$($(a.data)?.connection)?.connectionId))throw Error(`The connection QR code does not match this card.`);return{snapshot:a,display:s,wallet:l,inputRequired:n?.success?n.data:void 0,error:typeof r?.message==`string`?r.message:typeof r?.reason==`string`?r.reason:void 0}}function dS(e,t){let n=document.getElementById(`app`);if(!n)throw Error(`Card root is unavailable.`);let r=document.createElement(`h1`);r.textContent=t.title;let i=document.createElement(`p`);i.className=`ui-note`,i.setAttribute(`role`,`status`);let a=document.createElement(`p`);a.className=`ui-error`,a.setAttribute(`role`,`alert`);let o=document.createElement(`p`);o.className=`ui-note card-guidance`;let s=document.createElement(`section`),c=document.createElement(`div`);c.className=`card-actions`;let l=document.createElement(`div`);l.className=`card-progress-hint`,l.hidden=!0,n.replaceChildren(r,i,a,s,o,l,c);let u=new Xh({name:`sui-mcp-card`,version:`0.6.2`},{},{autoResize:!0,strict:!0}),d=new AbortController,f=e===`connect`||e===`review`,p=e===`settings`,m=f||p,h=!1,g,_,v,y,b,ee,x,te=!1,ne=!1,re,ie,S={status:`unconfirmed`},ae,oe,se,C,w,T=`continue`,E,ce,le=0,ue=0,de,fe,pe,me,D,he,ge,_e,ve=!1;function ye(){if(!C||!y)return;let{input:e,basis:t}=C,n=$(y.data),r=$(t.data),i=$(n?.request),a=$(n?.review),o=$(n?.connection),s=$(r?.request),c=$(r?.connection),l=!!i&&i.attemptId===s?.attemptId,u=!!o&&o.connectionId===c?.connectionId;if(!f)return y.state===`running`||y.reason===`completed`?C.delivery===`rejected`?`past`:`observed`:y.state===`closed`?`past`:`active`;if(e.walletRunId&&e.walletRunId!==$(n?.walletAvailability)?.walletRunId&&e.walletRunId!==n?.acceptedWalletRunId)return`past`;switch(e.action){case`connect`:if(y.state!==`ready`&&o)return`observed`;if(n?.walletAvailability&&$(n.walletAvailability)?.status===`available`&&Array.isArray(n.connections)&&n.connections.some(e=>$(e)?.status===`connected`))return`past`;break;case`prepare_review`:if(typeof a?.reviewRevision==`number`&&typeof e.reviewRevision==`number`&&a.reviewRevision>e.reviewRevision)return a.account===e.account?`observed`:`past`;break;case`request_signature`:if(i?.account===e.account&&i?.reviewRevision===e.reviewRevision)return`observed`;if(typeof a?.reviewRevision==`number`&&typeof e.reviewRevision==`number`&&a.reviewRevision>e.reviewRevision||!i&&a&&a.reviewRevision===e.reviewRevision&&a.account===e.account&&a.status===`refresh_required`&&$(a.state)?.refreshReason===`review_evidence_stale`&&Array.isArray(n?.allowedActions)&&n.allowedActions.includes(`prepare_review`))return`past`;break;case`cancel`:if(y.reason===`cancelled`)return`observed`;break;case`disconnect`:if(o&&o.connectionId===e.connectionId&&(o.pendingAction===`disconnect`||y.state!==`ready`&&o.status===`disconnected`))return`observed`;break;case`use_account`:if(y.reason===`completed`&&n?.activeAccount===e.account&&o?.connectionId===e.connectionId)return`observed`;break;case`stop_connection`:if(u&&o?.status===`stopped`)return`observed`;if(u&&o?.status!==`awaiting_approval`)return`past`;break;case`stop_waiting`:if(l&&(i?.requestStatus===`stopped`||n?.observationStopped===!0))return`observed`;if(l&&[`completed`,`request_failed`,`outcome_unknown`].includes(String(i?.requestStatus)))return`past`;break;case`read_result`:if(l&&(n?.observe===!0||i?.requestStatus===`completed`))return`observed`;if(l&&[`stopped`,`request_failed`].includes(String(i?.requestStatus)))return`past`}return be()||typeof n?.actionRemainingMs==`number`&&n.actionRemainingMs<=0||[`connect`,`disconnect`,`use_account`,`cancel`,`prepare_review`,`request_signature`].includes(String(e.action))&&(y.state!==`ready`||a?.status===`expired`)?`past`:`active`}function be(){let e=fx.safeParse(C?.input);if(!e.success||e.data.action!==`disconnect`&&e.data.action!==`use_account`)return!1;let t=e.data,n=mx.safeParse(y?.data);if(!n.success)return!1;let r=n.data.connections.find(e=>e.connectionId===t.connectionId);return r?t.action===`disconnect`?n.data.walletAvailability.status===`available`&&!r.pendingAction&&!n.data.manageableConnectionIds.includes(t.connectionId)&&[`disconnected`,`failed`,`rejected`,`stopped`,`expired`].includes(r.status):[`disconnected`,`failed`,`rejected`,`stopped`,`expired`].includes(r.status)||t.action===`use_account`&&r.status===`connected`&&!r.accounts.includes(t.account):!1}function xe(){if(!C)return;let e=ye();e&&C.disposition!==`observed`&&(e!==`active`||C.disposition===`active`)&&(C.disposition=e),C.disposition===`observed`&&(C.retryRequired=!1)}function Se(){let e=px.safeParse($(y?.data)?.automaticAction);return C?.retryRequired&&e.success&&C.input.action===e.data.action?e.data:void 0}function Ce(e){let t={connect:`connection request`,prepare_review:`review update`,request_signature:`wallet approval request`,read_result:`transaction status check`,cancel:`cancellation request`,stop_connection:`request to stop connecting`,stop_waiting:$($(e.basis.data)?.request)?.requestStatus===`awaiting_signature`?`request to stop wallet approval`:`request to stop checking the result`,disconnect:`wallet disconnect request`,use_account:`account selection`};return f?t[String(e.input.action)]??`request`:`data request`}function we(e){if(e!==`past`||!C)return;let t=Ce(C),n=C.input.action===`read_result`&&$($(y?.data)?.request)?.requestStatus===`outcome_unknown`?` To check this transaction again, ask to open its result in chat.`:``;return`Message from an earlier ${t}: “${C.message}”${n}`}let Te,Ee;function De(){let t=$(y?.data),n=p?$(t?.download):void 0,r=Array.isArray(n?.allowedFileActions)?n.allowedFileActions:[],i=[...Array.isArray(t?.allowedActions)?t.allowedActions:[],...r.filter(e=>e===`settings_report_download`||Te===void 0||Date.now()<Te)],a=e===`review`&&t?.mode===`review`&&!t.request&&!!g&&y?.state===`ready`,o=a&&de!==void 0&&Date.now()>=de,s=document.visibilityState!==`hidden`,c=d.signal.aborted||S.status===`rejected`,l=S.status===`confirmed`,u=C?.disposition,v=u===`active`,b=C?.retryRequired===!0,ee=C?.input.action===`request_signature`&&u===`active`,x=T===`paused`,ne=he?.pending?.()===!0,re=he?.displayRecovery?.(),le=l&&!c&&!oe&&!ne&&!o&&!!g,fe=le&&!w&&!h&&(!m||!(E&&(v||b||x))),pe=px.safeParse(t?.automaticAction),me=p?$(n?.localSave):void 0,D=!!y&&(m?t?.observe===!0||me?.status===`saving`:y.state===`running`),ge=!!_&&te&&!c&&!E&&s&&(ce===`explicit`||S.status!==`read_failed`&&(ce===`background`||S.status===`needed`&&S.automatic)),_e=s&&le&&!ae&&!E&&!ce&&!w&&!b&&!ee&&!x&&f&&pe.success&&i.includes(pe.data.action)?pe.data:void 0,ve=$(t?.restoreCheck),ye=p&&le&&y?.state===`ready`&&!w&&!h&&!t?.result&&t?.observe!==!0&&(ve?.status===`cannot_restore`&&[`operation_busy`,`wallet_request_unsettled`].includes(String(ve.reason))||!i.includes(`settings_select`)||!i.includes(`settings_download_backup`)||t?.phase===`prepared`&&!i.includes(`settings_confirm`)||t?.phase===`draft`&&$(t.draft)?.kind!==void 0&&$(t.draft)?.kind!==`import_local_data`&&!i.includes(`settings_prepare`)),be;!c&&_&&(S.status===`read_failed`||ae||S.status===`unconfirmed`?be=`read`:S.status===`needed`?S.automatic||(be=`read`):oe||re||p&&[`pending`,`failed`].includes(String(t?.temporaryFileCleanup))||me?.status===`saving`||me?.status===`needs_consent`&&!i.includes(`settings_store_backup`)||me?.status===`failed`&&me.failure===`not_published`&&!n?.endReason&&!i.includes(`settings_store_backup`)||ye?be=`read`:g?$(t?.progress)?.status===`unavailable`||$(t?.walletAvailability)?.status===`initializing`&&$(t?.walletAvailability)?.stage===`state_sync`?be=`read`:!x&&Se()?be=`retry`:v&&!D&&!(x&&i.length>0)&&!(C?.input.action===`prepare_review`&&i.includes(`prepare_review`)&&t?.automaticAction===void 0)&&f&&(be=`read`):(y?.state!==`closed`||oe)&&(be=`read`));let xe=f?t?.actionRemainingMs:y?.inputRemainingMs;be===`retry`&&o&&(be=`read`);let Ee=f?t?.nextStateReadAfterMs:p&&Te!==void 0?Math.max(0,Te-ue):void 0,De=[(f?i.length>0:y?.state===`ready`)?xe:void 0,Ee].filter(e=>typeof e==`number`&&Number.isFinite(e)&&e>0),Oe=!c&&!!g&&s&&!ie&&!ae&&S.status!==`read_failed`,ke=$(t?.review),Ae=a&&!c&&!ae&&!oe&&!v&&!b&&!x&&S.status!==`read_failed`&&(ne||w?.input.action===`prepare_review`||ke?.preparing===!0||pe.success&&pe.data.action===`prepare_review`||S.status===`needed`&&ke?.status===`ready_for_wallet_review`);return{current:l,inputEnabled:fe,permitted:i,disposition:u,read:ge,auto:_e,recover:be,paused:x,partialDisplayFailure:re,settingsInputBlocked:ye,reviewUpdatePending:Ae,reviewCommandDeliveryFailed:v&&C?.input.action===`prepare_review`,reviewHint:o?void 0:Ae?ne||ke?.preparing||w?.input.action===`prepare_review`?`Updating review…`:`Checking status…`:a&&$(ke?.state)?.refreshReason===`review_evidence_stale`?`Review details are out of date.`:void 0,errors:[S.status===`rejected`?S.message:S.status===`read_failed`?`This card's status could not be checked. Reported message: “${S.message}”`:void 0,ae&&S.status!==`rejected`?`This card could not be opened. Reported message: “${ae}”`:void 0,v&&C?`Message for this ${Ce(C)}: “${C.message}”`:void 0,oe,re?.message],note:[se,we(u)].filter(Boolean).join(` `),expiryAt:Oe&&l&&De.length?ue+Math.min(...De):void 0,poll:Oe&&(D||S.status===`needed`&&!S.automatic),lifetimeAt:!c&&s&&a?de:void 0}}function Oe(e){return e.recover===`retry`?C?.input.action===`connect`?`Retry connection`:`Retry review`:e.recover===`read`?`Check status`:void 0}function ke(e){if(d.signal.aborted)return``;let n=e.errors.some(Boolean)||e.recover!==void 0||!!y&&!g&&y.state!==`closed`||y?.state===`closed`&&y.reason!==`completed`,r=e.errors.some(Boolean)||S.status!==`confirmed`||e.recover===`retry`||e.settingsInputBlocked;if(n&&r&&S.status!==`rejected`){if(E||e.read)return`Checking status…`;let t=Oe(e);if(t)return t===`Check status`?oe||e.partialDisplayFailure?`Use Check status to read this card and try displaying it again.`:`Use Check status to read this card again.`:t===`Retry connection`?`Use Retry connection to try connecting your wallet again.`:`Use Retry review to try again with the displayed wallet and account.`;if(Ae(e)&&he?.selectionHint)return he.selectionHint}return t.guidance?.(y,{confirmed:e.current,readOnly:!g,recoveryNeeded:n,visibleConfirmation:he?.visibleConfirmation?.(),commandPending:m&&w&&e.current&&!e.errors.some(Boolean)&&(w.phase===`confirming`||y?.state===`ready`&&!$(y.data)?.runtimeRecovery&&!$(y.data)?.request&&!$($(y.data)?.review)?.preparing)?{phase:w.phase,action:String(w.input.action)}:void 0,approvalUnresolved:C?.input.action===`request_signature`&&e.disposition===`active`||w?.input.action===`request_signature`,automaticPaused:e.paused})??``}function Ae(e=De()){return e.inputEnabled&&y?.state===`ready`&&ve}function je(e,t=De()){return m&&t.inputEnabled&&(e?t.permitted.includes(e.action):t.permitted.length>0)}function Me(e){let t=De();return p&&h&&t.current&&!!g&&!w&&!E&&!oe&&!d.signal.aborted&&[`settings_begin_upload`,`settings_upload_chunk`,`settings_seal_upload`,`settings_retry_download`,`settings_report_download`,`settings_cancel_download`,`settings_store_backup`].includes(String(e.action))&&t.permitted.includes(e.action)}function Ne(e){let u=$(y?.data),f=s.querySelector(`.review-action-feedback`),_=s.querySelector(`.review-primary-action`);if(_&&f){let e=s.querySelector(`.review-lifetime`);e?(e.append(l),f.prepend(a)):f.prepend(l,a),f.append(o)}else n.insertBefore(a,s),n.insertBefore(l,c),n.insertBefore(o,l);a.className=_?`ui-note`:`ui-error`,y?(r.textContent=t.titleFor?.(y)??t.title,i.textContent=S.status===`rejected`?`Card unavailable`:!e.current&&y.state===`ready`?_?``:!d.signal.aborted&&(E||e.read)?`Checking whether actions are available in this card…`:`Actions are unavailable until this card's status is checked.`:!g&&y.state!==`closed`?`View only.`:m?$(u?.progress)?.status===`unavailable`?`Current progress is unavailable. The last recorded state is shown.`:!u?.request&&y.state===`closed`&&[`expired`,`server_restarted`,`cancelled`].includes(y.reason??``)?`This card no longer accepts actions.`:``:y.state===`running`?`Reading the requested data…`:y.reason===`completed`?``:y.error??(y.reason===`expired`?`The time to make a selection has ended.`:y.reason===`server_restarted`?`This request ended when Sui MCP restarted.`:``)):i.textContent=ie?``:S.status===`read_failed`?`Card status unavailable`:ae||S.status===`rejected`?`Card unavailable`:`Opening card…`,i.hidden=!i.textContent,a.textContent=[...new Set(e.errors.filter(Boolean))].join(` `),a.hidden=!a.textContent;let v=s.querySelector(`.review-status`);v&&(v.hidden=!!_&&(e.reviewUpdatePending||!!a.textContent));let b=s.querySelector(`.review-material-status`);if(b&&(b.textContent=b.dataset.previous===`true`||!e.current||e.reviewUpdatePending?b.dataset.previousLabel??``:b.dataset.currentLabel??``),o.textContent=[e.note,ke(e)].filter(Boolean).join(` `),o.hidden=!o.textContent,ve)for(let t of s.querySelectorAll(`input, button, select`))(!m||t.tagName!==`BUTTON`||t.dataset.cardAction!==void 0)&&(t.disabled=m?!je(void 0,e):!Ae(e));if(m)for(let t of s.querySelectorAll(`[data-card-action]`))t.disabled=!je({action:t.dataset.cardAction},e);if(p)for(let t of s.querySelectorAll(`[data-settings-file-action]`))t.disabled=t.dataset.settingsLocalBlocked===`true`||!(h?Me({action:t.dataset.cardAction}):je({action:t.dataset.cardAction},e));_&&(e.reviewUpdatePending||_.dataset.cardAction===`request_signature`&&e.reviewCommandDeliveryFailed||_.dataset.cardAction===void 0)&&(_.disabled=!0),D&&(D.disabled=!!w||!!E)}function Pe(e){try{e?.()}catch{oe=`The card display could not be closed cleanly. Its stored information is unchanged.`}}function Fe(e){if(!y||d.signal.aborted)return;if(y.state===`ready`&&S.status!==`confirmed`){if(p&&he?.update)try{he.update(y,{automaticPaused:T===`paused`,settings:qe,settingsCommandProgress:void 0,onDisplayChange:()=>k()})}catch{oe=`This card could not be displayed. Its stored information is unchanged.`}return}if(y.state===`running`&&!m){oe=void 0;return}let n=m?{...$(y.data),actionRemainingMs:void 0,nextStateReadAfterMs:void 0,...p&&$(y.data)?.download?{download:{...$($(y.data)?.download),remainingMs:void 0}}:{}}:void 0,r=p&&w?.phase===`sending`&&S.status===`confirmed`?iS(w.basis,y,w.input):void 0,i=`${T===`paused`}:${JSON.stringify(r)}:${y.revision}:${g!==void 0}:${b!==void 0}:${x!==void 0}:${JSON.stringify(n)}`;if(i===ge||i===_e&&!e)return;_e=i;let a=[...s.children],o=new Set([...s.querySelectorAll(`details`)].filter(e=>e.open).map(e=>e.querySelector(`summary`)?.textContent)),c,l=!1,u=!1;try{let e={automaticPaused:T===`paused`,onDisplayChange:()=>k(),...p?{settings:qe,settingsCommandProgress:r}:{}};if(he?.update?.(y,e)){ge=i,oe=void 0;return}if(y.state===`ready`&&g){let n=t.controls(y,e=>{Ge(e)},b,x,e);c=`node`in n?n:{node:n},l=!0}else(m||y.reason===`completed`)&&y.data!==void 0&&(c=t.result(y,b,g?e=>{Ge(e)}:void 0,x,e));s.replaceChildren(...c?[c.node]:[]),u=!0,c?.mount?.();for(let e of s.querySelectorAll(`details`))o.has(e.querySelector(`summary`)?.textContent)&&(e.open=!0)}catch{u&&s.replaceChildren(...a),Pe(c?.dispose),oe=`This card could not be displayed. Its stored information is unchanged.`;return}let f=he?.dispose;he=c,ve=l,ge=i,oe=void 0,Pe(f)}function Ie(t,n,r,i,a){if(d.signal.aborted||S.status===`rejected`)return!1;if(t.kind!==e||t.cardId!==_)throw S={status:`rejected`,message:`The returned information does not match this card.`},Error(`The returned information does not match this card.`);let o=$(t.data),s=$(o?.request),c=$(s?.execution),l=o?.automaticAction===void 0?void 0:px.safeParse(o.automaticAction);if(l&&!l.success)throw Error(`This card could not start the next step.`);if(y&&t.revision<y.revision)return!1;if(v&&[...new Set([...Object.keys(v),...Object.keys(t.input)])].some(e=>JSON.stringify(t.input[e])!==JSON.stringify(v[e])))throw S={status:`rejected`,message:`The returned information does not match this card.`},Error(`The returned information does not match this card.`);if(e===`review`&&($(o?.review)?.reviewSessionId!==void 0&&$(o?.review)?.reviewSessionId!==t.input.reviewSessionId||s&&(s.reviewSessionId!==t.input.reviewSessionId||t.input.attemptId!==void 0&&s.attemptId!==t.input.attemptId)||c&&(c.reviewSessionId!==s?.reviewSessionId||c.attemptId!==s?.attemptId||c.txDigest!==s?.transactionDigest)||$(o?.receipt)?.status===`found`&&$($(o?.receipt)?.receipt)?.txDigest!==s?.transactionDigest)||e===`receipt`&&o?.status===`found`&&$(o.receipt)?.txDigest!==t.input.digest)throw S={status:`rejected`,message:`The saved result does not match the information requested in this card.`},Error(S.message);!v&&(f||t.state!==`ready`)&&(v={...t.input});let u=r!==`preview`;if((!y||t.revision!==y.revision)&&(b=void 0,x=void 0),y=t,xe(),u){ue=Date.now();let t=p?$(o?.download):void 0;if(t?.availability===`available`&&typeof t.remainingMs==`number`&&Number.isFinite(t.remainingMs)){let e=`${o?.operationId}:${$(o?.file)?.fileId}:${t.expiresAt}`;Ee!==e&&(Ee=e,Te=void 0),Te=Math.min(Te??1/0,ue+Math.max(0,t.remainingMs))}else p&&t?.availability===`ended`&&(Te=void 0);g&&e===`review`&&o?.mode===`review`&&!o.request&&typeof o.actionRemainingMs==`number`&&Number.isFinite(o.actionRemainingMs)&&o.actionRemainingMs>=0&&(de=Math.min(de??1/0,ue+o.actionRemainingMs))}return r===`read`&&(S.status!==`needed`||a>S.afterRead)&&(S={status:`confirmed`},ae=void 0),n&&(b=n),x=i,!0}function Le(){fe!==void 0&&clearTimeout(fe),pe!==void 0&&clearTimeout(pe),me!==void 0&&clearTimeout(me),fe=void 0,pe=void 0,me=void 0,l.hidden=!0}function Re(e){let t=Oe(e);D?.textContent!==t&&(D?.remove(),D=void 0,t&&(D=ng(t,()=>{if(!(E||w||d.signal.aborted)){if(De().recover===`retry`){let e=Se();e&&We(e)}else O()}})));let n=s.querySelector(`.review-primary-action`),r=s.querySelector(`.review-primary-slot`);n&&(n.hidden=!!D&&!!r),D&&(D.disabled=!!E||!!w,r?(D.classList.add(`review-recovery-action`),r.append(D)):(D.classList.remove(`review-recovery-action`),c.append(D)))}async function O(){let e=he,t=e?.displayRecovery?.(),n=await Be(!0);n?.kind===`accepted`&&y===n.snapshot&&S.status===`confirmed`&&!d.signal.aborted&&document.visibilityState!==`hidden`&&!oe&&e===he&&t&&e?.displayRecovery?.()===t&&(t.retry(),k())}function k(e=!1){if(ie){let e=document.createElement(`p`);e.className=`ui-note`,e.textContent=ie,s.replaceChildren(e)}else Fe(e);let t=De();if(Ne(t),Le(),Re(t),d.signal.aborted||S.status===`rejected`)return;t.expiryAt!==void 0&&(pe=setTimeout(()=>{ze(),k()},Math.max(0,t.expiryAt-Date.now()))),t.reviewHint&&!a.textContent&&(l.replaceChildren(),l.textContent=t.reviewHint,l.setAttribute(`role`,`status`),l.hidden=!1);let n=s.querySelector(`.review-time-remaining`);if(n&&t.lifetimeAt!==void 0){let e=t.lifetimeAt,r=()=>{if(d.signal.aborted)return;let t=Math.max(0,e-Date.now()),i=Math.ceil(t/1e3);if(n.textContent=t>0?`Review expires in ${Math.floor(i/60)}:${String(i%60).padStart(2,`0`)}`:`Review time elapsed`,t>0)me=setTimeout(r,Math.min(1e3,t));else{let e=De();Ne(e),Re(e)}};r()}if(t.poll&&y){let e=ue+y.pollAfterMs-Date.now();fe=setTimeout(()=>{Be(!1)},e>0?e:y.pollAfterMs)}t.read?(ce=void 0,Ve()):t.auto&&(fe=setTimeout(()=>{let e=De().auto;e&&Ke(e,`automatic`)},0))}function ze(){S.status!==`rejected`&&S.status!==`read_failed`&&(S={status:`needed`,afterRead:le,automatic:!0})}function Be(e){return d.signal.aborted||S.status===`rejected`||!_||!te?Promise.resolve(void 0):E?E.promise:S.status===`read_failed`&&!e?Promise.resolve(void 0):(ce=e?`explicit`:`background`,k(),E?.promise??Promise.resolve(void 0))}function Ve(){let e=++le,t=performance.now(),n={id:e,promise:Promise.resolve().then(async()=>{try{let n,r,i;if(g){let e=uS(await He(nS.read,g));if(!e.snapshot)throw Error(e.error??`Saved card data is unavailable.`);if(e.error)throw Error(e.error);n=e.snapshot,r=e.display,i=e.wallet}else{let e=`${Xx}${encodeURIComponent(_)}`,t=(await u.readServerResource({uri:e},{signal:d.signal})).contents.find(t=>t.uri===e&&`text`in t);if(!t||!(`text`in t))throw Error(`Saved card data is unavailable.`);n=Wx.parse(JSON.parse(t.text));let i=b??ee;r=i&&cS(n,i)?i:void 0}if(d.signal.aborted||S.status===`rejected`)return{kind:`disposed`,id:e};let a=Ie(n,r,`read`,i,e);return ee=void 0,!a&&S.status===`needed`&&e>S.afterRead&&(S={...S,automatic:!1}),k(a),a&&S.status===`confirmed`?{kind:`accepted`,snapshot:n,id:e,requestStartedAt:t}:{kind:`ignored`,id:e}}catch(t){return d.signal.aborted?{kind:`disposed`,id:e}:(S.status!==`rejected`&&(S={status:`read_failed`,message:t instanceof Error?t.message:`Saved card data could not be read. The last displayed result is unchanged.`}),{kind:`failed`,id:e})}}).finally(()=>{E===n&&(E=void 0),k()})};E=n,k()}async function He(e,t){return sS(await u.callServerTool({name:e,arguments:t},{signal:d.signal}))}function Ue(e,t,n){let r=mx.safeParse(n.data);if(!r.success||!r.data.allowedActions.some(t=>t===e.action))return!1;let i=r.data,a=$(t.data);return e.walletRunId&&e.walletRunId!==i.walletAvailability.walletRunId?!1:e.action===`connect`?i.allowedActions.includes(`connect`)&&[`connect`,`manage`].includes(String(n.input.intent)):e.action===`prepare_review`||e.action===`request_signature`?i.review?.reviewRevision===e.reviewRevision&&(e.action===`prepare_review`?i.assetReadAccount?.status===`available`?i.assetReadAccount.account:void 0:i.review?.account)===e.account&&hx(i,String(e.account),e.action===`request_signature`).some(t=>t.connectionId===e.connectionId):e.action===`disconnect`?i.manageableConnectionIds.includes(String(e.connectionId))&&i.connections.some(t=>t.connectionId===e.connectionId&&!t.pendingAction):e.action===`use_account`?i.connections.some(t=>t.connectionId===e.connectionId&&t.status===`connected`&&!t.pendingAction&&t.connectionId===i.usableConnectionId&&t.accounts.includes(String(e.account))):i.connection?.connectionId===$(a?.connection)?.connectionId&&i.request?.attemptId===$(a?.request)?.attemptId&&i.review?.reviewRevision===$(a?.review)?.reviewRevision}async function We(e){if(!y||E||!je(e))return;let t={input:e,basis:y,phase:`confirming`};w=t;let n=await Be(!1);w===t&&(w=void 0,n?.kind===`accepted`&&y===n.snapshot&&S.status===`confirmed`&&!d.signal.aborted&&document.visibilityState!==`hidden`&&Ue(e,t.basis,n.snapshot)&&je(e)?await Ke(e):S.status!==`read_failed`&&S.status!==`rejected`&&!d.signal.aborted&&(se=`The card state changed. Check the current selection before trying again.`),k())}async function Ge(e){f&&(C?.disposition===`active`||C?.retryRequired||T===`paused`)?await We(e):await Ke(e)}function A(e,t,n){C={input:e.input,basis:e.basis,message:t,delivery:n,disposition:`active`,retryRequired:e.input.action===`connect`||e.input.action===`prepare_review`},xe(),[`cancel`,`disconnect`,`stop_connection`,`stop_waiting`,`use_account`].includes(String(e.input.action))&&(T=`paused`),(m||n===`unknown`)&&ze()}async function Ke(e,t=`user`){if(!y||!g||(t===`file`?!Me(e):m?!je(e):!Ae()))return;let n={input:e,basis:y,phase:`sending`};w=n,T=`continue`,(t===`user`||C?.disposition!==`past`)&&(C=void 0),se=void 0,k();try{let t=uS(await He(m?nS.act:nS.submit,{...g,revision:n.basis.revision,input:e}));if(d.signal.aborted||S.status===`rejected`)return;if(!t.snapshot)throw Error(t.error??`The request could not be confirmed.`);t.error&&A(n,t.error,`rejected`),Ie(t.snapshot,t.display,`action`,t.wallet)}catch(e){!d.signal.aborted&&S.status!==`rejected`&&(A(n,e instanceof Error?e.message:`The request could not be confirmed.`,`unknown`),C&&(C.data=$(e)?.data))}finally{w===n&&(w=void 0),k()}}let qe={uploadChunkLimit(e,t){return g?Bx({jsonrpc:`2.0`,id:2**53-1,method:`tools/call`,params:{name:nS.act,arguments:{...g,revision:2**53-1,input:{action:`settings_upload_chunk`,operationId:e,fileId:t,offset:2**53-1,chunkBase64:``}}}})??0:0},async readCurrent(){let e=await Be(!0);if(e?.kind!==`accepted`)throw Error(`The current Settings selection could not be checked. Use Check status before continuing.`);return{snapshot:e.snapshot,requestStartedAt:e.requestStartedAt}},async act(e,t=!1){if(t?!Me(e):!je(e))throw Error(`This Settings action is unavailable until its current status has been checked.`);if(await Ke(e,t?`file`:`user`),d.signal.aborted)throw Error(`This card closed before the request finished. Reopen the same conversation to check its status.`);if(C?.input===e){let e=Error(C.message);throw e.data=C.data,e}if(!y)throw Error(`The current Settings status could not be checked.`);return y},setFileTransferActive(e){h=e,k()},async readFile(e){if(!g||!_||!De().current||d.signal.aborted)throw Error(`Backup read permission is unavailable.`);let t=await He(nS.readSettingsFile,{...g,...e}),n=tS.parse($(t._meta)?.[Yx]);if(n.cardId!==_||n.operationId!==e.operationId||n.fileId!==e.fileId||n.offset!==e.offset||n.attemptId!==e.attemptId)throw Error(`The backup response does not match this card's selected file.`);return n},download:async(e,t,n)=>{let r=$($(y?.data)?.download);if(!g||!De().current||d.signal.aborted||document.visibilityState===`hidden`||r&&(r.currentAttemptId!==n||r.localSave||r.availability!==`available`||Te===void 0||Date.now()>=Te))throw Error(`This download is no longer available in this card.`);try{return{isError:(await u.downloadFile({contents:[{type:`resource`,resource:{uri:`file:///${encodeURIComponent(e)}`,mimeType:`application/json`,blob:t}}]},{signal:d.signal})).isError}}catch(e){if(e&&typeof e==`object`&&`code`in e&&e.code===-32601)return{unsupported:!0};throw e}}};async function Je(){if(te&&re!==void 0&&!ne){ne=!0;try{let t=sS(re),n=$(t._meta);if(t._meta!==void 0&&!n)throw Error(`This card cannot accept actions with the access information provided by the app.`);let r=n?.[Kx];if(r!==void 0){let e=Qx.safeParse(r);if(!e.success)throw Error(`This card cannot accept actions with the access information provided by the app.`);g=e.data}let i=uS(t);if(i.inputRequired){if(i.inputRequired.kind!==e||g)throw Error(`The app provided inconsistent card input information.`);ie=i.inputRequired.message,k();return}let a=lS(t),o=[i.snapshot?.cardId,g?.cardId,a].filter(e=>e!==void 0);if(!o.length)throw Error(`Card data is unavailable.`);if(o.some(e=>e!==o[0])||i.snapshot&&i.snapshot.kind!==e)throw S={status:`rejected`,message:`The returned information does not match this card.`},Error(S.message);_=o[0];let s=i.snapshot;s&&(f||s.state!==`ready`)&&(v={...s.input}),ee=i.display,s&&g&&Ie(s,i.display,`preview`,i.wallet),ze(),k()}catch(e){if(d.signal.aborted)return;ae=e instanceof Error?e.message:`Card data could not be read.`,k()}}}u.ontoolresult=e=>{if(re===void 0)re=e,Je();else try{let t=uS(sS(re)).snapshot??y,n=uS(sS(e)).snapshot;if(t&&n&&(t.cardId!==n.cardId||t.kind!==n.kind))throw Error(`The app returned a different card.`)}catch{S={status:`rejected`,message:`The returned information does not match this card.`},k()}},u.onhostcontextchanged=e=>{e.theme&&(document.documentElement.dataset.theme=e.theme)};let Ye=()=>{document.visibilityState!==`hidden`&&g&&ne&&S.status!==`read_failed`?Be(!1):k()};document.addEventListener?.(`visibilitychange`,Ye),u.onteardown=async()=>{if(d.signal.aborted)return{};d.abort(),w=void 0,document.removeEventListener?.(`visibilitychange`,Ye);let e=he?.dispose;return he=void 0,Pe(e),k(),{}},u.connect().then(()=>{d.signal.aborted||(te=!0,document.documentElement.dataset.theme=u.getHostContext()?.theme??`light`,Je())}).catch(()=>{d.signal.aborted||(ae=`Could not connect this card to the app.`,k())})}function fS(e){return typeof e==`object`&&e?e:void 0}function pS(e){return typeof e==`string`&&e.length>0?e:void 0}function mS(e){let t=fS(e);if(!t)return null;let n=fS(t.display),r=fS(t.unit),i=pS(t.coinType),a=pS(n?.symbol)??pS(r?.symbol)??(i===void 0?void 0:$h(i))??`(unknown coin)`,o=typeof r?.decimals==`number`?r.decimals:void 0,s=pS(n?.amount),c=pS(t.balance),l;return l=s!==void 0&&o!==void 0?s:c===void 0?`Amount unavailable`:(o===void 0?void 0:hS(c,o))??`Amount unavailable`,{symbol:a,total:l}}function hS(e,t){try{return Zh(e,t)}catch{return}}var gS={account:{name:`Name`,address:`Account address`,balances:`Balances`,noBalances:`No token balances were returned.`,nfts:`NFTs`,noNfts:`No NFTs in the scanned objects.`,noImage:`No image`,objectsTruncated:`Some objects beyond the scanned range are omitted.`},receipt:{success:`Transaction succeeded on Sui`,failure:`Transaction failed on Sui`,sender:`Sender`,account:`Affected account`,object:`Object`,noBalanceChanges:`No balance changes were recorded.`,gasComputation:`Computation cost`,gasStorage:`Storage cost`,gasRebate:`Storage rebate`,gasBudget:`Network fee limit (gas budget)`,netFeeExplanation:`The network fee shown above includes the storage rebate. If it is negative, the rebate exceeds the computation and storage charges.`,estimatedNetFeeExplanation:`The estimated network fee shown above includes the storage rebate. If it is negative, the rebate exceeds the estimated computation and storage charges.`,gasLimitExplanation:`The gas budget limits network fee spending. It is not an estimate of the amount charged.`,gasPrice:`Gas price`,gasPayment:`Gas payment object`,graph:`Transaction graph`,graphTip:`A diagram of this transaction's programmable transaction block (PTB), derived from public on-chain data. It is a diagnostic view only, not transaction input, signing, or a safety verdict.`,graphReviewTip:`A diagram of the transaction prepared for this review and simulation. It shows what is being reviewed, not an actual result, permission to sign, or a guarantee of safety.`,graphRendering:`Rendering the transaction graph…`,graphFailed:`The transaction graph could not be rendered`,graphZoomIn:`Zoom in`,graphZoomOut:`Zoom out`,graphCenter:`Center`,graphShowAddresses:`Show full addresses`,graphShowNames:`Show readable labels`,moveCalls:`Move calls`,noMoveCalls:`No Move calls were recorded.`,inputs:`Inputs`,noInputs:`No inputs were recorded.`,inputKinds:{object:`Owned object`,shared_object:`Shared object`,receiving:`Receiving object`,pure:`Pure value`,withdrawal:`Balance withdrawal`,unknown:`Input`},bytes:`bytes`,events:`Events`,noEvents:`No events were recorded.`,objectChanges:`Object changes`,noObjectChanges:`No object changes were recorded.`},chart:{boundaryUsdc:`Prices are in USDC, not USD; dollar parity is not guaranteed.`,boundaryScope:`Historical prices, not live quotes.`,source:`Source: DeepBookV3 Indexer.`,renderedWith:`Rendered with`,library:`TradingView Lightweight Charts`},common:{walletStatusRecovery:`Ask in chat to open Settings, then use Troubleshooting to restart the connection service. This does not confirm removal of a connection in your wallet app.`,mainnet:`Sui mainnet`,retrievedAt:`Data retrieved`}},_S={en:gS};function vS(){try{return(navigator.language||`en`).slice(0,2).toLowerCase()}catch{return`en`}}function yS(e=vS()){return _S[e]??gS}var bS=yS(),xS={title:`Account assets`,guidance:(e,t)=>t.recoveryNeeded?`Ask in chat to view the assets for this account.`:void 0,controls:()=>Y(`p`,`ui-note`,`Please provide a Sui address in chat.`),result(e){let t=fS(e.data);if(!t||t.status!==`ok`||!Array.isArray(t.balances)||typeof t.account!=`string`||!Array.isArray(t.nfts)||!Array.isArray(t.objectGroups)||typeof t.objectsTruncated!=`boolean`||typeof t.fetchedAt!=`string`)throw Error(`Account data is incomplete.`);let n=Y(`div`);n.append(SS(t.account,t),CS(t)),n.append(ig(`NFTs`,String(t.nfts.length)));let r=ag(`Details`);return t.nfts.length&&r.body.append(wS(t)),r.body.append(ig(bS.common.retrievedAt,lg(t.fetchedAt))),n.append(r.details,ES(t)),{node:n}}};function SS(e,t){let n=rg(),r=typeof t.name==`string`&&t.name.length>0?t.name:void 0;return r&&n.append(ig(bS.account.name,r)),n.append(ig(bS.account.address,cg(e))),n}function CS(e){let t=rg(bS.account.balances),n=Array.isArray(e.balances)?e.balances:[];if(n.length===0)return t.append(Y(`p`,`ui-note`,bS.account.noBalances)),t;for(let e of n){let n=mS(e);n&&t.append(DS(n))}return t}function wS(e){let t=rg(bS.account.nfts),n=Array.isArray(e.nfts)?e.nfts:[],r=Y(`div`,`account-nfts`);for(let e of n){let t=fS(e);t&&r.append(TS(t))}return t.append(r),t}function TS(e){let t=typeof e.type==`string`?e.type:``,n=typeof e.name==`string`&&e.name.length>0?e.name:eg(t),r=typeof e.imageUrl==`string`&&e.imageUrl.length>0?OS(e.imageUrl):void 0,i=Y(`div`,`account-nft`);if(r){let e=document.createElement(`img`);e.className=`account-nft-img`,e.src=r,e.alt=n,e.loading=`lazy`,e.referrerPolicy=`no-referrer`,e.addEventListener(`error`,()=>{e.replaceWith(Y(`div`,`account-nft-img account-nft-noimg`,bS.account.noImage))}),i.append(e)}else i.append(Y(`div`,`account-nft-img account-nft-noimg`,bS.account.noImage));return i.append(Y(`span`,`account-nft-name`,n)),i}function ES(e){let t=Array.isArray(e.objectGroups)?e.objectGroups:[],n=Y(`div`),r=t.reduce((e,t)=>{let n=fS(t);return e+(typeof n?.count==`number`?n.count:0)},0);return r>0&&n.append(Y(`p`,`ui-note`,`${r} other owned objects are not shown here.`)),e.objectsTruncated===!0&&n.append(og(bS.account.objectsTruncated)),n}function DS(e){let t=Y(`div`,`account-asset`);t.append(Y(`span`,`account-asset-symbol`,e.symbol));let n=Y(`span`,`account-asset-total`);return n.append(e.total),t.append(n),t}function OS(e){let t=e.startsWith(`ipfs://`)?`https://ipfs.io/ipfs/${e.slice(7)}`:e;try{return new URL(t).protocol===`https:`||/^data:image\//i.test(t)?t:``}catch{return``}}dS(`account`,xS);</script></body></html>
3591
+ `)),lv={0:`ED25519`,1:`Secp256k1`,2:`Secp256r1`,3:`MultiSig`,5:`ZkLogin`,6:`Passkey`},uv=e=>Object.freeze(e());function dv(e){return e instanceof Uint8Array||ArrayBuffer.isView(e)&&e.constructor.name===`Uint8Array`&&`BYTES_PER_ELEMENT`in e&&e.BYTES_PER_ELEMENT===1}function fv(e){if(!dv(e))throw TypeError(`Uint8Array expected`)}function pv(e,t){return Array.isArray(t)?t.length===0?!0:e?t.every(e=>typeof e==`string`):t.every(e=>Number.isSafeInteger(e)):!1}function mv(e){if(typeof e!=`function`)throw TypeError(`function expected`);return!0}function hv(e,t){if(typeof t!=`string`)throw TypeError(`${e}: string expected`);return!0}function gv(e,t=`number`){if(typeof e!=`number`)throw TypeError(`${t}: expected number, got ${typeof e}`);if(!Number.isSafeInteger(e))throw RangeError(`${t}: expected safe integer, got ${e}`)}function _v(e,t){if(!pv(!1,t))throw TypeError(`${e}: array of numbers expected`)}var vv=(()=>{let e=[];for(let t=0;t<40;t++)e.push(2**t);return e})();function yv(e,t=e.length){let n=Array(t);for(let r=0;r<t;r++)n[r]=e[r];return n}var bv=(()=>{try{let e=new TextDecoder;return e.decode(Uint8Array.of(65,48,43,127))===`A0+`?e:void 0}catch{return}})(),xv=8192;function Sv(e){let t=e.length;if(bv!==void 0&&t>=12)return bv.decode(e);if(t<=xv)return String.fromCharCode.apply(null,e);let n=``;for(let r=0;r<t;r+=xv)n+=String.fromCharCode.apply(null,e.subarray(r,r+xv));return n}function Cv(e){if(gv(e),e<=0||e>8)throw RangeError(`radix2: bits should be in (0..8]`);let t=vv[e]-1;return{encode:n=>{fv(n);let r=n.length,i=new Uint8Array(Math.ceil(r*8/e)),a=0,o=0,s=0;for(let c=0;c<r;)for(c+2<r?(a=a<<24|n[c]<<16|n[c+1]<<8|n[c+2],o+=24,c+=3):(a=(a<<8|n[c])&65535,o+=8,c++);o-=e,i[s++]=a>>o&t,!(o<e););return o>0&&(i[s]=a<<e-o&t),i},decode:t=>{let n=t.length,r=new Uint8Array(Math.floor(n*e/8)),i=0,a=0,o=0;for(let s=0;s<n;s++)for(i=(i<<e|t[s])&65535,a+=e;a>=8;a-=8)r[o++]=i>>a-8&255;if(i=i<<8-a&255,a>=e)throw Error(`Excess padding`);if(i>0)throw Error(`Non-zero padding: ${i}`);return r}}}function wv(e,t){let n=e.length;if(n>128)throw Error(`alphabet: max 128 letters`);let r=new Uint8Array(n),i=new Int8Array(128).fill(-1);for(let t=0;t<n;t++){let n=e.charCodeAt(t);if(e.codePointAt(t)!==n||n>127)throw Error(`alphabet: single-char ASCII letters only`);r[t]=n,i[n]=t}if(t!==void 0)for(let e of Object.keys(t)){let n=e.charCodeAt(0),r=i[t[e].charCodeAt(0)];if(e.length!==1||n>127||r===void 0||r===-1)throw Error(`alphabet: invalid alias ${e}`);i[n]=r}return{encode:e=>{let t=new Uint8Array(e.length);for(let n=0;n<e.length;n++){let i=e[n],a=r[i];if(a===void 0)throw Error(`alphabet.encode: invalid digit ${i}`);t[n]=a}return Sv(t)},decode:t=>{hv(`decode`,t);let n=t.length,r=new Uint8Array(n);for(let a=0;a<n;a++){let n=t.charCodeAt(a),o=n<128?i[n]:-1;if(o===-1)throw Error(`Unknown letter "${t[a]}". Allowed: ${e}`);r[a]=o}return r}}}function Tv(e){return mv(e),function(...t){try{return e.apply(null,t)}catch{}}}var Ev=wv(`qpzry9x8gf2tvdw0s3jn54khce6mua7l`),Dv=/^[\x21-\x60\x7b-\x7e]+$/;function Ov(e,t){for(let n=0;n<t.length;n++){let r=t.charCodeAt(n);if(r<33||r>126)throw Error(`${e}: printable ASCII expected`)}}function kv(e){let t=e.length,n=new Uint8Array(t);for(let r=0;r<t;r++){let t=e[r];if(t<0||t>=32)throw Error(`alphabet.encode: invalid digit ${t}`);n[r]=t}return n}var Av=[996825010,642813549,513874426,1027748829,705979059];function jv(e){let t=e>>25,n=(e&33554431)<<5;for(let e=0;e<Av.length;e++)(t>>e&1)==1&&(n^=Av[e]);return n}function Mv(e,t,n=1){let r=e.length,i=1;for(let t=0;t<r;t++){let n=e.charCodeAt(t);if(n<33||n>126)throw Error(`Invalid prefix (${e})`);i=jv(i)^n>>5}i=jv(i);for(let t=0;t<r;t++)i=jv(i)^e.charCodeAt(t)&31;for(let e of t)i=jv(i)^e;for(let e=0;e<6;e++)i=jv(i);i^=n;let a=new Uint8Array(6);for(let e=0;e<6;e++)a[e]=i>>>5*(5-e)&31;return Ev.encode(a)}function Nv(e){let t=e===`bech32`?1:734539939,n=Cv(5),r=e=>{fv(e);let t=e.length,n=Array(Math.ceil(t*8/5)),r=0,i=0,a=0;for(let o=0;o<t;o++)for(r=r<<8|e[o],i+=8;i>=5;i-=5)n[a++]=r>>i-5&31;return i>0&&(n[a]=r<<5-i&31),n},i=e=>{_v(`radix2.decode`,e);let t=e.length,r=new Uint8Array(t);for(let n=0;n<t;n++){let t=e[n];if(t<0||t>=32)throw Error(`convertRadix2: invalid word=${t}`);r[n]=t}return n.decode(r)},a=Tv(i);function o(e,n,r=90){hv(`bech32.encode prefix`,e),r!==!1&&gv(r,`limit`),dv(n)&&(n=yv(n)),_v(`bech32.encode`,n);let i=e.length;if(i===0)throw TypeError(`Invalid prefix length ${i}`);let a=i+7+n.length;if(r!==!1&&a>r)throw TypeError(`Length ${a} exceeds limit ${r}`);Ov(`bech32.encode prefix`,e);let o=e.toLowerCase(),s=Mv(o,n,t);return`${o}1${Ev.encode(kv(n))}${s}`}function s(e,n=90){hv(`bech32.decode input`,e),n!==!1&&gv(n,`limit`);let r=e.length;if(r<8||n!==!1&&r>n)throw TypeError(`invalid string length ${r}, expected (8..${n})`);let i=e.toLowerCase();if(e!==i&&!Dv.test(e))throw Ov(`bech32.decode input`,e),Error(`mixed-case string not allowed`);let a=i.lastIndexOf(`1`);if(a===0||a===-1)throw Error(`invalid separator "1"`);let o=i.slice(0,a),s=i.slice(a+1);if(s.length<6)throw Error(`invalid data length`);let c=Ev.decode(s),l=yv(c,c.length-6),u=Mv(o,l,t);if(!s.endsWith(u))throw Error(`Invalid checksum in ${e}`);return{prefix:o,words:l}}let c=Tv(s);function l(e,t=90){let{prefix:n,words:r}=s(e,t);return{prefix:n,words:r,bytes:i(r)}}function u(e,t){return o(e,r(t))}return{encode:o,decode:s,encodeFromBytes:u,decodeToBytes:l,decodeUnsafe:c,fromWords:i,fromWordsUnsafe:a,toWords:r}}var Pv=uv(()=>Nv(`bech32`));function Fv(e){let{prefix:t,words:n}=Pv.decode(e);if(t!==`suiprivkey`)throw Error(`invalid private key prefix`);let r=new Uint8Array(Pv.fromWords(n)),i=r.slice(1);return{scheme:lv[r[0]],secretKey:i}}var Iv=`external-proposal-alpha-2026-05-25`,Lv=`proposal-review-model-alpha-2026-05-25`,Rv=F().refine(e=>{let t=new Date(e);return!Number.isNaN(t.getTime())&&t.toISOString()===e},`Expected ISO 8601 UTC timestamp`),zv=/transaction\s*bytes?|transactionBytes|tx\s*bytes?|serialized\s*transaction|serializedTransaction|signed\s*transaction|signing\s*request|signingRequest|wallet\s*authorization|walletAuthorization|private\s*key|privateKey|secret\s*key|secretKey|seed\s*phrase|mnemonic|suiprivkey|signature|route[-_\s]*selected|routeSelectedPlan|bcs\s*transaction|programmable\s*transaction/i,Bv=/(?:0x[0-9a-fA-F]{160,}|[A-Za-z0-9+/_=-]{160,})/,Vv=/suiprivkey1[023456789acdefghjklmnpqrstuvwxyz]+/gi,Hv=/(^|[^0-9a-fA-F])(?:0x)?[0-9a-fA-F]{64}($|[^0-9a-fA-F])/,Uv=/(^|[^A-Za-z0-9+/_=-])(?:[A-Za-z0-9+/]{43}=|[A-Za-z0-9+/]{44}|[A-Za-z0-9_-]{43,44})($|[^A-Za-z0-9+/_=-])/,Wv=/^(?:0|[1-9][0-9]*)(?:\.[0-9]+)?$/,Gv=[12,15,18,21,24];function Kv(e,t,n={}){return F().min(1).max(e).superRefine((e,r)=>{(zv.test(e)||Bv.test(e)||Jv(e)||Yv(e)||!n.allowRawSecretLikeText&&Xv(e))&&r.addIssue({code:`custom`,message:`${t} must not contain executable, signing, private-key, mnemonic, route-selected, or encoded secret-like material`})})}function qv(e,t){return Kv(e,t,{allowRawSecretLikeText:!0})}function Jv(e){return(e.match(Vv)??[]).some(e=>{try{return Fv(e.toLowerCase()),!0}catch{return e.toLowerCase().startsWith(`suiprivkey1`)}})}function Yv(e){let t=e.normalize(`NFKD`).toLowerCase().replace(/[^a-z]+/g,` `).trim().split(/\s+/).filter(Boolean);for(let e of Gv)if(!(t.length<e)){for(let n=0;n<=t.length-e;n+=1)if(sv(t.slice(n,n+e).join(` `),cv))return!0}return!1}function Xv(e){return Hv.test(e)||Uv.test(e)}var Zv=Kv(80,`amountDisplay`).refine(e=>Wv.test(e)&&/[1-9]/.test(e),{message:`Expected a positive decimal display amount`}),Qv=V({kind:G([`mcp_server`,`ai_client`,`user`,`other`]),name:Kv(120,`source.name`),reference:Kv(256,`source.reference`).optional()}).strict(),$v=V({address:m_.optional(),label:Kv(120,`party.label`).optional()}).strict().refine(e=>e.address!==void 0||e.label!==void 0,{message:`Expected address or label`}),ey=V({amountDisplay:Zv,amountKind:K(`display_proposal`).default(`display_proposal`),symbol:Kv(64,`amount.symbol`).optional(),coinType:qv(512,`amount.coinType`).optional(),denomination:Kv(64,`amount.denomination`).optional()}).strict(),ty=V({packageId:qv(128,`action.target.packageId`).optional(),module:Kv(128,`action.target.module`).optional(),function:Kv(128,`action.target.function`).optional(),objectId:qv(128,`action.target.objectId`).optional(),label:Kv(120,`action.target.label`).optional()}).strict().refine(e=>e.packageId!==void 0||e.module!==void 0||e.function!==void 0||e.objectId!==void 0||e.label!==void 0,{message:`Expected at least one action target field`}),ny=V({direction:G([`outgoing`,`expected_incoming`,`fee`]),amount:ey,recipient:$v.optional(),description:Kv(512,`assetFlow.description`).optional()}).strict(),ry=V({id:Kv(120,`proposal.id`),source:Qv,network:K(`sui:mainnet`),createdAt:Rv,expiresAt:Rv.optional(),purpose:Kv(512,`purpose`),assumptions:B(Kv(512,`assumptions[]`)).max(20).optional(),requiredUserChoices:B(Kv(512,`requiredUserChoices[]`)).max(20).optional()}).strict(),iy=mc(`type`,[ry.extend({type:K(`payment`),payment:V({amount:ey,recipient:$v,target:Kv(512,`payment.target`).optional()}).strict()}).strict(),ry.extend({type:K(`sui_action`),action:V({actionKind:Kv(120,`action.actionKind`),target:ty,recipient:$v.optional(),assetFlow:B(ny).max(20).optional()}).strict()}).strict()]),ay=V({id:F(),label:F(),status:G([`pass`,`warning`,`fail`]),message:F(),source:G([`proposal`,`adapter`,`registry`,`quote`,`wallet`,`simulation`,`network`])}).strict(),oy=V({id:F(),label:F(),reason:F()}).strict(),sy=V({modelVersion:K(Lv),contractVersion:K(Iv),proposalId:F(),proposalType:G([`payment`,`sui_action`]),proposalSource:Qv,proposedAction:V({kind:G([`payment`,`sui_action`]),title:F(),purpose:F(),network:K(`sui:mainnet`),recipient:$v.optional(),target:U([F(),ty]).optional()}).strict(),assetFlow:V({outgoing:B(ey),expectedIncoming:B(ey),fees:B(ey)}).strict(),recipients:B($v),targets:B(U([F(),ty])),evidenceUsed:B(V({id:F(),label:F(),source:G([`external_proposal`,`local_schema`]),summary:F()}).strict()),missingEvidence:B(oy),requiredUserChoices:B(oy),unsupportedClaims:B(V({id:F(),label:F(),reason:F()}).strict()),rejectedExecutableFields:B(V({fieldName:F(),reason:F()}).strict()),freshness:V({proposalCreatedAt:Rv,proposalExpiresAt:Rv.optional(),evaluatedAt:Rv,status:G([`current`,`expired`,`created_in_future`,`expiry_not_provided`]),reason:F()}).strict(),blockingChecks:B(ay),nonSignableReason:V({code:K(`external_proposal_review_only`),message:F(),blockedCapabilities:B(F())}).strict()}).strict();V({requestedIntent:iy,implementationStatus:K(`read_only_review_only`),contractVersion:K(Iv)}).strict();var cy=[`adapter_not_implemented`,`producer_stage_missing`,`wallet_review_contract_emit_missing`,`network_mismatch`,`insufficient_balance`,`insufficient_gas`,`allowlist_violation`,`asset_mismatch`,`amount_mismatch`,`wallet_mismatch`,`unsupported_action`,`object_resolution_failed`,`proposal_review_only`],ly=[`review_evidence_stale`,`quote_stale`,`quote_unavailable`,`simulation_transient_failure`,`review_update_failed`,`wallet_connection_changed`],uy=[`proposed`,`awaiting_wallet`,`wallet_connected`,`ready_for_wallet_review`,`refresh_required`,`blocked`,`expired`],dy=[`humanReadableReview`,`simulation`,`transactionReviewData`,`ptbVisualization`,`assetFlowActual`,`beforeAfterBalance`],fy=G([`client.core.simulateTransaction`,`client.transactionExecutionService.simulateTransaction`]),py=`ptb-visualization-contract-alpha-2026-05-25`,my=[`proposedAction`,`assetFlow`,`recipients`,`targets`,`evidenceUsed`,`missingEvidence`,`requiredUserChoices`,`unsupportedClaims`,`freshness`,`blockingChecks`],hy=[`effects`,`balanceChanges`,`objectTypes`,`transaction`],gy=[`transaction_bytes`,`serialized_transaction`,`wallet_signature_request`,`private_key_material`,`wallet_authorization`,`signing_data`,`signing_readiness`,`payment_execution_readiness`],_y=[`transaction_building_input`,`wallet_authorization`,`signing_data`,`signing_readiness`,`payment_execution_readiness`,`route_recommendation`],vy=p_,yy=`MIST`,by=[`checkedAt`,`expiresAt`],xy=[`checkedAt`,`expiryStatus`],Sy=[`rawAmount`,`asset`,`amountRole`],Cy=[`minOutRaw`,`asset`,`amountRole`],wy=[`gasBudgetRaw`,`asset`,`amountRole`],Ty=[`gasUsedRaw`,`asset`,`amountRole`],Ey=[`checkedAt`,`gasResolutionStatus`,`unresolvedReason`],Dy=[`balanceChanges`,`asset`,`amountRole`],Oy=[`coinType`,`decimals`],ky=[`quoteEvidenceId`,`minOutRaw`],Ay=[`maxSlippageBps`,`userSelection`],jy=[`maxSlippageBps`,`minOutRaw`],My=[`ownerAccount`,`objects`],Ny=[`pinned_sdk_registry`,`verified_mainnet_onchain_metadata`,`wallet_account_read`,`quote_evidence`,`review_time_simulation`,`validated_request_fact`,`user_explicit_choice`],Py=[`input`,`expected_output`,`minimum_output`,`gas_budget`,`gas_used`,`fee`,`balance_delta`],Fy={input:{kinds:[`validated_request_fact`,`wallet_account_read`,`user_explicit_choice`],fields:Sy},expected_output:{kinds:[`quote_evidence`,`review_time_simulation`],fields:Sy},minimum_output:{kinds:[`quote_evidence`],fields:Cy},gas_budget:{kinds:[`review_time_simulation`],fields:wy},gas_used:{kinds:[`review_time_simulation`],fields:Ty},fee:{kinds:[`review_time_simulation`],fields:Sy},balance_delta:{kinds:[`review_time_simulation`],fields:Dy}},Iy={pinned_sdk_metadata:{kinds:[`pinned_sdk_registry`],fields:Oy},verified_mainnet_onchain_metadata:{kinds:[`verified_mainnet_onchain_metadata`],fields:Oy}},Ly={user_explicit:{kinds:[`user_explicit_choice`],fields:Ay},adapter_policy_from_quote_evidence:{kinds:[`quote_evidence`],fields:jy}},Ry={kinds:[`review_time_simulation`],fields:Ey},zy={kinds:[`quote_evidence`],fields:ky},By={kinds:[`validated_request_fact`],fields:by},Vy={kinds:[`validated_request_fact`],fields:xy},Hy={raw_quantity_amount:{byRole:Fy},unit_metadata:{bySource:Iy},gas_unresolved_status:Ry,expiry_status:{current:By,expired:By,not_provided:Vy,not_applicable:Vy},quote_min_out:zy,slippage_policy:{bySource:Ly},object_ownership:{kinds:[`wallet_account_read`],fields:My},simulation_result:{kinds:[`review_time_simulation`],fields:hy}},Uy={gasBudgetClaimId:{factKind:`raw_quantity_amount`,role:`gas_budget`,assetCoinType:vy,rawUnit:yy},gasUsedClaimId:{factKind:`raw_quantity_amount`,role:`gas_used`,assetCoinType:vy,rawUnit:yy},gasObjectOwnershipClaimId:{factKind:`object_ownership`,ownership:`owned_by_account`}},Wy=F().refine(e=>{let t=new Date(e);return!Number.isNaN(t.getTime())&&t.toISOString()===e},`Expected ISO 8601 UTC timestamp`),Gy=S_(`unsigned integer`),Ky=F().regex(/^0x[0-9a-fA-F]{1,64}$/,{message:`Expected a Sui object id`}),qy=F().min(1).max(512).refine(e=>{try{return T_(e)===e}catch{return!1}},`Expected a normalized Sui struct tag coin type`),X=F().min(1).max(120),Jy=V({symbol:F().min(1).max(64).optional(),coinType:qy}).strict(),Yy=/transaction\s*bytes?|tx\s*bytes?|serialized\s*transaction|serializedTransaction|signed\s*transaction|signing\s*request|signingRequest|wallet\s*authorization|walletAuthorization|private\s*key|privateKey|secret\s*key|secretKey|seed\s*phrase|mnemonic|suiprivkey|signature|bcs\s*transaction/i,Xy=/(?:0x[0-9a-fA-F]{160,}|[A-Za-z0-9+/_=-]{160,})/;function Zy(e,t){return F().min(1).max(e).superRefine((e,n)=>{(Yy.test(e)||Xy.test(e))&&n.addIssue({code:`custom`,message:`${t} must not contain executable transaction, signing, private-key, mnemonic, or long encoded material`})})}function Qy(e,t){let n=new Set(e);return t.filter(e=>!n.has(e))}function $y(e,t,n,r,i){let a=Qy(t,n);a.length!==0&&e.addIssue({code:`custom`,path:r,message:`${i} must include ${a.join(`, `)}`})}function eb(e,t,n,r,i){$y(e,t,n,r,i)}function tb(e,t,n){e.addIssue({code:`custom`,path:t,message:`${n} must match referenced evidence claim`})}function Z(e,t,n,r,i){t!==n&&tb(e,r,i)}function nb(e,t,n,r,i){let a=new Set(t),o=new Set(n);if(a.size!==o.size)tb(e,r,i);else for(let t of a)if(!o.has(t)){tb(e,r,i);return}}function rb(e,t,n,r,i){(t.symbol!==n.symbol||t.coinType!==n.coinType)&&tb(e,r,i)}function ib(e,t,n,r,i){try{T_(t.coinType)!==n&&tb(e,r,i)}catch{tb(e,r,i)}}var ab=V({kind:G([`natural_language_intent`,`external_proposal`,`mcp_action_request`,`local_review_request`]),sourceId:F().min(1).max(160),capturedAt:Wy,authority:K(`untrusted_until_review_regenerates_and_verifies`),userSelectionSource:G([`user_explicit`,`prior_user_explicit_context`]).optional()}).strict(),ob=V({id:X,kind:G(Ny),network:K(`sui:mainnet`),source:F().min(1).max(240),verifiedAt:Wy,fields:B(F().min(1).max(120)).min(1)}).strict(),sb=mc(`factKind`,[V({id:X,factKind:K(`raw_quantity_amount`),sourceEvidenceId:X,role:G(Py),asset:Jy,rawAmount:Gy}).strict(),V({id:X,factKind:K(`unit_metadata`),sourceEvidenceId:X,source:G([`pinned_sdk_metadata`,`verified_mainnet_onchain_metadata`]),coinType:qy,decimals:L().int().min(0).max(255)}).strict(),V({id:X,factKind:K(`gas_unresolved_status`),sourceEvidenceId:X,checkedAt:Wy,status:K(`unresolved`),reason:F().min(1).max(240)}).strict(),V({id:X,factKind:K(`expiry_status`),sourceEvidenceId:X,checkedAt:Wy,status:G([`current`,`expired`,`not_provided`,`not_applicable`]),expiresAt:Wy.optional(),reason:F().min(1).max(240).optional()}).strict(),V({id:X,factKind:K(`quote_min_out`),sourceEvidenceId:X,quoteEvidenceId:F().min(1).max(120),minOutRaw:Gy}).strict(),V({id:X,factKind:K(`slippage_policy`),sourceEvidenceId:X,policySource:G([`user_explicit`,`adapter_policy_from_quote_evidence`]),maxSlippageBps:L().int().min(0).max(1e4),minOutRaw:Gy.optional()}).strict(),V({id:X,factKind:K(`object_ownership`),sourceEvidenceId:X,objectId:Ky,ownerAccount:m_,ownership:G([`owned_by_account`,`shared_object`,`immutable_or_package`,`not_owned_by_account`])}).strict(),V({id:X,factKind:K(`simulation_result`),sourceEvidenceId:X,provider:fy,checksEnabled:K(!0),simulatedAt:Wy,status:G([`success`,`failed`,`unavailable`]),requiredFields:B(G(hy)).min(hy.length),missingFields:B(G(hy)).default([]),failureReason:F().min(1).max(240).optional()}).strict()]),cb=V({id:X,role:G(Py),asset:Jy,rawAmount:Gy,unit:V({decimals:L().int().min(0).max(255),source:G([`pinned_sdk_metadata`,`verified_mainnet_onchain_metadata`]),sourceField:F().min(1).max(160),unitClaimId:X}).strict(),amountClaimId:X,displayOnly:V({amountDisplay:F().min(1).max(120),reason:K(`presentation_only_not_signing_input`)}).strict().optional()}).strict(),lb=V({objectId:Ky,ownerAccount:m_,ownershipClaimId:X}).strict(),ub=V({source:K(`review_time_simulation`),checkedAt:Wy,gasBudgetRaw:Gy.optional(),gasBudgetClaimId:X.optional(),gasUsedRaw:Gy.optional(),gasUsedClaimId:X.optional(),gasObjects:B(lb).optional(),unresolvedReason:F().min(1).max(240).optional(),unresolvedClaimId:X.optional()}).strict().superRefine((e,t)=>{let n=e.gasBudgetRaw!==void 0||e.gasUsedRaw!==void 0;!n&&e.unresolvedReason===void 0&&t.addIssue({code:`custom`,message:`Expected gas evidence or unresolvedReason`}),n&&e.unresolvedReason!==void 0&&t.addIssue({code:`custom`,path:[`unresolvedReason`],message:`Resolved gas quantities must not include unresolvedReason`}),e.gasBudgetRaw!==void 0&&e.gasBudgetClaimId===void 0&&t.addIssue({code:`custom`,path:[`gasBudgetClaimId`],message:`gasBudgetRaw requires gasBudgetClaimId`}),e.gasBudgetRaw===void 0&&e.gasBudgetClaimId!==void 0&&t.addIssue({code:`custom`,path:[`gasBudgetClaimId`],message:`gasBudgetClaimId requires gasBudgetRaw`}),e.gasUsedRaw!==void 0&&e.gasUsedClaimId===void 0&&t.addIssue({code:`custom`,path:[`gasUsedClaimId`],message:`gasUsedRaw requires gasUsedClaimId`}),e.gasUsedRaw===void 0&&e.gasUsedClaimId!==void 0&&t.addIssue({code:`custom`,path:[`gasUsedClaimId`],message:`gasUsedClaimId requires gasUsedRaw`}),e.unresolvedReason!==void 0&&e.unresolvedClaimId===void 0&&t.addIssue({code:`custom`,path:[`unresolvedClaimId`],message:`unresolvedReason requires unresolvedClaimId`}),e.unresolvedReason===void 0&&e.unresolvedClaimId!==void 0&&t.addIssue({code:`custom`,path:[`unresolvedClaimId`],message:`unresolvedClaimId requires unresolvedReason`})}),db=mc(`status`,[V({checkedAt:Wy,status:K(`current`),expiresAt:Wy,evidenceClaimId:X}).strict(),V({checkedAt:Wy,status:K(`expired`),expiresAt:Wy,evidenceClaimId:X}).strict(),V({checkedAt:Wy,status:K(`not_provided`),evidenceClaimId:X,reason:F().min(1).max(240),expiresAt:lc().optional()}).strict(),V({checkedAt:Wy,status:K(`not_applicable`),evidenceClaimId:X,reason:F().min(1).max(240),expiresAt:lc().optional()}).strict()]).superRefine((e,t)=>{e.status===`current`&&Date.parse(e.expiresAt)<=Date.parse(e.checkedAt)&&t.addIssue({code:`custom`,path:[`expiresAt`],message:`Current expiry evidence requires expiresAt after checkedAt`}),e.status===`expired`&&Date.parse(e.expiresAt)>Date.parse(e.checkedAt)&&t.addIssue({code:`custom`,path:[`expiresAt`],message:`Expired expiry evidence requires expiresAt at or before checkedAt`})}),fb=V({status:G([`required_and_verified`,`not_required_for_action`,`missing`,`stale`]),quoteEvidenceId:F().min(1).max(120).optional(),quoteEvidenceClaimId:X.optional(),maxSlippageBps:L().int().min(0).max(1e4).optional(),minOutRaw:Gy.optional(),policySource:G([`user_explicit`,`adapter_policy_from_quote_evidence`]).optional(),policyEvidenceClaimId:X.optional()}).strict().superRefine((e,t)=>{e.status===`required_and_verified`&&(e.quoteEvidenceId===void 0||e.quoteEvidenceClaimId===void 0||e.maxSlippageBps===void 0||e.minOutRaw===void 0||e.policySource===void 0||e.policyEvidenceClaimId===void 0)&&t.addIssue({code:`custom`,message:`Verified min-out evidence requires quoteEvidenceId, quoteEvidenceClaimId, maxSlippageBps, minOutRaw, policySource, and policyEvidenceClaimId`}),e.quoteEvidenceId!==void 0&&e.quoteEvidenceClaimId===void 0&&t.addIssue({code:`custom`,path:[`quoteEvidenceClaimId`],message:`quoteEvidenceId requires quoteEvidenceClaimId`}),e.quoteEvidenceId===void 0&&e.quoteEvidenceClaimId!==void 0&&t.addIssue({code:`custom`,path:[`quoteEvidenceClaimId`],message:`quoteEvidenceClaimId requires quoteEvidenceId`}),e.minOutRaw!==void 0&&e.quoteEvidenceClaimId===void 0&&t.addIssue({code:`custom`,path:[`quoteEvidenceClaimId`],message:`minOutRaw requires quoteEvidenceClaimId`}),e.maxSlippageBps!==void 0&&e.policySource===void 0&&t.addIssue({code:`custom`,path:[`policySource`],message:`maxSlippageBps requires policySource`}),e.policySource!==void 0&&e.policyEvidenceClaimId===void 0&&t.addIssue({code:`custom`,path:[`policyEvidenceClaimId`],message:`policySource requires policyEvidenceClaimId`}),e.policySource===void 0&&e.policyEvidenceClaimId!==void 0&&t.addIssue({code:`custom`,path:[`policyEvidenceClaimId`],message:`policyEvidenceClaimId requires policySource`})}),pb=V({checkedAt:Wy,ownerAccount:m_,objects:B(V({objectId:Ky,role:G([`input_coin`,`gas_coin`,`protocol_object`,`shared_object`,`receiving_object`]),ownership:G([`owned_by_account`,`shared_object`,`immutable_or_package`,`not_owned_by_account`]),evidenceClaimId:X}).strict()).min(1)}).strict(),mb=V({evidenceClaimId:X,transactionDigest:h_,provider:fy,checksEnabled:K(!0),simulatedAt:Wy,status:G([`success`,`failed`,`unavailable`]),requiredFields:B(G(hy)).min(hy.length),missingFields:B(G(hy)).default([]),failureReason:F().min(1).max(240).optional()}).strict().refine(e=>e.status!==`success`||e.missingFields.length===0,{message:`Successful simulation evidence must not have missing required fields`}).refine(e=>hy.every(t=>e.requiredFields.includes(t)),{message:`Simulation evidence must include every required simulation field`}).refine(e=>e.status===`success`||e.failureReason!==void 0,{message:`Failed or unavailable simulation evidence requires failureReason`}).refine(e=>e.status!==`success`||e.failureReason===void 0,{message:`Successful simulation evidence must not include failureReason`}),hb=V({fields:B(G(my)).min(my.length),transactionDigest:h_,source:K(`review_model_or_adapter_equivalent`),purpose:K(`human_review_before_wallet_authorization`)}).strict().refine(e=>my.every(t=>e.fields.includes(t)),{message:`Human-readable review fields must include every required review field`}),gb=V({runtimeStatus:K(`emitted_pre_handoff`),mcpAndReviewUiMayExpose:B(G([`human_readable_review`,`ptb_visualization_artifact`,`diagnostics`,`status_checks`])).min(1),prohibited:B(G(gy)).min(1)}).strict().superRefine((e,t)=>{eb(t,e.prohibited,gy,[`prohibited`],`prohibited`)}),_b=V({schemaVersion:K(1),adapterId:F().min(1).max(120),protocol:F().min(1).max(120),actionKind:F().min(1).max(120),network:K(`sui:mainnet`),inputProvenance:ab,sourceReferences:B(ob).min(1),evidenceClaims:B(sb).min(1),rawQuantities:B(cb).min(1),gas:ub,expiry:db,slippageOrMinOut:fb,objectOwnership:pb,simulation:mb,humanReadableReview:hb,outputBoundary:gb,reviewedTransactionDigest:h_}).strict().superRefine((e,t)=>{let n=new Set,r=new Map,i=new Map;e.sourceReferences.forEach((e,a)=>{n.has(e.id)&&t.addIssue({code:`custom`,path:[`sourceReferences`,a,`id`],message:`sourceReferences id must be unique: ${e.id}`}),n.add(e.id),r.has(e.id)||(r.set(e.id,e),i.set(e.id,a))});let a=new Set,o=new Map,s=new Map;e.evidenceClaims.forEach((e,n)=>{a.has(e.id)&&t.addIssue({code:`custom`,path:[`evidenceClaims`,n,`id`],message:`evidenceClaims id must be unique: ${e.id}`}),a.add(e.id),o.has(e.id)||(o.set(e.id,e),s.set(e.id,n))});let c=(e,n)=>{if(e===void 0)return;let i=r.get(e);if(i!==void 0)return i;t.addIssue({code:`custom`,path:n,message:`source evidence id must reference sourceReferences[].id: ${e}`})},l=(e,n,r,a)=>{if(e===void 0)return;let o=c(e,r);if(o===void 0)return;let s=i.get(e),l=s===void 0?r:[`sourceReferences`,s];n.kinds.includes(o.kind)||t.addIssue({code:`custom`,path:[...l,`kind`],message:`${a} source kind must be one of ${n.kinds.join(`, `)}`}),$y(t,o.fields,n.fields,[...l,`fields`],`${a} sourceReferences fields`)},u=(e,n,r,i)=>{if(e===void 0){t.addIssue({code:`custom`,path:r,message:`${i} must reference evidenceClaims[].id`});return}let a=o.get(e);if(a===void 0)t.addIssue({code:`custom`,path:r,message:`${i} must reference evidenceClaims[].id: ${e}`});else{if(a.factKind!==n){let a=s.get(e),o=a===void 0?r:[`evidenceClaims`,a,`factKind`];t.addIssue({code:`custom`,path:o,message:`${i} evidence claim factKind must be ${n}`})}return a}};if(e.evidenceClaims.forEach((e,n)=>{e.factKind===`raw_quantity_amount`&&l(e.sourceEvidenceId,Hy.raw_quantity_amount.byRole[e.role],[`evidenceClaims`,n,`sourceEvidenceId`],`evidenceClaims[${n}].raw_quantity_amount`),e.factKind===`unit_metadata`&&l(e.sourceEvidenceId,Hy.unit_metadata.bySource[e.source],[`evidenceClaims`,n,`sourceEvidenceId`],`evidenceClaims[${n}].unit_metadata`),e.factKind===`gas_unresolved_status`&&l(e.sourceEvidenceId,Hy.gas_unresolved_status,[`evidenceClaims`,n,`sourceEvidenceId`],`evidenceClaims[${n}].gas_unresolved_status`),e.factKind===`expiry_status`&&(l(e.sourceEvidenceId,Hy.expiry_status[e.status],[`evidenceClaims`,n,`sourceEvidenceId`],`evidenceClaims[${n}].expiry_status`),(e.status===`current`||e.status===`expired`)&&e.expiresAt===void 0&&t.addIssue({code:`custom`,path:[`evidenceClaims`,n,`expiresAt`],message:`Current or expired expiry claim requires expiresAt`}),(e.status===`not_provided`||e.status===`not_applicable`)&&e.reason===void 0&&t.addIssue({code:`custom`,path:[`evidenceClaims`,n,`reason`],message:`Unavailable expiry claim requires reason`}),(e.status===`not_provided`||e.status===`not_applicable`)&&e.expiresAt!==void 0&&t.addIssue({code:`custom`,path:[`evidenceClaims`,n,`expiresAt`],message:`Unavailable expiry claim must not include expiresAt`}),e.status===`current`&&e.expiresAt!==void 0&&Date.parse(e.expiresAt)<=Date.parse(e.checkedAt)&&t.addIssue({code:`custom`,path:[`evidenceClaims`,n,`expiresAt`],message:`Current expiry claim requires expiresAt after checkedAt`}),e.status===`expired`&&e.expiresAt!==void 0&&Date.parse(e.expiresAt)>Date.parse(e.checkedAt)&&t.addIssue({code:`custom`,path:[`evidenceClaims`,n,`expiresAt`],message:`Expired expiry claim requires expiresAt at or before checkedAt`})),e.factKind===`quote_min_out`&&l(e.sourceEvidenceId,Hy.quote_min_out,[`evidenceClaims`,n,`sourceEvidenceId`],`evidenceClaims[${n}].quote_min_out`),e.factKind===`slippage_policy`&&(l(e.sourceEvidenceId,Hy.slippage_policy.bySource[e.policySource],[`evidenceClaims`,n,`sourceEvidenceId`],`evidenceClaims[${n}].slippage_policy`),e.policySource===`adapter_policy_from_quote_evidence`&&e.minOutRaw===void 0&&t.addIssue({code:`custom`,path:[`evidenceClaims`,n,`minOutRaw`],message:`Adapter-derived slippage policy claim requires minOutRaw`})),e.factKind===`object_ownership`&&l(e.sourceEvidenceId,Hy.object_ownership,[`evidenceClaims`,n,`sourceEvidenceId`],`evidenceClaims[${n}].object_ownership`),e.factKind===`simulation_result`&&(l(e.sourceEvidenceId,Hy.simulation_result,[`evidenceClaims`,n,`sourceEvidenceId`],`evidenceClaims[${n}].simulation_result`),e.status===`success`&&e.missingFields.length!==0&&t.addIssue({code:`custom`,path:[`evidenceClaims`,n,`missingFields`],message:`Successful simulation claim must not have missing required fields`}),hy.every(t=>e.requiredFields.includes(t))||t.addIssue({code:`custom`,path:[`evidenceClaims`,n,`requiredFields`],message:`Simulation claim must include every required simulation field`}),e.status!==`success`&&e.failureReason===void 0&&t.addIssue({code:`custom`,path:[`evidenceClaims`,n,`failureReason`],message:`Failed or unavailable simulation claim requires failureReason`}),e.status===`success`&&e.failureReason!==void 0&&t.addIssue({code:`custom`,path:[`evidenceClaims`,n,`failureReason`],message:`Successful simulation claim must not include failureReason`}))}),e.rawQuantities.forEach((e,n)=>{let r=u(e.amountClaimId,`raw_quantity_amount`,[`rawQuantities`,n,`amountClaimId`],`rawQuantities[${n}].amountClaimId`);r?.factKind===`raw_quantity_amount`&&(Z(t,e.role,r.role,[`rawQuantities`,n,`role`],`rawQuantities[${n}].role`),Z(t,e.rawAmount,r.rawAmount,[`rawQuantities`,n,`rawAmount`],`rawQuantities[${n}].rawAmount`),rb(t,e.asset,r.asset,[`rawQuantities`,n,`asset`],`rawQuantities[${n}].asset`));let i=u(e.unit.unitClaimId,`unit_metadata`,[`rawQuantities`,n,`unit`,`unitClaimId`],`rawQuantities[${n}].unit.unitClaimId`);i?.factKind===`unit_metadata`&&(Z(t,e.unit.source,i.source,[`rawQuantities`,n,`unit`,`source`],`rawQuantities[${n}].unit.source`),Z(t,e.unit.decimals,i.decimals,[`rawQuantities`,n,`unit`,`decimals`],`rawQuantities[${n}].unit.decimals`),e.asset.coinType!==void 0&&Z(t,e.asset.coinType,i.coinType,[`rawQuantities`,n,`asset`,`coinType`],`rawQuantities[${n}].asset.coinType`))}),e.gas.gasBudgetRaw!==void 0){let n=u(e.gas.gasBudgetClaimId,`raw_quantity_amount`,[`gas`,`gasBudgetClaimId`],`gas.gasBudgetClaimId`);n?.factKind===`raw_quantity_amount`&&(Z(t,n.role,Uy.gasBudgetClaimId.role,[`gas`,`gasBudgetClaimId`],`gas.gasBudgetClaimId role`),ib(t,n.asset,Uy.gasBudgetClaimId.assetCoinType,[`gas`,`gasBudgetClaimId`],`gas.gasBudgetClaimId asset`),Z(t,e.gas.gasBudgetRaw,n.rawAmount,[`gas`,`gasBudgetRaw`],`gas.gasBudgetRaw`))}if(e.gas.gasUsedRaw!==void 0){let n=u(e.gas.gasUsedClaimId,`raw_quantity_amount`,[`gas`,`gasUsedClaimId`],`gas.gasUsedClaimId`);n?.factKind===`raw_quantity_amount`&&(Z(t,n.role,Uy.gasUsedClaimId.role,[`gas`,`gasUsedClaimId`],`gas.gasUsedClaimId role`),ib(t,n.asset,Uy.gasUsedClaimId.assetCoinType,[`gas`,`gasUsedClaimId`],`gas.gasUsedClaimId asset`),Z(t,e.gas.gasUsedRaw,n.rawAmount,[`gas`,`gasUsedRaw`],`gas.gasUsedRaw`))}if(e.gas.unresolvedReason!==void 0){let n=u(e.gas.unresolvedClaimId,`gas_unresolved_status`,[`gas`,`unresolvedClaimId`],`gas.unresolvedClaimId`);n?.factKind===`gas_unresolved_status`&&(Z(t,n.status,`unresolved`,[`gas`,`unresolvedClaimId`],`gas.unresolvedClaimId status`),Z(t,e.gas.checkedAt,n.checkedAt,[`gas`,`checkedAt`],`gas.checkedAt`),Z(t,e.gas.unresolvedReason,n.reason,[`gas`,`unresolvedReason`],`gas.unresolvedReason`))}e.gas.gasObjects?.forEach((e,n)=>{let r=u(e.ownershipClaimId,`object_ownership`,[`gas`,`gasObjects`,n,`ownershipClaimId`],`gas.gasObjects[${n}].ownershipClaimId`);r?.factKind===`object_ownership`&&(Z(t,e.objectId,r.objectId,[`gas`,`gasObjects`,n,`objectId`],`gas.gasObjects[${n}].objectId`),Z(t,e.ownerAccount,r.ownerAccount,[`gas`,`gasObjects`,n,`ownerAccount`],`gas.gasObjects[${n}].ownerAccount`),Z(t,r.ownership,Uy.gasObjectOwnershipClaimId.ownership,[`gas`,`gasObjects`,n,`ownershipClaimId`],`gas.gasObjects[${n}].ownershipClaimId ownership`))});let d=u(e.expiry.evidenceClaimId,`expiry_status`,[`expiry`,`evidenceClaimId`],`expiry.evidenceClaimId`);if(d?.factKind===`expiry_status`&&(Z(t,e.expiry.status,d.status,[`expiry`,`status`],`expiry.status`),Z(t,e.expiry.checkedAt,d.checkedAt,[`expiry`,`checkedAt`],`expiry.checkedAt`),e.expiry.status===`current`||e.expiry.status===`expired`?Z(t,e.expiry.expiresAt,d.expiresAt,[`expiry`,`expiresAt`],`expiry.expiresAt`):Z(t,e.expiry.reason,d.reason,[`expiry`,`reason`],`expiry.reason`)),e.slippageOrMinOut.quoteEvidenceClaimId!==void 0){let n=u(e.slippageOrMinOut.quoteEvidenceClaimId,`quote_min_out`,[`slippageOrMinOut`,`quoteEvidenceClaimId`],`slippageOrMinOut.quoteEvidenceClaimId`);n?.factKind===`quote_min_out`&&(Z(t,e.slippageOrMinOut.quoteEvidenceId,n.quoteEvidenceId,[`slippageOrMinOut`,`quoteEvidenceId`],`slippageOrMinOut.quoteEvidenceId`),Z(t,e.slippageOrMinOut.minOutRaw,n.minOutRaw,[`slippageOrMinOut`,`minOutRaw`],`slippageOrMinOut.minOutRaw`))}if(e.slippageOrMinOut.minOutRaw!==void 0&&(e.rawQuantities.some(t=>t.role===`minimum_output`&&t.rawAmount===e.slippageOrMinOut.minOutRaw)||t.addIssue({code:`custom`,path:[`slippageOrMinOut`,`minOutRaw`],message:`slippageOrMinOut.minOutRaw must match a minimum_output rawQuantities entry`})),e.slippageOrMinOut.policyEvidenceClaimId!==void 0){let n=u(e.slippageOrMinOut.policyEvidenceClaimId,`slippage_policy`,[`slippageOrMinOut`,`policyEvidenceClaimId`],`slippageOrMinOut.policyEvidenceClaimId`);n?.factKind===`slippage_policy`&&(Z(t,e.slippageOrMinOut.policySource,n.policySource,[`slippageOrMinOut`,`policySource`],`slippageOrMinOut.policySource`),Z(t,e.slippageOrMinOut.maxSlippageBps,n.maxSlippageBps,[`slippageOrMinOut`,`maxSlippageBps`],`slippageOrMinOut.maxSlippageBps`),n.policySource===`adapter_policy_from_quote_evidence`&&Z(t,e.slippageOrMinOut.minOutRaw,n.minOutRaw,[`slippageOrMinOut`,`minOutRaw`],`slippageOrMinOut.minOutRaw`))}e.objectOwnership.objects.forEach((n,r)=>{let i=u(n.evidenceClaimId,`object_ownership`,[`objectOwnership`,`objects`,r,`evidenceClaimId`],`objectOwnership.objects[${r}].evidenceClaimId`);i?.factKind===`object_ownership`&&(Z(t,n.objectId,i.objectId,[`objectOwnership`,`objects`,r,`objectId`],`objectOwnership.objects[${r}].objectId`),Z(t,e.objectOwnership.ownerAccount,i.ownerAccount,[`objectOwnership`,`ownerAccount`],`objectOwnership.ownerAccount`),Z(t,n.ownership,i.ownership,[`objectOwnership`,`objects`,r,`ownership`],`objectOwnership.objects[${r}].ownership`))});let f=u(e.simulation.evidenceClaimId,`simulation_result`,[`simulation`,`evidenceClaimId`],`simulation.evidenceClaimId`);f?.factKind===`simulation_result`&&(Z(t,e.simulation.provider,f.provider,[`simulation`,`provider`],`simulation.provider`),Z(t,e.simulation.checksEnabled,f.checksEnabled,[`simulation`,`checksEnabled`],`simulation.checksEnabled`),Z(t,e.simulation.simulatedAt,f.simulatedAt,[`simulation`,`simulatedAt`],`simulation.simulatedAt`),Z(t,e.simulation.status,f.status,[`simulation`,`status`],`simulation.status`),nb(t,e.simulation.requiredFields,f.requiredFields,[`simulation`,`requiredFields`],`simulation.requiredFields`),nb(t,e.simulation.missingFields,f.missingFields,[`simulation`,`missingFields`],`simulation.missingFields`),Z(t,e.simulation.failureReason,f.failureReason,[`simulation`,`failureReason`],`simulation.failureReason`))}).superRefine((e,t)=>{let n=e.reviewedTransactionDigest;Z(t,e.humanReadableReview.transactionDigest,n,[`humanReadableReview`,`transactionDigest`],`humanReadableReview.transactionDigest`),Z(t,e.simulation.transactionDigest,n,[`simulation`,`transactionDigest`],`simulation.transactionDigest`)}),vb=V({contractVersion:K(py),artifactKind:K(`ptb_visualization`),generatedAt:Wy,source:V({adapterId:F().min(1).max(120),planId:F().min(1).max(120).optional(),sourceKind:G([`review_time_generated_transaction_kind`,`review_time_ir`,`renderer_model`]),authority:K(`visualization_only_not_wallet_authorization`),renderer:V({name:F().min(1).max(120),packageName:F().min(1).max(120).optional(),version:F().min(1).max(80).optional()}).strict().optional()}).strict(),mermaid:V({diagramType:K(`flowchart`),text:Zy(2e4,`mermaid.text`),namedText:Zy(2e4,`mermaid.namedText`)}).strict(),diagnostics:B(V({severity:G([`info`,`warning`,`error`]),code:F().min(1).max(120),message:Zy(512,`diagnostics.message`),source:G([`adapter`,`renderer`,`schema`,`simulation`])}).strict()).default([]),unsupportedUse:B(G(_y)).min(1),executableMaterial:V({included:K(!1),policy:K(`mcp_and_review_ui_outputs_must_not_include_executable_transaction_material`)}).strict()}).strict().superRefine((e,t)=>{eb(t,e.unsupportedUse,_y,[`unsupportedUse`],`unsupportedUse`)}),yb=W(F(),z()),bb=G(cy),xb=G(ly);G([`ready_for_wallet_review`,`refresh_required`,`blocked`]);var Sb=G(uy);G([`proposed`,`awaiting_wallet`,`wallet_connected`,`ready_for_wallet_review`,`refresh_required`,`blocked`,`expired`,`awaiting_signature`,`submitting`,`awaiting_chain_result`,`stopped`,`request_failed`,`outcome_unknown`,`completed`]);var Cb=V({id:F(),label:F(),status:G([`pass`,`warning`,`fail`]),message:F(),source:G([`registry`,`quote`,`wallet`,`simulation`,`adapter`,`network`,`proposal`])}),wb=F().min(1),Tb=`human_readable_review`,Eb=`review_time_simulation`,Db=V({stageCatalogId:F().min(1),adapterId:F(),protocol:F(),actionKind:F(),completedStages:B(wb),missingStages:B(wb)}).strict().superRefine((e,t)=>{let n=Ob(e.completedStages);n&&t.addIssue({code:`custom`,path:[`completedStages`],message:`completedStages contains duplicate stage '${n}'`});let r=Ob(e.missingStages);r&&t.addIssue({code:`custom`,path:[`missingStages`],message:`missingStages contains duplicate stage '${r}'`});for(let n of e.completedStages)e.missingStages.includes(n)&&t.addIssue({code:`custom`,path:[`missingStages`],message:`stage '${n}' cannot be both completed and missing`})});function Ob(e){let t=new Set;for(let n of e){if(t.has(n))return n;t.add(n)}}var kb=V({symbol:F(),amount:F(),coinType:F().optional(),approx:R().optional()}).strict(),Ab=kb.extend({amountKind:K(`display_intent`).default(`display_intent`)}),jb=V({outgoing:B(Ab),expectedIncoming:B(Ab),minimumIncoming:B(Ab).optional(),fees:B(Ab).optional()}),Mb=V({outgoing:B(kb),expectedIncoming:B(kb),minimumIncoming:B(kb).optional(),fees:B(kb).optional()}),Nb=V({before:B(kb),after:B(kb),delta:B(kb)}),Pb=V({computationCostRaw:b_(`computationCostRaw`),storageCostRaw:b_(`storageCostRaw`),storageRebateRaw:b_(`storageRebateRaw`),nonRefundableStorageFeeRaw:b_(`nonRefundableStorageFeeRaw`)}).strict(),Fb=V({address:m_,coinType:F().min(1).max(512).refine(e=>{try{return T_(e)===e}catch{return!1}},`Expected a normalized Sui struct tag coin type`),amount:w_(`balanceChanges[].amount`)}).strict(),Ib=V({objectId:m_,objectType:F().min(1).max(512).optional(),inputState:F().min(1).max(80),outputState:F().min(1).max(80),idOperation:F().min(1).max(80)}).strict(),Lb=V({provider:fy,checksEnabled:R(),success:R(),gasCostSummary:Pb.optional(),balanceChanges:B(Fb).optional(),objectChanges:B(Ib).optional(),error:F().optional()}),Rb=Lb,zb=Lb.extend({checksEnabled:K(!0),success:K(!0),gasCostSummary:Pb,balanceChanges:B(Fb),objectChanges:B(Ib),error:lc().optional()}).strict(),Bb=V({role:G([`input`,`expected_output`,`minimum_output`,`fee`]),symbol:F(),coinType:F().min(1).max(512).refine(e=>{try{return T_(e),!0}catch{return!1}},`Expected a Sui struct tag coin type`),decimals:L().int().min(0).max(255),rawAmount:b_(`rawAmount`),rawAmountSource:K(`quote_policy_evidence`),displayAmount:F().optional(),displayAmountSource:K(`user_display_intent_not_signing_input`).optional()}).strict().superRefine((e,t)=>{e.displayAmount!==void 0&&e.displayAmountSource===void 0&&t.addIssue({code:`custom`,path:[`displayAmountSource`],message:`displayAmountSource is required when displayAmount is present`}),e.displayAmount===void 0&&e.displayAmountSource!==void 0&&t.addIssue({code:`custom`,path:[`displayAmount`],message:`displayAmount is required when displayAmountSource is present`})}),Vb=V({role:G([`connected_account`,`output_recipient`]),address:m_}).strict(),Hb=V({kind:K(`swap_output_asset`),symbol:F(),coinType:F().min(1).max(512).refine(e=>{try{return T_(e),!0}catch{return!1}},`Expected a Sui struct tag coin type`),protocol:F(),poolKey:F(),direction:G([`base_to_quote`,`quote_to_base`])}).strict(),Ub=V({id:F(),label:F(),source:U([G([`registry`,`quote`,`wallet`,`simulation`,`adapter`,`network`,`proposal`]),G([`transaction_material`,`digest_commitment`])]),summary:F()}).strict(),Wb=V({id:F(),label:F(),reason:F()}).strict(),Gb=V({proposedAction:V({title:F(),summary:F(),actionKind:F(),adapterId:F(),protocol:F(),network:K(`sui:mainnet`)}).strict(),recipients:B(Vb),evidenceUsed:B(Ub),missingEvidence:B(Wb),requiredUserChoices:B(Wb),unsupportedClaims:B(Wb),freshness:V({status:K(`current`),evaluatedAt:F(),expiresAt:F(),reason:F()}).strict(),blockingChecks:B(Cb)}).strict(),Kb=V({assetFlow:V({outgoing:B(Bb),expectedIncoming:B(Bb),minimumIncoming:B(Bb),fees:B(Bb)}).strict(),targets:B(Hb)}).strict(),qb=mc(`kind`,[Gb.extend({kind:K(`swap_human_readable_review`)}).merge(Kb)]),Jb=V({id:F(),actionKind:F(),adapterId:F(),protocol:F(),title:F(),summary:F(),assetFlowPreview:jb,reviewModel:sy.optional(),adapterData:yb,createdAt:F(),expiresAt:F().optional(),registryVersion:F().optional(),preliminaryChecks:B(Cb).optional()}),Yb=V({planId:F(),reviewSessionId:F(),account:m_,checks:B(Cb),assetFlowActual:Mb.optional(),beforeAfterBalance:Nb.optional(),simulation:Rb.optional(),humanReadableReview:qb.optional(),transactionReviewData:_b.optional(),ptbVisualization:vb.optional(),adapterLifecycle:Db.optional(),updatedAt:F()}),Xb=mc(`status`,[Yb.extend({status:K(`ready_for_wallet_review`),evidenceValidity:lc().optional(),blockedReason:lc().optional(),refreshReason:lc().optional()}),Yb.extend({status:K(`refresh_required`),evidenceValidity:K(`invalidated`).optional(),refreshReason:xb,blockedReason:lc().optional()}),Yb.extend({status:K(`blocked`),evidenceValidity:K(`invalidated`).optional(),blockedReason:bb,refreshReason:lc().optional()})]).superRefine((e,t)=>{if(e.evidenceValidity===`invalidated`)for(let n of dy)e[n]!==void 0&&t.addIssue({code:`custom`,path:[n],message:`Invalidated review evidence cannot carry current material-derived facts`});let n=e.adapterLifecycle;if(n!==void 0&&Zb(e,t),e.humanReadableReview!==void 0&&n===void 0&&t.addIssue({code:`custom`,path:[`humanReadableReview`],message:`humanReadableReview requires adapterLifecycle evidence stage provenance`}),e.simulation!==void 0&&n===void 0&&t.addIssue({code:`custom`,path:[`simulation`],message:`simulation requires adapterLifecycle evidence stage provenance`}),e.ptbVisualization!==void 0){let e=n?.completedStages??[];e.includes(`transaction_material_build_or_verify`)&&e.includes(`digest_commitment`)||t.addIssue({code:`custom`,path:[`ptbVisualization`],message:`ptbVisualization requires completed transaction material and digest commitment lifecycle stages`})}let r=e.status===`ready_for_wallet_review`;e.transactionReviewData!==void 0&&!r&&t.addIssue({code:`custom`,path:[`transactionReviewData`],message:`transactionReviewData is only valid on ready_for_wallet_review`}),e.status===`ready_for_wallet_review`&&n!==void 0&&(e.transactionReviewData===void 0&&t.addIssue({code:`custom`,path:[`transactionReviewData`],message:`ready_for_wallet_review requires an emitted wallet review contract`}),(n===void 0||n.missingStages.length!==0)&&t.addIssue({code:`custom`,path:[`adapterLifecycle`],message:`ready_for_wallet_review requires a completed adapterLifecycle with no missing stages`}),e.humanReadableReview===void 0&&t.addIssue({code:`custom`,path:[`humanReadableReview`],message:`ready_for_wallet_review requires humanReadableReview public evidence`}),e.simulation===void 0&&t.addIssue({code:`custom`,path:[`simulation`],message:`ready_for_wallet_review requires successful simulation public evidence`})),e.status===`blocked`&&(e.blockedReason===`producer_stage_missing`&&n===void 0&&t.addIssue({code:`custom`,path:[`adapterLifecycle`],message:`producer_stage_missing requires adapterLifecycle with at least one missing stage`}),e.blockedReason===`producer_stage_missing`&&n!==void 0&&n.missingStages.length===0&&t.addIssue({code:`custom`,path:[`blockedReason`],message:`producer_stage_missing requires at least one adapterLifecycle.missingStages entry`}),e.blockedReason===`wallet_review_contract_emit_missing`&&e.transactionReviewData!==void 0&&t.addIssue({code:`custom`,path:[`transactionReviewData`],message:`wallet_review_contract_emit_missing requires the wallet review contract to be absent`}),e.blockedReason===`wallet_review_contract_emit_missing`&&n===void 0&&t.addIssue({code:`custom`,path:[`adapterLifecycle`],message:`wallet_review_contract_emit_missing requires adapterLifecycle`}),e.blockedReason===`wallet_review_contract_emit_missing`&&n!==void 0&&n.missingStages.length!==0&&t.addIssue({code:`custom`,path:[`blockedReason`],message:`wallet_review_contract_emit_missing requires a completed adapterLifecycle with no missing stages`}),e.blockedReason===`wallet_review_contract_emit_missing`&&e.evidenceValidity!==`invalidated`&&e.humanReadableReview===void 0&&t.addIssue({code:`custom`,path:[`humanReadableReview`],message:`wallet_review_contract_emit_missing requires humanReadableReview public evidence`}),e.blockedReason===`wallet_review_contract_emit_missing`&&e.evidenceValidity!==`invalidated`&&e.simulation===void 0&&t.addIssue({code:`custom`,path:[`simulation`],message:`wallet_review_contract_emit_missing requires simulation public evidence`}))});function Zb(e,t){let n=e.adapterLifecycle;n&&(e.humanReadableReview!==void 0&&Qb(t,n,Tb,[`humanReadableReview`]),e.simulation!==void 0&&(Qb(t,n,Eb,[`simulation`]),Qb(t,n,Tb,[`simulation`]),$b(t,e.simulation,[`simulation`])),n.missingStages.includes(Eb)&&e.simulation!==void 0&&t.addIssue({code:`custom`,path:[`simulation`],message:`simulation public evidence cannot be present while review_time_simulation is missing`}),n.missingStages.includes(Tb)&&e.humanReadableReview!==void 0&&t.addIssue({code:`custom`,path:[`humanReadableReview`],message:`humanReadableReview public evidence cannot be present while human_readable_review is missing`}))}function Qb(e,t,n,r){t.completedStages.includes(n)||e.addIssue({code:`custom`,path:r,message:`${r.join(`.`)} requires completed adapterLifecycle stage '${n}'`}),t.missingStages.includes(n)&&e.addIssue({code:`custom`,path:r,message:`${r.join(`.`)} cannot be present while adapterLifecycle stage '${n}' is missing`})}function $b(e,t,n){zb.safeParse(t).success||e.addIssue({code:`custom`,path:n,message:`simulation public evidence requires a successful checks-enabled review-time simulation projection`})}var ex=V({topic:F().min(1),accounts:B(m_).min(1),methods:B(F()),chain:K(L_),expiresAt:F().datetime(),walletName:F().optional()}).strict(),tx=mc(`status`,[V({topic:F().min(1),version:L().int().positive(),status:K(`present`),session:ex}).strict(),V({topic:F().min(1),version:L().int().positive(),status:G([`absent`,`unusable`])}).strict()]),nx=V({runId:R_,sequence:L().int().positive(),observedAt:F().datetime()}).strict();nx.extend({sessions:B(tx)}).strict();var rx=V({kind:K(`wallet_service_recovery`),priorRunId:R_,admittedAt:F().datetime(),updatedAt:F().datetime()}),ix=U([rx.extend({phase:K(`stopping`)}).strict(),rx.extend({phase:K(`starting`),nextRunId:R_}).strict(),rx.extend({outcome:G([`available`,`failed`,`superseded`,`server_restarted`]),nextRunId:R_.optional(),message:F().optional()}).strict()]),ax=`A wallet connection provides account context; it is not a transaction approval or proof of address ownership.`,ox=`Review evidence is not a safety guarantee. Only an explicit card action and wallet approval may authorize this exact transaction.`,sx=W_.extend({pendingAction:K(`disconnect`).optional()});G([`input_required`,`awaiting_approval`,`disconnect_pending`]);var cx=V({action:K(`connect`),walletRunId:R_}).strict(),lx=V({action:K(`disconnect`),walletRunId:R_,connectionId:F().min(1)}).strict(),ux=V({action:K(`use_account`),walletRunId:R_,connectionId:F().min(1),account:m_}).strict(),dx=V({action:G([`prepare_review`,`request_signature`]),connectionId:F().min(1),walletRunId:R_,account:m_,reviewRevision:L().int().nonnegative()}).strict(),fx=U([cx,lx,ux,dx,V({action:G([`cancel`,`stop_connection`,`stop_waiting`,`read_result`])}).strict()]),px=U([cx,dx.extend({action:K(`prepare_review`)})]),mx=V({kind:G([`connect`,`review`]),mode:G([`connect`,`review`,`review_manage`]),allowedActions:B(G(q_)),actionRemainingMs:L().int().nonnegative(),nextStateReadAfterMs:L().int().nonnegative().optional(),automaticAction:px.optional(),observe:R(),walletAvailability:V_,walletObservation:nx.optional(),runtimeRecovery:ix.optional(),connectionConflict:G_.optional(),manageableConnectionIds:B(F().min(1)),connectionReconciliationRequired:K(!0).optional(),usableConnectionId:F().min(1).optional(),assetReadAccount:K_.optional(),acceptedWalletRunId:R_.optional(),progress:H_,boundary:G([ax,ox]),connections:B(sx),activeAccount:F().optional(),connection:sx.optional(),connectionAction:G([`connect`,`disconnect`]).optional(),review:V({reviewSessionId:F(),plan:Jb,reviewRevision:L().int().nonnegative(),status:Sb,account:F().optional(),preparing:R(),accountRequestPending:K(!0).optional(),error:F().optional(),state:Xb.optional()}).strict().optional(),request:I_.optional(),receipt:z().optional(),netGasMist:F().regex(/^-?[0-9]+$/).optional(),observationStopped:R().optional()}).strict().superRefine((e,t)=>{let n=e.connections.find(t=>t.connectionId===e.usableConnectionId);e.usableConnectionId&&(!n||n.status!==`connected`||e.walletAvailability.status!==`available`||e.connectionConflict||e.connectionReconciliationRequired||e.connections.some(e=>e.pendingAction||e.status===`awaiting_approval`))&&t.addIssue({code:`custom`,path:[`usableConnectionId`],message:`The usable connection must match current connection facts.`}),(new Set(e.manageableConnectionIds).size!==e.manageableConnectionIds.length||e.manageableConnectionIds.some(t=>!e.connections.some(e=>e.connectionId===t&&!e.pendingAction&&e.status!==`awaiting_approval`)))&&t.addIssue({code:`custom`,path:[`manageableConnectionIds`],message:`Management must name distinct recorded targets without pending operations.`}),e.connectionReconciliationRequired&&(e.usableConnectionId||e.assetReadAccount?.status===`available`||e.allowedActions.some(e=>[`connect`,`use_account`,`prepare_review`,`request_signature`].includes(e)))&&t.addIssue({code:`custom`,path:[`connectionReconciliationRequired`],message:`Unrecorded SDK connections cannot authorize connection or account use.`}),e.assetReadAccount?.status===`available`&&(!n||!n.accounts.includes(e.assetReadAccount.account)||e.activeAccount!==e.assetReadAccount.account)&&t.addIssue({code:`custom`,path:[`assetReadAccount`],message:`The default address must belong to the usable connection and stored selection.`})});function hx(e,t,n=!1){return e.connections.filter(r=>r.connectionId===e.usableConnectionId&&r.accounts.includes(t)&&(!n||r.methods.includes(`sui_signTransaction`)))}var gx=`sui-mcp.local-data`,_x=16777216,Q=F().uuid(),vx=L().int().nonnegative().safe(),yx=F().regex(/^[a-f0-9]{64}$/),bx=mc(`status`,[V({status:K(`no_file`)}).strict(),V({status:K(`receiving`)}).strict(),V({status:K(`checking`)}).strict(),V({status:K(`check_required`),message:F().min(1)}).strict(),V({status:K(`can_restore`)}).strict(),V({status:K(`cannot_restore`),reason:G([`invalid_backup`,`file_unavailable`,`wallet_request_unsettled`,`operation_busy`,`input_unavailable`,`check_failed`]),message:F().min(1)}).strict()]);V({fileId:Q,sha256:yx,totalSize:vx,dataEpoch:vx,userDataRevision:vx,check:bx}).strict();var xx=mc(`kind`,[V({kind:K(`set_endpoint`),endpoint:G([`grpc`,`graphql`]),value:F().min(1)}).strict(),V({kind:K(`restore_endpoint`),endpoint:G([`grpc`,`graphql`])}).strict(),V({kind:G([`clear_read_address`,`export_local_data`,`download_backup`,`import_local_data`,`reset_local_data`,`restart_wallet_service`])}).strict()]),Sx=G([`acknowledged`,`not_completed`,`unconfirmed`,`unsupported`]),Cx=V({method:K(`ui/download-file`),code:K(-32601)}).strict(),wx=G([`acknowledged`,`cancelled`,`expired`,`server_restarted`,`data_replaced`,`source_unavailable`,`stored_locally`,`local_save_failed`]),Tx=V({device:F().regex(/^\d+$/),inode:F().regex(/^\d+$/)}).strict(),Ex=G([`not_published`,`target_conflict`,`source_unavailable`,`interrupted`]),Dx=V({status:G([`needs_consent`,`saving`,`saved`,`failed`]),attemptId:Q,fileId:Q,sha256:yx,totalSize:vx,destination:F(),ownerId:F().min(1),currentSaveAttemptId:Q.optional(),attempts:B(V({saveAttemptId:Q,previousSaveAttemptId:Q.optional(),admittedAt:F().datetime(),allowPossibleCopy:R()}).strict()),sourceIdentity:Tx.optional(),savedAt:F().datetime().optional(),failure:Ex.optional()}).strict().superRefine((e,t)=>{(e.status===`needs_consent`?e.attempts.length!==0||e.currentSaveAttemptId!==void 0:!e.currentSaveAttemptId||!e.attempts.some(t=>t.saveAttemptId===e.currentSaveAttemptId))&&t.addIssue({code:`custom`,message:`A local save must identify its admitted attempt.`}),(new Set(e.attempts.map(e=>e.saveAttemptId)).size!==e.attempts.length||e.status===`saved`!=(e.savedAt!==void 0)||e.status===`saved`&&!e.sourceIdentity||e.status===`failed`!=(e.failure!==void 0))&&t.addIssue({code:`custom`,message:`Local save evidence must match its state.`})});V({currentAttemptId:Q,attempts:B(V({attemptId:Q,admittedAt:F().datetime(),previousAttemptId:Q.optional(),hostReport:Sx.optional(),failure:Cx.optional()}).strict()).min(1),readyAt:F().datetime().optional(),expiresAt:F().datetime().optional(),endReason:wx.optional(),localSave:Dx.optional()}).strict().superRefine((e,t)=>{(new Set(e.attempts.map(e=>e.attemptId)).size!==e.attempts.length||!e.attempts.some(t=>t.attemptId===e.currentAttemptId)||e.readyAt===void 0!=(e.expiresAt===void 0))&&t.addIssue({code:`custom`,message:`Download attempts and lifetime must identify one stored snapshot.`}),(e.endReason===`stored_locally`&&e.localSave?.status!==`saved`||e.endReason===`local_save_failed`&&e.localSave?.status!==`failed`||e.attempts.some(e=>e.hostReport===`unsupported`!=(e.failure!==void 0))||e.localSave&&(e.localSave.attemptId!==e.currentAttemptId||!e.attempts.some(t=>t.attemptId===e.currentAttemptId&&t.hostReport===`unsupported`)||e.localSave.status===`saving`&&e.endReason!==void 0||e.localSave.status===`saved`!=(e.endReason===`stored_locally`)))&&t.addIssue({code:`custom`,message:`Local saving requires the current download's unsupported report.`})});var Ox=G([`settings_retry_download`,`settings_report_download`,`settings_cancel_download`,`settings_store_backup`]),kx=mc(`action`,[V({action:K(`settings_download_backup`),operationId:Q,attemptId:Q}).strict(),V({action:K(`settings_retry_download`),operationId:Q,fileId:Q,previousAttemptId:Q,attemptId:Q}).strict(),V({action:K(`settings_report_download`),operationId:Q,fileId:Q,attemptId:Q,status:Sx,failure:Cx.optional()}).strict().refine(e=>e.status===`unsupported`==(e.failure!==void 0),`Only unsupported downloads require the exact method failure.`),V({action:K(`settings_store_backup`),operationId:Q,fileId:Q,attemptId:Q,saveAttemptId:Q,previousSaveAttemptId:Q.optional(),allowPossibleCopy:R()}).strict(),V({action:K(`settings_cancel_download`),operationId:Q,fileId:Q,attemptId:Q}).strict(),V({action:K(`settings_select`),draft:xx}).strict(),V({action:K(`settings_prepare`),operationId:Q}).strict(),V({action:K(`settings_begin_upload`),operationId:Q,name:F().min(1),totalSize:vx.max(_x),sha256:yx}).strict(),V({action:K(`settings_upload_chunk`),operationId:Q,fileId:Q,offset:vx.max(_x),chunkBase64:F()}).strict(),V({action:K(`settings_seal_upload`),operationId:Q,fileId:Q}).strict(),V({action:K(`settings_confirm`),operationId:Q,preparationId:Q}).strict(),V({action:K(`settings_back`),operationId:Q}).strict(),V({action:K(`settings_cancel`)}).strict()]),Ax=V({outcome:G([`completed`,`failed`,`interrupted`,`superseded`]),recordedAt:F().datetime(),message:F().min(1),details:W(F(),z()).optional(),completionScope:K(`backup_snapshot`).optional()}).strict(),jx=V({storedValue:F(),effectiveValue:F(),source:G([`environment`,`local_db`,`builtin_default`]),pendingStoredValue:F().optional(),appliesAfter:K(`mcp_server_restart`).optional()}).strict(),Mx=V({endpoint:G([`grpc`,`graphql`]),key:G([`suiGrpcUrl`,`suiGraphqlUrl`]),value:F().min(1),status:G([`saved`,`reset`]),storedValue:F(),effectiveValue:F(),source:jx.shape.source}).strict().refine(e=>e.key===(e.endpoint===`grpc`?`suiGrpcUrl`:`suiGraphqlUrl`),`The endpoint kind and preference key must agree.`),Nx=L().int().nonnegative().safe(),Px=V({accounts:Nx,reviewSessions:Nx,reviewStateSnapshots:Nx,reviewStatusTransitions:Nx,reviewExecutions:Nx,reviewRequests:Nx,outcomeUnknownRequests:Nx,externalActivityScans:Nx,externalActivityTransactions:Nx,localSettings:Nx}).strict(),Fx=V({status:K(`valid`),format:K(gx),network:K(`mainnet`),exportedAt:F().datetime(),currentCounts:Px,incomingCounts:Px,willReplace:K(!0),activeAccountChange:G([`unchanged`,`set`,`cleared`]),currentReadAddress:m_.nullable(),incomingReadAddress:m_.nullable(),restartRequiredAfterImport:R()}).strict(),Ix=V({kind:K(`settings`),operationId:Q,phase:G([`draft`,`uploading`,`sealed`,`prepared`,`executing`,`stopping`,`starting`,`terminal`]),draft:xx.optional(),preparationId:Q.optional(),preparation:W(F(),z()).optional(),file:V({fileId:Q,displayName:F(),totalSize:vx,receivedSize:vx,sha256:yx,sealed:R(),cleanup:G([`pending`,`complete`,`failed`])}).strict().optional(),download:V({availability:G([`preparing`,`available`,`ended`]),currentAttemptId:Q,hostReport:Sx.optional(),previousUnconfirmed:R(),endReason:wx.optional(),expiresAt:F().datetime().optional(),remainingMs:vx.optional(),localSave:V({status:G([`needs_consent`,`saving`,`saved`,`failed`]),currentSaveAttemptId:Q.optional(),failure:Ex.optional(),savedAt:F().datetime().optional()}).strict().optional(),allowedFileActions:B(Ox)}).strict().optional(),restoreCheck:bx.optional(),backupLocation:V({directory:F().min(1),filename:F().min(1)}).strict().optional(),result:Ax.optional(),temporaryFileCleanup:G([`pending`,`complete`,`failed`]).optional(),priorRunId:Q.optional(),nextRunId:Q.optional(),supersedesOperationId:Q.optional(),supersededByOperationId:Q.optional(),allowedActions:B(G(kx.options.map(e=>e.shape.action.value))),observe:R(),facts:V({server:V({name:F(),version:F(),network:K(`mainnet`)}).strict(),localSettings:V({suiGrpcUrl:jx,suiGraphqlUrl:jx}).strict(),readAddress:F().optional(),assetReadAccount:K_,walletAvailability:V_,connectionReconciliationRequired:K(!0).optional(),observedAt:F().datetime().optional(),counts:Px}).strict().optional()}).strict().superRefine((e,t)=>{if(e.download&&(e.draft?.kind!==`download_backup`||!e.file||e.download.availability===`available`&&(!e.file.sealed||!e.result||e.download.endReason||!e.download.expiresAt)||e.download.availability===`ended`&&!e.download.endReason)&&t.addIssue({code:`custom`,message:`Download delivery must describe its own snapshot and lifetime.`}),e.draft?.kind===`download_backup`&&e.preparation!==void 0&&t.addIssue({code:`custom`,message:`Private download preparation is not public preparation data.`}),e.restoreCheck&&(e.draft?.kind!==`import_local_data`||e.result)&&t.addIssue({code:`custom`,message:`Restore checks belong to an uncompleted import preparation.`}),e.restoreCheck?.status===`can_restore`&&(e.phase!==`prepared`||!e.file?.sealed||!e.allowedActions.includes(`settings_confirm`))&&t.addIssue({code:`custom`,message:`Restore availability requires a sealed file and current confirmation.`}),e.draft?.kind===`import_local_data`&&e.restoreCheck?.status!==`can_restore`&&e.allowedActions.includes(`settings_confirm`)&&t.addIssue({code:`custom`,message:`An unchecked or blocked import cannot offer confirmation.`}),e.restoreCheck?.status===`receiving`&&(!e.file||e.file.sealed||![`draft`,`uploading`].includes(e.phase))&&t.addIssue({code:`custom`,message:`Receiving requires the selected unsealed upload.`}),e.restoreCheck?.status===`check_required`&&(!e.file?.sealed||e.phase!==`sealed`)&&t.addIssue({code:`custom`,message:`A new check requires the same complete sealed upload.`}),e.restoreCheck?.status===`cannot_restore`&&e.restoreCheck.reason===`invalid_backup`&&(e.phase===`prepared`||e.allowedActions.includes(`settings_prepare`))&&t.addIssue({code:`custom`,message:`A rejected backup requires an explicit new selection.`}),e.backupLocation&&(e.result?.outcome!==`completed`||e.draft?.kind!==`export_local_data`&&(e.draft?.kind!==`download_backup`||e.download?.localSave?.status!==`saved`||e.download.endReason!==`stored_locally`))&&t.addIssue({code:`custom`,message:`A backup location requires its recorded successful export.`}),e.download?.localSave?.status===`saved`&&!e.backupLocation&&t.addIssue({code:`custom`,message:`A saved backup must identify its verified location.`}),e.draft?.kind===`export_local_data`&&e.result?.outcome===`completed`&&typeof e.result.details?.path==`string`&&!e.backupLocation&&t.addIssue({code:`custom`,message:`A recorded backup path must provide its folder and file name.`}),e.temporaryFileCleanup&&!e.result&&t.addIssue({code:`custom`,message:`Cleanup of an applied or ended operation requires its recorded result.`}),(e.phase===`terminal`!=(e.result!==void 0)||e.phase===`terminal`&&(e.observe||e.allowedActions.length))&&t.addIssue({code:`custom`,message:`A terminal Settings result cannot grant input or observation.`}),e.phase===`prepared`&&(!e.preparationId||!e.draft||!e.preparation)&&t.addIssue({code:`custom`,message:`Settings confirmation requires a prepared identity and facts.`}),e.phase===`prepared`&&e.draft?.kind===`import_local_data`&&!Fx.safeParse(e.preparation?.preview).success&&t.addIssue({code:`custom`,path:[`preparation`,`preview`],message:`Import confirmation requires the validated current and incoming read context and record counts.`}),e.phase===`prepared`&&(e.draft?.kind===`set_endpoint`||e.draft?.kind===`restore_endpoint`)){let n=Mx.safeParse(e.preparation?.endpoint);(!n.success||n.data.endpoint!==e.draft.endpoint||n.data.status!==(e.draft.kind===`set_endpoint`?`saved`:`reset`)||e.draft.kind===`set_endpoint`&&n.data.value!==e.draft.value)&&t.addIssue({code:`custom`,path:[`preparation`,`endpoint`],message:`Endpoint confirmation must name its exact prepared target.`})}e.file&&e.file.receivedSize>e.file.totalSize&&t.addIssue({code:`custom`,message:`Received content exceeds the selected file.`})}),Lx=65536;function Rx(e){return new TextEncoder().encode(JSON.stringify(e)).length}function zx(e){let t=Lx-Rx(e);return t>0?3*Math.floor(t/4):0}function Bx(e){if(!e||typeof e!=`object`)return;let t=structuredClone(e);if(t.method===`tools/call`&&t.params?.name===`ui_act_card`&&t.params.arguments?.input?.action===`settings_upload_chunk`)return t.id=2**53-1,t.params.arguments.revision=2**53-1,t.params.arguments.input.offset=_x,t.params.arguments.input.chunkBase64=``,zx(t)}var Vx={uiOpenAccount:`ui_open_account`,uiOpenReceipt:`ui_open_receipt`,uiOpenChart:`ui_open_chart`,uiReadCard:`ui_read_card`,uiSubmitCard:`ui_submit_card`,uiActCard:`ui_act_card`,uiReadSettingsFile:`ui_read_settings_file`,sessionOpenReviewManagement:`session_open_review_management`,readGetServerStatus:`read_get_server_status`,readListSupportedProtocols:`read_list_supported_protocols`,readListDeepbookPools:`read_list_deepbook_pools`,readListDeepbookTokens:`read_list_deepbook_tokens`,readInspectDeepbookOrderbook:`read_inspect_deepbook_orderbook`,readGetDeepbookMidPrice:`read_get_deepbook_mid_price`,readGetDeepbookUsdcPriceHistory:`read_get_deepbook_usdc_price_history`,readGetDeepbookUsdcPriceAtTime:`read_get_deepbook_usdc_price_at_time`,readQuoteDeepbookAction:`read_quote_deepbook_action`,readQuoteDeepbookDisplayAmount:`read_quote_deepbook_display_amount`,readSummarizeDeepbookAccountInventory:`read_summarize_deepbook_account_inventory`,readSummarizeWalletAssets:`read_summarize_wallet_assets`,readClassifyWalletAssets:`read_classify_wallet_assets`,readListSettlementAssetGroups:`read_list_settlement_asset_groups`,readSummarizeSettlementAssetGroupParity:`read_summarize_settlement_asset_group_parity`,readPreviewIntentEvidence:`read_preview_intent_evidence`,readListReviewActivity:`read_list_review_activity`,readSummarizeReviewFunnel:`read_summarize_review_funnel`,readGetReviewSessionDetail:`read_get_review_session_detail`,readInspectSuiTransaction:`read_inspect_sui_transaction`,readScanSuiAccountActivity:`read_scan_sui_account_activity`,readSummarizeSuiActivityScan:`read_summarize_sui_activity_scan`,readScanSuiFunctionActivity:`read_scan_sui_function_activity`,readSummarizeSuiFunctionActivityScan:`read_summarize_sui_function_activity_scan`,readSummarizeSuiAccountActivity:`read_summarize_sui_account_activity`,readGetAccountAssetTimeline:`read_get_account_asset_timeline`,settingsCreateLocalSettingsSession:`settings_create_local_settings_session`,settingsGetLocalSettings:`settings_get_local_settings`,actionStartReview:`action_start_review`,actionCreateProposalReview:`action_create_proposal_review`,sessionOpenWalletConnectionCard:`session_open_wallet_connection_card`,sessionGetWalletConnectionCard:`session_get_wallet_connection_card`,sessionWaitWalletConnectionCard:`session_wait_wallet_connection_card`,sessionGetInteractionStatus:`session_get_interaction_status`,sessionGetReviewStatus:`session_get_review_status`,sessionGetExecutionResult:`session_get_execution_result`,sessionWaitExecutionResult:`session_wait_execution_result`,accountGetActiveAccount:`account_get_active_account`},Hx=V({connectionId:F().min(1),pairingUri:F().startsWith(`wc:`),expiresAt:F().datetime()}).strict(),Ux=G([`account`,`receipt`,`chart`,`connect`,`review`,`settings`]),Wx=V({cardId:F().min(1),kind:Ux,state:G([`ready`,`running`,`closed`]),revision:L().int().nonnegative(),createdAt:F().datetime(),expiresAt:F().datetime(),input:W(F(),z()),data:z().optional(),reason:G([`completed`,`expired`,`failed`,`server_restarted`,`cancelled`]).optional(),error:F().optional()}).strict().extend({pollAfterMs:L().int().positive(),inputRemainingMs:L().int().nonnegative()}),Gx=V({transactionDigest:F().min(1),pureInputs:B(V({index:L().int().nonnegative(),bytes:F().regex(/^0x(?:[0-9a-f]{2})*$/i)}).strict()).refine(e=>new Set(e.map(e=>e.index)).size===e.length,`Duplicate input index.`),ptbGraph:V({mermaid:V({text:F(),namedText:F()}).strict()}).strict().optional()}).strict(),Kx=`sui-mcp/card`,qx=`sui-mcp/receipt-display`,Jx=`sui-mcp/wallet-display`,Yx=`sui-mcp/settings-file`,Xx=`suimcp://cards/`,Zx=mc(`kind`,[V({kind:K(`account`),status:K(`input_required`),field:K(`account`),message:F().min(1)}).strict(),V({kind:K(`receipt`),status:K(`input_required`),field:K(`digest`),message:F().min(1)}).strict()]),Qx=V({cardId:F().min(1),permission:F().min(1)}).strict();Qx.extend({revision:L().int().nonnegative(),input:W(F(),z())}).strict();var $x=Gx.extend({cardId:F().min(1),revision:L().int().nonnegative(),attemptId:F().min(1).optional()}),eS=Hx.extend({cardId:F().min(1),revision:L().int().nonnegative()}),tS=V({attemptId:F().uuid().optional(),cardId:F().min(1),operationId:F().uuid(),fileId:F().uuid(),offset:L().int().nonnegative().safe(),totalSize:L().int().nonnegative().safe(),sha256:F().regex(/^[a-f0-9]{64}$/),chunkBase64:F()}).strict(),nS={account:Vx.uiOpenAccount,receipt:Vx.uiOpenReceipt,chart:Vx.uiOpenChart,read:Vx.uiReadCard,submit:Vx.uiSubmitCard,act:Vx.uiActCard,readSettingsFile:Vx.uiReadSettingsFile};function $(e){return typeof e==`object`&&e&&!Array.isArray(e)?e:void 0}function rS(e){return e.kind!==`import_local_data`}function iS(e,t,n){if(e.kind!==`settings`||t.kind!==`settings`||e.cardId!==t.cardId||t.state!==`ready`)return;let r=Ix.safeParse(e.data),i=Ix.safeParse(t.data);if(!r.success||!i.success)return;let a=r.data,o=i.data,s=o.draft;if(!s||!a.draft||a.operationId!==o.operationId||n.operationId!==o.operationId||JSON.stringify(a.draft)!==JSON.stringify(s))return;if(rS(s))return n.action===`settings_prepare`?{kind:`preparation_response`,cardId:t.cardId,operationId:o.operationId,draft:s}:void 0;let c=o.file?.fileId;if(!(!c||!a.file?.fileId||a.file.fileId!==c||n.action!==`settings_prepare`&&n.action!==`settings_seal_upload`||n.action===`settings_seal_upload`&&n.fileId!==c))return{kind:`backup_check_response`,cardId:t.cardId,operationId:o.operationId,fileId:c,action:n.action}}function aS(e){return Object.keys(e).filter(t=>e[t]!==void 0)}function oS(e,t){if(e===t)return!0;if(Array.isArray(e)||Array.isArray(t))return Array.isArray(e)&&Array.isArray(t)&&e.length===t.length&&e.every((e,n)=>oS(e,t[n]));let n=$(e),r=$(t);if(!n||!r)return!1;let i=aS(n);return i.length===aS(r).length&&i.every(e=>Object.hasOwn(r,e)&&oS(n[e],r[e]))}function sS(e,t=!0){let n=$(e);if(!n)throw Error(`The app did not provide a usable card response.`);let r=()=>Error(`The app provided inconsistent card response information.`),i,a=e=>{let t=$(e);if(!t||typeof t.ok!=`boolean`||i&&!oS(i,t))throw r();i=t};n.structuredContent!==void 0&&a(n.structuredContent);let o,s;if(Array.isArray(n.content))for(let e of n.content){let n=$(e);if(n?.type!==`text`||typeof n.text!=`string`)continue;let i;try{i=$(JSON.parse(n.text))}catch{continue}if(i){if(i.ok!==void 0)a(i);else if(Array.isArray(i.content)){if(!t||o)throw r();let n=Yu.safeParse(i);if(!n.success)throw r();o=sS(n.data,!1),s=e,o.structuredContent!==void 0&&a(o.structuredContent)}}}let c=Object.create(null),l=!1;for(let e of[n._meta,o?._meta]){if(e===void 0)continue;let t=$(e);if(!t)throw r();for(let e of aS(t)){let n=t[e];if(Object.hasOwn(c,e)&&!oS(c[e],n))throw r();c[e]=n}l=!0}if(n.isError!==void 0&&typeof n.isError!=`boolean`||o?.isError!==void 0&&n.isError!==void 0&&o.isError!==n.isError||(n.isError===!0||o?.isError===!0)&&i?.ok===!0)throw r();return{...o,...n,...o?{content:[...Array.isArray(n.content)?n.content.filter(e=>e!==s):[],...Array.isArray(o.content)?o.content:[]]}:{},...i?{structuredContent:i}:{},...l?{_meta:c}:{}}}function cS(e,t){let n=$($(e?.data)?.request);return!!e&&(e.kind===`receipt`||e.kind===`review`)&&t.cardId===e.cardId&&t.revision===e.revision&&t.transactionDigest===(e.kind===`receipt`?e.input.digest:n?.transactionDigest)&&(e.kind!==`review`||t.attemptId===n?.attemptId)}function lS(e){let t;for(let n of Array.isArray(e.content)?e.content:[]){let e=$(n),r;if(e?.type===`resource_link`&&typeof e.uri==`string`&&e.uri.startsWith(`suimcp://cards/`)&&(r=e.uri),e?.type===`text`&&typeof e.text==`string`){let t=/^\[Resource link: card_([A-Za-z0-9_-]+)\] (suimcp:\/\/cards\/([A-Za-z0-9_-]+)) \(Saved data for this exact card\.\)$/.exec(e.text);if(!t&&e.text.startsWith(`[Resource link:`)&&e.text.includes(`suimcp://cards/`))throw Error(`The saved card links could not be matched to one card.`);if(t){if(t[1]!==t[3])throw Error(`The saved card links could not be matched to one card.`);r=t[2]}}if(r===void 0)continue;let i=r.slice(Xx.length);if(!i||encodeURIComponent(i)!==i||t!==void 0&&i!==t||e?.type===`resource_link`&&typeof e.name==`string`&&e.name.startsWith(`card_`)&&e.name!==`card_${i}`)throw Error(`The saved card links could not be matched to one card.`);t=i}return t}function uS(e){let t=$(e.structuredContent),n=t?.ok===!0?Zx.safeParse(t.data):void 0,r=$($(t?.error)?.details),i=n?.success?void 0:t?.ok===!0?$(t.data)?.card??t.data:r?.snapshot,a=i===void 0?void 0:Wx.parse(i);a?.kind===`settings`&&Ix.parse(a.data);let o=$(e._meta)?.[qx],s=o===void 0?void 0:$x.parse(o);if(s&&!cS(a,s))throw Error(`Transaction details do not match this saved result.`);let c=$(e._meta)?.[Jx],l=c===void 0?void 0:eS.parse(c);if(l&&(!a||a.kind!==`connect`||l.cardId!==a.cardId||l.revision!==a.revision||l.connectionId!==$($(a.data)?.connection)?.connectionId))throw Error(`The connection QR code does not match this card.`);return{snapshot:a,display:s,wallet:l,inputRequired:n?.success?n.data:void 0,error:typeof r?.message==`string`?r.message:typeof r?.reason==`string`?r.reason:void 0}}function dS(e,t){let n=document.getElementById(`app`);if(!n)throw Error(`Card root is unavailable.`);let r=document.createElement(`h1`);r.textContent=t.title;let i=document.createElement(`p`);i.className=`ui-note`,i.setAttribute(`role`,`status`);let a=document.createElement(`p`);a.className=`ui-error`,a.setAttribute(`role`,`alert`);let o=document.createElement(`p`);o.className=`ui-note card-guidance`;let s=document.createElement(`section`),c=document.createElement(`div`);c.className=`card-actions`;let l=document.createElement(`div`);l.className=`card-progress-hint`,l.hidden=!0,n.replaceChildren(r,i,a,s,o,l,c);let u=new Xh({name:`sui-mcp-card`,version:`0.7.0`},{},{autoResize:!0,strict:!0}),d=new AbortController,f=e===`connect`||e===`review`,p=e===`settings`,m=f||p,h=!1,g,_,v,y,b,ee,x,te=!1,ne=!1,re,ie,S={status:`unconfirmed`},ae,oe,se,C,w,T=`continue`,E,ce,le=0,ue=0,de,fe,pe,me,D,he,ge,_e,ve=!1;function ye(){if(!C||!y)return;let{input:e,basis:t}=C,n=$(y.data),r=$(t.data),i=$(n?.request),a=$(n?.review),o=$(n?.connection),s=$(r?.request),c=$(r?.connection),l=!!i&&i.attemptId===s?.attemptId,u=!!o&&o.connectionId===c?.connectionId;if(!f)return y.state===`running`||y.reason===`completed`?C.delivery===`rejected`?`past`:`observed`:y.state===`closed`?`past`:`active`;if(e.walletRunId&&e.walletRunId!==$(n?.walletAvailability)?.walletRunId&&e.walletRunId!==n?.acceptedWalletRunId)return`past`;switch(e.action){case`connect`:if(y.state!==`ready`&&o)return`observed`;if(n?.walletAvailability&&$(n.walletAvailability)?.status===`available`&&Array.isArray(n.connections)&&n.connections.some(e=>$(e)?.status===`connected`))return`past`;break;case`prepare_review`:if(typeof a?.reviewRevision==`number`&&typeof e.reviewRevision==`number`&&a.reviewRevision>e.reviewRevision)return a.account===e.account?`observed`:`past`;break;case`request_signature`:if(i?.account===e.account&&i?.reviewRevision===e.reviewRevision)return`observed`;if(typeof a?.reviewRevision==`number`&&typeof e.reviewRevision==`number`&&a.reviewRevision>e.reviewRevision||!i&&a&&a.reviewRevision===e.reviewRevision&&a.account===e.account&&a.status===`refresh_required`&&$(a.state)?.refreshReason===`review_evidence_stale`&&Array.isArray(n?.allowedActions)&&n.allowedActions.includes(`prepare_review`))return`past`;break;case`cancel`:if(y.reason===`cancelled`)return`observed`;break;case`disconnect`:if(o&&o.connectionId===e.connectionId&&(o.pendingAction===`disconnect`||y.state!==`ready`&&o.status===`disconnected`))return`observed`;break;case`use_account`:if(y.reason===`completed`&&n?.activeAccount===e.account&&o?.connectionId===e.connectionId)return`observed`;break;case`stop_connection`:if(u&&o?.status===`stopped`)return`observed`;if(u&&o?.status!==`awaiting_approval`)return`past`;break;case`stop_waiting`:if(l&&(i?.requestStatus===`stopped`||n?.observationStopped===!0))return`observed`;if(l&&[`completed`,`request_failed`,`outcome_unknown`].includes(String(i?.requestStatus)))return`past`;break;case`read_result`:if(l&&(n?.observe===!0||i?.requestStatus===`completed`))return`observed`;if(l&&[`stopped`,`request_failed`].includes(String(i?.requestStatus)))return`past`}return be()||typeof n?.actionRemainingMs==`number`&&n.actionRemainingMs<=0||[`connect`,`disconnect`,`use_account`,`cancel`,`prepare_review`,`request_signature`].includes(String(e.action))&&(y.state!==`ready`||a?.status===`expired`)?`past`:`active`}function be(){let e=fx.safeParse(C?.input);if(!e.success||e.data.action!==`disconnect`&&e.data.action!==`use_account`)return!1;let t=e.data,n=mx.safeParse(y?.data);if(!n.success)return!1;let r=n.data.connections.find(e=>e.connectionId===t.connectionId);return r?t.action===`disconnect`?n.data.walletAvailability.status===`available`&&!r.pendingAction&&!n.data.manageableConnectionIds.includes(t.connectionId)&&[`disconnected`,`failed`,`rejected`,`stopped`,`expired`].includes(r.status):[`disconnected`,`failed`,`rejected`,`stopped`,`expired`].includes(r.status)||t.action===`use_account`&&r.status===`connected`&&!r.accounts.includes(t.account):!1}function xe(){if(!C)return;let e=ye();e&&C.disposition!==`observed`&&(e!==`active`||C.disposition===`active`)&&(C.disposition=e),C.disposition===`observed`&&(C.retryRequired=!1)}function Se(){let e=px.safeParse($(y?.data)?.automaticAction);return C?.retryRequired&&e.success&&C.input.action===e.data.action?e.data:void 0}function Ce(e){let t={connect:`connection request`,prepare_review:`review update`,request_signature:`wallet approval request`,read_result:`transaction status check`,cancel:`cancellation request`,stop_connection:`request to stop connecting`,stop_waiting:$($(e.basis.data)?.request)?.requestStatus===`awaiting_signature`?`request to stop wallet approval`:`request to stop checking the result`,disconnect:`wallet disconnect request`,use_account:`account selection`};return f?t[String(e.input.action)]??`request`:`data request`}function we(e){if(e!==`past`||!C)return;let t=Ce(C),n=C.input.action===`read_result`&&$($(y?.data)?.request)?.requestStatus===`outcome_unknown`?` To check this transaction again, ask to open its result in chat.`:``;return`Message from an earlier ${t}: “${C.message}”${n}`}let Te,Ee;function De(){let t=$(y?.data),n=p?$(t?.download):void 0,r=Array.isArray(n?.allowedFileActions)?n.allowedFileActions:[],i=[...Array.isArray(t?.allowedActions)?t.allowedActions:[],...r.filter(e=>e===`settings_report_download`||Te===void 0||Date.now()<Te)],a=e===`review`&&t?.mode===`review`&&!t.request&&!!g&&y?.state===`ready`,o=a&&de!==void 0&&Date.now()>=de,s=document.visibilityState!==`hidden`,c=d.signal.aborted||S.status===`rejected`,l=S.status===`confirmed`,u=C?.disposition,v=u===`active`,b=C?.retryRequired===!0,ee=C?.input.action===`request_signature`&&u===`active`,x=T===`paused`,ne=he?.pending?.()===!0,re=he?.displayRecovery?.(),le=l&&!c&&!oe&&!ne&&!o&&!!g,fe=le&&!w&&!h&&(!m||!(E&&(v||b||x))),pe=px.safeParse(t?.automaticAction),me=p?$(n?.localSave):void 0,D=!!y&&(m?t?.observe===!0||me?.status===`saving`:y.state===`running`),ge=!!_&&te&&!c&&!E&&s&&(ce===`explicit`||S.status!==`read_failed`&&(ce===`background`||S.status===`needed`&&S.automatic)),_e=s&&le&&!ae&&!E&&!ce&&!w&&!b&&!ee&&!x&&f&&pe.success&&i.includes(pe.data.action)?pe.data:void 0,ve=$(t?.restoreCheck),ye=p&&le&&y?.state===`ready`&&!w&&!h&&!t?.result&&t?.observe!==!0&&(ve?.status===`cannot_restore`&&[`operation_busy`,`wallet_request_unsettled`].includes(String(ve.reason))||!i.includes(`settings_select`)||!i.includes(`settings_download_backup`)||t?.phase===`prepared`&&!i.includes(`settings_confirm`)||t?.phase===`draft`&&$(t.draft)?.kind!==void 0&&$(t.draft)?.kind!==`import_local_data`&&!i.includes(`settings_prepare`)),be;!c&&_&&(S.status===`read_failed`||ae||S.status===`unconfirmed`?be=`read`:S.status===`needed`?S.automatic||(be=`read`):oe||re||p&&[`pending`,`failed`].includes(String(t?.temporaryFileCleanup))||me?.status===`saving`||me?.status===`needs_consent`&&!i.includes(`settings_store_backup`)||me?.status===`failed`&&me.failure===`not_published`&&!n?.endReason&&!i.includes(`settings_store_backup`)||ye?be=`read`:g?$(t?.progress)?.status===`unavailable`||$(t?.walletAvailability)?.status===`initializing`&&$(t?.walletAvailability)?.stage===`state_sync`?be=`read`:!x&&Se()?be=`retry`:v&&!D&&!(x&&i.length>0)&&!(C?.input.action===`prepare_review`&&i.includes(`prepare_review`)&&t?.automaticAction===void 0)&&f&&(be=`read`):(y?.state!==`closed`||oe)&&(be=`read`));let xe=f?t?.actionRemainingMs:y?.inputRemainingMs;be===`retry`&&o&&(be=`read`);let Ee=f?t?.nextStateReadAfterMs:p&&Te!==void 0?Math.max(0,Te-ue):void 0,De=[(f?i.length>0:y?.state===`ready`)?xe:void 0,Ee].filter(e=>typeof e==`number`&&Number.isFinite(e)&&e>0),Oe=!c&&!!g&&s&&!ie&&!ae&&S.status!==`read_failed`,ke=$(t?.review),Ae=a&&!c&&!ae&&!oe&&!v&&!b&&!x&&S.status!==`read_failed`&&(ne||w?.input.action===`prepare_review`||ke?.preparing===!0||pe.success&&pe.data.action===`prepare_review`||S.status===`needed`&&ke?.status===`ready_for_wallet_review`);return{current:l,inputEnabled:fe,permitted:i,disposition:u,read:ge,auto:_e,recover:be,paused:x,partialDisplayFailure:re,settingsInputBlocked:ye,reviewUpdatePending:Ae,reviewCommandDeliveryFailed:v&&C?.input.action===`prepare_review`,reviewHint:o?void 0:Ae?ne||ke?.preparing||w?.input.action===`prepare_review`?`Updating review…`:`Checking status…`:a&&$(ke?.state)?.refreshReason===`review_evidence_stale`?`Review details are out of date.`:void 0,errors:[S.status===`rejected`?S.message:S.status===`read_failed`?`This card's status could not be checked. Reported message: “${S.message}”`:void 0,ae&&S.status!==`rejected`?`This card could not be opened. Reported message: “${ae}”`:void 0,v&&C?`Message for this ${Ce(C)}: “${C.message}”`:void 0,oe,re?.message],note:[se,we(u)].filter(Boolean).join(` `),expiryAt:Oe&&l&&De.length?ue+Math.min(...De):void 0,poll:Oe&&(D||S.status===`needed`&&!S.automatic),lifetimeAt:!c&&s&&a?de:void 0}}function Oe(e){return e.recover===`retry`?C?.input.action===`connect`?`Retry connection`:`Retry review`:e.recover===`read`?`Check status`:void 0}function ke(e){if(d.signal.aborted)return``;let n=e.errors.some(Boolean)||e.recover!==void 0||!!y&&!g&&y.state!==`closed`||y?.state===`closed`&&y.reason!==`completed`,r=e.errors.some(Boolean)||S.status!==`confirmed`||e.recover===`retry`||e.settingsInputBlocked;if(n&&r&&S.status!==`rejected`){if(E||e.read)return`Checking status…`;let t=Oe(e);if(t)return t===`Check status`?oe||e.partialDisplayFailure?`Use Check status to read this card and try displaying it again.`:`Use Check status to read this card again.`:t===`Retry connection`?`Use Retry connection to try connecting your wallet again.`:`Use Retry review to try again with the displayed wallet and account.`;if(Ae(e)&&he?.selectionHint)return he.selectionHint}return t.guidance?.(y,{confirmed:e.current,readOnly:!g,recoveryNeeded:n,visibleConfirmation:he?.visibleConfirmation?.(),commandPending:m&&w&&e.current&&!e.errors.some(Boolean)&&(w.phase===`confirming`||y?.state===`ready`&&!$(y.data)?.runtimeRecovery&&!$(y.data)?.request&&!$($(y.data)?.review)?.preparing)?{phase:w.phase,action:String(w.input.action)}:void 0,approvalUnresolved:C?.input.action===`request_signature`&&e.disposition===`active`||w?.input.action===`request_signature`,automaticPaused:e.paused})??``}function Ae(e=De()){return e.inputEnabled&&y?.state===`ready`&&ve}function je(e,t=De()){return m&&t.inputEnabled&&(e?t.permitted.includes(e.action):t.permitted.length>0)}function Me(e){let t=De();return p&&h&&t.current&&!!g&&!w&&!E&&!oe&&!d.signal.aborted&&[`settings_begin_upload`,`settings_upload_chunk`,`settings_seal_upload`,`settings_retry_download`,`settings_report_download`,`settings_cancel_download`,`settings_store_backup`].includes(String(e.action))&&t.permitted.includes(e.action)}function Ne(e){let u=$(y?.data),f=s.querySelector(`.review-action-feedback`),_=s.querySelector(`.review-primary-action`);if(_&&f){let e=s.querySelector(`.review-lifetime`);e?(e.append(l),f.prepend(a)):f.prepend(l,a),f.append(o)}else n.insertBefore(a,s),n.insertBefore(l,c),n.insertBefore(o,l);a.className=_?`ui-note`:`ui-error`,y?(r.textContent=t.titleFor?.(y)??t.title,i.textContent=S.status===`rejected`?`Card unavailable`:!e.current&&y.state===`ready`?_?``:!d.signal.aborted&&(E||e.read)?`Checking whether actions are available in this card…`:`Actions are unavailable until this card's status is checked.`:!g&&y.state!==`closed`?`View only.`:m?$(u?.progress)?.status===`unavailable`?`Current progress is unavailable. The last recorded state is shown.`:!u?.request&&y.state===`closed`&&[`expired`,`server_restarted`,`cancelled`].includes(y.reason??``)?`This card no longer accepts actions.`:``:y.state===`running`?`Reading the requested data…`:y.reason===`completed`?``:y.error??(y.reason===`expired`?`The time to make a selection has ended.`:y.reason===`server_restarted`?`This request ended when Sui MCP restarted.`:``)):i.textContent=ie?``:S.status===`read_failed`?`Card status unavailable`:ae||S.status===`rejected`?`Card unavailable`:`Opening card…`,i.hidden=!i.textContent,a.textContent=[...new Set(e.errors.filter(Boolean))].join(` `),a.hidden=!a.textContent;let v=s.querySelector(`.review-status`);v&&(v.hidden=!!_&&(e.reviewUpdatePending||!!a.textContent));let b=s.querySelector(`.review-material-status`);if(b&&(b.textContent=b.dataset.previous===`true`||!e.current||e.reviewUpdatePending?b.dataset.previousLabel??``:b.dataset.currentLabel??``),o.textContent=[e.note,ke(e)].filter(Boolean).join(` `),o.hidden=!o.textContent,ve)for(let t of s.querySelectorAll(`input, button, select`))(!m||t.tagName!==`BUTTON`||t.dataset.cardAction!==void 0)&&(t.disabled=m?!je(void 0,e):!Ae(e));if(m)for(let t of s.querySelectorAll(`[data-card-action]`))t.disabled=!je({action:t.dataset.cardAction},e);if(p)for(let t of s.querySelectorAll(`[data-settings-file-action]`))t.disabled=t.dataset.settingsLocalBlocked===`true`||!(h?Me({action:t.dataset.cardAction}):je({action:t.dataset.cardAction},e));_&&(e.reviewUpdatePending||_.dataset.cardAction===`request_signature`&&e.reviewCommandDeliveryFailed||_.dataset.cardAction===void 0)&&(_.disabled=!0),D&&(D.disabled=!!w||!!E)}function Pe(e){try{e?.()}catch{oe=`The card display could not be closed cleanly. Its stored information is unchanged.`}}function Fe(e){if(!y||d.signal.aborted)return;if(y.state===`ready`&&S.status!==`confirmed`){if(p&&he?.update)try{he.update(y,{automaticPaused:T===`paused`,settings:qe,settingsCommandProgress:void 0,onDisplayChange:()=>k()})}catch{oe=`This card could not be displayed. Its stored information is unchanged.`}return}if(y.state===`running`&&!m){oe=void 0;return}let n=m?{...$(y.data),actionRemainingMs:void 0,nextStateReadAfterMs:void 0,...p&&$(y.data)?.download?{download:{...$($(y.data)?.download),remainingMs:void 0}}:{}}:void 0,r=p&&w?.phase===`sending`&&S.status===`confirmed`?iS(w.basis,y,w.input):void 0,i=`${T===`paused`}:${JSON.stringify(r)}:${y.revision}:${g!==void 0}:${b!==void 0}:${x!==void 0}:${JSON.stringify(n)}`;if(i===ge||i===_e&&!e)return;_e=i;let a=[...s.children],o=new Set([...s.querySelectorAll(`details`)].filter(e=>e.open).map(e=>e.querySelector(`summary`)?.textContent)),c,l=!1,u=!1;try{let e={automaticPaused:T===`paused`,onDisplayChange:()=>k(),...p?{settings:qe,settingsCommandProgress:r}:{}};if(he?.update?.(y,e)){ge=i,oe=void 0;return}if(y.state===`ready`&&g){let n=t.controls(y,e=>{Ge(e)},b,x,e);c=`node`in n?n:{node:n},l=!0}else(m||y.reason===`completed`)&&y.data!==void 0&&(c=t.result(y,b,g?e=>{Ge(e)}:void 0,x,e));s.replaceChildren(...c?[c.node]:[]),u=!0,c?.mount?.();for(let e of s.querySelectorAll(`details`))o.has(e.querySelector(`summary`)?.textContent)&&(e.open=!0)}catch{u&&s.replaceChildren(...a),Pe(c?.dispose),oe=`This card could not be displayed. Its stored information is unchanged.`;return}let f=he?.dispose;he=c,ve=l,ge=i,oe=void 0,Pe(f)}function Ie(t,n,r,i,a){if(d.signal.aborted||S.status===`rejected`)return!1;if(t.kind!==e||t.cardId!==_)throw S={status:`rejected`,message:`The returned information does not match this card.`},Error(`The returned information does not match this card.`);let o=$(t.data),s=$(o?.request),c=$(s?.execution),l=o?.automaticAction===void 0?void 0:px.safeParse(o.automaticAction);if(l&&!l.success)throw Error(`This card could not start the next step.`);if(y&&t.revision<y.revision)return!1;if(v&&[...new Set([...Object.keys(v),...Object.keys(t.input)])].some(e=>JSON.stringify(t.input[e])!==JSON.stringify(v[e])))throw S={status:`rejected`,message:`The returned information does not match this card.`},Error(`The returned information does not match this card.`);if(e===`review`&&($(o?.review)?.reviewSessionId!==void 0&&$(o?.review)?.reviewSessionId!==t.input.reviewSessionId||s&&(s.reviewSessionId!==t.input.reviewSessionId||t.input.attemptId!==void 0&&s.attemptId!==t.input.attemptId)||c&&(c.reviewSessionId!==s?.reviewSessionId||c.attemptId!==s?.attemptId||c.txDigest!==s?.transactionDigest)||$(o?.receipt)?.status===`found`&&$($(o?.receipt)?.receipt)?.txDigest!==s?.transactionDigest)||e===`receipt`&&o?.status===`found`&&$(o.receipt)?.txDigest!==t.input.digest)throw S={status:`rejected`,message:`The saved result does not match the information requested in this card.`},Error(S.message);!v&&(f||t.state!==`ready`)&&(v={...t.input});let u=r!==`preview`;if((!y||t.revision!==y.revision)&&(b=void 0,x=void 0),y=t,xe(),u){ue=Date.now();let t=p?$(o?.download):void 0;if(t?.availability===`available`&&typeof t.remainingMs==`number`&&Number.isFinite(t.remainingMs)){let e=`${o?.operationId}:${$(o?.file)?.fileId}:${t.expiresAt}`;Ee!==e&&(Ee=e,Te=void 0),Te=Math.min(Te??1/0,ue+Math.max(0,t.remainingMs))}else p&&t?.availability===`ended`&&(Te=void 0);g&&e===`review`&&o?.mode===`review`&&!o.request&&typeof o.actionRemainingMs==`number`&&Number.isFinite(o.actionRemainingMs)&&o.actionRemainingMs>=0&&(de=Math.min(de??1/0,ue+o.actionRemainingMs))}return r===`read`&&(S.status!==`needed`||a>S.afterRead)&&(S={status:`confirmed`},ae=void 0),n&&(b=n),x=i,!0}function Le(){fe!==void 0&&clearTimeout(fe),pe!==void 0&&clearTimeout(pe),me!==void 0&&clearTimeout(me),fe=void 0,pe=void 0,me=void 0,l.hidden=!0}function Re(e){let t=Oe(e);D?.textContent!==t&&(D?.remove(),D=void 0,t&&(D=ng(t,()=>{if(!(E||w||d.signal.aborted)){if(De().recover===`retry`){let e=Se();e&&We(e)}else O()}})));let n=s.querySelector(`.review-primary-action`),r=s.querySelector(`.review-primary-slot`);n&&(n.hidden=!!D&&!!r),D&&(D.disabled=!!E||!!w,r?(D.classList.add(`review-recovery-action`),r.append(D)):(D.classList.remove(`review-recovery-action`),c.append(D)))}async function O(){let e=he,t=e?.displayRecovery?.(),n=await Be(!0);n?.kind===`accepted`&&y===n.snapshot&&S.status===`confirmed`&&!d.signal.aborted&&document.visibilityState!==`hidden`&&!oe&&e===he&&t&&e?.displayRecovery?.()===t&&(t.retry(),k())}function k(e=!1){if(ie){let e=document.createElement(`p`);e.className=`ui-note`,e.textContent=ie,s.replaceChildren(e)}else Fe(e);let t=De();if(Ne(t),Le(),Re(t),d.signal.aborted||S.status===`rejected`)return;t.expiryAt!==void 0&&(pe=setTimeout(()=>{ze(),k()},Math.max(0,t.expiryAt-Date.now()))),t.reviewHint&&!a.textContent&&(l.replaceChildren(),l.textContent=t.reviewHint,l.setAttribute(`role`,`status`),l.hidden=!1);let n=s.querySelector(`.review-time-remaining`);if(n&&t.lifetimeAt!==void 0){let e=t.lifetimeAt,r=()=>{if(d.signal.aborted)return;let t=Math.max(0,e-Date.now()),i=Math.ceil(t/1e3);if(n.textContent=t>0?`Review expires in ${Math.floor(i/60)}:${String(i%60).padStart(2,`0`)}`:`Review time elapsed`,t>0)me=setTimeout(r,Math.min(1e3,t));else{let e=De();Ne(e),Re(e)}};r()}if(t.poll&&y){let e=ue+y.pollAfterMs-Date.now();fe=setTimeout(()=>{Be(!1)},e>0?e:y.pollAfterMs)}t.read?(ce=void 0,Ve()):t.auto&&(fe=setTimeout(()=>{let e=De().auto;e&&Ke(e,`automatic`)},0))}function ze(){S.status!==`rejected`&&S.status!==`read_failed`&&(S={status:`needed`,afterRead:le,automatic:!0})}function Be(e){return d.signal.aborted||S.status===`rejected`||!_||!te?Promise.resolve(void 0):E?E.promise:S.status===`read_failed`&&!e?Promise.resolve(void 0):(ce=e?`explicit`:`background`,k(),E?.promise??Promise.resolve(void 0))}function Ve(){let e=++le,t=performance.now(),n={id:e,promise:Promise.resolve().then(async()=>{try{let n,r,i;if(g){let e=uS(await He(nS.read,g));if(!e.snapshot)throw Error(e.error??`Saved card data is unavailable.`);if(e.error)throw Error(e.error);n=e.snapshot,r=e.display,i=e.wallet}else{let e=`${Xx}${encodeURIComponent(_)}`,t=(await u.readServerResource({uri:e},{signal:d.signal})).contents.find(t=>t.uri===e&&`text`in t);if(!t||!(`text`in t))throw Error(`Saved card data is unavailable.`);n=Wx.parse(JSON.parse(t.text));let i=b??ee;r=i&&cS(n,i)?i:void 0}if(d.signal.aborted||S.status===`rejected`)return{kind:`disposed`,id:e};let a=Ie(n,r,`read`,i,e);return ee=void 0,!a&&S.status===`needed`&&e>S.afterRead&&(S={...S,automatic:!1}),k(a),a&&S.status===`confirmed`?{kind:`accepted`,snapshot:n,id:e,requestStartedAt:t}:{kind:`ignored`,id:e}}catch(t){return d.signal.aborted?{kind:`disposed`,id:e}:(S.status!==`rejected`&&(S={status:`read_failed`,message:t instanceof Error?t.message:`Saved card data could not be read. The last displayed result is unchanged.`}),{kind:`failed`,id:e})}}).finally(()=>{E===n&&(E=void 0),k()})};E=n,k()}async function He(e,t){return sS(await u.callServerTool({name:e,arguments:t},{signal:d.signal}))}function Ue(e,t,n){let r=mx.safeParse(n.data);if(!r.success||!r.data.allowedActions.some(t=>t===e.action))return!1;let i=r.data,a=$(t.data);return e.walletRunId&&e.walletRunId!==i.walletAvailability.walletRunId?!1:e.action===`connect`?i.allowedActions.includes(`connect`)&&[`connect`,`manage`].includes(String(n.input.intent)):e.action===`prepare_review`||e.action===`request_signature`?i.review?.reviewRevision===e.reviewRevision&&(e.action===`prepare_review`?i.assetReadAccount?.status===`available`?i.assetReadAccount.account:void 0:i.review?.account)===e.account&&hx(i,String(e.account),e.action===`request_signature`).some(t=>t.connectionId===e.connectionId):e.action===`disconnect`?i.manageableConnectionIds.includes(String(e.connectionId))&&i.connections.some(t=>t.connectionId===e.connectionId&&!t.pendingAction):e.action===`use_account`?i.connections.some(t=>t.connectionId===e.connectionId&&t.status===`connected`&&!t.pendingAction&&t.connectionId===i.usableConnectionId&&t.accounts.includes(String(e.account))):i.connection?.connectionId===$(a?.connection)?.connectionId&&i.request?.attemptId===$(a?.request)?.attemptId&&i.review?.reviewRevision===$(a?.review)?.reviewRevision}async function We(e){if(!y||E||!je(e))return;let t={input:e,basis:y,phase:`confirming`};w=t;let n=await Be(!1);w===t&&(w=void 0,n?.kind===`accepted`&&y===n.snapshot&&S.status===`confirmed`&&!d.signal.aborted&&document.visibilityState!==`hidden`&&Ue(e,t.basis,n.snapshot)&&je(e)?await Ke(e):S.status!==`read_failed`&&S.status!==`rejected`&&!d.signal.aborted&&(se=`The card state changed. Check the current selection before trying again.`),k())}async function Ge(e){f&&(C?.disposition===`active`||C?.retryRequired||T===`paused`)?await We(e):await Ke(e)}function A(e,t,n){C={input:e.input,basis:e.basis,message:t,delivery:n,disposition:`active`,retryRequired:e.input.action===`connect`||e.input.action===`prepare_review`},xe(),[`cancel`,`disconnect`,`stop_connection`,`stop_waiting`,`use_account`].includes(String(e.input.action))&&(T=`paused`),(m||n===`unknown`)&&ze()}async function Ke(e,t=`user`){if(!y||!g||(t===`file`?!Me(e):m?!je(e):!Ae()))return;let n={input:e,basis:y,phase:`sending`};w=n,T=`continue`,(t===`user`||C?.disposition!==`past`)&&(C=void 0),se=void 0,k();try{let t=uS(await He(m?nS.act:nS.submit,{...g,revision:n.basis.revision,input:e}));if(d.signal.aborted||S.status===`rejected`)return;if(!t.snapshot)throw Error(t.error??`The request could not be confirmed.`);t.error&&A(n,t.error,`rejected`),Ie(t.snapshot,t.display,`action`,t.wallet)}catch(e){!d.signal.aborted&&S.status!==`rejected`&&(A(n,e instanceof Error?e.message:`The request could not be confirmed.`,`unknown`),C&&(C.data=$(e)?.data))}finally{w===n&&(w=void 0),k()}}let qe={uploadChunkLimit(e,t){return g?Bx({jsonrpc:`2.0`,id:2**53-1,method:`tools/call`,params:{name:nS.act,arguments:{...g,revision:2**53-1,input:{action:`settings_upload_chunk`,operationId:e,fileId:t,offset:2**53-1,chunkBase64:``}}}})??0:0},async readCurrent(){let e=await Be(!0);if(e?.kind!==`accepted`)throw Error(`The current Settings selection could not be checked. Use Check status before continuing.`);return{snapshot:e.snapshot,requestStartedAt:e.requestStartedAt}},async act(e,t=!1){if(t?!Me(e):!je(e))throw Error(`This Settings action is unavailable until its current status has been checked.`);if(await Ke(e,t?`file`:`user`),d.signal.aborted)throw Error(`This card closed before the request finished. Reopen the same conversation to check its status.`);if(C?.input===e){let e=Error(C.message);throw e.data=C.data,e}if(!y)throw Error(`The current Settings status could not be checked.`);return y},setFileTransferActive(e){h=e,k()},async readFile(e){if(!g||!_||!De().current||d.signal.aborted)throw Error(`Backup read permission is unavailable.`);let t=await He(nS.readSettingsFile,{...g,...e}),n=tS.parse($(t._meta)?.[Yx]);if(n.cardId!==_||n.operationId!==e.operationId||n.fileId!==e.fileId||n.offset!==e.offset||n.attemptId!==e.attemptId)throw Error(`The backup response does not match this card's selected file.`);return n},download:async(e,t,n)=>{let r=$($(y?.data)?.download);if(!g||!De().current||d.signal.aborted||document.visibilityState===`hidden`||r&&(r.currentAttemptId!==n||r.localSave||r.availability!==`available`||Te===void 0||Date.now()>=Te))throw Error(`This download is no longer available in this card.`);try{return{isError:(await u.downloadFile({contents:[{type:`resource`,resource:{uri:`file:///${encodeURIComponent(e)}`,mimeType:`application/json`,blob:t}}]},{signal:d.signal})).isError}}catch(e){if(e&&typeof e==`object`&&`code`in e&&e.code===-32601)return{unsupported:!0};throw e}}};async function Je(){if(te&&re!==void 0&&!ne){ne=!0;try{let t=sS(re),n=$(t._meta);if(t._meta!==void 0&&!n)throw Error(`This card cannot accept actions with the access information provided by the app.`);let r=n?.[Kx];if(r!==void 0){let e=Qx.safeParse(r);if(!e.success)throw Error(`This card cannot accept actions with the access information provided by the app.`);g=e.data}let i=uS(t);if(i.inputRequired){if(i.inputRequired.kind!==e||g)throw Error(`The app provided inconsistent card input information.`);ie=i.inputRequired.message,k();return}let a=lS(t),o=[i.snapshot?.cardId,g?.cardId,a].filter(e=>e!==void 0);if(!o.length)throw Error(`Card data is unavailable.`);if(o.some(e=>e!==o[0])||i.snapshot&&i.snapshot.kind!==e)throw S={status:`rejected`,message:`The returned information does not match this card.`},Error(S.message);_=o[0];let s=i.snapshot;s&&(f||s.state!==`ready`)&&(v={...s.input}),ee=i.display,s&&g&&Ie(s,i.display,`preview`,i.wallet),ze(),k()}catch(e){if(d.signal.aborted)return;ae=e instanceof Error?e.message:`Card data could not be read.`,k()}}}u.ontoolresult=e=>{if(re===void 0)re=e,Je();else try{let t=uS(sS(re)).snapshot??y,n=uS(sS(e)).snapshot;if(t&&n&&(t.cardId!==n.cardId||t.kind!==n.kind))throw Error(`The app returned a different card.`)}catch{S={status:`rejected`,message:`The returned information does not match this card.`},k()}},u.onhostcontextchanged=e=>{e.theme&&(document.documentElement.dataset.theme=e.theme)};let Ye=()=>{document.visibilityState!==`hidden`&&g&&ne&&S.status!==`read_failed`?Be(!1):k()};document.addEventListener?.(`visibilitychange`,Ye),u.onteardown=async()=>{if(d.signal.aborted)return{};d.abort(),w=void 0,document.removeEventListener?.(`visibilitychange`,Ye);let e=he?.dispose;return he=void 0,Pe(e),k(),{}},u.connect().then(()=>{d.signal.aborted||(te=!0,document.documentElement.dataset.theme=u.getHostContext()?.theme??`light`,Je())}).catch(()=>{d.signal.aborted||(ae=`Could not connect this card to the app.`,k())})}function fS(e){return typeof e==`object`&&e?e:void 0}function pS(e){return typeof e==`string`&&e.length>0?e:void 0}function mS(e){let t=fS(e);if(!t)return null;let n=fS(t.display),r=fS(t.unit),i=pS(t.coinType),a=pS(n?.symbol)??pS(r?.symbol)??(i===void 0?void 0:$h(i))??`(unknown coin)`,o=typeof r?.decimals==`number`?r.decimals:void 0,s=pS(n?.amount),c=pS(t.balance),l;return l=s!==void 0&&o!==void 0?s:c===void 0?`Amount unavailable`:(o===void 0?void 0:hS(c,o))??`Amount unavailable`,{symbol:a,total:l}}function hS(e,t){try{return Zh(e,t)}catch{return}}var gS={account:{name:`Name`,address:`Account address`,balances:`Balances`,noBalances:`No token balances were returned.`,nfts:`NFTs`,noNfts:`No NFTs in the scanned objects.`,noImage:`No image`,objectsTruncated:`Some objects beyond the scanned range are omitted.`},receipt:{success:`Transaction succeeded on Sui`,failure:`Transaction failed on Sui`,sender:`Sender`,account:`Affected account`,object:`Object`,noBalanceChanges:`No balance changes were recorded.`,gasComputation:`Computation cost`,gasStorage:`Storage cost`,gasRebate:`Storage rebate`,gasBudget:`Network fee limit (gas budget)`,netFeeExplanation:`The network fee shown above includes the storage rebate. If it is negative, the rebate exceeds the computation and storage charges.`,estimatedNetFeeExplanation:`The estimated network fee shown above includes the storage rebate. If it is negative, the rebate exceeds the estimated computation and storage charges.`,gasLimitExplanation:`The gas budget limits network fee spending. It is not an estimate of the amount charged.`,gasPrice:`Gas price`,gasPayment:`Gas payment object`,graph:`Transaction graph`,graphTip:`A diagram of this transaction's programmable transaction block (PTB), derived from public on-chain data. It is a diagnostic view only, not transaction input, signing, or a safety verdict.`,graphReviewTip:`A diagram of the transaction prepared for this review and simulation. It shows what is being reviewed, not an actual result, permission to sign, or a guarantee of safety.`,graphRendering:`Rendering the transaction graph…`,graphFailed:`The transaction graph could not be rendered`,graphZoomIn:`Zoom in`,graphZoomOut:`Zoom out`,graphCenter:`Center`,graphShowAddresses:`Show full addresses`,graphShowNames:`Show readable labels`,moveCalls:`Move calls`,noMoveCalls:`No Move calls were recorded.`,inputs:`Inputs`,noInputs:`No inputs were recorded.`,inputKinds:{object:`Owned object`,shared_object:`Shared object`,receiving:`Receiving object`,pure:`Pure value`,withdrawal:`Balance withdrawal`,unknown:`Input`},bytes:`bytes`,events:`Events`,noEvents:`No events were recorded.`,objectChanges:`Object changes`,noObjectChanges:`No object changes were recorded.`},chart:{boundaryUsdc:`Prices are in USDC, not USD; dollar parity is not guaranteed.`,boundaryScope:`Historical prices, not live quotes.`,source:`Source: DeepBookV3 Indexer.`,renderedWith:`Rendered with`,library:`TradingView Lightweight Charts`},common:{walletStatusRecovery:`Ask in chat to open Settings, then use Troubleshooting to restart the connection service. This does not confirm removal of a connection in your wallet app.`,mainnet:`Sui mainnet`,retrievedAt:`Data retrieved`}},_S={en:gS};function vS(){try{return(navigator.language||`en`).slice(0,2).toLowerCase()}catch{return`en`}}function yS(e=vS()){return _S[e]??gS}var bS=yS(),xS={title:`Account assets`,guidance:(e,t)=>t.recoveryNeeded?`Ask in chat to view the assets for this account.`:void 0,controls:()=>Y(`p`,`ui-note`,`Please provide a Sui address in chat.`),result(e){let t=fS(e.data);if(!t||t.status!==`ok`||!Array.isArray(t.balances)||typeof t.account!=`string`||!Array.isArray(t.nfts)||!Array.isArray(t.objectGroups)||typeof t.objectsTruncated!=`boolean`||typeof t.fetchedAt!=`string`)throw Error(`Account data is incomplete.`);let n=Y(`div`);n.append(SS(t.account,t),CS(t)),n.append(ig(`NFTs`,String(t.nfts.length)));let r=ag(`Details`);return t.nfts.length&&r.body.append(wS(t)),r.body.append(ig(bS.common.retrievedAt,lg(t.fetchedAt))),n.append(r.details,ES(t)),{node:n}}};function SS(e,t){let n=rg(),r=typeof t.name==`string`&&t.name.length>0?t.name:void 0;return r&&n.append(ig(bS.account.name,r)),n.append(ig(bS.account.address,cg(e))),n}function CS(e){let t=rg(bS.account.balances),n=Array.isArray(e.balances)?e.balances:[];if(n.length===0)return t.append(Y(`p`,`ui-note`,bS.account.noBalances)),t;for(let e of n){let n=mS(e);n&&t.append(DS(n))}return t}function wS(e){let t=rg(bS.account.nfts),n=Array.isArray(e.nfts)?e.nfts:[],r=Y(`div`,`account-nfts`);for(let e of n){let t=fS(e);t&&r.append(TS(t))}return t.append(r),t}function TS(e){let t=typeof e.type==`string`?e.type:``,n=typeof e.name==`string`&&e.name.length>0?e.name:eg(t),r=typeof e.imageUrl==`string`&&e.imageUrl.length>0?OS(e.imageUrl):void 0,i=Y(`div`,`account-nft`);if(r){let e=document.createElement(`img`);e.className=`account-nft-img`,e.src=r,e.alt=n,e.loading=`lazy`,e.referrerPolicy=`no-referrer`,e.addEventListener(`error`,()=>{e.replaceWith(Y(`div`,`account-nft-img account-nft-noimg`,bS.account.noImage))}),i.append(e)}else i.append(Y(`div`,`account-nft-img account-nft-noimg`,bS.account.noImage));return i.append(Y(`span`,`account-nft-name`,n)),i}function ES(e){let t=Array.isArray(e.objectGroups)?e.objectGroups:[],n=Y(`div`),r=t.reduce((e,t)=>{let n=fS(t);return e+(typeof n?.count==`number`?n.count:0)},0);return r>0&&n.append(Y(`p`,`ui-note`,`${r} other owned objects are not shown here.`)),e.objectsTruncated===!0&&n.append(og(bS.account.objectsTruncated)),n}function DS(e){let t=Y(`div`,`account-asset`);t.append(Y(`span`,`account-asset-symbol`,e.symbol));let n=Y(`span`,`account-asset-total`);return n.append(e.total),t.append(n),t}function OS(e){let t=e.startsWith(`ipfs://`)?`https://ipfs.io/ipfs/${e.slice(7)}`:e;try{return new URL(t).protocol===`https:`||/^data:image\//i.test(t)?t:``}catch{return``}}dS(`account`,xS);</script></body></html>