@zktx.io/sui-mcp 0.6.0 → 0.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (103) hide show
  1. package/README.md +18 -18
  2. package/dist/adapters/adapterPromptSurfaces.js +0 -20
  3. package/dist/adapters/deepbook/deepbookQuotePolicy.js +0 -4
  4. package/dist/adapters/deepbook/deepbookReviewEvidence.js +0 -9
  5. package/dist/adapters/deepbook/deepbookTransactionMaterialProducer.js +0 -9
  6. package/dist/adapters/intentPlanFactories.js +0 -6
  7. package/dist/core/action/contractNameRegistry.js +0 -53
  8. package/dist/core/action/forbiddenFields.js +0 -4
  9. package/dist/core/action/ptbVisualizationProducer.js +0 -3
  10. package/dist/core/action/receiptPtbGraph.js +0 -17
  11. package/dist/core/action/reviewTimeSimulationEvidence.js +0 -4
  12. package/dist/core/action/signableAdapterContract.js +0 -5
  13. package/dist/core/action/suiChainReceiptMapping.js +0 -18
  14. package/dist/core/action/suiChainReceiptReader.js +1 -21
  15. package/dist/core/action/suiChainReceiptVerifier.js +0 -10
  16. package/dist/core/action/transactionFunding.js +0 -7
  17. package/dist/core/action/types.js +0 -1
  18. package/dist/core/action/walletReviewContractAssembler.js +0 -2
  19. package/dist/core/activity/localDataService.js +0 -6
  20. package/dist/core/activity/sqliteActivityStore.js +0 -8
  21. package/dist/core/activity/sqliteActivityStoreRows.js +0 -2
  22. package/dist/core/activity/sqliteActivityStoreSchema.js +0 -4
  23. package/dist/core/read/deepbookReadHelpers.js +0 -2
  24. package/dist/core/read/deepbookRegistry.js +0 -19
  25. package/dist/core/read/deepbookUsdcChartService.js +0 -2
  26. package/dist/core/read/readCardResult.js +0 -2
  27. package/dist/core/read/readService.js +0 -19
  28. package/dist/core/read/readServiceTypes.js +0 -2
  29. package/dist/core/session/cardSession.js +0 -4
  30. package/dist/core/session/cardSessionStore.js +1 -4
  31. package/dist/core/session/reviewValidity.js +0 -3
  32. package/dist/core/session/sessionRecordStore.js +0 -1
  33. package/dist/core/session/sessionStore.js +0 -15
  34. package/dist/core/session/settingsFileIdentity.js +0 -2
  35. package/dist/core/session/settingsFileProtocol.js +0 -5
  36. package/dist/core/session/settingsFileStore.js +1 -10
  37. package/dist/core/session/settingsInputError.js +0 -2
  38. package/dist/core/session/settingsOperation.js +0 -4
  39. package/dist/core/session/settingsPreparationSql.js +0 -2
  40. package/dist/core/session/settingsWorkflow.js +1 -37
  41. package/dist/core/session/sqliteCardStore.js +0 -2
  42. package/dist/core/session/sqliteSessionStore.js +0 -11
  43. package/dist/core/session/sqliteSettingsWorkflowStore.js +0 -10
  44. package/dist/core/session/sqliteTransactionMaterialStore.js +0 -11
  45. package/dist/core/session/sqliteWalletWorkflowStore.js +0 -29
  46. package/dist/core/session/status.js +0 -2
  47. package/dist/core/session/transactionMaterialStore.js +0 -4
  48. package/dist/core/session/transactionRequest.js +0 -4
  49. package/dist/core/session/walletConnection.js +0 -3
  50. package/dist/core/session/walletWorkflow.js +3 -21
  51. package/dist/core/session/workflowState.js +0 -8
  52. package/dist/core/session/workflowView.js +0 -6
  53. package/dist/core/suiAddress.js +0 -5
  54. package/dist/core/suiEndpoint.js +0 -3
  55. package/dist/mcp/prompts.js +0 -12
  56. package/dist/mcp/schemas.js +0 -3
  57. package/dist/mcp/tools/action/prepareSuiActionReview.js +0 -6
  58. package/dist/mcp/tools/read/serverStatusTools.js +0 -1
  59. package/dist/mcp/tools/session/shared.js +0 -2
  60. package/dist/mcp/tools/session/statusTools.js +0 -2
  61. package/dist/mcp-app/account.html +1 -1
  62. package/dist/mcp-app/chart.html +6 -6
  63. package/dist/mcp-app/connect.html +6 -6
  64. package/dist/mcp-app/receipt.html +298 -298
  65. package/dist/mcp-app/review.html +237 -237
  66. package/dist/mcp-app/settings.html +1 -1
  67. package/dist/mcp-ui/tools.js +3 -4
  68. package/dist/review-server/server.js +0 -2
  69. package/dist/runtime/application.js +1 -1
  70. package/dist/runtime/config.js +0 -2
  71. package/dist/runtime/localSettingsService.js +0 -3
  72. package/dist/runtime/logger.js +0 -2
  73. package/dist/runtime/reviewServerAcquire.js +1 -18
  74. package/dist/runtime/runtimeTermination.js +1 -4
  75. package/dist/runtime/shared/authenticatedFetch.js +0 -6
  76. package/dist/runtime/shared/control.js +0 -2
  77. package/dist/runtime/shared/dataAccess.js +0 -2
  78. package/dist/runtime/shared/mcpHttp.js +0 -5
  79. package/dist/runtime/shared/ownerLease.js +0 -4
  80. package/dist/runtime/shared/server.js +0 -1
  81. package/dist/runtime/shared/stdio.js +2 -5
  82. package/dist/runtime/smokeMainnetRead.js +0 -2
  83. package/dist/runtime/smokeReview.js +0 -4
  84. package/dist/runtime/start.js +0 -2
  85. package/dist/runtime/suiTransactionGraphqlMapping.js +0 -2
  86. package/dist/runtime/suiTransactionGraphqlQueries.js +0 -3
  87. package/dist/runtime/walletConnectConfig.js +0 -2
  88. package/dist/runtime/walletConnectStorage.js +0 -6
  89. package/dist/runtime/walletConnectTransport.js +0 -11
  90. package/dist/runtime/walletSdkChildRuntime.js +0 -5
  91. package/dist/runtime/walletSdkProcess.js +0 -6
  92. package/docs/AGENT_BEHAVIOR.md +1 -5
  93. package/docs/LOCAL_DB_ARCHITECTURE.md +3 -3
  94. package/docs/MCP_SETUP.md +14 -14
  95. package/docs/MCP_TOOLS.md +15 -0
  96. package/docs/SDK_API.md +12 -0
  97. package/docs/WALLET_CONNECTION.md +2 -1
  98. package/package.json +10 -2
  99. package/docs/AGENT_DEVELOPMENT_POLICY.md +0 -819
  100. package/docs/FRONTEND_POLICY.md +0 -611
  101. package/docs/golden-scenarios/BEHAVIOR_MATRIX.md +0 -166
  102. package/docs/golden-scenarios/INTENT_EVIDENCE_GOLDEN_ANSWERS.md +0 -161
  103. package/docs/golden-scenarios/INTENT_EVIDENCE_MATRIX.md +0 -259
@@ -3130,4 +3130,4 @@ zebra
3130
3130
  zero
3131
3131
  zone
3132
3132
  zoo`.split(`
