@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.
- package/README.md +13 -12
- package/dist/adapters/adapterPromptSurfaces.js +1 -1
- package/dist/core/read/deepbookReadHelpers.js +1 -1
- package/dist/core/read/readResponseGuidance.js +6 -6
- package/dist/core/session/settingsFileProtocol.js +1 -1
- package/dist/mcp/prompts.js +10 -4
- package/dist/mcp/resources.js +1 -1
- package/dist/mcp/server.js +2 -2
- package/dist/mcp/serverInfo.js +13 -12
- package/dist/mcp/toolNames.js +46 -46
- package/dist/mcp/tools/action/prepareSuiActionReview.js +4 -4
- package/dist/mcp/tools/read/deepbookReadTools.js +1 -1
- package/dist/mcp/tools/read/index.js +2 -2
- package/dist/mcp/tools/read/readToolHelpers.js +1 -1
- package/dist/mcp/tools/read/serverStatusTools.js +4 -5
- package/dist/mcp/tools/read/transactionActivityTools.js +3 -3
- package/dist/mcp/tools/session/walletConnectionTools.js +5 -5
- package/dist/mcp-app/account.html +1 -1
- package/dist/mcp-app/chart.html +1 -1
- package/dist/mcp-app/connect.html +1 -1
- package/dist/mcp-app/receipt.html +1 -1
- package/dist/mcp-app/review.html +1 -1
- package/dist/mcp-app/settings.html +1 -1
- package/dist/runtime/application.js +2 -2
- package/dist/runtime/config.js +3 -6
- package/dist/runtime/localSettingsService.js +4 -4
- package/dist/runtime/shared/control.js +2 -2
- package/dist/runtime/smokeMainnetRead.js +18 -18
- package/dist/runtime/smokeReview.js +7 -7
- package/dist/runtime/start.js +1 -1
- package/docs/AGENT_BEHAVIOR.md +78 -77
- package/docs/LOCAL_DB_ARCHITECTURE.md +5 -7
- package/docs/MCP_SETUP.md +76 -73
- package/docs/MCP_TOOLS.md +103 -102
- package/docs/SDK_API.md +8 -5
- package/docs/SIGNABLE_ADAPTER_CONTRACT.md +6 -6
- package/docs/TRANSACTION_ACTIVITY_LOG.md +7 -7
- package/docs/UTILITY_INDEX.md +59 -59
- package/docs/WALLET_CONNECTION.md +6 -5
- package/package.json +1 -1
- package/protocols/deepbook-margin.md +1 -1
- package/protocols/deepbook-v3.md +2 -2
|
@@ -3588,4 +3588,4 @@ zebra
|
|
|
3588
3588
|
zero
|
|
3589
3589
|
zone
|
|
3590
3590
|
zoo`.split(`
|
|
3591
|
-
`)),fv={0:`ED25519`,1:`Secp256k1`,2:`Secp256r1`,3:`MultiSig`,5:`ZkLogin`,6:`Passkey`},pv=e=>Object.freeze(e());function mv(e){return e instanceof Uint8Array||ArrayBuffer.isView(e)&&e.constructor.name===`Uint8Array`&&`BYTES_PER_ELEMENT`in e&&e.BYTES_PER_ELEMENT===1}function hv(e){if(!mv(e))throw TypeError(`Uint8Array expected`)}function gv(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 _v(e){if(typeof e!=`function`)throw TypeError(`function expected`);return!0}function vv(e,t){if(typeof t!=`string`)throw TypeError(`${e}: string expected`);return!0}function yv(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 bv(e,t){if(!gv(!1,t))throw TypeError(`${e}: array of numbers expected`)}var xv=(()=>{let e=[];for(let t=0;t<40;t++)e.push(2**t);return e})();function Sv(e,t=e.length){let n=Array(t);for(let r=0;r<t;r++)n[r]=e[r];return n}var Cv=(()=>{try{let e=new TextDecoder;return e.decode(Uint8Array.of(65,48,43,127))===`A0+`?e:void 0}catch{return}})(),wv=8192;function Tv(e){let t=e.length;if(Cv!==void 0&&t>=12)return Cv.decode(e);if(t<=wv)return String.fromCharCode.apply(null,e);let n=``;for(let r=0;r<t;r+=wv)n+=String.fromCharCode.apply(null,e.subarray(r,r+wv));return n}function Ev(e){if(yv(e),e<=0||e>8)throw RangeError(`radix2: bits should be in (0..8]`);let t=xv[e]-1;return{encode:n=>{hv(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 Dv(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 Tv(t)},decode:t=>{vv(`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 Ov(e){return _v(e),function(...t){try{return e.apply(null,t)}catch{}}}var kv=Dv(`qpzry9x8gf2tvdw0s3jn54khce6mua7l`),Av=/^[\x21-\x60\x7b-\x7e]+$/;function jv(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 Mv(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 Nv=[996825010,642813549,513874426,1027748829,705979059];function Pv(e){let t=e>>25,n=(e&33554431)<<5;for(let e=0;e<Nv.length;e++)(t>>e&1)==1&&(n^=Nv[e]);return n}function Fv(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=Pv(i)^n>>5}i=Pv(i);for(let t=0;t<r;t++)i=Pv(i)^e.charCodeAt(t)&31;for(let e of t)i=Pv(i)^e;for(let e=0;e<6;e++)i=Pv(i);i^=n;let a=new Uint8Array(6);for(let e=0;e<6;e++)a[e]=i>>>5*(5-e)&31;return kv.encode(a)}function Iv(e){let t=e===`bech32`?1:734539939,n=Ev(5),r=e=>{hv(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=>{bv(`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=Ov(i);function o(e,n,r=90){vv(`bech32.encode prefix`,e),r!==!1&&yv(r,`limit`),mv(n)&&(n=Sv(n)),bv(`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}`);jv(`bech32.encode prefix`,e);let o=e.toLowerCase(),s=Fv(o,n,t);return`${o}1${kv.encode(Mv(n))}${s}`}function s(e,n=90){vv(`bech32.decode input`,e),n!==!1&&yv(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&&!Av.test(e))throw jv(`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=kv.decode(s),l=Sv(c,c.length-6),u=Fv(o,l,t);if(!s.endsWith(u))throw Error(`Invalid checksum in ${e}`);return{prefix:o,words:l}}let c=Ov(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 Lv=pv(()=>Iv(`bech32`));function Rv(e){let{prefix:t,words:n}=Lv.decode(e);if(t!==`suiprivkey`)throw Error(`invalid private key prefix`);let r=new Uint8Array(Lv.fromWords(n)),i=r.slice(1);return{scheme:fv[r[0]],secretKey:i}}var zv=`external-proposal-alpha-2026-05-25`,Bv=`proposal-review-model-alpha-2026-05-25`,Vv=F().refine(e=>{let t=new Date(e);return!Number.isNaN(t.getTime())&&t.toISOString()===e},`Expected ISO 8601 UTC timestamp`),Hv=/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,Uv=/(?:0x[0-9a-fA-F]{160,}|[A-Za-z0-9+/_=-]{160,})/,Wv=/suiprivkey1[023456789acdefghjklmnpqrstuvwxyz]+/gi,Gv=/(^|[^0-9a-fA-F])(?:0x)?[0-9a-fA-F]{64}($|[^0-9a-fA-F])/,Kv=/(^|[^A-Za-z0-9+/_=-])(?:[A-Za-z0-9+/]{43}=|[A-Za-z0-9+/]{44}|[A-Za-z0-9_-]{43,44})($|[^A-Za-z0-9+/_=-])/,qv=/^(?:0|[1-9][0-9]*)(?:\.[0-9]+)?$/,Jv=[12,15,18,21,24];function Yv(e,t,n={}){return F().min(1).max(e).superRefine((e,r)=>{(Hv.test(e)||Uv.test(e)||Zv(e)||Qv(e)||!n.allowRawSecretLikeText&&$v(e))&&r.addIssue({code:`custom`,message:`${t} must not contain executable, signing, private-key, mnemonic, route-selected, or encoded secret-like material`})})}function Xv(e,t){return Yv(e,t,{allowRawSecretLikeText:!0})}function Zv(e){return(e.match(Wv)??[]).some(e=>{try{return Rv(e.toLowerCase()),!0}catch{return e.toLowerCase().startsWith(`suiprivkey1`)}})}function Qv(e){let t=e.normalize(`NFKD`).toLowerCase().replace(/[^a-z]+/g,` `).trim().split(/\s+/).filter(Boolean);for(let e of Jv)if(!(t.length<e)){for(let n=0;n<=t.length-e;n+=1)if(uv(t.slice(n,n+e).join(` `),dv))return!0}return!1}function $v(e){return Gv.test(e)||Kv.test(e)}var ey=Yv(80,`amountDisplay`).refine(e=>qv.test(e)&&/[1-9]/.test(e),{message:`Expected a positive decimal display amount`}),ty=B({kind:W([`mcp_server`,`ai_client`,`user`,`other`]),name:Yv(120,`source.name`),reference:Yv(256,`source.reference`).optional()}).strict(),ny=B({address:h_.optional(),label:Yv(120,`party.label`).optional()}).strict().refine(e=>e.address!==void 0||e.label!==void 0,{message:`Expected address or label`}),ry=B({amountDisplay:ey,amountKind:G(`display_proposal`).default(`display_proposal`),symbol:Yv(64,`amount.symbol`).optional(),coinType:Xv(512,`amount.coinType`).optional(),denomination:Yv(64,`amount.denomination`).optional()}).strict(),iy=B({packageId:Xv(128,`action.target.packageId`).optional(),module:Yv(128,`action.target.module`).optional(),function:Yv(128,`action.target.function`).optional(),objectId:Xv(128,`action.target.objectId`).optional(),label:Yv(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`}),ay=B({direction:W([`outgoing`,`expected_incoming`,`fee`]),amount:ry,recipient:ny.optional(),description:Yv(512,`assetFlow.description`).optional()}).strict(),oy=B({id:Yv(120,`proposal.id`),source:ty,network:G(`sui:mainnet`),createdAt:Vv,expiresAt:Vv.optional(),purpose:Yv(512,`purpose`),assumptions:z(Yv(512,`assumptions[]`)).max(20).optional(),requiredUserChoices:z(Yv(512,`requiredUserChoices[]`)).max(20).optional()}).strict(),sy=hc(`type`,[oy.extend({type:G(`payment`),payment:B({amount:ry,recipient:ny,target:Yv(512,`payment.target`).optional()}).strict()}).strict(),oy.extend({type:G(`sui_action`),action:B({actionKind:Yv(120,`action.actionKind`),target:iy,recipient:ny.optional(),assetFlow:z(ay).max(20).optional()}).strict()}).strict()]),cy=B({id:F(),label:F(),status:W([`pass`,`warning`,`fail`]),message:F(),source:W([`proposal`,`adapter`,`registry`,`quote`,`wallet`,`simulation`,`network`])}).strict(),ly=B({id:F(),label:F(),reason:F()}).strict(),uy=B({modelVersion:G(Bv),contractVersion:G(zv),proposalId:F(),proposalType:W([`payment`,`sui_action`]),proposalSource:ty,proposedAction:B({kind:W([`payment`,`sui_action`]),title:F(),purpose:F(),network:G(`sui:mainnet`),recipient:ny.optional(),target:H([F(),iy]).optional()}).strict(),assetFlow:B({outgoing:z(ry),expectedIncoming:z(ry),fees:z(ry)}).strict(),recipients:z(ny),targets:z(H([F(),iy])),evidenceUsed:z(B({id:F(),label:F(),source:W([`external_proposal`,`local_schema`]),summary:F()}).strict()),missingEvidence:z(ly),requiredUserChoices:z(ly),unsupportedClaims:z(B({id:F(),label:F(),reason:F()}).strict()),rejectedExecutableFields:z(B({fieldName:F(),reason:F()}).strict()),freshness:B({proposalCreatedAt:Vv,proposalExpiresAt:Vv.optional(),evaluatedAt:Vv,status:W([`current`,`expired`,`created_in_future`,`expiry_not_provided`]),reason:F()}).strict(),blockingChecks:z(cy),nonSignableReason:B({code:G(`external_proposal_review_only`),message:F(),blockedCapabilities:z(F())}).strict()}).strict();B({requestedIntent:sy,implementationStatus:G(`read_only_review_only`),contractVersion:G(zv)}).strict();var dy=[`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`],fy=[`review_evidence_stale`,`quote_stale`,`quote_unavailable`,`simulation_transient_failure`,`review_update_failed`,`wallet_connection_changed`],py=[`proposed`,`awaiting_wallet`,`wallet_connected`,`ready_for_wallet_review`,`refresh_required`,`blocked`,`expired`],my=[`humanReadableReview`,`simulation`,`transactionReviewData`,`ptbVisualization`,`assetFlowActual`,`beforeAfterBalance`],hy=W([`client.core.simulateTransaction`,`client.transactionExecutionService.simulateTransaction`]),gy=`ptb-visualization-contract-alpha-2026-05-25`,_y=[`proposedAction`,`assetFlow`,`recipients`,`targets`,`evidenceUsed`,`missingEvidence`,`requiredUserChoices`,`unsupportedClaims`,`freshness`,`blockingChecks`],vy=[`effects`,`balanceChanges`,`objectTypes`,`transaction`],yy=[`transaction_bytes`,`serialized_transaction`,`wallet_signature_request`,`private_key_material`,`wallet_authorization`,`signing_data`,`signing_readiness`,`payment_execution_readiness`],by=[`transaction_building_input`,`wallet_authorization`,`signing_data`,`signing_readiness`,`payment_execution_readiness`,`route_recommendation`],xy=m_,Sy=`MIST`,Cy=[`checkedAt`,`expiresAt`],wy=[`checkedAt`,`expiryStatus`],Ty=[`rawAmount`,`asset`,`amountRole`],Ey=[`minOutRaw`,`asset`,`amountRole`],Dy=[`gasBudgetRaw`,`asset`,`amountRole`],Oy=[`gasUsedRaw`,`asset`,`amountRole`],ky=[`checkedAt`,`gasResolutionStatus`,`unresolvedReason`],Ay=[`balanceChanges`,`asset`,`amountRole`],jy=[`coinType`,`decimals`],My=[`quoteEvidenceId`,`minOutRaw`],Ny=[`maxSlippageBps`,`userSelection`],Py=[`maxSlippageBps`,`minOutRaw`],Fy=[`ownerAccount`,`objects`],Iy=[`pinned_sdk_registry`,`verified_mainnet_onchain_metadata`,`wallet_account_read`,`quote_evidence`,`review_time_simulation`,`validated_request_fact`,`user_explicit_choice`],Ly=[`input`,`expected_output`,`minimum_output`,`gas_budget`,`gas_used`,`fee`,`balance_delta`],Ry={input:{kinds:[`validated_request_fact`,`wallet_account_read`,`user_explicit_choice`],fields:Ty},expected_output:{kinds:[`quote_evidence`,`review_time_simulation`],fields:Ty},minimum_output:{kinds:[`quote_evidence`],fields:Ey},gas_budget:{kinds:[`review_time_simulation`],fields:Dy},gas_used:{kinds:[`review_time_simulation`],fields:Oy},fee:{kinds:[`review_time_simulation`],fields:Ty},balance_delta:{kinds:[`review_time_simulation`],fields:Ay}},zy={pinned_sdk_metadata:{kinds:[`pinned_sdk_registry`],fields:jy},verified_mainnet_onchain_metadata:{kinds:[`verified_mainnet_onchain_metadata`],fields:jy}},By={user_explicit:{kinds:[`user_explicit_choice`],fields:Ny},adapter_policy_from_quote_evidence:{kinds:[`quote_evidence`],fields:Py}},Vy={kinds:[`review_time_simulation`],fields:ky},Hy={kinds:[`quote_evidence`],fields:My},Uy={kinds:[`validated_request_fact`],fields:Cy},Wy={kinds:[`validated_request_fact`],fields:wy},Gy={raw_quantity_amount:{byRole:Ry},unit_metadata:{bySource:zy},gas_unresolved_status:Vy,expiry_status:{current:Uy,expired:Uy,not_provided:Wy,not_applicable:Wy},quote_min_out:Hy,slippage_policy:{bySource:By},object_ownership:{kinds:[`wallet_account_read`],fields:Fy},simulation_result:{kinds:[`review_time_simulation`],fields:vy}},Ky={gasBudgetClaimId:{factKind:`raw_quantity_amount`,role:`gas_budget`,assetCoinType:xy,rawUnit:Sy},gasUsedClaimId:{factKind:`raw_quantity_amount`,role:`gas_used`,assetCoinType:xy,rawUnit:Sy},gasObjectOwnershipClaimId:{factKind:`object_ownership`,ownership:`owned_by_account`}},qy=F().refine(e=>{let t=new Date(e);return!Number.isNaN(t.getTime())&&t.toISOString()===e},`Expected ISO 8601 UTC timestamp`),Jy=C_(`unsigned integer`),Yy=F().regex(/^0x[0-9a-fA-F]{1,64}$/,{message:`Expected a Sui object id`}),Xy=F().min(1).max(512).refine(e=>{try{return E_(e)===e}catch{return!1}},`Expected a normalized Sui struct tag coin type`),X=F().min(1).max(120),Zy=B({symbol:F().min(1).max(64).optional(),coinType:Xy}).strict(),Qy=/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,$y=/(?:0x[0-9a-fA-F]{160,}|[A-Za-z0-9+/_=-]{160,})/;function eb(e,t){return F().min(1).max(e).superRefine((e,n)=>{(Qy.test(e)||$y.test(e))&&n.addIssue({code:`custom`,message:`${t} must not contain executable transaction, signing, private-key, mnemonic, or long encoded material`})})}function tb(e,t){let n=new Set(e);return t.filter(e=>!n.has(e))}function nb(e,t,n,r,i){let a=tb(t,n);a.length!==0&&e.addIssue({code:`custom`,path:r,message:`${i} must include ${a.join(`, `)}`})}function rb(e,t,n,r,i){nb(e,t,n,r,i)}function ib(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&&ib(e,r,i)}function ab(e,t,n,r,i){let a=new Set(t),o=new Set(n);if(a.size!==o.size)ib(e,r,i);else for(let t of a)if(!o.has(t)){ib(e,r,i);return}}function ob(e,t,n,r,i){(t.symbol!==n.symbol||t.coinType!==n.coinType)&&ib(e,r,i)}function sb(e,t,n,r,i){try{E_(t.coinType)!==n&&ib(e,r,i)}catch{ib(e,r,i)}}var cb=B({kind:W([`natural_language_intent`,`external_proposal`,`mcp_action_request`,`local_review_request`]),sourceId:F().min(1).max(160),capturedAt:qy,authority:G(`untrusted_until_review_regenerates_and_verifies`),userSelectionSource:W([`user_explicit`,`prior_user_explicit_context`]).optional()}).strict(),lb=B({id:X,kind:W(Iy),network:G(`sui:mainnet`),source:F().min(1).max(240),verifiedAt:qy,fields:z(F().min(1).max(120)).min(1)}).strict(),ub=hc(`factKind`,[B({id:X,factKind:G(`raw_quantity_amount`),sourceEvidenceId:X,role:W(Ly),asset:Zy,rawAmount:Jy}).strict(),B({id:X,factKind:G(`unit_metadata`),sourceEvidenceId:X,source:W([`pinned_sdk_metadata`,`verified_mainnet_onchain_metadata`]),coinType:Xy,decimals:I().int().min(0).max(255)}).strict(),B({id:X,factKind:G(`gas_unresolved_status`),sourceEvidenceId:X,checkedAt:qy,status:G(`unresolved`),reason:F().min(1).max(240)}).strict(),B({id:X,factKind:G(`expiry_status`),sourceEvidenceId:X,checkedAt:qy,status:W([`current`,`expired`,`not_provided`,`not_applicable`]),expiresAt:qy.optional(),reason:F().min(1).max(240).optional()}).strict(),B({id:X,factKind:G(`quote_min_out`),sourceEvidenceId:X,quoteEvidenceId:F().min(1).max(120),minOutRaw:Jy}).strict(),B({id:X,factKind:G(`slippage_policy`),sourceEvidenceId:X,policySource:W([`user_explicit`,`adapter_policy_from_quote_evidence`]),maxSlippageBps:I().int().min(0).max(1e4),minOutRaw:Jy.optional()}).strict(),B({id:X,factKind:G(`object_ownership`),sourceEvidenceId:X,objectId:Yy,ownerAccount:h_,ownership:W([`owned_by_account`,`shared_object`,`immutable_or_package`,`not_owned_by_account`])}).strict(),B({id:X,factKind:G(`simulation_result`),sourceEvidenceId:X,provider:hy,checksEnabled:G(!0),simulatedAt:qy,status:W([`success`,`failed`,`unavailable`]),requiredFields:z(W(vy)).min(vy.length),missingFields:z(W(vy)).default([]),failureReason:F().min(1).max(240).optional()}).strict()]),db=B({id:X,role:W(Ly),asset:Zy,rawAmount:Jy,unit:B({decimals:I().int().min(0).max(255),source:W([`pinned_sdk_metadata`,`verified_mainnet_onchain_metadata`]),sourceField:F().min(1).max(160),unitClaimId:X}).strict(),amountClaimId:X,displayOnly:B({amountDisplay:F().min(1).max(120),reason:G(`presentation_only_not_signing_input`)}).strict().optional()}).strict(),fb=B({objectId:Yy,ownerAccount:h_,ownershipClaimId:X}).strict(),pb=B({source:G(`review_time_simulation`),checkedAt:qy,gasBudgetRaw:Jy.optional(),gasBudgetClaimId:X.optional(),gasUsedRaw:Jy.optional(),gasUsedClaimId:X.optional(),gasObjects:z(fb).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`})}),mb=hc(`status`,[B({checkedAt:qy,status:G(`current`),expiresAt:qy,evidenceClaimId:X}).strict(),B({checkedAt:qy,status:G(`expired`),expiresAt:qy,evidenceClaimId:X}).strict(),B({checkedAt:qy,status:G(`not_provided`),evidenceClaimId:X,reason:F().min(1).max(240),expiresAt:uc().optional()}).strict(),B({checkedAt:qy,status:G(`not_applicable`),evidenceClaimId:X,reason:F().min(1).max(240),expiresAt:uc().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`})}),hb=B({status:W([`required_and_verified`,`not_required_for_action`,`missing`,`stale`]),quoteEvidenceId:F().min(1).max(120).optional(),quoteEvidenceClaimId:X.optional(),maxSlippageBps:I().int().min(0).max(1e4).optional(),minOutRaw:Jy.optional(),policySource:W([`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`})}),gb=B({checkedAt:qy,ownerAccount:h_,objects:z(B({objectId:Yy,role:W([`input_coin`,`gas_coin`,`protocol_object`,`shared_object`,`receiving_object`]),ownership:W([`owned_by_account`,`shared_object`,`immutable_or_package`,`not_owned_by_account`]),evidenceClaimId:X}).strict()).min(1)}).strict(),_b=B({evidenceClaimId:X,transactionDigest:g_,provider:hy,checksEnabled:G(!0),simulatedAt:qy,status:W([`success`,`failed`,`unavailable`]),requiredFields:z(W(vy)).min(vy.length),missingFields:z(W(vy)).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=>vy.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`}),vb=B({fields:z(W(_y)).min(_y.length),transactionDigest:g_,source:G(`review_model_or_adapter_equivalent`),purpose:G(`human_review_before_wallet_authorization`)}).strict().refine(e=>_y.every(t=>e.fields.includes(t)),{message:`Human-readable review fields must include every required review field`}),yb=B({runtimeStatus:G(`emitted_pre_handoff`),mcpAndReviewUiMayExpose:z(W([`human_readable_review`,`ptb_visualization_artifact`,`diagnostics`,`status_checks`])).min(1),prohibited:z(W(yy)).min(1)}).strict().superRefine((e,t)=>{rb(t,e.prohibited,yy,[`prohibited`],`prohibited`)}),bb=B({schemaVersion:G(1),adapterId:F().min(1).max(120),protocol:F().min(1).max(120),actionKind:F().min(1).max(120),network:G(`sui:mainnet`),inputProvenance:cb,sourceReferences:z(lb).min(1),evidenceClaims:z(ub).min(1),rawQuantities:z(db).min(1),gas:pb,expiry:mb,slippageOrMinOut:hb,objectOwnership:gb,simulation:_b,humanReadableReview:vb,outputBoundary:yb,reviewedTransactionDigest:g_}).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(`, `)}`}),nb(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,Gy.raw_quantity_amount.byRole[e.role],[`evidenceClaims`,n,`sourceEvidenceId`],`evidenceClaims[${n}].raw_quantity_amount`),e.factKind===`unit_metadata`&&l(e.sourceEvidenceId,Gy.unit_metadata.bySource[e.source],[`evidenceClaims`,n,`sourceEvidenceId`],`evidenceClaims[${n}].unit_metadata`),e.factKind===`gas_unresolved_status`&&l(e.sourceEvidenceId,Gy.gas_unresolved_status,[`evidenceClaims`,n,`sourceEvidenceId`],`evidenceClaims[${n}].gas_unresolved_status`),e.factKind===`expiry_status`&&(l(e.sourceEvidenceId,Gy.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,Gy.quote_min_out,[`evidenceClaims`,n,`sourceEvidenceId`],`evidenceClaims[${n}].quote_min_out`),e.factKind===`slippage_policy`&&(l(e.sourceEvidenceId,Gy.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,Gy.object_ownership,[`evidenceClaims`,n,`sourceEvidenceId`],`evidenceClaims[${n}].object_ownership`),e.factKind===`simulation_result`&&(l(e.sourceEvidenceId,Gy.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`}),vy.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`),ob(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,Ky.gasBudgetClaimId.role,[`gas`,`gasBudgetClaimId`],`gas.gasBudgetClaimId role`),sb(t,n.asset,Ky.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,Ky.gasUsedClaimId.role,[`gas`,`gasUsedClaimId`],`gas.gasUsedClaimId role`),sb(t,n.asset,Ky.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,Ky.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`),ab(t,e.simulation.requiredFields,f.requiredFields,[`simulation`,`requiredFields`],`simulation.requiredFields`),ab(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`)}),xb=B({contractVersion:G(gy),artifactKind:G(`ptb_visualization`),generatedAt:qy,source:B({adapterId:F().min(1).max(120),planId:F().min(1).max(120).optional(),sourceKind:W([`review_time_generated_transaction_kind`,`review_time_ir`,`renderer_model`]),authority:G(`visualization_only_not_wallet_authorization`),renderer:B({name:F().min(1).max(120),packageName:F().min(1).max(120).optional(),version:F().min(1).max(80).optional()}).strict().optional()}).strict(),mermaid:B({diagramType:G(`flowchart`),text:eb(2e4,`mermaid.text`),namedText:eb(2e4,`mermaid.namedText`)}).strict(),diagnostics:z(B({severity:W([`info`,`warning`,`error`]),code:F().min(1).max(120),message:eb(512,`diagnostics.message`),source:W([`adapter`,`renderer`,`schema`,`simulation`])}).strict()).default([]),unsupportedUse:z(W(by)).min(1),executableMaterial:B({included:G(!1),policy:G(`mcp_and_review_ui_outputs_must_not_include_executable_transaction_material`)}).strict()}).strict().superRefine((e,t)=>{rb(t,e.unsupportedUse,by,[`unsupportedUse`],`unsupportedUse`)}),Sb=U(F(),R()),Cb=W(dy),wb=W(fy);W([`ready_for_wallet_review`,`refresh_required`,`blocked`]);var Tb=W(py);W([`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 Eb=B({id:F(),label:F(),status:W([`pass`,`warning`,`fail`]),message:F(),source:W([`registry`,`quote`,`wallet`,`simulation`,`adapter`,`network`,`proposal`])}),Db=F().min(1),Ob=`human_readable_review`,kb=`review_time_simulation`,Ab=B({stageCatalogId:F().min(1),adapterId:F(),protocol:F(),actionKind:F(),completedStages:z(Db),missingStages:z(Db)}).strict().superRefine((e,t)=>{let n=jb(e.completedStages);n&&t.addIssue({code:`custom`,path:[`completedStages`],message:`completedStages contains duplicate stage '${n}'`});let r=jb(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 jb(e){let t=new Set;for(let n of e){if(t.has(n))return n;t.add(n)}}var Mb=B({symbol:F(),amount:F(),coinType:F().optional(),approx:L().optional()}).strict(),Nb=Mb.extend({amountKind:G(`display_intent`).default(`display_intent`)}),Pb=B({outgoing:z(Nb),expectedIncoming:z(Nb),minimumIncoming:z(Nb).optional(),fees:z(Nb).optional()}),Fb=B({outgoing:z(Mb),expectedIncoming:z(Mb),minimumIncoming:z(Mb).optional(),fees:z(Mb).optional()}),Ib=B({before:z(Mb),after:z(Mb),delta:z(Mb)}),Lb=B({computationCostRaw:x_(`computationCostRaw`),storageCostRaw:x_(`storageCostRaw`),storageRebateRaw:x_(`storageRebateRaw`),nonRefundableStorageFeeRaw:x_(`nonRefundableStorageFeeRaw`)}).strict(),Rb=B({address:h_,coinType:F().min(1).max(512).refine(e=>{try{return E_(e)===e}catch{return!1}},`Expected a normalized Sui struct tag coin type`),amount:T_(`balanceChanges[].amount`)}).strict(),zb=B({objectId:h_,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(),Bb=B({provider:hy,checksEnabled:L(),success:L(),gasCostSummary:Lb.optional(),balanceChanges:z(Rb).optional(),objectChanges:z(zb).optional(),error:F().optional()}),Vb=Bb,Hb=Bb.extend({checksEnabled:G(!0),success:G(!0),gasCostSummary:Lb,balanceChanges:z(Rb),objectChanges:z(zb),error:uc().optional()}).strict(),Ub=B({role:W([`input`,`expected_output`,`minimum_output`,`fee`]),symbol:F(),coinType:F().min(1).max(512).refine(e=>{try{return E_(e),!0}catch{return!1}},`Expected a Sui struct tag coin type`),decimals:I().int().min(0).max(255),rawAmount:x_(`rawAmount`),rawAmountSource:G(`quote_policy_evidence`),displayAmount:F().optional(),displayAmountSource:G(`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`})}),Wb=B({role:W([`connected_account`,`output_recipient`]),address:h_}).strict(),Gb=B({kind:G(`swap_output_asset`),symbol:F(),coinType:F().min(1).max(512).refine(e=>{try{return E_(e),!0}catch{return!1}},`Expected a Sui struct tag coin type`),protocol:F(),poolKey:F(),direction:W([`base_to_quote`,`quote_to_base`])}).strict(),Kb=B({id:F(),label:F(),source:H([W([`registry`,`quote`,`wallet`,`simulation`,`adapter`,`network`,`proposal`]),W([`transaction_material`,`digest_commitment`])]),summary:F()}).strict(),qb=B({id:F(),label:F(),reason:F()}).strict(),Jb=B({proposedAction:B({title:F(),summary:F(),actionKind:F(),adapterId:F(),protocol:F(),network:G(`sui:mainnet`)}).strict(),recipients:z(Wb),evidenceUsed:z(Kb),missingEvidence:z(qb),requiredUserChoices:z(qb),unsupportedClaims:z(qb),freshness:B({status:G(`current`),evaluatedAt:F(),expiresAt:F(),reason:F()}).strict(),blockingChecks:z(Eb)}).strict(),Yb=B({assetFlow:B({outgoing:z(Ub),expectedIncoming:z(Ub),minimumIncoming:z(Ub),fees:z(Ub)}).strict(),targets:z(Gb)}).strict(),Xb=hc(`kind`,[Jb.extend({kind:G(`swap_human_readable_review`)}).merge(Yb)]),Zb=B({id:F(),actionKind:F(),adapterId:F(),protocol:F(),title:F(),summary:F(),assetFlowPreview:Pb,reviewModel:uy.optional(),adapterData:Sb,createdAt:F(),expiresAt:F().optional(),registryVersion:F().optional(),preliminaryChecks:z(Eb).optional()}),Qb=B({planId:F(),reviewSessionId:F(),account:h_,checks:z(Eb),assetFlowActual:Fb.optional(),beforeAfterBalance:Ib.optional(),simulation:Vb.optional(),humanReadableReview:Xb.optional(),transactionReviewData:bb.optional(),ptbVisualization:xb.optional(),adapterLifecycle:Ab.optional(),updatedAt:F()}),$b=hc(`status`,[Qb.extend({status:G(`ready_for_wallet_review`),evidenceValidity:uc().optional(),blockedReason:uc().optional(),refreshReason:uc().optional()}),Qb.extend({status:G(`refresh_required`),evidenceValidity:G(`invalidated`).optional(),refreshReason:wb,blockedReason:uc().optional()}),Qb.extend({status:G(`blocked`),evidenceValidity:G(`invalidated`).optional(),blockedReason:Cb,refreshReason:uc().optional()})]).superRefine((e,t)=>{if(e.evidenceValidity===`invalidated`)for(let n of my)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&&ex(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 ex(e,t){let n=e.adapterLifecycle;n&&(e.humanReadableReview!==void 0&&tx(t,n,Ob,[`humanReadableReview`]),e.simulation!==void 0&&(tx(t,n,kb,[`simulation`]),tx(t,n,Ob,[`simulation`]),nx(t,e.simulation,[`simulation`])),n.missingStages.includes(kb)&&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(Ob)&&e.humanReadableReview!==void 0&&t.addIssue({code:`custom`,path:[`humanReadableReview`],message:`humanReadableReview public evidence cannot be present while human_readable_review is missing`}))}function tx(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 nx(e,t,n){Hb.safeParse(t).success||e.addIssue({code:`custom`,path:n,message:`simulation public evidence requires a successful checks-enabled review-time simulation projection`})}var rx=B({topic:F().min(1),accounts:z(h_).min(1),methods:z(F()),chain:G(R_),expiresAt:F().datetime(),walletName:F().optional()}).strict(),ix=hc(`status`,[B({topic:F().min(1),version:I().int().positive(),status:G(`present`),session:rx}).strict(),B({topic:F().min(1),version:I().int().positive(),status:W([`absent`,`unusable`])}).strict()]),ax=B({runId:z_,sequence:I().int().positive(),observedAt:F().datetime()}).strict();ax.extend({sessions:z(ix)}).strict();var ox=B({kind:G(`wallet_service_recovery`),priorRunId:z_,admittedAt:F().datetime(),updatedAt:F().datetime()}),sx=H([ox.extend({phase:G(`stopping`)}).strict(),ox.extend({phase:G(`starting`),nextRunId:z_}).strict(),ox.extend({outcome:W([`available`,`failed`,`superseded`,`server_restarted`]),nextRunId:z_.optional(),message:F().optional()}).strict()]),cx=`A wallet connection provides account context; it is not a transaction approval or proof of address ownership.`,lx=`Review evidence is not a safety guarantee. Only an explicit card action and wallet approval may authorize this exact transaction.`,ux=K_.extend({pendingAction:G(`disconnect`).optional()});W([`input_required`,`awaiting_approval`,`disconnect_pending`]);var dx=B({action:G(`connect`),walletRunId:z_}).strict(),fx=B({action:G(`disconnect`),walletRunId:z_,connectionId:F().min(1)}).strict(),px=B({action:G(`use_account`),walletRunId:z_,connectionId:F().min(1),account:h_}).strict(),mx=B({action:W([`prepare_review`,`request_signature`]),connectionId:F().min(1),walletRunId:z_,account:h_,reviewRevision:I().int().nonnegative()}).strict(),hx=H([dx,fx,px,mx,B({action:W([`cancel`,`stop_connection`,`stop_waiting`,`read_result`])}).strict()]),gx=H([dx,mx.extend({action:G(`prepare_review`)})]),_x=B({kind:W([`connect`,`review`]),mode:W([`connect`,`review`,`review_manage`]),allowedActions:z(W(X_)),actionRemainingMs:I().int().nonnegative(),nextStateReadAfterMs:I().int().nonnegative().optional(),automaticAction:gx.optional(),observe:L(),walletAvailability:H_,walletObservation:ax.optional(),runtimeRecovery:sx.optional(),connectionConflict:q_.optional(),manageableConnectionIds:z(F().min(1)),connectionReconciliationRequired:G(!0).optional(),usableConnectionId:F().min(1).optional(),assetReadAccount:Y_.optional(),acceptedWalletRunId:z_.optional(),progress:U_,boundary:W([cx,lx]),connections:z(ux),activeAccount:F().optional(),connection:ux.optional(),connectionAction:W([`connect`,`disconnect`]).optional(),review:B({reviewSessionId:F(),plan:Zb,reviewRevision:I().int().nonnegative(),status:Tb,account:F().optional(),preparing:L(),accountRequestPending:G(!0).optional(),error:F().optional(),state:$b.optional()}).strict().optional(),request:L_.optional(),receipt:R().optional(),netGasMist:F().regex(/^-?[0-9]+$/).optional(),observationStopped:L().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 vx(e,t,n=!1){return e.connections.filter(r=>r.connectionId===e.usableConnectionId&&r.accounts.includes(t)&&(!n||r.methods.includes(`sui_signTransaction`)))}var yx=`sui-mcp.local-data`,bx=16777216,Q=F().uuid(),xx=I().int().nonnegative().safe(),Sx=F().regex(/^[a-f0-9]{64}$/),Cx=hc(`status`,[B({status:G(`no_file`)}).strict(),B({status:G(`receiving`)}).strict(),B({status:G(`checking`)}).strict(),B({status:G(`check_required`),message:F().min(1)}).strict(),B({status:G(`can_restore`)}).strict(),B({status:G(`cannot_restore`),reason:W([`invalid_backup`,`file_unavailable`,`wallet_request_unsettled`,`operation_busy`,`input_unavailable`,`check_failed`]),message:F().min(1)}).strict()]);B({fileId:Q,sha256:Sx,totalSize:xx,dataEpoch:xx,userDataRevision:xx,check:Cx}).strict();var wx=hc(`kind`,[B({kind:G(`set_endpoint`),endpoint:W([`grpc`,`graphql`]),value:F().min(1)}).strict(),B({kind:G(`restore_endpoint`),endpoint:W([`grpc`,`graphql`])}).strict(),B({kind:W([`clear_read_address`,`export_local_data`,`download_backup`,`import_local_data`,`reset_local_data`,`restart_wallet_service`])}).strict()]),Tx=W([`acknowledged`,`not_completed`,`unconfirmed`,`unsupported`]),Ex=B({method:G(`ui/download-file`),code:G(-32601)}).strict(),Dx=W([`acknowledged`,`cancelled`,`expired`,`server_restarted`,`data_replaced`,`source_unavailable`,`stored_locally`,`local_save_failed`]),Ox=B({device:F().regex(/^\d+$/),inode:F().regex(/^\d+$/)}).strict(),kx=W([`not_published`,`target_conflict`,`source_unavailable`,`interrupted`]),Ax=B({status:W([`needs_consent`,`saving`,`saved`,`failed`]),attemptId:Q,fileId:Q,sha256:Sx,totalSize:xx,destination:F(),ownerId:F().min(1),currentSaveAttemptId:Q.optional(),attempts:z(B({saveAttemptId:Q,previousSaveAttemptId:Q.optional(),admittedAt:F().datetime(),allowPossibleCopy:L()}).strict()),sourceIdentity:Ox.optional(),savedAt:F().datetime().optional(),failure:kx.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.`})});B({currentAttemptId:Q,attempts:z(B({attemptId:Q,admittedAt:F().datetime(),previousAttemptId:Q.optional(),hostReport:Tx.optional(),failure:Ex.optional()}).strict()).min(1),readyAt:F().datetime().optional(),expiresAt:F().datetime().optional(),endReason:Dx.optional(),localSave:Ax.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 jx=W([`settings_retry_download`,`settings_report_download`,`settings_cancel_download`,`settings_store_backup`]),Mx=hc(`action`,[B({action:G(`settings_download_backup`),operationId:Q,attemptId:Q}).strict(),B({action:G(`settings_retry_download`),operationId:Q,fileId:Q,previousAttemptId:Q,attemptId:Q}).strict(),B({action:G(`settings_report_download`),operationId:Q,fileId:Q,attemptId:Q,status:Tx,failure:Ex.optional()}).strict().refine(e=>e.status===`unsupported`==(e.failure!==void 0),`Only unsupported downloads require the exact method failure.`),B({action:G(`settings_store_backup`),operationId:Q,fileId:Q,attemptId:Q,saveAttemptId:Q,previousSaveAttemptId:Q.optional(),allowPossibleCopy:L()}).strict(),B({action:G(`settings_cancel_download`),operationId:Q,fileId:Q,attemptId:Q}).strict(),B({action:G(`settings_select`),draft:wx}).strict(),B({action:G(`settings_prepare`),operationId:Q}).strict(),B({action:G(`settings_begin_upload`),operationId:Q,name:F().min(1),totalSize:xx.max(bx),sha256:Sx}).strict(),B({action:G(`settings_upload_chunk`),operationId:Q,fileId:Q,offset:xx.max(bx),chunkBase64:F()}).strict(),B({action:G(`settings_seal_upload`),operationId:Q,fileId:Q}).strict(),B({action:G(`settings_confirm`),operationId:Q,preparationId:Q}).strict(),B({action:G(`settings_back`),operationId:Q}).strict(),B({action:G(`settings_cancel`)}).strict()]),Nx=B({outcome:W([`completed`,`failed`,`interrupted`,`superseded`]),recordedAt:F().datetime(),message:F().min(1),details:U(F(),R()).optional(),completionScope:G(`backup_snapshot`).optional()}).strict(),Px=B({storedValue:F(),effectiveValue:F(),source:W([`environment`,`local_db`,`builtin_default`]),pendingStoredValue:F().optional(),appliesAfter:G(`mcp_server_restart`).optional()}).strict(),Fx=B({endpoint:W([`grpc`,`graphql`]),key:W([`suiGrpcUrl`,`suiGraphqlUrl`]),value:F().min(1),status:W([`saved`,`reset`]),storedValue:F(),effectiveValue:F(),source:Px.shape.source}).strict().refine(e=>e.key===(e.endpoint===`grpc`?`suiGrpcUrl`:`suiGraphqlUrl`),`The endpoint kind and preference key must agree.`),Ix=I().int().nonnegative().safe(),Lx=B({accounts:Ix,reviewSessions:Ix,reviewStateSnapshots:Ix,reviewStatusTransitions:Ix,reviewExecutions:Ix,reviewRequests:Ix,outcomeUnknownRequests:Ix,externalActivityScans:Ix,externalActivityTransactions:Ix,localSettings:Ix}).strict(),Rx=B({status:G(`valid`),format:G(yx),network:G(`mainnet`),exportedAt:F().datetime(),currentCounts:Lx,incomingCounts:Lx,willReplace:G(!0),activeAccountChange:W([`unchanged`,`set`,`cleared`]),currentReadAddress:h_.nullable(),incomingReadAddress:h_.nullable(),restartRequiredAfterImport:L()}).strict(),zx=B({kind:G(`settings`),operationId:Q,phase:W([`draft`,`uploading`,`sealed`,`prepared`,`executing`,`stopping`,`starting`,`terminal`]),draft:wx.optional(),preparationId:Q.optional(),preparation:U(F(),R()).optional(),file:B({fileId:Q,displayName:F(),totalSize:xx,receivedSize:xx,sha256:Sx,sealed:L(),cleanup:W([`pending`,`complete`,`failed`])}).strict().optional(),download:B({availability:W([`preparing`,`available`,`ended`]),currentAttemptId:Q,hostReport:Tx.optional(),previousUnconfirmed:L(),endReason:Dx.optional(),expiresAt:F().datetime().optional(),remainingMs:xx.optional(),localSave:B({status:W([`needs_consent`,`saving`,`saved`,`failed`]),currentSaveAttemptId:Q.optional(),failure:kx.optional(),savedAt:F().datetime().optional()}).strict().optional(),allowedFileActions:z(jx)}).strict().optional(),restoreCheck:Cx.optional(),backupLocation:B({directory:F().min(1),filename:F().min(1)}).strict().optional(),result:Nx.optional(),temporaryFileCleanup:W([`pending`,`complete`,`failed`]).optional(),priorRunId:Q.optional(),nextRunId:Q.optional(),supersedesOperationId:Q.optional(),supersededByOperationId:Q.optional(),allowedActions:z(W(Mx.options.map(e=>e.shape.action.value))),observe:L(),facts:B({server:B({name:F(),version:F(),network:G(`mainnet`)}).strict(),localSettings:B({suiGrpcUrl:Px,suiGraphqlUrl:Px}).strict(),readAddress:F().optional(),assetReadAccount:Y_,walletAvailability:H_,connectionReconciliationRequired:G(!0).optional(),observedAt:F().datetime().optional(),counts:Lx}).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`&&!Rx.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=Fx.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.`})}),Bx=65536;function Vx(e){return new TextEncoder().encode(JSON.stringify(e)).length}function Hx(e){let t=Bx-Vx(e);return t>0?3*Math.floor(t/4):0}function Ux(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=bx,t.params.arguments.input.chunkBase64=``,Hx(t)}var Wx={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`},Gx=B({connectionId:F().min(1),pairingUri:F().startsWith(`wc:`),expiresAt:F().datetime()}).strict(),Kx=W([`account`,`receipt`,`chart`,`connect`,`review`,`settings`]),qx=B({cardId:F().min(1),kind:Kx,state:W([`ready`,`running`,`closed`]),revision:I().int().nonnegative(),createdAt:F().datetime(),expiresAt:F().datetime(),input:U(F(),R()),data:R().optional(),reason:W([`completed`,`expired`,`failed`,`server_restarted`,`cancelled`]).optional(),error:F().optional()}).strict().extend({pollAfterMs:I().int().positive(),inputRemainingMs:I().int().nonnegative()}),Jx=B({transactionDigest:F().min(1),pureInputs:z(B({index:I().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:B({mermaid:B({text:F(),namedText:F()}).strict()}).strict().optional()}).strict(),Yx=`sui-mcp/card`,Xx=`sui-mcp/receipt-display`,Zx=`sui-mcp/wallet-display`,Qx=`sui-mcp/settings-file`,$x=`suimcp://cards/`,eS=hc(`kind`,[B({kind:G(`account`),status:G(`input_required`),field:G(`account`),message:F().min(1)}).strict(),B({kind:G(`receipt`),status:G(`input_required`),field:G(`digest`),message:F().min(1)}).strict()]),tS=B({cardId:F().min(1),permission:F().min(1)}).strict();tS.extend({revision:I().int().nonnegative(),input:U(F(),R())}).strict();var nS=Jx.extend({cardId:F().min(1),revision:I().int().nonnegative(),attemptId:F().min(1).optional()}),rS=Gx.extend({cardId:F().min(1),revision:I().int().nonnegative()}),iS=B({attemptId:F().uuid().optional(),cardId:F().min(1),operationId:F().uuid(),fileId:F().uuid(),offset:I().int().nonnegative().safe(),totalSize:I().int().nonnegative().safe(),sha256:F().regex(/^[a-f0-9]{64}$/),chunkBase64:F()}).strict(),aS={account:Wx.uiOpenAccount,receipt:Wx.uiOpenReceipt,chart:Wx.uiOpenChart,read:Wx.uiReadCard,submit:Wx.uiSubmitCard,act:Wx.uiActCard,readSettingsFile:Wx.uiReadSettingsFile};function $(e){return typeof e==`object`&&e&&!Array.isArray(e)?e:void 0}function oS(e){return e.kind!==`import_local_data`}function sS(e,t,n){if(e.kind!==`settings`||t.kind!==`settings`||e.cardId!==t.cardId||t.state!==`ready`)return;let r=zx.safeParse(e.data),i=zx.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(oS(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 cS(e){return Object.keys(e).filter(t=>e[t]!==void 0)}function lS(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)=>lS(e,t[n]));let n=$(e),r=$(t);if(!n||!r)return!1;let i=cS(n);return i.length===cS(r).length&&i.every(e=>Object.hasOwn(r,e)&&lS(n[e],r[e]))}function uS(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&&!lS(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=Xu.safeParse(i);if(!n.success)throw r();o=uS(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 cS(t)){let n=t[e];if(Object.hasOwn(c,e)&&!lS(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 dS(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 fS(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($x.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 pS(e){let t=$(e.structuredContent),n=t?.ok===!0?eS.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:qx.parse(i);a?.kind===`settings`&&zx.parse(a.data);let o=$(e._meta)?.[Xx],s=o===void 0?void 0:nS.parse(o);if(s&&!dS(a,s))throw Error(`Transaction details do not match this saved result.`);let c=$(e._meta)?.[Zx],l=c===void 0?void 0:rS.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 mS(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 Zh({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`,ce,E,le=0,D=0,ue,de,fe,pe,O,me,he,ge,_e=!1;function ve(){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 ye()||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 ye(){let e=hx.safeParse(C?.input);if(!e.success||e.data.action!==`disconnect`&&e.data.action!==`use_account`)return!1;let t=e.data,n=_x.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 be(){if(!C)return;let e=ve();e&&C.disposition!==`observed`&&(e!==`active`||C.disposition===`active`)&&(C.disposition=e),C.disposition===`observed`&&(C.retryRequired=!1)}function xe(){let e=gx.safeParse($(y?.data)?.automaticAction);return C?.retryRequired&&e.success&&C.input.action===e.data.action?e.data:void 0}function Se(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 Ce(e){if(e!==`past`||!C)return;let t=Se(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 we,Te;function Ee(){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`||we===void 0||Date.now()<we)],a=e===`review`&&t?.mode===`review`&&!t.request&&!!g&&y?.state===`ready`,o=a&&ue!==void 0&&Date.now()>=ue,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=me?.pending?.()===!0,re=me?.displayRecovery?.(),le=l&&!c&&!oe&&!ne&&!o&&!!g,de=le&&!w&&!h&&(!m||!(ce&&(v||b||x))),fe=gx.safeParse(t?.automaticAction),pe=p?$(n?.localSave):void 0,O=!!y&&(m?t?.observe===!0||pe?.status===`saving`:y.state===`running`),he=!!_&&te&&!c&&!ce&&s&&(E===`explicit`||S.status!==`read_failed`&&(E===`background`||S.status===`needed`&&S.automatic)),ge=s&&le&&!ae&&!ce&&!E&&!w&&!b&&!ee&&!x&&f&&fe.success&&i.includes(fe.data.action)?fe.data:void 0,_e=$(t?.restoreCheck),ve=p&&le&&y?.state===`ready`&&!w&&!h&&!t?.result&&t?.observe!==!0&&(_e?.status===`cannot_restore`&&[`operation_busy`,`wallet_request_unsettled`].includes(String(_e.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`)),ye;!c&&_&&(S.status===`read_failed`||ae||S.status===`unconfirmed`?ye=`read`:S.status===`needed`?S.automatic||(ye=`read`):oe||re||p&&[`pending`,`failed`].includes(String(t?.temporaryFileCleanup))||pe?.status===`saving`||pe?.status===`needs_consent`&&!i.includes(`settings_store_backup`)||pe?.status===`failed`&&pe.failure===`not_published`&&!n?.endReason&&!i.includes(`settings_store_backup`)||ve?ye=`read`:g?$(t?.progress)?.status===`unavailable`||$(t?.walletAvailability)?.status===`initializing`&&$(t?.walletAvailability)?.stage===`state_sync`?ye=`read`:!x&&xe()?ye=`retry`:v&&!O&&!(x&&i.length>0)&&!(C?.input.action===`prepare_review`&&i.includes(`prepare_review`)&&t?.automaticAction===void 0)&&f&&(ye=`read`):(y?.state!==`closed`||oe)&&(ye=`read`));let be=f?t?.actionRemainingMs:y?.inputRemainingMs;ye===`retry`&&o&&(ye=`read`);let Te=f?t?.nextStateReadAfterMs:p&&we!==void 0?Math.max(0,we-D):void 0,Ee=[(f?i.length>0:y?.state===`ready`)?be:void 0,Te].filter(e=>typeof e==`number`&&Number.isFinite(e)&&e>0),De=!c&&!!g&&s&&!ie&&!ae&&S.status!==`read_failed`,Oe=$(t?.review),ke=a&&!c&&!ae&&!oe&&!v&&!b&&!x&&S.status!==`read_failed`&&(ne||w?.input.action===`prepare_review`||Oe?.preparing===!0||fe.success&&fe.data.action===`prepare_review`||S.status===`needed`&&Oe?.status===`ready_for_wallet_review`);return{current:l,inputEnabled:de,permitted:i,disposition:u,read:he,auto:ge,recover:ye,paused:x,partialDisplayFailure:re,settingsInputBlocked:ve,reviewUpdatePending:ke,reviewCommandDeliveryFailed:v&&C?.input.action===`prepare_review`,reviewHint:o?void 0:ke?ne||Oe?.preparing||w?.input.action===`prepare_review`?`Updating review…`:`Checking status…`:a&&$(Oe?.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 ${Se(C)}: “${C.message}”`:void 0,oe,re?.message],note:[se,Ce(u)].filter(Boolean).join(` `),expiryAt:De&&l&&Ee.length?D+Math.min(...Ee):void 0,poll:De&&(O||S.status===`needed`&&!S.automatic),lifetimeAt:!c&&s&&a?ue:void 0}}function De(e){return e.recover===`retry`?C?.input.action===`connect`?`Retry connection`:`Retry review`:e.recover===`read`?`Check status`:void 0}function Oe(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(ce||e.read)return`Checking status…`;let t=De(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(ke(e)&&me?.selectionHint)return me.selectionHint}return t.guidance?.(y,{confirmed:e.current,readOnly:!g,recoveryNeeded:n,visibleConfirmation:me?.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 ke(e=Ee()){return e.inputEnabled&&y?.state===`ready`&&_e}function Ae(e,t=Ee()){return m&&t.inputEnabled&&(e?t.permitted.includes(e.action):t.permitted.length>0)}function je(e){let t=Ee();return p&&h&&t.current&&!!g&&!w&&!ce&&!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 Me(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&&(ce||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,Oe(e)].filter(Boolean).join(` `),o.hidden=!o.textContent,_e)for(let t of s.querySelectorAll(`input, button, select`))(!m||t.tagName!==`BUTTON`||t.dataset.cardAction!==void 0)&&(t.disabled=m?!Ae(void 0,e):!ke(e));if(m)for(let t of s.querySelectorAll(`[data-card-action]`))t.disabled=!Ae({action:t.dataset.cardAction},e);if(p)for(let t of s.querySelectorAll(`[data-settings-file-action]`))t.disabled=t.dataset.settingsLocalBlocked===`true`||!(h?je({action:t.dataset.cardAction}):Ae({action:t.dataset.cardAction},e));_&&(e.reviewUpdatePending||_.dataset.cardAction===`request_signature`&&e.reviewCommandDeliveryFailed||_.dataset.cardAction===void 0)&&(_.disabled=!0),O&&(O.disabled=!!w||!!ce)}function Ne(e){try{e?.()}catch{oe=`The card display could not be closed cleanly. Its stored information is unchanged.`}}function Pe(e){if(!y||d.signal.aborted)return;if(y.state===`ready`&&S.status!==`confirmed`){if(p&&me?.update)try{me.update(y,{automaticPaused:T===`paused`,settings:Ke,settingsCommandProgress:void 0,onDisplayChange:()=>A()})}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`?sS(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===he||i===ge&&!e)return;ge=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:()=>A(),...p?{settings:Ke,settingsCommandProgress:r}:{}};if(me?.update?.(y,e)){he=i,oe=void 0;return}if(y.state===`ready`&&g){let n=t.controls(y,e=>{We(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=>{We(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),Ne(c?.dispose),oe=`This card could not be displayed. Its stored information is unchanged.`;return}let f=me?.dispose;me=c,_e=l,he=i,oe=void 0,Ne(f)}function Fe(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:gx.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,be(),u){D=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}`;Te!==e&&(Te=e,we=void 0),we=Math.min(we??1/0,D+Math.max(0,t.remainingMs))}else p&&t?.availability===`ended`&&(we=void 0);g&&e===`review`&&o?.mode===`review`&&!o.request&&typeof o.actionRemainingMs==`number`&&Number.isFinite(o.actionRemainingMs)&&o.actionRemainingMs>=0&&(ue=Math.min(ue??1/0,D+o.actionRemainingMs))}return r===`read`&&(S.status!==`needed`||a>S.afterRead)&&(S={status:`confirmed`},ae=void 0),n&&(b=n),x=i,!0}function Ie(){de!==void 0&&clearTimeout(de),fe!==void 0&&clearTimeout(fe),pe!==void 0&&clearTimeout(pe),de=void 0,fe=void 0,pe=void 0,l.hidden=!0}function Le(e){let t=De(e);O?.textContent!==t&&(O?.remove(),O=void 0,t&&(O=$h(t,()=>{if(!(ce||w||d.signal.aborted)){if(Ee().recover===`retry`){let e=xe();e&&Ue(e)}else k()}})));let n=s.querySelector(`.review-primary-action`),r=s.querySelector(`.review-primary-slot`);n&&(n.hidden=!!O&&!!r),O&&(O.disabled=!!ce||!!w,r?(O.classList.add(`review-recovery-action`),r.append(O)):(O.classList.remove(`review-recovery-action`),c.append(O)))}async function k(){let e=me,t=e?.displayRecovery?.(),n=await ze(!0);n?.kind===`accepted`&&y===n.snapshot&&S.status===`confirmed`&&!d.signal.aborted&&document.visibilityState!==`hidden`&&!oe&&e===me&&t&&e?.displayRecovery?.()===t&&(t.retry(),A())}function A(e=!1){if(ie){let e=document.createElement(`p`);e.className=`ui-note`,e.textContent=ie,s.replaceChildren(e)}else Pe(e);let t=Ee();if(Me(t),Ie(),Le(t),d.signal.aborted||S.status===`rejected`)return;t.expiryAt!==void 0&&(fe=setTimeout(()=>{Re(),A()},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)pe=setTimeout(r,Math.min(1e3,t));else{let e=Ee();Me(e),Le(e)}};r()}if(t.poll&&y){let e=D+y.pollAfterMs-Date.now();de=setTimeout(()=>{ze(!1)},e>0?e:y.pollAfterMs)}t.read?(E=void 0,Be()):t.auto&&(de=setTimeout(()=>{let e=Ee().auto;e&&Ge(e,`automatic`)},0))}function Re(){S.status!==`rejected`&&S.status!==`read_failed`&&(S={status:`needed`,afterRead:le,automatic:!0})}function ze(e){return d.signal.aborted||S.status===`rejected`||!_||!te?Promise.resolve(void 0):ce?ce.promise:S.status===`read_failed`&&!e?Promise.resolve(void 0):(E=e?`explicit`:`background`,A(),ce?.promise??Promise.resolve(void 0))}function Be(){let e=++le,t=performance.now(),n={id:e,promise:Promise.resolve().then(async()=>{try{let n,r,i;if(g){let e=pS(await Ve(aS.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=`${$x}${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=qx.parse(JSON.parse(t.text));let i=b??ee;r=i&&dS(n,i)?i:void 0}if(d.signal.aborted||S.status===`rejected`)return{kind:`disposed`,id:e};let a=Fe(n,r,`read`,i,e);return ee=void 0,!a&&S.status===`needed`&&e>S.afterRead&&(S={...S,automatic:!1}),A(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(()=>{ce===n&&(ce=void 0),A()})};ce=n,A()}async function Ve(e,t){return uS(await u.callServerTool({name:e,arguments:t},{signal:d.signal}))}function He(e,t,n){let r=_x.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&&vx(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 Ue(e){if(!y||ce||!Ae(e))return;let t={input:e,basis:y,phase:`confirming`};w=t;let n=await ze(!1);w===t&&(w=void 0,n?.kind===`accepted`&&y===n.snapshot&&S.status===`confirmed`&&!d.signal.aborted&&document.visibilityState!==`hidden`&&He(e,t.basis,n.snapshot)&&Ae(e)?await Ge(e):S.status!==`read_failed`&&S.status!==`rejected`&&!d.signal.aborted&&(se=`The card state changed. Check the current selection before trying again.`),A())}async function We(e){f&&(C?.disposition===`active`||C?.retryRequired||T===`paused`)?await Ue(e):await Ge(e)}function j(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`},be(),[`cancel`,`disconnect`,`stop_connection`,`stop_waiting`,`use_account`].includes(String(e.input.action))&&(T=`paused`),(m||n===`unknown`)&&Re()}async function Ge(e,t=`user`){if(!y||!g||(t===`file`?!je(e):m?!Ae(e):!ke()))return;let n={input:e,basis:y,phase:`sending`};w=n,T=`continue`,(t===`user`||C?.disposition!==`past`)&&(C=void 0),se=void 0,A();try{let t=pS(await Ve(m?aS.act:aS.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&&j(n,t.error,`rejected`),Fe(t.snapshot,t.display,`action`,t.wallet)}catch(e){!d.signal.aborted&&S.status!==`rejected`&&(j(n,e instanceof Error?e.message:`The request could not be confirmed.`,`unknown`),C&&(C.data=$(e)?.data))}finally{w===n&&(w=void 0),A()}}let Ke={uploadChunkLimit(e,t){return g?Ux({jsonrpc:`2.0`,id:2**53-1,method:`tools/call`,params:{name:aS.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 ze(!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?!je(e):!Ae(e))throw Error(`This Settings action is unavailable until its current status has been checked.`);if(await Ge(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,A()},async readFile(e){if(!g||!_||!Ee().current||d.signal.aborted)throw Error(`Backup read permission is unavailable.`);let t=await Ve(aS.readSettingsFile,{...g,...e}),n=iS.parse($(t._meta)?.[Qx]);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||!Ee().current||d.signal.aborted||document.visibilityState===`hidden`||r&&(r.currentAttemptId!==n||r.localSave||r.availability!==`available`||we===void 0||Date.now()>=we))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 qe(){if(te&&re!==void 0&&!ne){ne=!0;try{let t=uS(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?.[Yx];if(r!==void 0){let e=tS.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=pS(t);if(i.inputRequired){if(i.inputRequired.kind!==e||g)throw Error(`The app provided inconsistent card input information.`);ie=i.inputRequired.message,A();return}let a=fS(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&&Fe(s,i.display,`preview`,i.wallet),Re(),A()}catch(e){if(d.signal.aborted)return;ae=e instanceof Error?e.message:`Card data could not be read.`,A()}}}u.ontoolresult=e=>{if(re===void 0)re=e,qe();else try{let t=pS(uS(re)).snapshot??y,n=pS(uS(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.`},A()}},u.onhostcontextchanged=e=>{e.theme&&(document.documentElement.dataset.theme=e.theme)};let Je=()=>{document.visibilityState!==`hidden`&&g&&ne&&S.status!==`read_failed`?ze(!1):A()};document.addEventListener?.(`visibilitychange`,Je),u.onteardown=async()=>{if(d.signal.aborted)return{};d.abort(),w=void 0,document.removeEventListener?.(`visibilitychange`,Je);let e=me?.dispose;return me=void 0,Ne(e),A(),{}},u.connect().then(()=>{d.signal.aborted||(te=!0,document.documentElement.dataset.theme=u.getHostContext()?.theme??`light`,qe())}).catch(()=>{d.signal.aborted||(ae=`Could not connect this card to the app.`,A())})}function hS(e){let t=``;for(let n of e)t+=String.fromCharCode(n);return btoa(t)}function gS(e){let t=atob(e),n=Uint8Array.from(t,e=>e.charCodeAt(0));if(hS(n)!==e)throw Error(`Part of the backup could not be read correctly.`);return n}async function _S(e,t,n,r,i){if(e.size>16777216)throw Error(`This backup exceeds the 16 MiB limit. Choose a smaller backup.`);let a=n();t.setFileTransferActive(!0);try{r()&&i?.({...a,stage:`reading`});let n=new Uint8Array(await e.arrayBuffer()),o=r_(tv(n));if(!r())return;i?.({...a,stage:`receiving`,sha256:o});let s=await t.act({action:`settings_begin_upload`,operationId:a.operationId,name:e.name,totalSize:n.length,sha256:o},!0),c=zx.parse(s.data),l=c.file?.receivedSize??0,u=c.file?.fileId;if(!u||c.operationId!==a.operationId||c.file?.sha256!==o||c.file.totalSize!==n.length)throw Error(`The file being received does not match your selection. Choose the backup file again.`);r()&&i?.({...a,stage:`receiving`,fileId:u,sha256:o});let d=t.uploadChunkLimit(a.operationId,u);for(;r()&&l<n.length;){if(d<1)throw Error(`This app cannot send the backup within its message size limit. Try opening Settings in another supported app.`);let e=Math.min(d,n.length-l),r={action:`settings_upload_chunk`,operationId:a.operationId,fileId:u,offset:l,chunkBase64:hS(n.subarray(l,l+e))};try{s=await t.act(r,!0)}catch(n){let r=n&&typeof n==`object`&&`data`in n?n.data:void 0;if(r?.code!==`settings_payload_too_large`||typeof r.rawChunkLimit!=`number`||!Number.isSafeInteger(r.rawChunkLimit)||r.rawChunkLimit<1||r.rawChunkLimit>=e)throw n;let i=zx.parse((await t.readCurrent()).snapshot.data);if(i.file?.fileId!==u||i.file.receivedSize!==l)throw Error(`The file transfer changed after a message was rejected. Choose the same file again to check how much was received.`);d=r.rawChunkLimit;continue}if(c=zx.parse(s.data),c.operationId!==a.operationId||c.file?.fileId!==u||c.file.sha256!==o||c.file.receivedSize!==l+e)throw Error(`The file transfer could not be confirmed. Choose the same file again to continue.`);l=c.file.receivedSize}r()&&(i?.({...a,stage:`checking`,fileId:u,sha256:o}),await t.act({action:`settings_seal_upload`,operationId:a.operationId,fileId:u},!0))}finally{t.setFileTransferActive(!1)}}async function vS(e,t,n,r){n(`pending`);let i;try{i=new Uint8Array(e.totalSize);let n=0;for(;n<i.length&&r();){let r=await t.readFile({operationId:e.operationId,fileId:e.fileId,offset:n,...e.attemptId?{attemptId:e.attemptId}:{}}),a=gS(r.chunkBase64);if(r.totalSize!==i.length||r.sha256!==e.sha256||!a.length||n+a.length>i.length)throw Error(`Part of the downloaded backup does not match the original file.`);i.set(a,n),n+=a.length}if(!r())return;if(n!==i.length||r_(tv(i))!==e.sha256)throw Error(`The complete downloaded backup could not be checked against the original file.`)}catch{if(e.attemptId&&r())try{await t.readCurrent()}catch{}return r()&&n(`backup_unverified`),`backup_unverified`}if(e.attemptId)try{let n=await t.readCurrent(),i=zx.parse(n.snapshot.data);if(!r()||i.operationId!==e.operationId||i.file?.fileId!==e.fileId||i.file.sha256!==e.sha256||i.file.totalSize!==e.totalSize||i.download?.currentAttemptId!==e.attemptId||i.download.localSave||i.download.availability!==`available`||!i.download.remainingMs)return;if(i.download.remainingMs<=Math.max(0,performance.now()-n.requestStartedAt)){try{await t.readCurrent()}catch{}return}}catch{return r()&&n(`backup_unverified`),`backup_unverified`}try{if(!r())return;let a=await(e.attemptId?t.download(e.displayName,hS(i),e.attemptId):t.download(e.displayName,hS(i))),o=a.unsupported===!0?`unsupported`:a.isError===!0?`not_completed`:`acknowledged`;return r()&&n(o),o}catch{return r()&&n(`unconfirmed`),`unconfirmed`}}var yS={set_endpoint:`Change network address`,restore_endpoint:`Use default network address`,clear_read_address:`Clear default address`,download_backup:`Backup`,export_local_data:`Backup`,import_local_data:`Restore`,reset_local_data:`Reset`,restart_wallet_service:`Connection service restart`},bS={overview:`Settings`,address:`Address for viewing assets`,records:`Local records`,troubleshooting:`Troubleshooting`,advanced:`Advanced settings`},xS={address:`View or clear the address used by default when checking your assets.`,records:`Back up, restore or delete records saved on this computer.`,troubleshooting:`Check or restart the wallet connection service.`,advanced:`Change the Sui network addresses used to retrieve data and send transactions.`},SS=`Local records are saved addresses, reviews, transaction and activity records, and Sui network settings on this computer. They do not include wallet keys, wallet connections or wallet approvals.`,CS=`Fully quit every app using Sui MCP, then reopen them. Closing a window or quitting only one app may leave Sui MCP running.`,wS={available:`Ready`,initializing:`Starting`,recovering:`Restarting`,unavailable:`Unavailable`},TS={environment:`App launch settings`,local_db:`Saved in Sui MCP`,builtin_default:`Built-in default`},ES={connected:`Connected`,awaiting_approval:`Waiting for wallet approval`,rejected:`Rejected`,failed:`Failed`,expired:`Expired`,stopped:`Stopped`,disconnected:`Disconnected`},DS=[[`accounts`,`Saved addresses`],[`reviewSessions`,`Reviews`],[`reviewRequests`,`Transaction requests`],[`outcomeUnknownRequests`,`Transaction requests with unconfirmed results`],[`externalActivityTransactions`,`Activity records`],[`localSettings`,`Saved network settings`]],OS={set_endpoint:`Save network address?`,restore_endpoint:`Use default network address?`,clear_read_address:`Clear the default address for viewing assets?`,download_backup:`Download backup`,export_local_data:`Back up local records?`,import_local_data:`Restore available`,reset_local_data:`Reset local data?`,restart_wallet_service:`Restart connection service?`},kS={set_endpoint:`Save network address`,restore_endpoint:`Use default network address`,clear_read_address:`Clear default address`,download_backup:`Download backup`,export_local_data:`Create backup`,import_local_data:`Restore local records`,reset_local_data:`Reset local data`,restart_wallet_service:`Restart connection service`};function AS(e){return e&&typeof e==`object`&&!Array.isArray(e)?e:{}}function jS(e){return e===`clear_read_address`?`address`:e===`set_endpoint`||e===`restore_endpoint`?`advanced`:e===`restart_wallet_service`?`troubleshooting`:e?`records`:`overview`}function MS(e,t,n){let r=AS(t);e.append(J(`h3`,void 0,n));for(let[t,n]of DS)typeof r[t]==`number`&&e.append(Y(n,String(r[t])))}function NS(e,t,n){let r=zx.parse(e.data),i=e,a=r.draft?{kind:`operation`,operation:r.draft.kind}:{kind:`section`,page:`overview`},o=!1,s=n?.settings,c=n?.onDisplayChange,l,u=!1,d,f=n?.settingsCommandProgress,p,m,h,g,_,v=J(`div`,`settings-card`),y=(e,n,r=`secondary`)=>{let i=$h(e,()=>{!o&&!u&&t?.(n)},r);return i.dataset.cardAction=String(n.action),i},b=(e,t)=>{let n=$h(e,()=>{if(o)return;let e=a.kind===`section`?a.page:jS(a.operation);a=t,C(),(t.kind===`section`&&t.page===`overview`?[...v.querySelectorAll(`.settings-menu-item`)].find(t=>t.dataset.settingsPage===e):v.querySelector(`.settings-back`))?.focus(),c?.()},`secondary`);return n.setAttribute(`aria-label`,e),n.dataset.settingsPage=t.kind===`section`?t.page:jS(t.operation),n},ee=(e,n,i=!1,s=!1)=>{let d=$h(e,()=>{o||u||(!s&&r.draft&&JSON.stringify(r.draft)===JSON.stringify(n)?(a={kind:`operation`,operation:n.kind},C(),c?.()):(l=void 0,t?.({action:`settings_select`,draft:n})))},i?`danger`:`secondary`);return d.dataset.cardAction=`settings_select`,d};function x(e,t,n){let r=J(`div`,`settings-choice`),i=J(`div`,`settings-choice-copy`);return i.append(J(`h3`,void 0,e),J(`p`,`ui-note`,t)),r.append(i,n),r}function te(e){let t=J(`div`,`settings-action-row`);return t.setAttribute(`aria-label`,`Settings operation actions`),t.append(e),t}async function ne(){if(!s||!m||o)return;let e=m;h=void 0,s.setFileTransferActive(!0);try{await s.act({action:`settings_report_download`,...e},!0),m===e&&(m=void 0)}catch{!o&&m===e&&(h={message:`The download response could not be recorded. Check status to record the same response without downloading again.`,retry:()=>{m===e&&ne()}})}finally{o||(s.setFileTransferActive(!!p),C(),c?.())}}function re(){let e=p;if(!s||o||!e||e.phase!==`waiting`||r.download?.availability!==`available`||r.download.localSave||r.download.currentAttemptId!==e.attemptId||!r.file)return;e.phase=`sending`;let t={operationId:r.operationId,...r.file,attemptId:e.attemptId};vS(t,s,t=>{p!==e||o||(d=t,C(),c?.())},()=>!o&&p===e&&document.visibilityState!==`hidden`&&r.download?.currentAttemptId===e.attemptId&&r.download.availability===`available`).then(async e=>{!o&&e&&[`acknowledged`,`not_completed`,`unconfirmed`,`unsupported`].includes(e)&&(m={operationId:t.operationId,fileId:t.fileId,attemptId:t.attemptId,status:e,...e===`unsupported`?{failure:{method:`ui/download-file`,code:-32601}}:{}},await ne())}).finally(()=>{p===e&&(p=void 0,u=!1),o||(s?.setFileTransferActive(!!p),C(),c?.())})}function ie(e){if(!s||!t||o||p||u)return;let n=crypto.randomUUID(),i={attemptId:n,phase:`admitting`},a=e&&r.file&&r.download?{action:`settings_retry_download`,operationId:r.operationId,fileId:r.file.fileId,previousAttemptId:r.download.currentAttemptId,attemptId:n}:{action:`settings_download_backup`,operationId:r.operationId,attemptId:n};p=i,u=!0,d=void 0,m=void 0,h=void 0,C(),c?.(),e&&s.setFileTransferActive(!0),s.act(a,e).then(()=>{o||p!==i||(i.phase=`waiting`,s?.setFileTransferActive(!0),C(),c?.(),re())}).catch(()=>{p===i&&(p=void 0,u=!1),o||(s?.setFileTransferActive(!1),C(),c?.())})}function S(e,t,n,r=!1){let i=$h(e,n,`secondary`);return i.dataset.cardAction=t,t!==`settings_download_backup`&&(i.dataset.settingsFileAction=`true`),r&&(i.dataset.settingsLocalBlocked=`true`),i.disabled=r,i}function ae(e){let n=r.download,i=r.draft?.kind===`download_backup`?r.file:void 0;if(!oe(e)){let r=n?.endReason===`acknowledged`?`Download requested`:n?.endReason===`cancelled`?`Download cancelled`:n?.endReason?`Download ended`:p?n?.availability===`available`?`Downloading backup…`:`Preparing backup…`:n?.hostReport===`not_completed`?`Download not completed`:n?.hostReport===`unconfirmed`?`Download unconfirmed`:`Backup ready`;e.append(J(`h2`,void 0,r)),n?.endReason===`acknowledged`?e.append(J(`p`,`ui-note`,`The app accepted the download request. This does not confirm that the file was saved or where it was saved.`)):n?.endReason===`cancelled`?e.append(J(`p`,`ui-note`,`No further download will be sent from this request. This does not close a save dialog or delete a file already saved by the app.`)):n?.endReason?e.append(J(`p`,`ui-note`,n.endReason===`expired`?`The time to download this backup has ended. Open a new Settings card to download the current records.`:`This backup can no longer be downloaded. Open a new Settings card to try again.`)):n?.hostReport===`not_completed`?e.append(J(`p`,`ui-note`,`The app did not complete the download request. It did not report whether it was cancelled, refused or failed.`)):(n?.hostReport===`unconfirmed`||n?.previousUnconfirmed||!p&&!m&&n?.availability===`available`&&!n.hostReport&&d!==`backup_unverified`)&&e.append(J(`p`,`ui-note`,`The previous download could not be confirmed.`+(t&&n?.allowedFileActions.includes(`settings_retry_download`)?` Retrying may save another copy if the app already handled it.`:``))),d===`backup_unverified`&&e.append(J(`p`,`ui-note`,`The backup could not be read or checked. Nothing was sent to the app for download.`)),i?.sealed&&(e.append(Y(`Suggested file name`,i.displayName),Y(`File size`,`${i.totalSize.toLocaleString(`en-US`)} bytes`)),i.totalSize>16777216&&e.append(J(`p`,`ui-note`,`This backup exceeds the 16 MiB restore limit.`))),t&&s&&n?.allowedFileActions.includes(`settings_retry_download`)&&e.append(S(`Retry download`,`settings_retry_download`,()=>ie(!0),!!p||!!m))}t&&s&&r.file&&n?.allowedFileActions.includes(`settings_cancel_download`)&&e.append(S(`Cancel download`,`settings_cancel_download`,()=>{if(!s||o||!r.file||!r.download)return;p=void 0,u=!1,d=void 0;let e={action:`settings_cancel_download`,operationId:r.operationId,fileId:r.file.fileId,attemptId:r.download.currentAttemptId};s.setFileTransferActive(!0),s.act(e,!0).catch(()=>{}).finally(()=>{o||(s?.setFileTransferActive(!1),C(),c?.())})})),(r.temporaryFileCleanup===`pending`||r.temporaryFileCleanup===`failed`)&&e.append(J(`p`,`ui-error`,`Temporary-file cleanup has not been confirmed. Use Check status to check the same request.`)),!t&&n?.localSave?.status!==`saved`?e.append(J(`p`,`ui-note`,`To download a backup, ask in chat to open a new Settings card.`)):n?.availability===`ended`&&e.append(J(`p`,`ui-note`,`To download the current records again, ask in chat to open a new Settings card.`))}function oe(e){let n=r.download,i=n?.localSave,a=r.file;if(!n||!i||i.status!==`saved`&&i.status!==`saving`&&n.endReason&&n.endReason!==`local_save_failed`)return!1;if(e.append(J(`h2`,void 0,i.status===`saved`?`Backup saved`:i.status===`saving`?`Saving backup…`:i.status===`needs_consent`?`Save a local copy?`:`Backup not saved`)),i.status===`saved`&&r.backupLocation){let t=J(`div`,`settings-backup-location`);t.append(Y(`Folder`,J(`span`,`settings-path`,r.backupLocation.directory)),Y(`File name`,J(`span`,`settings-path`,r.backupLocation.filename))),e.append(J(`p`,`ui-note`,`The backup was saved in the Sui MCP backup folder on this computer.`),t)}else i.status===`saving`?e.append(J(`p`,`ui-note`,`Wait while this backup is saved and checked. Use Check status to check the same request.`)):i.status===`failed`&&e.append(J(`p`,`ui-error`,i.failure===`target_conflict`?`The backup location already contains an item or could not be verified. It has not been replaced.`:i.failure===`not_published`?`The backup could not be saved. You can retry saving the same backup.`:`The backup could not be verified for saving. Open a new Settings card to try again.`));return i.status!==`saved`&&i.status!==`saving`&&n.previousUnconfirmed&&e.append(J(`p`,`ui-note`,`An earlier request may already have saved this backup. Saving a local copy may leave another copy.`)),a&&(i.status!==`saved`&&e.append(Y(`Suggested file name`,a.displayName)),e.append(Y(`File size`,`${a.totalSize.toLocaleString(`en-US`)} bytes`)),a.totalSize>16777216&&e.append(J(`p`,`ui-note`,`This backup exceeds the 16 MiB restore limit.`))),t&&s&&n.allowedFileActions.includes(`settings_store_backup`)&&e.append(S(i.status===`needs_consent`?`Save a local copy`:`Retry save`,`settings_store_backup`,()=>{if(!s||o||u||!r.file||!r.download)return;let e=r.download.localSave,t={action:`settings_store_backup`,operationId:r.operationId,fileId:r.file.fileId,attemptId:r.download.currentAttemptId,saveAttemptId:crypto.randomUUID(),allowPossibleCopy:r.download.previousUnconfirmed,...e?.currentSaveAttemptId?{previousSaveAttemptId:e.currentSaveAttemptId}:{}};u=!0,s.setFileTransferActive(!0),C(),c?.(),s.act(t,!0).catch(()=>{}).finally(()=>{u=!1,o||(s?.setFileTransferActive(!1),C(),c?.())})},u)),!0}function se(e,t,n,i){let a=ag(`Details`);if(r.facts&&a.body.append(Y(`Version`,r.facts.server.version)),a.body.append(Y(`Settings request ID`,og(r.operationId))),i&&i.kind===r.draft?.kind&&r.file&&a.body.append(Y(`File SHA-256`,og(r.file.sha256))),i&&[`export_local_data`,`download_backup`,`import_local_data`,`reset_local_data`].includes(i.kind)&&a.body.append(J(`p`,`ui-note`,`Local backups do not contain wallet keys, wallet connections, wallet approvals, access granted to cards, transaction bytes or signatures.`)),i?.kind===`import_local_data`&&r.preparation?.preview){let e=AS(r.preparation.preview);MS(a.body,e.currentCounts,`Checked local records`),MS(a.body,e.incomingCounts,`Backup records`),a.body.append(Y(`Default address before restoring`,typeof e.currentReadAddress==`string`?og(e.currentReadAddress):`Not selected`),Y(`Default address in this backup`,typeof e.incomingReadAddress==`string`?og(e.incomingReadAddress):`Not selected`))}if(t===`advanced`&&r.facts)for(let[e,t,n]of[[`grpc`,`Sui node`,r.facts.localSettings.suiGrpcUrl],[`graphql`,`Activity data`,r.facts.localSettings.suiGraphqlUrl]])(!i||i.kind!==`set_endpoint`&&i.kind!==`restore_endpoint`||i.endpoint===e)&&(a.body.append(J(`h3`,void 0,t),Y(`Saved network address`,n.storedValue),Y(`Network address in use`,n.effectiveValue),Y(`Set by`,TS[n.source])),n.pendingStoredValue&&a.body.append(Y(`Network address saved for next restart`,n.pendingStoredValue)));if(n){a.body.append(J(`h3`,void 0,`Connection and transaction request records`)),typeof r.preparation?.walletRunId==`string`&&a.body.append(Y(`Service run ID`,og(r.preparation.walletRunId)));for(let e of n.connections)a.body.append(Y(`${e.walletName??`Wallet`} connection ID`,og(e.connectionId)));for(let e of n.requests)a.body.append(Y(`Transaction request ID`,og(e.attempt_id)),Y(`Recorded request status`,e.request_status))}e.append(a.details)}function C(e=!1){let n=v.querySelector(`details`)?.open===!0,m=e?[...v.querySelectorAll(`input`)].filter(e=>e.type!==`file`).map(e=>e.value):void 0,h=ig(),ne=f&&i.state===`ready`&&f.cardId===i.cardId&&f.operationId===r.operationId&&(f.kind===`backup_check_response`?r.draft?.kind===`import_local_data`&&f.fileId===r.file?.fileId:JSON.stringify(f.draft)===JSON.stringify(r.draft))?f:void 0,re=r.result||r.restoreCheck?.status===`can_restore`||r.restoreCheck?.status===`cannot_restore`&&[`invalid_backup`,`file_unavailable`,`input_unavailable`].includes(r.restoreCheck.reason),oe=r.restoreCheck?.status===`checking`||!re&&(ne?.kind===`backup_check_response`||_?.progress?.stage===`checking`),w=[`executing`,`stopping`,`starting`].includes(r.phase)||oe,T=r.draft?.kind===`import_local_data`&&r.restoreCheck?.status===`can_restore`,ce=p?.phase===`admitting`,E=ce?`progress`:r.result?`result`:w?`progress`:a.kind===`section`?`section`:r.phase===`prepared`&&(r.draft?.kind!==`import_local_data`||T)?`confirmation`:`input`,le=a.kind===`section`?a.page:jS(a.operation),D=ce?{kind:`download_backup`}:E===`section`?void 0:r.draft,ue=D?jS(D.kind):le,de=D?.kind===`restart_wallet_service`&&r.preparation?.impact?G_.parse(r.preparation.impact):void 0,fe=E===`result`||E===`progress`?g??2:E===`confirmation`?3:E===`input`?2:ue===`overview`?0:1;h.classList.add(`settings-page`),g!==void 0&&fe!==g&&h.classList.add(fe>g?`settings-page--forward`:`settings-page--back`),g=fe;let pe=J(`nav`,`settings-toolbar`);if(pe.setAttribute(`aria-label`,`Settings navigation`),v.dataset.settingsPage=ue,E===`confirmation`&&D&&t&&r.allowedActions.includes(`settings_back`)){let e=`Back to ${yS[D.kind]}`,n=$h(e,()=>{o||u||(a={kind:`operation`,operation:D.kind},t({action:`settings_back`,operationId:r.operationId}))},`secondary`);n.dataset.cardAction=`settings_back`,n.setAttribute(`aria-label`,e),n.classList.add(`settings-back`),pe.append(n)}else if(E===`input`&&D&&t){let e=b(`Back to ${bS[ue]}`,{kind:`section`,page:ue});e.classList.add(`settings-back`),pe.append(e)}else if(E===`section`&&ue!==`overview`){let e=b(`Back to Settings`,{kind:`section`,page:`overview`});e.classList.add(`settings-back`),pe.append(e)}let O=J(`span`,`settings-location`,[`Settings`,...ue===`overview`?[]:[bS[ue]],...D?[yS[D.kind]]:[],...E===`result`?[`Result`]:E===`progress`?[D?.kind===`download_backup`?`Downloading`:oe?`Checking backup`:`Applying change`]:E===`confirmation`?[`Confirm`]:[]].join(` / `));if(O.setAttribute(`aria-current`,`page`),pe.append(O),h.append(pe),D?.kind===`download_backup`)ae(h);else if(E===`result`&&r.result){h.append(J(`p`,r.result.outcome===`failed`?`ui-error`:`ui-note`,r.result.message));let e=AS(r.result.details);if(typeof e.storedValue==`string`&&(h.append(Y(e.endpoint===`grpc`?`Saved Sui node address (gRPC)`:`Saved activity data address (GraphQL)`,e.storedValue)),typeof e.effectiveValueAtSave==`string`&&h.append(Y(`Network address in use when saved`,e.effectiveValueAtSave)),h.append(J(`p`,`ui-note`,e.effectiveSourceAtSave===`environment`?`When this address was saved, the app launch settings specified the network address in use. If that setting is still present, restarting will keep using it. Remove that launch setting before restarting to use the saved address.`:`The saved address is used after Sui MCP restarts, unless the app launch settings specify another address.`),J(`p`,`ui-note`,CS))),typeof e.path==`string`){if(r.backupLocation){let e=J(`div`,`settings-backup-location`);e.append(Y(`Folder`,J(`span`,`settings-path`,r.backupLocation.directory)),Y(`File name`,J(`span`,`settings-path`,r.backupLocation.filename))),h.append(e)}if(r.file){if(h.append(Y(`File size`,`${r.file.totalSize.toLocaleString(`en-US`)} bytes`)),r.file.totalSize>16777216&&h.append(J(`p`,`ui-note`,`This backup exceeds the 16 MiB restore limit. The entire backup was saved, but this installation cannot restore a file this large.`)),t&&s){let e=$h(`Download this backup`,()=>{!o&&s&&r.file&&!u&&(u=!0,e.disabled=!0,vS({operationId:r.operationId,...r.file},s,e=>{d=e,C(),c?.()},()=>!o).finally(()=>{u=!1,o||(C(),c?.())}))},`secondary`);e.dataset.settingsDownload=`true`,e.disabled=u,h.append(e)}d&&h.append(J(`p`,`ui-note`,{pending:`Checking the backup before downloading…`,backup_unverified:`The backup file could not be read or checked. Nothing was sent to the app for download. Check the folder shown above, or open a new Settings card to create another backup.`,acknowledged:`The app received the download request. This does not confirm that the file was saved or where it was saved.`,not_completed:`The app did not complete the download request. It did not report whether the download was cancelled, refused or failed. The file passed its check before the request.`,unsupported:`This app cannot receive this file. The existing backup remains in the folder shown above.`,unconfirmed:`The download could not be confirmed. You can try Download this backup again; the same file will be checked before it is sent.`}[d]))}}let n=r.temporaryFileCleanup??r.file?.cleanup;(n===`failed`||n===`pending`)&&h.append(J(`p`,`ui-error`,`Temporary-file cleanup has not been confirmed. The result above is unchanged. Use Check status to check again.`)),h.append(J(`p`,`ui-note`,`To make another change, ask in chat to open a new Settings card.`))}else if(E===`progress`){let e=J(`p`,`ui-note`,oe?`Checking backup…`:r.phase===`stopping`?`Stopping the wallet connection service…`:r.phase===`starting`?`Starting the wallet connection service…`:`Finishing this change…`);e.setAttribute(`role`,`status`),h.append(e),r.phase===`starting`&&h.append(J(`p`,`ui-note`,`If the service is not responding, you can request another restart in a new Settings card under Troubleshooting. This card keeps the result of the current restart.`))}else if(E===`confirmation`&&r.draft){if(h.append(J(`h2`,void 0,OS[r.draft.kind])),T&&r.file&&h.append(Y(`Backup file`,r.file.displayName)),r.draft.kind===`set_endpoint`||r.draft.kind===`restore_endpoint`){let e=AS(r.preparation?.endpoint);h.append(Y(`Setting`,r.draft.endpoint===`grpc`?`Sui node (gRPC)`:`Activity data (GraphQL)`)),typeof e.storedValue==`string`&&h.append(Y(`Previously saved network address`,e.storedValue)),typeof e.value==`string`&&h.append(Y(`Network address to save`,e.value)),h.append(J(`p`,`ui-note`,`Sui MCP checks that this address connects to Sui mainnet before saving it. Fully quit and reopen all apps using Sui MCP to use the change. Restarting only the wallet connection service does not apply it.`)),e.source===`environment`&&h.append(J(`p`,`ui-note`,`The app launch settings specify the network address to use. Restarting without removing that launch setting will keep using that address.`))}if(r.draft.kind===`clear_read_address`&&h.append(J(`p`,`ui-note`,`Clear the address used by default when viewing assets. This does not disconnect your wallet or cancel any transaction.`)),[`export_local_data`,`reset_local_data`].includes(r.draft.kind)&&h.append(J(`p`,`ui-note`,SS)),r.draft.kind===`reset_local_data`||r.draft.kind===`import_local_data`){T?h.append(J(`p`,`ui-error`,`Restoring replaces local records and saved network settings, including records with unconfirmed transaction results. You cannot undo this from this card. Other open cards will no longer work; open new cards after restoring.`),J(`p`,`ui-note`,`Wallet keys and approvals are not restored. Transactions on Sui are not cancelled.`)):(h.append(J(`p`,`ui-error`,`This deletes local records and saved settings, including records whose transaction results are still unconfirmed. It does not cancel transactions on Sui. Data cannot be replaced until pending wallet or transaction responses and the initial result-checking period have ended.`)),h.append(J(`p`,`ui-error`,`You cannot undo this from this card. Other open cards will no longer work. You can still read this change's result.`)));let e=AS(r.preparation?.preview);if(r.draft.kind===`import_local_data`){let t=AS(e.currentCounts),n=AS(e.incomingCounts);h.append(J(`h3`,void 0,`Records to replace (now → backup)`));for(let[e,r]of DS)typeof t[e]==`number`&&typeof n[e]==`number`&&(t[e]!==0||n[e]!==0)&&h.append(Y(r,`${t[e]} → ${n[e]}`));typeof t.outcomeUnknownRequests==`number`&&t.outcomeUnknownRequests>0&&h.append(J(`p`,`ui-error`,`The current records with unconfirmed transaction results will be removed.`)),e.activeAccountChange!==`unchanged`&&h.append(Y(`Default address for viewing assets`,e.activeAccountChange===`cleared`?`Will be cleared`:typeof e.incomingReadAddress==`string`?og(e.incomingReadAddress):`Not selected`)),e.restartRequiredAfterImport===!0&&h.append(J(`p`,`ui-note`,`After restoring, fully quit and reopen all apps using Sui MCP. Network addresses specified in the app launch settings still take priority over the restored settings.`)),h.append(J(`p`,`ui-note`,`Restoring a saved address does not reconnect your wallet. It can be used by default for viewing assets only when the same wallet connection is active and approves that address.`))}else MS(h,r.preparation?.counts,`Current local records`)}if(r.draft.kind===`restart_wallet_service`){h.append(J(`p`,`ui-note`,`The wallet connection service restarts while your apps stay open. Pending wallet approvals can no longer send a transaction, and unfinished review checks stop. Transactions already sent to Sui are not cancelled; checks already in progress continue. Restarting does not confirm a failed disconnection or remove the connection from your wallet app.`));let e=de??G_.parse(r.preparation?.impact);h.append(Y(`Wallet connection records`,String(e.connections.length)),J(`p`,`ui-note`,`These are recorded connections, not confirmation that a wallet is connected now. Restarting does not reconnect a disconnected wallet.`));for(let t of e.connections){h.append(Y(`Wallet`,t.walletName??`Wallet`),Y(`Recorded status`,ES[t.status]));for(let e of t.accounts)h.append(Y(`Recorded wallet address`,og(e)));t.disconnectPending&&h.append(J(`p`,`ui-note`,`This wallet's disconnection has not been confirmed.`))}let t=e.requests.filter(e=>e.request_status===`awaiting_signature`).length;h.append(Y(`Wallet approval requests to stop`,String(t)),Y(`Other transaction requests`,String(e.requests.length-t)))}t&&r.allowedActions.includes(`settings_confirm`)?h.append(te(y(kS[r.draft.kind],{action:`settings_confirm`,operationId:r.operationId,preparationId:r.preparationId},[`reset_local_data`,`import_local_data`].includes(r.draft.kind)?`danger`:`primary`))):t&&h.append(J(`p`,`ui-note`,`This change cannot be confirmed right now.`))}else if(D){let e;if(h.append(J(`h2`,void 0,yS[D.kind])),ue===`records`&&h.append(J(`p`,`ui-note`,SS)),D.kind===`import_local_data`){if(r.restoreCheck?.status===`cannot_restore`){let e=J(`p`,`ui-error`,r.restoreCheck.message);e.setAttribute(`role`,`alert`),h.append(J(`h3`,void 0,`Cannot restore`),e)}else r.restoreCheck?.status===`check_required`&&h.append(J(`p`,`ui-note`,r.restoreCheck.message));if(_?.progress&&!oe&&!re){let e=J(`p`,`ui-note`,_.progress.stage===`reading`?`Reading the selected file…`:`Receiving backup…`);e.setAttribute(`role`,`status`),h.append(e)}let n=ng({type:`file`});n.accept=`.json,application/json`,n.dataset.cardAction=`settings_begin_upload`,n.addEventListener(`change`,()=>{let e=n.files?.[0];if(!e||!s||u||o)return;let t={startingRevision:i.revision,progress:void 0};_=t,u=!0,l=void 0,_S(e,s,()=>({operationId:r.operationId,cardId:i.cardId}),()=>!o&&_===t,e=>{o||_!==t||e.operationId!==r.operationId||e.cardId!==i.cardId||(t.progress=e,C(),c?.())}).then(()=>{!o&&_===t&&(l=void 0)}).catch(e=>{!o&&_===t&&(l={cardId:i.cardId,operationId:r.operationId,revision:i.revision,draft:JSON.stringify(r.draft),fileId:r.file?.fileId,message:e instanceof Error?e.message:`The file transfer could not be confirmed. Choose the file again to continue.`})}).finally(()=>{_===t&&(_=void 0),u=!1,o||(C(),c?.())})}),t&&!r.file?.sealed&&h.append(rg(r.file?`Choose the same file to continue`:`Choose a Sui MCP backup (up to 16 MiB)`,n)),r.file&&(h.append(Y(`Selected file`,r.file.displayName),Y(`File received`,`${r.file.receivedSize.toLocaleString(`en-US`)} / ${r.file.totalSize.toLocaleString(`en-US`)} bytes`)),t&&r.allowedActions.includes(`settings_prepare`)&&(e=y(`Check backup again`,{action:`settings_prepare`,operationId:r.operationId},`primary`)),t&&h.append(ee(`Change backup file`,{kind:`import_local_data`},!1,!0)))}else{if(D.kind===`set_endpoint`||D.kind===`restore_endpoint`){let e=D.endpoint===`grpc`?r.facts?.localSettings.suiGrpcUrl:r.facts?.localSettings.suiGraphqlUrl;h.append(Y(`Network setting`,D.endpoint===`grpc`?`Sui node (gRPC)`:`Activity data (GraphQL)`)),e&&h.append(Y(`Current saved address`,e.storedValue)),D.kind===`set_endpoint`?h.append(Y(`Selected network address`,D.value)):h.append(J(`p`,`ui-note`,`Review the built-in default address before confirming this change.`)),e?.source===`environment`&&h.append(J(`p`,`ui-note`,`The app launch settings specify the network address in use. Saving or restoring an address here does not remove that launch setting.`))}else D.kind===`clear_read_address`?h.append(Y(`Default address for viewing assets`,r.facts?.readAddress?og(r.facts.readAddress):`Not selected`),J(`p`,`ui-note`,`Clearing this default does not disconnect your wallet or change wallet approvals.`)):D.kind===`restart_wallet_service`?(r.facts&&h.append(Y(`Wallet connection service`,wS[r.facts.walletAvailability.status])),r.facts?.connectionReconciliationRequired&&h.append(J(`p`,`ui-error`,J_)),r.facts&&r.facts.walletAvailability.status!==`available`&&h.append(J(`p`,`ui-note`,r.facts.walletAvailability.message)),h.append(J(`p`,`ui-note`,`Review the connection and transaction requests affected before confirming a service restart.`))):D.kind===`export_local_data`?h.append(J(`p`,`ui-note`,`Review the local records to save, then create the backup file.`)):D.kind===`reset_local_data`&&h.append(J(`p`,`ui-note`,`Review the records and saved settings to delete before confirming the reset.`));t&&r.allowedActions.includes(`settings_prepare`)&&(e=y(`Continue`,{action:`settings_prepare`,operationId:r.operationId},`primary`))}e&&h.append(te(e))}else{if(h.append(J(`h2`,void 0,le===`overview`?`Choose a section`:bS[le])),le===`overview`){h.append(J(`p`,`ui-note`,`You can use the default Sui mainnet network settings. Custom settings are optional.`)),r.facts?.connectionReconciliationRequired&&h.append(J(`p`,`ui-error`,J_));let e=r.facts?.walletAvailability;e&&e.status!==`available`&&h.append(J(`p`,e.status===`unavailable`?`ui-error`:`ui-note`,e.message),...e.status===`unavailable`?[J(`p`,`ui-note`,`Open Troubleshooting below to check the connection service.`)]:[]);let t=J(`div`,`settings-menu`);t.setAttribute(`aria-label`,`Settings sections`);for(let e of[`address`,`records`,`troubleshooting`,`advanced`]){let n=b(bS[e],{kind:`section`,page:e});n.classList.add(`settings-menu-item`),n.setAttribute(`aria-label`,bS[e]),n.textContent=``,n.append(J(`span`,`settings-menu-title`,bS[e]),J(`span`,`settings-menu-description`,xS[e])),t.append(n)}if(h.append(t),r.draft){let e=J(`div`,`settings-pending`);e.append(J(`p`,`ui-note`,`Unfinished change: ${yS[r.draft.kind]}.`),b(`Resume`,{kind:`operation`,operation:r.draft.kind})),h.append(e)}}else if(le===`address`)h.append(Y(`Default address for viewing assets`,r.facts?.readAddress?og(r.facts.readAddress):`Not selected`)),r.facts?.assetReadAccount.status===`address_required`&&r.facts.readAddress&&h.append(J(`p`,`ui-note`,`This saved address cannot currently be used by default. Provide an address in chat, or open Wallet connection and select an address approved by your connected wallet.`)),h.append(J(`p`,`ui-note`,`The default address is used when you ask to view assets without naming an address. To connect or disconnect your wallet, or select an approved address, ask in chat to open Wallet connection. Clearing the default does not disconnect your wallet.`)),t&&r.facts?.readAddress&&h.append(ee(`Clear default address`,{kind:`clear_read_address`}));else if(le===`records`)h.append(J(`p`,`ui-note`,SS)),t&&h.append(x(`Backup`,`Download the current local records and Sui network settings as one backup file. If this connection cannot provide downloads, the same file is saved in the Sui MCP backup folder on this computer.`,S(`Download backup`,`settings_download_backup`,()=>ie(!1))),x(`Restore`,`Choose a Sui MCP backup. It will be checked automatically before you confirm the restore.`,ee(`Restore local records`,{kind:`import_local_data`})),x(`Reset`,`Review the local records and stored settings to delete. This does not cancel transactions on Sui.`,ee(`Reset local data`,{kind:`reset_local_data`},!0)));else if(le===`troubleshooting`)r.facts&&(h.append(Y(`Wallet connection service`,wS[r.facts.walletAvailability.status])),r.facts.connectionReconciliationRequired&&h.append(J(`p`,`ui-error`,J_)),r.facts.observedAt&&h.append(Y(`Status checked at`,sg(r.facts.observedAt))),r.facts.walletAvailability.status!==`available`&&h.append(J(`p`,`ui-note`,r.facts.walletAvailability.message))),h.append(J(`p`,`ui-note`,`Restart the wallet connection service if a connection request is not responding. Starting up or waiting for you to approve in your wallet does not by itself mean a failure.`)),t&&h.append(ee(`Restart connection service`,{kind:`restart_wallet_service`}));else if(le===`advanced`&&r.facts)for(let e of[`grpc`,`graphql`]){let n=e===`grpc`?r.facts.localSettings.suiGrpcUrl:r.facts.localSettings.suiGraphqlUrl,i=ng({value:r.draft?.kind===`set_endpoint`&&r.draft.endpoint===e?r.draft.value:n.storedValue});i.dataset.cardAction=`settings_select`;let a=J(`div`,`settings-endpoint`);if(a.append(rg(e===`grpc`?`Sui node (gRPC)`:`Activity data (GraphQL)`,i),J(`p`,`ui-note`,e===`grpc`?`Used to retrieve balances, check transactions before wallet approval and send approved transactions.`:`Used to retrieve transaction activity.`)),t){let n=$h(`Select network address`,()=>{!u&&!o&&t({action:`settings_select`,draft:{kind:`set_endpoint`,endpoint:e,value:i.value}})},`secondary`);n.dataset.cardAction=`settings_select`,a.append(eg(n,ee(`Select default network address`,{kind:`restore_endpoint`,endpoint:e})))}n.appliesAfter&&a.append(J(`p`,`ui-note`,`A saved change needs an app restart. `+CS)),n.source===`environment`&&a.append(J(`p`,`ui-note`,`The app launch settings specify the network address to use. Remove that launch setting before restarting to use an address saved here.`)),h.append(a)}le!==`overview`&&r.draft&&le===jS(r.draft.kind)&&h.append(J(`p`,`ui-note`,`Unfinished change: ${yS[r.draft.kind]}.`),b(`Resume`,{kind:`operation`,operation:r.draft.kind})),t&&le===`overview`&&r.allowedActions.includes(`settings_cancel`)&&(r.draft&&h.append(J(`p`,`ui-note`,`Closing Settings discards this unfinished change. Nothing will be applied.`)),h.append(tg(y(`Close Settings`,{action:`settings_cancel`}))))}if(ne?.kind===`preparation_response`&&!r.result&&!w){let e=J(`p`,`ui-note`,`Waiting for a response…`);e.setAttribute(`role`,`status`),h.append(e)}l&&E===`input`&&D?.kind===`import_local_data`&&h.append(J(`p`,`ui-note`,l.message)),se(h,ue,de,D),v.replaceChildren(h),m&&[...v.querySelectorAll(`input`)].filter(e=>e.type!==`file`).forEach((e,t)=>{m[t]!==void 0&&(e.value=m[t])}),n&&(v.querySelector(`details`).open=!0)}return C(),{node:v,update(e,t){let n=zx.parse(e.data);if(n.operationId!==r.operationId)return!1;m&&n.file?.fileId===m.fileId&&n.download?.currentAttemptId===m.attemptId&&n.download.hostReport===m.status&&(m=void 0,h=void 0),m&&(!n.download?.allowedFileActions.includes(`settings_report_download`)||n.file?.fileId!==m.fileId)&&(m=void 0,h=void 0),l&&(n.result||e.revision!==l.revision||e.cardId!==l.cardId||n.operationId!==l.operationId||JSON.stringify(n.draft)!==l.draft||n.file?.fileId!==l.fileId)&&(l=void 0);let o=e===i;if(o&&!f&&!t.settingsCommandProgress)return!0;JSON.stringify(n.draft)!==JSON.stringify(r.draft)&&(a=n.draft?{kind:`operation`,operation:n.draft.kind}:{kind:`section`,page:jS(r.draft?.kind)});let u=_?.progress;return _&&(n.result||n.draft?.kind!==`import_local_data`||u?.stage===`reading`&&e.revision>_.startingRevision||u?.fileId&&n.file?.fileId!==u.fileId||u?.sha256&&n.file&&n.file.sha256!==u.sha256)&&(_=void 0),r=n,i=e,s=t.settings,c=t.onDisplayChange,f=t.settingsCommandProgress,C(o),re(),!0},displayRecovery(){return m?h:void 0},dispose(){o=!0,_=void 0,l=void 0,p=void 0,m=void 0}}}mS(`settings`,{title:`Settings`,controls:(e,t,n,r,i)=>NS(e,t,i),result:(e,t,n,r,i)=>NS(e,n,i)});</script></body></html>
|
|
3591
|
+
`)),fv={0:`ED25519`,1:`Secp256k1`,2:`Secp256r1`,3:`MultiSig`,5:`ZkLogin`,6:`Passkey`},pv=e=>Object.freeze(e());function mv(e){return e instanceof Uint8Array||ArrayBuffer.isView(e)&&e.constructor.name===`Uint8Array`&&`BYTES_PER_ELEMENT`in e&&e.BYTES_PER_ELEMENT===1}function hv(e){if(!mv(e))throw TypeError(`Uint8Array expected`)}function gv(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 _v(e){if(typeof e!=`function`)throw TypeError(`function expected`);return!0}function vv(e,t){if(typeof t!=`string`)throw TypeError(`${e}: string expected`);return!0}function yv(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 bv(e,t){if(!gv(!1,t))throw TypeError(`${e}: array of numbers expected`)}var xv=(()=>{let e=[];for(let t=0;t<40;t++)e.push(2**t);return e})();function Sv(e,t=e.length){let n=Array(t);for(let r=0;r<t;r++)n[r]=e[r];return n}var Cv=(()=>{try{let e=new TextDecoder;return e.decode(Uint8Array.of(65,48,43,127))===`A0+`?e:void 0}catch{return}})(),wv=8192;function Tv(e){let t=e.length;if(Cv!==void 0&&t>=12)return Cv.decode(e);if(t<=wv)return String.fromCharCode.apply(null,e);let n=``;for(let r=0;r<t;r+=wv)n+=String.fromCharCode.apply(null,e.subarray(r,r+wv));return n}function Ev(e){if(yv(e),e<=0||e>8)throw RangeError(`radix2: bits should be in (0..8]`);let t=xv[e]-1;return{encode:n=>{hv(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 Dv(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 Tv(t)},decode:t=>{vv(`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 Ov(e){return _v(e),function(...t){try{return e.apply(null,t)}catch{}}}var kv=Dv(`qpzry9x8gf2tvdw0s3jn54khce6mua7l`),Av=/^[\x21-\x60\x7b-\x7e]+$/;function jv(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 Mv(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 Nv=[996825010,642813549,513874426,1027748829,705979059];function Pv(e){let t=e>>25,n=(e&33554431)<<5;for(let e=0;e<Nv.length;e++)(t>>e&1)==1&&(n^=Nv[e]);return n}function Fv(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=Pv(i)^n>>5}i=Pv(i);for(let t=0;t<r;t++)i=Pv(i)^e.charCodeAt(t)&31;for(let e of t)i=Pv(i)^e;for(let e=0;e<6;e++)i=Pv(i);i^=n;let a=new Uint8Array(6);for(let e=0;e<6;e++)a[e]=i>>>5*(5-e)&31;return kv.encode(a)}function Iv(e){let t=e===`bech32`?1:734539939,n=Ev(5),r=e=>{hv(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=>{bv(`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=Ov(i);function o(e,n,r=90){vv(`bech32.encode prefix`,e),r!==!1&&yv(r,`limit`),mv(n)&&(n=Sv(n)),bv(`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}`);jv(`bech32.encode prefix`,e);let o=e.toLowerCase(),s=Fv(o,n,t);return`${o}1${kv.encode(Mv(n))}${s}`}function s(e,n=90){vv(`bech32.decode input`,e),n!==!1&&yv(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&&!Av.test(e))throw jv(`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=kv.decode(s),l=Sv(c,c.length-6),u=Fv(o,l,t);if(!s.endsWith(u))throw Error(`Invalid checksum in ${e}`);return{prefix:o,words:l}}let c=Ov(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 Lv=pv(()=>Iv(`bech32`));function Rv(e){let{prefix:t,words:n}=Lv.decode(e);if(t!==`suiprivkey`)throw Error(`invalid private key prefix`);let r=new Uint8Array(Lv.fromWords(n)),i=r.slice(1);return{scheme:fv[r[0]],secretKey:i}}var zv=`external-proposal-alpha-2026-05-25`,Bv=`proposal-review-model-alpha-2026-05-25`,Vv=F().refine(e=>{let t=new Date(e);return!Number.isNaN(t.getTime())&&t.toISOString()===e},`Expected ISO 8601 UTC timestamp`),Hv=/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,Uv=/(?:0x[0-9a-fA-F]{160,}|[A-Za-z0-9+/_=-]{160,})/,Wv=/suiprivkey1[023456789acdefghjklmnpqrstuvwxyz]+/gi,Gv=/(^|[^0-9a-fA-F])(?:0x)?[0-9a-fA-F]{64}($|[^0-9a-fA-F])/,Kv=/(^|[^A-Za-z0-9+/_=-])(?:[A-Za-z0-9+/]{43}=|[A-Za-z0-9+/]{44}|[A-Za-z0-9_-]{43,44})($|[^A-Za-z0-9+/_=-])/,qv=/^(?:0|[1-9][0-9]*)(?:\.[0-9]+)?$/,Jv=[12,15,18,21,24];function Yv(e,t,n={}){return F().min(1).max(e).superRefine((e,r)=>{(Hv.test(e)||Uv.test(e)||Zv(e)||Qv(e)||!n.allowRawSecretLikeText&&$v(e))&&r.addIssue({code:`custom`,message:`${t} must not contain executable, signing, private-key, mnemonic, route-selected, or encoded secret-like material`})})}function Xv(e,t){return Yv(e,t,{allowRawSecretLikeText:!0})}function Zv(e){return(e.match(Wv)??[]).some(e=>{try{return Rv(e.toLowerCase()),!0}catch{return e.toLowerCase().startsWith(`suiprivkey1`)}})}function Qv(e){let t=e.normalize(`NFKD`).toLowerCase().replace(/[^a-z]+/g,` `).trim().split(/\s+/).filter(Boolean);for(let e of Jv)if(!(t.length<e)){for(let n=0;n<=t.length-e;n+=1)if(uv(t.slice(n,n+e).join(` `),dv))return!0}return!1}function $v(e){return Gv.test(e)||Kv.test(e)}var ey=Yv(80,`amountDisplay`).refine(e=>qv.test(e)&&/[1-9]/.test(e),{message:`Expected a positive decimal display amount`}),ty=B({kind:W([`mcp_server`,`ai_client`,`user`,`other`]),name:Yv(120,`source.name`),reference:Yv(256,`source.reference`).optional()}).strict(),ny=B({address:h_.optional(),label:Yv(120,`party.label`).optional()}).strict().refine(e=>e.address!==void 0||e.label!==void 0,{message:`Expected address or label`}),ry=B({amountDisplay:ey,amountKind:G(`display_proposal`).default(`display_proposal`),symbol:Yv(64,`amount.symbol`).optional(),coinType:Xv(512,`amount.coinType`).optional(),denomination:Yv(64,`amount.denomination`).optional()}).strict(),iy=B({packageId:Xv(128,`action.target.packageId`).optional(),module:Yv(128,`action.target.module`).optional(),function:Yv(128,`action.target.function`).optional(),objectId:Xv(128,`action.target.objectId`).optional(),label:Yv(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`}),ay=B({direction:W([`outgoing`,`expected_incoming`,`fee`]),amount:ry,recipient:ny.optional(),description:Yv(512,`assetFlow.description`).optional()}).strict(),oy=B({id:Yv(120,`proposal.id`),source:ty,network:G(`sui:mainnet`),createdAt:Vv,expiresAt:Vv.optional(),purpose:Yv(512,`purpose`),assumptions:z(Yv(512,`assumptions[]`)).max(20).optional(),requiredUserChoices:z(Yv(512,`requiredUserChoices[]`)).max(20).optional()}).strict(),sy=hc(`type`,[oy.extend({type:G(`payment`),payment:B({amount:ry,recipient:ny,target:Yv(512,`payment.target`).optional()}).strict()}).strict(),oy.extend({type:G(`sui_action`),action:B({actionKind:Yv(120,`action.actionKind`),target:iy,recipient:ny.optional(),assetFlow:z(ay).max(20).optional()}).strict()}).strict()]),cy=B({id:F(),label:F(),status:W([`pass`,`warning`,`fail`]),message:F(),source:W([`proposal`,`adapter`,`registry`,`quote`,`wallet`,`simulation`,`network`])}).strict(),ly=B({id:F(),label:F(),reason:F()}).strict(),uy=B({modelVersion:G(Bv),contractVersion:G(zv),proposalId:F(),proposalType:W([`payment`,`sui_action`]),proposalSource:ty,proposedAction:B({kind:W([`payment`,`sui_action`]),title:F(),purpose:F(),network:G(`sui:mainnet`),recipient:ny.optional(),target:H([F(),iy]).optional()}).strict(),assetFlow:B({outgoing:z(ry),expectedIncoming:z(ry),fees:z(ry)}).strict(),recipients:z(ny),targets:z(H([F(),iy])),evidenceUsed:z(B({id:F(),label:F(),source:W([`external_proposal`,`local_schema`]),summary:F()}).strict()),missingEvidence:z(ly),requiredUserChoices:z(ly),unsupportedClaims:z(B({id:F(),label:F(),reason:F()}).strict()),rejectedExecutableFields:z(B({fieldName:F(),reason:F()}).strict()),freshness:B({proposalCreatedAt:Vv,proposalExpiresAt:Vv.optional(),evaluatedAt:Vv,status:W([`current`,`expired`,`created_in_future`,`expiry_not_provided`]),reason:F()}).strict(),blockingChecks:z(cy),nonSignableReason:B({code:G(`external_proposal_review_only`),message:F(),blockedCapabilities:z(F())}).strict()}).strict();B({requestedIntent:sy,implementationStatus:G(`read_only_review_only`),contractVersion:G(zv)}).strict();var dy=[`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`],fy=[`review_evidence_stale`,`quote_stale`,`quote_unavailable`,`simulation_transient_failure`,`review_update_failed`,`wallet_connection_changed`],py=[`proposed`,`awaiting_wallet`,`wallet_connected`,`ready_for_wallet_review`,`refresh_required`,`blocked`,`expired`],my=[`humanReadableReview`,`simulation`,`transactionReviewData`,`ptbVisualization`,`assetFlowActual`,`beforeAfterBalance`],hy=W([`client.core.simulateTransaction`,`client.transactionExecutionService.simulateTransaction`]),gy=`ptb-visualization-contract-alpha-2026-05-25`,_y=[`proposedAction`,`assetFlow`,`recipients`,`targets`,`evidenceUsed`,`missingEvidence`,`requiredUserChoices`,`unsupportedClaims`,`freshness`,`blockingChecks`],vy=[`effects`,`balanceChanges`,`objectTypes`,`transaction`],yy=[`transaction_bytes`,`serialized_transaction`,`wallet_signature_request`,`private_key_material`,`wallet_authorization`,`signing_data`,`signing_readiness`,`payment_execution_readiness`],by=[`transaction_building_input`,`wallet_authorization`,`signing_data`,`signing_readiness`,`payment_execution_readiness`,`route_recommendation`],xy=m_,Sy=`MIST`,Cy=[`checkedAt`,`expiresAt`],wy=[`checkedAt`,`expiryStatus`],Ty=[`rawAmount`,`asset`,`amountRole`],Ey=[`minOutRaw`,`asset`,`amountRole`],Dy=[`gasBudgetRaw`,`asset`,`amountRole`],Oy=[`gasUsedRaw`,`asset`,`amountRole`],ky=[`checkedAt`,`gasResolutionStatus`,`unresolvedReason`],Ay=[`balanceChanges`,`asset`,`amountRole`],jy=[`coinType`,`decimals`],My=[`quoteEvidenceId`,`minOutRaw`],Ny=[`maxSlippageBps`,`userSelection`],Py=[`maxSlippageBps`,`minOutRaw`],Fy=[`ownerAccount`,`objects`],Iy=[`pinned_sdk_registry`,`verified_mainnet_onchain_metadata`,`wallet_account_read`,`quote_evidence`,`review_time_simulation`,`validated_request_fact`,`user_explicit_choice`],Ly=[`input`,`expected_output`,`minimum_output`,`gas_budget`,`gas_used`,`fee`,`balance_delta`],Ry={input:{kinds:[`validated_request_fact`,`wallet_account_read`,`user_explicit_choice`],fields:Ty},expected_output:{kinds:[`quote_evidence`,`review_time_simulation`],fields:Ty},minimum_output:{kinds:[`quote_evidence`],fields:Ey},gas_budget:{kinds:[`review_time_simulation`],fields:Dy},gas_used:{kinds:[`review_time_simulation`],fields:Oy},fee:{kinds:[`review_time_simulation`],fields:Ty},balance_delta:{kinds:[`review_time_simulation`],fields:Ay}},zy={pinned_sdk_metadata:{kinds:[`pinned_sdk_registry`],fields:jy},verified_mainnet_onchain_metadata:{kinds:[`verified_mainnet_onchain_metadata`],fields:jy}},By={user_explicit:{kinds:[`user_explicit_choice`],fields:Ny},adapter_policy_from_quote_evidence:{kinds:[`quote_evidence`],fields:Py}},Vy={kinds:[`review_time_simulation`],fields:ky},Hy={kinds:[`quote_evidence`],fields:My},Uy={kinds:[`validated_request_fact`],fields:Cy},Wy={kinds:[`validated_request_fact`],fields:wy},Gy={raw_quantity_amount:{byRole:Ry},unit_metadata:{bySource:zy},gas_unresolved_status:Vy,expiry_status:{current:Uy,expired:Uy,not_provided:Wy,not_applicable:Wy},quote_min_out:Hy,slippage_policy:{bySource:By},object_ownership:{kinds:[`wallet_account_read`],fields:Fy},simulation_result:{kinds:[`review_time_simulation`],fields:vy}},Ky={gasBudgetClaimId:{factKind:`raw_quantity_amount`,role:`gas_budget`,assetCoinType:xy,rawUnit:Sy},gasUsedClaimId:{factKind:`raw_quantity_amount`,role:`gas_used`,assetCoinType:xy,rawUnit:Sy},gasObjectOwnershipClaimId:{factKind:`object_ownership`,ownership:`owned_by_account`}},qy=F().refine(e=>{let t=new Date(e);return!Number.isNaN(t.getTime())&&t.toISOString()===e},`Expected ISO 8601 UTC timestamp`),Jy=C_(`unsigned integer`),Yy=F().regex(/^0x[0-9a-fA-F]{1,64}$/,{message:`Expected a Sui object id`}),Xy=F().min(1).max(512).refine(e=>{try{return E_(e)===e}catch{return!1}},`Expected a normalized Sui struct tag coin type`),X=F().min(1).max(120),Zy=B({symbol:F().min(1).max(64).optional(),coinType:Xy}).strict(),Qy=/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,$y=/(?:0x[0-9a-fA-F]{160,}|[A-Za-z0-9+/_=-]{160,})/;function eb(e,t){return F().min(1).max(e).superRefine((e,n)=>{(Qy.test(e)||$y.test(e))&&n.addIssue({code:`custom`,message:`${t} must not contain executable transaction, signing, private-key, mnemonic, or long encoded material`})})}function tb(e,t){let n=new Set(e);return t.filter(e=>!n.has(e))}function nb(e,t,n,r,i){let a=tb(t,n);a.length!==0&&e.addIssue({code:`custom`,path:r,message:`${i} must include ${a.join(`, `)}`})}function rb(e,t,n,r,i){nb(e,t,n,r,i)}function ib(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&&ib(e,r,i)}function ab(e,t,n,r,i){let a=new Set(t),o=new Set(n);if(a.size!==o.size)ib(e,r,i);else for(let t of a)if(!o.has(t)){ib(e,r,i);return}}function ob(e,t,n,r,i){(t.symbol!==n.symbol||t.coinType!==n.coinType)&&ib(e,r,i)}function sb(e,t,n,r,i){try{E_(t.coinType)!==n&&ib(e,r,i)}catch{ib(e,r,i)}}var cb=B({kind:W([`natural_language_intent`,`external_proposal`,`mcp_action_request`,`local_review_request`]),sourceId:F().min(1).max(160),capturedAt:qy,authority:G(`untrusted_until_review_regenerates_and_verifies`),userSelectionSource:W([`user_explicit`,`prior_user_explicit_context`]).optional()}).strict(),lb=B({id:X,kind:W(Iy),network:G(`sui:mainnet`),source:F().min(1).max(240),verifiedAt:qy,fields:z(F().min(1).max(120)).min(1)}).strict(),ub=hc(`factKind`,[B({id:X,factKind:G(`raw_quantity_amount`),sourceEvidenceId:X,role:W(Ly),asset:Zy,rawAmount:Jy}).strict(),B({id:X,factKind:G(`unit_metadata`),sourceEvidenceId:X,source:W([`pinned_sdk_metadata`,`verified_mainnet_onchain_metadata`]),coinType:Xy,decimals:I().int().min(0).max(255)}).strict(),B({id:X,factKind:G(`gas_unresolved_status`),sourceEvidenceId:X,checkedAt:qy,status:G(`unresolved`),reason:F().min(1).max(240)}).strict(),B({id:X,factKind:G(`expiry_status`),sourceEvidenceId:X,checkedAt:qy,status:W([`current`,`expired`,`not_provided`,`not_applicable`]),expiresAt:qy.optional(),reason:F().min(1).max(240).optional()}).strict(),B({id:X,factKind:G(`quote_min_out`),sourceEvidenceId:X,quoteEvidenceId:F().min(1).max(120),minOutRaw:Jy}).strict(),B({id:X,factKind:G(`slippage_policy`),sourceEvidenceId:X,policySource:W([`user_explicit`,`adapter_policy_from_quote_evidence`]),maxSlippageBps:I().int().min(0).max(1e4),minOutRaw:Jy.optional()}).strict(),B({id:X,factKind:G(`object_ownership`),sourceEvidenceId:X,objectId:Yy,ownerAccount:h_,ownership:W([`owned_by_account`,`shared_object`,`immutable_or_package`,`not_owned_by_account`])}).strict(),B({id:X,factKind:G(`simulation_result`),sourceEvidenceId:X,provider:hy,checksEnabled:G(!0),simulatedAt:qy,status:W([`success`,`failed`,`unavailable`]),requiredFields:z(W(vy)).min(vy.length),missingFields:z(W(vy)).default([]),failureReason:F().min(1).max(240).optional()}).strict()]),db=B({id:X,role:W(Ly),asset:Zy,rawAmount:Jy,unit:B({decimals:I().int().min(0).max(255),source:W([`pinned_sdk_metadata`,`verified_mainnet_onchain_metadata`]),sourceField:F().min(1).max(160),unitClaimId:X}).strict(),amountClaimId:X,displayOnly:B({amountDisplay:F().min(1).max(120),reason:G(`presentation_only_not_signing_input`)}).strict().optional()}).strict(),fb=B({objectId:Yy,ownerAccount:h_,ownershipClaimId:X}).strict(),pb=B({source:G(`review_time_simulation`),checkedAt:qy,gasBudgetRaw:Jy.optional(),gasBudgetClaimId:X.optional(),gasUsedRaw:Jy.optional(),gasUsedClaimId:X.optional(),gasObjects:z(fb).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`})}),mb=hc(`status`,[B({checkedAt:qy,status:G(`current`),expiresAt:qy,evidenceClaimId:X}).strict(),B({checkedAt:qy,status:G(`expired`),expiresAt:qy,evidenceClaimId:X}).strict(),B({checkedAt:qy,status:G(`not_provided`),evidenceClaimId:X,reason:F().min(1).max(240),expiresAt:uc().optional()}).strict(),B({checkedAt:qy,status:G(`not_applicable`),evidenceClaimId:X,reason:F().min(1).max(240),expiresAt:uc().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`})}),hb=B({status:W([`required_and_verified`,`not_required_for_action`,`missing`,`stale`]),quoteEvidenceId:F().min(1).max(120).optional(),quoteEvidenceClaimId:X.optional(),maxSlippageBps:I().int().min(0).max(1e4).optional(),minOutRaw:Jy.optional(),policySource:W([`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`})}),gb=B({checkedAt:qy,ownerAccount:h_,objects:z(B({objectId:Yy,role:W([`input_coin`,`gas_coin`,`protocol_object`,`shared_object`,`receiving_object`]),ownership:W([`owned_by_account`,`shared_object`,`immutable_or_package`,`not_owned_by_account`]),evidenceClaimId:X}).strict()).min(1)}).strict(),_b=B({evidenceClaimId:X,transactionDigest:g_,provider:hy,checksEnabled:G(!0),simulatedAt:qy,status:W([`success`,`failed`,`unavailable`]),requiredFields:z(W(vy)).min(vy.length),missingFields:z(W(vy)).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=>vy.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`}),vb=B({fields:z(W(_y)).min(_y.length),transactionDigest:g_,source:G(`review_model_or_adapter_equivalent`),purpose:G(`human_review_before_wallet_authorization`)}).strict().refine(e=>_y.every(t=>e.fields.includes(t)),{message:`Human-readable review fields must include every required review field`}),yb=B({runtimeStatus:G(`emitted_pre_handoff`),mcpAndReviewUiMayExpose:z(W([`human_readable_review`,`ptb_visualization_artifact`,`diagnostics`,`status_checks`])).min(1),prohibited:z(W(yy)).min(1)}).strict().superRefine((e,t)=>{rb(t,e.prohibited,yy,[`prohibited`],`prohibited`)}),bb=B({schemaVersion:G(1),adapterId:F().min(1).max(120),protocol:F().min(1).max(120),actionKind:F().min(1).max(120),network:G(`sui:mainnet`),inputProvenance:cb,sourceReferences:z(lb).min(1),evidenceClaims:z(ub).min(1),rawQuantities:z(db).min(1),gas:pb,expiry:mb,slippageOrMinOut:hb,objectOwnership:gb,simulation:_b,humanReadableReview:vb,outputBoundary:yb,reviewedTransactionDigest:g_}).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(`, `)}`}),nb(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,Gy.raw_quantity_amount.byRole[e.role],[`evidenceClaims`,n,`sourceEvidenceId`],`evidenceClaims[${n}].raw_quantity_amount`),e.factKind===`unit_metadata`&&l(e.sourceEvidenceId,Gy.unit_metadata.bySource[e.source],[`evidenceClaims`,n,`sourceEvidenceId`],`evidenceClaims[${n}].unit_metadata`),e.factKind===`gas_unresolved_status`&&l(e.sourceEvidenceId,Gy.gas_unresolved_status,[`evidenceClaims`,n,`sourceEvidenceId`],`evidenceClaims[${n}].gas_unresolved_status`),e.factKind===`expiry_status`&&(l(e.sourceEvidenceId,Gy.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,Gy.quote_min_out,[`evidenceClaims`,n,`sourceEvidenceId`],`evidenceClaims[${n}].quote_min_out`),e.factKind===`slippage_policy`&&(l(e.sourceEvidenceId,Gy.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,Gy.object_ownership,[`evidenceClaims`,n,`sourceEvidenceId`],`evidenceClaims[${n}].object_ownership`),e.factKind===`simulation_result`&&(l(e.sourceEvidenceId,Gy.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`}),vy.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`),ob(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,Ky.gasBudgetClaimId.role,[`gas`,`gasBudgetClaimId`],`gas.gasBudgetClaimId role`),sb(t,n.asset,Ky.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,Ky.gasUsedClaimId.role,[`gas`,`gasUsedClaimId`],`gas.gasUsedClaimId role`),sb(t,n.asset,Ky.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,Ky.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`),ab(t,e.simulation.requiredFields,f.requiredFields,[`simulation`,`requiredFields`],`simulation.requiredFields`),ab(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`)}),xb=B({contractVersion:G(gy),artifactKind:G(`ptb_visualization`),generatedAt:qy,source:B({adapterId:F().min(1).max(120),planId:F().min(1).max(120).optional(),sourceKind:W([`review_time_generated_transaction_kind`,`review_time_ir`,`renderer_model`]),authority:G(`visualization_only_not_wallet_authorization`),renderer:B({name:F().min(1).max(120),packageName:F().min(1).max(120).optional(),version:F().min(1).max(80).optional()}).strict().optional()}).strict(),mermaid:B({diagramType:G(`flowchart`),text:eb(2e4,`mermaid.text`),namedText:eb(2e4,`mermaid.namedText`)}).strict(),diagnostics:z(B({severity:W([`info`,`warning`,`error`]),code:F().min(1).max(120),message:eb(512,`diagnostics.message`),source:W([`adapter`,`renderer`,`schema`,`simulation`])}).strict()).default([]),unsupportedUse:z(W(by)).min(1),executableMaterial:B({included:G(!1),policy:G(`mcp_and_review_ui_outputs_must_not_include_executable_transaction_material`)}).strict()}).strict().superRefine((e,t)=>{rb(t,e.unsupportedUse,by,[`unsupportedUse`],`unsupportedUse`)}),Sb=U(F(),R()),Cb=W(dy),wb=W(fy);W([`ready_for_wallet_review`,`refresh_required`,`blocked`]);var Tb=W(py);W([`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 Eb=B({id:F(),label:F(),status:W([`pass`,`warning`,`fail`]),message:F(),source:W([`registry`,`quote`,`wallet`,`simulation`,`adapter`,`network`,`proposal`])}),Db=F().min(1),Ob=`human_readable_review`,kb=`review_time_simulation`,Ab=B({stageCatalogId:F().min(1),adapterId:F(),protocol:F(),actionKind:F(),completedStages:z(Db),missingStages:z(Db)}).strict().superRefine((e,t)=>{let n=jb(e.completedStages);n&&t.addIssue({code:`custom`,path:[`completedStages`],message:`completedStages contains duplicate stage '${n}'`});let r=jb(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 jb(e){let t=new Set;for(let n of e){if(t.has(n))return n;t.add(n)}}var Mb=B({symbol:F(),amount:F(),coinType:F().optional(),approx:L().optional()}).strict(),Nb=Mb.extend({amountKind:G(`display_intent`).default(`display_intent`)}),Pb=B({outgoing:z(Nb),expectedIncoming:z(Nb),minimumIncoming:z(Nb).optional(),fees:z(Nb).optional()}),Fb=B({outgoing:z(Mb),expectedIncoming:z(Mb),minimumIncoming:z(Mb).optional(),fees:z(Mb).optional()}),Ib=B({before:z(Mb),after:z(Mb),delta:z(Mb)}),Lb=B({computationCostRaw:x_(`computationCostRaw`),storageCostRaw:x_(`storageCostRaw`),storageRebateRaw:x_(`storageRebateRaw`),nonRefundableStorageFeeRaw:x_(`nonRefundableStorageFeeRaw`)}).strict(),Rb=B({address:h_,coinType:F().min(1).max(512).refine(e=>{try{return E_(e)===e}catch{return!1}},`Expected a normalized Sui struct tag coin type`),amount:T_(`balanceChanges[].amount`)}).strict(),zb=B({objectId:h_,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(),Bb=B({provider:hy,checksEnabled:L(),success:L(),gasCostSummary:Lb.optional(),balanceChanges:z(Rb).optional(),objectChanges:z(zb).optional(),error:F().optional()}),Vb=Bb,Hb=Bb.extend({checksEnabled:G(!0),success:G(!0),gasCostSummary:Lb,balanceChanges:z(Rb),objectChanges:z(zb),error:uc().optional()}).strict(),Ub=B({role:W([`input`,`expected_output`,`minimum_output`,`fee`]),symbol:F(),coinType:F().min(1).max(512).refine(e=>{try{return E_(e),!0}catch{return!1}},`Expected a Sui struct tag coin type`),decimals:I().int().min(0).max(255),rawAmount:x_(`rawAmount`),rawAmountSource:G(`quote_policy_evidence`),displayAmount:F().optional(),displayAmountSource:G(`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`})}),Wb=B({role:W([`connected_account`,`output_recipient`]),address:h_}).strict(),Gb=B({kind:G(`swap_output_asset`),symbol:F(),coinType:F().min(1).max(512).refine(e=>{try{return E_(e),!0}catch{return!1}},`Expected a Sui struct tag coin type`),protocol:F(),poolKey:F(),direction:W([`base_to_quote`,`quote_to_base`])}).strict(),Kb=B({id:F(),label:F(),source:H([W([`registry`,`quote`,`wallet`,`simulation`,`adapter`,`network`,`proposal`]),W([`transaction_material`,`digest_commitment`])]),summary:F()}).strict(),qb=B({id:F(),label:F(),reason:F()}).strict(),Jb=B({proposedAction:B({title:F(),summary:F(),actionKind:F(),adapterId:F(),protocol:F(),network:G(`sui:mainnet`)}).strict(),recipients:z(Wb),evidenceUsed:z(Kb),missingEvidence:z(qb),requiredUserChoices:z(qb),unsupportedClaims:z(qb),freshness:B({status:G(`current`),evaluatedAt:F(),expiresAt:F(),reason:F()}).strict(),blockingChecks:z(Eb)}).strict(),Yb=B({assetFlow:B({outgoing:z(Ub),expectedIncoming:z(Ub),minimumIncoming:z(Ub),fees:z(Ub)}).strict(),targets:z(Gb)}).strict(),Xb=hc(`kind`,[Jb.extend({kind:G(`swap_human_readable_review`)}).merge(Yb)]),Zb=B({id:F(),actionKind:F(),adapterId:F(),protocol:F(),title:F(),summary:F(),assetFlowPreview:Pb,reviewModel:uy.optional(),adapterData:Sb,createdAt:F(),expiresAt:F().optional(),registryVersion:F().optional(),preliminaryChecks:z(Eb).optional()}),Qb=B({planId:F(),reviewSessionId:F(),account:h_,checks:z(Eb),assetFlowActual:Fb.optional(),beforeAfterBalance:Ib.optional(),simulation:Vb.optional(),humanReadableReview:Xb.optional(),transactionReviewData:bb.optional(),ptbVisualization:xb.optional(),adapterLifecycle:Ab.optional(),updatedAt:F()}),$b=hc(`status`,[Qb.extend({status:G(`ready_for_wallet_review`),evidenceValidity:uc().optional(),blockedReason:uc().optional(),refreshReason:uc().optional()}),Qb.extend({status:G(`refresh_required`),evidenceValidity:G(`invalidated`).optional(),refreshReason:wb,blockedReason:uc().optional()}),Qb.extend({status:G(`blocked`),evidenceValidity:G(`invalidated`).optional(),blockedReason:Cb,refreshReason:uc().optional()})]).superRefine((e,t)=>{if(e.evidenceValidity===`invalidated`)for(let n of my)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&&ex(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 ex(e,t){let n=e.adapterLifecycle;n&&(e.humanReadableReview!==void 0&&tx(t,n,Ob,[`humanReadableReview`]),e.simulation!==void 0&&(tx(t,n,kb,[`simulation`]),tx(t,n,Ob,[`simulation`]),nx(t,e.simulation,[`simulation`])),n.missingStages.includes(kb)&&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(Ob)&&e.humanReadableReview!==void 0&&t.addIssue({code:`custom`,path:[`humanReadableReview`],message:`humanReadableReview public evidence cannot be present while human_readable_review is missing`}))}function tx(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 nx(e,t,n){Hb.safeParse(t).success||e.addIssue({code:`custom`,path:n,message:`simulation public evidence requires a successful checks-enabled review-time simulation projection`})}var rx=B({topic:F().min(1),accounts:z(h_).min(1),methods:z(F()),chain:G(R_),expiresAt:F().datetime(),walletName:F().optional()}).strict(),ix=hc(`status`,[B({topic:F().min(1),version:I().int().positive(),status:G(`present`),session:rx}).strict(),B({topic:F().min(1),version:I().int().positive(),status:W([`absent`,`unusable`])}).strict()]),ax=B({runId:z_,sequence:I().int().positive(),observedAt:F().datetime()}).strict();ax.extend({sessions:z(ix)}).strict();var ox=B({kind:G(`wallet_service_recovery`),priorRunId:z_,admittedAt:F().datetime(),updatedAt:F().datetime()}),sx=H([ox.extend({phase:G(`stopping`)}).strict(),ox.extend({phase:G(`starting`),nextRunId:z_}).strict(),ox.extend({outcome:W([`available`,`failed`,`superseded`,`server_restarted`]),nextRunId:z_.optional(),message:F().optional()}).strict()]),cx=`A wallet connection provides account context; it is not a transaction approval or proof of address ownership.`,lx=`Review evidence is not a safety guarantee. Only an explicit card action and wallet approval may authorize this exact transaction.`,ux=K_.extend({pendingAction:G(`disconnect`).optional()});W([`input_required`,`awaiting_approval`,`disconnect_pending`]);var dx=B({action:G(`connect`),walletRunId:z_}).strict(),fx=B({action:G(`disconnect`),walletRunId:z_,connectionId:F().min(1)}).strict(),px=B({action:G(`use_account`),walletRunId:z_,connectionId:F().min(1),account:h_}).strict(),mx=B({action:W([`prepare_review`,`request_signature`]),connectionId:F().min(1),walletRunId:z_,account:h_,reviewRevision:I().int().nonnegative()}).strict(),hx=H([dx,fx,px,mx,B({action:W([`cancel`,`stop_connection`,`stop_waiting`,`read_result`])}).strict()]),gx=H([dx,mx.extend({action:G(`prepare_review`)})]),_x=B({kind:W([`connect`,`review`]),mode:W([`connect`,`review`,`review_manage`]),allowedActions:z(W(X_)),actionRemainingMs:I().int().nonnegative(),nextStateReadAfterMs:I().int().nonnegative().optional(),automaticAction:gx.optional(),observe:L(),walletAvailability:H_,walletObservation:ax.optional(),runtimeRecovery:sx.optional(),connectionConflict:q_.optional(),manageableConnectionIds:z(F().min(1)),connectionReconciliationRequired:G(!0).optional(),usableConnectionId:F().min(1).optional(),assetReadAccount:Y_.optional(),acceptedWalletRunId:z_.optional(),progress:U_,boundary:W([cx,lx]),connections:z(ux),activeAccount:F().optional(),connection:ux.optional(),connectionAction:W([`connect`,`disconnect`]).optional(),review:B({reviewSessionId:F(),plan:Zb,reviewRevision:I().int().nonnegative(),status:Tb,account:F().optional(),preparing:L(),accountRequestPending:G(!0).optional(),error:F().optional(),state:$b.optional()}).strict().optional(),request:L_.optional(),receipt:R().optional(),netGasMist:F().regex(/^-?[0-9]+$/).optional(),observationStopped:L().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 vx(e,t,n=!1){return e.connections.filter(r=>r.connectionId===e.usableConnectionId&&r.accounts.includes(t)&&(!n||r.methods.includes(`sui_signTransaction`)))}var yx=`sui-mcp.local-data`,bx=16777216,Q=F().uuid(),xx=I().int().nonnegative().safe(),Sx=F().regex(/^[a-f0-9]{64}$/),Cx=hc(`status`,[B({status:G(`no_file`)}).strict(),B({status:G(`receiving`)}).strict(),B({status:G(`checking`)}).strict(),B({status:G(`check_required`),message:F().min(1)}).strict(),B({status:G(`can_restore`)}).strict(),B({status:G(`cannot_restore`),reason:W([`invalid_backup`,`file_unavailable`,`wallet_request_unsettled`,`operation_busy`,`input_unavailable`,`check_failed`]),message:F().min(1)}).strict()]);B({fileId:Q,sha256:Sx,totalSize:xx,dataEpoch:xx,userDataRevision:xx,check:Cx}).strict();var wx=hc(`kind`,[B({kind:G(`set_endpoint`),endpoint:W([`grpc`,`graphql`]),value:F().min(1)}).strict(),B({kind:G(`restore_endpoint`),endpoint:W([`grpc`,`graphql`])}).strict(),B({kind:W([`clear_read_address`,`export_local_data`,`download_backup`,`import_local_data`,`reset_local_data`,`restart_wallet_service`])}).strict()]),Tx=W([`acknowledged`,`not_completed`,`unconfirmed`,`unsupported`]),Ex=B({method:G(`ui/download-file`),code:G(-32601)}).strict(),Dx=W([`acknowledged`,`cancelled`,`expired`,`server_restarted`,`data_replaced`,`source_unavailable`,`stored_locally`,`local_save_failed`]),Ox=B({device:F().regex(/^\d+$/),inode:F().regex(/^\d+$/)}).strict(),kx=W([`not_published`,`target_conflict`,`source_unavailable`,`interrupted`]),Ax=B({status:W([`needs_consent`,`saving`,`saved`,`failed`]),attemptId:Q,fileId:Q,sha256:Sx,totalSize:xx,destination:F(),ownerId:F().min(1),currentSaveAttemptId:Q.optional(),attempts:z(B({saveAttemptId:Q,previousSaveAttemptId:Q.optional(),admittedAt:F().datetime(),allowPossibleCopy:L()}).strict()),sourceIdentity:Ox.optional(),savedAt:F().datetime().optional(),failure:kx.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.`})});B({currentAttemptId:Q,attempts:z(B({attemptId:Q,admittedAt:F().datetime(),previousAttemptId:Q.optional(),hostReport:Tx.optional(),failure:Ex.optional()}).strict()).min(1),readyAt:F().datetime().optional(),expiresAt:F().datetime().optional(),endReason:Dx.optional(),localSave:Ax.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 jx=W([`settings_retry_download`,`settings_report_download`,`settings_cancel_download`,`settings_store_backup`]),Mx=hc(`action`,[B({action:G(`settings_download_backup`),operationId:Q,attemptId:Q}).strict(),B({action:G(`settings_retry_download`),operationId:Q,fileId:Q,previousAttemptId:Q,attemptId:Q}).strict(),B({action:G(`settings_report_download`),operationId:Q,fileId:Q,attemptId:Q,status:Tx,failure:Ex.optional()}).strict().refine(e=>e.status===`unsupported`==(e.failure!==void 0),`Only unsupported downloads require the exact method failure.`),B({action:G(`settings_store_backup`),operationId:Q,fileId:Q,attemptId:Q,saveAttemptId:Q,previousSaveAttemptId:Q.optional(),allowPossibleCopy:L()}).strict(),B({action:G(`settings_cancel_download`),operationId:Q,fileId:Q,attemptId:Q}).strict(),B({action:G(`settings_select`),draft:wx}).strict(),B({action:G(`settings_prepare`),operationId:Q}).strict(),B({action:G(`settings_begin_upload`),operationId:Q,name:F().min(1),totalSize:xx.max(bx),sha256:Sx}).strict(),B({action:G(`settings_upload_chunk`),operationId:Q,fileId:Q,offset:xx.max(bx),chunkBase64:F()}).strict(),B({action:G(`settings_seal_upload`),operationId:Q,fileId:Q}).strict(),B({action:G(`settings_confirm`),operationId:Q,preparationId:Q}).strict(),B({action:G(`settings_back`),operationId:Q}).strict(),B({action:G(`settings_cancel`)}).strict()]),Nx=B({outcome:W([`completed`,`failed`,`interrupted`,`superseded`]),recordedAt:F().datetime(),message:F().min(1),details:U(F(),R()).optional(),completionScope:G(`backup_snapshot`).optional()}).strict(),Px=B({storedValue:F(),effectiveValue:F(),source:W([`environment`,`local_db`,`builtin_default`]),pendingStoredValue:F().optional(),appliesAfter:G(`mcp_server_restart`).optional()}).strict(),Fx=B({endpoint:W([`grpc`,`graphql`]),key:W([`suiGrpcUrl`,`suiGraphqlUrl`]),value:F().min(1),status:W([`saved`,`reset`]),storedValue:F(),effectiveValue:F(),source:Px.shape.source}).strict().refine(e=>e.key===(e.endpoint===`grpc`?`suiGrpcUrl`:`suiGraphqlUrl`),`The endpoint kind and preference key must agree.`),Ix=I().int().nonnegative().safe(),Lx=B({accounts:Ix,reviewSessions:Ix,reviewStateSnapshots:Ix,reviewStatusTransitions:Ix,reviewExecutions:Ix,reviewRequests:Ix,outcomeUnknownRequests:Ix,externalActivityScans:Ix,externalActivityTransactions:Ix,localSettings:Ix}).strict(),Rx=B({status:G(`valid`),format:G(yx),network:G(`mainnet`),exportedAt:F().datetime(),currentCounts:Lx,incomingCounts:Lx,willReplace:G(!0),activeAccountChange:W([`unchanged`,`set`,`cleared`]),currentReadAddress:h_.nullable(),incomingReadAddress:h_.nullable(),restartRequiredAfterImport:L()}).strict(),zx=B({kind:G(`settings`),operationId:Q,phase:W([`draft`,`uploading`,`sealed`,`prepared`,`executing`,`stopping`,`starting`,`terminal`]),draft:wx.optional(),preparationId:Q.optional(),preparation:U(F(),R()).optional(),file:B({fileId:Q,displayName:F(),totalSize:xx,receivedSize:xx,sha256:Sx,sealed:L(),cleanup:W([`pending`,`complete`,`failed`])}).strict().optional(),download:B({availability:W([`preparing`,`available`,`ended`]),currentAttemptId:Q,hostReport:Tx.optional(),previousUnconfirmed:L(),endReason:Dx.optional(),expiresAt:F().datetime().optional(),remainingMs:xx.optional(),localSave:B({status:W([`needs_consent`,`saving`,`saved`,`failed`]),currentSaveAttemptId:Q.optional(),failure:kx.optional(),savedAt:F().datetime().optional()}).strict().optional(),allowedFileActions:z(jx)}).strict().optional(),restoreCheck:Cx.optional(),backupLocation:B({directory:F().min(1),filename:F().min(1)}).strict().optional(),result:Nx.optional(),temporaryFileCleanup:W([`pending`,`complete`,`failed`]).optional(),priorRunId:Q.optional(),nextRunId:Q.optional(),supersedesOperationId:Q.optional(),supersededByOperationId:Q.optional(),allowedActions:z(W(Mx.options.map(e=>e.shape.action.value))),observe:L(),facts:B({server:B({name:F(),version:F(),network:G(`mainnet`)}).strict(),localSettings:B({suiGrpcUrl:Px,suiGraphqlUrl:Px}).strict(),readAddress:F().optional(),assetReadAccount:Y_,walletAvailability:H_,connectionReconciliationRequired:G(!0).optional(),observedAt:F().datetime().optional(),counts:Lx}).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`&&!Rx.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=Fx.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.`})}),Bx=65536;function Vx(e){return new TextEncoder().encode(JSON.stringify(e)).length}function Hx(e){let t=Bx-Vx(e);return t>0?3*Math.floor(t/4):0}function Ux(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=bx,t.params.arguments.input.chunkBase64=``,Hx(t)}var Wx={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`},Gx=B({connectionId:F().min(1),pairingUri:F().startsWith(`wc:`),expiresAt:F().datetime()}).strict(),Kx=W([`account`,`receipt`,`chart`,`connect`,`review`,`settings`]),qx=B({cardId:F().min(1),kind:Kx,state:W([`ready`,`running`,`closed`]),revision:I().int().nonnegative(),createdAt:F().datetime(),expiresAt:F().datetime(),input:U(F(),R()),data:R().optional(),reason:W([`completed`,`expired`,`failed`,`server_restarted`,`cancelled`]).optional(),error:F().optional()}).strict().extend({pollAfterMs:I().int().positive(),inputRemainingMs:I().int().nonnegative()}),Jx=B({transactionDigest:F().min(1),pureInputs:z(B({index:I().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:B({mermaid:B({text:F(),namedText:F()}).strict()}).strict().optional()}).strict(),Yx=`sui-mcp/card`,Xx=`sui-mcp/receipt-display`,Zx=`sui-mcp/wallet-display`,Qx=`sui-mcp/settings-file`,$x=`suimcp://cards/`,eS=hc(`kind`,[B({kind:G(`account`),status:G(`input_required`),field:G(`account`),message:F().min(1)}).strict(),B({kind:G(`receipt`),status:G(`input_required`),field:G(`digest`),message:F().min(1)}).strict()]),tS=B({cardId:F().min(1),permission:F().min(1)}).strict();tS.extend({revision:I().int().nonnegative(),input:U(F(),R())}).strict();var nS=Jx.extend({cardId:F().min(1),revision:I().int().nonnegative(),attemptId:F().min(1).optional()}),rS=Gx.extend({cardId:F().min(1),revision:I().int().nonnegative()}),iS=B({attemptId:F().uuid().optional(),cardId:F().min(1),operationId:F().uuid(),fileId:F().uuid(),offset:I().int().nonnegative().safe(),totalSize:I().int().nonnegative().safe(),sha256:F().regex(/^[a-f0-9]{64}$/),chunkBase64:F()}).strict(),aS={account:Wx.uiOpenAccount,receipt:Wx.uiOpenReceipt,chart:Wx.uiOpenChart,read:Wx.uiReadCard,submit:Wx.uiSubmitCard,act:Wx.uiActCard,readSettingsFile:Wx.uiReadSettingsFile};function $(e){return typeof e==`object`&&e&&!Array.isArray(e)?e:void 0}function oS(e){return e.kind!==`import_local_data`}function sS(e,t,n){if(e.kind!==`settings`||t.kind!==`settings`||e.cardId!==t.cardId||t.state!==`ready`)return;let r=zx.safeParse(e.data),i=zx.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(oS(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 cS(e){return Object.keys(e).filter(t=>e[t]!==void 0)}function lS(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)=>lS(e,t[n]));let n=$(e),r=$(t);if(!n||!r)return!1;let i=cS(n);return i.length===cS(r).length&&i.every(e=>Object.hasOwn(r,e)&&lS(n[e],r[e]))}function uS(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&&!lS(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=Xu.safeParse(i);if(!n.success)throw r();o=uS(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 cS(t)){let n=t[e];if(Object.hasOwn(c,e)&&!lS(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 dS(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 fS(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($x.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 pS(e){let t=$(e.structuredContent),n=t?.ok===!0?eS.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:qx.parse(i);a?.kind===`settings`&&zx.parse(a.data);let o=$(e._meta)?.[Xx],s=o===void 0?void 0:nS.parse(o);if(s&&!dS(a,s))throw Error(`Transaction details do not match this saved result.`);let c=$(e._meta)?.[Zx],l=c===void 0?void 0:rS.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 mS(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 Zh({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`,ce,E,le=0,D=0,ue,de,fe,pe,O,me,he,ge,_e=!1;function ve(){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 ye()||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 ye(){let e=hx.safeParse(C?.input);if(!e.success||e.data.action!==`disconnect`&&e.data.action!==`use_account`)return!1;let t=e.data,n=_x.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 be(){if(!C)return;let e=ve();e&&C.disposition!==`observed`&&(e!==`active`||C.disposition===`active`)&&(C.disposition=e),C.disposition===`observed`&&(C.retryRequired=!1)}function xe(){let e=gx.safeParse($(y?.data)?.automaticAction);return C?.retryRequired&&e.success&&C.input.action===e.data.action?e.data:void 0}function Se(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 Ce(e){if(e!==`past`||!C)return;let t=Se(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 we,Te;function Ee(){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`||we===void 0||Date.now()<we)],a=e===`review`&&t?.mode===`review`&&!t.request&&!!g&&y?.state===`ready`,o=a&&ue!==void 0&&Date.now()>=ue,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=me?.pending?.()===!0,re=me?.displayRecovery?.(),le=l&&!c&&!oe&&!ne&&!o&&!!g,de=le&&!w&&!h&&(!m||!(ce&&(v||b||x))),fe=gx.safeParse(t?.automaticAction),pe=p?$(n?.localSave):void 0,O=!!y&&(m?t?.observe===!0||pe?.status===`saving`:y.state===`running`),he=!!_&&te&&!c&&!ce&&s&&(E===`explicit`||S.status!==`read_failed`&&(E===`background`||S.status===`needed`&&S.automatic)),ge=s&&le&&!ae&&!ce&&!E&&!w&&!b&&!ee&&!x&&f&&fe.success&&i.includes(fe.data.action)?fe.data:void 0,_e=$(t?.restoreCheck),ve=p&&le&&y?.state===`ready`&&!w&&!h&&!t?.result&&t?.observe!==!0&&(_e?.status===`cannot_restore`&&[`operation_busy`,`wallet_request_unsettled`].includes(String(_e.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`)),ye;!c&&_&&(S.status===`read_failed`||ae||S.status===`unconfirmed`?ye=`read`:S.status===`needed`?S.automatic||(ye=`read`):oe||re||p&&[`pending`,`failed`].includes(String(t?.temporaryFileCleanup))||pe?.status===`saving`||pe?.status===`needs_consent`&&!i.includes(`settings_store_backup`)||pe?.status===`failed`&&pe.failure===`not_published`&&!n?.endReason&&!i.includes(`settings_store_backup`)||ve?ye=`read`:g?$(t?.progress)?.status===`unavailable`||$(t?.walletAvailability)?.status===`initializing`&&$(t?.walletAvailability)?.stage===`state_sync`?ye=`read`:!x&&xe()?ye=`retry`:v&&!O&&!(x&&i.length>0)&&!(C?.input.action===`prepare_review`&&i.includes(`prepare_review`)&&t?.automaticAction===void 0)&&f&&(ye=`read`):(y?.state!==`closed`||oe)&&(ye=`read`));let be=f?t?.actionRemainingMs:y?.inputRemainingMs;ye===`retry`&&o&&(ye=`read`);let Te=f?t?.nextStateReadAfterMs:p&&we!==void 0?Math.max(0,we-D):void 0,Ee=[(f?i.length>0:y?.state===`ready`)?be:void 0,Te].filter(e=>typeof e==`number`&&Number.isFinite(e)&&e>0),De=!c&&!!g&&s&&!ie&&!ae&&S.status!==`read_failed`,Oe=$(t?.review),ke=a&&!c&&!ae&&!oe&&!v&&!b&&!x&&S.status!==`read_failed`&&(ne||w?.input.action===`prepare_review`||Oe?.preparing===!0||fe.success&&fe.data.action===`prepare_review`||S.status===`needed`&&Oe?.status===`ready_for_wallet_review`);return{current:l,inputEnabled:de,permitted:i,disposition:u,read:he,auto:ge,recover:ye,paused:x,partialDisplayFailure:re,settingsInputBlocked:ve,reviewUpdatePending:ke,reviewCommandDeliveryFailed:v&&C?.input.action===`prepare_review`,reviewHint:o?void 0:ke?ne||Oe?.preparing||w?.input.action===`prepare_review`?`Updating review…`:`Checking status…`:a&&$(Oe?.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 ${Se(C)}: “${C.message}”`:void 0,oe,re?.message],note:[se,Ce(u)].filter(Boolean).join(` `),expiryAt:De&&l&&Ee.length?D+Math.min(...Ee):void 0,poll:De&&(O||S.status===`needed`&&!S.automatic),lifetimeAt:!c&&s&&a?ue:void 0}}function De(e){return e.recover===`retry`?C?.input.action===`connect`?`Retry connection`:`Retry review`:e.recover===`read`?`Check status`:void 0}function Oe(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(ce||e.read)return`Checking status…`;let t=De(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(ke(e)&&me?.selectionHint)return me.selectionHint}return t.guidance?.(y,{confirmed:e.current,readOnly:!g,recoveryNeeded:n,visibleConfirmation:me?.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 ke(e=Ee()){return e.inputEnabled&&y?.state===`ready`&&_e}function Ae(e,t=Ee()){return m&&t.inputEnabled&&(e?t.permitted.includes(e.action):t.permitted.length>0)}function je(e){let t=Ee();return p&&h&&t.current&&!!g&&!w&&!ce&&!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 Me(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&&(ce||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,Oe(e)].filter(Boolean).join(` `),o.hidden=!o.textContent,_e)for(let t of s.querySelectorAll(`input, button, select`))(!m||t.tagName!==`BUTTON`||t.dataset.cardAction!==void 0)&&(t.disabled=m?!Ae(void 0,e):!ke(e));if(m)for(let t of s.querySelectorAll(`[data-card-action]`))t.disabled=!Ae({action:t.dataset.cardAction},e);if(p)for(let t of s.querySelectorAll(`[data-settings-file-action]`))t.disabled=t.dataset.settingsLocalBlocked===`true`||!(h?je({action:t.dataset.cardAction}):Ae({action:t.dataset.cardAction},e));_&&(e.reviewUpdatePending||_.dataset.cardAction===`request_signature`&&e.reviewCommandDeliveryFailed||_.dataset.cardAction===void 0)&&(_.disabled=!0),O&&(O.disabled=!!w||!!ce)}function Ne(e){try{e?.()}catch{oe=`The card display could not be closed cleanly. Its stored information is unchanged.`}}function Pe(e){if(!y||d.signal.aborted)return;if(y.state===`ready`&&S.status!==`confirmed`){if(p&&me?.update)try{me.update(y,{automaticPaused:T===`paused`,settings:Ke,settingsCommandProgress:void 0,onDisplayChange:()=>A()})}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`?sS(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===he||i===ge&&!e)return;ge=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:()=>A(),...p?{settings:Ke,settingsCommandProgress:r}:{}};if(me?.update?.(y,e)){he=i,oe=void 0;return}if(y.state===`ready`&&g){let n=t.controls(y,e=>{We(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=>{We(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),Ne(c?.dispose),oe=`This card could not be displayed. Its stored information is unchanged.`;return}let f=me?.dispose;me=c,_e=l,he=i,oe=void 0,Ne(f)}function Fe(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:gx.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,be(),u){D=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}`;Te!==e&&(Te=e,we=void 0),we=Math.min(we??1/0,D+Math.max(0,t.remainingMs))}else p&&t?.availability===`ended`&&(we=void 0);g&&e===`review`&&o?.mode===`review`&&!o.request&&typeof o.actionRemainingMs==`number`&&Number.isFinite(o.actionRemainingMs)&&o.actionRemainingMs>=0&&(ue=Math.min(ue??1/0,D+o.actionRemainingMs))}return r===`read`&&(S.status!==`needed`||a>S.afterRead)&&(S={status:`confirmed`},ae=void 0),n&&(b=n),x=i,!0}function Ie(){de!==void 0&&clearTimeout(de),fe!==void 0&&clearTimeout(fe),pe!==void 0&&clearTimeout(pe),de=void 0,fe=void 0,pe=void 0,l.hidden=!0}function Le(e){let t=De(e);O?.textContent!==t&&(O?.remove(),O=void 0,t&&(O=$h(t,()=>{if(!(ce||w||d.signal.aborted)){if(Ee().recover===`retry`){let e=xe();e&&Ue(e)}else k()}})));let n=s.querySelector(`.review-primary-action`),r=s.querySelector(`.review-primary-slot`);n&&(n.hidden=!!O&&!!r),O&&(O.disabled=!!ce||!!w,r?(O.classList.add(`review-recovery-action`),r.append(O)):(O.classList.remove(`review-recovery-action`),c.append(O)))}async function k(){let e=me,t=e?.displayRecovery?.(),n=await ze(!0);n?.kind===`accepted`&&y===n.snapshot&&S.status===`confirmed`&&!d.signal.aborted&&document.visibilityState!==`hidden`&&!oe&&e===me&&t&&e?.displayRecovery?.()===t&&(t.retry(),A())}function A(e=!1){if(ie){let e=document.createElement(`p`);e.className=`ui-note`,e.textContent=ie,s.replaceChildren(e)}else Pe(e);let t=Ee();if(Me(t),Ie(),Le(t),d.signal.aborted||S.status===`rejected`)return;t.expiryAt!==void 0&&(fe=setTimeout(()=>{Re(),A()},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)pe=setTimeout(r,Math.min(1e3,t));else{let e=Ee();Me(e),Le(e)}};r()}if(t.poll&&y){let e=D+y.pollAfterMs-Date.now();de=setTimeout(()=>{ze(!1)},e>0?e:y.pollAfterMs)}t.read?(E=void 0,Be()):t.auto&&(de=setTimeout(()=>{let e=Ee().auto;e&&Ge(e,`automatic`)},0))}function Re(){S.status!==`rejected`&&S.status!==`read_failed`&&(S={status:`needed`,afterRead:le,automatic:!0})}function ze(e){return d.signal.aborted||S.status===`rejected`||!_||!te?Promise.resolve(void 0):ce?ce.promise:S.status===`read_failed`&&!e?Promise.resolve(void 0):(E=e?`explicit`:`background`,A(),ce?.promise??Promise.resolve(void 0))}function Be(){let e=++le,t=performance.now(),n={id:e,promise:Promise.resolve().then(async()=>{try{let n,r,i;if(g){let e=pS(await Ve(aS.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=`${$x}${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=qx.parse(JSON.parse(t.text));let i=b??ee;r=i&&dS(n,i)?i:void 0}if(d.signal.aborted||S.status===`rejected`)return{kind:`disposed`,id:e};let a=Fe(n,r,`read`,i,e);return ee=void 0,!a&&S.status===`needed`&&e>S.afterRead&&(S={...S,automatic:!1}),A(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(()=>{ce===n&&(ce=void 0),A()})};ce=n,A()}async function Ve(e,t){return uS(await u.callServerTool({name:e,arguments:t},{signal:d.signal}))}function He(e,t,n){let r=_x.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&&vx(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 Ue(e){if(!y||ce||!Ae(e))return;let t={input:e,basis:y,phase:`confirming`};w=t;let n=await ze(!1);w===t&&(w=void 0,n?.kind===`accepted`&&y===n.snapshot&&S.status===`confirmed`&&!d.signal.aborted&&document.visibilityState!==`hidden`&&He(e,t.basis,n.snapshot)&&Ae(e)?await Ge(e):S.status!==`read_failed`&&S.status!==`rejected`&&!d.signal.aborted&&(se=`The card state changed. Check the current selection before trying again.`),A())}async function We(e){f&&(C?.disposition===`active`||C?.retryRequired||T===`paused`)?await Ue(e):await Ge(e)}function j(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`},be(),[`cancel`,`disconnect`,`stop_connection`,`stop_waiting`,`use_account`].includes(String(e.input.action))&&(T=`paused`),(m||n===`unknown`)&&Re()}async function Ge(e,t=`user`){if(!y||!g||(t===`file`?!je(e):m?!Ae(e):!ke()))return;let n={input:e,basis:y,phase:`sending`};w=n,T=`continue`,(t===`user`||C?.disposition!==`past`)&&(C=void 0),se=void 0,A();try{let t=pS(await Ve(m?aS.act:aS.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&&j(n,t.error,`rejected`),Fe(t.snapshot,t.display,`action`,t.wallet)}catch(e){!d.signal.aborted&&S.status!==`rejected`&&(j(n,e instanceof Error?e.message:`The request could not be confirmed.`,`unknown`),C&&(C.data=$(e)?.data))}finally{w===n&&(w=void 0),A()}}let Ke={uploadChunkLimit(e,t){return g?Ux({jsonrpc:`2.0`,id:2**53-1,method:`tools/call`,params:{name:aS.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 ze(!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?!je(e):!Ae(e))throw Error(`This Settings action is unavailable until its current status has been checked.`);if(await Ge(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,A()},async readFile(e){if(!g||!_||!Ee().current||d.signal.aborted)throw Error(`Backup read permission is unavailable.`);let t=await Ve(aS.readSettingsFile,{...g,...e}),n=iS.parse($(t._meta)?.[Qx]);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||!Ee().current||d.signal.aborted||document.visibilityState===`hidden`||r&&(r.currentAttemptId!==n||r.localSave||r.availability!==`available`||we===void 0||Date.now()>=we))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 qe(){if(te&&re!==void 0&&!ne){ne=!0;try{let t=uS(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?.[Yx];if(r!==void 0){let e=tS.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=pS(t);if(i.inputRequired){if(i.inputRequired.kind!==e||g)throw Error(`The app provided inconsistent card input information.`);ie=i.inputRequired.message,A();return}let a=fS(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&&Fe(s,i.display,`preview`,i.wallet),Re(),A()}catch(e){if(d.signal.aborted)return;ae=e instanceof Error?e.message:`Card data could not be read.`,A()}}}u.ontoolresult=e=>{if(re===void 0)re=e,qe();else try{let t=pS(uS(re)).snapshot??y,n=pS(uS(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.`},A()}},u.onhostcontextchanged=e=>{e.theme&&(document.documentElement.dataset.theme=e.theme)};let Je=()=>{document.visibilityState!==`hidden`&&g&&ne&&S.status!==`read_failed`?ze(!1):A()};document.addEventListener?.(`visibilitychange`,Je),u.onteardown=async()=>{if(d.signal.aborted)return{};d.abort(),w=void 0,document.removeEventListener?.(`visibilitychange`,Je);let e=me?.dispose;return me=void 0,Ne(e),A(),{}},u.connect().then(()=>{d.signal.aborted||(te=!0,document.documentElement.dataset.theme=u.getHostContext()?.theme??`light`,qe())}).catch(()=>{d.signal.aborted||(ae=`Could not connect this card to the app.`,A())})}function hS(e){let t=``;for(let n of e)t+=String.fromCharCode(n);return btoa(t)}function gS(e){let t=atob(e),n=Uint8Array.from(t,e=>e.charCodeAt(0));if(hS(n)!==e)throw Error(`Part of the backup could not be read correctly.`);return n}async function _S(e,t,n,r,i){if(e.size>16777216)throw Error(`This backup exceeds the 16 MiB limit. Choose a smaller backup.`);let a=n();t.setFileTransferActive(!0);try{r()&&i?.({...a,stage:`reading`});let n=new Uint8Array(await e.arrayBuffer()),o=r_(tv(n));if(!r())return;i?.({...a,stage:`receiving`,sha256:o});let s=await t.act({action:`settings_begin_upload`,operationId:a.operationId,name:e.name,totalSize:n.length,sha256:o},!0),c=zx.parse(s.data),l=c.file?.receivedSize??0,u=c.file?.fileId;if(!u||c.operationId!==a.operationId||c.file?.sha256!==o||c.file.totalSize!==n.length)throw Error(`The file being received does not match your selection. Choose the backup file again.`);r()&&i?.({...a,stage:`receiving`,fileId:u,sha256:o});let d=t.uploadChunkLimit(a.operationId,u);for(;r()&&l<n.length;){if(d<1)throw Error(`This app cannot send the backup within its message size limit. Try opening Settings in another supported app.`);let e=Math.min(d,n.length-l),r={action:`settings_upload_chunk`,operationId:a.operationId,fileId:u,offset:l,chunkBase64:hS(n.subarray(l,l+e))};try{s=await t.act(r,!0)}catch(n){let r=n&&typeof n==`object`&&`data`in n?n.data:void 0;if(r?.code!==`settings_payload_too_large`||typeof r.rawChunkLimit!=`number`||!Number.isSafeInteger(r.rawChunkLimit)||r.rawChunkLimit<1||r.rawChunkLimit>=e)throw n;let i=zx.parse((await t.readCurrent()).snapshot.data);if(i.file?.fileId!==u||i.file.receivedSize!==l)throw Error(`The file transfer changed after a message was rejected. Choose the same file again to check how much was received.`);d=r.rawChunkLimit;continue}if(c=zx.parse(s.data),c.operationId!==a.operationId||c.file?.fileId!==u||c.file.sha256!==o||c.file.receivedSize!==l+e)throw Error(`The file transfer could not be confirmed. Choose the same file again to continue.`);l=c.file.receivedSize}r()&&(i?.({...a,stage:`checking`,fileId:u,sha256:o}),await t.act({action:`settings_seal_upload`,operationId:a.operationId,fileId:u},!0))}finally{t.setFileTransferActive(!1)}}async function vS(e,t,n,r){n(`pending`);let i;try{i=new Uint8Array(e.totalSize);let n=0;for(;n<i.length&&r();){let r=await t.readFile({operationId:e.operationId,fileId:e.fileId,offset:n,...e.attemptId?{attemptId:e.attemptId}:{}}),a=gS(r.chunkBase64);if(r.totalSize!==i.length||r.sha256!==e.sha256||!a.length||n+a.length>i.length)throw Error(`Part of the downloaded backup does not match the original file.`);i.set(a,n),n+=a.length}if(!r())return;if(n!==i.length||r_(tv(i))!==e.sha256)throw Error(`The complete downloaded backup could not be checked against the original file.`)}catch{if(e.attemptId&&r())try{await t.readCurrent()}catch{}return r()&&n(`backup_unverified`),`backup_unverified`}if(e.attemptId)try{let n=await t.readCurrent(),i=zx.parse(n.snapshot.data);if(!r()||i.operationId!==e.operationId||i.file?.fileId!==e.fileId||i.file.sha256!==e.sha256||i.file.totalSize!==e.totalSize||i.download?.currentAttemptId!==e.attemptId||i.download.localSave||i.download.availability!==`available`||!i.download.remainingMs)return;if(i.download.remainingMs<=Math.max(0,performance.now()-n.requestStartedAt)){try{await t.readCurrent()}catch{}return}}catch{return r()&&n(`backup_unverified`),`backup_unverified`}try{if(!r())return;let a=await(e.attemptId?t.download(e.displayName,hS(i),e.attemptId):t.download(e.displayName,hS(i))),o=a.unsupported===!0?`unsupported`:a.isError===!0?`not_completed`:`acknowledged`;return r()&&n(o),o}catch{return r()&&n(`unconfirmed`),`unconfirmed`}}var yS={set_endpoint:`Change network address`,restore_endpoint:`Use default network address`,clear_read_address:`Clear default address`,download_backup:`Backup`,export_local_data:`Backup`,import_local_data:`Restore`,reset_local_data:`Reset`,restart_wallet_service:`Connection service restart`},bS={overview:`Settings`,address:`Address for viewing assets`,records:`Local records`,troubleshooting:`Troubleshooting`,advanced:`Advanced settings`},xS={address:`View or clear the address used by default when checking your assets.`,records:`Back up, restore or delete records saved on this computer.`,troubleshooting:`Check or restart the wallet connection service.`,advanced:`Change the Sui network addresses used to retrieve data and send transactions.`},SS=`Local records are saved addresses, reviews, transaction and activity records, and Sui network settings on this computer. They do not include wallet keys, wallet connections or wallet approvals.`,CS=`Fully quit every app using Sui MCP, then reopen them. Closing a window or quitting only one app may leave Sui MCP running.`,wS={available:`Ready`,initializing:`Starting`,recovering:`Restarting`,unavailable:`Unavailable`},TS={environment:`App launch settings`,local_db:`Saved in Sui MCP`,builtin_default:`Built-in default`},ES={connected:`Connected`,awaiting_approval:`Waiting for wallet approval`,rejected:`Rejected`,failed:`Failed`,expired:`Expired`,stopped:`Stopped`,disconnected:`Disconnected`},DS=[[`accounts`,`Saved addresses`],[`reviewSessions`,`Reviews`],[`reviewRequests`,`Transaction requests`],[`outcomeUnknownRequests`,`Transaction requests with unconfirmed results`],[`externalActivityTransactions`,`Activity records`],[`localSettings`,`Saved network settings`]],OS={set_endpoint:`Save network address?`,restore_endpoint:`Use default network address?`,clear_read_address:`Clear the default address for viewing assets?`,download_backup:`Download backup`,export_local_data:`Back up local records?`,import_local_data:`Restore available`,reset_local_data:`Reset local data?`,restart_wallet_service:`Restart connection service?`},kS={set_endpoint:`Save network address`,restore_endpoint:`Use default network address`,clear_read_address:`Clear default address`,download_backup:`Download backup`,export_local_data:`Create backup`,import_local_data:`Restore local records`,reset_local_data:`Reset local data`,restart_wallet_service:`Restart connection service`};function AS(e){return e&&typeof e==`object`&&!Array.isArray(e)?e:{}}function jS(e){return e===`clear_read_address`?`address`:e===`set_endpoint`||e===`restore_endpoint`?`advanced`:e===`restart_wallet_service`?`troubleshooting`:e?`records`:`overview`}function MS(e,t,n){let r=AS(t);e.append(J(`h3`,void 0,n));for(let[t,n]of DS)typeof r[t]==`number`&&e.append(Y(n,String(r[t])))}function NS(e,t,n){let r=zx.parse(e.data),i=e,a=r.draft?{kind:`operation`,operation:r.draft.kind}:{kind:`section`,page:`overview`},o=!1,s=n?.settings,c=n?.onDisplayChange,l,u=!1,d,f=n?.settingsCommandProgress,p,m,h,g,_,v=J(`div`,`settings-card`),y=(e,n,r=`secondary`)=>{let i=$h(e,()=>{!o&&!u&&t?.(n)},r);return i.dataset.cardAction=String(n.action),i},b=(e,t)=>{let n=$h(e,()=>{if(o)return;let e=a.kind===`section`?a.page:jS(a.operation);a=t,C(),(t.kind===`section`&&t.page===`overview`?[...v.querySelectorAll(`.settings-menu-item`)].find(t=>t.dataset.settingsPage===e):v.querySelector(`.settings-back`))?.focus(),c?.()},`secondary`);return n.setAttribute(`aria-label`,e),n.dataset.settingsPage=t.kind===`section`?t.page:jS(t.operation),n},ee=(e,n,i=!1,s=!1)=>{let d=$h(e,()=>{o||u||(!s&&r.draft&&JSON.stringify(r.draft)===JSON.stringify(n)?(a={kind:`operation`,operation:n.kind},C(),c?.()):(l=void 0,t?.({action:`settings_select`,draft:n})))},i?`danger`:`secondary`);return d.dataset.cardAction=`settings_select`,d};function x(e,t,n){let r=J(`div`,`settings-choice`),i=J(`div`,`settings-choice-copy`);return i.append(J(`h3`,void 0,e),J(`p`,`ui-note`,t)),r.append(i,n),r}function te(e){let t=J(`div`,`settings-action-row`);return t.setAttribute(`aria-label`,`Settings operation actions`),t.append(e),t}async function ne(){if(!s||!m||o)return;let e=m;h=void 0,s.setFileTransferActive(!0);try{await s.act({action:`settings_report_download`,...e},!0),m===e&&(m=void 0)}catch{!o&&m===e&&(h={message:`The download response could not be recorded. Check status to record the same response without downloading again.`,retry:()=>{m===e&&ne()}})}finally{o||(s.setFileTransferActive(!!p),C(),c?.())}}function re(){let e=p;if(!s||o||!e||e.phase!==`waiting`||r.download?.availability!==`available`||r.download.localSave||r.download.currentAttemptId!==e.attemptId||!r.file)return;e.phase=`sending`;let t={operationId:r.operationId,...r.file,attemptId:e.attemptId};vS(t,s,t=>{p!==e||o||(d=t,C(),c?.())},()=>!o&&p===e&&document.visibilityState!==`hidden`&&r.download?.currentAttemptId===e.attemptId&&r.download.availability===`available`).then(async e=>{!o&&e&&[`acknowledged`,`not_completed`,`unconfirmed`,`unsupported`].includes(e)&&(m={operationId:t.operationId,fileId:t.fileId,attemptId:t.attemptId,status:e,...e===`unsupported`?{failure:{method:`ui/download-file`,code:-32601}}:{}},await ne())}).finally(()=>{p===e&&(p=void 0,u=!1),o||(s?.setFileTransferActive(!!p),C(),c?.())})}function ie(e){if(!s||!t||o||p||u)return;let n=crypto.randomUUID(),i={attemptId:n,phase:`admitting`},a=e&&r.file&&r.download?{action:`settings_retry_download`,operationId:r.operationId,fileId:r.file.fileId,previousAttemptId:r.download.currentAttemptId,attemptId:n}:{action:`settings_download_backup`,operationId:r.operationId,attemptId:n};p=i,u=!0,d=void 0,m=void 0,h=void 0,C(),c?.(),e&&s.setFileTransferActive(!0),s.act(a,e).then(()=>{o||p!==i||(i.phase=`waiting`,s?.setFileTransferActive(!0),C(),c?.(),re())}).catch(()=>{p===i&&(p=void 0,u=!1),o||(s?.setFileTransferActive(!1),C(),c?.())})}function S(e,t,n,r=!1){let i=$h(e,n,`secondary`);return i.dataset.cardAction=t,t!==`settings_download_backup`&&(i.dataset.settingsFileAction=`true`),r&&(i.dataset.settingsLocalBlocked=`true`),i.disabled=r,i}function ae(e){let n=r.download,i=r.draft?.kind===`download_backup`?r.file:void 0;if(!oe(e)){let r=n?.endReason===`acknowledged`?`Download requested`:n?.endReason===`cancelled`?`Download cancelled`:n?.endReason?`Download ended`:p?n?.availability===`available`?`Downloading backup…`:`Preparing backup…`:n?.hostReport===`not_completed`?`Download not completed`:n?.hostReport===`unconfirmed`?`Download unconfirmed`:`Backup ready`;e.append(J(`h2`,void 0,r)),n?.endReason===`acknowledged`?e.append(J(`p`,`ui-note`,`The app accepted the download request. This does not confirm that the file was saved or where it was saved.`)):n?.endReason===`cancelled`?e.append(J(`p`,`ui-note`,`No further download will be sent from this request. This does not close a save dialog or delete a file already saved by the app.`)):n?.endReason?e.append(J(`p`,`ui-note`,n.endReason===`expired`?`The time to download this backup has ended. Open a new Settings card to download the current records.`:`This backup can no longer be downloaded. Open a new Settings card to try again.`)):n?.hostReport===`not_completed`?e.append(J(`p`,`ui-note`,`The app did not complete the download request. It did not report whether it was cancelled, refused or failed.`)):(n?.hostReport===`unconfirmed`||n?.previousUnconfirmed||!p&&!m&&n?.availability===`available`&&!n.hostReport&&d!==`backup_unverified`)&&e.append(J(`p`,`ui-note`,`The previous download could not be confirmed.`+(t&&n?.allowedFileActions.includes(`settings_retry_download`)?` Retrying may save another copy if the app already handled it.`:``))),d===`backup_unverified`&&e.append(J(`p`,`ui-note`,`The backup could not be read or checked. Nothing was sent to the app for download.`)),i?.sealed&&(e.append(Y(`Suggested file name`,i.displayName),Y(`File size`,`${i.totalSize.toLocaleString(`en-US`)} bytes`)),i.totalSize>16777216&&e.append(J(`p`,`ui-note`,`This backup exceeds the 16 MiB restore limit.`))),t&&s&&n?.allowedFileActions.includes(`settings_retry_download`)&&e.append(S(`Retry download`,`settings_retry_download`,()=>ie(!0),!!p||!!m))}t&&s&&r.file&&n?.allowedFileActions.includes(`settings_cancel_download`)&&e.append(S(`Cancel download`,`settings_cancel_download`,()=>{if(!s||o||!r.file||!r.download)return;p=void 0,u=!1,d=void 0;let e={action:`settings_cancel_download`,operationId:r.operationId,fileId:r.file.fileId,attemptId:r.download.currentAttemptId};s.setFileTransferActive(!0),s.act(e,!0).catch(()=>{}).finally(()=>{o||(s?.setFileTransferActive(!1),C(),c?.())})})),(r.temporaryFileCleanup===`pending`||r.temporaryFileCleanup===`failed`)&&e.append(J(`p`,`ui-error`,`Temporary-file cleanup has not been confirmed. Use Check status to check the same request.`)),!t&&n?.localSave?.status!==`saved`?e.append(J(`p`,`ui-note`,`To download a backup, ask in chat to open a new Settings card.`)):n?.availability===`ended`&&e.append(J(`p`,`ui-note`,`To download the current records again, ask in chat to open a new Settings card.`))}function oe(e){let n=r.download,i=n?.localSave,a=r.file;if(!n||!i||i.status!==`saved`&&i.status!==`saving`&&n.endReason&&n.endReason!==`local_save_failed`)return!1;if(e.append(J(`h2`,void 0,i.status===`saved`?`Backup saved`:i.status===`saving`?`Saving backup…`:i.status===`needs_consent`?`Save a local copy?`:`Backup not saved`)),i.status===`saved`&&r.backupLocation){let t=J(`div`,`settings-backup-location`);t.append(Y(`Folder`,J(`span`,`settings-path`,r.backupLocation.directory)),Y(`File name`,J(`span`,`settings-path`,r.backupLocation.filename))),e.append(J(`p`,`ui-note`,`The backup was saved in the Sui MCP backup folder on this computer.`),t)}else i.status===`saving`?e.append(J(`p`,`ui-note`,`Wait while this backup is saved and checked. Use Check status to check the same request.`)):i.status===`failed`&&e.append(J(`p`,`ui-error`,i.failure===`target_conflict`?`The backup location already contains an item or could not be verified. It has not been replaced.`:i.failure===`not_published`?`The backup could not be saved. You can retry saving the same backup.`:`The backup could not be verified for saving. Open a new Settings card to try again.`));return i.status!==`saved`&&i.status!==`saving`&&n.previousUnconfirmed&&e.append(J(`p`,`ui-note`,`An earlier request may already have saved this backup. Saving a local copy may leave another copy.`)),a&&(i.status!==`saved`&&e.append(Y(`Suggested file name`,a.displayName)),e.append(Y(`File size`,`${a.totalSize.toLocaleString(`en-US`)} bytes`)),a.totalSize>16777216&&e.append(J(`p`,`ui-note`,`This backup exceeds the 16 MiB restore limit.`))),t&&s&&n.allowedFileActions.includes(`settings_store_backup`)&&e.append(S(i.status===`needs_consent`?`Save a local copy`:`Retry save`,`settings_store_backup`,()=>{if(!s||o||u||!r.file||!r.download)return;let e=r.download.localSave,t={action:`settings_store_backup`,operationId:r.operationId,fileId:r.file.fileId,attemptId:r.download.currentAttemptId,saveAttemptId:crypto.randomUUID(),allowPossibleCopy:r.download.previousUnconfirmed,...e?.currentSaveAttemptId?{previousSaveAttemptId:e.currentSaveAttemptId}:{}};u=!0,s.setFileTransferActive(!0),C(),c?.(),s.act(t,!0).catch(()=>{}).finally(()=>{u=!1,o||(s?.setFileTransferActive(!1),C(),c?.())})},u)),!0}function se(e,t,n,i){let a=ag(`Details`);if(r.facts&&a.body.append(Y(`Version`,r.facts.server.version)),a.body.append(Y(`Settings request ID`,og(r.operationId))),i&&i.kind===r.draft?.kind&&r.file&&a.body.append(Y(`File SHA-256`,og(r.file.sha256))),i&&[`export_local_data`,`download_backup`,`import_local_data`,`reset_local_data`].includes(i.kind)&&a.body.append(J(`p`,`ui-note`,`Local backups do not contain wallet keys, wallet connections, wallet approvals, access granted to cards, transaction bytes or signatures.`)),i?.kind===`import_local_data`&&r.preparation?.preview){let e=AS(r.preparation.preview);MS(a.body,e.currentCounts,`Checked local records`),MS(a.body,e.incomingCounts,`Backup records`),a.body.append(Y(`Default address before restoring`,typeof e.currentReadAddress==`string`?og(e.currentReadAddress):`Not selected`),Y(`Default address in this backup`,typeof e.incomingReadAddress==`string`?og(e.incomingReadAddress):`Not selected`))}if(t===`advanced`&&r.facts)for(let[e,t,n]of[[`grpc`,`Sui node`,r.facts.localSettings.suiGrpcUrl],[`graphql`,`Activity data`,r.facts.localSettings.suiGraphqlUrl]])(!i||i.kind!==`set_endpoint`&&i.kind!==`restore_endpoint`||i.endpoint===e)&&(a.body.append(J(`h3`,void 0,t),Y(`Saved network address`,n.storedValue),Y(`Network address in use`,n.effectiveValue),Y(`Set by`,TS[n.source])),n.pendingStoredValue&&a.body.append(Y(`Network address saved for next restart`,n.pendingStoredValue)));if(n){a.body.append(J(`h3`,void 0,`Connection and transaction request records`)),typeof r.preparation?.walletRunId==`string`&&a.body.append(Y(`Service run ID`,og(r.preparation.walletRunId)));for(let e of n.connections)a.body.append(Y(`${e.walletName??`Wallet`} connection ID`,og(e.connectionId)));for(let e of n.requests)a.body.append(Y(`Transaction request ID`,og(e.attempt_id)),Y(`Recorded request status`,e.request_status))}e.append(a.details)}function C(e=!1){let n=v.querySelector(`details`)?.open===!0,m=e?[...v.querySelectorAll(`input`)].filter(e=>e.type!==`file`).map(e=>e.value):void 0,h=ig(),ne=f&&i.state===`ready`&&f.cardId===i.cardId&&f.operationId===r.operationId&&(f.kind===`backup_check_response`?r.draft?.kind===`import_local_data`&&f.fileId===r.file?.fileId:JSON.stringify(f.draft)===JSON.stringify(r.draft))?f:void 0,re=r.result||r.restoreCheck?.status===`can_restore`||r.restoreCheck?.status===`cannot_restore`&&[`invalid_backup`,`file_unavailable`,`input_unavailable`].includes(r.restoreCheck.reason),oe=r.restoreCheck?.status===`checking`||!re&&(ne?.kind===`backup_check_response`||_?.progress?.stage===`checking`),w=[`executing`,`stopping`,`starting`].includes(r.phase)||oe,T=r.draft?.kind===`import_local_data`&&r.restoreCheck?.status===`can_restore`,ce=p?.phase===`admitting`,E=ce?`progress`:r.result?`result`:w?`progress`:a.kind===`section`?`section`:r.phase===`prepared`&&(r.draft?.kind!==`import_local_data`||T)?`confirmation`:`input`,le=a.kind===`section`?a.page:jS(a.operation),D=ce?{kind:`download_backup`}:E===`section`?void 0:r.draft,ue=D?jS(D.kind):le,de=D?.kind===`restart_wallet_service`&&r.preparation?.impact?G_.parse(r.preparation.impact):void 0,fe=E===`result`||E===`progress`?g??2:E===`confirmation`?3:E===`input`?2:ue===`overview`?0:1;h.classList.add(`settings-page`),g!==void 0&&fe!==g&&h.classList.add(fe>g?`settings-page--forward`:`settings-page--back`),g=fe;let pe=J(`nav`,`settings-toolbar`);if(pe.setAttribute(`aria-label`,`Settings navigation`),v.dataset.settingsPage=ue,E===`confirmation`&&D&&t&&r.allowedActions.includes(`settings_back`)){let e=`Back to ${yS[D.kind]}`,n=$h(e,()=>{o||u||(a={kind:`operation`,operation:D.kind},t({action:`settings_back`,operationId:r.operationId}))},`secondary`);n.dataset.cardAction=`settings_back`,n.setAttribute(`aria-label`,e),n.classList.add(`settings-back`),pe.append(n)}else if(E===`input`&&D&&t){let e=b(`Back to ${bS[ue]}`,{kind:`section`,page:ue});e.classList.add(`settings-back`),pe.append(e)}else if(E===`section`&&ue!==`overview`){let e=b(`Back to Settings`,{kind:`section`,page:`overview`});e.classList.add(`settings-back`),pe.append(e)}let O=J(`span`,`settings-location`,[`Settings`,...ue===`overview`?[]:[bS[ue]],...D?[yS[D.kind]]:[],...E===`result`?[`Result`]:E===`progress`?[D?.kind===`download_backup`?`Downloading`:oe?`Checking backup`:`Applying change`]:E===`confirmation`?[`Confirm`]:[]].join(` / `));if(O.setAttribute(`aria-current`,`page`),pe.append(O),h.append(pe),D?.kind===`download_backup`)ae(h);else if(E===`result`&&r.result){h.append(J(`p`,r.result.outcome===`failed`?`ui-error`:`ui-note`,r.result.message));let e=AS(r.result.details);if(typeof e.storedValue==`string`&&(h.append(Y(e.endpoint===`grpc`?`Saved Sui node address (gRPC)`:`Saved activity data address (GraphQL)`,e.storedValue)),typeof e.effectiveValueAtSave==`string`&&h.append(Y(`Network address in use when saved`,e.effectiveValueAtSave)),h.append(J(`p`,`ui-note`,e.effectiveSourceAtSave===`environment`?`When this address was saved, the app launch settings specified the network address in use. If that setting is still present, restarting will keep using it. Remove that launch setting before restarting to use the saved address.`:`The saved address is used after Sui MCP restarts, unless the app launch settings specify another address.`),J(`p`,`ui-note`,CS))),typeof e.path==`string`){if(r.backupLocation){let e=J(`div`,`settings-backup-location`);e.append(Y(`Folder`,J(`span`,`settings-path`,r.backupLocation.directory)),Y(`File name`,J(`span`,`settings-path`,r.backupLocation.filename))),h.append(e)}if(r.file){if(h.append(Y(`File size`,`${r.file.totalSize.toLocaleString(`en-US`)} bytes`)),r.file.totalSize>16777216&&h.append(J(`p`,`ui-note`,`This backup exceeds the 16 MiB restore limit. The entire backup was saved, but this installation cannot restore a file this large.`)),t&&s){let e=$h(`Download this backup`,()=>{!o&&s&&r.file&&!u&&(u=!0,e.disabled=!0,vS({operationId:r.operationId,...r.file},s,e=>{d=e,C(),c?.()},()=>!o).finally(()=>{u=!1,o||(C(),c?.())}))},`secondary`);e.dataset.settingsDownload=`true`,e.disabled=u,h.append(e)}d&&h.append(J(`p`,`ui-note`,{pending:`Checking the backup before downloading…`,backup_unverified:`The backup file could not be read or checked. Nothing was sent to the app for download. Check the folder shown above, or open a new Settings card to create another backup.`,acknowledged:`The app received the download request. This does not confirm that the file was saved or where it was saved.`,not_completed:`The app did not complete the download request. It did not report whether the download was cancelled, refused or failed. The file passed its check before the request.`,unsupported:`This app cannot receive this file. The existing backup remains in the folder shown above.`,unconfirmed:`The download could not be confirmed. You can try Download this backup again; the same file will be checked before it is sent.`}[d]))}}let n=r.temporaryFileCleanup??r.file?.cleanup;(n===`failed`||n===`pending`)&&h.append(J(`p`,`ui-error`,`Temporary-file cleanup has not been confirmed. The result above is unchanged. Use Check status to check again.`)),h.append(J(`p`,`ui-note`,`To make another change, ask in chat to open a new Settings card.`))}else if(E===`progress`){let e=J(`p`,`ui-note`,oe?`Checking backup…`:r.phase===`stopping`?`Stopping the wallet connection service…`:r.phase===`starting`?`Starting the wallet connection service…`:`Finishing this change…`);e.setAttribute(`role`,`status`),h.append(e),r.phase===`starting`&&h.append(J(`p`,`ui-note`,`If the service is not responding, you can request another restart in a new Settings card under Troubleshooting. This card keeps the result of the current restart.`))}else if(E===`confirmation`&&r.draft){if(h.append(J(`h2`,void 0,OS[r.draft.kind])),T&&r.file&&h.append(Y(`Backup file`,r.file.displayName)),r.draft.kind===`set_endpoint`||r.draft.kind===`restore_endpoint`){let e=AS(r.preparation?.endpoint);h.append(Y(`Setting`,r.draft.endpoint===`grpc`?`Sui node (gRPC)`:`Activity data (GraphQL)`)),typeof e.storedValue==`string`&&h.append(Y(`Previously saved network address`,e.storedValue)),typeof e.value==`string`&&h.append(Y(`Network address to save`,e.value)),h.append(J(`p`,`ui-note`,`Sui MCP checks that this address connects to Sui mainnet before saving it. Fully quit and reopen all apps using Sui MCP to use the change. Restarting only the wallet connection service does not apply it.`)),e.source===`environment`&&h.append(J(`p`,`ui-note`,`The app launch settings specify the network address to use. Restarting without removing that launch setting will keep using that address.`))}if(r.draft.kind===`clear_read_address`&&h.append(J(`p`,`ui-note`,`Clear the address used by default when viewing assets. This does not disconnect your wallet or cancel any transaction.`)),[`export_local_data`,`reset_local_data`].includes(r.draft.kind)&&h.append(J(`p`,`ui-note`,SS)),r.draft.kind===`reset_local_data`||r.draft.kind===`import_local_data`){T?h.append(J(`p`,`ui-error`,`Restoring replaces local records and saved network settings, including records with unconfirmed transaction results. You cannot undo this from this card. Other open cards will no longer work; open new cards after restoring.`),J(`p`,`ui-note`,`Wallet keys and approvals are not restored. Transactions on Sui are not cancelled.`)):(h.append(J(`p`,`ui-error`,`This deletes local records and saved settings, including records whose transaction results are still unconfirmed. It does not cancel transactions on Sui. Data cannot be replaced until pending wallet or transaction responses and the initial result-checking period have ended.`)),h.append(J(`p`,`ui-error`,`You cannot undo this from this card. Other open cards will no longer work. You can still read this change's result.`)));let e=AS(r.preparation?.preview);if(r.draft.kind===`import_local_data`){let t=AS(e.currentCounts),n=AS(e.incomingCounts);h.append(J(`h3`,void 0,`Records to replace (now → backup)`));for(let[e,r]of DS)typeof t[e]==`number`&&typeof n[e]==`number`&&(t[e]!==0||n[e]!==0)&&h.append(Y(r,`${t[e]} → ${n[e]}`));typeof t.outcomeUnknownRequests==`number`&&t.outcomeUnknownRequests>0&&h.append(J(`p`,`ui-error`,`The current records with unconfirmed transaction results will be removed.`)),e.activeAccountChange!==`unchanged`&&h.append(Y(`Default address for viewing assets`,e.activeAccountChange===`cleared`?`Will be cleared`:typeof e.incomingReadAddress==`string`?og(e.incomingReadAddress):`Not selected`)),e.restartRequiredAfterImport===!0&&h.append(J(`p`,`ui-note`,`After restoring, fully quit and reopen all apps using Sui MCP. Network addresses specified in the app launch settings still take priority over the restored settings.`)),h.append(J(`p`,`ui-note`,`Restoring a saved address does not reconnect your wallet. It can be used by default for viewing assets only when the same wallet connection is active and approves that address.`))}else MS(h,r.preparation?.counts,`Current local records`)}if(r.draft.kind===`restart_wallet_service`){h.append(J(`p`,`ui-note`,`The wallet connection service restarts while your apps stay open. Pending wallet approvals can no longer send a transaction, and unfinished review checks stop. Transactions already sent to Sui are not cancelled; checks already in progress continue. Restarting does not confirm a failed disconnection or remove the connection from your wallet app.`));let e=de??G_.parse(r.preparation?.impact);h.append(Y(`Wallet connection records`,String(e.connections.length)),J(`p`,`ui-note`,`These are recorded connections, not confirmation that a wallet is connected now. Restarting does not reconnect a disconnected wallet.`));for(let t of e.connections){h.append(Y(`Wallet`,t.walletName??`Wallet`),Y(`Recorded status`,ES[t.status]));for(let e of t.accounts)h.append(Y(`Recorded wallet address`,og(e)));t.disconnectPending&&h.append(J(`p`,`ui-note`,`This wallet's disconnection has not been confirmed.`))}let t=e.requests.filter(e=>e.request_status===`awaiting_signature`).length;h.append(Y(`Wallet approval requests to stop`,String(t)),Y(`Other transaction requests`,String(e.requests.length-t)))}t&&r.allowedActions.includes(`settings_confirm`)?h.append(te(y(kS[r.draft.kind],{action:`settings_confirm`,operationId:r.operationId,preparationId:r.preparationId},[`reset_local_data`,`import_local_data`].includes(r.draft.kind)?`danger`:`primary`))):t&&h.append(J(`p`,`ui-note`,`This change cannot be confirmed right now.`))}else if(D){let e;if(h.append(J(`h2`,void 0,yS[D.kind])),ue===`records`&&h.append(J(`p`,`ui-note`,SS)),D.kind===`import_local_data`){if(r.restoreCheck?.status===`cannot_restore`){let e=J(`p`,`ui-error`,r.restoreCheck.message);e.setAttribute(`role`,`alert`),h.append(J(`h3`,void 0,`Cannot restore`),e)}else r.restoreCheck?.status===`check_required`&&h.append(J(`p`,`ui-note`,r.restoreCheck.message));if(_?.progress&&!oe&&!re){let e=J(`p`,`ui-note`,_.progress.stage===`reading`?`Reading the selected file…`:`Receiving backup…`);e.setAttribute(`role`,`status`),h.append(e)}let n=ng({type:`file`});n.accept=`.json,application/json`,n.dataset.cardAction=`settings_begin_upload`,n.addEventListener(`change`,()=>{let e=n.files?.[0];if(!e||!s||u||o)return;let t={startingRevision:i.revision,progress:void 0};_=t,u=!0,l=void 0,_S(e,s,()=>({operationId:r.operationId,cardId:i.cardId}),()=>!o&&_===t,e=>{o||_!==t||e.operationId!==r.operationId||e.cardId!==i.cardId||(t.progress=e,C(),c?.())}).then(()=>{!o&&_===t&&(l=void 0)}).catch(e=>{!o&&_===t&&(l={cardId:i.cardId,operationId:r.operationId,revision:i.revision,draft:JSON.stringify(r.draft),fileId:r.file?.fileId,message:e instanceof Error?e.message:`The file transfer could not be confirmed. Choose the file again to continue.`})}).finally(()=>{_===t&&(_=void 0),u=!1,o||(C(),c?.())})}),t&&!r.file?.sealed&&h.append(rg(r.file?`Choose the same file to continue`:`Choose a Sui MCP backup (up to 16 MiB)`,n)),r.file&&(h.append(Y(`Selected file`,r.file.displayName),Y(`File received`,`${r.file.receivedSize.toLocaleString(`en-US`)} / ${r.file.totalSize.toLocaleString(`en-US`)} bytes`)),t&&r.allowedActions.includes(`settings_prepare`)&&(e=y(`Check backup again`,{action:`settings_prepare`,operationId:r.operationId},`primary`)),t&&h.append(ee(`Change backup file`,{kind:`import_local_data`},!1,!0)))}else{if(D.kind===`set_endpoint`||D.kind===`restore_endpoint`){let e=D.endpoint===`grpc`?r.facts?.localSettings.suiGrpcUrl:r.facts?.localSettings.suiGraphqlUrl;h.append(Y(`Network setting`,D.endpoint===`grpc`?`Sui node (gRPC)`:`Activity data (GraphQL)`)),e&&h.append(Y(`Current saved address`,e.storedValue)),D.kind===`set_endpoint`?h.append(Y(`Selected network address`,D.value)):h.append(J(`p`,`ui-note`,`Review the built-in default address before confirming this change.`)),e?.source===`environment`&&h.append(J(`p`,`ui-note`,`The app launch settings specify the network address in use. Saving or restoring an address here does not remove that launch setting.`))}else D.kind===`clear_read_address`?h.append(Y(`Default address for viewing assets`,r.facts?.readAddress?og(r.facts.readAddress):`Not selected`),J(`p`,`ui-note`,`Clearing this default does not disconnect your wallet or change wallet approvals.`)):D.kind===`restart_wallet_service`?(r.facts&&h.append(Y(`Wallet connection service`,wS[r.facts.walletAvailability.status])),r.facts?.connectionReconciliationRequired&&h.append(J(`p`,`ui-error`,J_)),r.facts&&r.facts.walletAvailability.status!==`available`&&h.append(J(`p`,`ui-note`,r.facts.walletAvailability.message)),h.append(J(`p`,`ui-note`,`Review the connection and transaction requests affected before confirming a service restart.`))):D.kind===`export_local_data`?h.append(J(`p`,`ui-note`,`Review the local records to save, then create the backup file.`)):D.kind===`reset_local_data`&&h.append(J(`p`,`ui-note`,`Review the records and saved settings to delete before confirming the reset.`));t&&r.allowedActions.includes(`settings_prepare`)&&(e=y(`Continue`,{action:`settings_prepare`,operationId:r.operationId},`primary`))}e&&h.append(te(e))}else{if(h.append(J(`h2`,void 0,le===`overview`?`Choose a section`:bS[le])),le===`overview`){h.append(J(`p`,`ui-note`,`You can use the default Sui mainnet network settings. Custom settings are optional.`)),r.facts?.connectionReconciliationRequired&&h.append(J(`p`,`ui-error`,J_));let e=r.facts?.walletAvailability;e&&e.status!==`available`&&h.append(J(`p`,e.status===`unavailable`?`ui-error`:`ui-note`,e.message),...e.status===`unavailable`?[J(`p`,`ui-note`,`Open Troubleshooting below to check the connection service.`)]:[]);let t=J(`div`,`settings-menu`);t.setAttribute(`aria-label`,`Settings sections`);for(let e of[`address`,`records`,`troubleshooting`,`advanced`]){let n=b(bS[e],{kind:`section`,page:e});n.classList.add(`settings-menu-item`),n.setAttribute(`aria-label`,bS[e]),n.textContent=``,n.append(J(`span`,`settings-menu-title`,bS[e]),J(`span`,`settings-menu-description`,xS[e])),t.append(n)}if(h.append(t),r.draft){let e=J(`div`,`settings-pending`);e.append(J(`p`,`ui-note`,`Unfinished change: ${yS[r.draft.kind]}.`),b(`Resume`,{kind:`operation`,operation:r.draft.kind})),h.append(e)}}else if(le===`address`)h.append(Y(`Default address for viewing assets`,r.facts?.readAddress?og(r.facts.readAddress):`Not selected`)),r.facts?.assetReadAccount.status===`address_required`&&r.facts.readAddress&&h.append(J(`p`,`ui-note`,`This saved address cannot currently be used by default. Provide an address in chat, or open Wallet connection and select an address approved by your connected wallet.`)),h.append(J(`p`,`ui-note`,`The default address is used when you ask to view assets without naming an address. To connect or disconnect your wallet, or select an approved address, ask in chat to open Wallet connection. Clearing the default does not disconnect your wallet.`)),t&&r.facts?.readAddress&&h.append(ee(`Clear default address`,{kind:`clear_read_address`}));else if(le===`records`)h.append(J(`p`,`ui-note`,SS)),t&&h.append(x(`Backup`,`Download the current local records and Sui network settings as one backup file. If this connection cannot provide downloads, the same file is saved in the Sui MCP backup folder on this computer.`,S(`Download backup`,`settings_download_backup`,()=>ie(!1))),x(`Restore`,`Choose a Sui MCP backup. It will be checked automatically before you confirm the restore.`,ee(`Restore local records`,{kind:`import_local_data`})),x(`Reset`,`Review the local records and stored settings to delete. This does not cancel transactions on Sui.`,ee(`Reset local data`,{kind:`reset_local_data`},!0)));else if(le===`troubleshooting`)r.facts&&(h.append(Y(`Wallet connection service`,wS[r.facts.walletAvailability.status])),r.facts.connectionReconciliationRequired&&h.append(J(`p`,`ui-error`,J_)),r.facts.observedAt&&h.append(Y(`Status checked at`,sg(r.facts.observedAt))),r.facts.walletAvailability.status!==`available`&&h.append(J(`p`,`ui-note`,r.facts.walletAvailability.message))),h.append(J(`p`,`ui-note`,`Restart the wallet connection service if a connection request is not responding. Starting up or waiting for you to approve in your wallet does not by itself mean a failure.`)),t&&h.append(ee(`Restart connection service`,{kind:`restart_wallet_service`}));else if(le===`advanced`&&r.facts)for(let e of[`grpc`,`graphql`]){let n=e===`grpc`?r.facts.localSettings.suiGrpcUrl:r.facts.localSettings.suiGraphqlUrl,i=ng({value:r.draft?.kind===`set_endpoint`&&r.draft.endpoint===e?r.draft.value:n.storedValue});i.dataset.cardAction=`settings_select`;let a=J(`div`,`settings-endpoint`);if(a.append(rg(e===`grpc`?`Sui node (gRPC)`:`Activity data (GraphQL)`,i),J(`p`,`ui-note`,e===`grpc`?`Used to retrieve balances, check transactions before wallet approval and send approved transactions.`:`Used to retrieve transaction activity.`)),t){let n=$h(`Select network address`,()=>{!u&&!o&&t({action:`settings_select`,draft:{kind:`set_endpoint`,endpoint:e,value:i.value}})},`secondary`);n.dataset.cardAction=`settings_select`,a.append(eg(n,ee(`Select default network address`,{kind:`restore_endpoint`,endpoint:e})))}n.appliesAfter&&a.append(J(`p`,`ui-note`,`A saved change needs an app restart. `+CS)),n.source===`environment`&&a.append(J(`p`,`ui-note`,`The app launch settings specify the network address to use. Remove that launch setting before restarting to use an address saved here.`)),h.append(a)}le!==`overview`&&r.draft&&le===jS(r.draft.kind)&&h.append(J(`p`,`ui-note`,`Unfinished change: ${yS[r.draft.kind]}.`),b(`Resume`,{kind:`operation`,operation:r.draft.kind})),t&&le===`overview`&&r.allowedActions.includes(`settings_cancel`)&&(r.draft&&h.append(J(`p`,`ui-note`,`Closing Settings discards this unfinished change. Nothing will be applied.`)),h.append(tg(y(`Close Settings`,{action:`settings_cancel`}))))}if(ne?.kind===`preparation_response`&&!r.result&&!w){let e=J(`p`,`ui-note`,`Waiting for a response…`);e.setAttribute(`role`,`status`),h.append(e)}l&&E===`input`&&D?.kind===`import_local_data`&&h.append(J(`p`,`ui-note`,l.message)),se(h,ue,de,D),v.replaceChildren(h),m&&[...v.querySelectorAll(`input`)].filter(e=>e.type!==`file`).forEach((e,t)=>{m[t]!==void 0&&(e.value=m[t])}),n&&(v.querySelector(`details`).open=!0)}return C(),{node:v,update(e,t){let n=zx.parse(e.data);if(n.operationId!==r.operationId)return!1;m&&n.file?.fileId===m.fileId&&n.download?.currentAttemptId===m.attemptId&&n.download.hostReport===m.status&&(m=void 0,h=void 0),m&&(!n.download?.allowedFileActions.includes(`settings_report_download`)||n.file?.fileId!==m.fileId)&&(m=void 0,h=void 0),l&&(n.result||e.revision!==l.revision||e.cardId!==l.cardId||n.operationId!==l.operationId||JSON.stringify(n.draft)!==l.draft||n.file?.fileId!==l.fileId)&&(l=void 0);let o=e===i;if(o&&!f&&!t.settingsCommandProgress)return!0;JSON.stringify(n.draft)!==JSON.stringify(r.draft)&&(a=n.draft?{kind:`operation`,operation:n.draft.kind}:{kind:`section`,page:jS(r.draft?.kind)});let u=_?.progress;return _&&(n.result||n.draft?.kind!==`import_local_data`||u?.stage===`reading`&&e.revision>_.startingRevision||u?.fileId&&n.file?.fileId!==u.fileId||u?.sha256&&n.file&&n.file.sha256!==u.sha256)&&(_=void 0),r=n,i=e,s=t.settings,c=t.onDisplayChange,f=t.settingsCommandProgress,C(o),re(),!0},displayRecovery(){return m?h:void 0},dispose(){o=!0,_=void 0,l=void 0,p=void 0,m=void 0}}}mS(`settings`,{title:`Settings`,controls:(e,t,n,r,i)=>NS(e,t,i),result:(e,t,n,r,i)=>NS(e,n,i)});</script></body></html>
|