3133
- `)),ux={0:`ED25519`,1:`Secp256k1`,2:`Secp256r1`,3:`MultiSig`,5:`ZkLogin`,6:`Passkey`};function dx(e){let{prefix:t,words:n}=Fy.decode(e);if(t!==`suiprivkey`)throw Error(`invalid private key prefix`);let r=new Uint8Array(Fy.fromWords(n)),i=r.slice(1);return{scheme:ux[r[0]],secretKey:i}}var fx=`external-proposal-alpha-2026-05-25`,px=`proposal-review-model-alpha-2026-05-25`;yh();var mx=N().refine(e=>{let t=new Date(e);return!Number.isNaN(t.getTime())&&t.toISOString()===e},`Expected ISO 8601 UTC timestamp`),hx=/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,gx=/(?:0x[0-9a-fA-F]{160,}|[A-Za-z0-9+/_=-]{160,})/,_x=/suiprivkey1[023456789acdefghjklmnpqrstuvwxyz]+/gi,vx=/(^|[^0-9a-fA-F])(?:0x)?[0-9a-fA-F]{64}($|[^0-9a-fA-F])/,yx=/(^|[^A-Za-z0-9+/_=-])(?:[A-Za-z0-9+/]{43}=|[A-Za-z0-9+/]{44}|[A-Za-z0-9_-]{43,44})($|[^A-Za-z0-9+/_=-])/,bx=/^(?:0|[1-9][0-9]*)(?:\.[0-9]+)?$/,xx=[12,15,18,21,24];function Sx(e,t,n={}){return N().min(1).max(e).superRefine((e,r)=>{(hx.test(e)||gx.test(e)||wx(e)||Tx(e)||!n.allowRawSecretLikeText&&Ex(e))&&r.addIssue({code:`custom`,message:`${t} must not contain executable, signing, private-key, mnemonic, route-selected, or encoded secret-like material`})})}function Cx(e,t){return Sx(e,t,{allowRawSecretLikeText:!0})}function wx(e){return(e.match(_x)??[]).some(e=>{try{return dx(e.toLowerCase()),!0}catch{return e.toLowerCase().startsWith(`suiprivkey1`)}})}function Tx(e){let t=e.normalize(`NFKD`).toLowerCase().replace(/[^a-z]+/g,` `).trim().split(/\s+/).filter(Boolean);for(let e of xx)if(!(t.length<e)){for(let n=0;n<=t.length-e;n+=1)if(cx(t.slice(n,n+e).join(` `),lx))return!0}return!1}function Ex(e){return vx.test(e)||yx.test(e)}var Dx=Sx(80,`amountDisplay`).refine(e=>bx.test(e)&&/[1-9]/.test(e),{message:`Expected a positive decimal display amount`}),Ox=R({kind:V([`mcp_server`,`ai_client`,`user`,`other`]),name:Sx(120,`source.name`),reference:Sx(256,`source.reference`).optional()}).strict(),kx=R({address:hb.optional(),label:Sx(120,`party.label`).optional()}).strict().refine(e=>e.address!==void 0||e.label!==void 0,{message:`Expected address or label`}),Ax=R({amountDisplay:Dx,amountKind:H(`display_proposal`).default(`display_proposal`),symbol:Sx(64,`amount.symbol`).optional(),coinType:Cx(512,`amount.coinType`).optional(),denomination:Sx(64,`amount.denomination`).optional()}).strict(),jx=R({packageId:Cx(128,`action.target.packageId`).optional(),module:Sx(128,`action.target.module`).optional(),function:Sx(128,`action.target.function`).optional(),objectId:Cx(128,`action.target.objectId`).optional(),label:Sx(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`}),Mx=R({direction:V([`outgoing`,`expected_incoming`,`fee`]),amount:Ax,recipient:kx.optional(),description:Sx(512,`assetFlow.description`).optional()}).strict(),Nx=R({id:Sx(120,`proposal.id`),source:Ox,network:H(`sui:mainnet`),createdAt:mx,expiresAt:mx.optional(),purpose:Sx(512,`purpose`),assumptions:L(Sx(512,`assumptions[]`)).max(20).optional(),requiredUserChoices:L(Sx(512,`requiredUserChoices[]`)).max(20).optional()}).strict(),Px=$f(`type`,[Nx.extend({type:H(`payment`),payment:R({amount:Ax,recipient:kx,target:Sx(512,`payment.target`).optional()}).strict()}).strict(),Nx.extend({type:H(`sui_action`),action:R({actionKind:Sx(120,`action.actionKind`),target:jx,recipient:kx.optional(),assetFlow:L(Mx).max(20).optional()}).strict()}).strict()]),Fx=R({id:N(),label:N(),status:V([`pass`,`warning`,`fail`]),message:N(),source:V([`proposal`,`adapter`,`registry`,`quote`,`wallet`,`simulation`,`network`])}).strict(),Ix=R({id:N(),label:N(),reason:N()}).strict(),Lx=R({modelVersion:H(px),contractVersion:H(fx),proposalId:N(),proposalType:V([`payment`,`sui_action`]),proposalSource:Ox,proposedAction:R({kind:V([`payment`,`sui_action`]),title:N(),purpose:N(),network:H(`sui:mainnet`),recipient:kx.optional(),target:z([N(),jx]).optional()}).strict(),assetFlow:R({outgoing:L(Ax),expectedIncoming:L(Ax),fees:L(Ax)}).strict(),recipients:L(kx),targets:L(z([N(),jx])),evidenceUsed:L(R({id:N(),label:N(),source:V([`external_proposal`,`local_schema`]),summary:N()}).strict()),missingEvidence:L(Ix),requiredUserChoices:L(Ix),unsupportedClaims:L(R({id:N(),label:N(),reason:N()}).strict()),rejectedExecutableFields:L(R({fieldName:N(),reason:N()}).strict()),freshness:R({proposalCreatedAt:mx,proposalExpiresAt:mx.optional(),evaluatedAt:mx,status:V([`current`,`expired`,`created_in_future`,`expiry_not_provided`]),reason:N()}).strict(),blockingChecks:L(Fx),nonSignableReason:R({code:H(`external_proposal_review_only`),message:N(),blockedCapabilities:L(N())}).strict()}).strict();R({requestedIntent:Px,implementationStatus:H(`read_only_review_only`),contractVersion:H(fx)}).strict();var Rx=[`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`],zx=[`review_evidence_stale`,`quote_stale`,`quote_unavailable`,`simulation_transient_failure`,`review_update_failed`,`wallet_connection_changed`],Bx=[`proposed`,`awaiting_wallet`,`wallet_connected`,`ready_for_wallet_review`,`refresh_required`,`blocked`,`expired`],Vx=[`humanReadableReview`,`simulation`,`transactionReviewData`,`ptbVisualization`,`assetFlowActual`,`beforeAfterBalance`];yh();var Hx=V([`client.core.simulateTransaction`,`client.transactionExecutionService.simulateTransaction`]),Ux=`ptb-visualization-contract-alpha-2026-05-25`,Wx=[`proposedAction`,`assetFlow`,`recipients`,`targets`,`evidenceUsed`,`missingEvidence`,`requiredUserChoices`,`unsupportedClaims`,`freshness`,`blockingChecks`],Gx=[`effects`,`balanceChanges`,`objectTypes`,`transaction`],Kx=[`transaction_bytes`,`serialized_transaction`,`wallet_signature_request`,`private_key_material`,`wallet_authorization`,`signing_data`,`signing_readiness`,`payment_execution_readiness`],qx=[`transaction_building_input`,`wallet_authorization`,`signing_data`,`signing_readiness`,`payment_execution_readiness`,`route_recommendation`],Jx=mb,Yx=`MIST`,Xx=[`checkedAt`,`expiresAt`],Zx=[`checkedAt`,`expiryStatus`],Qx=[`rawAmount`,`asset`,`amountRole`],$x=[`minOutRaw`,`asset`,`amountRole`],eS=[`gasBudgetRaw`,`asset`,`amountRole`],tS=[`gasUsedRaw`,`asset`,`amountRole`],nS=[`checkedAt`,`gasResolutionStatus`,`unresolvedReason`],rS=[`balanceChanges`,`asset`,`amountRole`],iS=[`coinType`,`decimals`],aS=[`quoteEvidenceId`,`minOutRaw`],oS=[`maxSlippageBps`,`userSelection`],sS=[`maxSlippageBps`,`minOutRaw`],cS=[`ownerAccount`,`objects`],lS=[`pinned_sdk_registry`,`verified_mainnet_onchain_metadata`,`wallet_account_read`,`quote_evidence`,`review_time_simulation`,`validated_request_fact`,`user_explicit_choice`],uS=[`input`,`expected_output`,`minimum_output`,`gas_budget`,`gas_used`,`fee`,`balance_delta`],dS={input:{kinds:[`validated_request_fact`,`wallet_account_read`,`user_explicit_choice`],fields:Qx},expected_output:{kinds:[`quote_evidence`,`review_time_simulation`],fields:Qx},minimum_output:{kinds:[`quote_evidence`],fields:$x},gas_budget:{kinds:[`review_time_simulation`],fields:eS},gas_used:{kinds:[`review_time_simulation`],fields:tS},fee:{kinds:[`review_time_simulation`],fields:Qx},balance_delta:{kinds:[`review_time_simulation`],fields:rS}},fS={pinned_sdk_metadata:{kinds:[`pinned_sdk_registry`],fields:iS},verified_mainnet_onchain_metadata:{kinds:[`verified_mainnet_onchain_metadata`],fields:iS}},pS={user_explicit:{kinds:[`user_explicit_choice`],fields:oS},adapter_policy_from_quote_evidence:{kinds:[`quote_evidence`],fields:sS}},mS={kinds:[`review_time_simulation`],fields:nS},hS={kinds:[`quote_evidence`],fields:aS},gS={kinds:[`validated_request_fact`],fields:Xx},_S={kinds:[`validated_request_fact`],fields:Zx},vS={raw_quantity_amount:{byRole:dS},unit_metadata:{bySource:fS},gas_unresolved_status:mS,expiry_status:{current:gS,expired:gS,not_provided:_S,not_applicable:_S},quote_min_out:hS,slippage_policy:{bySource:pS},object_ownership:{kinds:[`wallet_account_read`],fields:cS},simulation_result:{kinds:[`review_time_simulation`],fields:Gx}},yS={gasBudgetClaimId:{factKind:`raw_quantity_amount`,role:`gas_budget`,assetCoinType:Jx,rawUnit:Yx},gasUsedClaimId:{factKind:`raw_quantity_amount`,role:`gas_used`,assetCoinType:Jx,rawUnit:Yx},gasObjectOwnershipClaimId:{factKind:`object_ownership`,ownership:`owned_by_account`}},bS=N().refine(e=>{let t=new Date(e);return!Number.isNaN(t.getTime())&&t.toISOString()===e},`Expected ISO 8601 UTC timestamp`),xS=Cb(`unsigned integer`),SS=N().regex(/^0x[0-9a-fA-F]{1,64}$/,{message:`Expected a Sui object id`}),CS=N().min(1).max(512).refine(e=>{try{return Eb(e)===e}catch{return!1}},`Expected a normalized Sui struct tag coin type`),X=N().min(1).max(120),wS=R({symbol:N().min(1).max(64).optional(),coinType:CS}).strict(),TS=/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,ES=/(?:0x[0-9a-fA-F]{160,}|[A-Za-z0-9+/_=-]{160,})/;function DS(e,t){return N().min(1).max(e).superRefine((e,n)=>{(TS.test(e)||ES.test(e))&&n.addIssue({code:`custom`,message:`${t} must not contain executable transaction, signing, private-key, mnemonic, or long encoded material`})})}function OS(e,t){let n=new Set(e);return t.filter(e=>!n.has(e))}function kS(e,t,n,r,i){let a=OS(t,n);a.length!==0&&e.addIssue({code:`custom`,path:r,message:`${i} must include ${a.join(`, `)}`})}function AS(e,t,n,r,i){kS(e,t,n,r,i)}function jS(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&&jS(e,r,i)}function MS(e,t,n,r,i){let a=new Set(t),o=new Set(n);if(a.size!==o.size){jS(e,r,i);return}for(let t of a)if(!o.has(t)){jS(e,r,i);return}}function NS(e,t,n,r,i){(t.symbol!==n.symbol||t.coinType!==n.coinType)&&jS(e,r,i)}function PS(e,t,n,r,i){try{Eb(t.coinType)!==n&&jS(e,r,i)}catch{jS(e,r,i)}}var FS=R({kind:V([`natural_language_intent`,`external_proposal`,`mcp_action_request`,`local_review_request`]),sourceId:N().min(1).max(160),capturedAt:bS,authority:H(`untrusted_until_review_regenerates_and_verifies`),userSelectionSource:V([`user_explicit`,`prior_user_explicit_context`]).optional()}).strict(),IS=R({id:X,kind:V(lS),network:H(`sui:mainnet`),source:N().min(1).max(240),verifiedAt:bS,fields:L(N().min(1).max(120)).min(1)}).strict(),LS=$f(`factKind`,[R({id:X,factKind:H(`raw_quantity_amount`),sourceEvidenceId:X,role:V(uS),asset:wS,rawAmount:xS}).strict(),R({id:X,factKind:H(`unit_metadata`),sourceEvidenceId:X,source:V([`pinned_sdk_metadata`,`verified_mainnet_onchain_metadata`]),coinType:CS,decimals:P().int().min(0).max(255)}).strict(),R({id:X,factKind:H(`gas_unresolved_status`),sourceEvidenceId:X,checkedAt:bS,status:H(`unresolved`),reason:N().min(1).max(240)}).strict(),R({id:X,factKind:H(`expiry_status`),sourceEvidenceId:X,checkedAt:bS,status:V([`current`,`expired`,`not_provided`,`not_applicable`]),expiresAt:bS.optional(),reason:N().min(1).max(240).optional()}).strict(),R({id:X,factKind:H(`quote_min_out`),sourceEvidenceId:X,quoteEvidenceId:N().min(1).max(120),minOutRaw:xS}).strict(),R({id:X,factKind:H(`slippage_policy`),sourceEvidenceId:X,policySource:V([`user_explicit`,`adapter_policy_from_quote_evidence`]),maxSlippageBps:P().int().min(0).max(1e4),minOutRaw:xS.optional()}).strict(),R({id:X,factKind:H(`object_ownership`),sourceEvidenceId:X,objectId:SS,ownerAccount:hb,ownership:V([`owned_by_account`,`shared_object`,`immutable_or_package`,`not_owned_by_account`])}).strict(),R({id:X,factKind:H(`simulation_result`),sourceEvidenceId:X,provider:Hx,checksEnabled:H(!0),simulatedAt:bS,status:V([`success`,`failed`,`unavailable`]),requiredFields:L(V(Gx)).min(Gx.length),missingFields:L(V(Gx)).default([]),failureReason:N().min(1).max(240).optional()}).strict()]),RS=R({id:X,role:V(uS),asset:wS,rawAmount:xS,unit:R({decimals:P().int().min(0).max(255),source:V([`pinned_sdk_metadata`,`verified_mainnet_onchain_metadata`]),sourceField:N().min(1).max(160),unitClaimId:X}).strict(),amountClaimId:X,displayOnly:R({amountDisplay:N().min(1).max(120),reason:H(`presentation_only_not_signing_input`)}).strict().optional()}).strict(),zS=R({objectId:SS,ownerAccount:hb,ownershipClaimId:X}).strict(),BS=R({source:H(`review_time_simulation`),checkedAt:bS,gasBudgetRaw:xS.optional(),gasBudgetClaimId:X.optional(),gasUsedRaw:xS.optional(),gasUsedClaimId:X.optional(),gasObjects:L(zS).optional(),unresolvedReason:N().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`})}),VS=$f(`status`,[R({checkedAt:bS,status:H(`current`),expiresAt:bS,evidenceClaimId:X}).strict(),R({checkedAt:bS,status:H(`expired`),expiresAt:bS,evidenceClaimId:X}).strict(),R({checkedAt:bS,status:H(`not_provided`),evidenceClaimId:X,reason:N().min(1).max(240),expiresAt:Kf().optional()}).strict(),R({checkedAt:bS,status:H(`not_applicable`),evidenceClaimId:X,reason:N().min(1).max(240),expiresAt:Kf().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`})}),HS=R({status:V([`required_and_verified`,`not_required_for_action`,`missing`,`stale`]),quoteEvidenceId:N().min(1).max(120).optional(),quoteEvidenceClaimId:X.optional(),maxSlippageBps:P().int().min(0).max(1e4).optional(),minOutRaw:xS.optional(),policySource:V([`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`})}),US=R({checkedAt:bS,ownerAccount:hb,objects:L(R({objectId:SS,role:V([`input_coin`,`gas_coin`,`protocol_object`,`shared_object`,`receiving_object`]),ownership:V([`owned_by_account`,`shared_object`,`immutable_or_package`,`not_owned_by_account`]),evidenceClaimId:X}).strict()).min(1)}).strict(),WS=R({evidenceClaimId:X,transactionDigest:gb,provider:Hx,checksEnabled:H(!0),simulatedAt:bS,status:V([`success`,`failed`,`unavailable`]),requiredFields:L(V(Gx)).min(Gx.length),missingFields:L(V(Gx)).default([]),failureReason:N().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=>Gx.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`}),GS=R({fields:L(V(Wx)).min(Wx.length),transactionDigest:gb,source:H(`review_model_or_adapter_equivalent`),purpose:H(`human_review_before_wallet_authorization`)}).strict().refine(e=>Wx.every(t=>e.fields.includes(t)),{message:`Human-readable review fields must include every required review field`}),KS=R({runtimeStatus:H(`emitted_pre_handoff`),mcpAndReviewUiMayExpose:L(V([`human_readable_review`,`ptb_visualization_artifact`,`diagnostics`,`status_checks`])).min(1),prohibited:L(V(Kx)).min(1)}).strict().superRefine((e,t)=>{AS(t,e.prohibited,Kx,[`prohibited`],`prohibited`)}),qS=R({schemaVersion:H(1),adapterId:N().min(1).max(120),protocol:N().min(1).max(120),actionKind:N().min(1).max(120),network:H(`sui:mainnet`),inputProvenance:FS,sourceReferences:L(IS).min(1),evidenceClaims:L(LS).min(1),rawQuantities:L(RS).min(1),gas:BS,expiry:VS,slippageOrMinOut:HS,objectOwnership:US,simulation:WS,humanReadableReview:GS,outputBoundary:KS,reviewedTransactionDigest:gb}).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(`, `)}`}),kS(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}`});return}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,vS.raw_quantity_amount.byRole[e.role],[`evidenceClaims`,n,`sourceEvidenceId`],`evidenceClaims[${n}].raw_quantity_amount`),e.factKind===`unit_metadata`&&l(e.sourceEvidenceId,vS.unit_metadata.bySource[e.source],[`evidenceClaims`,n,`sourceEvidenceId`],`evidenceClaims[${n}].unit_metadata`),e.factKind===`gas_unresolved_status`&&l(e.sourceEvidenceId,vS.gas_unresolved_status,[`evidenceClaims`,n,`sourceEvidenceId`],`evidenceClaims[${n}].gas_unresolved_status`),e.factKind===`expiry_status`&&(l(e.sourceEvidenceId,vS.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,vS.quote_min_out,[`evidenceClaims`,n,`sourceEvidenceId`],`evidenceClaims[${n}].quote_min_out`),e.factKind===`slippage_policy`&&(l(e.sourceEvidenceId,vS.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,vS.object_ownership,[`evidenceClaims`,n,`sourceEvidenceId`],`evidenceClaims[${n}].object_ownership`),e.factKind===`simulation_result`&&(l(e.sourceEvidenceId,vS.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`}),Gx.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`),NS(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,yS.gasBudgetClaimId.role,[`gas`,`gasBudgetClaimId`],`gas.gasBudgetClaimId role`),PS(t,n.asset,yS.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,yS.gasUsedClaimId.role,[`gas`,`gasUsedClaimId`],`gas.gasUsedClaimId role`),PS(t,n.asset,yS.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,yS.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`),MS(t,e.simulation.requiredFields,f.requiredFields,[`simulation`,`requiredFields`],`simulation.requiredFields`),MS(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`)}),JS=R({contractVersion:H(Ux),artifactKind:H(`ptb_visualization`),generatedAt:bS,source:R({adapterId:N().min(1).max(120),planId:N().min(1).max(120).optional(),sourceKind:V([`review_time_generated_transaction_kind`,`review_time_ir`,`renderer_model`]),authority:H(`visualization_only_not_wallet_authorization`),renderer:R({name:N().min(1).max(120),packageName:N().min(1).max(120).optional(),version:N().min(1).max(80).optional()}).strict().optional()}).strict(),mermaid:R({diagramType:H(`flowchart`),text:DS(2e4,`mermaid.text`),namedText:DS(2e4,`mermaid.namedText`)}).strict(),diagnostics:L(R({severity:V([`info`,`warning`,`error`]),code:N().min(1).max(120),message:DS(512,`diagnostics.message`),source:V([`adapter`,`renderer`,`schema`,`simulation`])}).strict()).default([]),unsupportedUse:L(V(qx)).min(1),executableMaterial:R({included:H(!1),policy:H(`mcp_and_review_ui_outputs_must_not_include_executable_transaction_material`)}).strict()}).strict().superRefine((e,t)=>{AS(t,e.unsupportedUse,qx,[`unsupportedUse`],`unsupportedUse`)});yh();var YS=B(N(),I()),XS=V(Rx),ZS=V(zx);V([`ready_for_wallet_review`,`refresh_required`,`blocked`]);var QS=V(Bx);V([`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 $S=R({id:N(),label:N(),status:V([`pass`,`warning`,`fail`]),message:N(),source:V([`registry`,`quote`,`wallet`,`simulation`,`adapter`,`network`,`proposal`])}),eC=N().min(1),tC=`human_readable_review`,nC=`review_time_simulation`,rC=R({stageCatalogId:N().min(1),adapterId:N(),protocol:N(),actionKind:N(),completedStages:L(eC),missingStages:L(eC)}).strict().superRefine((e,t)=>{let n=iC(e.completedStages);n&&t.addIssue({code:`custom`,path:[`completedStages`],message:`completedStages contains duplicate stage '${n}'`});let r=iC(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 iC(e){let t=new Set;for(let n of e){if(t.has(n))return n;t.add(n)}}var aC=R({symbol:N(),amount:N(),coinType:N().optional(),approx:F().optional()}).strict(),oC=aC.extend({amountKind:H(`display_intent`).default(`display_intent`)}),sC=R({outgoing:L(oC),expectedIncoming:L(oC),minimumIncoming:L(oC).optional(),fees:L(oC).optional()}),cC=R({outgoing:L(aC),expectedIncoming:L(aC),minimumIncoming:L(aC).optional(),fees:L(aC).optional()}),lC=R({before:L(aC),after:L(aC),delta:L(aC)}),uC=R({computationCostRaw:xb(`computationCostRaw`),storageCostRaw:xb(`storageCostRaw`),storageRebateRaw:xb(`storageRebateRaw`),nonRefundableStorageFeeRaw:xb(`nonRefundableStorageFeeRaw`)}).strict(),dC=R({address:hb,coinType:N().min(1).max(512).refine(e=>{try{return Eb(e)===e}catch{return!1}},`Expected a normalized Sui struct tag coin type`),amount:Tb(`balanceChanges[].amount`)}).strict(),fC=R({objectId:hb,objectType:N().min(1).max(512).optional(),inputState:N().min(1).max(80),outputState:N().min(1).max(80),idOperation:N().min(1).max(80)}).strict(),pC=R({provider:Hx,checksEnabled:F(),success:F(),gasCostSummary:uC.optional(),balanceChanges:L(dC).optional(),objectChanges:L(fC).optional(),error:N().optional()}),mC=pC,hC=pC.extend({checksEnabled:H(!0),success:H(!0),gasCostSummary:uC,balanceChanges:L(dC),objectChanges:L(fC),error:Kf().optional()}).strict(),gC=R({role:V([`input`,`expected_output`,`minimum_output`,`fee`]),symbol:N(),coinType:N().min(1).max(512).refine(e=>{try{return Eb(e),!0}catch{return!1}},`Expected a Sui struct tag coin type`),decimals:P().int().min(0).max(255),rawAmount:xb(`rawAmount`),rawAmountSource:H(`quote_policy_evidence`),displayAmount:N().optional(),displayAmountSource:H(`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`})}),_C=R({role:V([`connected_account`,`output_recipient`]),address:hb}).strict(),vC=R({kind:H(`swap_output_asset`),symbol:N(),coinType:N().min(1).max(512).refine(e=>{try{return Eb(e),!0}catch{return!1}},`Expected a Sui struct tag coin type`),protocol:N(),poolKey:N(),direction:V([`base_to_quote`,`quote_to_base`])}).strict(),yC=R({id:N(),label:N(),source:z([V([`registry`,`quote`,`wallet`,`simulation`,`adapter`,`network`,`proposal`]),V([`transaction_material`,`digest_commitment`])]),summary:N()}).strict(),bC=R({id:N(),label:N(),reason:N()}).strict(),xC=R({proposedAction:R({title:N(),summary:N(),actionKind:N(),adapterId:N(),protocol:N(),network:H(`sui:mainnet`)}).strict(),recipients:L(_C),evidenceUsed:L(yC),missingEvidence:L(bC),requiredUserChoices:L(bC),unsupportedClaims:L(bC),freshness:R({status:H(`current`),evaluatedAt:N(),expiresAt:N(),reason:N()}).strict(),blockingChecks:L($S)}).strict(),SC=R({assetFlow:R({outgoing:L(gC),expectedIncoming:L(gC),minimumIncoming:L(gC),fees:L(gC)}).strict(),targets:L(vC)}).strict(),CC=$f(`kind`,[xC.extend({kind:H(`swap_human_readable_review`)}).merge(SC)]),wC=R({id:N(),actionKind:N(),adapterId:N(),protocol:N(),title:N(),summary:N(),assetFlowPreview:sC,reviewModel:Lx.optional(),adapterData:YS,createdAt:N(),expiresAt:N().optional(),registryVersion:N().optional(),preliminaryChecks:L($S).optional()}),TC=R({planId:N(),reviewSessionId:N(),account:hb,checks:L($S),assetFlowActual:cC.optional(),beforeAfterBalance:lC.optional(),simulation:mC.optional(),humanReadableReview:CC.optional(),transactionReviewData:qS.optional(),ptbVisualization:JS.optional(),adapterLifecycle:rC.optional(),updatedAt:N()}),EC=$f(`status`,[TC.extend({status:H(`ready_for_wallet_review`),evidenceValidity:Kf().optional(),blockedReason:Kf().optional(),refreshReason:Kf().optional()}),TC.extend({status:H(`refresh_required`),evidenceValidity:H(`invalidated`).optional(),refreshReason:ZS,blockedReason:Kf().optional()}),TC.extend({status:H(`blocked`),evidenceValidity:H(`invalidated`).optional(),blockedReason:XS,refreshReason:Kf().optional()})]).superRefine((e,t)=>{if(e.evidenceValidity===`invalidated`)for(let n of Vx)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&&DC(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 DC(e,t){let n=e.adapterLifecycle;n&&(e.humanReadableReview!==void 0&&OC(t,n,tC,[`humanReadableReview`]),e.simulation!==void 0&&(OC(t,n,nC,[`simulation`]),OC(t,n,tC,[`simulation`]),kC(t,e.simulation,[`simulation`])),n.missingStages.includes(nC)&&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(tC)&&e.humanReadableReview!==void 0&&t.addIssue({code:`custom`,path:[`humanReadableReview`],message:`humanReadableReview public evidence cannot be present while human_readable_review is missing`}))}function OC(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 kC(e,t,n){hC.safeParse(t).success||e.addIssue({code:`custom`,path:n,message:`simulation public evidence requires a successful checks-enabled review-time simulation projection`})}yh();var AC=R({topic:N().min(1),accounts:L(hb).min(1),methods:L(N()),chain:H(Rb),expiresAt:N().datetime(),walletName:N().optional()}).strict(),jC=$f(`status`,[R({topic:N().min(1),version:P().int().positive(),status:H(`present`),session:AC}).strict(),R({topic:N().min(1),version:P().int().positive(),status:V([`absent`,`unusable`])}).strict()]),MC=R({runId:zb,sequence:P().int().positive(),observedAt:N().datetime()}).strict();MC.extend({sessions:L(jC)}).strict();var NC=R({kind:H(`wallet_service_recovery`),priorRunId:zb,admittedAt:N().datetime(),updatedAt:N().datetime()}),PC=z([NC.extend({phase:H(`stopping`)}).strict(),NC.extend({phase:H(`starting`),nextRunId:zb}).strict(),NC.extend({outcome:V([`available`,`failed`,`superseded`,`server_restarted`]),nextRunId:zb.optional(),message:N().optional()}).strict()]);yh();var FC=`A wallet connection provides account context; it is not a transaction approval or proof of address ownership.`,IC=`Review evidence is not a safety guarantee. Only an explicit card action and wallet approval may authorize this exact transaction.`,LC=Kb.extend({pendingAction:H(`disconnect`).optional()});V([`input_required`,`awaiting_approval`,`disconnect_pending`]);var RC=R({action:H(`connect`),walletRunId:zb}).strict(),zC=R({action:H(`disconnect`),walletRunId:zb,connectionId:N().min(1)}).strict(),BC=R({action:H(`use_account`),walletRunId:zb,connectionId:N().min(1),account:hb}).strict(),VC=R({action:V([`prepare_review`,`request_signature`]),connectionId:N().min(1),walletRunId:zb,account:hb,reviewRevision:P().int().nonnegative()}).strict(),HC=z([RC,zC,BC,VC,R({action:V([`cancel`,`stop_connection`,`stop_waiting`,`read_result`])}).strict()]),UC=z([RC,VC.extend({action:H(`prepare_review`)})]),WC=R({kind:V([`connect`,`review`]),mode:V([`connect`,`review`,`review_manage`]),allowedActions:L(V(Xb)),actionRemainingMs:P().int().nonnegative(),nextStateReadAfterMs:P().int().nonnegative().optional(),automaticAction:UC.optional(),observe:F(),walletAvailability:Hb,walletObservation:MC.optional(),runtimeRecovery:PC.optional(),connectionConflict:qb.optional(),manageableConnectionIds:L(N().min(1)),connectionReconciliationRequired:H(!0).optional(),usableConnectionId:N().min(1).optional(),assetReadAccount:Yb.optional(),acceptedWalletRunId:zb.optional(),progress:Ub,boundary:V([FC,IC]),connections:L(LC),activeAccount:N().optional(),connection:LC.optional(),connectionAction:V([`connect`,`disconnect`]).optional(),review:R({reviewSessionId:N(),plan:wC,reviewRevision:P().int().nonnegative(),status:QS,account:N().optional(),preparing:F(),accountRequestPending:H(!0).optional(),error:N().optional(),state:EC.optional()}).strict().optional(),request:Lb.optional(),receipt:I().optional(),netGasMist:N().regex(/^-?[0-9]+$/).optional(),observationStopped:F().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 GC(e,t,n=!1){return e.connections.filter(r=>r.connectionId===e.usableConnectionId&&r.accounts.includes(t)&&(!n||r.methods.includes(`sui_signTransaction`)))}var KC=`sui-mcp.local-data`;yh();var qC=16*1024*1024,Q=N().uuid(),JC=P().int().nonnegative().safe(),YC=N().regex(/^[a-f0-9]{64}$/),XC=$f(`status`,[R({status:H(`no_file`)}).strict(),R({status:H(`receiving`)}).strict(),R({status:H(`checking`)}).strict(),R({status:H(`check_required`),message:N().min(1)}).strict(),R({status:H(`can_restore`)}).strict(),R({status:H(`cannot_restore`),reason:V([`invalid_backup`,`file_unavailable`,`wallet_request_unsettled`,`operation_busy`,`input_unavailable`,`check_failed`]),message:N().min(1)}).strict()]);R({fileId:Q,sha256:YC,totalSize:JC,dataEpoch:JC,userDataRevision:JC,check:XC}).strict();var ZC=$f(`kind`,[R({kind:H(`set_endpoint`),endpoint:V([`grpc`,`graphql`]),value:N().min(1)}).strict(),R({kind:H(`restore_endpoint`),endpoint:V([`grpc`,`graphql`])}).strict(),R({kind:V([`clear_read_address`,`export_local_data`,`download_backup`,`import_local_data`,`reset_local_data`,`restart_wallet_service`])}).strict()]),QC=V([`acknowledged`,`not_completed`,`unconfirmed`,`unsupported`]),$C=R({method:H(`ui/download-file`),code:H(-32601)}).strict(),ew=V([`acknowledged`,`cancelled`,`expired`,`server_restarted`,`data_replaced`,`source_unavailable`,`stored_locally`,`local_save_failed`]),tw=R({device:N().regex(/^\d+$/),inode:N().regex(/^\d+$/)}).strict(),nw=V([`not_published`,`target_conflict`,`source_unavailable`,`interrupted`]),rw=R({status:V([`needs_consent`,`saving`,`saved`,`failed`]),attemptId:Q,fileId:Q,sha256:YC,totalSize:JC,destination:N(),ownerId:N().min(1),currentSaveAttemptId:Q.optional(),attempts:L(R({saveAttemptId:Q,previousSaveAttemptId:Q.optional(),admittedAt:N().datetime(),allowPossibleCopy:F()}).strict()),sourceIdentity:tw.optional(),savedAt:N().datetime().optional(),failure:nw.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.`})});R({currentAttemptId:Q,attempts:L(R({attemptId:Q,admittedAt:N().datetime(),previousAttemptId:Q.optional(),hostReport:QC.optional(),failure:$C.optional()}).strict()).min(1),readyAt:N().datetime().optional(),expiresAt:N().datetime().optional(),endReason:ew.optional(),localSave:rw.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 iw=V([`settings_retry_download`,`settings_report_download`,`settings_cancel_download`,`settings_store_backup`]),aw=$f(`action`,[R({action:H(`settings_download_backup`),operationId:Q,attemptId:Q}).strict(),R({action:H(`settings_retry_download`),operationId:Q,fileId:Q,previousAttemptId:Q,attemptId:Q}).strict(),R({action:H(`settings_report_download`),operationId:Q,fileId:Q,attemptId:Q,status:QC,failure:$C.optional()}).strict().refine(e=>e.status===`unsupported`==(e.failure!==void 0),`Only unsupported downloads require the exact method failure.`),R({action:H(`settings_store_backup`),operationId:Q,fileId:Q,attemptId:Q,saveAttemptId:Q,previousSaveAttemptId:Q.optional(),allowPossibleCopy:F()}).strict(),R({action:H(`settings_cancel_download`),operationId:Q,fileId:Q,attemptId:Q}).strict(),R({action:H(`settings_select`),draft:ZC}).strict(),R({action:H(`settings_prepare`),operationId:Q}).strict(),R({action:H(`settings_begin_upload`),operationId:Q,name:N().min(1),totalSize:JC.max(qC),sha256:YC}).strict(),R({action:H(`settings_upload_chunk`),operationId:Q,fileId:Q,offset:JC.max(qC),chunkBase64:N()}).strict(),R({action:H(`settings_seal_upload`),operationId:Q,fileId:Q}).strict(),R({action:H(`settings_confirm`),operationId:Q,preparationId:Q}).strict(),R({action:H(`settings_back`),operationId:Q}).strict(),R({action:H(`settings_cancel`)}).strict()]),ow=R({outcome:V([`completed`,`failed`,`interrupted`,`superseded`]),recordedAt:N().datetime(),message:N().min(1),details:B(N(),I()).optional(),completionScope:H(`backup_snapshot`).optional()}).strict(),sw=R({storedValue:N(),effectiveValue:N(),source:V([`environment`,`local_db`,`builtin_default`]),pendingStoredValue:N().optional(),appliesAfter:H(`mcp_server_restart`).optional()}).strict(),cw=R({endpoint:V([`grpc`,`graphql`]),key:V([`suiGrpcUrl`,`suiGraphqlUrl`]),value:N().min(1),status:V([`saved`,`reset`]),storedValue:N(),effectiveValue:N(),source:sw.shape.source}).strict().refine(e=>e.key===(e.endpoint===`grpc`?`suiGrpcUrl`:`suiGraphqlUrl`),`The endpoint kind and preference key must agree.`),lw=P().int().nonnegative().safe(),uw=R({accounts:lw,reviewSessions:lw,reviewStateSnapshots:lw,reviewStatusTransitions:lw,reviewExecutions:lw,reviewRequests:lw,outcomeUnknownRequests:lw,externalActivityScans:lw,externalActivityTransactions:lw,localSettings:lw}).strict(),dw=R({status:H(`valid`),format:H(KC),network:H(`mainnet`),exportedAt:N().datetime(),currentCounts:uw,incomingCounts:uw,willReplace:H(!0),activeAccountChange:V([`unchanged`,`set`,`cleared`]),currentReadAddress:hb.nullable(),incomingReadAddress:hb.nullable(),restartRequiredAfterImport:F()}).strict(),fw=R({kind:H(`settings`),operationId:Q,phase:V([`draft`,`uploading`,`sealed`,`prepared`,`executing`,`stopping`,`starting`,`terminal`]),draft:ZC.optional(),preparationId:Q.optional(),preparation:B(N(),I()).optional(),file:R({fileId:Q,displayName:N(),totalSize:JC,receivedSize:JC,sha256:YC,sealed:F(),cleanup:V([`pending`,`complete`,`failed`])}).strict().optional(),download:R({availability:V([`preparing`,`available`,`ended`]),currentAttemptId:Q,hostReport:QC.optional(),previousUnconfirmed:F(),endReason:ew.optional(),expiresAt:N().datetime().optional(),remainingMs:JC.optional(),localSave:R({status:V([`needs_consent`,`saving`,`saved`,`failed`]),currentSaveAttemptId:Q.optional(),failure:nw.optional(),savedAt:N().datetime().optional()}).strict().optional(),allowedFileActions:L(iw)}).strict().optional(),restoreCheck:XC.optional(),backupLocation:R({directory:N().min(1),filename:N().min(1)}).strict().optional(),result:ow.optional(),temporaryFileCleanup:V([`pending`,`complete`,`failed`]).optional(),priorRunId:Q.optional(),nextRunId:Q.optional(),supersedesOperationId:Q.optional(),supersededByOperationId:Q.optional(),allowedActions:L(V(aw.options.map(e=>e.shape.action.value))),observe:F(),facts:R({server:R({name:N(),version:N(),network:H(`mainnet`)}).strict(),localSettings:R({suiGrpcUrl:sw,suiGraphqlUrl:sw}).strict(),readAddress:N().optional(),assetReadAccount:Yb,walletAvailability:Hb,connectionReconciliationRequired:H(!0).optional(),observedAt:N().datetime().optional(),counts:uw}).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`&&!dw.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=cw.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.`})}),pw=64*1024;function mw(e){return new TextEncoder().encode(JSON.stringify(e)).length}function hw(e){let t=pw-mw(e);return t>0?3*Math.floor(t/4):0}function gw(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=qC,t.params.arguments.input.chunkBase64=``,hw(t)}var _w={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`};yh();var vw=R({connectionId:N().min(1),pairingUri:N().startsWith(`wc:`),expiresAt:N().datetime()}).strict(),yw=V([`account`,`receipt`,`chart`,`connect`,`review`,`settings`]),bw=R({cardId:N().min(1),kind:yw,state:V([`ready`,`running`,`closed`]),revision:P().int().nonnegative(),createdAt:N().datetime(),expiresAt:N().datetime(),input:B(N(),I()),data:I().optional(),reason:V([`completed`,`expired`,`failed`,`server_restarted`,`cancelled`]).optional(),error:N().optional()}).strict().extend({pollAfterMs:P().int().positive(),inputRemainingMs:P().int().nonnegative()}),xw=R({transactionDigest:N().min(1),pureInputs:L(R({index:P().int().nonnegative(),bytes:N().regex(/^0x(?:[0-9a-f]{2})*$/i)}).strict()).refine(e=>new Set(e.map(e=>e.index)).size===e.length,`Duplicate input index.`),ptbGraph:R({mermaid:R({text:N(),namedText:N()}).strict()}).strict().optional()}).strict();yh();var Sw=`sui-mcp/card`,Cw=`sui-mcp/receipt-display`,ww=`sui-mcp/wallet-display`,Tw=`sui-mcp/settings-file`,Ew=`suimcp://cards/`,Dw=$f(`kind`,[R({kind:H(`account`),status:H(`input_required`),field:H(`account`),message:N().min(1)}).strict(),R({kind:H(`receipt`),status:H(`input_required`),field:H(`digest`),message:N().min(1)}).strict()]),Ow=R({cardId:N().min(1),permission:N().min(1)}).strict();Ow.extend({revision:P().int().nonnegative(),input:B(N(),I())}).strict();var kw=xw.extend({cardId:N().min(1),revision:P().int().nonnegative(),attemptId:N().min(1).optional()}),Aw=vw.extend({cardId:N().min(1),revision:P().int().nonnegative()}),jw=R({attemptId:N().uuid().optional(),cardId:N().min(1),operationId:N().uuid(),fileId:N().uuid(),offset:P().int().nonnegative().safe(),totalSize:P().int().nonnegative().safe(),sha256:N().regex(/^[a-f0-9]{64}$/),chunkBase64:N()}).strict(),Mw={account:_w.uiOpenAccount,receipt:_w.uiOpenReceipt,chart:_w.uiOpenChart,read:_w.uiReadCard,submit:_w.uiSubmitCard,act:_w.uiActCard,readSettingsFile:_w.uiReadSettingsFile};function $(e){return typeof e==`object`&&e&&!Array.isArray(e)?e:void 0}function Nw(e){return e.kind!==`import_local_data`}function Pw(e,t,n){if(e.kind!==`settings`||t.kind!==`settings`||e.cardId!==t.cardId||t.state!==`ready`)return;let r=fw.safeParse(e.data),i=fw.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(Nw(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 Fw(e,t){let n=$(e);if(!n)throw Error(`The app did not provide a usable card response.`);if(n.structuredContent!==void 0)return n;if(Array.isArray(n.content))for(let e of n.content){let r=$(e);if(r?.type!==`text`||typeof r.text!=`string`)continue;let i;try{i=$(JSON.parse(r.text))}catch{continue}if(i?.ok!==void 0)return{...n,structuredContent:i};if(t===`chatgpt`&&i&&Array.isArray(i.content))return Fw(i,void 0)}return n}function Iw(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 Lw(e,t){let n;for(let r of Array.isArray(e.content)?e.content:[]){let e=$(r),i;if(e?.type===`resource_link`&&typeof e.uri==`string`&&e.uri.startsWith(`suimcp://cards/`)&&(i=e.uri),t===`Claude`&&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){if(t[1]!==t[3])throw Error(`The saved card links could not be matched to one card.`);i=t[2]}}if(i===void 0)continue;let a=i.slice(Ew.length);if(!a||encodeURIComponent(a)!==a||n!==void 0&&a!==n||e?.type===`resource_link`&&typeof e.name==`string`&&e.name.startsWith(`card_`)&&e.name!==`card_${a}`)throw Error(`The saved card links could not be matched to one card.`);n=a}return n}function Rw(e){let t=$(e.structuredContent),n=t?.ok===!0?Dw.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:bw.parse(i);a?.kind===`settings`&&fw.parse(a.data);let o=$(e._meta)?.[Cw],s=o===void 0?void 0:kw.parse(o);if(s&&!Iw(a,s))throw Error(`Transaction details do not match this saved result.`);let c=$(e._meta)?.[ww],l=c===void 0?void 0:Aw.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 zw(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 Wv({name:`sui-mcp-card`,version:`0.6.0`},{},{autoResize:!0,strict:!0}),d=new AbortController,f=e===`connect`||e===`review`,p=e===`settings`,m=f||p,h=!1,g,_,ee,v,y,te,ne,re=!1,ie=!1,ae,b,x={status:`unconfirmed`},oe,S,se,C,ce,le=`continue`,ue,de,fe=0,w=0,pe,me,he,T,E,ge,D,_e,ve=!1;function ye(){if(!C||!v)return;let{input:e,basis:t}=C,n=$(v.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 v.state===`running`||v.reason===`completed`?C.delivery===`rejected`?`past`:`observed`:v.state===`closed`?`past`:`active`;if(e.walletRunId&&e.walletRunId!==$(n?.walletAvailability)?.walletRunId&&e.walletRunId!==n?.acceptedWalletRunId)return`past`;switch(e.action){case`connect`:if(v.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(v.reason===`cancelled`)return`observed`;break;case`disconnect`:if(o&&o.connectionId===e.connectionId&&(o.pendingAction===`disconnect`||v.state!==`ready`&&o.status===`disconnected`))return`observed`;break;case`use_account`:if(v.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`;break}return be()||typeof n?.actionRemainingMs==`number`&&n.actionRemainingMs<=0||[`connect`,`disconnect`,`use_account`,`cancel`,`prepare_review`,`request_signature`].includes(String(e.action))&&(v.state!==`ready`||a?.status===`expired`)?`past`:`active`}function be(){let e=HC.safeParse(C?.input);if(!e.success||e.data.action!==`disconnect`&&e.data.action!==`use_account`)return!1;let t=e.data,n=WC.safeParse(v?.data);if(!n.success)return!1;let r=n.data.connections.find(e=>e.connectionId===t.connectionId);return r?t.action===`disconnect`?n.data.walletAvailability.status===`available`&&!r.pendingAction&&!n.data.manageableConnectionIds.includes(t.connectionId)&&[`disconnected`,`failed`,`rejected`,`stopped`,`expired`].includes(r.status):[`disconnected`,`failed`,`rejected`,`stopped`,`expired`].includes(r.status)||t.action===`use_account`&&r.status===`connected`&&!r.accounts.includes(t.account):!1}function xe(){if(!C)return;let e=ye();e&&C.disposition!==`observed`&&(e!==`active`||C.disposition===`active`)&&(C.disposition=e),C.disposition===`observed`&&(C.retryRequired=!1)}function Se(){let e=UC.safeParse($(v?.data)?.automaticAction);return C?.retryRequired&&e.success&&C.input.action===e.data.action?e.data:void 0}function Ce(e){let t={connect:`connection request`,prepare_review:`review update`,request_signature:`wallet approval request`,read_result:`transaction status check`,cancel:`cancellation request`,stop_connection:`request to stop connecting`,stop_waiting:$($(e.basis.data)?.request)?.requestStatus===`awaiting_signature`?`request to stop wallet approval`:`request to stop checking the result`,disconnect:`wallet disconnect request`,use_account:`account selection`};return f?t[String(e.input.action)]??`request`:`data request`}function we(e){if(e!==`past`||!C)return;let t=Ce(C),n=C.input.action===`read_result`&&$($(v?.data)?.request)?.requestStatus===`outcome_unknown`?` To check this transaction again, ask to open its result in chat.`:``;return`Message from an earlier ${t}: “${C.message}”${n}`}let Te,Ee;function De(){let t=$(v?.data),n=p?$(t?.download):void 0,r=Array.isArray(n?.allowedFileActions)?n.allowedFileActions:[],i=[...Array.isArray(t?.allowedActions)?t.allowedActions:[],...r.filter(e=>e===`settings_report_download`||Te===void 0||Date.now()<Te)],a=e===`review`&&t?.mode===`review`&&!t.request&&!!g&&v?.state===`ready`,o=a&&pe!==void 0&&Date.now()>=pe,s=document.visibilityState!==`hidden`,c=d.signal.aborted||x.status===`rejected`,l=x.status===`confirmed`,u=C?.disposition,ee=u===`active`,y=C?.retryRequired===!0,te=C?.input.action===`request_signature`&&u===`active`,ne=le===`paused`,ie=ge?.pending?.()===!0,ae=ge?.displayRecovery?.(),fe=l&&!c&&!S&&!ie&&!o&&!!g,me=fe&&!ce&&!h&&(!m||!(ue&&(ee||y||ne))),he=UC.safeParse(t?.automaticAction),T=p?$(n?.localSave):void 0,E=!!v&&(m?t?.observe===!0||T?.status===`saving`:v.state===`running`),D=!!_&&re&&!c&&!ue&&s&&(de===`explicit`||x.status!==`read_failed`&&(de===`background`||x.status===`needed`&&x.automatic)),_e=s&&fe&&!oe&&!ue&&!de&&!ce&&!y&&!te&&!ne&&f&&he.success&&i.includes(he.data.action)?he.data:void 0,ve=$(t?.restoreCheck),ye=p&&fe&&v?.state===`ready`&&!ce&&!h&&!t?.result&&t?.observe!==!0&&(ve?.status===`cannot_restore`&&[`operation_busy`,`wallet_request_unsettled`].includes(String(ve.reason))||!i.includes(`settings_select`)||!i.includes(`settings_download_backup`)||t?.phase===`prepared`&&!i.includes(`settings_confirm`)||t?.phase===`draft`&&$(t.draft)?.kind!==void 0&&$(t.draft)?.kind!==`import_local_data`&&!i.includes(`settings_prepare`)),be;!c&&_&&(x.status===`read_failed`||oe||x.status===`unconfirmed`?be=`read`:x.status===`needed`?x.automatic||(be=`read`):S||ae||p&&[`pending`,`failed`].includes(String(t?.temporaryFileCleanup))||T?.status===`saving`||T?.status===`needs_consent`&&!i.includes(`settings_store_backup`)||T?.status===`failed`&&T.failure===`not_published`&&!n?.endReason&&!i.includes(`settings_store_backup`)||ye?be=`read`:g?$(t?.progress)?.status===`unavailable`||$(t?.walletAvailability)?.status===`initializing`&&$(t?.walletAvailability)?.stage===`state_sync`?be=`read`:!ne&&Se()?be=`retry`:ee&&!E&&!(ne&&i.length>0)&&!(C?.input.action===`prepare_review`&&i.includes(`prepare_review`)&&t?.automaticAction===void 0)&&f&&(be=`read`):(v?.state!==`closed`||S)&&(be=`read`));let xe=f?t?.actionRemainingMs:v?.inputRemainingMs;be===`retry`&&o&&(be=`read`);let Ee=f?t?.nextStateReadAfterMs:p&&Te!==void 0?Math.max(0,Te-w):void 0,De=[(f?i.length>0:v?.state===`ready`)?xe:void 0,Ee].filter(e=>typeof e==`number`&&Number.isFinite(e)&&e>0),Oe=!c&&!!g&&s&&!b&&!oe&&x.status!==`read_failed`,ke=$(t?.review),Ae=a&&!c&&!oe&&!S&&!ee&&!y&&!ne&&x.status!==`read_failed`&&(ie||ce?.input.action===`prepare_review`||ke?.preparing===!0||he.success&&he.data.action===`prepare_review`||x.status===`needed`&&ke?.status===`ready_for_wallet_review`);return{current:l,inputEnabled:me,permitted:i,disposition:u,read:D,auto:_e,recover:be,paused:ne,partialDisplayFailure:ae,settingsInputBlocked:ye,reviewUpdatePending:Ae,reviewCommandDeliveryFailed:ee&&C?.input.action===`prepare_review`,reviewHint:o?void 0:Ae?ie||ke?.preparing||ce?.input.action===`prepare_review`?`Updating review…`:`Checking status…`:a&&$(ke?.state)?.refreshReason===`review_evidence_stale`?`Review details are out of date.`:void 0,errors:[x.status===`rejected`?x.message:x.status===`read_failed`?`This card's status could not be checked. Reported message: “${x.message}”`:void 0,oe&&x.status!==`rejected`?`This card could not be opened. Reported message: “${oe}”`:void 0,ee&&C?`Message for this ${Ce(C)}: “${C.message}”`:void 0,S,ae?.message],note:[se,we(u)].filter(Boolean).join(` `),expiryAt:Oe&&l&&De.length?w+Math.min(...De):void 0,poll:Oe&&(E||x.status===`needed`&&!x.automatic),lifetimeAt:!c&&s&&a?pe:void 0}}function Oe(e){return e.recover===`retry`?C?.input.action===`connect`?`Retry connection`:`Retry review`:e.recover===`read`?`Check status`:void 0}function ke(e){if(d.signal.aborted)return``;let n=e.errors.some(Boolean)||e.recover!==void 0||!!v&&!g&&v.state!==`closed`||v?.state===`closed`&&v.reason!==`completed`,r=e.errors.some(Boolean)||x.status!==`confirmed`||e.recover===`retry`||e.settingsInputBlocked;if(n&&r&&x.status!==`rejected`){if(ue||e.read)return`Checking status…`;let t=Oe(e);if(t)return t===`Check status`?S||e.partialDisplayFailure?`Use Check status to read this card and try displaying it again.`:`Use Check status to read this card again.`:t===`Retry connection`?`Use Retry connection to try connecting your wallet again.`:`Use Retry review to try again with the displayed wallet and account.`;if(Ae(e)&&ge?.selectionHint)return ge.selectionHint}return t.guidance?.(v,{confirmed:e.current,readOnly:!g,recoveryNeeded:n,visibleConfirmation:ge?.visibleConfirmation?.(),commandPending:m&&ce&&e.current&&!e.errors.some(Boolean)&&(ce.phase===`confirming`||v?.state===`ready`&&!$(v.data)?.runtimeRecovery&&!$(v.data)?.request&&!$($(v.data)?.review)?.preparing)?{phase:ce.phase,action:String(ce.input.action)}:void 0,approvalUnresolved:C?.input.action===`request_signature`&&e.disposition===`active`||ce?.input.action===`request_signature`,automaticPaused:e.paused})??``}function Ae(e=De()){return e.inputEnabled&&v?.state===`ready`&&ve}function je(e,t=De()){return m&&t.inputEnabled&&(e?t.permitted.includes(e.action):t.permitted.length>0)}function O(e){let t=De();return p&&h&&t.current&&!!g&&!ce&&!ue&&!S&&!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=$(v?.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`,v?(r.textContent=t.titleFor?.(v)??t.title,i.textContent=x.status===`rejected`?`Card unavailable`:!e.current&&v.state===`ready`?_?``:!d.signal.aborted&&(ue||e.read)?`Checking whether actions are available in this card…`:`Actions are unavailable until this card's status is checked.`:!g&&v.state!==`closed`?`View only.`:m?$(u?.progress)?.status===`unavailable`?`Current progress is unavailable. The last recorded state is shown.`:!u?.request&&v.state===`closed`&&[`expired`,`server_restarted`,`cancelled`].includes(v.reason??``)?`This card no longer accepts actions.`:``:v.state===`running`?`Reading the requested data…`:v.reason===`completed`?``:v.error??(v.reason===`expired`?`The time to make a selection has ended.`:v.reason===`server_restarted`?`This request ended when Sui MCP restarted.`:``)):i.textContent=b?``:x.status===`read_failed`?`Card status unavailable`:oe||x.status===`rejected`?`Card unavailable`:`Opening card…`,i.hidden=!i.textContent,a.textContent=[...new Set(e.errors.filter(Boolean))].join(` `),a.hidden=!a.textContent;let ee=s.querySelector(`.review-status`);ee&&(ee.hidden=!!_&&(e.reviewUpdatePending||!!a.textContent));let y=s.querySelector(`.review-material-status`);if(y&&(y.textContent=y.dataset.previous===`true`||!e.current||e.reviewUpdatePending?y.dataset.previousLabel??``:y.dataset.currentLabel??``),o.textContent=[e.note,ke(e)].filter(Boolean).join(` `),o.hidden=!o.textContent,ve)for(let t of s.querySelectorAll(`input, button, select`))(!m||t.tagName!==`BUTTON`||t.dataset.cardAction!==void 0)&&(t.disabled=m?!je(void 0,e):!Ae(e));if(m)for(let t of s.querySelectorAll(`[data-card-action]`))t.disabled=!je({action:t.dataset.cardAction},e);if(p)for(let t of s.querySelectorAll(`[data-settings-file-action]`))t.disabled=t.dataset.settingsLocalBlocked===`true`||!(h?O({action:t.dataset.cardAction}):je({action:t.dataset.cardAction},e));_&&(e.reviewUpdatePending||_.dataset.cardAction===`request_signature`&&e.reviewCommandDeliveryFailed||_.dataset.cardAction===void 0)&&(_.disabled=!0),E&&(E.disabled=!!ce||!!ue)}function Ne(e){try{e?.()}catch{S=`The card display could not be closed cleanly. Its stored information is unchanged.`}}function Pe(e){if(!v||d.signal.aborted)return;if(v.state===`ready`&&x.status!==`confirmed`){if(p&&ge?.update)try{ge.update(v,{automaticPaused:le===`paused`,settings:k,settingsCommandProgress:void 0,onDisplayChange:()=>ze()})}catch{S=`This card could not be displayed. Its stored information is unchanged.`}return}if(v.state===`running`&&!m){S=void 0;return}let n=m?{...$(v.data),actionRemainingMs:void 0,nextStateReadAfterMs:void 0,...p&&$(v.data)?.download?{download:{...$($(v.data)?.download),remainingMs:void 0}}:{}}:void 0,r=p&&ce?.phase===`sending`&&x.status===`confirmed`?Pw(ce.basis,v,ce.input):void 0,i=`${le===`paused`}:${JSON.stringify(r)}:${v.revision}:${g!==void 0}:${y!==void 0}:${ne!==void 0}:${JSON.stringify(n)}`;if(i===D||i===_e&&!e)return;_e=i;let a=[...s.children],o=new Set([...s.querySelectorAll(`details`)].filter(e=>e.open).map(e=>e.querySelector(`summary`)?.textContent)),c,l=!1,u=!1;try{let e={automaticPaused:le===`paused`,onDisplayChange:()=>ze(),...p?{settings:k,settingsCommandProgress:r}:{}};if(ge?.update?.(v,e)){D=i,S=void 0;return}if(v.state===`ready`&&g){let n=t.controls(v,e=>{Ke(e)},y,ne,e);c=`node`in n?n:{node:n},l=!0}else (m||v.reason===`completed`)&&v.data!==void 0&&(c=t.result(v,y,g?e=>{Ke(e)}:void 0,ne,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),S=`This card could not be displayed. Its stored information is unchanged.`;return}let f=ge?.dispose;ge=c,ve=l,D=i,S=void 0,Ne(f)}function Fe(t,n,r,i,a){if(d.signal.aborted||x.status===`rejected`)return!1;if(t.kind!==e||t.cardId!==_)throw x={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:UC.safeParse(o.automaticAction);if(l&&!l.success)throw Error(`This card could not start the next step.`);if(v&&t.revision<v.revision)return!1;if(ee&&[...new Set([...Object.keys(ee),...Object.keys(t.input)])].some(e=>JSON.stringify(t.input[e])!==JSON.stringify(ee[e])))throw x={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 x={status:`rejected`,message:`The saved result does not match the information requested in this card.`},Error(x.message);!ee&&(f||t.state!==`ready`)&&(ee={...t.input});let u=r!==`preview`;if((!v||t.revision!==v.revision)&&(y=void 0,ne=void 0),v=t,xe(),u){w=Date.now();let t=p?$(o?.download):void 0;if(t?.availability===`available`&&typeof t.remainingMs==`number`&&Number.isFinite(t.remainingMs)){let e=`${o?.operationId}:${$(o?.file)?.fileId}:${t.expiresAt}`;Ee!==e&&(Ee=e,Te=void 0),Te=Math.min(Te??1/0,w+Math.max(0,t.remainingMs))}else p&&t?.availability===`ended`&&(Te=void 0);g&&e===`review`&&o?.mode===`review`&&!o.request&&typeof o.actionRemainingMs==`number`&&Number.isFinite(o.actionRemainingMs)&&o.actionRemainingMs>=0&&(pe=Math.min(pe??1/0,w+o.actionRemainingMs))}return r===`read`&&(x.status!==`needed`||a>x.afterRead)&&(x={status:`confirmed`},oe=void 0),n&&(y=n),ne=i,!0}function Ie(){me!==void 0&&clearTimeout(me),he!==void 0&&clearTimeout(he),T!==void 0&&clearTimeout(T),me=void 0,he=void 0,T=void 0,l.hidden=!0}function Le(e){let t=Oe(e);E?.textContent!==t&&(E?.remove(),E=void 0,t&&(E=Kv(t,()=>{if(!(ue||ce||d.signal.aborted))if(De().recover===`retry`){let e=Se();e&&Ge(e)}else Re()})));let n=s.querySelector(`.review-primary-action`),r=s.querySelector(`.review-primary-slot`);n&&(n.hidden=!!E&&!!r),E&&(E.disabled=!!ue||!!ce,r?(E.classList.add(`review-recovery-action`),r.append(E)):(E.classList.remove(`review-recovery-action`),c.append(E)))}async function Re(){let e=ge,t=e?.displayRecovery?.(),n=await Ve(!0);n?.kind===`accepted`&&v===n.snapshot&&x.status===`confirmed`&&!d.signal.aborted&&document.visibilityState!==`hidden`&&!S&&e===ge&&t&&e?.displayRecovery?.()===t&&(t.retry(),ze())}function ze(e=!1){if(b){let e=document.createElement(`p`);e.className=`ui-note`,e.textContent=b,s.replaceChildren(e)}else Pe(e);let t=De();if(Me(t),Ie(),Le(t),d.signal.aborted||x.status===`rejected`)return;t.expiryAt!==void 0&&(he=setTimeout(()=>{Be(),ze()},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)T=setTimeout(r,Math.min(1e3,t));else{let e=De();Me(e),Le(e)}};r()}if(t.poll&&v){let e=w+v.pollAfterMs-Date.now();me=setTimeout(()=>{Ve(!1)},e>0?e:v.pollAfterMs)}t.read?(de=void 0,He()):t.auto&&(me=setTimeout(()=>{let e=De().auto;e&&Je(e,`automatic`)},0))}function Be(){x.status!==`rejected`&&x.status!==`read_failed`&&(x={status:`needed`,afterRead:fe,automatic:!0})}function Ve(e){return d.signal.aborted||x.status===`rejected`||!_||!re?Promise.resolve(void 0):ue?ue.promise:x.status===`read_failed`&&!e?Promise.resolve(void 0):(de=e?`explicit`:`background`,ze(),ue?.promise??Promise.resolve(void 0))}function He(){let e=++fe,t=performance.now(),n={id:e,promise:Promise.resolve().then(async()=>{try{let n,r,i;if(g){let e=Rw(await Ue(Mw.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=`${Ew}${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=bw.parse(JSON.parse(t.text));let i=y??te;r=i&&Iw(n,i)?i:void 0}if(d.signal.aborted||x.status===`rejected`)return{kind:`disposed`,id:e};let a=Fe(n,r,`read`,i,e);return te=void 0,!a&&x.status===`needed`&&e>x.afterRead&&(x={...x,automatic:!1}),ze(a),a&&x.status===`confirmed`?{kind:`accepted`,snapshot:n,id:e,requestStartedAt:t}:{kind:`ignored`,id:e}}catch(t){return d.signal.aborted?{kind:`disposed`,id:e}:(x.status!==`rejected`&&(x={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(()=>{ue===n&&(ue=void 0),ze()})};ue=n,ze()}async function Ue(e,t){return Fw(await u.callServerTool({name:e,arguments:t},{signal:d.signal}),u.getHostVersion()?.name)}function We(e,t,n){let r=WC.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&&GC(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 Ge(e){if(!v||ue||!je(e))return;let t={input:e,basis:v,phase:`confirming`};ce=t;let n=await Ve(!1);ce===t&&(ce=void 0,n?.kind===`accepted`&&v===n.snapshot&&x.status===`confirmed`&&!d.signal.aborted&&document.visibilityState!==`hidden`&&We(e,t.basis,n.snapshot)&&je(e)?await Je(e):x.status!==`read_failed`&&x.status!==`rejected`&&!d.signal.aborted&&(se=`The card state changed. Check the current selection before trying again.`),ze())}async function Ke(e){f&&(C?.disposition===`active`||C?.retryRequired||le===`paused`)?await Ge(e):await Je(e)}function qe(e,t,n){C={input:e.input,basis:e.basis,message:t,delivery:n,disposition:`active`,retryRequired:e.input.action===`connect`||e.input.action===`prepare_review`},xe(),[`cancel`,`disconnect`,`stop_connection`,`stop_waiting`,`use_account`].includes(String(e.input.action))&&(le=`paused`),(m||n===`unknown`)&&Be()}async function Je(e,t=`user`){if(!v||!g||(t===`file`?!O(e):m?!je(e):!Ae()))return;let n={input:e,basis:v,phase:`sending`};ce=n,le=`continue`,(t===`user`||C?.disposition!==`past`)&&(C=void 0),se=void 0,ze();try{let t=Rw(await Ue(m?Mw.act:Mw.submit,{...g,revision:n.basis.revision,input:e}));if(d.signal.aborted||x.status===`rejected`)return;if(!t.snapshot)throw Error(t.error??`The request could not be confirmed.`);t.error&&qe(n,t.error,`rejected`),Fe(t.snapshot,t.display,`action`,t.wallet)}catch(e){!d.signal.aborted&&x.status!==`rejected`&&(qe(n,e instanceof Error?e.message:`The request could not be confirmed.`,`unknown`),C&&(C.data=$(e)?.data))}finally{ce===n&&(ce=void 0),ze()}}let k={uploadChunkLimit(e,t){return g?gw({jsonrpc:`2.0`,id:2**53-1,method:`tools/call`,params:{name:Mw.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 Ve(!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?!O(e):!je(e))throw Error(`This Settings action is unavailable until its current status has been checked.`);if(await Je(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(!v)throw Error(`The current Settings status could not be checked.`);return v},setFileTransferActive(e){h=e,ze()},async readFile(e){if(!g||!_||!De().current||d.signal.aborted)throw Error(`Backup read permission is unavailable.`);let t=await Ue(Mw.readSettingsFile,{...g,...e}),n=jw.parse($(t._meta)?.[Tw]);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=$($(v?.data)?.download);if(!g||!De().current||d.signal.aborted||document.visibilityState===`hidden`||r&&(r.currentAttemptId!==n||r.localSave||r.availability!==`available`||Te===void 0||Date.now()>=Te))throw Error(`This download is no longer available in this card.`);try{return{isError:(await u.downloadFile({contents:[{type:`resource`,resource:{uri:`file:///${encodeURIComponent(e)}`,mimeType:`application/json`,blob:t}}]},{signal:d.signal})).isError}}catch(e){if(e&&typeof e==`object`&&`code`in e&&e.code===-32601)return{unsupported:!0};throw e}}};async function Ye(){if(!(!re||ae===void 0||ie)){ie=!0;try{let t=Fw(ae,u.getHostVersion()?.name),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?.[Sw];if(r!==void 0){let e=Ow.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=Rw(t);if(i.inputRequired){if(i.inputRequired.kind!==e||g)throw Error(`The app provided inconsistent card input information.`);b=i.inputRequired.message,ze();return}let a=Lw(t,u.getHostVersion()?.name),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 x={status:`rejected`,message:`The returned information does not match this card.`},Error(x.message);_=o[0];let s=i.snapshot;s&&(f||s.state!==`ready`)&&(ee={...s.input}),te=i.display,s&&g&&Fe(s,i.display,`preview`,i.wallet),Be(),ze()}catch(e){if(d.signal.aborted)return;oe=e instanceof Error?e.message:`Card data could not be read.`,ze()}}}u.ontoolresult=e=>{if(ae===void 0){ae=e,Ye();return}try{let t=Rw(Fw(ae,u.getHostVersion()?.name)).snapshot??v,n=Rw(Fw(e,u.getHostVersion()?.name)).snapshot;if(t&&n&&(t.cardId!==n.cardId||t.kind!==n.kind))throw Error(`The app returned a different card.`)}catch{x={status:`rejected`,message:`The returned information does not match this card.`},ze()}},u.onhostcontextchanged=e=>{e.theme&&(document.documentElement.dataset.theme=e.theme)};let Xe=()=>{document.visibilityState!==`hidden`&&g&&ie&&x.status!==`read_failed`?Ve(!1):ze()};document.addEventListener?.(`visibilitychange`,Xe),u.onteardown=async()=>{if(d.signal.aborted)return{};d.abort(),ce=void 0,document.removeEventListener?.(`visibilitychange`,Xe);let e=ge?.dispose;return ge=void 0,Ne(e),ze(),{}},u.connect().then(()=>{d.signal.aborted||(re=!0,document.documentElement.dataset.theme=u.getHostContext()?.theme??`light`,Ye())}).catch(()=>{d.signal.aborted||(oe=`Could not connect this card to the app.`,ze())})}function Bw(e){let t=``;for(let n of e)t+=String.fromCharCode(n);return btoa(t)}function Vw(e){let t=atob(e),n=Uint8Array.from(t,e=>e.charCodeAt(0));if(Bw(n)!==e)throw Error(`Part of the backup could not be read correctly.`);return n}async function Hw(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=sb(tx(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=fw.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:Bw(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=fw.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=fw.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 Uw(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=Vw(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||sb(tx(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=fw.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,Bw(i),e.attemptId):t.download(e.displayName,Bw(i))),o=a.unsupported===!0?`unsupported`:a.isError===!0?`not_completed`:`acknowledged`;return r()&&n(o),o}catch{return r()&&n(`unconfirmed`),`unconfirmed`}}var Ww={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`},Gw={overview:`Settings`,address:`Address for viewing assets`,records:`Local records`,troubleshooting:`Troubleshooting`,advanced:`Advanced settings`},Kw={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.`},qw=`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.`,Jw=`Fully quit every app using Sui MCP, then reopen them. Closing a window or quitting only one app may leave Sui MCP running.`,Yw={available:`Ready`,initializing:`Starting`,recovering:`Restarting`,unavailable:`Unavailable`},Xw={environment:`App launch settings`,local_db:`Saved in Sui MCP`,builtin_default:`Built-in default`},Zw={connected:`Connected`,awaiting_approval:`Waiting for wallet approval`,rejected:`Rejected`,failed:`Failed`,expired:`Expired`,stopped:`Stopped`,disconnected:`Disconnected`},Qw=[[`accounts`,`Saved addresses`],[`reviewSessions`,`Reviews`],[`reviewRequests`,`Transaction requests`],[`outcomeUnknownRequests`,`Transaction requests with unconfirmed results`],[`externalActivityTransactions`,`Activity records`],[`localSettings`,`Saved network settings`]],$w={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?`},eT={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 tT(e){return e&&typeof e==`object`&&!Array.isArray(e)?e:{}}function nT(e){return e===`clear_read_address`?`address`:e===`set_endpoint`||e===`restore_endpoint`?`advanced`:e===`restart_wallet_service`?`troubleshooting`:e?`records`:`overview`}function rT(e,t,n){let r=tT(t);e.append(J(`h3`,void 0,n));for(let[t,n]of Qw)typeof r[t]==`number`&&e.append(Y(n,String(r[t])))}function iT(e,t,n){let r=fw.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,_,ee=J(`div`,`settings-card`),v=(e,n,r=`secondary`)=>{let i=Kv(e,()=>{!o&&!u&&t?.(n)},r);return i.dataset.cardAction=String(n.action),i},y=(e,t)=>{let n=Kv(e,()=>{if(o)return;let e=a.kind===`section`?a.page:nT(a.operation);a=t,C(),(t.kind===`section`&&t.page===`overview`?[...ee.querySelectorAll(`.settings-menu-item`)].find(t=>t.dataset.settingsPage===e):ee.querySelector(`.settings-back`))?.focus(),c?.()},`secondary`);return n.setAttribute(`aria-label`,e),n.dataset.settingsPage=t.kind===`section`?t.page:nT(t.operation),n},te=(e,n,i=!1,s=!1)=>{let d=Kv(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 ne(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 re(e){let t=J(`div`,`settings-action-row`);return t.setAttribute(`aria-label`,`Settings operation actions`),t.append(e),t}async function ie(){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&&ie()}})}finally{o||(s.setFileTransferActive(!!p),C(),c?.())}}function ae(){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};Uw(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 ie())}).finally(()=>{p===e&&(p=void 0,u=!1),o||(s?.setFileTransferActive(!!p),C(),c?.())})}function b(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?.(),ae())}).catch(()=>{p===i&&(p=void 0,u=!1),o||(s?.setFileTransferActive(!1),C(),c?.())})}function x(e,t,n,r=!1){let i=Kv(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 oe(e){let n=r.download,i=r.draft?.kind===`download_backup`?r.file:void 0;if(!S(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(x(`Retry download`,`settings_retry_download`,()=>b(!0),!!p||!!m))}t&&s&&r.file&&n?.allowedFileActions.includes(`settings_cancel_download`)&&e.append(x(`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 S(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(x(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=Qv(`Details`);if(r.facts&&a.body.append(Y(`Version`,r.facts.server.version)),a.body.append(Y(`Settings request ID`,$v(r.operationId))),i&&i.kind===r.draft?.kind&&r.file&&a.body.append(Y(`File SHA-256`,$v(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=tT(r.preparation.preview);rT(a.body,e.currentCounts,`Checked local records`),rT(a.body,e.incomingCounts,`Backup records`),a.body.append(Y(`Default address before restoring`,typeof e.currentReadAddress==`string`?$v(e.currentReadAddress):`Not selected`),Y(`Default address in this backup`,typeof e.incomingReadAddress==`string`?$v(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`,Xw[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`,$v(r.preparation.walletRunId)));for(let e of n.connections)a.body.append(Y(`${e.walletName??`Wallet`} connection ID`,$v(e.connectionId)));for(let e of n.requests)a.body.append(Y(`Transaction request ID`,$v(e.attempt_id)),Y(`Recorded request status`,e.request_status))}e.append(a.details)}function C(e=!1){let n=ee.querySelector(`details`)?.open===!0,m=e?[...ee.querySelectorAll(`input`)].filter(e=>e.type!==`file`).map(e=>e.value):void 0,h=Zv(),ie=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,ae=r.result||r.restoreCheck?.status===`can_restore`||r.restoreCheck?.status===`cannot_restore`&&[`invalid_backup`,`file_unavailable`,`input_unavailable`].includes(r.restoreCheck.reason),S=r.restoreCheck?.status===`checking`||!ae&&(ie?.kind===`backup_check_response`||_?.progress?.stage===`checking`),ce=[`executing`,`stopping`,`starting`].includes(r.phase)||S,le=r.draft?.kind===`import_local_data`&&r.restoreCheck?.status===`can_restore`,ue=p?.phase===`admitting`,de=ue?`progress`:r.result?`result`:ce?`progress`:a.kind===`section`?`section`:r.phase===`prepared`&&(r.draft?.kind!==`import_local_data`||le)?`confirmation`:`input`,fe=a.kind===`section`?a.page:nT(a.operation),w=ue?{kind:`download_backup`}:de===`section`?void 0:r.draft,pe=w?nT(w.kind):fe,me=w?.kind===`restart_wallet_service`&&r.preparation?.impact?Gb.parse(r.preparation.impact):void 0,he=de===`result`||de===`progress`?g??2:de===`confirmation`?3:de===`input`?2:pe===`overview`?0:1;h.classList.add(`settings-page`),g!==void 0&&he!==g&&h.classList.add(he>g?`settings-page--forward`:`settings-page--back`),g=he;let T=J(`nav`,`settings-toolbar`);if(T.setAttribute(`aria-label`,`Settings navigation`),ee.dataset.settingsPage=pe,de===`confirmation`&&w&&t&&r.allowedActions.includes(`settings_back`)){let e=`Back to ${Ww[w.kind]}`,n=Kv(e,()=>{o||u||(a={kind:`operation`,operation:w.kind},t({action:`settings_back`,operationId:r.operationId}))},`secondary`);n.dataset.cardAction=`settings_back`,n.setAttribute(`aria-label`,e),n.classList.add(`settings-back`),T.append(n)}else if(de===`input`&&w&&t){let e=y(`Back to ${Gw[pe]}`,{kind:`section`,page:pe});e.classList.add(`settings-back`),T.append(e)}else if(de===`section`&&pe!==`overview`){let e=y(`Back to Settings`,{kind:`section`,page:`overview`});e.classList.add(`settings-back`),T.append(e)}let E=J(`span`,`settings-location`,[`Settings`,...pe===`overview`?[]:[Gw[pe]],...w?[Ww[w.kind]]:[],...de===`result`?[`Result`]:de===`progress`?[w?.kind===`download_backup`?`Downloading`:S?`Checking backup`:`Applying change`]:de===`confirmation`?[`Confirm`]:[]].join(` / `));if(E.setAttribute(`aria-current`,`page`),T.append(E),h.append(T),w?.kind===`download_backup`)oe(h);else if(de===`result`&&r.result){h.append(J(`p`,r.result.outcome===`failed`?`ui-error`:`ui-note`,r.result.message));let e=tT(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`,Jw))),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=Kv(`Download this backup`,()=>{o||!s||!r.file||u||(u=!0,e.disabled=!0,Uw({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(de===`progress`){let e=J(`p`,`ui-note`,S?`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(de===`confirmation`&&r.draft){if(h.append(J(`h2`,void 0,$w[r.draft.kind])),le&&r.file&&h.append(Y(`Backup file`,r.file.displayName)),r.draft.kind===`set_endpoint`||r.draft.kind===`restore_endpoint`){let e=tT(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`,qw)),r.draft.kind===`reset_local_data`||r.draft.kind===`import_local_data`){le?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=tT(r.preparation?.preview);if(r.draft.kind===`import_local_data`){let t=tT(e.currentCounts),n=tT(e.incomingCounts);h.append(J(`h3`,void 0,`Records to replace (now → backup)`));for(let[e,r]of Qw)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`?$v(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 rT(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=me??Gb.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`,Zw[t.status]));for(let e of t.accounts)h.append(Y(`Recorded wallet address`,$v(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(re(v(eT[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(w){let e;if(h.append(J(`h2`,void 0,Ww[w.kind])),pe===`records`&&h.append(J(`p`,`ui-note`,qw)),w.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&&!S&&!ae){let e=J(`p`,`ui-note`,_.progress.stage===`reading`?`Reading the selected file…`:`Receiving backup…`);e.setAttribute(`role`,`status`),h.append(e)}let n=Yv({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,Hw(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(Xv(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=v(`Check backup again`,{action:`settings_prepare`,operationId:r.operationId},`primary`)),t&&h.append(te(`Change backup file`,{kind:`import_local_data`},!1,!0)))}else{if(w.kind===`set_endpoint`||w.kind===`restore_endpoint`){let e=w.endpoint===`grpc`?r.facts?.localSettings.suiGrpcUrl:r.facts?.localSettings.suiGraphqlUrl;h.append(Y(`Network setting`,w.endpoint===`grpc`?`Sui node (gRPC)`:`Activity data (GraphQL)`)),e&&h.append(Y(`Current saved address`,e.storedValue)),w.kind===`set_endpoint`?h.append(Y(`Selected network address`,w.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 w.kind===`clear_read_address`?h.append(Y(`Default address for viewing assets`,r.facts?.readAddress?$v(r.facts.readAddress):`Not selected`),J(`p`,`ui-note`,`Clearing this default does not disconnect your wallet or change wallet approvals.`)):w.kind===`restart_wallet_service`?(r.facts&&h.append(Y(`Wallet connection service`,Yw[r.facts.walletAvailability.status])),r.facts?.connectionReconciliationRequired&&h.append(J(`p`,`ui-error`,Jb)),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.`))):w.kind===`export_local_data`?h.append(J(`p`,`ui-note`,`Review the local records to save, then create the backup file.`)):w.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=v(`Continue`,{action:`settings_prepare`,operationId:r.operationId},`primary`))}e&&h.append(re(e))}else{if(h.append(J(`h2`,void 0,fe===`overview`?`Choose a section`:Gw[fe])),fe===`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`,Jb));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=y(Gw[e],{kind:`section`,page:e});n.classList.add(`settings-menu-item`),n.setAttribute(`aria-label`,Gw[e]),n.textContent=``,n.append(J(`span`,`settings-menu-title`,Gw[e]),J(`span`,`settings-menu-description`,Kw[e])),t.append(n)}if(h.append(t),r.draft){let e=J(`div`,`settings-pending`);e.append(J(`p`,`ui-note`,`Unfinished change: ${Ww[r.draft.kind]}.`),y(`Resume`,{kind:`operation`,operation:r.draft.kind})),h.append(e)}}else if(fe===`address`)h.append(Y(`Default address for viewing assets`,r.facts?.readAddress?$v(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(te(`Clear default address`,{kind:`clear_read_address`}));else if(fe===`records`)h.append(J(`p`,`ui-note`,qw)),t&&h.append(ne(`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.`,x(`Download backup`,`settings_download_backup`,()=>b(!1))),ne(`Restore`,`Choose a Sui MCP backup. It will be checked automatically before you confirm the restore.`,te(`Restore local records`,{kind:`import_local_data`})),ne(`Reset`,`Review the local records and stored settings to delete. This does not cancel transactions on Sui.`,te(`Reset local data`,{kind:`reset_local_data`},!0)));else if(fe===`troubleshooting`)r.facts&&(h.append(Y(`Wallet connection service`,Yw[r.facts.walletAvailability.status])),r.facts.connectionReconciliationRequired&&h.append(J(`p`,`ui-error`,Jb)),r.facts.observedAt&&h.append(Y(`Status checked at`,ey(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(te(`Restart connection service`,{kind:`restart_wallet_service`}));else if(fe===`advanced`&&r.facts)for(let e of[`grpc`,`graphql`]){let n=e===`grpc`?r.facts.localSettings.suiGrpcUrl:r.facts.localSettings.suiGraphqlUrl,i=Yv({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(Xv(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=Kv(`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(qv(n,te(`Select default network address`,{kind:`restore_endpoint`,endpoint:e})))}n.appliesAfter&&a.append(J(`p`,`ui-note`,`A saved change needs an app restart. Fully quit every app using Sui MCP, then reopen them. Closing a window or quitting only one app may leave Sui MCP running.`)),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)}fe!==`overview`&&r.draft&&fe===nT(r.draft.kind)&&h.append(J(`p`,`ui-note`,`Unfinished change: ${Ww[r.draft.kind]}.`),y(`Resume`,{kind:`operation`,operation:r.draft.kind})),t&&fe===`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(Jv(v(`Close Settings`,{action:`settings_cancel`}))))}if(ie?.kind===`preparation_response`&&!r.result&&!ce){let e=J(`p`,`ui-note`,`Waiting for a response…`);e.setAttribute(`role`,`status`),h.append(e)}l&&de===`input`&&w?.kind===`import_local_data`&&h.append(J(`p`,`ui-note`,l.message)),se(h,pe,me,w),ee.replaceChildren(h),m&&[...ee.querySelectorAll(`input`)].filter(e=>e.type!==`file`).forEach((e,t)=>{m[t]!==void 0&&(e.value=m[t])}),n&&(ee.querySelector(`details`).open=!0)}return C(),{node:ee,update(e,t){let n=fw.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:nT(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),ae(),!0},displayRecovery(){return m?h:void 0},dispose(){o=!0,_=void 0,l=void 0,p=void 0,m=void 0}}}zw(`settings`,{title:`Settings`,controls:(e,t,n,r,i)=>iT(e,t,i),result:(e,t,n,r,i)=>iT(e,n,i)});</script></body></html>
3133
+ `)),ux={0:`ED25519`,1:`Secp256k1`,2:`Secp256r1`,3:`MultiSig`,5:`ZkLogin`,6:`Passkey`};function dx(e){let{prefix:t,words:n}=Fy.decode(e);if(t!==`suiprivkey`)throw Error(`invalid private key prefix`);let r=new Uint8Array(Fy.fromWords(n)),i=r.slice(1);return{scheme:ux[r[0]],secretKey:i}}var fx=`external-proposal-alpha-2026-05-25`,px=`proposal-review-model-alpha-2026-05-25`;yh();var mx=N().refine(e=>{let t=new Date(e);return!Number.isNaN(t.getTime())&&t.toISOString()===e},`Expected ISO 8601 UTC timestamp`),hx=/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,gx=/(?:0x[0-9a-fA-F]{160,}|[A-Za-z0-9+/_=-]{160,})/,_x=/suiprivkey1[023456789acdefghjklmnpqrstuvwxyz]+/gi,vx=/(^|[^0-9a-fA-F])(?:0x)?[0-9a-fA-F]{64}($|[^0-9a-fA-F])/,yx=/(^|[^A-Za-z0-9+/_=-])(?:[A-Za-z0-9+/]{43}=|[A-Za-z0-9+/]{44}|[A-Za-z0-9_-]{43,44})($|[^A-Za-z0-9+/_=-])/,bx=/^(?:0|[1-9][0-9]*)(?:\.[0-9]+)?$/,xx=[12,15,18,21,24];function Sx(e,t,n={}){return N().min(1).max(e).superRefine((e,r)=>{(hx.test(e)||gx.test(e)||wx(e)||Tx(e)||!n.allowRawSecretLikeText&&Ex(e))&&r.addIssue({code:`custom`,message:`${t} must not contain executable, signing, private-key, mnemonic, route-selected, or encoded secret-like material`})})}function Cx(e,t){return Sx(e,t,{allowRawSecretLikeText:!0})}function wx(e){return(e.match(_x)??[]).some(e=>{try{return dx(e.toLowerCase()),!0}catch{return e.toLowerCase().startsWith(`suiprivkey1`)}})}function Tx(e){let t=e.normalize(`NFKD`).toLowerCase().replace(/[^a-z]+/g,` `).trim().split(/\s+/).filter(Boolean);for(let e of xx)if(!(t.length<e)){for(let n=0;n<=t.length-e;n+=1)if(cx(t.slice(n,n+e).join(` `),lx))return!0}return!1}function Ex(e){return vx.test(e)||yx.test(e)}var Dx=Sx(80,`amountDisplay`).refine(e=>bx.test(e)&&/[1-9]/.test(e),{message:`Expected a positive decimal display amount`}),Ox=R({kind:V([`mcp_server`,`ai_client`,`user`,`other`]),name:Sx(120,`source.name`),reference:Sx(256,`source.reference`).optional()}).strict(),kx=R({address:hb.optional(),label:Sx(120,`party.label`).optional()}).strict().refine(e=>e.address!==void 0||e.label!==void 0,{message:`Expected address or label`}),Ax=R({amountDisplay:Dx,amountKind:H(`display_proposal`).default(`display_proposal`),symbol:Sx(64,`amount.symbol`).optional(),coinType:Cx(512,`amount.coinType`).optional(),denomination:Sx(64,`amount.denomination`).optional()}).strict(),jx=R({packageId:Cx(128,`action.target.packageId`).optional(),module:Sx(128,`action.target.module`).optional(),function:Sx(128,`action.target.function`).optional(),objectId:Cx(128,`action.target.objectId`).optional(),label:Sx(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`}),Mx=R({direction:V([`outgoing`,`expected_incoming`,`fee`]),amount:Ax,recipient:kx.optional(),description:Sx(512,`assetFlow.description`).optional()}).strict(),Nx=R({id:Sx(120,`proposal.id`),source:Ox,network:H(`sui:mainnet`),createdAt:mx,expiresAt:mx.optional(),purpose:Sx(512,`purpose`),assumptions:L(Sx(512,`assumptions[]`)).max(20).optional(),requiredUserChoices:L(Sx(512,`requiredUserChoices[]`)).max(20).optional()}).strict(),Px=$f(`type`,[Nx.extend({type:H(`payment`),payment:R({amount:Ax,recipient:kx,target:Sx(512,`payment.target`).optional()}).strict()}).strict(),Nx.extend({type:H(`sui_action`),action:R({actionKind:Sx(120,`action.actionKind`),target:jx,recipient:kx.optional(),assetFlow:L(Mx).max(20).optional()}).strict()}).strict()]),Fx=R({id:N(),label:N(),status:V([`pass`,`warning`,`fail`]),message:N(),source:V([`proposal`,`adapter`,`registry`,`quote`,`wallet`,`simulation`,`network`])}).strict(),Ix=R({id:N(),label:N(),reason:N()}).strict(),Lx=R({modelVersion:H(px),contractVersion:H(fx),proposalId:N(),proposalType:V([`payment`,`sui_action`]),proposalSource:Ox,proposedAction:R({kind:V([`payment`,`sui_action`]),title:N(),purpose:N(),network:H(`sui:mainnet`),recipient:kx.optional(),target:z([N(),jx]).optional()}).strict(),assetFlow:R({outgoing:L(Ax),expectedIncoming:L(Ax),fees:L(Ax)}).strict(),recipients:L(kx),targets:L(z([N(),jx])),evidenceUsed:L(R({id:N(),label:N(),source:V([`external_proposal`,`local_schema`]),summary:N()}).strict()),missingEvidence:L(Ix),requiredUserChoices:L(Ix),unsupportedClaims:L(R({id:N(),label:N(),reason:N()}).strict()),rejectedExecutableFields:L(R({fieldName:N(),reason:N()}).strict()),freshness:R({proposalCreatedAt:mx,proposalExpiresAt:mx.optional(),evaluatedAt:mx,status:V([`current`,`expired`,`created_in_future`,`expiry_not_provided`]),reason:N()}).strict(),blockingChecks:L(Fx),nonSignableReason:R({code:H(`external_proposal_review_only`),message:N(),blockedCapabilities:L(N())}).strict()}).strict();R({requestedIntent:Px,implementationStatus:H(`read_only_review_only`),contractVersion:H(fx)}).strict();var Rx=[`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`],zx=[`review_evidence_stale`,`quote_stale`,`quote_unavailable`,`simulation_transient_failure`,`review_update_failed`,`wallet_connection_changed`],Bx=[`proposed`,`awaiting_wallet`,`wallet_connected`,`ready_for_wallet_review`,`refresh_required`,`blocked`,`expired`],Vx=[`humanReadableReview`,`simulation`,`transactionReviewData`,`ptbVisualization`,`assetFlowActual`,`beforeAfterBalance`];yh();var Hx=V([`client.core.simulateTransaction`,`client.transactionExecutionService.simulateTransaction`]),Ux=`ptb-visualization-contract-alpha-2026-05-25`,Wx=[`proposedAction`,`assetFlow`,`recipients`,`targets`,`evidenceUsed`,`missingEvidence`,`requiredUserChoices`,`unsupportedClaims`,`freshness`,`blockingChecks`],Gx=[`effects`,`balanceChanges`,`objectTypes`,`transaction`],Kx=[`transaction_bytes`,`serialized_transaction`,`wallet_signature_request`,`private_key_material`,`wallet_authorization`,`signing_data`,`signing_readiness`,`payment_execution_readiness`],qx=[`transaction_building_input`,`wallet_authorization`,`signing_data`,`signing_readiness`,`payment_execution_readiness`,`route_recommendation`],Jx=mb,Yx=`MIST`,Xx=[`checkedAt`,`expiresAt`],Zx=[`checkedAt`,`expiryStatus`],Qx=[`rawAmount`,`asset`,`amountRole`],$x=[`minOutRaw`,`asset`,`amountRole`],eS=[`gasBudgetRaw`,`asset`,`amountRole`],tS=[`gasUsedRaw`,`asset`,`amountRole`],nS=[`checkedAt`,`gasResolutionStatus`,`unresolvedReason`],rS=[`balanceChanges`,`asset`,`amountRole`],iS=[`coinType`,`decimals`],aS=[`quoteEvidenceId`,`minOutRaw`],oS=[`maxSlippageBps`,`userSelection`],sS=[`maxSlippageBps`,`minOutRaw`],cS=[`ownerAccount`,`objects`],lS=[`pinned_sdk_registry`,`verified_mainnet_onchain_metadata`,`wallet_account_read`,`quote_evidence`,`review_time_simulation`,`validated_request_fact`,`user_explicit_choice`],uS=[`input`,`expected_output`,`minimum_output`,`gas_budget`,`gas_used`,`fee`,`balance_delta`],dS={input:{kinds:[`validated_request_fact`,`wallet_account_read`,`user_explicit_choice`],fields:Qx},expected_output:{kinds:[`quote_evidence`,`review_time_simulation`],fields:Qx},minimum_output:{kinds:[`quote_evidence`],fields:$x},gas_budget:{kinds:[`review_time_simulation`],fields:eS},gas_used:{kinds:[`review_time_simulation`],fields:tS},fee:{kinds:[`review_time_simulation`],fields:Qx},balance_delta:{kinds:[`review_time_simulation`],fields:rS}},fS={pinned_sdk_metadata:{kinds:[`pinned_sdk_registry`],fields:iS},verified_mainnet_onchain_metadata:{kinds:[`verified_mainnet_onchain_metadata`],fields:iS}},pS={user_explicit:{kinds:[`user_explicit_choice`],fields:oS},adapter_policy_from_quote_evidence:{kinds:[`quote_evidence`],fields:sS}},mS={kinds:[`review_time_simulation`],fields:nS},hS={kinds:[`quote_evidence`],fields:aS},gS={kinds:[`validated_request_fact`],fields:Xx},_S={kinds:[`validated_request_fact`],fields:Zx},vS={raw_quantity_amount:{byRole:dS},unit_metadata:{bySource:fS},gas_unresolved_status:mS,expiry_status:{current:gS,expired:gS,not_provided:_S,not_applicable:_S},quote_min_out:hS,slippage_policy:{bySource:pS},object_ownership:{kinds:[`wallet_account_read`],fields:cS},simulation_result:{kinds:[`review_time_simulation`],fields:Gx}},yS={gasBudgetClaimId:{factKind:`raw_quantity_amount`,role:`gas_budget`,assetCoinType:Jx,rawUnit:Yx},gasUsedClaimId:{factKind:`raw_quantity_amount`,role:`gas_used`,assetCoinType:Jx,rawUnit:Yx},gasObjectOwnershipClaimId:{factKind:`object_ownership`,ownership:`owned_by_account`}},bS=N().refine(e=>{let t=new Date(e);return!Number.isNaN(t.getTime())&&t.toISOString()===e},`Expected ISO 8601 UTC timestamp`),xS=Cb(`unsigned integer`),SS=N().regex(/^0x[0-9a-fA-F]{1,64}$/,{message:`Expected a Sui object id`}),CS=N().min(1).max(512).refine(e=>{try{return Eb(e)===e}catch{return!1}},`Expected a normalized Sui struct tag coin type`),X=N().min(1).max(120),wS=R({symbol:N().min(1).max(64).optional(),coinType:CS}).strict(),TS=/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,ES=/(?:0x[0-9a-fA-F]{160,}|[A-Za-z0-9+/_=-]{160,})/;function DS(e,t){return N().min(1).max(e).superRefine((e,n)=>{(TS.test(e)||ES.test(e))&&n.addIssue({code:`custom`,message:`${t} must not contain executable transaction, signing, private-key, mnemonic, or long encoded material`})})}function OS(e,t){let n=new Set(e);return t.filter(e=>!n.has(e))}function kS(e,t,n,r,i){let a=OS(t,n);a.length!==0&&e.addIssue({code:`custom`,path:r,message:`${i} must include ${a.join(`, `)}`})}function AS(e,t,n,r,i){kS(e,t,n,r,i)}function jS(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&&jS(e,r,i)}function MS(e,t,n,r,i){let a=new Set(t),o=new Set(n);if(a.size!==o.size){jS(e,r,i);return}for(let t of a)if(!o.has(t)){jS(e,r,i);return}}function NS(e,t,n,r,i){(t.symbol!==n.symbol||t.coinType!==n.coinType)&&jS(e,r,i)}function PS(e,t,n,r,i){try{Eb(t.coinType)!==n&&jS(e,r,i)}catch{jS(e,r,i)}}var FS=R({kind:V([`natural_language_intent`,`external_proposal`,`mcp_action_request`,`local_review_request`]),sourceId:N().min(1).max(160),capturedAt:bS,authority:H(`untrusted_until_review_regenerates_and_verifies`),userSelectionSource:V([`user_explicit`,`prior_user_explicit_context`]).optional()}).strict(),IS=R({id:X,kind:V(lS),network:H(`sui:mainnet`),source:N().min(1).max(240),verifiedAt:bS,fields:L(N().min(1).max(120)).min(1)}).strict(),LS=$f(`factKind`,[R({id:X,factKind:H(`raw_quantity_amount`),sourceEvidenceId:X,role:V(uS),asset:wS,rawAmount:xS}).strict(),R({id:X,factKind:H(`unit_metadata`),sourceEvidenceId:X,source:V([`pinned_sdk_metadata`,`verified_mainnet_onchain_metadata`]),coinType:CS,decimals:P().int().min(0).max(255)}).strict(),R({id:X,factKind:H(`gas_unresolved_status`),sourceEvidenceId:X,checkedAt:bS,status:H(`unresolved`),reason:N().min(1).max(240)}).strict(),R({id:X,factKind:H(`expiry_status`),sourceEvidenceId:X,checkedAt:bS,status:V([`current`,`expired`,`not_provided`,`not_applicable`]),expiresAt:bS.optional(),reason:N().min(1).max(240).optional()}).strict(),R({id:X,factKind:H(`quote_min_out`),sourceEvidenceId:X,quoteEvidenceId:N().min(1).max(120),minOutRaw:xS}).strict(),R({id:X,factKind:H(`slippage_policy`),sourceEvidenceId:X,policySource:V([`user_explicit`,`adapter_policy_from_quote_evidence`]),maxSlippageBps:P().int().min(0).max(1e4),minOutRaw:xS.optional()}).strict(),R({id:X,factKind:H(`object_ownership`),sourceEvidenceId:X,objectId:SS,ownerAccount:hb,ownership:V([`owned_by_account`,`shared_object`,`immutable_or_package`,`not_owned_by_account`])}).strict(),R({id:X,factKind:H(`simulation_result`),sourceEvidenceId:X,provider:Hx,checksEnabled:H(!0),simulatedAt:bS,status:V([`success`,`failed`,`unavailable`]),requiredFields:L(V(Gx)).min(Gx.length),missingFields:L(V(Gx)).default([]),failureReason:N().min(1).max(240).optional()}).strict()]),RS=R({id:X,role:V(uS),asset:wS,rawAmount:xS,unit:R({decimals:P().int().min(0).max(255),source:V([`pinned_sdk_metadata`,`verified_mainnet_onchain_metadata`]),sourceField:N().min(1).max(160),unitClaimId:X}).strict(),amountClaimId:X,displayOnly:R({amountDisplay:N().min(1).max(120),reason:H(`presentation_only_not_signing_input`)}).strict().optional()}).strict(),zS=R({objectId:SS,ownerAccount:hb,ownershipClaimId:X}).strict(),BS=R({source:H(`review_time_simulation`),checkedAt:bS,gasBudgetRaw:xS.optional(),gasBudgetClaimId:X.optional(),gasUsedRaw:xS.optional(),gasUsedClaimId:X.optional(),gasObjects:L(zS).optional(),unresolvedReason:N().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`})}),VS=$f(`status`,[R({checkedAt:bS,status:H(`current`),expiresAt:bS,evidenceClaimId:X}).strict(),R({checkedAt:bS,status:H(`expired`),expiresAt:bS,evidenceClaimId:X}).strict(),R({checkedAt:bS,status:H(`not_provided`),evidenceClaimId:X,reason:N().min(1).max(240),expiresAt:Kf().optional()}).strict(),R({checkedAt:bS,status:H(`not_applicable`),evidenceClaimId:X,reason:N().min(1).max(240),expiresAt:Kf().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`})}),HS=R({status:V([`required_and_verified`,`not_required_for_action`,`missing`,`stale`]),quoteEvidenceId:N().min(1).max(120).optional(),quoteEvidenceClaimId:X.optional(),maxSlippageBps:P().int().min(0).max(1e4).optional(),minOutRaw:xS.optional(),policySource:V([`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`})}),US=R({checkedAt:bS,ownerAccount:hb,objects:L(R({objectId:SS,role:V([`input_coin`,`gas_coin`,`protocol_object`,`shared_object`,`receiving_object`]),ownership:V([`owned_by_account`,`shared_object`,`immutable_or_package`,`not_owned_by_account`]),evidenceClaimId:X}).strict()).min(1)}).strict(),WS=R({evidenceClaimId:X,transactionDigest:gb,provider:Hx,checksEnabled:H(!0),simulatedAt:bS,status:V([`success`,`failed`,`unavailable`]),requiredFields:L(V(Gx)).min(Gx.length),missingFields:L(V(Gx)).default([]),failureReason:N().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=>Gx.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`}),GS=R({fields:L(V(Wx)).min(Wx.length),transactionDigest:gb,source:H(`review_model_or_adapter_equivalent`),purpose:H(`human_review_before_wallet_authorization`)}).strict().refine(e=>Wx.every(t=>e.fields.includes(t)),{message:`Human-readable review fields must include every required review field`}),KS=R({runtimeStatus:H(`emitted_pre_handoff`),mcpAndReviewUiMayExpose:L(V([`human_readable_review`,`ptb_visualization_artifact`,`diagnostics`,`status_checks`])).min(1),prohibited:L(V(Kx)).min(1)}).strict().superRefine((e,t)=>{AS(t,e.prohibited,Kx,[`prohibited`],`prohibited`)}),qS=R({schemaVersion:H(1),adapterId:N().min(1).max(120),protocol:N().min(1).max(120),actionKind:N().min(1).max(120),network:H(`sui:mainnet`),inputProvenance:FS,sourceReferences:L(IS).min(1),evidenceClaims:L(LS).min(1),rawQuantities:L(RS).min(1),gas:BS,expiry:VS,slippageOrMinOut:HS,objectOwnership:US,simulation:WS,humanReadableReview:GS,outputBoundary:KS,reviewedTransactionDigest:gb}).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(`, `)}`}),kS(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}`});return}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,vS.raw_quantity_amount.byRole[e.role],[`evidenceClaims`,n,`sourceEvidenceId`],`evidenceClaims[${n}].raw_quantity_amount`),e.factKind===`unit_metadata`&&l(e.sourceEvidenceId,vS.unit_metadata.bySource[e.source],[`evidenceClaims`,n,`sourceEvidenceId`],`evidenceClaims[${n}].unit_metadata`),e.factKind===`gas_unresolved_status`&&l(e.sourceEvidenceId,vS.gas_unresolved_status,[`evidenceClaims`,n,`sourceEvidenceId`],`evidenceClaims[${n}].gas_unresolved_status`),e.factKind===`expiry_status`&&(l(e.sourceEvidenceId,vS.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,vS.quote_min_out,[`evidenceClaims`,n,`sourceEvidenceId`],`evidenceClaims[${n}].quote_min_out`),e.factKind===`slippage_policy`&&(l(e.sourceEvidenceId,vS.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,vS.object_ownership,[`evidenceClaims`,n,`sourceEvidenceId`],`evidenceClaims[${n}].object_ownership`),e.factKind===`simulation_result`&&(l(e.sourceEvidenceId,vS.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`}),Gx.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`),NS(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,yS.gasBudgetClaimId.role,[`gas`,`gasBudgetClaimId`],`gas.gasBudgetClaimId role`),PS(t,n.asset,yS.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,yS.gasUsedClaimId.role,[`gas`,`gasUsedClaimId`],`gas.gasUsedClaimId role`),PS(t,n.asset,yS.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,yS.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`),MS(t,e.simulation.requiredFields,f.requiredFields,[`simulation`,`requiredFields`],`simulation.requiredFields`),MS(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`)}),JS=R({contractVersion:H(Ux),artifactKind:H(`ptb_visualization`),generatedAt:bS,source:R({adapterId:N().min(1).max(120),planId:N().min(1).max(120).optional(),sourceKind:V([`review_time_generated_transaction_kind`,`review_time_ir`,`renderer_model`]),authority:H(`visualization_only_not_wallet_authorization`),renderer:R({name:N().min(1).max(120),packageName:N().min(1).max(120).optional(),version:N().min(1).max(80).optional()}).strict().optional()}).strict(),mermaid:R({diagramType:H(`flowchart`),text:DS(2e4,`mermaid.text`),namedText:DS(2e4,`mermaid.namedText`)}).strict(),diagnostics:L(R({severity:V([`info`,`warning`,`error`]),code:N().min(1).max(120),message:DS(512,`diagnostics.message`),source:V([`adapter`,`renderer`,`schema`,`simulation`])}).strict()).default([]),unsupportedUse:L(V(qx)).min(1),executableMaterial:R({included:H(!1),policy:H(`mcp_and_review_ui_outputs_must_not_include_executable_transaction_material`)}).strict()}).strict().superRefine((e,t)=>{AS(t,e.unsupportedUse,qx,[`unsupportedUse`],`unsupportedUse`)});yh();var YS=B(N(),I()),XS=V(Rx),ZS=V(zx);V([`ready_for_wallet_review`,`refresh_required`,`blocked`]);var QS=V(Bx);V([`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 $S=R({id:N(),label:N(),status:V([`pass`,`warning`,`fail`]),message:N(),source:V([`registry`,`quote`,`wallet`,`simulation`,`adapter`,`network`,`proposal`])}),eC=N().min(1),tC=`human_readable_review`,nC=`review_time_simulation`,rC=R({stageCatalogId:N().min(1),adapterId:N(),protocol:N(),actionKind:N(),completedStages:L(eC),missingStages:L(eC)}).strict().superRefine((e,t)=>{let n=iC(e.completedStages);n&&t.addIssue({code:`custom`,path:[`completedStages`],message:`completedStages contains duplicate stage '${n}'`});let r=iC(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 iC(e){let t=new Set;for(let n of e){if(t.has(n))return n;t.add(n)}}var aC=R({symbol:N(),amount:N(),coinType:N().optional(),approx:F().optional()}).strict(),oC=aC.extend({amountKind:H(`display_intent`).default(`display_intent`)}),sC=R({outgoing:L(oC),expectedIncoming:L(oC),minimumIncoming:L(oC).optional(),fees:L(oC).optional()}),cC=R({outgoing:L(aC),expectedIncoming:L(aC),minimumIncoming:L(aC).optional(),fees:L(aC).optional()}),lC=R({before:L(aC),after:L(aC),delta:L(aC)}),uC=R({computationCostRaw:xb(`computationCostRaw`),storageCostRaw:xb(`storageCostRaw`),storageRebateRaw:xb(`storageRebateRaw`),nonRefundableStorageFeeRaw:xb(`nonRefundableStorageFeeRaw`)}).strict(),dC=R({address:hb,coinType:N().min(1).max(512).refine(e=>{try{return Eb(e)===e}catch{return!1}},`Expected a normalized Sui struct tag coin type`),amount:Tb(`balanceChanges[].amount`)}).strict(),fC=R({objectId:hb,objectType:N().min(1).max(512).optional(),inputState:N().min(1).max(80),outputState:N().min(1).max(80),idOperation:N().min(1).max(80)}).strict(),pC=R({provider:Hx,checksEnabled:F(),success:F(),gasCostSummary:uC.optional(),balanceChanges:L(dC).optional(),objectChanges:L(fC).optional(),error:N().optional()}),mC=pC,hC=pC.extend({checksEnabled:H(!0),success:H(!0),gasCostSummary:uC,balanceChanges:L(dC),objectChanges:L(fC),error:Kf().optional()}).strict(),gC=R({role:V([`input`,`expected_output`,`minimum_output`,`fee`]),symbol:N(),coinType:N().min(1).max(512).refine(e=>{try{return Eb(e),!0}catch{return!1}},`Expected a Sui struct tag coin type`),decimals:P().int().min(0).max(255),rawAmount:xb(`rawAmount`),rawAmountSource:H(`quote_policy_evidence`),displayAmount:N().optional(),displayAmountSource:H(`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`})}),_C=R({role:V([`connected_account`,`output_recipient`]),address:hb}).strict(),vC=R({kind:H(`swap_output_asset`),symbol:N(),coinType:N().min(1).max(512).refine(e=>{try{return Eb(e),!0}catch{return!1}},`Expected a Sui struct tag coin type`),protocol:N(),poolKey:N(),direction:V([`base_to_quote`,`quote_to_base`])}).strict(),yC=R({id:N(),label:N(),source:z([V([`registry`,`quote`,`wallet`,`simulation`,`adapter`,`network`,`proposal`]),V([`transaction_material`,`digest_commitment`])]),summary:N()}).strict(),bC=R({id:N(),label:N(),reason:N()}).strict(),xC=R({proposedAction:R({title:N(),summary:N(),actionKind:N(),adapterId:N(),protocol:N(),network:H(`sui:mainnet`)}).strict(),recipients:L(_C),evidenceUsed:L(yC),missingEvidence:L(bC),requiredUserChoices:L(bC),unsupportedClaims:L(bC),freshness:R({status:H(`current`),evaluatedAt:N(),expiresAt:N(),reason:N()}).strict(),blockingChecks:L($S)}).strict(),SC=R({assetFlow:R({outgoing:L(gC),expectedIncoming:L(gC),minimumIncoming:L(gC),fees:L(gC)}).strict(),targets:L(vC)}).strict(),CC=$f(`kind`,[xC.extend({kind:H(`swap_human_readable_review`)}).merge(SC)]),wC=R({id:N(),actionKind:N(),adapterId:N(),protocol:N(),title:N(),summary:N(),assetFlowPreview:sC,reviewModel:Lx.optional(),adapterData:YS,createdAt:N(),expiresAt:N().optional(),registryVersion:N().optional(),preliminaryChecks:L($S).optional()}),TC=R({planId:N(),reviewSessionId:N(),account:hb,checks:L($S),assetFlowActual:cC.optional(),beforeAfterBalance:lC.optional(),simulation:mC.optional(),humanReadableReview:CC.optional(),transactionReviewData:qS.optional(),ptbVisualization:JS.optional(),adapterLifecycle:rC.optional(),updatedAt:N()}),EC=$f(`status`,[TC.extend({status:H(`ready_for_wallet_review`),evidenceValidity:Kf().optional(),blockedReason:Kf().optional(),refreshReason:Kf().optional()}),TC.extend({status:H(`refresh_required`),evidenceValidity:H(`invalidated`).optional(),refreshReason:ZS,blockedReason:Kf().optional()}),TC.extend({status:H(`blocked`),evidenceValidity:H(`invalidated`).optional(),blockedReason:XS,refreshReason:Kf().optional()})]).superRefine((e,t)=>{if(e.evidenceValidity===`invalidated`)for(let n of Vx)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&&DC(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 DC(e,t){let n=e.adapterLifecycle;n&&(e.humanReadableReview!==void 0&&OC(t,n,tC,[`humanReadableReview`]),e.simulation!==void 0&&(OC(t,n,nC,[`simulation`]),OC(t,n,tC,[`simulation`]),kC(t,e.simulation,[`simulation`])),n.missingStages.includes(nC)&&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(tC)&&e.humanReadableReview!==void 0&&t.addIssue({code:`custom`,path:[`humanReadableReview`],message:`humanReadableReview public evidence cannot be present while human_readable_review is missing`}))}function OC(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 kC(e,t,n){hC.safeParse(t).success||e.addIssue({code:`custom`,path:n,message:`simulation public evidence requires a successful checks-enabled review-time simulation projection`})}yh();var AC=R({topic:N().min(1),accounts:L(hb).min(1),methods:L(N()),chain:H(Rb),expiresAt:N().datetime(),walletName:N().optional()}).strict(),jC=$f(`status`,[R({topic:N().min(1),version:P().int().positive(),status:H(`present`),session:AC}).strict(),R({topic:N().min(1),version:P().int().positive(),status:V([`absent`,`unusable`])}).strict()]),MC=R({runId:zb,sequence:P().int().positive(),observedAt:N().datetime()}).strict();MC.extend({sessions:L(jC)}).strict();var NC=R({kind:H(`wallet_service_recovery`),priorRunId:zb,admittedAt:N().datetime(),updatedAt:N().datetime()}),PC=z([NC.extend({phase:H(`stopping`)}).strict(),NC.extend({phase:H(`starting`),nextRunId:zb}).strict(),NC.extend({outcome:V([`available`,`failed`,`superseded`,`server_restarted`]),nextRunId:zb.optional(),message:N().optional()}).strict()]);yh();var FC=`A wallet connection provides account context; it is not a transaction approval or proof of address ownership.`,IC=`Review evidence is not a safety guarantee. Only an explicit card action and wallet approval may authorize this exact transaction.`,LC=Kb.extend({pendingAction:H(`disconnect`).optional()});V([`input_required`,`awaiting_approval`,`disconnect_pending`]);var RC=R({action:H(`connect`),walletRunId:zb}).strict(),zC=R({action:H(`disconnect`),walletRunId:zb,connectionId:N().min(1)}).strict(),BC=R({action:H(`use_account`),walletRunId:zb,connectionId:N().min(1),account:hb}).strict(),VC=R({action:V([`prepare_review`,`request_signature`]),connectionId:N().min(1),walletRunId:zb,account:hb,reviewRevision:P().int().nonnegative()}).strict(),HC=z([RC,zC,BC,VC,R({action:V([`cancel`,`stop_connection`,`stop_waiting`,`read_result`])}).strict()]),UC=z([RC,VC.extend({action:H(`prepare_review`)})]),WC=R({kind:V([`connect`,`review`]),mode:V([`connect`,`review`,`review_manage`]),allowedActions:L(V(Xb)),actionRemainingMs:P().int().nonnegative(),nextStateReadAfterMs:P().int().nonnegative().optional(),automaticAction:UC.optional(),observe:F(),walletAvailability:Hb,walletObservation:MC.optional(),runtimeRecovery:PC.optional(),connectionConflict:qb.optional(),manageableConnectionIds:L(N().min(1)),connectionReconciliationRequired:H(!0).optional(),usableConnectionId:N().min(1).optional(),assetReadAccount:Yb.optional(),acceptedWalletRunId:zb.optional(),progress:Ub,boundary:V([FC,IC]),connections:L(LC),activeAccount:N().optional(),connection:LC.optional(),connectionAction:V([`connect`,`disconnect`]).optional(),review:R({reviewSessionId:N(),plan:wC,reviewRevision:P().int().nonnegative(),status:QS,account:N().optional(),preparing:F(),accountRequestPending:H(!0).optional(),error:N().optional(),state:EC.optional()}).strict().optional(),request:Lb.optional(),receipt:I().optional(),netGasMist:N().regex(/^-?[0-9]+$/).optional(),observationStopped:F().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 GC(e,t,n=!1){return e.connections.filter(r=>r.connectionId===e.usableConnectionId&&r.accounts.includes(t)&&(!n||r.methods.includes(`sui_signTransaction`)))}var KC=`sui-mcp.local-data`;yh();var qC=16*1024*1024,Q=N().uuid(),JC=P().int().nonnegative().safe(),YC=N().regex(/^[a-f0-9]{64}$/),XC=$f(`status`,[R({status:H(`no_file`)}).strict(),R({status:H(`receiving`)}).strict(),R({status:H(`checking`)}).strict(),R({status:H(`check_required`),message:N().min(1)}).strict(),R({status:H(`can_restore`)}).strict(),R({status:H(`cannot_restore`),reason:V([`invalid_backup`,`file_unavailable`,`wallet_request_unsettled`,`operation_busy`,`input_unavailable`,`check_failed`]),message:N().min(1)}).strict()]);R({fileId:Q,sha256:YC,totalSize:JC,dataEpoch:JC,userDataRevision:JC,check:XC}).strict();var ZC=$f(`kind`,[R({kind:H(`set_endpoint`),endpoint:V([`grpc`,`graphql`]),value:N().min(1)}).strict(),R({kind:H(`restore_endpoint`),endpoint:V([`grpc`,`graphql`])}).strict(),R({kind:V([`clear_read_address`,`export_local_data`,`download_backup`,`import_local_data`,`reset_local_data`,`restart_wallet_service`])}).strict()]),QC=V([`acknowledged`,`not_completed`,`unconfirmed`,`unsupported`]),$C=R({method:H(`ui/download-file`),code:H(-32601)}).strict(),ew=V([`acknowledged`,`cancelled`,`expired`,`server_restarted`,`data_replaced`,`source_unavailable`,`stored_locally`,`local_save_failed`]),tw=R({device:N().regex(/^\d+$/),inode:N().regex(/^\d+$/)}).strict(),nw=V([`not_published`,`target_conflict`,`source_unavailable`,`interrupted`]),rw=R({status:V([`needs_consent`,`saving`,`saved`,`failed`]),attemptId:Q,fileId:Q,sha256:YC,totalSize:JC,destination:N(),ownerId:N().min(1),currentSaveAttemptId:Q.optional(),attempts:L(R({saveAttemptId:Q,previousSaveAttemptId:Q.optional(),admittedAt:N().datetime(),allowPossibleCopy:F()}).strict()),sourceIdentity:tw.optional(),savedAt:N().datetime().optional(),failure:nw.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.`})});R({currentAttemptId:Q,attempts:L(R({attemptId:Q,admittedAt:N().datetime(),previousAttemptId:Q.optional(),hostReport:QC.optional(),failure:$C.optional()}).strict()).min(1),readyAt:N().datetime().optional(),expiresAt:N().datetime().optional(),endReason:ew.optional(),localSave:rw.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 iw=V([`settings_retry_download`,`settings_report_download`,`settings_cancel_download`,`settings_store_backup`]),aw=$f(`action`,[R({action:H(`settings_download_backup`),operationId:Q,attemptId:Q}).strict(),R({action:H(`settings_retry_download`),operationId:Q,fileId:Q,previousAttemptId:Q,attemptId:Q}).strict(),R({action:H(`settings_report_download`),operationId:Q,fileId:Q,attemptId:Q,status:QC,failure:$C.optional()}).strict().refine(e=>e.status===`unsupported`==(e.failure!==void 0),`Only unsupported downloads require the exact method failure.`),R({action:H(`settings_store_backup`),operationId:Q,fileId:Q,attemptId:Q,saveAttemptId:Q,previousSaveAttemptId:Q.optional(),allowPossibleCopy:F()}).strict(),R({action:H(`settings_cancel_download`),operationId:Q,fileId:Q,attemptId:Q}).strict(),R({action:H(`settings_select`),draft:ZC}).strict(),R({action:H(`settings_prepare`),operationId:Q}).strict(),R({action:H(`settings_begin_upload`),operationId:Q,name:N().min(1),totalSize:JC.max(qC),sha256:YC}).strict(),R({action:H(`settings_upload_chunk`),operationId:Q,fileId:Q,offset:JC.max(qC),chunkBase64:N()}).strict(),R({action:H(`settings_seal_upload`),operationId:Q,fileId:Q}).strict(),R({action:H(`settings_confirm`),operationId:Q,preparationId:Q}).strict(),R({action:H(`settings_back`),operationId:Q}).strict(),R({action:H(`settings_cancel`)}).strict()]),ow=R({outcome:V([`completed`,`failed`,`interrupted`,`superseded`]),recordedAt:N().datetime(),message:N().min(1),details:B(N(),I()).optional(),completionScope:H(`backup_snapshot`).optional()}).strict(),sw=R({storedValue:N(),effectiveValue:N(),source:V([`environment`,`local_db`,`builtin_default`]),pendingStoredValue:N().optional(),appliesAfter:H(`mcp_server_restart`).optional()}).strict(),cw=R({endpoint:V([`grpc`,`graphql`]),key:V([`suiGrpcUrl`,`suiGraphqlUrl`]),value:N().min(1),status:V([`saved`,`reset`]),storedValue:N(),effectiveValue:N(),source:sw.shape.source}).strict().refine(e=>e.key===(e.endpoint===`grpc`?`suiGrpcUrl`:`suiGraphqlUrl`),`The endpoint kind and preference key must agree.`),lw=P().int().nonnegative().safe(),uw=R({accounts:lw,reviewSessions:lw,reviewStateSnapshots:lw,reviewStatusTransitions:lw,reviewExecutions:lw,reviewRequests:lw,outcomeUnknownRequests:lw,externalActivityScans:lw,externalActivityTransactions:lw,localSettings:lw}).strict(),dw=R({status:H(`valid`),format:H(KC),network:H(`mainnet`),exportedAt:N().datetime(),currentCounts:uw,incomingCounts:uw,willReplace:H(!0),activeAccountChange:V([`unchanged`,`set`,`cleared`]),currentReadAddress:hb.nullable(),incomingReadAddress:hb.nullable(),restartRequiredAfterImport:F()}).strict(),fw=R({kind:H(`settings`),operationId:Q,phase:V([`draft`,`uploading`,`sealed`,`prepared`,`executing`,`stopping`,`starting`,`terminal`]),draft:ZC.optional(),preparationId:Q.optional(),preparation:B(N(),I()).optional(),file:R({fileId:Q,displayName:N(),totalSize:JC,receivedSize:JC,sha256:YC,sealed:F(),cleanup:V([`pending`,`complete`,`failed`])}).strict().optional(),download:R({availability:V([`preparing`,`available`,`ended`]),currentAttemptId:Q,hostReport:QC.optional(),previousUnconfirmed:F(),endReason:ew.optional(),expiresAt:N().datetime().optional(),remainingMs:JC.optional(),localSave:R({status:V([`needs_consent`,`saving`,`saved`,`failed`]),currentSaveAttemptId:Q.optional(),failure:nw.optional(),savedAt:N().datetime().optional()}).strict().optional(),allowedFileActions:L(iw)}).strict().optional(),restoreCheck:XC.optional(),backupLocation:R({directory:N().min(1),filename:N().min(1)}).strict().optional(),result:ow.optional(),temporaryFileCleanup:V([`pending`,`complete`,`failed`]).optional(),priorRunId:Q.optional(),nextRunId:Q.optional(),supersedesOperationId:Q.optional(),supersededByOperationId:Q.optional(),allowedActions:L(V(aw.options.map(e=>e.shape.action.value))),observe:F(),facts:R({server:R({name:N(),version:N(),network:H(`mainnet`)}).strict(),localSettings:R({suiGrpcUrl:sw,suiGraphqlUrl:sw}).strict(),readAddress:N().optional(),assetReadAccount:Yb,walletAvailability:Hb,connectionReconciliationRequired:H(!0).optional(),observedAt:N().datetime().optional(),counts:uw}).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`&&!dw.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=cw.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.`})}),pw=64*1024;function mw(e){return new TextEncoder().encode(JSON.stringify(e)).length}function hw(e){let t=pw-mw(e);return t>0?3*Math.floor(t/4):0}function gw(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=qC,t.params.arguments.input.chunkBase64=``,hw(t)}var _w={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`};yh();var vw=R({connectionId:N().min(1),pairingUri:N().startsWith(`wc:`),expiresAt:N().datetime()}).strict(),yw=V([`account`,`receipt`,`chart`,`connect`,`review`,`settings`]),bw=R({cardId:N().min(1),kind:yw,state:V([`ready`,`running`,`closed`]),revision:P().int().nonnegative(),createdAt:N().datetime(),expiresAt:N().datetime(),input:B(N(),I()),data:I().optional(),reason:V([`completed`,`expired`,`failed`,`server_restarted`,`cancelled`]).optional(),error:N().optional()}).strict().extend({pollAfterMs:P().int().positive(),inputRemainingMs:P().int().nonnegative()}),xw=R({transactionDigest:N().min(1),pureInputs:L(R({index:P().int().nonnegative(),bytes:N().regex(/^0x(?:[0-9a-f]{2})*$/i)}).strict()).refine(e=>new Set(e.map(e=>e.index)).size===e.length,`Duplicate input index.`),ptbGraph:R({mermaid:R({text:N(),namedText:N()}).strict()}).strict().optional()}).strict();yh();var Sw=`sui-mcp/card`,Cw=`sui-mcp/receipt-display`,ww=`sui-mcp/wallet-display`,Tw=`sui-mcp/settings-file`,Ew=`suimcp://cards/`,Dw=$f(`kind`,[R({kind:H(`account`),status:H(`input_required`),field:H(`account`),message:N().min(1)}).strict(),R({kind:H(`receipt`),status:H(`input_required`),field:H(`digest`),message:N().min(1)}).strict()]),Ow=R({cardId:N().min(1),permission:N().min(1)}).strict();Ow.extend({revision:P().int().nonnegative(),input:B(N(),I())}).strict();var kw=xw.extend({cardId:N().min(1),revision:P().int().nonnegative(),attemptId:N().min(1).optional()}),Aw=vw.extend({cardId:N().min(1),revision:P().int().nonnegative()}),jw=R({attemptId:N().uuid().optional(),cardId:N().min(1),operationId:N().uuid(),fileId:N().uuid(),offset:P().int().nonnegative().safe(),totalSize:P().int().nonnegative().safe(),sha256:N().regex(/^[a-f0-9]{64}$/),chunkBase64:N()}).strict(),Mw={account:_w.uiOpenAccount,receipt:_w.uiOpenReceipt,chart:_w.uiOpenChart,read:_w.uiReadCard,submit:_w.uiSubmitCard,act:_w.uiActCard,readSettingsFile:_w.uiReadSettingsFile};function $(e){return typeof e==`object`&&e&&!Array.isArray(e)?e:void 0}function Nw(e){return e.kind!==`import_local_data`}function Pw(e,t,n){if(e.kind!==`settings`||t.kind!==`settings`||e.cardId!==t.cardId||t.state!==`ready`)return;let r=fw.safeParse(e.data),i=fw.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(Nw(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 Fw(e){return Object.keys(e).filter(t=>e[t]!==void 0)}function Iw(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)=>Iw(e,t[n]));let n=$(e),r=$(t);if(!n||!r)return!1;let i=Fw(n);return i.length===Fw(r).length&&i.every(e=>Object.hasOwn(r,e)&&Iw(n[e],r[e]))}function Lw(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&&!Iw(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=y_.safeParse(i);if(!n.success)throw r();o=Lw(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 Fw(t)){let n=t[e];if(Object.hasOwn(c,e)&&!Iw(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 Rw(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 zw(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(Ew.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 Bw(e){let t=$(e.structuredContent),n=t?.ok===!0?Dw.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:bw.parse(i);a?.kind===`settings`&&fw.parse(a.data);let o=$(e._meta)?.[Cw],s=o===void 0?void 0:kw.parse(o);if(s&&!Rw(a,s))throw Error(`Transaction details do not match this saved result.`);let c=$(e._meta)?.[ww],l=c===void 0?void 0:Aw.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 Vw(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 Wv({name:`sui-mcp-card`,version:`0.6.1`},{},{autoResize:!0,strict:!0}),d=new AbortController,f=e===`connect`||e===`review`,p=e===`settings`,m=f||p,h=!1,g,_,ee,v,y,te,ne,re=!1,ie=!1,ae,b,x={status:`unconfirmed`},oe,S,se,C,ce,le=`continue`,ue,de,fe=0,w=0,pe,me,he,T,E,ge,D,_e,ve=!1;function ye(){if(!C||!v)return;let{input:e,basis:t}=C,n=$(v.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 v.state===`running`||v.reason===`completed`?C.delivery===`rejected`?`past`:`observed`:v.state===`closed`?`past`:`active`;if(e.walletRunId&&e.walletRunId!==$(n?.walletAvailability)?.walletRunId&&e.walletRunId!==n?.acceptedWalletRunId)return`past`;switch(e.action){case`connect`:if(v.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(v.reason===`cancelled`)return`observed`;break;case`disconnect`:if(o&&o.connectionId===e.connectionId&&(o.pendingAction===`disconnect`||v.state!==`ready`&&o.status===`disconnected`))return`observed`;break;case`use_account`:if(v.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`;break}return be()||typeof n?.actionRemainingMs==`number`&&n.actionRemainingMs<=0||[`connect`,`disconnect`,`use_account`,`cancel`,`prepare_review`,`request_signature`].includes(String(e.action))&&(v.state!==`ready`||a?.status===`expired`)?`past`:`active`}function be(){let e=HC.safeParse(C?.input);if(!e.success||e.data.action!==`disconnect`&&e.data.action!==`use_account`)return!1;let t=e.data,n=WC.safeParse(v?.data);if(!n.success)return!1;let r=n.data.connections.find(e=>e.connectionId===t.connectionId);return r?t.action===`disconnect`?n.data.walletAvailability.status===`available`&&!r.pendingAction&&!n.data.manageableConnectionIds.includes(t.connectionId)&&[`disconnected`,`failed`,`rejected`,`stopped`,`expired`].includes(r.status):[`disconnected`,`failed`,`rejected`,`stopped`,`expired`].includes(r.status)||t.action===`use_account`&&r.status===`connected`&&!r.accounts.includes(t.account):!1}function xe(){if(!C)return;let e=ye();e&&C.disposition!==`observed`&&(e!==`active`||C.disposition===`active`)&&(C.disposition=e),C.disposition===`observed`&&(C.retryRequired=!1)}function Se(){let e=UC.safeParse($(v?.data)?.automaticAction);return C?.retryRequired&&e.success&&C.input.action===e.data.action?e.data:void 0}function Ce(e){let t={connect:`connection request`,prepare_review:`review update`,request_signature:`wallet approval request`,read_result:`transaction status check`,cancel:`cancellation request`,stop_connection:`request to stop connecting`,stop_waiting:$($(e.basis.data)?.request)?.requestStatus===`awaiting_signature`?`request to stop wallet approval`:`request to stop checking the result`,disconnect:`wallet disconnect request`,use_account:`account selection`};return f?t[String(e.input.action)]??`request`:`data request`}function we(e){if(e!==`past`||!C)return;let t=Ce(C),n=C.input.action===`read_result`&&$($(v?.data)?.request)?.requestStatus===`outcome_unknown`?` To check this transaction again, ask to open its result in chat.`:``;return`Message from an earlier ${t}: “${C.message}”${n}`}let Te,Ee;function De(){let t=$(v?.data),n=p?$(t?.download):void 0,r=Array.isArray(n?.allowedFileActions)?n.allowedFileActions:[],i=[...Array.isArray(t?.allowedActions)?t.allowedActions:[],...r.filter(e=>e===`settings_report_download`||Te===void 0||Date.now()<Te)],a=e===`review`&&t?.mode===`review`&&!t.request&&!!g&&v?.state===`ready`,o=a&&pe!==void 0&&Date.now()>=pe,s=document.visibilityState!==`hidden`,c=d.signal.aborted||x.status===`rejected`,l=x.status===`confirmed`,u=C?.disposition,ee=u===`active`,y=C?.retryRequired===!0,te=C?.input.action===`request_signature`&&u===`active`,ne=le===`paused`,ie=ge?.pending?.()===!0,ae=ge?.displayRecovery?.(),fe=l&&!c&&!S&&!ie&&!o&&!!g,me=fe&&!ce&&!h&&(!m||!(ue&&(ee||y||ne))),he=UC.safeParse(t?.automaticAction),T=p?$(n?.localSave):void 0,E=!!v&&(m?t?.observe===!0||T?.status===`saving`:v.state===`running`),D=!!_&&re&&!c&&!ue&&s&&(de===`explicit`||x.status!==`read_failed`&&(de===`background`||x.status===`needed`&&x.automatic)),_e=s&&fe&&!oe&&!ue&&!de&&!ce&&!y&&!te&&!ne&&f&&he.success&&i.includes(he.data.action)?he.data:void 0,ve=$(t?.restoreCheck),ye=p&&fe&&v?.state===`ready`&&!ce&&!h&&!t?.result&&t?.observe!==!0&&(ve?.status===`cannot_restore`&&[`operation_busy`,`wallet_request_unsettled`].includes(String(ve.reason))||!i.includes(`settings_select`)||!i.includes(`settings_download_backup`)||t?.phase===`prepared`&&!i.includes(`settings_confirm`)||t?.phase===`draft`&&$(t.draft)?.kind!==void 0&&$(t.draft)?.kind!==`import_local_data`&&!i.includes(`settings_prepare`)),be;!c&&_&&(x.status===`read_failed`||oe||x.status===`unconfirmed`?be=`read`:x.status===`needed`?x.automatic||(be=`read`):S||ae||p&&[`pending`,`failed`].includes(String(t?.temporaryFileCleanup))||T?.status===`saving`||T?.status===`needs_consent`&&!i.includes(`settings_store_backup`)||T?.status===`failed`&&T.failure===`not_published`&&!n?.endReason&&!i.includes(`settings_store_backup`)||ye?be=`read`:g?$(t?.progress)?.status===`unavailable`||$(t?.walletAvailability)?.status===`initializing`&&$(t?.walletAvailability)?.stage===`state_sync`?be=`read`:!ne&&Se()?be=`retry`:ee&&!E&&!(ne&&i.length>0)&&!(C?.input.action===`prepare_review`&&i.includes(`prepare_review`)&&t?.automaticAction===void 0)&&f&&(be=`read`):(v?.state!==`closed`||S)&&(be=`read`));let xe=f?t?.actionRemainingMs:v?.inputRemainingMs;be===`retry`&&o&&(be=`read`);let Ee=f?t?.nextStateReadAfterMs:p&&Te!==void 0?Math.max(0,Te-w):void 0,De=[(f?i.length>0:v?.state===`ready`)?xe:void 0,Ee].filter(e=>typeof e==`number`&&Number.isFinite(e)&&e>0),Oe=!c&&!!g&&s&&!b&&!oe&&x.status!==`read_failed`,ke=$(t?.review),Ae=a&&!c&&!oe&&!S&&!ee&&!y&&!ne&&x.status!==`read_failed`&&(ie||ce?.input.action===`prepare_review`||ke?.preparing===!0||he.success&&he.data.action===`prepare_review`||x.status===`needed`&&ke?.status===`ready_for_wallet_review`);return{current:l,inputEnabled:me,permitted:i,disposition:u,read:D,auto:_e,recover:be,paused:ne,partialDisplayFailure:ae,settingsInputBlocked:ye,reviewUpdatePending:Ae,reviewCommandDeliveryFailed:ee&&C?.input.action===`prepare_review`,reviewHint:o?void 0:Ae?ie||ke?.preparing||ce?.input.action===`prepare_review`?`Updating review…`:`Checking status…`:a&&$(ke?.state)?.refreshReason===`review_evidence_stale`?`Review details are out of date.`:void 0,errors:[x.status===`rejected`?x.message:x.status===`read_failed`?`This card's status could not be checked. Reported message: “${x.message}”`:void 0,oe&&x.status!==`rejected`?`This card could not be opened. Reported message: “${oe}”`:void 0,ee&&C?`Message for this ${Ce(C)}: “${C.message}”`:void 0,S,ae?.message],note:[se,we(u)].filter(Boolean).join(` `),expiryAt:Oe&&l&&De.length?w+Math.min(...De):void 0,poll:Oe&&(E||x.status===`needed`&&!x.automatic),lifetimeAt:!c&&s&&a?pe:void 0}}function Oe(e){return e.recover===`retry`?C?.input.action===`connect`?`Retry connection`:`Retry review`:e.recover===`read`?`Check status`:void 0}function ke(e){if(d.signal.aborted)return``;let n=e.errors.some(Boolean)||e.recover!==void 0||!!v&&!g&&v.state!==`closed`||v?.state===`closed`&&v.reason!==`completed`,r=e.errors.some(Boolean)||x.status!==`confirmed`||e.recover===`retry`||e.settingsInputBlocked;if(n&&r&&x.status!==`rejected`){if(ue||e.read)return`Checking status…`;let t=Oe(e);if(t)return t===`Check status`?S||e.partialDisplayFailure?`Use Check status to read this card and try displaying it again.`:`Use Check status to read this card again.`:t===`Retry connection`?`Use Retry connection to try connecting your wallet again.`:`Use Retry review to try again with the displayed wallet and account.`;if(Ae(e)&&ge?.selectionHint)return ge.selectionHint}return t.guidance?.(v,{confirmed:e.current,readOnly:!g,recoveryNeeded:n,visibleConfirmation:ge?.visibleConfirmation?.(),commandPending:m&&ce&&e.current&&!e.errors.some(Boolean)&&(ce.phase===`confirming`||v?.state===`ready`&&!$(v.data)?.runtimeRecovery&&!$(v.data)?.request&&!$($(v.data)?.review)?.preparing)?{phase:ce.phase,action:String(ce.input.action)}:void 0,approvalUnresolved:C?.input.action===`request_signature`&&e.disposition===`active`||ce?.input.action===`request_signature`,automaticPaused:e.paused})??``}function Ae(e=De()){return e.inputEnabled&&v?.state===`ready`&&ve}function je(e,t=De()){return m&&t.inputEnabled&&(e?t.permitted.includes(e.action):t.permitted.length>0)}function O(e){let t=De();return p&&h&&t.current&&!!g&&!ce&&!ue&&!S&&!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=$(v?.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`,v?(r.textContent=t.titleFor?.(v)??t.title,i.textContent=x.status===`rejected`?`Card unavailable`:!e.current&&v.state===`ready`?_?``:!d.signal.aborted&&(ue||e.read)?`Checking whether actions are available in this card…`:`Actions are unavailable until this card's status is checked.`:!g&&v.state!==`closed`?`View only.`:m?$(u?.progress)?.status===`unavailable`?`Current progress is unavailable. The last recorded state is shown.`:!u?.request&&v.state===`closed`&&[`expired`,`server_restarted`,`cancelled`].includes(v.reason??``)?`This card no longer accepts actions.`:``:v.state===`running`?`Reading the requested data…`:v.reason===`completed`?``:v.error??(v.reason===`expired`?`The time to make a selection has ended.`:v.reason===`server_restarted`?`This request ended when Sui MCP restarted.`:``)):i.textContent=b?``:x.status===`read_failed`?`Card status unavailable`:oe||x.status===`rejected`?`Card unavailable`:`Opening card…`,i.hidden=!i.textContent,a.textContent=[...new Set(e.errors.filter(Boolean))].join(` `),a.hidden=!a.textContent;let ee=s.querySelector(`.review-status`);ee&&(ee.hidden=!!_&&(e.reviewUpdatePending||!!a.textContent));let y=s.querySelector(`.review-material-status`);if(y&&(y.textContent=y.dataset.previous===`true`||!e.current||e.reviewUpdatePending?y.dataset.previousLabel??``:y.dataset.currentLabel??``),o.textContent=[e.note,ke(e)].filter(Boolean).join(` `),o.hidden=!o.textContent,ve)for(let t of s.querySelectorAll(`input, button, select`))(!m||t.tagName!==`BUTTON`||t.dataset.cardAction!==void 0)&&(t.disabled=m?!je(void 0,e):!Ae(e));if(m)for(let t of s.querySelectorAll(`[data-card-action]`))t.disabled=!je({action:t.dataset.cardAction},e);if(p)for(let t of s.querySelectorAll(`[data-settings-file-action]`))t.disabled=t.dataset.settingsLocalBlocked===`true`||!(h?O({action:t.dataset.cardAction}):je({action:t.dataset.cardAction},e));_&&(e.reviewUpdatePending||_.dataset.cardAction===`request_signature`&&e.reviewCommandDeliveryFailed||_.dataset.cardAction===void 0)&&(_.disabled=!0),E&&(E.disabled=!!ce||!!ue)}function Ne(e){try{e?.()}catch{S=`The card display could not be closed cleanly. Its stored information is unchanged.`}}function Pe(e){if(!v||d.signal.aborted)return;if(v.state===`ready`&&x.status!==`confirmed`){if(p&&ge?.update)try{ge.update(v,{automaticPaused:le===`paused`,settings:k,settingsCommandProgress:void 0,onDisplayChange:()=>ze()})}catch{S=`This card could not be displayed. Its stored information is unchanged.`}return}if(v.state===`running`&&!m){S=void 0;return}let n=m?{...$(v.data),actionRemainingMs:void 0,nextStateReadAfterMs:void 0,...p&&$(v.data)?.download?{download:{...$($(v.data)?.download),remainingMs:void 0}}:{}}:void 0,r=p&&ce?.phase===`sending`&&x.status===`confirmed`?Pw(ce.basis,v,ce.input):void 0,i=`${le===`paused`}:${JSON.stringify(r)}:${v.revision}:${g!==void 0}:${y!==void 0}:${ne!==void 0}:${JSON.stringify(n)}`;if(i===D||i===_e&&!e)return;_e=i;let a=[...s.children],o=new Set([...s.querySelectorAll(`details`)].filter(e=>e.open).map(e=>e.querySelector(`summary`)?.textContent)),c,l=!1,u=!1;try{let e={automaticPaused:le===`paused`,onDisplayChange:()=>ze(),...p?{settings:k,settingsCommandProgress:r}:{}};if(ge?.update?.(v,e)){D=i,S=void 0;return}if(v.state===`ready`&&g){let n=t.controls(v,e=>{Ke(e)},y,ne,e);c=`node`in n?n:{node:n},l=!0}else (m||v.reason===`completed`)&&v.data!==void 0&&(c=t.result(v,y,g?e=>{Ke(e)}:void 0,ne,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),S=`This card could not be displayed. Its stored information is unchanged.`;return}let f=ge?.dispose;ge=c,ve=l,D=i,S=void 0,Ne(f)}function Fe(t,n,r,i,a){if(d.signal.aborted||x.status===`rejected`)return!1;if(t.kind!==e||t.cardId!==_)throw x={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:UC.safeParse(o.automaticAction);if(l&&!l.success)throw Error(`This card could not start the next step.`);if(v&&t.revision<v.revision)return!1;if(ee&&[...new Set([...Object.keys(ee),...Object.keys(t.input)])].some(e=>JSON.stringify(t.input[e])!==JSON.stringify(ee[e])))throw x={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 x={status:`rejected`,message:`The saved result does not match the information requested in this card.`},Error(x.message);!ee&&(f||t.state!==`ready`)&&(ee={...t.input});let u=r!==`preview`;if((!v||t.revision!==v.revision)&&(y=void 0,ne=void 0),v=t,xe(),u){w=Date.now();let t=p?$(o?.download):void 0;if(t?.availability===`available`&&typeof t.remainingMs==`number`&&Number.isFinite(t.remainingMs)){let e=`${o?.operationId}:${$(o?.file)?.fileId}:${t.expiresAt}`;Ee!==e&&(Ee=e,Te=void 0),Te=Math.min(Te??1/0,w+Math.max(0,t.remainingMs))}else p&&t?.availability===`ended`&&(Te=void 0);g&&e===`review`&&o?.mode===`review`&&!o.request&&typeof o.actionRemainingMs==`number`&&Number.isFinite(o.actionRemainingMs)&&o.actionRemainingMs>=0&&(pe=Math.min(pe??1/0,w+o.actionRemainingMs))}return r===`read`&&(x.status!==`needed`||a>x.afterRead)&&(x={status:`confirmed`},oe=void 0),n&&(y=n),ne=i,!0}function Ie(){me!==void 0&&clearTimeout(me),he!==void 0&&clearTimeout(he),T!==void 0&&clearTimeout(T),me=void 0,he=void 0,T=void 0,l.hidden=!0}function Le(e){let t=Oe(e);E?.textContent!==t&&(E?.remove(),E=void 0,t&&(E=Kv(t,()=>{if(!(ue||ce||d.signal.aborted))if(De().recover===`retry`){let e=Se();e&&Ge(e)}else Re()})));let n=s.querySelector(`.review-primary-action`),r=s.querySelector(`.review-primary-slot`);n&&(n.hidden=!!E&&!!r),E&&(E.disabled=!!ue||!!ce,r?(E.classList.add(`review-recovery-action`),r.append(E)):(E.classList.remove(`review-recovery-action`),c.append(E)))}async function Re(){let e=ge,t=e?.displayRecovery?.(),n=await Ve(!0);n?.kind===`accepted`&&v===n.snapshot&&x.status===`confirmed`&&!d.signal.aborted&&document.visibilityState!==`hidden`&&!S&&e===ge&&t&&e?.displayRecovery?.()===t&&(t.retry(),ze())}function ze(e=!1){if(b){let e=document.createElement(`p`);e.className=`ui-note`,e.textContent=b,s.replaceChildren(e)}else Pe(e);let t=De();if(Me(t),Ie(),Le(t),d.signal.aborted||x.status===`rejected`)return;t.expiryAt!==void 0&&(he=setTimeout(()=>{Be(),ze()},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)T=setTimeout(r,Math.min(1e3,t));else{let e=De();Me(e),Le(e)}};r()}if(t.poll&&v){let e=w+v.pollAfterMs-Date.now();me=setTimeout(()=>{Ve(!1)},e>0?e:v.pollAfterMs)}t.read?(de=void 0,He()):t.auto&&(me=setTimeout(()=>{let e=De().auto;e&&Je(e,`automatic`)},0))}function Be(){x.status!==`rejected`&&x.status!==`read_failed`&&(x={status:`needed`,afterRead:fe,automatic:!0})}function Ve(e){return d.signal.aborted||x.status===`rejected`||!_||!re?Promise.resolve(void 0):ue?ue.promise:x.status===`read_failed`&&!e?Promise.resolve(void 0):(de=e?`explicit`:`background`,ze(),ue?.promise??Promise.resolve(void 0))}function He(){let e=++fe,t=performance.now(),n={id:e,promise:Promise.resolve().then(async()=>{try{let n,r,i;if(g){let e=Bw(await Ue(Mw.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=`${Ew}${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=bw.parse(JSON.parse(t.text));let i=y??te;r=i&&Rw(n,i)?i:void 0}if(d.signal.aborted||x.status===`rejected`)return{kind:`disposed`,id:e};let a=Fe(n,r,`read`,i,e);return te=void 0,!a&&x.status===`needed`&&e>x.afterRead&&(x={...x,automatic:!1}),ze(a),a&&x.status===`confirmed`?{kind:`accepted`,snapshot:n,id:e,requestStartedAt:t}:{kind:`ignored`,id:e}}catch(t){return d.signal.aborted?{kind:`disposed`,id:e}:(x.status!==`rejected`&&(x={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(()=>{ue===n&&(ue=void 0),ze()})};ue=n,ze()}async function Ue(e,t){return Lw(await u.callServerTool({name:e,arguments:t},{signal:d.signal}))}function We(e,t,n){let r=WC.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&&GC(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 Ge(e){if(!v||ue||!je(e))return;let t={input:e,basis:v,phase:`confirming`};ce=t;let n=await Ve(!1);ce===t&&(ce=void 0,n?.kind===`accepted`&&v===n.snapshot&&x.status===`confirmed`&&!d.signal.aborted&&document.visibilityState!==`hidden`&&We(e,t.basis,n.snapshot)&&je(e)?await Je(e):x.status!==`read_failed`&&x.status!==`rejected`&&!d.signal.aborted&&(se=`The card state changed. Check the current selection before trying again.`),ze())}async function Ke(e){f&&(C?.disposition===`active`||C?.retryRequired||le===`paused`)?await Ge(e):await Je(e)}function qe(e,t,n){C={input:e.input,basis:e.basis,message:t,delivery:n,disposition:`active`,retryRequired:e.input.action===`connect`||e.input.action===`prepare_review`},xe(),[`cancel`,`disconnect`,`stop_connection`,`stop_waiting`,`use_account`].includes(String(e.input.action))&&(le=`paused`),(m||n===`unknown`)&&Be()}async function Je(e,t=`user`){if(!v||!g||(t===`file`?!O(e):m?!je(e):!Ae()))return;let n={input:e,basis:v,phase:`sending`};ce=n,le=`continue`,(t===`user`||C?.disposition!==`past`)&&(C=void 0),se=void 0,ze();try{let t=Bw(await Ue(m?Mw.act:Mw.submit,{...g,revision:n.basis.revision,input:e}));if(d.signal.aborted||x.status===`rejected`)return;if(!t.snapshot)throw Error(t.error??`The request could not be confirmed.`);t.error&&qe(n,t.error,`rejected`),Fe(t.snapshot,t.display,`action`,t.wallet)}catch(e){!d.signal.aborted&&x.status!==`rejected`&&(qe(n,e instanceof Error?e.message:`The request could not be confirmed.`,`unknown`),C&&(C.data=$(e)?.data))}finally{ce===n&&(ce=void 0),ze()}}let k={uploadChunkLimit(e,t){return g?gw({jsonrpc:`2.0`,id:2**53-1,method:`tools/call`,params:{name:Mw.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 Ve(!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?!O(e):!je(e))throw Error(`This Settings action is unavailable until its current status has been checked.`);if(await Je(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(!v)throw Error(`The current Settings status could not be checked.`);return v},setFileTransferActive(e){h=e,ze()},async readFile(e){if(!g||!_||!De().current||d.signal.aborted)throw Error(`Backup read permission is unavailable.`);let t=await Ue(Mw.readSettingsFile,{...g,...e}),n=jw.parse($(t._meta)?.[Tw]);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=$($(v?.data)?.download);if(!g||!De().current||d.signal.aborted||document.visibilityState===`hidden`||r&&(r.currentAttemptId!==n||r.localSave||r.availability!==`available`||Te===void 0||Date.now()>=Te))throw Error(`This download is no longer available in this card.`);try{return{isError:(await u.downloadFile({contents:[{type:`resource`,resource:{uri:`file:///${encodeURIComponent(e)}`,mimeType:`application/json`,blob:t}}]},{signal:d.signal})).isError}}catch(e){if(e&&typeof e==`object`&&`code`in e&&e.code===-32601)return{unsupported:!0};throw e}}};async function Ye(){if(!(!re||ae===void 0||ie)){ie=!0;try{let t=Lw(ae),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?.[Sw];if(r!==void 0){let e=Ow.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=Bw(t);if(i.inputRequired){if(i.inputRequired.kind!==e||g)throw Error(`The app provided inconsistent card input information.`);b=i.inputRequired.message,ze();return}let a=zw(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 x={status:`rejected`,message:`The returned information does not match this card.`},Error(x.message);_=o[0];let s=i.snapshot;s&&(f||s.state!==`ready`)&&(ee={...s.input}),te=i.display,s&&g&&Fe(s,i.display,`preview`,i.wallet),Be(),ze()}catch(e){if(d.signal.aborted)return;oe=e instanceof Error?e.message:`Card data could not be read.`,ze()}}}u.ontoolresult=e=>{if(ae===void 0){ae=e,Ye();return}try{let t=Bw(Lw(ae)).snapshot??v,n=Bw(Lw(e)).snapshot;if(t&&n&&(t.cardId!==n.cardId||t.kind!==n.kind))throw Error(`The app returned a different card.`)}catch{x={status:`rejected`,message:`The returned information does not match this card.`},ze()}},u.onhostcontextchanged=e=>{e.theme&&(document.documentElement.dataset.theme=e.theme)};let Xe=()=>{document.visibilityState!==`hidden`&&g&&ie&&x.status!==`read_failed`?Ve(!1):ze()};document.addEventListener?.(`visibilitychange`,Xe),u.onteardown=async()=>{if(d.signal.aborted)return{};d.abort(),ce=void 0,document.removeEventListener?.(`visibilitychange`,Xe);let e=ge?.dispose;return ge=void 0,Ne(e),ze(),{}},u.connect().then(()=>{d.signal.aborted||(re=!0,document.documentElement.dataset.theme=u.getHostContext()?.theme??`light`,Ye())}).catch(()=>{d.signal.aborted||(oe=`Could not connect this card to the app.`,ze())})}function Hw(e){let t=``;for(let n of e)t+=String.fromCharCode(n);return btoa(t)}function Uw(e){let t=atob(e),n=Uint8Array.from(t,e=>e.charCodeAt(0));if(Hw(n)!==e)throw Error(`Part of the backup could not be read correctly.`);return n}async function Ww(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=sb(tx(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=fw.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:Hw(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=fw.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=fw.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 Gw(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=Uw(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||sb(tx(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=fw.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,Hw(i),e.attemptId):t.download(e.displayName,Hw(i))),o=a.unsupported===!0?`unsupported`:a.isError===!0?`not_completed`:`acknowledged`;return r()&&n(o),o}catch{return r()&&n(`unconfirmed`),`unconfirmed`}}var Kw={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`},qw={overview:`Settings`,address:`Address for viewing assets`,records:`Local records`,troubleshooting:`Troubleshooting`,advanced:`Advanced settings`},Jw={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.`},Yw=`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.`,Xw=`Fully quit every app using Sui MCP, then reopen them. Closing a window or quitting only one app may leave Sui MCP running.`,Zw={available:`Ready`,initializing:`Starting`,recovering:`Restarting`,unavailable:`Unavailable`},Qw={environment:`App launch settings`,local_db:`Saved in Sui MCP`,builtin_default:`Built-in default`},$w={connected:`Connected`,awaiting_approval:`Waiting for wallet approval`,rejected:`Rejected`,failed:`Failed`,expired:`Expired`,stopped:`Stopped`,disconnected:`Disconnected`},eT=[[`accounts`,`Saved addresses`],[`reviewSessions`,`Reviews`],[`reviewRequests`,`Transaction requests`],[`outcomeUnknownRequests`,`Transaction requests with unconfirmed results`],[`externalActivityTransactions`,`Activity records`],[`localSettings`,`Saved network settings`]],tT={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?`},nT={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 rT(e){return e&&typeof e==`object`&&!Array.isArray(e)?e:{}}function iT(e){return e===`clear_read_address`?`address`:e===`set_endpoint`||e===`restore_endpoint`?`advanced`:e===`restart_wallet_service`?`troubleshooting`:e?`records`:`overview`}function aT(e,t,n){let r=rT(t);e.append(J(`h3`,void 0,n));for(let[t,n]of eT)typeof r[t]==`number`&&e.append(Y(n,String(r[t])))}function oT(e,t,n){let r=fw.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,_,ee=J(`div`,`settings-card`),v=(e,n,r=`secondary`)=>{let i=Kv(e,()=>{!o&&!u&&t?.(n)},r);return i.dataset.cardAction=String(n.action),i},y=(e,t)=>{let n=Kv(e,()=>{if(o)return;let e=a.kind===`section`?a.page:iT(a.operation);a=t,C(),(t.kind===`section`&&t.page===`overview`?[...ee.querySelectorAll(`.settings-menu-item`)].find(t=>t.dataset.settingsPage===e):ee.querySelector(`.settings-back`))?.focus(),c?.()},`secondary`);return n.setAttribute(`aria-label`,e),n.dataset.settingsPage=t.kind===`section`?t.page:iT(t.operation),n},te=(e,n,i=!1,s=!1)=>{let d=Kv(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 ne(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 re(e){let t=J(`div`,`settings-action-row`);return t.setAttribute(`aria-label`,`Settings operation actions`),t.append(e),t}async function ie(){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&&ie()}})}finally{o||(s.setFileTransferActive(!!p),C(),c?.())}}function ae(){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};Gw(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 ie())}).finally(()=>{p===e&&(p=void 0,u=!1),o||(s?.setFileTransferActive(!!p),C(),c?.())})}function b(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?.(),ae())}).catch(()=>{p===i&&(p=void 0,u=!1),o||(s?.setFileTransferActive(!1),C(),c?.())})}function x(e,t,n,r=!1){let i=Kv(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 oe(e){let n=r.download,i=r.draft?.kind===`download_backup`?r.file:void 0;if(!S(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(x(`Retry download`,`settings_retry_download`,()=>b(!0),!!p||!!m))}t&&s&&r.file&&n?.allowedFileActions.includes(`settings_cancel_download`)&&e.append(x(`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 S(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(x(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=Qv(`Details`);if(r.facts&&a.body.append(Y(`Version`,r.facts.server.version)),a.body.append(Y(`Settings request ID`,$v(r.operationId))),i&&i.kind===r.draft?.kind&&r.file&&a.body.append(Y(`File SHA-256`,$v(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=rT(r.preparation.preview);aT(a.body,e.currentCounts,`Checked local records`),aT(a.body,e.incomingCounts,`Backup records`),a.body.append(Y(`Default address before restoring`,typeof e.currentReadAddress==`string`?$v(e.currentReadAddress):`Not selected`),Y(`Default address in this backup`,typeof e.incomingReadAddress==`string`?$v(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`,Qw[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`,$v(r.preparation.walletRunId)));for(let e of n.connections)a.body.append(Y(`${e.walletName??`Wallet`} connection ID`,$v(e.connectionId)));for(let e of n.requests)a.body.append(Y(`Transaction request ID`,$v(e.attempt_id)),Y(`Recorded request status`,e.request_status))}e.append(a.details)}function C(e=!1){let n=ee.querySelector(`details`)?.open===!0,m=e?[...ee.querySelectorAll(`input`)].filter(e=>e.type!==`file`).map(e=>e.value):void 0,h=Zv(),ie=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,ae=r.result||r.restoreCheck?.status===`can_restore`||r.restoreCheck?.status===`cannot_restore`&&[`invalid_backup`,`file_unavailable`,`input_unavailable`].includes(r.restoreCheck.reason),S=r.restoreCheck?.status===`checking`||!ae&&(ie?.kind===`backup_check_response`||_?.progress?.stage===`checking`),ce=[`executing`,`stopping`,`starting`].includes(r.phase)||S,le=r.draft?.kind===`import_local_data`&&r.restoreCheck?.status===`can_restore`,ue=p?.phase===`admitting`,de=ue?`progress`:r.result?`result`:ce?`progress`:a.kind===`section`?`section`:r.phase===`prepared`&&(r.draft?.kind!==`import_local_data`||le)?`confirmation`:`input`,fe=a.kind===`section`?a.page:iT(a.operation),w=ue?{kind:`download_backup`}:de===`section`?void 0:r.draft,pe=w?iT(w.kind):fe,me=w?.kind===`restart_wallet_service`&&r.preparation?.impact?Gb.parse(r.preparation.impact):void 0,he=de===`result`||de===`progress`?g??2:de===`confirmation`?3:de===`input`?2:pe===`overview`?0:1;h.classList.add(`settings-page`),g!==void 0&&he!==g&&h.classList.add(he>g?`settings-page--forward`:`settings-page--back`),g=he;let T=J(`nav`,`settings-toolbar`);if(T.setAttribute(`aria-label`,`Settings navigation`),ee.dataset.settingsPage=pe,de===`confirmation`&&w&&t&&r.allowedActions.includes(`settings_back`)){let e=`Back to ${Kw[w.kind]}`,n=Kv(e,()=>{o||u||(a={kind:`operation`,operation:w.kind},t({action:`settings_back`,operationId:r.operationId}))},`secondary`);n.dataset.cardAction=`settings_back`,n.setAttribute(`aria-label`,e),n.classList.add(`settings-back`),T.append(n)}else if(de===`input`&&w&&t){let e=y(`Back to ${qw[pe]}`,{kind:`section`,page:pe});e.classList.add(`settings-back`),T.append(e)}else if(de===`section`&&pe!==`overview`){let e=y(`Back to Settings`,{kind:`section`,page:`overview`});e.classList.add(`settings-back`),T.append(e)}let E=J(`span`,`settings-location`,[`Settings`,...pe===`overview`?[]:[qw[pe]],...w?[Kw[w.kind]]:[],...de===`result`?[`Result`]:de===`progress`?[w?.kind===`download_backup`?`Downloading`:S?`Checking backup`:`Applying change`]:de===`confirmation`?[`Confirm`]:[]].join(` / `));if(E.setAttribute(`aria-current`,`page`),T.append(E),h.append(T),w?.kind===`download_backup`)oe(h);else if(de===`result`&&r.result){h.append(J(`p`,r.result.outcome===`failed`?`ui-error`:`ui-note`,r.result.message));let e=rT(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`,Xw))),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=Kv(`Download this backup`,()=>{o||!s||!r.file||u||(u=!0,e.disabled=!0,Gw({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(de===`progress`){let e=J(`p`,`ui-note`,S?`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(de===`confirmation`&&r.draft){if(h.append(J(`h2`,void 0,tT[r.draft.kind])),le&&r.file&&h.append(Y(`Backup file`,r.file.displayName)),r.draft.kind===`set_endpoint`||r.draft.kind===`restore_endpoint`){let e=rT(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`,Yw)),r.draft.kind===`reset_local_data`||r.draft.kind===`import_local_data`){le?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=rT(r.preparation?.preview);if(r.draft.kind===`import_local_data`){let t=rT(e.currentCounts),n=rT(e.incomingCounts);h.append(J(`h3`,void 0,`Records to replace (now → backup)`));for(let[e,r]of eT)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`?$v(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 aT(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=me??Gb.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`,$w[t.status]));for(let e of t.accounts)h.append(Y(`Recorded wallet address`,$v(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(re(v(nT[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(w){let e;if(h.append(J(`h2`,void 0,Kw[w.kind])),pe===`records`&&h.append(J(`p`,`ui-note`,Yw)),w.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&&!S&&!ae){let e=J(`p`,`ui-note`,_.progress.stage===`reading`?`Reading the selected file…`:`Receiving backup…`);e.setAttribute(`role`,`status`),h.append(e)}let n=Yv({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,Ww(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(Xv(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=v(`Check backup again`,{action:`settings_prepare`,operationId:r.operationId},`primary`)),t&&h.append(te(`Change backup file`,{kind:`import_local_data`},!1,!0)))}else{if(w.kind===`set_endpoint`||w.kind===`restore_endpoint`){let e=w.endpoint===`grpc`?r.facts?.localSettings.suiGrpcUrl:r.facts?.localSettings.suiGraphqlUrl;h.append(Y(`Network setting`,w.endpoint===`grpc`?`Sui node (gRPC)`:`Activity data (GraphQL)`)),e&&h.append(Y(`Current saved address`,e.storedValue)),w.kind===`set_endpoint`?h.append(Y(`Selected network address`,w.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 w.kind===`clear_read_address`?h.append(Y(`Default address for viewing assets`,r.facts?.readAddress?$v(r.facts.readAddress):`Not selected`),J(`p`,`ui-note`,`Clearing this default does not disconnect your wallet or change wallet approvals.`)):w.kind===`restart_wallet_service`?(r.facts&&h.append(Y(`Wallet connection service`,Zw[r.facts.walletAvailability.status])),r.facts?.connectionReconciliationRequired&&h.append(J(`p`,`ui-error`,Jb)),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.`))):w.kind===`export_local_data`?h.append(J(`p`,`ui-note`,`Review the local records to save, then create the backup file.`)):w.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=v(`Continue`,{action:`settings_prepare`,operationId:r.operationId},`primary`))}e&&h.append(re(e))}else{if(h.append(J(`h2`,void 0,fe===`overview`?`Choose a section`:qw[fe])),fe===`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`,Jb));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=y(qw[e],{kind:`section`,page:e});n.classList.add(`settings-menu-item`),n.setAttribute(`aria-label`,qw[e]),n.textContent=``,n.append(J(`span`,`settings-menu-title`,qw[e]),J(`span`,`settings-menu-description`,Jw[e])),t.append(n)}if(h.append(t),r.draft){let e=J(`div`,`settings-pending`);e.append(J(`p`,`ui-note`,`Unfinished change: ${Kw[r.draft.kind]}.`),y(`Resume`,{kind:`operation`,operation:r.draft.kind})),h.append(e)}}else if(fe===`address`)h.append(Y(`Default address for viewing assets`,r.facts?.readAddress?$v(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(te(`Clear default address`,{kind:`clear_read_address`}));else if(fe===`records`)h.append(J(`p`,`ui-note`,Yw)),t&&h.append(ne(`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.`,x(`Download backup`,`settings_download_backup`,()=>b(!1))),ne(`Restore`,`Choose a Sui MCP backup. It will be checked automatically before you confirm the restore.`,te(`Restore local records`,{kind:`import_local_data`})),ne(`Reset`,`Review the local records and stored settings to delete. This does not cancel transactions on Sui.`,te(`Reset local data`,{kind:`reset_local_data`},!0)));else if(fe===`troubleshooting`)r.facts&&(h.append(Y(`Wallet connection service`,Zw[r.facts.walletAvailability.status])),r.facts.connectionReconciliationRequired&&h.append(J(`p`,`ui-error`,Jb)),r.facts.observedAt&&h.append(Y(`Status checked at`,ey(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(te(`Restart connection service`,{kind:`restart_wallet_service`}));else if(fe===`advanced`&&r.facts)for(let e of[`grpc`,`graphql`]){let n=e===`grpc`?r.facts.localSettings.suiGrpcUrl:r.facts.localSettings.suiGraphqlUrl,i=Yv({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(Xv(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=Kv(`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(qv(n,te(`Select default network address`,{kind:`restore_endpoint`,endpoint:e})))}n.appliesAfter&&a.append(J(`p`,`ui-note`,`A saved change needs an app restart. Fully quit every app using Sui MCP, then reopen them. Closing a window or quitting only one app may leave Sui MCP running.`)),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)}fe!==`overview`&&r.draft&&fe===iT(r.draft.kind)&&h.append(J(`p`,`ui-note`,`Unfinished change: ${Kw[r.draft.kind]}.`),y(`Resume`,{kind:`operation`,operation:r.draft.kind})),t&&fe===`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(Jv(v(`Close Settings`,{action:`settings_cancel`}))))}if(ie?.kind===`preparation_response`&&!r.result&&!ce){let e=J(`p`,`ui-note`,`Waiting for a response…`);e.setAttribute(`role`,`status`),h.append(e)}l&&de===`input`&&w?.kind===`import_local_data`&&h.append(J(`p`,`ui-note`,l.message)),se(h,pe,me,w),ee.replaceChildren(h),m&&[...ee.querySelectorAll(`input`)].filter(e=>e.type!==`file`).forEach((e,t)=>{m[t]!==void 0&&(e.value=m[t])}),n&&(ee.querySelector(`details`).open=!0)}return C(),{node:ee,update(e,t){let n=fw.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:iT(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),ae(),!0},displayRecovery(){return m?h:void 0},dispose(){o=!0,_=void 0,l=void 0,p=void 0,m=void 0}}}Vw(`settings`,{title:`Settings`,controls:(e,t,n,r,i)=>oT(e,t,i),result:(e,t,n,r,i)=>oT(e,n,i)});</script></body></html>