chainlesschain 0.166.138 → 0.166.140

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 (166) hide show
  1. package/README.md +37 -11
  2. package/package.json +1 -1
  3. package/src/assets/linux-subreaper/linux-arm64/manifest.json +1 -1
  4. package/src/assets/linux-subreaper/linux-x64/manifest.json +1 -1
  5. package/src/assets/web-panel/assets/{AIOps-CHItp4vg.js → AIOps-BefmcZw2.js} +1 -1
  6. package/src/assets/web-panel/assets/{ActionButton-nhMNWW_d.js → ActionButton-BBlS9rmj.js} +1 -1
  7. package/src/assets/web-panel/assets/{Analytics-DRc81BBI.js → Analytics-DfNjXT9e.js} +1 -1
  8. package/src/assets/web-panel/assets/{AppLayout-CVt7HMkp.js → AppLayout-CIBZPPMS.js} +2 -2
  9. package/src/assets/web-panel/assets/{Artifacts-BuJgG5jf.js → Artifacts-CE66rTTZ.js} +1 -1
  10. package/src/assets/web-panel/assets/{Audit-msNg0aH-.js → Audit-DOC8Lt8U.js} +1 -1
  11. package/src/assets/web-panel/assets/{BackgroundAgents-BpcV8yWC.js → BackgroundAgents-9TMG041Q.js} +1 -1
  12. package/src/assets/web-panel/assets/{Backup-P53DADwG.js → Backup-us3KWb9F.js} +1 -1
  13. package/src/assets/web-panel/assets/{BaseInput-DFxT2yWN.js → BaseInput-D6Q95Wr5.js} +1 -1
  14. package/src/assets/web-panel/assets/{Chat-BXoHisHW.js → Chat-BPrM5ARp.js} +1 -1
  15. package/src/assets/web-panel/assets/{ChatBubbleRenderer-DMGtSdDx.js → ChatBubbleRenderer-Drs9vSc4.js} +1 -1
  16. package/src/assets/web-panel/assets/{Checkbox-B4g_ckJq.js → Checkbox-DqZGMV0o.js} +1 -1
  17. package/src/assets/web-panel/assets/{Codegen-C6SSSOfp.js → Codegen-CmolL6wr.js} +1 -1
  18. package/src/assets/web-panel/assets/{Col-IO1NEUYL.js → Col-BwHSmoYQ.js} +1 -1
  19. package/src/assets/web-panel/assets/{Community-CdEBl93F.js → Community-DGWqobpd.js} +1 -1
  20. package/src/assets/web-panel/assets/{Compact-DYs0a9k7.js → Compact-t_yy09-r.js} +1 -1
  21. package/src/assets/web-panel/assets/{Compliance-BPnk7948.js → Compliance-D0S8-EsN.js} +1 -1
  22. package/src/assets/web-panel/assets/{Cowork-VLOTGbza.js → Cowork-Y1LiuRwP.js} +1 -1
  23. package/src/assets/web-panel/assets/{Cron-_9GgQLJo.js → Cron-FTqEw7QV.js} +1 -1
  24. package/src/assets/web-panel/assets/{Crosschain-B21yn0qy.js → Crosschain-C3rPZ4Qu.js} +1 -1
  25. package/src/assets/web-panel/assets/{DID-mBeDgRZ7.js → DID-Ba2zySM-.js} +1 -1
  26. package/src/assets/web-panel/assets/{Dashboard-BckYYzhP.js → Dashboard-D6xyN2ND.js} +2 -2
  27. package/src/assets/web-panel/assets/{Dropdown-DEedqFiE.js → Dropdown-BF4QuXJw.js} +1 -1
  28. package/src/assets/web-panel/assets/{EmailListRenderer-CMs0k9TB.js → EmailListRenderer-s9dUxq14.js} +1 -1
  29. package/src/assets/web-panel/assets/{EvolutionSettings-B00Qd0fN.js → EvolutionSettings-CoAKOfqZ.js} +1 -1
  30. package/src/assets/web-panel/assets/{FamilyGuardDashboard-DxMTAMa8.js → FamilyGuardDashboard-CEznwH1c.js} +1 -1
  31. package/src/assets/web-panel/assets/{Federation-B-UZw0LO.js → Federation-rIzOt8-a.js} +1 -1
  32. package/src/assets/web-panel/assets/{FormItemContext-CkafazEw.js → FormItemContext-BARFiExr.js} +1 -1
  33. package/src/assets/web-panel/assets/{GenericCardRenderer-DEUG25ZJ.js → GenericCardRenderer-DI0A4swS.js} +1 -1
  34. package/src/assets/web-panel/assets/{Git-D7dr9oz9.js → Git-DdmysND4.js} +1 -1
  35. package/src/assets/web-panel/assets/{Governance-DKlUJ1wg.js → Governance-DrdhwUz2.js} +1 -1
  36. package/src/assets/web-panel/assets/{Inference-BJKqplap.js → Inference-Scm8tumd.js} +1 -1
  37. package/src/assets/web-panel/assets/{KnowledgeGraph-B78fB-bz.js → KnowledgeGraph-_6bgPs4W.js} +1 -1
  38. package/src/assets/web-panel/assets/{Logs-DJGcHYH_.js → Logs-DW_v7bSo.js} +1 -1
  39. package/src/assets/web-panel/assets/{MarkdownRenderer-DkcG_MxW.js → MarkdownRenderer-7JABuv1j.js} +1 -1
  40. package/src/assets/web-panel/assets/{Marketplace-ucTbwByD.js → Marketplace-0h3YSvME.js} +1 -1
  41. package/src/assets/web-panel/assets/{McpTools-Cu1xZYYk.js → McpTools-Byrg0Y3e.js} +1 -1
  42. package/src/assets/web-panel/assets/{Memory-DCGpXmi-.js → Memory-Cyoq-o29.js} +1 -1
  43. package/src/assets/web-panel/assets/{MobileBridge-BnKr0aAS.js → MobileBridge-ISIlploU.js} +1 -1
  44. package/src/assets/web-panel/assets/{MobileProjects-C5UvYJTP.js → MobileProjects-04EncaRx.js} +1 -1
  45. package/src/assets/web-panel/assets/{Mtc-D1UUl4WH.js → Mtc-BMzkpyOF.js} +1 -1
  46. package/src/assets/web-panel/assets/{MtcAudit-D3aa8XP4.js → MtcAudit-Cx7BR5sz.js} +1 -1
  47. package/src/assets/web-panel/assets/{Multisig-DiXdfJjO.js → Multisig-D4pmkSX4.js} +1 -1
  48. package/src/assets/web-panel/assets/{NLProgramming-DbWABgSE.js → NLProgramming-CCfaaWNu.js} +1 -1
  49. package/src/assets/web-panel/assets/{Notes-BP1DPl-R.js → Notes-Mq-1ZyaH.js} +1 -1
  50. package/src/assets/web-panel/assets/{NotificationSettings-xaB6ONe7.js → NotificationSettings-rzf5V1TR.js} +1 -1
  51. package/src/assets/web-panel/assets/{OrderTableRenderer-D1uNcz3b.js → OrderTableRenderer-OREUs5ue.js} +1 -1
  52. package/src/assets/web-panel/assets/{Organization-DMLDGaf1.js → Organization-BQfOATgw.js} +1 -1
  53. package/src/assets/web-panel/assets/{Overflow-DH4QPEoI.js → Overflow-D7Pa6aaA.js} +1 -1
  54. package/src/assets/web-panel/assets/{P2P-Bl4OS10o.js → P2P-CaJ79ZsC.js} +1 -1
  55. package/src/assets/web-panel/assets/{PdhVaultBrowser-D9XSE2YI.js → PdhVaultBrowser-CtimQQN3.js} +2 -2
  56. package/src/assets/web-panel/assets/{Permissions-CUaPlr6d.js → Permissions-AzmmkLZ0.js} +1 -1
  57. package/src/assets/web-panel/assets/{PersonalDataHub-Ba92dZk-.js → PersonalDataHub-BRU8ME7z.js} +1 -1
  58. package/src/assets/web-panel/assets/{Pipeline-Bh2okm-8.js → Pipeline-BnNqutXh.js} +1 -1
  59. package/src/assets/web-panel/assets/{Privacy-Bmq3p4gC.js → Privacy-gMyZcxsz.js} +1 -1
  60. package/src/assets/web-panel/assets/{ProjectInit-BPu2fdKR.js → ProjectInit-CkK-Fvr0.js} +1 -1
  61. package/src/assets/web-panel/assets/{ProjectSettings-D6ABLpmt.js → ProjectSettings-CGY_uiIX.js} +1 -1
  62. package/src/assets/web-panel/assets/{Projects-qWHEve0z.js → Projects-DBNC7xXG.js} +1 -1
  63. package/src/assets/web-panel/assets/{Providers-D9DI-2hc.js → Providers-BVgWawtE.js} +1 -1
  64. package/src/assets/web-panel/assets/{QrScannerModal-CxifoeD5.js → QrScannerModal-DZILESCa.js} +1 -1
  65. package/src/assets/web-panel/assets/{QuickAsk-DC1BvwR7.js → QuickAsk-DwRBzFWW.js} +1 -1
  66. package/src/assets/web-panel/assets/{Recommend-CKqbMB5o.js → Recommend-B3VxvUih.js} +1 -1
  67. package/src/assets/web-panel/assets/{RemoteSession-BGGzPdS5.js → RemoteSession-DM74lufU.js} +1 -1
  68. package/src/assets/web-panel/assets/{Reputation-DH90O9-5.js → Reputation-DOOEuGHh.js} +1 -1
  69. package/src/assets/web-panel/assets/{Row-h7ovueJc.js → Row-BZJYAo0S.js} +1 -1
  70. package/src/assets/web-panel/assets/{RssFeed-DaHxXTZg.js → RssFeed-CYw44jcD.js} +1 -1
  71. package/src/assets/web-panel/assets/{Search-Bn6Nqpn4.js → Search-CbypjDNG.js} +1 -1
  72. package/src/assets/web-panel/assets/{Security-ClbBmPJi.js → Security-0rSBDrXh.js} +1 -1
  73. package/src/assets/web-panel/assets/{Services-ChHLQwRn.js → Services-kqP79CBD.js} +1 -1
  74. package/src/assets/web-panel/assets/{Skeleton-DfN6BFzt.js → Skeleton-BjxvGVfI.js} +1 -1
  75. package/src/assets/web-panel/assets/{Skills-C926wDev.js → Skills-SOoWyPCO.js} +1 -1
  76. package/src/assets/web-panel/assets/{Sla-DJzi1l1M.js → Sla-kdRVAT19.js} +1 -1
  77. package/src/assets/web-panel/assets/{SpeechSettings-_GSyVjm_.js → SpeechSettings-DILtcMaJ.js} +1 -1
  78. package/src/assets/web-panel/assets/{SyncSettings-B67xnERe.js → SyncSettings-C98Jauc4.js} +1 -1
  79. package/src/assets/web-panel/assets/{Tasks-BaYZadcG.js → Tasks-Bw-KaQAs.js} +1 -1
  80. package/src/assets/web-panel/assets/{Templates-Bu8kN1Xt.js → Templates-CDJ027Hd.js} +1 -1
  81. package/src/assets/web-panel/assets/{Tenant-BM9qufw1.js → Tenant-BqNV62UA.js} +1 -1
  82. package/src/assets/web-panel/assets/{Terminal-MEdd5DjB.js → Terminal-B8aQ3GLO.js} +1 -1
  83. package/src/assets/web-panel/assets/{TimelineRenderer-C27kL2oU.js → TimelineRenderer-BSpccq11.js} +1 -1
  84. package/src/assets/web-panel/assets/{Tokens-Cvjd98VC.js → Tokens-BbGMoFO6.js} +1 -1
  85. package/src/assets/web-panel/assets/{Trigger-CLym84HI.js → Trigger-D75Mawa_.js} +1 -1
  86. package/src/assets/web-panel/assets/{Trust-Bv2JTaNN.js → Trust-BiK_Pk05.js} +1 -1
  87. package/src/assets/web-panel/assets/{UkeySign-CSCkNbtm.js → UkeySign-Dv2xX_b9.js} +1 -1
  88. package/src/assets/web-panel/assets/{VideoEditing-BFDXB4xh.js → VideoEditing-CdBWfeEE.js} +1 -1
  89. package/src/assets/web-panel/assets/{Wallet-CMEFrG_b.js → Wallet-Cvrp4agg.js} +1 -1
  90. package/src/assets/web-panel/assets/{WebAuthn-x4eO_Q4y.js → WebAuthn-D0Htlf3v.js} +1 -1
  91. package/src/assets/web-panel/assets/{WorkflowEditor-ClWEPgV1.js → WorkflowEditor-nuUBOHIF.js} +1 -1
  92. package/src/assets/web-panel/assets/{chat-BdYOI4gM.js → chat-C6MLShIo.js} +1 -1
  93. package/src/assets/web-panel/assets/{colors-DcTBrGvS.js → colors-9G5FqFOC.js} +1 -1
  94. package/src/assets/web-panel/assets/{compact-item-Dn2ktVuj.js → compact-item-0M49EurU.js} +1 -1
  95. package/src/assets/web-panel/assets/{createContext-XTreuyqp.js → createContext-CiDDLED_.js} +1 -1
  96. package/src/assets/web-panel/assets/{hasIn-CFRNsYQd.js → hasIn-wZvUczmn.js} +1 -1
  97. package/src/assets/web-panel/assets/{index-ir2ZwWz5.js → index-8jz-X3xg.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-DFl_a0n5.js → index-B0JZ_ccM.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-kzyCd8a0.js → index-B6TAOS4G.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-CsnYp4qF.js → index-BCfxxScC.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-CbaPXyNc.js → index-BTCIIdoS.js} +1 -1
  102. package/src/assets/web-panel/assets/{index-ma-rJkfE.js → index-BVV2mBbo.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-DQEu7uW0.js → index-BWTcG128.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-DW9XncMy.js → index-BXIY2BIN.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-D45vulkq.js → index-B_XOMujL.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-DNdiAymC.js → index-BfwJm0DU.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-CjHA_Q7s.js → index-BlcOkfzz.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-Daa1yCt_.js → index-BmS2P_eX.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-DdVpoNEQ.js → index-BzeA3eRQ.js} +1 -1
  110. package/src/assets/web-panel/assets/index-C101Sec6.js +1 -0
  111. package/src/assets/web-panel/assets/{index-BBd64wj8.js → index-C63qiwQz.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-lnTt0Jps.js → index-CTy9gD3m.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-CRW3AWdS.js → index-CdUmgLxP.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-Vo7A4aiN.js → index-CdaLWIz-.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-CUT4h5JB.js → index-CoxzvhoN.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-3RqDry-K.js → index-Cs66y4oC.js} +3 -3
  117. package/src/assets/web-panel/assets/{index-BMLpP8QQ.js → index-CtbFv3Et.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-CG9YLDmI.js → index-Cz1SAgnb.js} +1 -1
  119. package/src/assets/web-panel/assets/index-D23TaGOp.js +1 -0
  120. package/src/assets/web-panel/assets/{index-Brc0BF-k.js → index-D2wN6VIq.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-BSqydcDa.js → index-D51V5vmz.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-CXMa7Z-S.js → index-D9J_tLGk.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-BV6LojRv.js → index-DN9t1qjW.js} +1 -1
  124. package/src/assets/web-panel/assets/{index-CNHWMMDX.js → index-DOxTmc3k.js} +1 -1
  125. package/src/assets/web-panel/assets/{index-BEyVNbNE.js → index-DcZxOXd8.js} +1 -1
  126. package/src/assets/web-panel/assets/{index-D9kPBEqD.js → index-Dclwd_lj.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-DDTSgpXz.js → index-DeHSwWVG.js} +1 -1
  128. package/src/assets/web-panel/assets/{index-XdlYkgCa.js → index-DvWRS-s7.js} +1 -1
  129. package/src/assets/web-panel/assets/{index-r5sNECM5.js → index-DwUOiN8M.js} +1 -1
  130. package/src/assets/web-panel/assets/{index-8METW_Wr.js → index-DwX9cOL6.js} +1 -1
  131. package/src/assets/web-panel/assets/{index-uT4fRDzU.js → index-JhfNEldK.js} +1 -1
  132. package/src/assets/web-panel/assets/{index-BbMWvjLZ.js → index-dJ_V_Fqy.js} +1 -1
  133. package/src/assets/web-panel/assets/{index-COuEJdmr.js → index-k0BVfcwQ.js} +1 -1
  134. package/src/assets/web-panel/assets/{index-Dhi4Oybt.js → index-qJcOtd8J.js} +1 -1
  135. package/src/assets/web-panel/assets/{index-oE4jTpHK.js → index-sBsJaBmM.js} +1 -1
  136. package/src/assets/web-panel/assets/{initDefaultProps-mdL0oeZa.js → initDefaultProps-DyIyjurJ.js} +1 -1
  137. package/src/assets/web-panel/assets/{motion-ZgVCKcEX.js → motion-B2D0PuTM.js} +1 -1
  138. package/src/assets/web-panel/assets/{move-A_28O5T2.js → move-B22T5MnN.js} +1 -1
  139. package/src/assets/web-panel/assets/{mtc-parser-0zlMjabo.js → mtc-parser-i4b7HNzF.js} +1 -1
  140. package/src/assets/web-panel/assets/{omit-DF7mU3yG.js → omit-ByNIr_gz.js} +1 -1
  141. package/src/assets/web-panel/assets/{pickAttrs-Cmt8liJP.js → pickAttrs-_xP2RvxA.js} +1 -1
  142. package/src/assets/web-panel/assets/{placementArrow-DaMDC57b.js → placementArrow-CVDvzK0z.js} +1 -1
  143. package/src/assets/web-panel/assets/{responsiveObserve-CHw_f2d3.js → responsiveObserve-CI1toXJ_.js} +1 -1
  144. package/src/assets/web-panel/assets/{slide-DJS9fFQq.js → slide-2_VosSRQ.js} +1 -1
  145. package/src/assets/web-panel/assets/{statusUtils-Bk3XdZwh.js → statusUtils-CMiWWrZC.js} +1 -1
  146. package/src/assets/web-panel/assets/{styleChecker-DMybAFsA.js → styleChecker-DY8wTVCe.js} +1 -1
  147. package/src/assets/web-panel/assets/{useFlexGapSupport-_tbIIFMu.js → useFlexGapSupport-DkdcgIyl.js} +1 -1
  148. package/src/assets/web-panel/assets/{useFs-KPklVptS.js → useFs-gpl11PEF.js} +1 -1
  149. package/src/assets/web-panel/assets/{usePersonalDataHub-C7FrKDhD.js → usePersonalDataHub-DqnQ0H9y.js} +1 -1
  150. package/src/assets/web-panel/assets/{vnode-DB3JBusp.js → vnode-CgY9xUvr.js} +1 -1
  151. package/src/assets/web-panel/assets/{zoom-C8rAdf81.js → zoom-Ch0jan5_.js} +1 -1
  152. package/src/assets/web-panel/index.html +1 -1
  153. package/src/data/changelog.json +26 -0
  154. package/src/gateways/ws/ws-server.js +16 -0
  155. package/src/lib/coding-change-review-context.js +51 -0
  156. package/src/lib/coding-task-guidance.js +1 -1
  157. package/src/lib/evolution/agent-model-projection.js +17 -0
  158. package/src/lib/evolution/evolution-evidence-projector.js +85 -8
  159. package/src/lib/read-file-loop-guard.js +13 -10
  160. package/src/lib/read-file-page.js +4 -1
  161. package/src/lib/source-read-recovery.js +89 -0
  162. package/src/lib/tool-result-preview.js +7 -3
  163. package/src/runtime/agent-core.js +104 -52
  164. package/src/runtime/tool-argument-recovery.js +111 -0
  165. package/src/assets/web-panel/assets/index-DoVoNjtJ.js +0 -1
  166. package/src/assets/web-panel/assets/index-xlS8pDS2.js +0 -1
@@ -1 +1 @@
1
- import{e as E,M as f,R as w,P as s,c as v,N as d,Q as A,S as m,K as b,r as h,L as i,a0 as O,a1 as P,O as q,u as x}from"./vendor-BXcBOG8b.js";import{u as K,b as V}from"./index-3RqDry-K.js";import{b as L,am as Q,q as U,f as F}from"./icons-DlxlFL4g.js";function j(){const y=[];let r=null,_=!1,e=null;return{push(a){if(y.push(a),r){const t=r;r=null,t()}},finish(a){if(_=!0,e=a||null,r){const t=r;r=null,t()}},async*iterate(){for(;;){for(;y.length>0;)yield y.shift();if(_){if(e)throw e;return}await new Promise(a=>{r=a})}}}}function I(){const y=K();function r(e){if(!e||!Array.isArray(e.messages))throw new Error("messages array is required");const a=j(),t=new AbortController;e.signal&&(e.signal.aborted?t.abort(e.signal.reason):e.signal.addEventListener("abort",()=>t.abort(e.signal.reason),{once:!0}));const l=y.sendStream({type:"llm.chat",messages:e.messages,options:e.options||{}},{onChunk:o=>a.push(o),onStatus:e.onStatus,idleMs:e.idleMs??21e4,followServerTimeout:e.idleMs==null,signal:t.signal}).then(o=>(a.finish(null),o),o=>{throw a.finish(o),o});function u(){t.signal.aborted||t.abort(new Error("aborted"))}return{stream:a.iterate(),result:l,cancel:u}}async function _(e){const a=typeof e.onDelta=="function"?e.onDelta:()=>{},{stream:t,result:l}=r(e);try{for await(const u of t)a(u)}catch{}return l}return{chat:r,chatTo:_}}const R={style:{"margin-bottom":"24px"}},W={class:"page-title"},G={class:"page-sub"},H={style:{display:"flex","justify-content":"space-between","align-items":"center","margin-top":"12px"}},J={style:{display:"flex",gap:"8px","align-items":"center",color:"var(--text-muted)","font-size":"11px"}},X={key:0},Y={key:1},Z={key:2},ee={key:0,style:{color:"#1677ff","font-size":"11px"}},te={key:1,style:{color:"#52c41a","font-size":"11px"}},ne={key:0,style:{margin:"0","white-space":"pre-wrap","font-family":"var(--font-body, system-ui)","font-size":"13px"}},ae={key:2,style:{background:"#2a1517",border:"1px solid #5c2426",padding:"8px","border-radius":"4px","margin-top":"8px"}},oe={style:{color:"#ff7875","font-size":"11px",margin:"0","white-space":"pre-wrap"}},re={__name:"QuickAsk",setup(y){const r=I(),{t:_}=V(),e=h(""),a=h(""),t=h(""),l=h(!1),u=h(""),o=h(null),$=h("");let C=null;async function M(){if(!(l.value||!e.value.trim())){l.value=!0,t.value="",u.value="",o.value=null,$.value="";try{const n=[{role:"user",content:e.value}],k={},S=a.value.trim();S&&(k.model=S);const g=r.chat({messages:n,options:k,onStatus:c=>{c?.stage==="waiting"&&($.value=_("quickAsk.waitingForProvider",{provider:c.provider||"",model:c.model||"",seconds:Math.ceil((c.timeoutMs||18e4)/1e3)}))}});C=g;try{for await(const c of g.stream)c?.content?t.value=c.content:c?.delta&&(t.value+=c.delta)}catch{}const p=await g.result;o.value={model:p?.model||null,tokens:p?.tokens??null},!t.value&&p?.message?.content&&(t.value=p.message.content)}catch(n){u.value=n?.message||String(n)}finally{l.value=!1,C=null}}}function B(){C?.cancel&&C.cancel()}function T(){t.value="",u.value="",o.value=null}return E(B),(n,k)=>{const S=b("a-textarea"),g=b("a-input"),p=b("a-button"),c=b("a-space"),N=b("a-card"),D=b("a-empty");return i(),f("div",null,[w("div",R,[w("h2",W,s(n.$t("quickAsk.title")),1),w("p",G,s(n.$t("quickAsk.subtitle")),1)]),v(N,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:d(()=>[v(S,{value:e.value,"onUpdate:value":k[0]||(k[0]=z=>e.value=z),rows:4,placeholder:n.$t("quickAsk.promptPlaceholder"),disabled:l.value,onKeydown:[O(P(M,["ctrl","prevent"]),["enter"]),O(P(M,["meta","prevent"]),["enter"])]},null,8,["value","placeholder","disabled","onKeydown"]),w("div",H,[w("div",J,[v(g,{value:a.value,"onUpdate:value":k[1]||(k[1]=z=>a.value=z),placeholder:n.$t("quickAsk.modelPlaceholder"),size:"small",style:{width:"200px"},disabled:l.value,"allow-clear":""},null,8,["value","placeholder","disabled"]),t.value?(i(),f("span",X,s(t.value.length)+" "+s(n.$t("quickAsk.charsSuffix")),1)):m("",!0),o.value?(i(),f("span",Y,"· "+s(o.value.tokens??0)+" "+s(n.$t("quickAsk.tokensSuffix")),1)):m("",!0),o.value?.model?(i(),f("span",Z,"· "+s(o.value.model),1)):m("",!0)]),v(c,null,{default:d(()=>[t.value||u.value?(i(),A(p,{key:0,disabled:l.value,onClick:T},{default:d(()=>[q(s(n.$t("quickAsk.clear")),1)]),_:1},8,["disabled"])):m("",!0),l.value?(i(),A(p,{key:1,danger:"",onClick:B},{icon:d(()=>[v(x(L))]),default:d(()=>[q(" "+s(n.$t("quickAsk.cancel")),1)]),_:1})):(i(),A(p,{key:2,type:"primary",disabled:!e.value.trim(),onClick:M},{icon:d(()=>[v(x(Q))]),default:d(()=>[q(" "+s(n.$t("quickAsk.send")),1)]),_:1},8,["disabled"]))]),_:1})])]),_:1}),t.value||l.value||u.value?(i(),A(N,{key:0,title:n.$t("quickAsk.answerCardTitle"),style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-top":"16px"}},{extra:d(()=>[l.value?(i(),f("span",ee,[v(x(U),{spin:!0}),q(" "+s(n.$t("quickAsk.streaming")),1)])):o.value?(i(),f("span",te,[v(x(F)),q(" "+s(n.$t("quickAsk.done")),1)])):m("",!0)]),default:d(()=>[t.value?(i(),f("pre",ne,s(t.value),1)):l.value?(i(),A(D,{key:1,description:$.value||n.$t("quickAsk.waitingFirstToken")},null,8,["description"])):m("",!0),u.value?(i(),f("div",ae,[w("pre",oe,s(u.value),1)])):m("",!0)]),_:1},8,["title"])):m("",!0)])}}};export{re as default};
1
+ import{e as E,M as f,R as w,P as s,c as v,N as d,Q as A,S as m,K as b,r as h,L as i,a0 as O,a1 as P,O as q,u as x}from"./vendor-BXcBOG8b.js";import{u as K,b as V}from"./index-Cs66y4oC.js";import{b as L,am as Q,q as U,f as F}from"./icons-DlxlFL4g.js";function j(){const y=[];let r=null,_=!1,e=null;return{push(a){if(y.push(a),r){const t=r;r=null,t()}},finish(a){if(_=!0,e=a||null,r){const t=r;r=null,t()}},async*iterate(){for(;;){for(;y.length>0;)yield y.shift();if(_){if(e)throw e;return}await new Promise(a=>{r=a})}}}}function I(){const y=K();function r(e){if(!e||!Array.isArray(e.messages))throw new Error("messages array is required");const a=j(),t=new AbortController;e.signal&&(e.signal.aborted?t.abort(e.signal.reason):e.signal.addEventListener("abort",()=>t.abort(e.signal.reason),{once:!0}));const l=y.sendStream({type:"llm.chat",messages:e.messages,options:e.options||{}},{onChunk:o=>a.push(o),onStatus:e.onStatus,idleMs:e.idleMs??21e4,followServerTimeout:e.idleMs==null,signal:t.signal}).then(o=>(a.finish(null),o),o=>{throw a.finish(o),o});function u(){t.signal.aborted||t.abort(new Error("aborted"))}return{stream:a.iterate(),result:l,cancel:u}}async function _(e){const a=typeof e.onDelta=="function"?e.onDelta:()=>{},{stream:t,result:l}=r(e);try{for await(const u of t)a(u)}catch{}return l}return{chat:r,chatTo:_}}const R={style:{"margin-bottom":"24px"}},W={class:"page-title"},G={class:"page-sub"},H={style:{display:"flex","justify-content":"space-between","align-items":"center","margin-top":"12px"}},J={style:{display:"flex",gap:"8px","align-items":"center",color:"var(--text-muted)","font-size":"11px"}},X={key:0},Y={key:1},Z={key:2},ee={key:0,style:{color:"#1677ff","font-size":"11px"}},te={key:1,style:{color:"#52c41a","font-size":"11px"}},ne={key:0,style:{margin:"0","white-space":"pre-wrap","font-family":"var(--font-body, system-ui)","font-size":"13px"}},ae={key:2,style:{background:"#2a1517",border:"1px solid #5c2426",padding:"8px","border-radius":"4px","margin-top":"8px"}},oe={style:{color:"#ff7875","font-size":"11px",margin:"0","white-space":"pre-wrap"}},re={__name:"QuickAsk",setup(y){const r=I(),{t:_}=V(),e=h(""),a=h(""),t=h(""),l=h(!1),u=h(""),o=h(null),$=h("");let C=null;async function M(){if(!(l.value||!e.value.trim())){l.value=!0,t.value="",u.value="",o.value=null,$.value="";try{const n=[{role:"user",content:e.value}],k={},S=a.value.trim();S&&(k.model=S);const g=r.chat({messages:n,options:k,onStatus:c=>{c?.stage==="waiting"&&($.value=_("quickAsk.waitingForProvider",{provider:c.provider||"",model:c.model||"",seconds:Math.ceil((c.timeoutMs||18e4)/1e3)}))}});C=g;try{for await(const c of g.stream)c?.content?t.value=c.content:c?.delta&&(t.value+=c.delta)}catch{}const p=await g.result;o.value={model:p?.model||null,tokens:p?.tokens??null},!t.value&&p?.message?.content&&(t.value=p.message.content)}catch(n){u.value=n?.message||String(n)}finally{l.value=!1,C=null}}}function B(){C?.cancel&&C.cancel()}function T(){t.value="",u.value="",o.value=null}return E(B),(n,k)=>{const S=b("a-textarea"),g=b("a-input"),p=b("a-button"),c=b("a-space"),N=b("a-card"),D=b("a-empty");return i(),f("div",null,[w("div",R,[w("h2",W,s(n.$t("quickAsk.title")),1),w("p",G,s(n.$t("quickAsk.subtitle")),1)]),v(N,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:d(()=>[v(S,{value:e.value,"onUpdate:value":k[0]||(k[0]=z=>e.value=z),rows:4,placeholder:n.$t("quickAsk.promptPlaceholder"),disabled:l.value,onKeydown:[O(P(M,["ctrl","prevent"]),["enter"]),O(P(M,["meta","prevent"]),["enter"])]},null,8,["value","placeholder","disabled","onKeydown"]),w("div",H,[w("div",J,[v(g,{value:a.value,"onUpdate:value":k[1]||(k[1]=z=>a.value=z),placeholder:n.$t("quickAsk.modelPlaceholder"),size:"small",style:{width:"200px"},disabled:l.value,"allow-clear":""},null,8,["value","placeholder","disabled"]),t.value?(i(),f("span",X,s(t.value.length)+" "+s(n.$t("quickAsk.charsSuffix")),1)):m("",!0),o.value?(i(),f("span",Y,"· "+s(o.value.tokens??0)+" "+s(n.$t("quickAsk.tokensSuffix")),1)):m("",!0),o.value?.model?(i(),f("span",Z,"· "+s(o.value.model),1)):m("",!0)]),v(c,null,{default:d(()=>[t.value||u.value?(i(),A(p,{key:0,disabled:l.value,onClick:T},{default:d(()=>[q(s(n.$t("quickAsk.clear")),1)]),_:1},8,["disabled"])):m("",!0),l.value?(i(),A(p,{key:1,danger:"",onClick:B},{icon:d(()=>[v(x(L))]),default:d(()=>[q(" "+s(n.$t("quickAsk.cancel")),1)]),_:1})):(i(),A(p,{key:2,type:"primary",disabled:!e.value.trim(),onClick:M},{icon:d(()=>[v(x(Q))]),default:d(()=>[q(" "+s(n.$t("quickAsk.send")),1)]),_:1},8,["disabled"]))]),_:1})])]),_:1}),t.value||l.value||u.value?(i(),A(N,{key:0,title:n.$t("quickAsk.answerCardTitle"),style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-top":"16px"}},{extra:d(()=>[l.value?(i(),f("span",ee,[v(x(U),{spin:!0}),q(" "+s(n.$t("quickAsk.streaming")),1)])):o.value?(i(),f("span",te,[v(x(F)),q(" "+s(n.$t("quickAsk.done")),1)])):m("",!0)]),default:d(()=>[t.value?(i(),f("pre",ne,s(t.value),1)):l.value?(i(),A(D,{key:1,description:$.value||n.$t("quickAsk.waitingFirstToken")},null,8,["description"])):m("",!0),u.value?(i(),f("div",ae,[w("pre",oe,s(u.value),1)])):m("",!0)]),_:1},8,["title"])):m("",!0)])}}};export{re as default};
@@ -1 +1 @@
1
- import{t as P,_ as Xe,b as Ze,u as et,E as tt,d as y}from"./index-3RqDry-K.js";import{R as ot,aQ as nt,aW as at,r as st,al as ke,ab as be,aX as rt,aU as lt,aB as it}from"./icons-DlxlFL4g.js";import{o as ct,M as g,R as x,P as c,u as t,c as a,N as n,K as f,r as C,L as d,O as p,Q as _,S as v,F as A,Y as Q,_ as dt,f as X,a as ut}from"./vendor-BXcBOG8b.js";const xe=Object.freeze(["note","post","article","document"]),mt=Object.freeze(["pending","viewed","dismissed"]);function S(s,e=0){return typeof s=="number"&&Number.isFinite(s)?s:e}function he(s){if(!s||typeof s!="object"||Array.isArray(s))return{};const e={};for(const[i,h]of Object.entries(s))typeof h=="number"&&Number.isFinite(h)&&(e[i]=h);return e}function pt(s,e=0){if(!s||typeof s!="object")return null;const i=s.user_id??s.userId??"";if(!i)return null;const h=s.topics&&typeof s.topics=="object"&&!Array.isArray(s.topics)?he(s.topics):{},I=s.interaction_weights??s.interactionWeights,N=I&&typeof I=="object"&&!Array.isArray(I)?he(I):{};return{key:i,id:String(s.id||""),userId:i,topics:h,topicCount:Object.keys(h).length,interactionWeights:N,decayFactor:S(s.decay_factor??s.decayFactor,.9),lastUpdated:s.last_updated??s.lastUpdated??null,updateCount:S(s.update_count??s.updateCount,0),_idx:e}}function ft(s){const e=P(s);return Array.isArray(e)?e.map(pt).filter(Boolean):[]}function yt(s,e=0){if(!s||typeof s!="object")return null;const i=s.id||"";return i?{key:i,id:i,userId:s.user_id??s.userId??"",contentId:s.content_id??s.contentId??"",contentType:String(s.content_type??s.contentType??"note").toLowerCase(),title:String(s.title||""),score:S(s.score,0),reason:String(s.reason||""),source:String(s.source||"heuristic"),status:String(s.status||"pending").toLowerCase(),feedback:s.feedback??null,createdAt:s.created_at??s.createdAt??null,viewedAt:s.viewed_at??s.viewedAt??null,_idx:e}:null}function gt(s){const e=P(s);return Array.isArray(e)?e.map(yt).filter(Boolean):[]}const _t={total:0,pending:0,viewed:0,dismissed:0,feedbackCount:0,feedbackRate:0,avgScore:0};function vt(s){const e={..._t},i=P(s);return!i||typeof i!="object"||Array.isArray(i)||(e.total=S(i.total,0),e.pending=S(i.pending,0),e.viewed=S(i.viewed,0),e.dismissed=S(i.dismissed,0),e.feedbackCount=S(i.feedbackCount,0),e.feedbackRate=S(i.feedbackRate,0),e.avgScore=S(i.avgScore,0)),e}function kt(s){const e=P(s);return Array.isArray(e)?e.filter(i=>i&&typeof i=="object"&&typeof i.topic=="string").map((i,h)=>({key:`${i.topic}-${h}`,topic:i.topic,weight:S(i.weight,0)})):[]}function bt(s){const e=P(s);return Array.isArray(e)?e.filter(i=>i&&typeof i=="object"&&typeof i.topic=="string"&&typeof i.action=="string").map((i,h)=>({key:`${i.topic}-${h}`,topic:i.topic,action:i.action,amount:S(i.amount,0)})):[]}function J(s){const e=P(s);return!e||typeof e!="object"||Array.isArray(e)?{ok:!1,reason:"",profileId:null,topicCount:null}:{ok:!!(e.updated||e.deleted||e.marked||e.dismissed||e.recorded||e.applied||e.profileId),reason:e.reason?String(e.reason):"",profileId:e.profileId?String(e.profileId):null,topicCount:typeof e.topicCount=="number"?e.topicCount:null}}function Ce(s){if(s==null||s==="")return"—";const e=typeof s=="number"?new Date(s):new Date(String(s));return isNaN(e.getTime())?String(s):e.toLocaleString("zh-CN",{hour12:!1})}const xt={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},ht={class:"page-title"},Ct={class:"page-sub"},wt={style:{display:"flex","align-items":"center",gap:"12px","flex-wrap":"wrap"}},St={style:{color:"var(--text-secondary)","font-size":"12px"}},It={class:"type-name"},zt={class:"filter-bar"},At={style:{color:"var(--text-primary)","font-weight":"500"}},Ft={style:{color:"var(--text-muted)","font-size":"11px","margin-top":"2px"}},Tt={key:3,style:{color:"var(--text-secondary)","font-size":"12px"}},Ot={key:1,style:{color:"var(--text-muted)"}},Rt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},Ut={key:0,style:{color:"var(--text-primary)","font-family":"monospace","font-weight":"500"}},$t={key:2,style:{color:"var(--text-secondary)","font-family":"monospace","font-size":"12px"}},jt={key:3,style:{color:"var(--text-secondary)"}},Jt={key:4,style:{color:"var(--text-secondary)","font-size":"11px"}},Pt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},Nt={key:1},Et={class:"interest-topic"},Lt={style:{"margin-left":"8px","font-family":"monospace",color:"var(--text-primary)"}},Mt={style:{"margin-left":"auto",color:"var(--text-secondary)","font-size":"12px"}},Bt={key:0,style:{"padding-top":"8px"}},Dt={style:{"font-family":"monospace","font-size":"12px"}},Wt={style:{color:"var(--text-primary)","font-size":"13px",margin:"16px 0 8px"}},Vt={key:1},Kt={class:"interest-topic"},Qt={key:2,style:{color:"var(--text-primary)","font-size":"13px",margin:"16px 0 8px"}},Yt={key:3,class:"weights-pre"},qt={__name:"Recommend",setup(s){const{t:e}=Ze(),i=et(),h=tt.PRESENTED_IMAGE_SIMPLE,I=C(!1),N=C(!1),Z=C(!1),E=C([]),ee=C([]),F=C({total:0,pending:0,viewed:0,dismissed:0,feedbackCount:0,feedbackRate:0,avgScore:0}),Y=C([]),U=C([]),k=C(null),q=C("recs"),L=C(""),M=C(""),G=C(!1),te=C(!1),b=ut({userId:"",topicsJson:"",weightsJson:""}),w=C(null),we=X(()=>E.value.map(o=>({value:o.userId,label:`${o.userId} (${e("recommend.userBar.topicSuffix",{count:o.topicCount})})`}))),Se=X(()=>[{title:e("recommend.recColumns.title"),key:"title"},{title:e("recommend.recColumns.contentType"),key:"contentType",width:"110px"},{title:e("recommend.recColumns.score"),key:"score",width:"180px"},{title:e("recommend.recColumns.reason"),key:"reason",width:"220px"},{title:e("recommend.recColumns.status"),key:"status",width:"100px"},{title:e("recommend.recColumns.feedback"),key:"feedback",width:"90px"},{title:e("recommend.recColumns.action"),key:"action",width:"210px"}]),Ie=X(()=>[{title:e("recommend.profileColumns.userId"),key:"userId"},{title:e("recommend.profileColumns.topicCount"),key:"topicCount",width:"110px"},{title:e("recommend.profileColumns.decayFactor"),key:"decayFactor",width:"110px"},{title:e("recommend.profileColumns.updateCount"),key:"updateCount",width:"110px"},{title:e("recommend.profileColumns.lastUpdated"),key:"lastUpdated",width:"180px"},{title:e("recommend.profileColumns.action"),key:"action",width:"200px"}]),ze=X(()=>{let o=ee.value;return L.value&&(o=o.filter(l=>l.status===L.value)),M.value&&(o=o.filter(l=>l.contentType===M.value)),o});function le(o){const l=`recommend.type.${o}`,u=e(l);return u===l?o:u}function ie(o){return{note:"blue",post:"green",article:"purple",document:"orange"}[o]||"default"}function Ae(o){return{note:"#1677ff",post:"#52c41a",article:"#722ed1",document:"#fa8c16"}[o]||"#888"}function ce(o){const l=`recommend.status.${o}`,u=e(l);return u===l?o:u}function Fe(o){return{pending:"processing",viewed:"green",dismissed:"default"}[o]||"default"}function Te(o){const l=`recommend.feedbackLabel.${o}`,u=e(l);return u===l?o:u}function Oe(o){return{like:"green",dislike:"red",later:"gold"}[o]||"default"}function de(o){return o>=.7?"#52c41a":o>=.4?"#1677ff":o>=.2?"#faad14":"#ff4d4f"}function ue(o){return o>=.7?"#52c41a":o>=.4?"#1677ff":o>=.2?"#faad14":"#888"}function Re(o){try{return JSON.stringify(o,null,2)}catch{return String(o)}}async function B(){I.value=!0;try{const{output:o}=await i.execute("recommend profiles --json",1e4).catch(()=>({output:""}));E.value=ft(o),k.value&&!E.value.find(l=>l.userId===k.value)&&(k.value=null),k.value&&await R()}catch(o){y.error(e("recommend.messages.loadProfilesFailed",{err:o?.message||o}))}finally{I.value=!1}}async function R(){if(!k.value){ee.value=[],F.value={total:0,pending:0,viewed:0,dismissed:0,feedbackCount:0,feedbackRate:0,avgScore:0},Y.value=[];return}N.value=!0;try{const o=D(k.value),[l,u,T]=await Promise.all([i.execute(`recommend list ${o} --limit 200 --json`,1e4).catch(()=>({output:""})),i.execute(`recommend stats ${o} --json`,8e3).catch(()=>({output:""})),i.execute(`recommend top-interests ${o} --limit 30 --json`,8e3).catch(()=>({output:""}))]);ee.value=gt(l.output),F.value=vt(u.output),Y.value=kt(T.output)}catch(o){y.error(e("recommend.messages.loadUserFailed",{err:o?.message||o}))}finally{N.value=!1}}function D(o){return`"${String(o).replace(/"/g,'\\"')}"`}function Ue(){U.value=[],R()}function $e(o){k.value=o,q.value="recs",R()}async function je(){if(!b.userId.trim()){y.warning(e("recommend.messages.userIdRequired"));return}if(b.topicsJson.trim())try{JSON.parse(b.topicsJson)}catch{y.warning(e("recommend.messages.topicsJsonInvalid"));return}if(b.weightsJson.trim())try{JSON.parse(b.weightsJson)}catch{y.warning(e("recommend.messages.weightsJsonInvalid"));return}Z.value=!0;try{const o=[`recommend create-profile ${D(b.userId.trim())}`];b.topicsJson.trim()&&o.push(`-t ${me(b.topicsJson.trim())}`),b.weightsJson.trim()&&o.push(`-w ${me(b.weightsJson.trim())}`),o.push("--json");const{output:l}=await i.execute(o.join(" "),1e4),u=J(l);if(!u.ok){y.error(e("recommend.messages.createFailed",{err:u.reason||l.slice(0,120)}));return}y.success(e("recommend.messages.createOk",{id:u.profileId?.slice(0,8)||""})),G.value=!1;const T=b.userId.trim();pe(),await B(),k.value=T,await R()}catch(o){y.error(e("recommend.messages.createFailed",{err:o?.message||o}))}finally{Z.value=!1}}function me(o){return`'${String(o).replace(/'/g,"'\\''")}'`}async function Je(){if(k.value)try{const{output:o}=await i.execute(`recommend decay ${D(k.value)} --json`,8e3),l=J(o);if(!l.ok){y.error(e("recommend.messages.decayFailed",{err:l.reason||o.slice(0,120)}));return}y.success(l.topicCount!==null?e("recommend.messages.decayOkTopics",{count:l.topicCount}):e("recommend.messages.decayOk")),await B()}catch(o){y.error(e("recommend.messages.decayFailed",{err:o?.message||o}))}}async function Pe(){if(k.value)try{const{output:o}=await i.execute(`recommend suggest ${D(k.value)} --json`,8e3);U.value=bt(o),q.value="interests",U.value.length?y.success(e("recommend.messages.suggestFound",{count:U.value.length})):y.info(e("recommend.messages.suggestNone"))}catch(o){y.error(e("recommend.messages.loadSuggestFailed",{err:o?.message||o}))}}async function Ne(o){try{const{output:l}=await i.execute(`recommend delete-profile ${D(o.userId)} --json`,8e3),u=J(l);if(!u.ok){y.error(e("recommend.messages.deleteFailed",{err:u.reason||l.slice(0,120)}));return}y.success(e("recommend.messages.deleteOk")),k.value===o.userId&&(k.value=null),await B()}catch(l){y.error(e("recommend.messages.deleteFailed",{err:l?.message||l}))}}function Ee(o){w.value=o,te.value=!0}async function Le(o){try{const{output:l}=await i.execute(`recommend view ${o.id} --json`,8e3),u=J(l);if(!u.ok){y.error(e("recommend.messages.viewFailed",{err:u.reason||l.slice(0,120)}));return}y.success(e("recommend.messages.viewOk")),await R()}catch(l){y.error(e("recommend.messages.viewFailed",{err:l?.message||l}))}}async function Me(o,l){try{const{output:u}=await i.execute(`recommend feedback ${o.id} ${l} --json`,8e3),T=J(u);if(!T.ok){y.error(e("recommend.messages.feedbackFailed",{err:T.reason||u.slice(0,120)}));return}y.success(e("recommend.messages.feedbackOk")),await R()}catch(u){y.error(e("recommend.messages.feedbackFailed",{err:u?.message||u}))}}async function Be(o){try{const{output:l}=await i.execute(`recommend dismiss ${o.id} --json`,8e3),u=J(l);if(!u.ok){y.error(e("recommend.messages.dismissFailed",{err:u.reason||l.slice(0,120)}));return}y.success(e("recommend.messages.dismissOk")),await R()}catch(l){y.error(e("recommend.messages.dismissFailed",{err:l?.message||l}))}}function pe(){b.userId="",b.topicsJson="",b.weightsJson=""}return ct(B),(o,l)=>{const u=f("a-button"),T=f("a-space"),De=f("a-select"),z=f("a-card"),W=f("a-statistic"),O=f("a-col"),oe=f("a-row"),$=f("a-tag"),H=f("a-radio-button"),fe=f("a-radio-group"),V=f("a-empty"),ne=f("a-progress"),ae=f("a-menu-item"),We=f("a-menu"),Ve=f("a-dropdown"),ye=f("a-popconfirm"),ge=f("a-table"),se=f("a-tab-pane"),Ke=f("a-list-item"),Qe=f("a-list"),Ye=f("a-tabs"),qe=f("a-input"),re=f("a-form-item"),_e=f("a-textarea"),Ge=f("a-form"),ve=f("a-modal"),K=f("a-descriptions-item"),He=f("a-descriptions");return d(),g("div",null,[x("div",xt,[x("div",null,[x("h2",ht,c(t(e)("recommend.title")),1),x("p",Ct,c(t(e)("recommend.subtitle")),1)]),a(T,null,{default:n(()=>[a(u,{loading:I.value,onClick:B},{icon:n(()=>[a(t(ot))]),default:n(()=>[p(" "+c(t(e)("recommend.refresh")),1)]),_:1},8,["loading"]),a(u,{type:"primary",onClick:l[0]||(l[0]=r=>G.value=!0)},{icon:n(()=>[a(t(nt))]),default:n(()=>[p(" "+c(t(e)("recommend.createProfile")),1)]),_:1})]),_:1})]),a(z,{size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"},"body-style":{padding:"10px 16px"}},{default:n(()=>[x("div",wt,[x("span",St,c(t(e)("recommend.userBar.currentUser")),1),a(De,{value:k.value,"onUpdate:value":l[1]||(l[1]=r=>k.value=r),options:we.value,placeholder:t(e)("recommend.userBar.selectPlaceholder"),style:{"min-width":"280px"},"allow-clear":"","show-search":"",onChange:Ue},null,8,["value","options","placeholder"]),k.value?(d(),_(u,{key:0,size:"small",onClick:Je},{icon:n(()=>[a(t(at))]),default:n(()=>[p(" "+c(t(e)("recommend.userBar.applyDecay")),1)]),_:1})):v("",!0),k.value?(d(),_(u,{key:1,size:"small",onClick:Pe},{icon:n(()=>[a(t(st))]),default:n(()=>[p(" "+c(t(e)("recommend.userBar.suggest")),1)]),_:1})):v("",!0)])]),_:1}),a(oe,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:n(()=>[a(O,{xs:12,sm:8,lg:5},{default:n(()=>[a(z,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[a(W,{title:t(e)("recommend.stats.profiles"),value:E.value.length,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:n(()=>[a(t(ke))]),_:1},8,["title","value"])]),_:1})]),_:1}),a(O,{xs:12,sm:8,lg:5},{default:n(()=>[a(z,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[a(W,{title:t(e)("recommend.stats.totalRecs"),value:F.value.total,"value-style":{color:"#722ed1",fontSize:"20px"}},{prefix:n(()=>[a(t(be))]),_:1},8,["title","value"])]),_:1})]),_:1}),a(O,{xs:12,sm:8,lg:5},{default:n(()=>[a(z,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[a(W,{title:t(e)("recommend.stats.pending"),value:F.value.pending,"value-style":{color:F.value.pending>0?"#faad14":"#888",fontSize:"20px"}},{prefix:n(()=>[a(t(rt))]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),a(O,{xs:12,sm:8,lg:5},{default:n(()=>[a(z,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[a(W,{title:t(e)("recommend.stats.feedbackRate"),value:F.value.feedbackRate*100,suffix:"%",precision:1,"value-style":{color:"#13c2c2",fontSize:"20px"}},{prefix:n(()=>[a(t(lt))]),_:1},8,["title","value"])]),_:1})]),_:1}),a(O,{xs:24,sm:8,lg:4},{default:n(()=>[a(z,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[a(W,{title:t(e)("recommend.stats.avgScore"),value:F.value.avgScore,precision:3,"value-style":{color:de(F.value.avgScore),fontSize:"20px"}},{prefix:n(()=>[a(t(it))]),_:1},8,["title","value","value-style"])]),_:1})]),_:1})]),_:1}),a(z,{title:t(e)("recommend.typeCatalogue"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"},"body-style":{padding:"12px 16px"}},{default:n(()=>[a(oe,{gutter:[12,12]},{default:n(()=>[(d(!0),g(A,null,Q(t(xe),r=>(d(),_(O,{key:r,xs:12,sm:6},{default:n(()=>[x("div",{class:"type-pill",style:dt({borderLeftColor:Ae(r)})},[a($,{color:ie(r),style:{"font-family":"monospace"}},{default:n(()=>[p(c(r),1)]),_:2},1032,["color"]),x("div",It,c(le(r)),1)],4)]),_:2},1024))),128))]),_:1})]),_:1},8,["title"]),a(Ye,{activeKey:q.value,"onUpdate:activeKey":l[4]||(l[4]=r=>q.value=r),class:"recommend-tabs"},{default:n(()=>[a(se,{key:"recs",tab:t(e)("recommend.tabs.recs")},{default:n(()=>[x("div",zt,[a(fe,{value:L.value,"onUpdate:value":l[2]||(l[2]=r=>L.value=r),size:"small","button-style":"solid"},{default:n(()=>[a(H,{value:""},{default:n(()=>[p(c(t(e)("recommend.filter.allStatuses")),1)]),_:1}),(d(!0),g(A,null,Q(t(mt),r=>(d(),_(H,{key:r,value:r},{default:n(()=>[p(c(ce(r)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),a(fe,{value:M.value,"onUpdate:value":l[3]||(l[3]=r=>M.value=r),size:"small"},{default:n(()=>[a(H,{value:""},{default:n(()=>[p(c(t(e)("recommend.filter.allTypes")),1)]),_:1}),(d(!0),g(A,null,Q(t(xe),r=>(d(),_(H,{key:r,value:r},{default:n(()=>[p(c(le(r)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),k.value?(d(),_(ge,{key:1,columns:Se.value,"data-source":ze.value,pagination:{pageSize:20,showTotal:r=>t(e)("recommend.totals.rows",{count:r})},size:"small",loading:N.value,style:{background:"var(--bg-card)"}},{bodyCell:n(({column:r,record:m})=>[r.key==="title"?(d(),g(A,{key:0},[x("span",At,c(m.title||t(e)("recommend.noTitle")),1),x("div",Ft,c(m.contentId),1)],64)):v("",!0),r.key==="contentType"?(d(),_($,{key:1,color:ie(m.contentType),style:{"font-family":"monospace"}},{default:n(()=>[p(c(m.contentType),1)]),_:2},1032,["color"])):v("",!0),r.key==="score"?(d(),_(ne,{key:2,percent:Math.round(m.score*100),"stroke-color":de(m.score),size:"small",format:()=>m.score.toFixed(3)},null,8,["percent","stroke-color","format"])):v("",!0),r.key==="reason"?(d(),g("span",Tt,c(m.reason),1)):v("",!0),r.key==="status"?(d(),_($,{key:4,color:Fe(m.status)},{default:n(()=>[p(c(ce(m.status)),1)]),_:2},1032,["color"])):v("",!0),r.key==="feedback"?(d(),g(A,{key:5},[m.feedback?(d(),_($,{key:0,color:Oe(m.feedback)},{default:n(()=>[p(c(Te(m.feedback)),1)]),_:2},1032,["color"])):(d(),g("span",Ot,"—"))],64)):v("",!0),r.key==="action"?(d(),g(A,{key:6},[m.status==="pending"?(d(),_(u,{key:0,size:"small",type:"link",onClick:j=>Le(m)},{default:n(()=>[p(c(t(e)("recommend.rowActions.view")),1)]),_:1},8,["onClick"])):v("",!0),m.status!=="dismissed"?(d(),_(Ve,{key:1},{overlay:n(()=>[a(We,{onClick:({key:j})=>Me(m,j)},{default:n(()=>[a(ae,{key:"like",style:{color:"#52c41a"}},{default:n(()=>[p(c(t(e)("recommend.feedbackMenu.like")),1)]),_:1}),a(ae,{key:"dislike",style:{color:"#ff4d4f"}},{default:n(()=>[p(c(t(e)("recommend.feedbackMenu.dislike")),1)]),_:1}),a(ae,{key:"later"},{default:n(()=>[p(c(t(e)("recommend.feedbackMenu.later")),1)]),_:1})]),_:1},8,["onClick"])]),default:n(()=>[a(u,{size:"small",type:"link"},{default:n(()=>[p(c(t(e)("recommend.feedbackDropdown")),1)]),_:1})]),_:2},1024)):v("",!0),m.status!=="dismissed"?(d(),_(ye,{key:2,title:t(e)("recommend.rowActions.dismissConfirmTitle"),"ok-text":t(e)("recommend.rowActions.dismissOk"),"cancel-text":t(e)("common.cancel"),onConfirm:j=>Be(m)},{default:n(()=>[a(u,{size:"small",type:"link",danger:""},{default:n(()=>[p(c(t(e)("recommend.rowActions.dismiss")),1)]),_:1})]),_:1},8,["title","ok-text","cancel-text","onConfirm"])):v("",!0)],64)):v("",!0)]),emptyText:n(()=>[x("div",Rt,[a(t(be),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),p(" "+c(L.value||M.value?t(e)("recommend.empty.filtered"):t(e)("recommend.empty.noRecsHint")),1)])]),_:1},8,["columns","data-source","pagination","loading"])):(d(),_(V,{key:0,description:t(e)("recommend.empty.selectUser"),image:t(h),style:{padding:"40px 0"}},null,8,["description","image"]))]),_:1},8,["tab"]),a(se,{key:"profiles",tab:t(e)("recommend.tabs.profiles")},{default:n(()=>[a(ge,{columns:Ie.value,"data-source":E.value,pagination:{pageSize:20,showTotal:r=>t(e)("recommend.totals.profiles",{count:r})},size:"small",loading:I.value,style:{background:"var(--bg-card)"}},{bodyCell:n(({column:r,record:m})=>[r.key==="userId"?(d(),g("span",Ut,c(m.userId),1)):v("",!0),r.key==="topicCount"?(d(),_($,{key:1,color:"blue"},{default:n(()=>[p(c(t(e)("recommend.topicTagSuffix",{count:m.topicCount})),1)]),_:2},1024)):v("",!0),r.key==="decayFactor"?(d(),g("span",$t,c(m.decayFactor.toFixed(2)),1)):v("",!0),r.key==="updateCount"?(d(),g("span",jt,c(m.updateCount),1)):v("",!0),r.key==="lastUpdated"?(d(),g("span",Jt,c(t(Ce)(m.lastUpdated)),1)):v("",!0),r.key==="action"?(d(),g(A,{key:5},[a(u,{size:"small",type:"link",onClick:j=>Ee(m)},{default:n(()=>[p(c(t(e)("recommend.rowActions.details")),1)]),_:1},8,["onClick"]),a(u,{size:"small",type:"link",onClick:j=>$e(m.userId)},{default:n(()=>[p(c(t(e)("recommend.rowActions.switch")),1)]),_:1},8,["onClick"]),a(ye,{title:t(e)("recommend.rowActions.deleteConfirmTitle"),"ok-text":t(e)("recommend.rowActions.deleteOk"),"cancel-text":t(e)("common.cancel"),onConfirm:j=>Ne(m)},{default:n(()=>[a(u,{size:"small",type:"link",danger:""},{default:n(()=>[p(c(t(e)("recommend.rowActions.delete")),1)]),_:1})]),_:1},8,["title","ok-text","cancel-text","onConfirm"])],64)):v("",!0)]),emptyText:n(()=>[x("div",Pt,[a(t(ke),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),p(" "+c(t(e)("recommend.empty.noProfiles")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),a(se,{key:"interests",tab:t(e)("recommend.tabs.interests")},{default:n(()=>[k.value?(d(),_(oe,{key:1,gutter:[16,16]},{default:n(()=>[a(O,{xs:24,lg:14},{default:n(()=>[a(z,{title:t(e)("recommend.interest.topicWeights"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[Y.value.length?(d(),g("div",Nt,[(d(!0),g(A,null,Q(Y.value,r=>(d(),g("div",{key:r.key,class:"interest-row"},[x("span",Et,c(r.topic),1),a(ne,{percent:Math.round(r.weight*100),"stroke-color":ue(r.weight),format:()=>r.weight.toFixed(3),size:"small",style:{flex:"1","margin-left":"12px"}},null,8,["percent","stroke-color","format"])]))),128))])):(d(),_(V,{key:0,description:t(e)("recommend.empty.noInterests"),image:t(h)},null,8,["description","image"]))]),_:1},8,["title"])]),_:1}),a(O,{xs:24,lg:10},{default:n(()=>[a(z,{title:t(e)("recommend.interest.feedbackSuggest"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[U.value.length?(d(),_(Qe,{key:1,size:"small","data-source":U.value},{renderItem:n(({item:r})=>[a(Ke,null,{default:n(()=>[a($,{color:r.action==="boost"?"green":"orange"},{default:n(()=>[p(c(r.action==="boost"?t(e)("recommend.interest.boost"):t(e)("recommend.interest.lower")),1)]),_:2},1032,["color"]),x("span",Lt,c(r.topic),1),x("span",Mt,"±"+c(r.amount),1)]),_:2},1024)]),_:1},8,["data-source"])):(d(),_(V,{key:0,description:t(e)("recommend.empty.noSuggestions"),image:t(h)},null,8,["description","image"]))]),_:1},8,["title"])]),_:1})]),_:1})):(d(),_(V,{key:0,description:t(e)("recommend.empty.selectUser"),image:t(h),style:{padding:"40px 0"}},null,8,["description","image"]))]),_:1},8,["tab"])]),_:1},8,["activeKey"]),a(ve,{open:G.value,"onUpdate:open":l[8]||(l[8]=r=>G.value=r),title:t(e)("recommend.create.title"),"confirm-loading":Z.value,width:560,"ok-text":t(e)("recommend.create.ok"),"cancel-text":t(e)("common.cancel"),onOk:je,onCancel:pe},{default:n(()=>[a(Ge,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:n(()=>[a(re,{label:t(e)("recommend.create.userIdLabel"),required:""},{default:n(()=>[a(qe,{value:b.userId,"onUpdate:value":l[5]||(l[5]=r=>b.userId=r),placeholder:t(e)("recommend.create.userIdPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),a(re,{label:t(e)("recommend.create.topicsLabel")},{default:n(()=>[a(_e,{value:b.topicsJson,"onUpdate:value":l[6]||(l[6]=r=>b.topicsJson=r),placeholder:t(e)("recommend.create.topicsPlaceholder"),"auto-size":{minRows:2,maxRows:5}},null,8,["value","placeholder"])]),_:1},8,["label"]),a(re,{label:t(e)("recommend.create.weightsLabel")},{default:n(()=>[a(_e,{value:b.weightsJson,"onUpdate:value":l[7]||(l[7]=r=>b.weightsJson=r),placeholder:t(e)("recommend.create.weightsPlaceholder"),"auto-size":{minRows:2,maxRows:5}},null,8,["value","placeholder"])]),_:1},8,["label"])]),_:1})]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),a(ve,{open:te.value,"onUpdate:open":l[9]||(l[9]=r=>te.value=r),title:t(e)("recommend.details.title",{userId:w.value?.userId||""}),width:680,footer:null},{default:n(()=>[w.value?(d(),g("div",Bt,[a(He,{column:2,size:"small",bordered:""},{default:n(()=>[a(K,{label:t(e)("recommend.details.id"),span:2},{default:n(()=>[x("span",Dt,c(w.value.id),1)]),_:1},8,["label"]),a(K,{label:t(e)("recommend.details.topicCount")},{default:n(()=>[p(c(w.value.topicCount),1)]),_:1},8,["label"]),a(K,{label:t(e)("recommend.details.decayFactor")},{default:n(()=>[p(c(w.value.decayFactor.toFixed(2)),1)]),_:1},8,["label"]),a(K,{label:t(e)("recommend.details.updateCount")},{default:n(()=>[p(c(w.value.updateCount),1)]),_:1},8,["label"]),a(K,{label:t(e)("recommend.details.lastUpdated")},{default:n(()=>[p(c(t(Ce)(w.value.lastUpdated)),1)]),_:1},8,["label"])]),_:1}),x("h4",Wt,c(t(e)("recommend.details.topicWeights")),1),Object.keys(w.value.topics).length?(d(),g("div",Vt,[(d(!0),g(A,null,Q(w.value.topics,(r,m)=>(d(),g("div",{key:m,class:"interest-row"},[x("span",Kt,c(m),1),a(ne,{percent:Math.round(r*100),"stroke-color":ue(r),format:()=>r.toFixed(3),size:"small",style:{flex:"1","margin-left":"12px"}},null,8,["percent","stroke-color","format"])]))),128))])):(d(),_(V,{key:0,description:t(e)("recommend.empty.noTopics"),image:t(h)},null,8,["description","image"])),Object.keys(w.value.interactionWeights).length?(d(),g("h4",Qt,c(t(e)("recommend.details.interactionWeights")),1)):v("",!0),Object.keys(w.value.interactionWeights).length?(d(),g("pre",Yt,c(Re(w.value.interactionWeights)),1)):v("",!0)])):v("",!0)]),_:1},8,["open","title"])])}}},Zt=Xe(qt,[["__scopeId","data-v-16fcadc2"]]);export{Zt as default};
1
+ import{t as P,_ as Xe,b as Ze,u as et,E as tt,d as y}from"./index-Cs66y4oC.js";import{R as ot,aQ as nt,aW as at,r as st,al as ke,ab as be,aX as rt,aU as lt,aB as it}from"./icons-DlxlFL4g.js";import{o as ct,M as g,R as x,P as c,u as t,c as a,N as n,K as f,r as C,L as d,O as p,Q as _,S as v,F as A,Y as Q,_ as dt,f as X,a as ut}from"./vendor-BXcBOG8b.js";const xe=Object.freeze(["note","post","article","document"]),mt=Object.freeze(["pending","viewed","dismissed"]);function S(s,e=0){return typeof s=="number"&&Number.isFinite(s)?s:e}function he(s){if(!s||typeof s!="object"||Array.isArray(s))return{};const e={};for(const[i,h]of Object.entries(s))typeof h=="number"&&Number.isFinite(h)&&(e[i]=h);return e}function pt(s,e=0){if(!s||typeof s!="object")return null;const i=s.user_id??s.userId??"";if(!i)return null;const h=s.topics&&typeof s.topics=="object"&&!Array.isArray(s.topics)?he(s.topics):{},I=s.interaction_weights??s.interactionWeights,N=I&&typeof I=="object"&&!Array.isArray(I)?he(I):{};return{key:i,id:String(s.id||""),userId:i,topics:h,topicCount:Object.keys(h).length,interactionWeights:N,decayFactor:S(s.decay_factor??s.decayFactor,.9),lastUpdated:s.last_updated??s.lastUpdated??null,updateCount:S(s.update_count??s.updateCount,0),_idx:e}}function ft(s){const e=P(s);return Array.isArray(e)?e.map(pt).filter(Boolean):[]}function yt(s,e=0){if(!s||typeof s!="object")return null;const i=s.id||"";return i?{key:i,id:i,userId:s.user_id??s.userId??"",contentId:s.content_id??s.contentId??"",contentType:String(s.content_type??s.contentType??"note").toLowerCase(),title:String(s.title||""),score:S(s.score,0),reason:String(s.reason||""),source:String(s.source||"heuristic"),status:String(s.status||"pending").toLowerCase(),feedback:s.feedback??null,createdAt:s.created_at??s.createdAt??null,viewedAt:s.viewed_at??s.viewedAt??null,_idx:e}:null}function gt(s){const e=P(s);return Array.isArray(e)?e.map(yt).filter(Boolean):[]}const _t={total:0,pending:0,viewed:0,dismissed:0,feedbackCount:0,feedbackRate:0,avgScore:0};function vt(s){const e={..._t},i=P(s);return!i||typeof i!="object"||Array.isArray(i)||(e.total=S(i.total,0),e.pending=S(i.pending,0),e.viewed=S(i.viewed,0),e.dismissed=S(i.dismissed,0),e.feedbackCount=S(i.feedbackCount,0),e.feedbackRate=S(i.feedbackRate,0),e.avgScore=S(i.avgScore,0)),e}function kt(s){const e=P(s);return Array.isArray(e)?e.filter(i=>i&&typeof i=="object"&&typeof i.topic=="string").map((i,h)=>({key:`${i.topic}-${h}`,topic:i.topic,weight:S(i.weight,0)})):[]}function bt(s){const e=P(s);return Array.isArray(e)?e.filter(i=>i&&typeof i=="object"&&typeof i.topic=="string"&&typeof i.action=="string").map((i,h)=>({key:`${i.topic}-${h}`,topic:i.topic,action:i.action,amount:S(i.amount,0)})):[]}function J(s){const e=P(s);return!e||typeof e!="object"||Array.isArray(e)?{ok:!1,reason:"",profileId:null,topicCount:null}:{ok:!!(e.updated||e.deleted||e.marked||e.dismissed||e.recorded||e.applied||e.profileId),reason:e.reason?String(e.reason):"",profileId:e.profileId?String(e.profileId):null,topicCount:typeof e.topicCount=="number"?e.topicCount:null}}function Ce(s){if(s==null||s==="")return"—";const e=typeof s=="number"?new Date(s):new Date(String(s));return isNaN(e.getTime())?String(s):e.toLocaleString("zh-CN",{hour12:!1})}const xt={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},ht={class:"page-title"},Ct={class:"page-sub"},wt={style:{display:"flex","align-items":"center",gap:"12px","flex-wrap":"wrap"}},St={style:{color:"var(--text-secondary)","font-size":"12px"}},It={class:"type-name"},zt={class:"filter-bar"},At={style:{color:"var(--text-primary)","font-weight":"500"}},Ft={style:{color:"var(--text-muted)","font-size":"11px","margin-top":"2px"}},Tt={key:3,style:{color:"var(--text-secondary)","font-size":"12px"}},Ot={key:1,style:{color:"var(--text-muted)"}},Rt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},Ut={key:0,style:{color:"var(--text-primary)","font-family":"monospace","font-weight":"500"}},$t={key:2,style:{color:"var(--text-secondary)","font-family":"monospace","font-size":"12px"}},jt={key:3,style:{color:"var(--text-secondary)"}},Jt={key:4,style:{color:"var(--text-secondary)","font-size":"11px"}},Pt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},Nt={key:1},Et={class:"interest-topic"},Lt={style:{"margin-left":"8px","font-family":"monospace",color:"var(--text-primary)"}},Mt={style:{"margin-left":"auto",color:"var(--text-secondary)","font-size":"12px"}},Bt={key:0,style:{"padding-top":"8px"}},Dt={style:{"font-family":"monospace","font-size":"12px"}},Wt={style:{color:"var(--text-primary)","font-size":"13px",margin:"16px 0 8px"}},Vt={key:1},Kt={class:"interest-topic"},Qt={key:2,style:{color:"var(--text-primary)","font-size":"13px",margin:"16px 0 8px"}},Yt={key:3,class:"weights-pre"},qt={__name:"Recommend",setup(s){const{t:e}=Ze(),i=et(),h=tt.PRESENTED_IMAGE_SIMPLE,I=C(!1),N=C(!1),Z=C(!1),E=C([]),ee=C([]),F=C({total:0,pending:0,viewed:0,dismissed:0,feedbackCount:0,feedbackRate:0,avgScore:0}),Y=C([]),U=C([]),k=C(null),q=C("recs"),L=C(""),M=C(""),G=C(!1),te=C(!1),b=ut({userId:"",topicsJson:"",weightsJson:""}),w=C(null),we=X(()=>E.value.map(o=>({value:o.userId,label:`${o.userId} (${e("recommend.userBar.topicSuffix",{count:o.topicCount})})`}))),Se=X(()=>[{title:e("recommend.recColumns.title"),key:"title"},{title:e("recommend.recColumns.contentType"),key:"contentType",width:"110px"},{title:e("recommend.recColumns.score"),key:"score",width:"180px"},{title:e("recommend.recColumns.reason"),key:"reason",width:"220px"},{title:e("recommend.recColumns.status"),key:"status",width:"100px"},{title:e("recommend.recColumns.feedback"),key:"feedback",width:"90px"},{title:e("recommend.recColumns.action"),key:"action",width:"210px"}]),Ie=X(()=>[{title:e("recommend.profileColumns.userId"),key:"userId"},{title:e("recommend.profileColumns.topicCount"),key:"topicCount",width:"110px"},{title:e("recommend.profileColumns.decayFactor"),key:"decayFactor",width:"110px"},{title:e("recommend.profileColumns.updateCount"),key:"updateCount",width:"110px"},{title:e("recommend.profileColumns.lastUpdated"),key:"lastUpdated",width:"180px"},{title:e("recommend.profileColumns.action"),key:"action",width:"200px"}]),ze=X(()=>{let o=ee.value;return L.value&&(o=o.filter(l=>l.status===L.value)),M.value&&(o=o.filter(l=>l.contentType===M.value)),o});function le(o){const l=`recommend.type.${o}`,u=e(l);return u===l?o:u}function ie(o){return{note:"blue",post:"green",article:"purple",document:"orange"}[o]||"default"}function Ae(o){return{note:"#1677ff",post:"#52c41a",article:"#722ed1",document:"#fa8c16"}[o]||"#888"}function ce(o){const l=`recommend.status.${o}`,u=e(l);return u===l?o:u}function Fe(o){return{pending:"processing",viewed:"green",dismissed:"default"}[o]||"default"}function Te(o){const l=`recommend.feedbackLabel.${o}`,u=e(l);return u===l?o:u}function Oe(o){return{like:"green",dislike:"red",later:"gold"}[o]||"default"}function de(o){return o>=.7?"#52c41a":o>=.4?"#1677ff":o>=.2?"#faad14":"#ff4d4f"}function ue(o){return o>=.7?"#52c41a":o>=.4?"#1677ff":o>=.2?"#faad14":"#888"}function Re(o){try{return JSON.stringify(o,null,2)}catch{return String(o)}}async function B(){I.value=!0;try{const{output:o}=await i.execute("recommend profiles --json",1e4).catch(()=>({output:""}));E.value=ft(o),k.value&&!E.value.find(l=>l.userId===k.value)&&(k.value=null),k.value&&await R()}catch(o){y.error(e("recommend.messages.loadProfilesFailed",{err:o?.message||o}))}finally{I.value=!1}}async function R(){if(!k.value){ee.value=[],F.value={total:0,pending:0,viewed:0,dismissed:0,feedbackCount:0,feedbackRate:0,avgScore:0},Y.value=[];return}N.value=!0;try{const o=D(k.value),[l,u,T]=await Promise.all([i.execute(`recommend list ${o} --limit 200 --json`,1e4).catch(()=>({output:""})),i.execute(`recommend stats ${o} --json`,8e3).catch(()=>({output:""})),i.execute(`recommend top-interests ${o} --limit 30 --json`,8e3).catch(()=>({output:""}))]);ee.value=gt(l.output),F.value=vt(u.output),Y.value=kt(T.output)}catch(o){y.error(e("recommend.messages.loadUserFailed",{err:o?.message||o}))}finally{N.value=!1}}function D(o){return`"${String(o).replace(/"/g,'\\"')}"`}function Ue(){U.value=[],R()}function $e(o){k.value=o,q.value="recs",R()}async function je(){if(!b.userId.trim()){y.warning(e("recommend.messages.userIdRequired"));return}if(b.topicsJson.trim())try{JSON.parse(b.topicsJson)}catch{y.warning(e("recommend.messages.topicsJsonInvalid"));return}if(b.weightsJson.trim())try{JSON.parse(b.weightsJson)}catch{y.warning(e("recommend.messages.weightsJsonInvalid"));return}Z.value=!0;try{const o=[`recommend create-profile ${D(b.userId.trim())}`];b.topicsJson.trim()&&o.push(`-t ${me(b.topicsJson.trim())}`),b.weightsJson.trim()&&o.push(`-w ${me(b.weightsJson.trim())}`),o.push("--json");const{output:l}=await i.execute(o.join(" "),1e4),u=J(l);if(!u.ok){y.error(e("recommend.messages.createFailed",{err:u.reason||l.slice(0,120)}));return}y.success(e("recommend.messages.createOk",{id:u.profileId?.slice(0,8)||""})),G.value=!1;const T=b.userId.trim();pe(),await B(),k.value=T,await R()}catch(o){y.error(e("recommend.messages.createFailed",{err:o?.message||o}))}finally{Z.value=!1}}function me(o){return`'${String(o).replace(/'/g,"'\\''")}'`}async function Je(){if(k.value)try{const{output:o}=await i.execute(`recommend decay ${D(k.value)} --json`,8e3),l=J(o);if(!l.ok){y.error(e("recommend.messages.decayFailed",{err:l.reason||o.slice(0,120)}));return}y.success(l.topicCount!==null?e("recommend.messages.decayOkTopics",{count:l.topicCount}):e("recommend.messages.decayOk")),await B()}catch(o){y.error(e("recommend.messages.decayFailed",{err:o?.message||o}))}}async function Pe(){if(k.value)try{const{output:o}=await i.execute(`recommend suggest ${D(k.value)} --json`,8e3);U.value=bt(o),q.value="interests",U.value.length?y.success(e("recommend.messages.suggestFound",{count:U.value.length})):y.info(e("recommend.messages.suggestNone"))}catch(o){y.error(e("recommend.messages.loadSuggestFailed",{err:o?.message||o}))}}async function Ne(o){try{const{output:l}=await i.execute(`recommend delete-profile ${D(o.userId)} --json`,8e3),u=J(l);if(!u.ok){y.error(e("recommend.messages.deleteFailed",{err:u.reason||l.slice(0,120)}));return}y.success(e("recommend.messages.deleteOk")),k.value===o.userId&&(k.value=null),await B()}catch(l){y.error(e("recommend.messages.deleteFailed",{err:l?.message||l}))}}function Ee(o){w.value=o,te.value=!0}async function Le(o){try{const{output:l}=await i.execute(`recommend view ${o.id} --json`,8e3),u=J(l);if(!u.ok){y.error(e("recommend.messages.viewFailed",{err:u.reason||l.slice(0,120)}));return}y.success(e("recommend.messages.viewOk")),await R()}catch(l){y.error(e("recommend.messages.viewFailed",{err:l?.message||l}))}}async function Me(o,l){try{const{output:u}=await i.execute(`recommend feedback ${o.id} ${l} --json`,8e3),T=J(u);if(!T.ok){y.error(e("recommend.messages.feedbackFailed",{err:T.reason||u.slice(0,120)}));return}y.success(e("recommend.messages.feedbackOk")),await R()}catch(u){y.error(e("recommend.messages.feedbackFailed",{err:u?.message||u}))}}async function Be(o){try{const{output:l}=await i.execute(`recommend dismiss ${o.id} --json`,8e3),u=J(l);if(!u.ok){y.error(e("recommend.messages.dismissFailed",{err:u.reason||l.slice(0,120)}));return}y.success(e("recommend.messages.dismissOk")),await R()}catch(l){y.error(e("recommend.messages.dismissFailed",{err:l?.message||l}))}}function pe(){b.userId="",b.topicsJson="",b.weightsJson=""}return ct(B),(o,l)=>{const u=f("a-button"),T=f("a-space"),De=f("a-select"),z=f("a-card"),W=f("a-statistic"),O=f("a-col"),oe=f("a-row"),$=f("a-tag"),H=f("a-radio-button"),fe=f("a-radio-group"),V=f("a-empty"),ne=f("a-progress"),ae=f("a-menu-item"),We=f("a-menu"),Ve=f("a-dropdown"),ye=f("a-popconfirm"),ge=f("a-table"),se=f("a-tab-pane"),Ke=f("a-list-item"),Qe=f("a-list"),Ye=f("a-tabs"),qe=f("a-input"),re=f("a-form-item"),_e=f("a-textarea"),Ge=f("a-form"),ve=f("a-modal"),K=f("a-descriptions-item"),He=f("a-descriptions");return d(),g("div",null,[x("div",xt,[x("div",null,[x("h2",ht,c(t(e)("recommend.title")),1),x("p",Ct,c(t(e)("recommend.subtitle")),1)]),a(T,null,{default:n(()=>[a(u,{loading:I.value,onClick:B},{icon:n(()=>[a(t(ot))]),default:n(()=>[p(" "+c(t(e)("recommend.refresh")),1)]),_:1},8,["loading"]),a(u,{type:"primary",onClick:l[0]||(l[0]=r=>G.value=!0)},{icon:n(()=>[a(t(nt))]),default:n(()=>[p(" "+c(t(e)("recommend.createProfile")),1)]),_:1})]),_:1})]),a(z,{size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"},"body-style":{padding:"10px 16px"}},{default:n(()=>[x("div",wt,[x("span",St,c(t(e)("recommend.userBar.currentUser")),1),a(De,{value:k.value,"onUpdate:value":l[1]||(l[1]=r=>k.value=r),options:we.value,placeholder:t(e)("recommend.userBar.selectPlaceholder"),style:{"min-width":"280px"},"allow-clear":"","show-search":"",onChange:Ue},null,8,["value","options","placeholder"]),k.value?(d(),_(u,{key:0,size:"small",onClick:Je},{icon:n(()=>[a(t(at))]),default:n(()=>[p(" "+c(t(e)("recommend.userBar.applyDecay")),1)]),_:1})):v("",!0),k.value?(d(),_(u,{key:1,size:"small",onClick:Pe},{icon:n(()=>[a(t(st))]),default:n(()=>[p(" "+c(t(e)("recommend.userBar.suggest")),1)]),_:1})):v("",!0)])]),_:1}),a(oe,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:n(()=>[a(O,{xs:12,sm:8,lg:5},{default:n(()=>[a(z,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[a(W,{title:t(e)("recommend.stats.profiles"),value:E.value.length,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:n(()=>[a(t(ke))]),_:1},8,["title","value"])]),_:1})]),_:1}),a(O,{xs:12,sm:8,lg:5},{default:n(()=>[a(z,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[a(W,{title:t(e)("recommend.stats.totalRecs"),value:F.value.total,"value-style":{color:"#722ed1",fontSize:"20px"}},{prefix:n(()=>[a(t(be))]),_:1},8,["title","value"])]),_:1})]),_:1}),a(O,{xs:12,sm:8,lg:5},{default:n(()=>[a(z,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[a(W,{title:t(e)("recommend.stats.pending"),value:F.value.pending,"value-style":{color:F.value.pending>0?"#faad14":"#888",fontSize:"20px"}},{prefix:n(()=>[a(t(rt))]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),a(O,{xs:12,sm:8,lg:5},{default:n(()=>[a(z,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[a(W,{title:t(e)("recommend.stats.feedbackRate"),value:F.value.feedbackRate*100,suffix:"%",precision:1,"value-style":{color:"#13c2c2",fontSize:"20px"}},{prefix:n(()=>[a(t(lt))]),_:1},8,["title","value"])]),_:1})]),_:1}),a(O,{xs:24,sm:8,lg:4},{default:n(()=>[a(z,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[a(W,{title:t(e)("recommend.stats.avgScore"),value:F.value.avgScore,precision:3,"value-style":{color:de(F.value.avgScore),fontSize:"20px"}},{prefix:n(()=>[a(t(it))]),_:1},8,["title","value","value-style"])]),_:1})]),_:1})]),_:1}),a(z,{title:t(e)("recommend.typeCatalogue"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"},"body-style":{padding:"12px 16px"}},{default:n(()=>[a(oe,{gutter:[12,12]},{default:n(()=>[(d(!0),g(A,null,Q(t(xe),r=>(d(),_(O,{key:r,xs:12,sm:6},{default:n(()=>[x("div",{class:"type-pill",style:dt({borderLeftColor:Ae(r)})},[a($,{color:ie(r),style:{"font-family":"monospace"}},{default:n(()=>[p(c(r),1)]),_:2},1032,["color"]),x("div",It,c(le(r)),1)],4)]),_:2},1024))),128))]),_:1})]),_:1},8,["title"]),a(Ye,{activeKey:q.value,"onUpdate:activeKey":l[4]||(l[4]=r=>q.value=r),class:"recommend-tabs"},{default:n(()=>[a(se,{key:"recs",tab:t(e)("recommend.tabs.recs")},{default:n(()=>[x("div",zt,[a(fe,{value:L.value,"onUpdate:value":l[2]||(l[2]=r=>L.value=r),size:"small","button-style":"solid"},{default:n(()=>[a(H,{value:""},{default:n(()=>[p(c(t(e)("recommend.filter.allStatuses")),1)]),_:1}),(d(!0),g(A,null,Q(t(mt),r=>(d(),_(H,{key:r,value:r},{default:n(()=>[p(c(ce(r)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),a(fe,{value:M.value,"onUpdate:value":l[3]||(l[3]=r=>M.value=r),size:"small"},{default:n(()=>[a(H,{value:""},{default:n(()=>[p(c(t(e)("recommend.filter.allTypes")),1)]),_:1}),(d(!0),g(A,null,Q(t(xe),r=>(d(),_(H,{key:r,value:r},{default:n(()=>[p(c(le(r)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),k.value?(d(),_(ge,{key:1,columns:Se.value,"data-source":ze.value,pagination:{pageSize:20,showTotal:r=>t(e)("recommend.totals.rows",{count:r})},size:"small",loading:N.value,style:{background:"var(--bg-card)"}},{bodyCell:n(({column:r,record:m})=>[r.key==="title"?(d(),g(A,{key:0},[x("span",At,c(m.title||t(e)("recommend.noTitle")),1),x("div",Ft,c(m.contentId),1)],64)):v("",!0),r.key==="contentType"?(d(),_($,{key:1,color:ie(m.contentType),style:{"font-family":"monospace"}},{default:n(()=>[p(c(m.contentType),1)]),_:2},1032,["color"])):v("",!0),r.key==="score"?(d(),_(ne,{key:2,percent:Math.round(m.score*100),"stroke-color":de(m.score),size:"small",format:()=>m.score.toFixed(3)},null,8,["percent","stroke-color","format"])):v("",!0),r.key==="reason"?(d(),g("span",Tt,c(m.reason),1)):v("",!0),r.key==="status"?(d(),_($,{key:4,color:Fe(m.status)},{default:n(()=>[p(c(ce(m.status)),1)]),_:2},1032,["color"])):v("",!0),r.key==="feedback"?(d(),g(A,{key:5},[m.feedback?(d(),_($,{key:0,color:Oe(m.feedback)},{default:n(()=>[p(c(Te(m.feedback)),1)]),_:2},1032,["color"])):(d(),g("span",Ot,"—"))],64)):v("",!0),r.key==="action"?(d(),g(A,{key:6},[m.status==="pending"?(d(),_(u,{key:0,size:"small",type:"link",onClick:j=>Le(m)},{default:n(()=>[p(c(t(e)("recommend.rowActions.view")),1)]),_:1},8,["onClick"])):v("",!0),m.status!=="dismissed"?(d(),_(Ve,{key:1},{overlay:n(()=>[a(We,{onClick:({key:j})=>Me(m,j)},{default:n(()=>[a(ae,{key:"like",style:{color:"#52c41a"}},{default:n(()=>[p(c(t(e)("recommend.feedbackMenu.like")),1)]),_:1}),a(ae,{key:"dislike",style:{color:"#ff4d4f"}},{default:n(()=>[p(c(t(e)("recommend.feedbackMenu.dislike")),1)]),_:1}),a(ae,{key:"later"},{default:n(()=>[p(c(t(e)("recommend.feedbackMenu.later")),1)]),_:1})]),_:1},8,["onClick"])]),default:n(()=>[a(u,{size:"small",type:"link"},{default:n(()=>[p(c(t(e)("recommend.feedbackDropdown")),1)]),_:1})]),_:2},1024)):v("",!0),m.status!=="dismissed"?(d(),_(ye,{key:2,title:t(e)("recommend.rowActions.dismissConfirmTitle"),"ok-text":t(e)("recommend.rowActions.dismissOk"),"cancel-text":t(e)("common.cancel"),onConfirm:j=>Be(m)},{default:n(()=>[a(u,{size:"small",type:"link",danger:""},{default:n(()=>[p(c(t(e)("recommend.rowActions.dismiss")),1)]),_:1})]),_:1},8,["title","ok-text","cancel-text","onConfirm"])):v("",!0)],64)):v("",!0)]),emptyText:n(()=>[x("div",Rt,[a(t(be),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),p(" "+c(L.value||M.value?t(e)("recommend.empty.filtered"):t(e)("recommend.empty.noRecsHint")),1)])]),_:1},8,["columns","data-source","pagination","loading"])):(d(),_(V,{key:0,description:t(e)("recommend.empty.selectUser"),image:t(h),style:{padding:"40px 0"}},null,8,["description","image"]))]),_:1},8,["tab"]),a(se,{key:"profiles",tab:t(e)("recommend.tabs.profiles")},{default:n(()=>[a(ge,{columns:Ie.value,"data-source":E.value,pagination:{pageSize:20,showTotal:r=>t(e)("recommend.totals.profiles",{count:r})},size:"small",loading:I.value,style:{background:"var(--bg-card)"}},{bodyCell:n(({column:r,record:m})=>[r.key==="userId"?(d(),g("span",Ut,c(m.userId),1)):v("",!0),r.key==="topicCount"?(d(),_($,{key:1,color:"blue"},{default:n(()=>[p(c(t(e)("recommend.topicTagSuffix",{count:m.topicCount})),1)]),_:2},1024)):v("",!0),r.key==="decayFactor"?(d(),g("span",$t,c(m.decayFactor.toFixed(2)),1)):v("",!0),r.key==="updateCount"?(d(),g("span",jt,c(m.updateCount),1)):v("",!0),r.key==="lastUpdated"?(d(),g("span",Jt,c(t(Ce)(m.lastUpdated)),1)):v("",!0),r.key==="action"?(d(),g(A,{key:5},[a(u,{size:"small",type:"link",onClick:j=>Ee(m)},{default:n(()=>[p(c(t(e)("recommend.rowActions.details")),1)]),_:1},8,["onClick"]),a(u,{size:"small",type:"link",onClick:j=>$e(m.userId)},{default:n(()=>[p(c(t(e)("recommend.rowActions.switch")),1)]),_:1},8,["onClick"]),a(ye,{title:t(e)("recommend.rowActions.deleteConfirmTitle"),"ok-text":t(e)("recommend.rowActions.deleteOk"),"cancel-text":t(e)("common.cancel"),onConfirm:j=>Ne(m)},{default:n(()=>[a(u,{size:"small",type:"link",danger:""},{default:n(()=>[p(c(t(e)("recommend.rowActions.delete")),1)]),_:1})]),_:1},8,["title","ok-text","cancel-text","onConfirm"])],64)):v("",!0)]),emptyText:n(()=>[x("div",Pt,[a(t(ke),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),p(" "+c(t(e)("recommend.empty.noProfiles")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),a(se,{key:"interests",tab:t(e)("recommend.tabs.interests")},{default:n(()=>[k.value?(d(),_(oe,{key:1,gutter:[16,16]},{default:n(()=>[a(O,{xs:24,lg:14},{default:n(()=>[a(z,{title:t(e)("recommend.interest.topicWeights"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[Y.value.length?(d(),g("div",Nt,[(d(!0),g(A,null,Q(Y.value,r=>(d(),g("div",{key:r.key,class:"interest-row"},[x("span",Et,c(r.topic),1),a(ne,{percent:Math.round(r.weight*100),"stroke-color":ue(r.weight),format:()=>r.weight.toFixed(3),size:"small",style:{flex:"1","margin-left":"12px"}},null,8,["percent","stroke-color","format"])]))),128))])):(d(),_(V,{key:0,description:t(e)("recommend.empty.noInterests"),image:t(h)},null,8,["description","image"]))]),_:1},8,["title"])]),_:1}),a(O,{xs:24,lg:10},{default:n(()=>[a(z,{title:t(e)("recommend.interest.feedbackSuggest"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[U.value.length?(d(),_(Qe,{key:1,size:"small","data-source":U.value},{renderItem:n(({item:r})=>[a(Ke,null,{default:n(()=>[a($,{color:r.action==="boost"?"green":"orange"},{default:n(()=>[p(c(r.action==="boost"?t(e)("recommend.interest.boost"):t(e)("recommend.interest.lower")),1)]),_:2},1032,["color"]),x("span",Lt,c(r.topic),1),x("span",Mt,"±"+c(r.amount),1)]),_:2},1024)]),_:1},8,["data-source"])):(d(),_(V,{key:0,description:t(e)("recommend.empty.noSuggestions"),image:t(h)},null,8,["description","image"]))]),_:1},8,["title"])]),_:1})]),_:1})):(d(),_(V,{key:0,description:t(e)("recommend.empty.selectUser"),image:t(h),style:{padding:"40px 0"}},null,8,["description","image"]))]),_:1},8,["tab"])]),_:1},8,["activeKey"]),a(ve,{open:G.value,"onUpdate:open":l[8]||(l[8]=r=>G.value=r),title:t(e)("recommend.create.title"),"confirm-loading":Z.value,width:560,"ok-text":t(e)("recommend.create.ok"),"cancel-text":t(e)("common.cancel"),onOk:je,onCancel:pe},{default:n(()=>[a(Ge,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:n(()=>[a(re,{label:t(e)("recommend.create.userIdLabel"),required:""},{default:n(()=>[a(qe,{value:b.userId,"onUpdate:value":l[5]||(l[5]=r=>b.userId=r),placeholder:t(e)("recommend.create.userIdPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),a(re,{label:t(e)("recommend.create.topicsLabel")},{default:n(()=>[a(_e,{value:b.topicsJson,"onUpdate:value":l[6]||(l[6]=r=>b.topicsJson=r),placeholder:t(e)("recommend.create.topicsPlaceholder"),"auto-size":{minRows:2,maxRows:5}},null,8,["value","placeholder"])]),_:1},8,["label"]),a(re,{label:t(e)("recommend.create.weightsLabel")},{default:n(()=>[a(_e,{value:b.weightsJson,"onUpdate:value":l[7]||(l[7]=r=>b.weightsJson=r),placeholder:t(e)("recommend.create.weightsPlaceholder"),"auto-size":{minRows:2,maxRows:5}},null,8,["value","placeholder"])]),_:1},8,["label"])]),_:1})]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),a(ve,{open:te.value,"onUpdate:open":l[9]||(l[9]=r=>te.value=r),title:t(e)("recommend.details.title",{userId:w.value?.userId||""}),width:680,footer:null},{default:n(()=>[w.value?(d(),g("div",Bt,[a(He,{column:2,size:"small",bordered:""},{default:n(()=>[a(K,{label:t(e)("recommend.details.id"),span:2},{default:n(()=>[x("span",Dt,c(w.value.id),1)]),_:1},8,["label"]),a(K,{label:t(e)("recommend.details.topicCount")},{default:n(()=>[p(c(w.value.topicCount),1)]),_:1},8,["label"]),a(K,{label:t(e)("recommend.details.decayFactor")},{default:n(()=>[p(c(w.value.decayFactor.toFixed(2)),1)]),_:1},8,["label"]),a(K,{label:t(e)("recommend.details.updateCount")},{default:n(()=>[p(c(w.value.updateCount),1)]),_:1},8,["label"]),a(K,{label:t(e)("recommend.details.lastUpdated")},{default:n(()=>[p(c(t(Ce)(w.value.lastUpdated)),1)]),_:1},8,["label"])]),_:1}),x("h4",Wt,c(t(e)("recommend.details.topicWeights")),1),Object.keys(w.value.topics).length?(d(),g("div",Vt,[(d(!0),g(A,null,Q(w.value.topics,(r,m)=>(d(),g("div",{key:m,class:"interest-row"},[x("span",Kt,c(m),1),a(ne,{percent:Math.round(r*100),"stroke-color":ue(r),format:()=>r.toFixed(3),size:"small",style:{flex:"1","margin-left":"12px"}},null,8,["percent","stroke-color","format"])]))),128))])):(d(),_(V,{key:0,description:t(e)("recommend.empty.noTopics"),image:t(h)},null,8,["description","image"])),Object.keys(w.value.interactionWeights).length?(d(),g("h4",Qt,c(t(e)("recommend.details.interactionWeights")),1)):v("",!0),Object.keys(w.value.interactionWeights).length?(d(),g("pre",Yt,c(Re(w.value.interactionWeights)),1)):v("",!0)])):v("",!0)]),_:1},8,["open","title"])])}}},Zt=Xe(qt,[["__scopeId","data-v-16fcadc2"]]);export{Zt as default};
@@ -1,4 +1,4 @@
1
- import{E as wr,r as ue,o as yr,a7 as br,M as we,R as $e,c as L,N as R,u as ne,Q as se,S as ae,K as ie,f as nt,L as H,O as V,P as de,F as Qt,Y as Jt,a4 as Er}from"./vendor-BXcBOG8b.js";import{Q as vr}from"./QrScannerModal-CxifoeD5.js";import{aC as xr,ay as Ir}from"./icons-DlxlFL4g.js";import"./markdown-DUKxbhE4.js";import"./index-3RqDry-K.js";function Sr(t){return t instanceof Uint8Array||ArrayBuffer.isView(t)&&t.constructor.name==="Uint8Array"&&"BYTES_PER_ELEMENT"in t&&t.BYTES_PER_ELEMENT===1}function De(t,e=""){if(typeof t!="number"){const n=e&&`"${e}" `;throw new TypeError(`${n}expected number, got ${typeof t}`)}if(!Number.isSafeInteger(t)||t<0){const n=e&&`"${e}" `;throw new RangeError(`${n}expected integer >= 0, got ${t}`)}}function be(t,e,n=""){const r=Sr(t),o=t?.length,s=e!==void 0;if(!r||s&&o!==e){const i=n&&`"${n}" `,a=s?` of length ${e}`:"",l=r?`length=${o}`:`type=${typeof t}`,c=i+"expected Uint8Array"+a+", got "+l;throw r?new RangeError(c):new TypeError(c)}return t}function Dt(t){if(typeof t!="function"||typeof t.create!="function")throw new TypeError("Hash must wrapped by utils.createHasher");if(De(t.outputLen),De(t.blockLen),t.outputLen<1)throw new Error('"outputLen" must be >= 1');if(t.blockLen<1)throw new Error('"blockLen" must be >= 1')}function gt(t,e=!0){if(t.destroyed)throw new Error("Hash instance has been destroyed");if(e&&t.finished)throw new Error("Hash#digest() has already been called")}function Tn(t,e){be(t,void 0,"digestInto() output");const n=e.outputLen;if(t.length<n)throw new RangeError('"digestInto() output" expected to be of length >='+n)}function Xe(...t){for(let e=0;e<t.length;e++)t[e].fill(0)}function vt(t){return new DataView(t.buffer,t.byteOffset,t.byteLength)}function pe(t,e){return t<<32-e|t>>>e}const qn=typeof Uint8Array.from([]).toHex=="function"&&typeof Uint8Array.fromHex=="function",_r=Array.from({length:256},(t,e)=>e.toString(16).padStart(2,"0"));function Ft(t){if(be(t),qn)return t.toHex();let e="";for(let n=0;n<t.length;n++)e+=_r[t[n]];return e}const ye={_0:48,_9:57,A:65,F:70,a:97,f:102};function en(t){if(t>=ye._0&&t<=ye._9)return t-ye._0;if(t>=ye.A&&t<=ye.F)return t-(ye.A-10);if(t>=ye.a&&t<=ye.f)return t-(ye.a-10)}function jt(t){if(typeof t!="string")throw new TypeError("hex string expected, got "+typeof t);if(qn)try{return Uint8Array.fromHex(t)}catch(o){throw o instanceof SyntaxError?new RangeError(o.message):o}const e=t.length,n=e/2;if(e%2)throw new RangeError("hex string expected, got unpadded hex of length "+e);const r=new Uint8Array(n);for(let o=0,s=0;o<n;o++,s+=2){const i=en(t.charCodeAt(s)),a=en(t.charCodeAt(s+1));if(i===void 0||a===void 0){const l=t[s]+t[s+1];throw new RangeError('hex string expected, got non-hex character "'+l+'" at index '+s)}r[o]=i*16+a}return r}function Rr(t,e={}){const n=(o,s)=>t(s).update(o).digest(),r=t(void 0);return n.outputLen=r.outputLen,n.blockLen=r.blockLen,n.canXOF=r.canXOF,n.create=o=>t(o),Object.assign(n,e),Object.freeze(n)}function Ar(t=32){De(t,"bytesLength");const e=typeof globalThis=="object"?globalThis.crypto:null;if(typeof e?.getRandomValues!="function")throw new Error("crypto.getRandomValues must be defined");if(t>65536)throw new RangeError(`"bytesLength" expected <= 65536, got ${t}`);return e.getRandomValues(new Uint8Array(t))}const Br=t=>({oid:Uint8Array.from([6,9,96,134,72,1,101,3,4,2,t])});function Or(t,e,n){return t&e^~t&n}function kr(t,e,n){return t&e^t&n^e&n}class Tr{blockLen;outputLen;canXOF=!1;padOffset;isLE;buffer;view;finished=!1;length=0;pos=0;destroyed=!1;constructor(e,n,r,o){this.blockLen=e,this.outputLen=n,this.padOffset=r,this.isLE=o,this.buffer=new Uint8Array(e),this.view=vt(this.buffer)}update(e){gt(this),be(e);const{view:n,buffer:r,blockLen:o}=this,s=e.length;for(let i=0;i<s;){const a=Math.min(o-this.pos,s-i);if(a===o){const l=vt(e);for(;o<=s-i;i+=o)this.process(l,i);continue}r.set(e.subarray(i,i+a),this.pos),this.pos+=a,i+=a,this.pos===o&&(this.process(n,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){gt(this),Tn(e,this),this.finished=!0;const{buffer:n,view:r,blockLen:o,isLE:s}=this;let{pos:i}=this;n[i++]=128,Xe(this.buffer.subarray(i)),this.padOffset>o-i&&(this.process(r,0),i=0);for(let u=i;u<o;u++)n[u]=0;r.setBigUint64(o-8,BigInt(this.length*8),s),this.process(r,0);const a=vt(e),l=this.outputLen;if(l%4)throw new Error("_sha2: outputLen must be aligned to 32bit");const c=l/4,d=this.get();if(c>d.length)throw new Error("_sha2: outputLen bigger than state");for(let u=0;u<c;u++)a.setUint32(4*u,d[u],s)}digest(){const{buffer:e,outputLen:n}=this;this.digestInto(e);const r=e.slice(0,n);return this.destroy(),r}_cloneInto(e){e||=new this.constructor,e.set(...this.get());const{blockLen:n,buffer:r,length:o,finished:s,destroyed:i,pos:a}=this;return e.destroyed=i,e.finished=s,e.length=o,e.pos=a,o%n&&e.buffer.set(r),e}clone(){return this._cloneInto()}}const Ie=Uint32Array.from([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),qr=Uint32Array.from([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),Se=new Uint32Array(64);class Lr extends Tr{constructor(e){super(64,e,8,!1)}get(){const{A:e,B:n,C:r,D:o,E:s,F:i,G:a,H:l}=this;return[e,n,r,o,s,i,a,l]}set(e,n,r,o,s,i,a,l){this.A=e|0,this.B=n|0,this.C=r|0,this.D=o|0,this.E=s|0,this.F=i|0,this.G=a|0,this.H=l|0}process(e,n){for(let u=0;u<16;u++,n+=4)Se[u]=e.getUint32(n,!1);for(let u=16;u<64;u++){const w=Se[u-15],h=Se[u-2],x=pe(w,7)^pe(w,18)^w>>>3,I=pe(h,17)^pe(h,19)^h>>>10;Se[u]=I+Se[u-7]+x+Se[u-16]|0}let{A:r,B:o,C:s,D:i,E:a,F:l,G:c,H:d}=this;for(let u=0;u<64;u++){const w=pe(a,6)^pe(a,11)^pe(a,25),h=d+w+Or(a,l,c)+qr[u]+Se[u]|0,I=(pe(r,2)^pe(r,13)^pe(r,22))+kr(r,o,s)|0;d=c,c=l,l=a,a=i+h|0,i=s,s=o,o=r,r=h+I|0}r=r+this.A|0,o=o+this.B|0,s=s+this.C|0,i=i+this.D|0,a=a+this.E|0,l=l+this.F|0,c=c+this.G|0,d=d+this.H|0,this.set(r,o,s,i,a,l,c,d)}roundClean(){Xe(Se)}destroy(){this.destroyed=!0,this.set(0,0,0,0,0,0,0,0),Xe(this.buffer)}}class Cr extends Lr{A=Ie[0]|0;B=Ie[1]|0;C=Ie[2]|0;D=Ie[3]|0;E=Ie[4]|0;F=Ie[5]|0;G=Ie[6]|0;H=Ie[7]|0;constructor(){super(32)}}const tn=Rr(()=>new Cr,Br(1));const Re=(t,e,n)=>be(t,e,n),Ln=De,Cn=Ft,Ur=t=>jt(t),$r=t=>Ar(t),mt=BigInt(0),Lt=BigInt(1);function Un(t,e=""){if(typeof t!="boolean"){const n=e&&`"${e}" `;throw new TypeError(n+"expected boolean, got type="+typeof t)}return t}function Nr(t){if(typeof t=="bigint"){if(!dt(t))throw new RangeError("positive bigint expected, got "+t)}else Ln(t);return t}function nn(t,e=""){if(typeof t!="number"){const n=e&&`"${e}" `;throw new TypeError(n+"expected number, got type="+typeof t)}if(!Number.isSafeInteger(t)){const n=e&&`"${e}" `;throw new RangeError(n+"expected safe integer, got "+t)}}function $n(t){if(typeof t!="string")throw new TypeError("hex string expected, got "+typeof t);return t===""?mt:BigInt("0x"+t)}function Mr(t){return $n(Ft(t))}function Ge(t){return $n(Ft(We(be(t)).reverse()))}function Nn(t,e){if(De(e),e===0)throw new RangeError("zero length");t=Nr(t);const n=t.toString(16);if(n.length>e*2)throw new RangeError("number too large");return jt(n.padStart(e*2,"0"))}function Mn(t,e){return Nn(t,e).reverse()}function Pr(t,e){if(t=Re(t),e=Re(e),t.length!==e.length)return!1;let n=0;for(let r=0;r<t.length;r++)n|=t[r]^e[r];return n===0}function We(t){return Uint8Array.from(Re(t))}const dt=t=>typeof t=="bigint"&&mt<=t;function Dr(t,e,n){return dt(t)&&dt(e)&&dt(n)&&e<=t&&t<n}function wt(t,e,n,r){if(!Dr(e,n,r))throw new RangeError("expected valid "+t+": "+n+" <= n < "+r+", got "+e)}function Fr(t){if(t<mt)throw new Error("expected non-negative bigint, got "+t);let e;for(e=0;t>mt;t>>=Lt,e+=1);return e}const jr=t=>(Lt<<BigInt(t))-Lt;function Ht(t,e={},n={}){if(Object.prototype.toString.call(t)!=="[object Object]")throw new TypeError("expected valid options object");function r(s,i,a){if(!a&&i!=="function"&&!Object.hasOwn(t,s))throw new TypeError(`param "${s}" is invalid: expected own property`);const l=t[s];if(a&&l===void 0)return;const c=typeof l;if(c!==i||l===null)throw new TypeError(`param "${s}" is invalid: expected ${i}, got ${c}`)}const o=(s,i)=>Object.entries(s).forEach(([a,l])=>r(a,l,i));o(e,!1),o(n,!0)}const rn=()=>{throw new Error("not implemented")};const ee=BigInt(0),W=BigInt(1),Le=BigInt(2),Pn=BigInt(3),Dn=BigInt(4),Fn=BigInt(5),Hr=BigInt(7),jn=BigInt(8),zr=BigInt(9),Hn=BigInt(16);function z(t,e){if(e<=ee)throw new Error("mod: expected positive modulus, got "+e);const n=t%e;return n>=ee?n:e+n}function le(t,e,n){if(e<ee)throw new Error("pow2: expected non-negative exponent, got "+e);let r=t;for(;e-- >ee;)r*=r,r%=n;return r}function on(t,e){if(t===ee)throw new Error("invert: expected non-zero number");if(e<=ee)throw new Error("invert: expected positive modulus, got "+e);let n=z(t,e),r=e,o=ee,s=W;for(;n!==ee;){const a=r/n,l=r-n*a,c=o-s*a;r=n,n=l,o=s,s=c}if(r!==W)throw new Error("invert: does not exist");return z(o,e)}function zt(t,e,n){const r=t;if(!r.eql(r.sqr(e),n))throw new Error("Cannot find square root")}function zn(t,e){const n=t,r=(n.ORDER+W)/Dn,o=n.pow(e,r);return zt(n,o,e),o}function Zr(t,e){const n=t,r=(n.ORDER-Fn)/jn,o=n.mul(e,Le),s=n.pow(o,r),i=n.mul(e,s),a=n.mul(n.mul(i,Le),s),l=n.mul(i,n.sub(a,n.ONE));return zt(n,l,e),l}function Kr(t){const e=Zt(t),n=Zn(t),r=n(e,e.neg(e.ONE)),o=n(e,r),s=n(e,e.neg(r)),i=(t+Hr)/Hn;return((a,l)=>{const c=a;let d=c.pow(l,i),u=c.mul(d,r);const w=c.mul(d,o),h=c.mul(d,s),x=c.eql(c.sqr(u),l),I=c.eql(c.sqr(w),l);d=c.cmov(d,u,x),u=c.cmov(h,w,I);const p=c.eql(c.sqr(u),l),y=c.cmov(d,u,p);return zt(c,y,l),y})}function Zn(t){if(t<Pn)throw new Error("sqrt is not defined for small field");let e=t-W,n=0;for(;e%Le===ee;)e/=Le,n++;let r=Le;const o=Zt(t);for(;sn(o,r)===1;)if(r++>1e3)throw new Error("Cannot find square root: probably non-prime P");if(n===1)return zn;let s=o.pow(r,e);const i=(e+W)/Le;return function(l,c){const d=l;if(d.is0(c))return c;if(sn(d,c)!==1)throw new Error("Cannot find square root");let u=n,w=d.mul(d.ONE,s),h=d.pow(c,e),x=d.pow(c,i);for(;!d.eql(h,d.ONE);){if(d.is0(h))return d.ZERO;let I=1,p=d.sqr(h);for(;!d.eql(p,d.ONE);)if(I++,p=d.sqr(p),I===u)throw new Error("Cannot find square root");const y=W<<BigInt(u-I-1),b=d.pow(w,y);u=I,w=d.sqr(b),h=d.mul(h,w),x=d.mul(x,b)}return x}}function Yr(t){return t%Dn===Pn?zn:t%jn===Fn?Zr:t%Hn===zr?Kr(t):Zn(t)}const Te=(t,e)=>(z(t,e)&W)===W,Vr=["create","isValid","is0","neg","inv","sqrt","sqr","eql","add","sub","mul","pow","div","addN","subN","mulN","sqrN"];function Xr(t){const e={ORDER:"bigint",BYTES:"number",BITS:"number"},n=Vr.reduce((r,o)=>(r[o]="function",r),e);if(Ht(t,n),nn(t.BYTES,"BYTES"),nn(t.BITS,"BITS"),t.BYTES<1||t.BITS<1)throw new Error("invalid field: expected BYTES/BITS > 0");if(t.ORDER<=W)throw new Error("invalid field: expected ORDER > 1, got "+t.ORDER);return t}function Gr(t,e,n){const r=t;if(n<ee)throw new Error("invalid exponent, negatives unsupported");if(n===ee)return r.ONE;if(n===W)return e;let o=r.ONE,s=e;for(;n>ee;)n&W&&(o=r.mul(o,s)),s=r.sqr(s),n>>=W;return o}function Kn(t,e,n=!1){const r=t,o=new Array(e.length).fill(n?r.ZERO:void 0),s=e.reduce((a,l,c)=>r.is0(l)?a:(o[c]=a,r.mul(a,l)),r.ONE),i=r.inv(s);return e.reduceRight((a,l,c)=>r.is0(l)?a:(o[c]=r.mul(a,o[c]),r.mul(a,l)),i),o}function sn(t,e){const n=t,r=(n.ORDER-W)/Le,o=n.pow(e,r),s=n.eql(o,n.ONE),i=n.eql(o,n.ZERO),a=n.eql(o,n.neg(n.ONE));if(!s&&!i&&!a)throw new Error("invalid Legendre symbol result");return s?1:i?0:-1}function Wr(t,e){if(e!==void 0&&Ln(e),t<=ee)throw new Error("invalid n length: expected positive n, got "+t);if(e!==void 0&&e<1)throw new Error("invalid n length: expected positive bit length, got "+e);const n=Fr(t);if(e!==void 0&&e<n)throw new Error(`invalid n length: expected bit length (${n}) >= n.length (${e})`);const r=e!==void 0?e:n,o=Math.ceil(r/8);return{nBitLength:r,nByteLength:o}}const cn=new WeakMap;class Yn{ORDER;BITS;BYTES;isLE;ZERO=ee;ONE=W;_lengths;_mod;constructor(e,n={}){if(e<=W)throw new Error("invalid field: expected ORDER > 1, got "+e);let r;this.isLE=!1,n!=null&&typeof n=="object"&&(typeof n.BITS=="number"&&(r=n.BITS),typeof n.sqrt=="function"&&Object.defineProperty(this,"sqrt",{value:n.sqrt,enumerable:!0}),typeof n.isLE=="boolean"&&(this.isLE=n.isLE),n.allowedLengths&&(this._lengths=Object.freeze(n.allowedLengths.slice())),typeof n.modFromBytes=="boolean"&&(this._mod=n.modFromBytes));const{nBitLength:o,nByteLength:s}=Wr(e,r);if(s>2048)throw new Error("invalid field: expected ORDER of <= 2048 bytes");this.ORDER=e,this.BITS=o,this.BYTES=s,Object.freeze(this)}create(e){return z(e,this.ORDER)}isValid(e){if(typeof e!="bigint")throw new TypeError("invalid field element: expected bigint, got "+typeof e);return ee<=e&&e<this.ORDER}is0(e){return e===ee}isValidNot0(e){return!this.is0(e)&&this.isValid(e)}isOdd(e){return(e&W)===W}neg(e){return z(-e,this.ORDER)}eql(e,n){return e===n}sqr(e){return z(e*e,this.ORDER)}add(e,n){return z(e+n,this.ORDER)}sub(e,n){return z(e-n,this.ORDER)}mul(e,n){return z(e*n,this.ORDER)}pow(e,n){return Gr(this,e,n)}div(e,n){return z(e*on(n,this.ORDER),this.ORDER)}sqrN(e){return e*e}addN(e,n){return e+n}subN(e,n){return e-n}mulN(e,n){return e*n}inv(e){return on(e,this.ORDER)}sqrt(e){let n=cn.get(this);return n||cn.set(this,n=Yr(this.ORDER)),n(this,e)}toBytes(e){return this.isLE?Mn(e,this.BYTES):Nn(e,this.BYTES)}fromBytes(e,n=!1){Re(e);const{_lengths:r,BYTES:o,isLE:s,ORDER:i,_mod:a}=this;if(r){if(e.length<1||!r.includes(e.length)||e.length>o)throw new Error("Field.fromBytes: expected "+r+" bytes, got "+e.length);const c=new Uint8Array(o);c.set(e,s?0:c.length-e.length),e=c}if(e.length!==o)throw new Error("Field.fromBytes: expected "+o+" bytes, got "+e.length);let l=s?Ge(e):Mr(e);if(a&&(l=z(l,i)),!n&&!this.isValid(l))throw new Error("invalid field element: outside of range 0..ORDER");return l}invertBatch(e){return Kn(this,e)}cmov(e,n,r){return Un(r,"condition"),r?n:e}}Object.freeze(Yn.prototype);function Zt(t,e={}){return new Yn(t,e)}const yt=BigInt(0),Ct=BigInt(1);function an(t,e){const n=e.negate();return t?n:e}function xt(t,e){const n=Kn(t.Fp,e.map(r=>r.Z));return e.map((r,o)=>t.fromAffine(r.toAffine(n[o])))}function Vn(t,e){if(!Number.isSafeInteger(t)||t<=0||t>e)throw new Error("invalid window size, expected [1.."+e+"], got W="+t)}function It(t,e){Vn(t,e);const n=Math.ceil(e/t)+1,r=2**(t-1),o=2**t,s=jr(t),i=BigInt(t);return{windows:n,windowSize:r,mask:s,maxNumber:o,shiftBy:i}}function ln(t,e,n){const{windowSize:r,mask:o,maxNumber:s,shiftBy:i}=n;let a=Number(t&o),l=t>>i;a>r&&(a-=s,l+=Ct);const c=e*r,d=c+Math.abs(a)-1,u=a===0,w=a<0,h=e%2!==0;return{nextN:l,offset:d,isZero:u,isNeg:w,isNegF:h,offsetF:c}}const St=new WeakMap,Xn=new WeakMap;function _t(t){return Xn.get(t)||1}function un(t){if(t!==yt)throw new Error("invalid wNAF")}class Qr{BASE;ZERO;Fn;bits;constructor(e,n){this.BASE=e.BASE,this.ZERO=e.ZERO,this.Fn=e.Fn,this.bits=n}_unsafeLadder(e,n,r=this.ZERO){let o=e;for(;n>yt;)n&Ct&&(r=r.add(o)),o=o.double(),n>>=Ct;return r}precomputeWindow(e,n){const{windows:r,windowSize:o}=It(n,this.bits),s=[];let i=e,a=i;for(let l=0;l<r;l++){a=i,s.push(a);for(let c=1;c<o;c++)a=a.add(i),s.push(a);i=a.double()}return s}wNAF(e,n,r){if(!this.Fn.isValid(r))throw new Error("invalid scalar");let o=this.ZERO,s=this.BASE;const i=It(e,this.bits);for(let a=0;a<i.windows;a++){const{nextN:l,offset:c,isZero:d,isNeg:u,isNegF:w,offsetF:h}=ln(r,a,i);r=l,d?s=s.add(an(w,n[h])):o=o.add(an(u,n[c]))}return un(r),{p:o,f:s}}wNAFUnsafe(e,n,r,o=this.ZERO){const s=It(e,this.bits);for(let i=0;i<s.windows&&r!==yt;i++){const{nextN:a,offset:l,isZero:c,isNeg:d}=ln(r,i,s);if(r=a,!c){const u=n[l];o=o.add(d?u.negate():u)}}return un(r),o}getPrecomputes(e,n,r){let o=St.get(n);return o||(o=this.precomputeWindow(n,e),e!==1&&(typeof r=="function"&&(o=r(o)),St.set(n,o))),o}cached(e,n,r){const o=_t(e);return this.wNAF(o,this.getPrecomputes(o,e,r),n)}unsafe(e,n,r,o){const s=_t(e);return s===1?this._unsafeLadder(e,n,o):this.wNAFUnsafe(s,this.getPrecomputes(s,e,r),n,o)}createCache(e,n){Vn(n,this.bits),Xn.set(e,n),St.delete(e)}hasCache(e){return _t(e)!==1}}function fn(t,e,n){if(e){if(e.ORDER!==t)throw new Error("Field.ORDER must match order: Fp == p, Fn == n");return Xr(e),e}else return Zt(t,{isLE:n})}function Jr(t,e,n={},r){if(r===void 0&&(r=t==="edwards"),!e||typeof e!="object")throw new Error(`expected valid ${t} CURVE object`);for(const l of["p","n","h"]){const c=e[l];if(!(typeof c=="bigint"&&c>yt))throw new Error(`CURVE.${l} must be positive bigint`)}const o=fn(e.p,n.Fp,r),s=fn(e.n,n.Fn,r),a=["Gx","Gy","a","d"];for(const l of a)if(!o.isValid(e[l]))throw new Error(`CURVE.${l} must be valid field element of CURVE.Fp`);return e=Object.freeze(Object.assign({},e)),{CURVE:e,Fp:o,Fn:s}}function eo(t,e){return function(r){const o=t(r);return{secretKey:o,publicKey:e(o)}}}const _e=BigInt(0),re=BigInt(1),Rt=BigInt(2),to=BigInt(8);function no(t,e,n,r){const o=t.sqr(n),s=t.sqr(r),i=t.add(t.mul(e.a,o),s),a=t.add(t.ONE,t.mul(e.d,t.mul(o,s)));return t.eql(i,a)}function ro(t,e={}){const n=e,r=Jr("edwards",t,n,n.FpFnLE),{Fp:o,Fn:s}=r;let i=r.CURVE;const{h:a}=i;Ht(n,{},{uvRatio:"function"});const l=Rt<<BigInt(s.BYTES*8)-re,c=I=>o.create(I),d=n.uvRatio===void 0?(I,p)=>{try{return{isValid:!0,value:o.sqrt(o.div(I,p))}}catch{return{isValid:!1,value:_e}}}:n.uvRatio;if(!no(o,i,i.Gx,i.Gy))throw new Error("bad curve params: generator point");function u(I,p,y=!1){const b=y?re:_e;return wt("coordinate "+I,p,b,l),p}function w(I){if(!(I instanceof h))throw new Error("EdwardsPoint expected")}class h{static BASE=new h(i.Gx,i.Gy,re,c(i.Gx*i.Gy));static ZERO=new h(_e,re,re,_e);static Fp=o;static Fn=s;X;Y;Z;T;constructor(p,y,b,B){this.X=u("x",p),this.Y=u("y",y),this.Z=u("z",b,!0),this.T=u("t",B),Object.freeze(this)}static CURVE(){return i}static fromAffine(p){if(p instanceof h)throw new Error("extended point not allowed");const{x:y,y:b}=p||{};return u("x",y),u("y",b),new h(y,b,re,c(y*b))}static fromBytes(p,y=!1){const b=o.BYTES,{a:B,d:k}=i;p=We(Re(p,b,"point")),Un(y,"zip215");const T=We(p),M=p[b-1];T[b-1]=M&-129;const _=Ge(T),q=y?l:o.ORDER;wt("point.y",_,_e,q);const O=c(_*_),C=c(O-re),D=c(k*O-B);let{isValid:Q,value:Z}=d(C,D);if(!Q)throw new Error("bad point: invalid y coordinate");const E=(Z&re)===re,v=(M&128)!==0;if(!y&&Z===_e&&v)throw new Error("bad point: x=0 and x_0=1");return v!==E&&(Z=c(-Z)),h.fromAffine({x:Z,y:_})}static fromHex(p,y=!1){return h.fromBytes(Ur(p),y)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}precompute(p=8,y=!0){return x.createCache(this,p),y||this.multiply(Rt),this}assertValidity(){const p=this,{a:y,d:b}=i;if(p.is0())throw new Error("bad point: ZERO");const{X:B,Y:k,Z:T,T:M}=p,_=c(B*B),q=c(k*k),O=c(T*T),C=c(O*O),D=c(_*y),Q=c(O*c(D+q)),Z=c(C+c(b*c(_*q)));if(Q!==Z)throw new Error("bad point: equation left != right (1)");const E=c(B*k),v=c(T*M);if(E!==v)throw new Error("bad point: equation left != right (2)")}equals(p){w(p);const{X:y,Y:b,Z:B}=this,{X:k,Y:T,Z:M}=p,_=c(y*M),q=c(k*B),O=c(b*M),C=c(T*B);return _===q&&O===C}is0(){return this.equals(h.ZERO)}negate(){return new h(c(-this.X),this.Y,this.Z,c(-this.T))}double(){const{a:p}=i,{X:y,Y:b,Z:B}=this,k=c(y*y),T=c(b*b),M=c(Rt*c(B*B)),_=c(p*k),q=y+b,O=c(c(q*q)-k-T),C=_+T,D=C-M,Q=_-T,Z=c(O*D),E=c(C*Q),v=c(O*Q),U=c(D*C);return new h(Z,E,U,v)}add(p){w(p);const{a:y,d:b}=i,{X:B,Y:k,Z:T,T:M}=this,{X:_,Y:q,Z:O,T:C}=p,D=c(B*_),Q=c(k*q),Z=c(M*b*C),E=c(T*O),v=c((B+k)*(_+q)-D-Q),U=E-Z,j=E+Z,Y=c(Q-y*D),G=c(v*U),P=c(j*Y),X=c(v*Y),te=c(U*j);return new h(G,P,te,X)}subtract(p){return w(p),this.add(p.negate())}multiply(p){if(!s.isValidNot0(p))throw new RangeError("invalid scalar: expected 1 <= sc < curve.n");const{p:y,f:b}=x.cached(this,p,B=>xt(h,B));return xt(h,[y,b])[0]}multiplyUnsafe(p){if(!s.isValid(p))throw new RangeError("invalid scalar: expected 0 <= sc < curve.n");return p===_e?h.ZERO:this.is0()||p===re?this:x.unsafe(this,p,y=>xt(h,y))}isSmallOrder(){return this.clearCofactor().is0()}isTorsionFree(){return x.unsafe(this,i.n).is0()}toAffine(p){const y=this;let b=p;const{X:B,Y:k,Z:T}=y,M=y.is0();b==null&&(b=M?to:o.inv(T));const _=c(B*b),q=c(k*b),O=o.mul(T,b);if(M)return{x:_e,y:re};if(O!==re)throw new Error("invZ was invalid");return{x:_,y:q}}clearCofactor(){return a===re?this:this.multiplyUnsafe(a)}toBytes(){const{x:p,y}=this.toAffine(),b=o.toBytes(y);return b[b.length-1]|=p&re?128:0,b}toHex(){return Cn(this.toBytes())}toString(){return`<Point ${this.is0()?"ZERO":this.toHex()}>`}}const x=new Qr(h,s.BITS);return s.BITS>=8&&h.BASE.precompute(8),Object.freeze(h.prototype),Object.freeze(h),h}class oo{static BASE;static ZERO;static Fp;static Fn;ep;constructor(e){this.ep=e}static fromBytes(e){rn()}static fromHex(e){rn()}get x(){return this.toAffine().x}get y(){return this.toAffine().y}clearCofactor(){return this}assertValidity(){this.ep.assertValidity()}toAffine(e){return this.ep.toAffine(e)}toHex(){return Cn(this.toBytes())}toString(){return this.toHex()}isTorsionFree(){return!0}isSmallOrder(){return!1}add(e){return this.assertSame(e),this.init(this.ep.add(e.ep))}subtract(e){return this.assertSame(e),this.init(this.ep.subtract(e.ep))}multiply(e){return this.init(this.ep.multiply(e))}multiplyUnsafe(e){return this.init(this.ep.multiplyUnsafe(e))}double(){return this.init(this.ep.double())}negate(){return this.init(this.ep.negate())}precompute(e,n){return this.ep.precompute(e,n),this}}const ze=BigInt(0),Ne=BigInt(1),rt=BigInt(2);function so(t){return Ht(t,{P:"bigint",type:"string",adjustScalarBytes:"function",powPminus2:"function"},{randomBytes:"function"}),Object.freeze({...t})}function io(t){const e=so(t),{P:n,type:r,adjustScalarBytes:o,powPminus2:s,randomBytes:i}=e,a=r==="x25519";if(!a&&r!=="x448")throw new Error("invalid type");const l=i===void 0?$r:i,c=a?255:448,d=a?32:56,u=BigInt(a?9:5),w=BigInt(a?121665:39081),h=a?rt**BigInt(254):rt**BigInt(447),x=a?BigInt(8)*rt**BigInt(251)-Ne:BigInt(4)*rt**BigInt(445)-Ne,I=h+x+Ne,p=E=>z(E,n),y=b(u);function b(E){return Mn(p(E),d)}function B(E){const v=We(Re(E,d,"uCoordinate"));return a&&(v[31]&=127),p(Ge(v))}function k(E){return Ge(o(We(Re(E,d,"scalar"))))}function T(E,v){const U=C(B(v),k(E));if(U===ze)throw new Error("invalid private or public key received");return b(U)}function M(E){return T(E,y)}const _=M,q=T;function O(E,v,U){const j=p(E*(v-U));return v=p(v-j),U=p(U+j),{x_2:v,x_3:U}}function C(E,v){wt("u",E,ze,n),wt("scalar",v,h,I);const U=v,j=E;let Y=Ne,G=ze,P=E,X=Ne,te=ze;for(let he=BigInt(c-1);he>=ze;he--){const Ee=U>>he&Ne;te^=Ee,{x_2:Y,x_3:P}=O(te,Y,P),{x_2:G,x_3:X}=O(te,G,X),te=Ee;const ge=Y+G,ve=p(ge*ge),xe=Y-G,A=p(xe*xe),F=ve-A,fe=P+X,Et=P-X,je=p(Et*ge),Ue=p(fe*xe),Oe=je+Ue,et=je-Ue;P=p(Oe*Oe),X=p(j*p(et*et)),Y=p(ve*A),G=p(F*(ve+p(w*F)))}({x_2:Y,x_3:P}=O(te,Y,P)),{x_2:G,x_3:X}=O(te,G,X);const Be=s(G);return p(Y*Be)}const D={secretKey:d,publicKey:d,seed:d},Q=E=>(E=E===void 0?l(d):E,Re(E,D.seed,"seed"),E),Z={randomSecretKey:Q};return Object.freeze(D),Object.freeze(Z),Object.freeze({keygen:eo(Q,_),getSharedSecret:q,getPublicKey:_,scalarMult:T,scalarMultBase:M,utils:Z,GuBytes:y.slice(),lengths:D})}const co=BigInt(0),Ve=BigInt(1),dn=BigInt(2),ao=BigInt(3),lo=BigInt(5),uo=BigInt(8),Fe=BigInt("0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffed"),Gn={p:Fe,n:BigInt("0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3ed"),h:uo,a:BigInt("0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec"),d:BigInt("0x52036cee2b6ffe738cc740797779e89800700a4d4141d8ab75eb4dca135978a3"),Gx:BigInt("0x216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a"),Gy:BigInt("0x6666666666666666666666666666666666666666666666666666666666666658")};function Wn(t){const e=BigInt(10),n=BigInt(20),r=BigInt(40),o=BigInt(80),s=Fe,a=t*t%s*t%s,l=le(a,dn,s)*a%s,c=le(l,Ve,s)*t%s,d=le(c,lo,s)*c%s,u=le(d,e,s)*d%s,w=le(u,n,s)*u%s,h=le(w,r,s)*w%s,x=le(h,o,s)*h%s,I=le(x,o,s)*h%s,p=le(I,e,s)*d%s;return{pow_p_5_8:le(p,dn,s)*t%s,b2:a}}function fo(t){return t[0]&=248,t[31]&=127,t[31]|=64,t}const Ut=BigInt("19681161376707505956807079304988542015446066515923890162744021073123829784752");function Qn(t,e){const n=Fe,r=z(e*e*e,n),o=z(r*r*e,n),s=Wn(t*o).pow_p_5_8;let i=z(t*r*s,n);const a=z(e*i*i,n),l=i,c=z(i*Ut,n),d=a===t,u=a===z(-t,n),w=a===z(-t*Ut,n);return d&&(i=l),(u||w)&&(i=c),Te(i,n)&&(i=z(-i,n)),{isValid:d||u,value:i}}const Pe=ro(Gn,{uvRatio:Qn}),qe=Pe.Fp,po=Pe.Fn,$t=(()=>{const t=Fe;return io({P:t,type:"x25519",powPminus2:e=>{const{pow_p_5_8:n,b2:r}=Wn(e);return z(le(n,ao,t)*r,t)},adjustScalarBytes:fo})})(),pn=Ut,ho=BigInt("54469307008909316920995813868745141605393597292927456921205312896311721017578"),hn=t=>Qn(Ve,t),go=BigInt("0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"),mo=t=>qe.create(Ge(t)&go);class ce extends oo{static BASE=new ce(Pe.BASE);static ZERO=new ce(Pe.ZERO);static Fp=qe;static Fn=po;constructor(e){super(e)}static fromAffine(e){return new ce(Pe.fromAffine(e))}assertSame(e){if(!(e instanceof ce))throw new Error("RistrettoPoint expected")}init(e){return new ce(e)}static fromBytes(e){be(e,32);const{a:n,d:r}=Gn,o=Fe,s=k=>qe.create(k),i=mo(e);if(!Pr(qe.toBytes(i),e)||Te(i,o))throw new Error("invalid ristretto255 encoding 1");const a=s(i*i),l=s(Ve+n*a),c=s(Ve-n*a),d=s(l*l),u=s(c*c),w=s(n*r*d-u),{isValid:h,value:x}=hn(s(w*u)),I=s(x*c),p=s(x*I*w);let y=s((i+i)*I);Te(y,o)&&(y=s(-y));const b=s(l*p),B=s(y*b);if(!h||Te(B,o)||b===co)throw new Error("invalid ristretto255 encoding 2");return new ce(new Pe(y,b,Ve,B))}static fromHex(e){return ce.fromBytes(jt(e))}toBytes(){let{X:e,Y:n,Z:r,T:o}=this.ep;const s=Fe,i=p=>qe.create(p),a=i(i(r+n)*i(r-n)),l=i(e*n),c=i(l*l),{value:d}=hn(i(a*c)),u=i(d*a),w=i(d*l),h=i(u*w*o);let x;if(Te(o*h,s)){let p=i(n*pn),y=i(e*pn);e=p,n=y,x=i(u*ho)}else x=w;Te(e*h,s)&&(n=i(-n));let I=i((r-n)*x);return Te(I,s)&&(I=i(-I)),qe.toBytes(I)}equals(e){this.assertSame(e);const{X:n,Y:r}=this.ep,{X:o,Y:s}=e.ep,i=c=>qe.create(c),a=i(n*s)===i(r*o),l=i(r*s)===i(n*o);return a||l}is0(){return this.equals(ce.ZERO)}}Object.freeze(ce.BASE);Object.freeze(ce.ZERO);Object.freeze(ce.prototype);Object.freeze(ce);class gn{oHash;iHash;blockLen;outputLen;canXOF=!1;finished=!1;destroyed=!1;constructor(e,n){if(Dt(e),be(n,void 0,"key"),this.iHash=e.create(),typeof this.iHash.update!="function")throw new Error("Expected instance of class which extends utils.Hash");this.blockLen=this.iHash.blockLen,this.outputLen=this.iHash.outputLen;const r=this.blockLen,o=new Uint8Array(r);o.set(n.length>r?e.create().update(n).digest():n);for(let s=0;s<o.length;s++)o[s]^=54;this.iHash.update(o),this.oHash=e.create();for(let s=0;s<o.length;s++)o[s]^=106;this.oHash.update(o),Xe(o)}update(e){return gt(this),this.iHash.update(e),this}digestInto(e){gt(this),Tn(e,this),this.finished=!0;const n=e.subarray(0,this.outputLen);this.iHash.digestInto(n),this.oHash.update(n),this.oHash.digestInto(n),this.destroy()}digest(){const e=new Uint8Array(this.oHash.outputLen);return this.digestInto(e),e}_cloneInto(e){e||=Object.create(Object.getPrototypeOf(this),{});const{oHash:n,iHash:r,finished:o,destroyed:s,blockLen:i,outputLen:a}=this;return e=e,e.finished=o,e.destroyed=s,e.blockLen=i,e.outputLen=a,e.oHash=n._cloneInto(e.oHash),e.iHash=r._cloneInto(e.iHash),e}clone(){return this._cloneInto()}destroy(){this.destroyed=!0,this.oHash.destroy(),this.iHash.destroy()}}const Jn=(()=>{const t=((e,n,r)=>new gn(e,n).update(r).digest());return t.create=(e,n)=>new gn(e,n),t})();function wo(t,e,n){return Dt(t),n===void 0&&(n=new Uint8Array(t.outputLen)),Jn(t,n,e)}const At=Uint8Array.of(0),mn=Uint8Array.of();function yo(t,e,n,r=32){Dt(t),De(r,"length"),be(e,void 0,"prk");const o=t.outputLen;if(e.length<o)throw new Error('"prk" must be at least HashLen octets');if(r>255*o)throw new Error("Length must be <= 255*HashLen");const s=Math.ceil(r/o);n===void 0?n=mn:be(n,void 0,"info");const i=new Uint8Array(s*o),a=Jn.create(t,e),l=a._cloneInto(),c=new Uint8Array(a.outputLen);for(let d=0;d<s;d++)At[0]=d+1,l.update(d===0?mn:c).update(n).update(At).digestInto(c),i.set(c,o*d),a._cloneInto(l);return a.destroy(),l.destroy(),Xe(c,At),i.slice(0,r)}const bo=(t,e,n,r,o)=>yo(t,wo(t,e,n),r,o);function Eo(t){return t instanceof Uint8Array||ArrayBuffer.isView(t)&&t.constructor.name==="Uint8Array"&&"BYTES_PER_ELEMENT"in t&&t.BYTES_PER_ELEMENT===1}function wn(t){if(typeof t!="number")throw new TypeError("number expected, got "+typeof t);if(!Number.isSafeInteger(t)||t<0)throw new RangeError("positive integer expected, got "+t)}function oe(t,e,n=""){const r=Eo(t),o=t?.length,s=e!==void 0;if(!r||s&&o!==e){const i=n&&`"${n}" `,a=s?` of length ${e}`:"",l=r?`length=${o}`:`type=${typeof t}`,c=i+"expected Uint8Array"+a+", got "+l;throw r?new RangeError(c):new TypeError(c)}return t}function yn(t,e=!0){if(t.destroyed)throw new Error("Hash instance has been destroyed");if(e&&t.finished)throw new Error("Hash#digest() has already been called")}function vo(t,e,n=!1){oe(t,void 0,"output");const r=e.outputLen;if(t.length<r)throw new RangeError("digestInto() expects output buffer of length at least "+r);if(n&&!Qe(t))throw new Error("invalid output, must be aligned")}function xo(t){return new Uint8Array(t.buffer,t.byteOffset,t.byteLength)}function Ce(t){return new Uint32Array(t.buffer,t.byteOffset,Math.floor(t.byteLength/4))}function Ae(...t){for(let e=0;e<t.length;e++)t[e].fill(0)}function bt(t){return new DataView(t.buffer,t.byteOffset,t.byteLength)}const Kt=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68,er=t=>t<<24&4278190080|t<<8&16711680|t>>>8&65280|t>>>24&255,K=Kt?t=>t:t=>er(t)>>>0,Io=t=>{for(let e=0;e<t.length;e++)t[e]=er(t[e]);return t},Yt=Kt?t=>t:Io;function So(t,e){if(t.length!==e.length)return!1;let n=0;for(let r=0;r<t.length;r++)n|=t[r]^e[r];return n===0}function _o(t,e,n){const r=e,o=n||(()=>[]),s=(a,l)=>r(l,...o(a)).update(a).digest(),i=r(new Uint8Array(t),...o(new Uint8Array(0)));return s.outputLen=i.outputLen,s.blockLen=i.blockLen,s.create=(a,...l)=>r(a,...l),s}const Ro=(t,e)=>{function n(r,...o){if(oe(r,void 0,"key"),t.nonceLength!==void 0){const d=o[0];oe(d,t.varSizeNonce?void 0:t.nonceLength,"nonce")}const s=t.tagLength;s&&o[1]!==void 0&&oe(o[1],void 0,"AAD");const i=e(r,...o),a=(d,u)=>{if(u!==void 0){if(d!==2)throw new Error("cipher output not supported");oe(u,void 0,"output")}};let l=!1;return{encrypt(d,u){if(l)throw new Error("cannot encrypt() twice with same key + nonce");return l=!0,oe(d),a(i.encrypt.length,u),i.encrypt(d,u)},decrypt(d,u){if(oe(d),s&&d.length<s)throw new Error('"ciphertext" expected length bigger than tagLength='+s);return a(i.decrypt.length,u),i.decrypt(d,u)}}}return Object.assign(n,t),n};function Ao(t,e,n=!0){if(e===void 0)return new Uint8Array(t);if(oe(e,void 0,"output"),e.length!==t)throw new Error('"output" expected Uint8Array of length '+t+", got: "+e.length);if(n&&!Qe(e))throw new Error("invalid output, must be aligned");return e}function Bo(t,e,n){wn(t),wn(e);const r=new Uint8Array(16),o=bt(r);return o.setBigUint64(0,BigInt(e),n),o.setBigUint64(8,BigInt(t),n),r}function Qe(t){return t.byteOffset%4===0}function Je(t){return Uint8Array.from(oe(t))}const Me=16,tr=new Uint8Array(16),Ze=Ce(tr),Oo=225,ko=(t,e,n,r)=>{const o=r&1;return{s3:n<<31|r>>>1,s2:e<<31|n>>>1,s1:t<<31|e>>>1,s0:t>>>1^Oo<<24&-(o&1)}},ot=t=>(t>>>0&255)<<24|(t>>>8&255)<<16|(t>>>16&255)<<8|t>>>24&255|0,To=t=>t>64*1024?8:t>1024?4:2;class qo{blockLen=Me;outputLen=Me;s0=0;s1=0;s2=0;s3=0;finished=!1;destroyed=!1;t;W;windowSize;constructor(e,n){oe(e,16,"key"),e=Je(e);const r=bt(e);let o=r.getUint32(0,!1),s=r.getUint32(4,!1),i=r.getUint32(8,!1),a=r.getUint32(12,!1);const l=[];for(let x=0;x<128;x++)l.push({s0:ot(o),s1:ot(s),s2:ot(i),s3:ot(a)}),{s0:o,s1:s,s2:i,s3:a}=ko(o,s,i,a);const c=To(n||1024);if(![1,2,4,8].includes(c))throw new Error("ghash: invalid window size, expected 2, 4 or 8");this.W=c;const u=128/c,w=this.windowSize=2**c,h=[];for(let x=0;x<u;x++)for(let I=0;I<w;I++){let p=0,y=0,b=0,B=0;for(let k=0;k<c;k++){if(!(I>>>c-k-1&1))continue;const{s0:M,s1:_,s2:q,s3:O}=l[c*x+k];p^=M,y^=_,b^=q,B^=O}h.push({s0:p,s1:y,s2:b,s3:B})}this.t=h}_updateBlock(e,n,r,o){e^=this.s0,n^=this.s1,r^=this.s2,o^=this.s3;const{W:s,t:i,windowSize:a}=this;let l=0,c=0,d=0,u=0;const w=(1<<s)-1;let h=0;for(const x of[e,n,r,o])for(let I=0;I<4;I++){const p=x>>>8*I&255;for(let y=8/s-1;y>=0;y--){const b=p>>>s*y&w,{s0:B,s1:k,s2:T,s3:M}=i[h*a+b];l^=B,c^=k,d^=T,u^=M,h+=1}}this.s0=l,this.s1=c,this.s2=d,this.s3=u}update(e){yn(this),oe(e),e=Je(e);const n=Ce(e),r=Math.floor(e.length/Me),o=e.length%Me;for(let s=0;s<r;s++)this._updateBlock(K(n[s*4+0]),K(n[s*4+1]),K(n[s*4+2]),K(n[s*4+3]));return o&&(tr.set(e.subarray(r*Me)),this._updateBlock(K(Ze[0]),K(Ze[1]),K(Ze[2]),K(Ze[3])),Ae(Ze)),this}destroy(){this.destroyed=!0;const{t:e}=this;for(const n of e)n.s0=0,n.s1=0,n.s2=0,n.s3=0}digestInto(e){yn(this),vo(e,this,!0),this.finished=!0;const{s0:n,s1:r,s2:o,s3:s}=this,i=Ce(e);i[0]=n,i[1]=r,i[2]=o,i[3]=s,Yt(i)}digest(){const e=new Uint8Array(Me);return this.digestInto(e),this.destroy(),e}}const bn=_o(16,(t,e)=>new qo(t,e),t=>[t.length]),Nt=16,Lo=4,st=new Uint8Array(Nt),Co=283;function Uo(t){if(![16,24,32].includes(t.length))throw new Error('"aes key" expected Uint8Array of length 16/24/32, got length='+t.length)}function Vt(t){return t<<1^Co&-(t>>7)}function En(t,e){let n=0;for(;e>0;e>>=1)n^=t&-(e&1),t=Vt(t);return n}const $o=(()=>{const t=new Uint8Array(256);for(let n=0,r=1;n<256;n++,r^=Vt(r))t[n]=r;const e=new Uint8Array(256);e[0]=99;for(let n=0;n<255;n++){let r=t[255-n];r|=r<<8,e[t[n]]=(r^r>>4^r>>5^r>>6^r>>7^99)&255}return Ae(t),e})(),No=t=>t<<24|t>>>8,Bt=t=>t<<8|t>>>24;function Mo(t,e){if(t.length!==256)throw new Error("Wrong sbox length");const n=new Uint32Array(256).map((c,d)=>e(t[d])),r=n.map(Bt),o=r.map(Bt),s=o.map(Bt),i=new Uint32Array(256*256),a=new Uint32Array(256*256),l=new Uint16Array(256*256);for(let c=0;c<256;c++)for(let d=0;d<256;d++){const u=c*256+d;i[u]=n[c]^r[d],a[u]=o[c]^s[d],l[u]=t[c]<<8|t[d]}return{sbox:t,sbox2:l,T0:n,T1:r,T2:o,T3:s,T01:i,T23:a}}const nr=Mo($o,t=>En(t,3)<<24|t<<16|t<<8|En(t,2)),Po=(()=>{const t=new Uint8Array(16);for(let e=0,n=1;e<16;e++,n=Vt(n))t[e]=n;return t})();function Do(t){oe(t);const e=t.length;Uo(t);const{sbox2:n}=nr,r=[];(!Kt||!Qe(t))&&r.push(t=Je(t));const o=Yt(Ce(t)),s=o.length,i=l=>Ke(n,l,l,l,l),a=new Uint32Array(e+28);a.set(o);for(let l=s;l<a.length;l++){let c=a[l-1];l%s===0?c=i(No(c))^Po[l/s-1]:s>6&&l%s===4&&(c=i(c)),a[l]=a[l-s]^c}return Ae(...r),a}function it(t,e,n,r,o,s){return t[n<<8&65280|r>>>8&255]^e[o>>>8&65280|s>>>24&255]}function Ke(t,e,n,r,o){return t[e&255|n&65280]|t[r>>>16&255|o>>>16&65280]<<16}function vn(t,e,n,r,o){const{sbox2:s,T01:i,T23:a}=nr;let l=0;e^=t[l++],n^=t[l++],r^=t[l++],o^=t[l++];const c=t.length/4-2;for(let x=0;x<c;x++){const I=t[l++]^it(i,a,e,n,r,o),p=t[l++]^it(i,a,n,r,o,e),y=t[l++]^it(i,a,r,o,e,n),b=t[l++]^it(i,a,o,e,n,r);e=I,n=p,r=y,o=b}const d=t[l++]^Ke(s,e,n,r,o),u=t[l++]^Ke(s,n,r,o,e),w=t[l++]^Ke(s,r,o,e,n),h=t[l++]^Ke(s,o,e,n,r);return{s0:d,s1:u,s2:w,s3:h}}function ct(t,e,n,r,o){oe(n,Nt,"nonce"),oe(r),o=Ao(r.length,o);const s=n,i=Ce(s),a=bt(s),l=Ce(r),c=Ce(o),d=e?0:12,u=r.length;let w=a.getUint32(d,e),{s0:h,s1:x,s2:I,s3:p}=vn(t,K(i[0]),K(i[1]),K(i[2]),K(i[3]));for(let b=0;b+4<=l.length;b+=4)c[b+0]=l[b+0]^K(h),c[b+1]=l[b+1]^K(x),c[b+2]=l[b+2]^K(I),c[b+3]=l[b+3]^K(p),w=w+1>>>0,a.setUint32(d,w,e),{s0:h,s1:x,s2:I,s3:p}=vn(t,K(i[0]),K(i[1]),K(i[2]),K(i[3]));const y=Nt*Math.floor(l.length/Lo);if(y<u){const b=new Uint32Array([h,x,I,p]);Yt(b);const B=xo(b);for(let k=y,T=0;k<u;k++,T++)o[k]=r[k]^B[T];Ae(b)}return o}function Fo(t,e,n,r,o){const s=o?o.length:0,i=t.create(n,r.length+s);o&&i.update(o);const a=Bo(8*r.length,8*s,e);i.update(r),i.update(a);const l=i.digest();return Ae(a),l}const xn=Ro({blockSize:16,nonceLength:12,tagLength:16,varSizeNonce:!0},function(e,n,r){if(n.length<8)throw new Error("aes/gcm: invalid nonce length");const o=16;function s(a,l,c){const d=Fo(bn,!1,a,c,r);for(let u=0;u<l.length;u++)d[u]^=l[u];return d}function i(){const a=Do(e),l=st.slice(),c=st.slice();if(ct(a,!1,c,c,l),n.length===12)c.set(n);else{const u=st.slice();bt(u).setBigUint64(8,BigInt(n.length*8),!1);const h=bn.create(l).update(n).update(u);h.digestInto(c),h.destroy()}const d=ct(a,!1,c,st);return{xk:a,authKey:l,counter:c,tagMask:d}}return{encrypt(a){const{xk:l,authKey:c,counter:d,tagMask:u}=i(),w=new Uint8Array(a.length+o),h=[l,c,d,u];Qe(a)||h.push(a=Je(a)),ct(l,!1,d,a,w.subarray(0,a.length));const x=s(c,u,w.subarray(0,w.length-o));return h.push(x),w.set(x,a.length),Ae(...h),w},decrypt(a){const{xk:l,authKey:c,counter:d,tagMask:u}=i(),w=[l,c,u,d];Qe(a)||w.push(a=Je(a));const h=a.subarray(0,-o),x=a.subarray(-o),I=s(c,u,h);if(w.push(I),!So(I,x))throw Ae(...w),new Error("aes/gcm: invalid ghash tag");const p=ct(l,!1,d,h);return Ae(...w),p}}}),rr="chainlesschain.remote-session.e2ee.v1",In="chainlesschain://remote-session/pair#",Ot=32,jo=new TextEncoder,or=new TextDecoder;function pt(t){return jo.encode(t)}function at(t){let e="";for(const n of t)e+=String.fromCharCode(n);return btoa(e).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function Ye(t){const e=String(t).replace(/-/g,"+").replace(/_/g,"/"),n=atob(e),r=new Uint8Array(n.length);for(let o=0;o<n.length;o+=1)r[o]=n.charCodeAt(o);return r}function Ho(t){const e=new Uint8Array(t);return globalThis.crypto.getRandomValues(e),e}function zo(){const t=$t.utils;return t.randomSecretKey?t.randomSecretKey():t.randomPrivateKey()}function Sn(t,e,n){return pt(`${rr}
1
+ import{E as wr,r as ue,o as yr,a7 as br,M as we,R as $e,c as L,N as R,u as ne,Q as se,S as ae,K as ie,f as nt,L as H,O as V,P as de,F as Qt,Y as Jt,a4 as Er}from"./vendor-BXcBOG8b.js";import{Q as vr}from"./QrScannerModal-DZILESCa.js";import{aC as xr,ay as Ir}from"./icons-DlxlFL4g.js";import"./markdown-DUKxbhE4.js";import"./index-Cs66y4oC.js";function Sr(t){return t instanceof Uint8Array||ArrayBuffer.isView(t)&&t.constructor.name==="Uint8Array"&&"BYTES_PER_ELEMENT"in t&&t.BYTES_PER_ELEMENT===1}function De(t,e=""){if(typeof t!="number"){const n=e&&`"${e}" `;throw new TypeError(`${n}expected number, got ${typeof t}`)}if(!Number.isSafeInteger(t)||t<0){const n=e&&`"${e}" `;throw new RangeError(`${n}expected integer >= 0, got ${t}`)}}function be(t,e,n=""){const r=Sr(t),o=t?.length,s=e!==void 0;if(!r||s&&o!==e){const i=n&&`"${n}" `,a=s?` of length ${e}`:"",l=r?`length=${o}`:`type=${typeof t}`,c=i+"expected Uint8Array"+a+", got "+l;throw r?new RangeError(c):new TypeError(c)}return t}function Dt(t){if(typeof t!="function"||typeof t.create!="function")throw new TypeError("Hash must wrapped by utils.createHasher");if(De(t.outputLen),De(t.blockLen),t.outputLen<1)throw new Error('"outputLen" must be >= 1');if(t.blockLen<1)throw new Error('"blockLen" must be >= 1')}function gt(t,e=!0){if(t.destroyed)throw new Error("Hash instance has been destroyed");if(e&&t.finished)throw new Error("Hash#digest() has already been called")}function Tn(t,e){be(t,void 0,"digestInto() output");const n=e.outputLen;if(t.length<n)throw new RangeError('"digestInto() output" expected to be of length >='+n)}function Xe(...t){for(let e=0;e<t.length;e++)t[e].fill(0)}function vt(t){return new DataView(t.buffer,t.byteOffset,t.byteLength)}function pe(t,e){return t<<32-e|t>>>e}const qn=typeof Uint8Array.from([]).toHex=="function"&&typeof Uint8Array.fromHex=="function",_r=Array.from({length:256},(t,e)=>e.toString(16).padStart(2,"0"));function Ft(t){if(be(t),qn)return t.toHex();let e="";for(let n=0;n<t.length;n++)e+=_r[t[n]];return e}const ye={_0:48,_9:57,A:65,F:70,a:97,f:102};function en(t){if(t>=ye._0&&t<=ye._9)return t-ye._0;if(t>=ye.A&&t<=ye.F)return t-(ye.A-10);if(t>=ye.a&&t<=ye.f)return t-(ye.a-10)}function jt(t){if(typeof t!="string")throw new TypeError("hex string expected, got "+typeof t);if(qn)try{return Uint8Array.fromHex(t)}catch(o){throw o instanceof SyntaxError?new RangeError(o.message):o}const e=t.length,n=e/2;if(e%2)throw new RangeError("hex string expected, got unpadded hex of length "+e);const r=new Uint8Array(n);for(let o=0,s=0;o<n;o++,s+=2){const i=en(t.charCodeAt(s)),a=en(t.charCodeAt(s+1));if(i===void 0||a===void 0){const l=t[s]+t[s+1];throw new RangeError('hex string expected, got non-hex character "'+l+'" at index '+s)}r[o]=i*16+a}return r}function Rr(t,e={}){const n=(o,s)=>t(s).update(o).digest(),r=t(void 0);return n.outputLen=r.outputLen,n.blockLen=r.blockLen,n.canXOF=r.canXOF,n.create=o=>t(o),Object.assign(n,e),Object.freeze(n)}function Ar(t=32){De(t,"bytesLength");const e=typeof globalThis=="object"?globalThis.crypto:null;if(typeof e?.getRandomValues!="function")throw new Error("crypto.getRandomValues must be defined");if(t>65536)throw new RangeError(`"bytesLength" expected <= 65536, got ${t}`);return e.getRandomValues(new Uint8Array(t))}const Br=t=>({oid:Uint8Array.from([6,9,96,134,72,1,101,3,4,2,t])});function Or(t,e,n){return t&e^~t&n}function kr(t,e,n){return t&e^t&n^e&n}class Tr{blockLen;outputLen;canXOF=!1;padOffset;isLE;buffer;view;finished=!1;length=0;pos=0;destroyed=!1;constructor(e,n,r,o){this.blockLen=e,this.outputLen=n,this.padOffset=r,this.isLE=o,this.buffer=new Uint8Array(e),this.view=vt(this.buffer)}update(e){gt(this),be(e);const{view:n,buffer:r,blockLen:o}=this,s=e.length;for(let i=0;i<s;){const a=Math.min(o-this.pos,s-i);if(a===o){const l=vt(e);for(;o<=s-i;i+=o)this.process(l,i);continue}r.set(e.subarray(i,i+a),this.pos),this.pos+=a,i+=a,this.pos===o&&(this.process(n,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){gt(this),Tn(e,this),this.finished=!0;const{buffer:n,view:r,blockLen:o,isLE:s}=this;let{pos:i}=this;n[i++]=128,Xe(this.buffer.subarray(i)),this.padOffset>o-i&&(this.process(r,0),i=0);for(let u=i;u<o;u++)n[u]=0;r.setBigUint64(o-8,BigInt(this.length*8),s),this.process(r,0);const a=vt(e),l=this.outputLen;if(l%4)throw new Error("_sha2: outputLen must be aligned to 32bit");const c=l/4,d=this.get();if(c>d.length)throw new Error("_sha2: outputLen bigger than state");for(let u=0;u<c;u++)a.setUint32(4*u,d[u],s)}digest(){const{buffer:e,outputLen:n}=this;this.digestInto(e);const r=e.slice(0,n);return this.destroy(),r}_cloneInto(e){e||=new this.constructor,e.set(...this.get());const{blockLen:n,buffer:r,length:o,finished:s,destroyed:i,pos:a}=this;return e.destroyed=i,e.finished=s,e.length=o,e.pos=a,o%n&&e.buffer.set(r),e}clone(){return this._cloneInto()}}const Ie=Uint32Array.from([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),qr=Uint32Array.from([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),Se=new Uint32Array(64);class Lr extends Tr{constructor(e){super(64,e,8,!1)}get(){const{A:e,B:n,C:r,D:o,E:s,F:i,G:a,H:l}=this;return[e,n,r,o,s,i,a,l]}set(e,n,r,o,s,i,a,l){this.A=e|0,this.B=n|0,this.C=r|0,this.D=o|0,this.E=s|0,this.F=i|0,this.G=a|0,this.H=l|0}process(e,n){for(let u=0;u<16;u++,n+=4)Se[u]=e.getUint32(n,!1);for(let u=16;u<64;u++){const w=Se[u-15],h=Se[u-2],x=pe(w,7)^pe(w,18)^w>>>3,I=pe(h,17)^pe(h,19)^h>>>10;Se[u]=I+Se[u-7]+x+Se[u-16]|0}let{A:r,B:o,C:s,D:i,E:a,F:l,G:c,H:d}=this;for(let u=0;u<64;u++){const w=pe(a,6)^pe(a,11)^pe(a,25),h=d+w+Or(a,l,c)+qr[u]+Se[u]|0,I=(pe(r,2)^pe(r,13)^pe(r,22))+kr(r,o,s)|0;d=c,c=l,l=a,a=i+h|0,i=s,s=o,o=r,r=h+I|0}r=r+this.A|0,o=o+this.B|0,s=s+this.C|0,i=i+this.D|0,a=a+this.E|0,l=l+this.F|0,c=c+this.G|0,d=d+this.H|0,this.set(r,o,s,i,a,l,c,d)}roundClean(){Xe(Se)}destroy(){this.destroyed=!0,this.set(0,0,0,0,0,0,0,0),Xe(this.buffer)}}class Cr extends Lr{A=Ie[0]|0;B=Ie[1]|0;C=Ie[2]|0;D=Ie[3]|0;E=Ie[4]|0;F=Ie[5]|0;G=Ie[6]|0;H=Ie[7]|0;constructor(){super(32)}}const tn=Rr(()=>new Cr,Br(1));const Re=(t,e,n)=>be(t,e,n),Ln=De,Cn=Ft,Ur=t=>jt(t),$r=t=>Ar(t),mt=BigInt(0),Lt=BigInt(1);function Un(t,e=""){if(typeof t!="boolean"){const n=e&&`"${e}" `;throw new TypeError(n+"expected boolean, got type="+typeof t)}return t}function Nr(t){if(typeof t=="bigint"){if(!dt(t))throw new RangeError("positive bigint expected, got "+t)}else Ln(t);return t}function nn(t,e=""){if(typeof t!="number"){const n=e&&`"${e}" `;throw new TypeError(n+"expected number, got type="+typeof t)}if(!Number.isSafeInteger(t)){const n=e&&`"${e}" `;throw new RangeError(n+"expected safe integer, got "+t)}}function $n(t){if(typeof t!="string")throw new TypeError("hex string expected, got "+typeof t);return t===""?mt:BigInt("0x"+t)}function Mr(t){return $n(Ft(t))}function Ge(t){return $n(Ft(We(be(t)).reverse()))}function Nn(t,e){if(De(e),e===0)throw new RangeError("zero length");t=Nr(t);const n=t.toString(16);if(n.length>e*2)throw new RangeError("number too large");return jt(n.padStart(e*2,"0"))}function Mn(t,e){return Nn(t,e).reverse()}function Pr(t,e){if(t=Re(t),e=Re(e),t.length!==e.length)return!1;let n=0;for(let r=0;r<t.length;r++)n|=t[r]^e[r];return n===0}function We(t){return Uint8Array.from(Re(t))}const dt=t=>typeof t=="bigint"&&mt<=t;function Dr(t,e,n){return dt(t)&&dt(e)&&dt(n)&&e<=t&&t<n}function wt(t,e,n,r){if(!Dr(e,n,r))throw new RangeError("expected valid "+t+": "+n+" <= n < "+r+", got "+e)}function Fr(t){if(t<mt)throw new Error("expected non-negative bigint, got "+t);let e;for(e=0;t>mt;t>>=Lt,e+=1);return e}const jr=t=>(Lt<<BigInt(t))-Lt;function Ht(t,e={},n={}){if(Object.prototype.toString.call(t)!=="[object Object]")throw new TypeError("expected valid options object");function r(s,i,a){if(!a&&i!=="function"&&!Object.hasOwn(t,s))throw new TypeError(`param "${s}" is invalid: expected own property`);const l=t[s];if(a&&l===void 0)return;const c=typeof l;if(c!==i||l===null)throw new TypeError(`param "${s}" is invalid: expected ${i}, got ${c}`)}const o=(s,i)=>Object.entries(s).forEach(([a,l])=>r(a,l,i));o(e,!1),o(n,!0)}const rn=()=>{throw new Error("not implemented")};const ee=BigInt(0),W=BigInt(1),Le=BigInt(2),Pn=BigInt(3),Dn=BigInt(4),Fn=BigInt(5),Hr=BigInt(7),jn=BigInt(8),zr=BigInt(9),Hn=BigInt(16);function z(t,e){if(e<=ee)throw new Error("mod: expected positive modulus, got "+e);const n=t%e;return n>=ee?n:e+n}function le(t,e,n){if(e<ee)throw new Error("pow2: expected non-negative exponent, got "+e);let r=t;for(;e-- >ee;)r*=r,r%=n;return r}function on(t,e){if(t===ee)throw new Error("invert: expected non-zero number");if(e<=ee)throw new Error("invert: expected positive modulus, got "+e);let n=z(t,e),r=e,o=ee,s=W;for(;n!==ee;){const a=r/n,l=r-n*a,c=o-s*a;r=n,n=l,o=s,s=c}if(r!==W)throw new Error("invert: does not exist");return z(o,e)}function zt(t,e,n){const r=t;if(!r.eql(r.sqr(e),n))throw new Error("Cannot find square root")}function zn(t,e){const n=t,r=(n.ORDER+W)/Dn,o=n.pow(e,r);return zt(n,o,e),o}function Zr(t,e){const n=t,r=(n.ORDER-Fn)/jn,o=n.mul(e,Le),s=n.pow(o,r),i=n.mul(e,s),a=n.mul(n.mul(i,Le),s),l=n.mul(i,n.sub(a,n.ONE));return zt(n,l,e),l}function Kr(t){const e=Zt(t),n=Zn(t),r=n(e,e.neg(e.ONE)),o=n(e,r),s=n(e,e.neg(r)),i=(t+Hr)/Hn;return((a,l)=>{const c=a;let d=c.pow(l,i),u=c.mul(d,r);const w=c.mul(d,o),h=c.mul(d,s),x=c.eql(c.sqr(u),l),I=c.eql(c.sqr(w),l);d=c.cmov(d,u,x),u=c.cmov(h,w,I);const p=c.eql(c.sqr(u),l),y=c.cmov(d,u,p);return zt(c,y,l),y})}function Zn(t){if(t<Pn)throw new Error("sqrt is not defined for small field");let e=t-W,n=0;for(;e%Le===ee;)e/=Le,n++;let r=Le;const o=Zt(t);for(;sn(o,r)===1;)if(r++>1e3)throw new Error("Cannot find square root: probably non-prime P");if(n===1)return zn;let s=o.pow(r,e);const i=(e+W)/Le;return function(l,c){const d=l;if(d.is0(c))return c;if(sn(d,c)!==1)throw new Error("Cannot find square root");let u=n,w=d.mul(d.ONE,s),h=d.pow(c,e),x=d.pow(c,i);for(;!d.eql(h,d.ONE);){if(d.is0(h))return d.ZERO;let I=1,p=d.sqr(h);for(;!d.eql(p,d.ONE);)if(I++,p=d.sqr(p),I===u)throw new Error("Cannot find square root");const y=W<<BigInt(u-I-1),b=d.pow(w,y);u=I,w=d.sqr(b),h=d.mul(h,w),x=d.mul(x,b)}return x}}function Yr(t){return t%Dn===Pn?zn:t%jn===Fn?Zr:t%Hn===zr?Kr(t):Zn(t)}const Te=(t,e)=>(z(t,e)&W)===W,Vr=["create","isValid","is0","neg","inv","sqrt","sqr","eql","add","sub","mul","pow","div","addN","subN","mulN","sqrN"];function Xr(t){const e={ORDER:"bigint",BYTES:"number",BITS:"number"},n=Vr.reduce((r,o)=>(r[o]="function",r),e);if(Ht(t,n),nn(t.BYTES,"BYTES"),nn(t.BITS,"BITS"),t.BYTES<1||t.BITS<1)throw new Error("invalid field: expected BYTES/BITS > 0");if(t.ORDER<=W)throw new Error("invalid field: expected ORDER > 1, got "+t.ORDER);return t}function Gr(t,e,n){const r=t;if(n<ee)throw new Error("invalid exponent, negatives unsupported");if(n===ee)return r.ONE;if(n===W)return e;let o=r.ONE,s=e;for(;n>ee;)n&W&&(o=r.mul(o,s)),s=r.sqr(s),n>>=W;return o}function Kn(t,e,n=!1){const r=t,o=new Array(e.length).fill(n?r.ZERO:void 0),s=e.reduce((a,l,c)=>r.is0(l)?a:(o[c]=a,r.mul(a,l)),r.ONE),i=r.inv(s);return e.reduceRight((a,l,c)=>r.is0(l)?a:(o[c]=r.mul(a,o[c]),r.mul(a,l)),i),o}function sn(t,e){const n=t,r=(n.ORDER-W)/Le,o=n.pow(e,r),s=n.eql(o,n.ONE),i=n.eql(o,n.ZERO),a=n.eql(o,n.neg(n.ONE));if(!s&&!i&&!a)throw new Error("invalid Legendre symbol result");return s?1:i?0:-1}function Wr(t,e){if(e!==void 0&&Ln(e),t<=ee)throw new Error("invalid n length: expected positive n, got "+t);if(e!==void 0&&e<1)throw new Error("invalid n length: expected positive bit length, got "+e);const n=Fr(t);if(e!==void 0&&e<n)throw new Error(`invalid n length: expected bit length (${n}) >= n.length (${e})`);const r=e!==void 0?e:n,o=Math.ceil(r/8);return{nBitLength:r,nByteLength:o}}const cn=new WeakMap;class Yn{ORDER;BITS;BYTES;isLE;ZERO=ee;ONE=W;_lengths;_mod;constructor(e,n={}){if(e<=W)throw new Error("invalid field: expected ORDER > 1, got "+e);let r;this.isLE=!1,n!=null&&typeof n=="object"&&(typeof n.BITS=="number"&&(r=n.BITS),typeof n.sqrt=="function"&&Object.defineProperty(this,"sqrt",{value:n.sqrt,enumerable:!0}),typeof n.isLE=="boolean"&&(this.isLE=n.isLE),n.allowedLengths&&(this._lengths=Object.freeze(n.allowedLengths.slice())),typeof n.modFromBytes=="boolean"&&(this._mod=n.modFromBytes));const{nBitLength:o,nByteLength:s}=Wr(e,r);if(s>2048)throw new Error("invalid field: expected ORDER of <= 2048 bytes");this.ORDER=e,this.BITS=o,this.BYTES=s,Object.freeze(this)}create(e){return z(e,this.ORDER)}isValid(e){if(typeof e!="bigint")throw new TypeError("invalid field element: expected bigint, got "+typeof e);return ee<=e&&e<this.ORDER}is0(e){return e===ee}isValidNot0(e){return!this.is0(e)&&this.isValid(e)}isOdd(e){return(e&W)===W}neg(e){return z(-e,this.ORDER)}eql(e,n){return e===n}sqr(e){return z(e*e,this.ORDER)}add(e,n){return z(e+n,this.ORDER)}sub(e,n){return z(e-n,this.ORDER)}mul(e,n){return z(e*n,this.ORDER)}pow(e,n){return Gr(this,e,n)}div(e,n){return z(e*on(n,this.ORDER),this.ORDER)}sqrN(e){return e*e}addN(e,n){return e+n}subN(e,n){return e-n}mulN(e,n){return e*n}inv(e){return on(e,this.ORDER)}sqrt(e){let n=cn.get(this);return n||cn.set(this,n=Yr(this.ORDER)),n(this,e)}toBytes(e){return this.isLE?Mn(e,this.BYTES):Nn(e,this.BYTES)}fromBytes(e,n=!1){Re(e);const{_lengths:r,BYTES:o,isLE:s,ORDER:i,_mod:a}=this;if(r){if(e.length<1||!r.includes(e.length)||e.length>o)throw new Error("Field.fromBytes: expected "+r+" bytes, got "+e.length);const c=new Uint8Array(o);c.set(e,s?0:c.length-e.length),e=c}if(e.length!==o)throw new Error("Field.fromBytes: expected "+o+" bytes, got "+e.length);let l=s?Ge(e):Mr(e);if(a&&(l=z(l,i)),!n&&!this.isValid(l))throw new Error("invalid field element: outside of range 0..ORDER");return l}invertBatch(e){return Kn(this,e)}cmov(e,n,r){return Un(r,"condition"),r?n:e}}Object.freeze(Yn.prototype);function Zt(t,e={}){return new Yn(t,e)}const yt=BigInt(0),Ct=BigInt(1);function an(t,e){const n=e.negate();return t?n:e}function xt(t,e){const n=Kn(t.Fp,e.map(r=>r.Z));return e.map((r,o)=>t.fromAffine(r.toAffine(n[o])))}function Vn(t,e){if(!Number.isSafeInteger(t)||t<=0||t>e)throw new Error("invalid window size, expected [1.."+e+"], got W="+t)}function It(t,e){Vn(t,e);const n=Math.ceil(e/t)+1,r=2**(t-1),o=2**t,s=jr(t),i=BigInt(t);return{windows:n,windowSize:r,mask:s,maxNumber:o,shiftBy:i}}function ln(t,e,n){const{windowSize:r,mask:o,maxNumber:s,shiftBy:i}=n;let a=Number(t&o),l=t>>i;a>r&&(a-=s,l+=Ct);const c=e*r,d=c+Math.abs(a)-1,u=a===0,w=a<0,h=e%2!==0;return{nextN:l,offset:d,isZero:u,isNeg:w,isNegF:h,offsetF:c}}const St=new WeakMap,Xn=new WeakMap;function _t(t){return Xn.get(t)||1}function un(t){if(t!==yt)throw new Error("invalid wNAF")}class Qr{BASE;ZERO;Fn;bits;constructor(e,n){this.BASE=e.BASE,this.ZERO=e.ZERO,this.Fn=e.Fn,this.bits=n}_unsafeLadder(e,n,r=this.ZERO){let o=e;for(;n>yt;)n&Ct&&(r=r.add(o)),o=o.double(),n>>=Ct;return r}precomputeWindow(e,n){const{windows:r,windowSize:o}=It(n,this.bits),s=[];let i=e,a=i;for(let l=0;l<r;l++){a=i,s.push(a);for(let c=1;c<o;c++)a=a.add(i),s.push(a);i=a.double()}return s}wNAF(e,n,r){if(!this.Fn.isValid(r))throw new Error("invalid scalar");let o=this.ZERO,s=this.BASE;const i=It(e,this.bits);for(let a=0;a<i.windows;a++){const{nextN:l,offset:c,isZero:d,isNeg:u,isNegF:w,offsetF:h}=ln(r,a,i);r=l,d?s=s.add(an(w,n[h])):o=o.add(an(u,n[c]))}return un(r),{p:o,f:s}}wNAFUnsafe(e,n,r,o=this.ZERO){const s=It(e,this.bits);for(let i=0;i<s.windows&&r!==yt;i++){const{nextN:a,offset:l,isZero:c,isNeg:d}=ln(r,i,s);if(r=a,!c){const u=n[l];o=o.add(d?u.negate():u)}}return un(r),o}getPrecomputes(e,n,r){let o=St.get(n);return o||(o=this.precomputeWindow(n,e),e!==1&&(typeof r=="function"&&(o=r(o)),St.set(n,o))),o}cached(e,n,r){const o=_t(e);return this.wNAF(o,this.getPrecomputes(o,e,r),n)}unsafe(e,n,r,o){const s=_t(e);return s===1?this._unsafeLadder(e,n,o):this.wNAFUnsafe(s,this.getPrecomputes(s,e,r),n,o)}createCache(e,n){Vn(n,this.bits),Xn.set(e,n),St.delete(e)}hasCache(e){return _t(e)!==1}}function fn(t,e,n){if(e){if(e.ORDER!==t)throw new Error("Field.ORDER must match order: Fp == p, Fn == n");return Xr(e),e}else return Zt(t,{isLE:n})}function Jr(t,e,n={},r){if(r===void 0&&(r=t==="edwards"),!e||typeof e!="object")throw new Error(`expected valid ${t} CURVE object`);for(const l of["p","n","h"]){const c=e[l];if(!(typeof c=="bigint"&&c>yt))throw new Error(`CURVE.${l} must be positive bigint`)}const o=fn(e.p,n.Fp,r),s=fn(e.n,n.Fn,r),a=["Gx","Gy","a","d"];for(const l of a)if(!o.isValid(e[l]))throw new Error(`CURVE.${l} must be valid field element of CURVE.Fp`);return e=Object.freeze(Object.assign({},e)),{CURVE:e,Fp:o,Fn:s}}function eo(t,e){return function(r){const o=t(r);return{secretKey:o,publicKey:e(o)}}}const _e=BigInt(0),re=BigInt(1),Rt=BigInt(2),to=BigInt(8);function no(t,e,n,r){const o=t.sqr(n),s=t.sqr(r),i=t.add(t.mul(e.a,o),s),a=t.add(t.ONE,t.mul(e.d,t.mul(o,s)));return t.eql(i,a)}function ro(t,e={}){const n=e,r=Jr("edwards",t,n,n.FpFnLE),{Fp:o,Fn:s}=r;let i=r.CURVE;const{h:a}=i;Ht(n,{},{uvRatio:"function"});const l=Rt<<BigInt(s.BYTES*8)-re,c=I=>o.create(I),d=n.uvRatio===void 0?(I,p)=>{try{return{isValid:!0,value:o.sqrt(o.div(I,p))}}catch{return{isValid:!1,value:_e}}}:n.uvRatio;if(!no(o,i,i.Gx,i.Gy))throw new Error("bad curve params: generator point");function u(I,p,y=!1){const b=y?re:_e;return wt("coordinate "+I,p,b,l),p}function w(I){if(!(I instanceof h))throw new Error("EdwardsPoint expected")}class h{static BASE=new h(i.Gx,i.Gy,re,c(i.Gx*i.Gy));static ZERO=new h(_e,re,re,_e);static Fp=o;static Fn=s;X;Y;Z;T;constructor(p,y,b,B){this.X=u("x",p),this.Y=u("y",y),this.Z=u("z",b,!0),this.T=u("t",B),Object.freeze(this)}static CURVE(){return i}static fromAffine(p){if(p instanceof h)throw new Error("extended point not allowed");const{x:y,y:b}=p||{};return u("x",y),u("y",b),new h(y,b,re,c(y*b))}static fromBytes(p,y=!1){const b=o.BYTES,{a:B,d:k}=i;p=We(Re(p,b,"point")),Un(y,"zip215");const T=We(p),M=p[b-1];T[b-1]=M&-129;const _=Ge(T),q=y?l:o.ORDER;wt("point.y",_,_e,q);const O=c(_*_),C=c(O-re),D=c(k*O-B);let{isValid:Q,value:Z}=d(C,D);if(!Q)throw new Error("bad point: invalid y coordinate");const E=(Z&re)===re,v=(M&128)!==0;if(!y&&Z===_e&&v)throw new Error("bad point: x=0 and x_0=1");return v!==E&&(Z=c(-Z)),h.fromAffine({x:Z,y:_})}static fromHex(p,y=!1){return h.fromBytes(Ur(p),y)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}precompute(p=8,y=!0){return x.createCache(this,p),y||this.multiply(Rt),this}assertValidity(){const p=this,{a:y,d:b}=i;if(p.is0())throw new Error("bad point: ZERO");const{X:B,Y:k,Z:T,T:M}=p,_=c(B*B),q=c(k*k),O=c(T*T),C=c(O*O),D=c(_*y),Q=c(O*c(D+q)),Z=c(C+c(b*c(_*q)));if(Q!==Z)throw new Error("bad point: equation left != right (1)");const E=c(B*k),v=c(T*M);if(E!==v)throw new Error("bad point: equation left != right (2)")}equals(p){w(p);const{X:y,Y:b,Z:B}=this,{X:k,Y:T,Z:M}=p,_=c(y*M),q=c(k*B),O=c(b*M),C=c(T*B);return _===q&&O===C}is0(){return this.equals(h.ZERO)}negate(){return new h(c(-this.X),this.Y,this.Z,c(-this.T))}double(){const{a:p}=i,{X:y,Y:b,Z:B}=this,k=c(y*y),T=c(b*b),M=c(Rt*c(B*B)),_=c(p*k),q=y+b,O=c(c(q*q)-k-T),C=_+T,D=C-M,Q=_-T,Z=c(O*D),E=c(C*Q),v=c(O*Q),U=c(D*C);return new h(Z,E,U,v)}add(p){w(p);const{a:y,d:b}=i,{X:B,Y:k,Z:T,T:M}=this,{X:_,Y:q,Z:O,T:C}=p,D=c(B*_),Q=c(k*q),Z=c(M*b*C),E=c(T*O),v=c((B+k)*(_+q)-D-Q),U=E-Z,j=E+Z,Y=c(Q-y*D),G=c(v*U),P=c(j*Y),X=c(v*Y),te=c(U*j);return new h(G,P,te,X)}subtract(p){return w(p),this.add(p.negate())}multiply(p){if(!s.isValidNot0(p))throw new RangeError("invalid scalar: expected 1 <= sc < curve.n");const{p:y,f:b}=x.cached(this,p,B=>xt(h,B));return xt(h,[y,b])[0]}multiplyUnsafe(p){if(!s.isValid(p))throw new RangeError("invalid scalar: expected 0 <= sc < curve.n");return p===_e?h.ZERO:this.is0()||p===re?this:x.unsafe(this,p,y=>xt(h,y))}isSmallOrder(){return this.clearCofactor().is0()}isTorsionFree(){return x.unsafe(this,i.n).is0()}toAffine(p){const y=this;let b=p;const{X:B,Y:k,Z:T}=y,M=y.is0();b==null&&(b=M?to:o.inv(T));const _=c(B*b),q=c(k*b),O=o.mul(T,b);if(M)return{x:_e,y:re};if(O!==re)throw new Error("invZ was invalid");return{x:_,y:q}}clearCofactor(){return a===re?this:this.multiplyUnsafe(a)}toBytes(){const{x:p,y}=this.toAffine(),b=o.toBytes(y);return b[b.length-1]|=p&re?128:0,b}toHex(){return Cn(this.toBytes())}toString(){return`<Point ${this.is0()?"ZERO":this.toHex()}>`}}const x=new Qr(h,s.BITS);return s.BITS>=8&&h.BASE.precompute(8),Object.freeze(h.prototype),Object.freeze(h),h}class oo{static BASE;static ZERO;static Fp;static Fn;ep;constructor(e){this.ep=e}static fromBytes(e){rn()}static fromHex(e){rn()}get x(){return this.toAffine().x}get y(){return this.toAffine().y}clearCofactor(){return this}assertValidity(){this.ep.assertValidity()}toAffine(e){return this.ep.toAffine(e)}toHex(){return Cn(this.toBytes())}toString(){return this.toHex()}isTorsionFree(){return!0}isSmallOrder(){return!1}add(e){return this.assertSame(e),this.init(this.ep.add(e.ep))}subtract(e){return this.assertSame(e),this.init(this.ep.subtract(e.ep))}multiply(e){return this.init(this.ep.multiply(e))}multiplyUnsafe(e){return this.init(this.ep.multiplyUnsafe(e))}double(){return this.init(this.ep.double())}negate(){return this.init(this.ep.negate())}precompute(e,n){return this.ep.precompute(e,n),this}}const ze=BigInt(0),Ne=BigInt(1),rt=BigInt(2);function so(t){return Ht(t,{P:"bigint",type:"string",adjustScalarBytes:"function",powPminus2:"function"},{randomBytes:"function"}),Object.freeze({...t})}function io(t){const e=so(t),{P:n,type:r,adjustScalarBytes:o,powPminus2:s,randomBytes:i}=e,a=r==="x25519";if(!a&&r!=="x448")throw new Error("invalid type");const l=i===void 0?$r:i,c=a?255:448,d=a?32:56,u=BigInt(a?9:5),w=BigInt(a?121665:39081),h=a?rt**BigInt(254):rt**BigInt(447),x=a?BigInt(8)*rt**BigInt(251)-Ne:BigInt(4)*rt**BigInt(445)-Ne,I=h+x+Ne,p=E=>z(E,n),y=b(u);function b(E){return Mn(p(E),d)}function B(E){const v=We(Re(E,d,"uCoordinate"));return a&&(v[31]&=127),p(Ge(v))}function k(E){return Ge(o(We(Re(E,d,"scalar"))))}function T(E,v){const U=C(B(v),k(E));if(U===ze)throw new Error("invalid private or public key received");return b(U)}function M(E){return T(E,y)}const _=M,q=T;function O(E,v,U){const j=p(E*(v-U));return v=p(v-j),U=p(U+j),{x_2:v,x_3:U}}function C(E,v){wt("u",E,ze,n),wt("scalar",v,h,I);const U=v,j=E;let Y=Ne,G=ze,P=E,X=Ne,te=ze;for(let he=BigInt(c-1);he>=ze;he--){const Ee=U>>he&Ne;te^=Ee,{x_2:Y,x_3:P}=O(te,Y,P),{x_2:G,x_3:X}=O(te,G,X),te=Ee;const ge=Y+G,ve=p(ge*ge),xe=Y-G,A=p(xe*xe),F=ve-A,fe=P+X,Et=P-X,je=p(Et*ge),Ue=p(fe*xe),Oe=je+Ue,et=je-Ue;P=p(Oe*Oe),X=p(j*p(et*et)),Y=p(ve*A),G=p(F*(ve+p(w*F)))}({x_2:Y,x_3:P}=O(te,Y,P)),{x_2:G,x_3:X}=O(te,G,X);const Be=s(G);return p(Y*Be)}const D={secretKey:d,publicKey:d,seed:d},Q=E=>(E=E===void 0?l(d):E,Re(E,D.seed,"seed"),E),Z={randomSecretKey:Q};return Object.freeze(D),Object.freeze(Z),Object.freeze({keygen:eo(Q,_),getSharedSecret:q,getPublicKey:_,scalarMult:T,scalarMultBase:M,utils:Z,GuBytes:y.slice(),lengths:D})}const co=BigInt(0),Ve=BigInt(1),dn=BigInt(2),ao=BigInt(3),lo=BigInt(5),uo=BigInt(8),Fe=BigInt("0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffed"),Gn={p:Fe,n:BigInt("0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3ed"),h:uo,a:BigInt("0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec"),d:BigInt("0x52036cee2b6ffe738cc740797779e89800700a4d4141d8ab75eb4dca135978a3"),Gx:BigInt("0x216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a"),Gy:BigInt("0x6666666666666666666666666666666666666666666666666666666666666658")};function Wn(t){const e=BigInt(10),n=BigInt(20),r=BigInt(40),o=BigInt(80),s=Fe,a=t*t%s*t%s,l=le(a,dn,s)*a%s,c=le(l,Ve,s)*t%s,d=le(c,lo,s)*c%s,u=le(d,e,s)*d%s,w=le(u,n,s)*u%s,h=le(w,r,s)*w%s,x=le(h,o,s)*h%s,I=le(x,o,s)*h%s,p=le(I,e,s)*d%s;return{pow_p_5_8:le(p,dn,s)*t%s,b2:a}}function fo(t){return t[0]&=248,t[31]&=127,t[31]|=64,t}const Ut=BigInt("19681161376707505956807079304988542015446066515923890162744021073123829784752");function Qn(t,e){const n=Fe,r=z(e*e*e,n),o=z(r*r*e,n),s=Wn(t*o).pow_p_5_8;let i=z(t*r*s,n);const a=z(e*i*i,n),l=i,c=z(i*Ut,n),d=a===t,u=a===z(-t,n),w=a===z(-t*Ut,n);return d&&(i=l),(u||w)&&(i=c),Te(i,n)&&(i=z(-i,n)),{isValid:d||u,value:i}}const Pe=ro(Gn,{uvRatio:Qn}),qe=Pe.Fp,po=Pe.Fn,$t=(()=>{const t=Fe;return io({P:t,type:"x25519",powPminus2:e=>{const{pow_p_5_8:n,b2:r}=Wn(e);return z(le(n,ao,t)*r,t)},adjustScalarBytes:fo})})(),pn=Ut,ho=BigInt("54469307008909316920995813868745141605393597292927456921205312896311721017578"),hn=t=>Qn(Ve,t),go=BigInt("0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"),mo=t=>qe.create(Ge(t)&go);class ce extends oo{static BASE=new ce(Pe.BASE);static ZERO=new ce(Pe.ZERO);static Fp=qe;static Fn=po;constructor(e){super(e)}static fromAffine(e){return new ce(Pe.fromAffine(e))}assertSame(e){if(!(e instanceof ce))throw new Error("RistrettoPoint expected")}init(e){return new ce(e)}static fromBytes(e){be(e,32);const{a:n,d:r}=Gn,o=Fe,s=k=>qe.create(k),i=mo(e);if(!Pr(qe.toBytes(i),e)||Te(i,o))throw new Error("invalid ristretto255 encoding 1");const a=s(i*i),l=s(Ve+n*a),c=s(Ve-n*a),d=s(l*l),u=s(c*c),w=s(n*r*d-u),{isValid:h,value:x}=hn(s(w*u)),I=s(x*c),p=s(x*I*w);let y=s((i+i)*I);Te(y,o)&&(y=s(-y));const b=s(l*p),B=s(y*b);if(!h||Te(B,o)||b===co)throw new Error("invalid ristretto255 encoding 2");return new ce(new Pe(y,b,Ve,B))}static fromHex(e){return ce.fromBytes(jt(e))}toBytes(){let{X:e,Y:n,Z:r,T:o}=this.ep;const s=Fe,i=p=>qe.create(p),a=i(i(r+n)*i(r-n)),l=i(e*n),c=i(l*l),{value:d}=hn(i(a*c)),u=i(d*a),w=i(d*l),h=i(u*w*o);let x;if(Te(o*h,s)){let p=i(n*pn),y=i(e*pn);e=p,n=y,x=i(u*ho)}else x=w;Te(e*h,s)&&(n=i(-n));let I=i((r-n)*x);return Te(I,s)&&(I=i(-I)),qe.toBytes(I)}equals(e){this.assertSame(e);const{X:n,Y:r}=this.ep,{X:o,Y:s}=e.ep,i=c=>qe.create(c),a=i(n*s)===i(r*o),l=i(r*s)===i(n*o);return a||l}is0(){return this.equals(ce.ZERO)}}Object.freeze(ce.BASE);Object.freeze(ce.ZERO);Object.freeze(ce.prototype);Object.freeze(ce);class gn{oHash;iHash;blockLen;outputLen;canXOF=!1;finished=!1;destroyed=!1;constructor(e,n){if(Dt(e),be(n,void 0,"key"),this.iHash=e.create(),typeof this.iHash.update!="function")throw new Error("Expected instance of class which extends utils.Hash");this.blockLen=this.iHash.blockLen,this.outputLen=this.iHash.outputLen;const r=this.blockLen,o=new Uint8Array(r);o.set(n.length>r?e.create().update(n).digest():n);for(let s=0;s<o.length;s++)o[s]^=54;this.iHash.update(o),this.oHash=e.create();for(let s=0;s<o.length;s++)o[s]^=106;this.oHash.update(o),Xe(o)}update(e){return gt(this),this.iHash.update(e),this}digestInto(e){gt(this),Tn(e,this),this.finished=!0;const n=e.subarray(0,this.outputLen);this.iHash.digestInto(n),this.oHash.update(n),this.oHash.digestInto(n),this.destroy()}digest(){const e=new Uint8Array(this.oHash.outputLen);return this.digestInto(e),e}_cloneInto(e){e||=Object.create(Object.getPrototypeOf(this),{});const{oHash:n,iHash:r,finished:o,destroyed:s,blockLen:i,outputLen:a}=this;return e=e,e.finished=o,e.destroyed=s,e.blockLen=i,e.outputLen=a,e.oHash=n._cloneInto(e.oHash),e.iHash=r._cloneInto(e.iHash),e}clone(){return this._cloneInto()}destroy(){this.destroyed=!0,this.oHash.destroy(),this.iHash.destroy()}}const Jn=(()=>{const t=((e,n,r)=>new gn(e,n).update(r).digest());return t.create=(e,n)=>new gn(e,n),t})();function wo(t,e,n){return Dt(t),n===void 0&&(n=new Uint8Array(t.outputLen)),Jn(t,n,e)}const At=Uint8Array.of(0),mn=Uint8Array.of();function yo(t,e,n,r=32){Dt(t),De(r,"length"),be(e,void 0,"prk");const o=t.outputLen;if(e.length<o)throw new Error('"prk" must be at least HashLen octets');if(r>255*o)throw new Error("Length must be <= 255*HashLen");const s=Math.ceil(r/o);n===void 0?n=mn:be(n,void 0,"info");const i=new Uint8Array(s*o),a=Jn.create(t,e),l=a._cloneInto(),c=new Uint8Array(a.outputLen);for(let d=0;d<s;d++)At[0]=d+1,l.update(d===0?mn:c).update(n).update(At).digestInto(c),i.set(c,o*d),a._cloneInto(l);return a.destroy(),l.destroy(),Xe(c,At),i.slice(0,r)}const bo=(t,e,n,r,o)=>yo(t,wo(t,e,n),r,o);function Eo(t){return t instanceof Uint8Array||ArrayBuffer.isView(t)&&t.constructor.name==="Uint8Array"&&"BYTES_PER_ELEMENT"in t&&t.BYTES_PER_ELEMENT===1}function wn(t){if(typeof t!="number")throw new TypeError("number expected, got "+typeof t);if(!Number.isSafeInteger(t)||t<0)throw new RangeError("positive integer expected, got "+t)}function oe(t,e,n=""){const r=Eo(t),o=t?.length,s=e!==void 0;if(!r||s&&o!==e){const i=n&&`"${n}" `,a=s?` of length ${e}`:"",l=r?`length=${o}`:`type=${typeof t}`,c=i+"expected Uint8Array"+a+", got "+l;throw r?new RangeError(c):new TypeError(c)}return t}function yn(t,e=!0){if(t.destroyed)throw new Error("Hash instance has been destroyed");if(e&&t.finished)throw new Error("Hash#digest() has already been called")}function vo(t,e,n=!1){oe(t,void 0,"output");const r=e.outputLen;if(t.length<r)throw new RangeError("digestInto() expects output buffer of length at least "+r);if(n&&!Qe(t))throw new Error("invalid output, must be aligned")}function xo(t){return new Uint8Array(t.buffer,t.byteOffset,t.byteLength)}function Ce(t){return new Uint32Array(t.buffer,t.byteOffset,Math.floor(t.byteLength/4))}function Ae(...t){for(let e=0;e<t.length;e++)t[e].fill(0)}function bt(t){return new DataView(t.buffer,t.byteOffset,t.byteLength)}const Kt=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68,er=t=>t<<24&4278190080|t<<8&16711680|t>>>8&65280|t>>>24&255,K=Kt?t=>t:t=>er(t)>>>0,Io=t=>{for(let e=0;e<t.length;e++)t[e]=er(t[e]);return t},Yt=Kt?t=>t:Io;function So(t,e){if(t.length!==e.length)return!1;let n=0;for(let r=0;r<t.length;r++)n|=t[r]^e[r];return n===0}function _o(t,e,n){const r=e,o=n||(()=>[]),s=(a,l)=>r(l,...o(a)).update(a).digest(),i=r(new Uint8Array(t),...o(new Uint8Array(0)));return s.outputLen=i.outputLen,s.blockLen=i.blockLen,s.create=(a,...l)=>r(a,...l),s}const Ro=(t,e)=>{function n(r,...o){if(oe(r,void 0,"key"),t.nonceLength!==void 0){const d=o[0];oe(d,t.varSizeNonce?void 0:t.nonceLength,"nonce")}const s=t.tagLength;s&&o[1]!==void 0&&oe(o[1],void 0,"AAD");const i=e(r,...o),a=(d,u)=>{if(u!==void 0){if(d!==2)throw new Error("cipher output not supported");oe(u,void 0,"output")}};let l=!1;return{encrypt(d,u){if(l)throw new Error("cannot encrypt() twice with same key + nonce");return l=!0,oe(d),a(i.encrypt.length,u),i.encrypt(d,u)},decrypt(d,u){if(oe(d),s&&d.length<s)throw new Error('"ciphertext" expected length bigger than tagLength='+s);return a(i.decrypt.length,u),i.decrypt(d,u)}}}return Object.assign(n,t),n};function Ao(t,e,n=!0){if(e===void 0)return new Uint8Array(t);if(oe(e,void 0,"output"),e.length!==t)throw new Error('"output" expected Uint8Array of length '+t+", got: "+e.length);if(n&&!Qe(e))throw new Error("invalid output, must be aligned");return e}function Bo(t,e,n){wn(t),wn(e);const r=new Uint8Array(16),o=bt(r);return o.setBigUint64(0,BigInt(e),n),o.setBigUint64(8,BigInt(t),n),r}function Qe(t){return t.byteOffset%4===0}function Je(t){return Uint8Array.from(oe(t))}const Me=16,tr=new Uint8Array(16),Ze=Ce(tr),Oo=225,ko=(t,e,n,r)=>{const o=r&1;return{s3:n<<31|r>>>1,s2:e<<31|n>>>1,s1:t<<31|e>>>1,s0:t>>>1^Oo<<24&-(o&1)}},ot=t=>(t>>>0&255)<<24|(t>>>8&255)<<16|(t>>>16&255)<<8|t>>>24&255|0,To=t=>t>64*1024?8:t>1024?4:2;class qo{blockLen=Me;outputLen=Me;s0=0;s1=0;s2=0;s3=0;finished=!1;destroyed=!1;t;W;windowSize;constructor(e,n){oe(e,16,"key"),e=Je(e);const r=bt(e);let o=r.getUint32(0,!1),s=r.getUint32(4,!1),i=r.getUint32(8,!1),a=r.getUint32(12,!1);const l=[];for(let x=0;x<128;x++)l.push({s0:ot(o),s1:ot(s),s2:ot(i),s3:ot(a)}),{s0:o,s1:s,s2:i,s3:a}=ko(o,s,i,a);const c=To(n||1024);if(![1,2,4,8].includes(c))throw new Error("ghash: invalid window size, expected 2, 4 or 8");this.W=c;const u=128/c,w=this.windowSize=2**c,h=[];for(let x=0;x<u;x++)for(let I=0;I<w;I++){let p=0,y=0,b=0,B=0;for(let k=0;k<c;k++){if(!(I>>>c-k-1&1))continue;const{s0:M,s1:_,s2:q,s3:O}=l[c*x+k];p^=M,y^=_,b^=q,B^=O}h.push({s0:p,s1:y,s2:b,s3:B})}this.t=h}_updateBlock(e,n,r,o){e^=this.s0,n^=this.s1,r^=this.s2,o^=this.s3;const{W:s,t:i,windowSize:a}=this;let l=0,c=0,d=0,u=0;const w=(1<<s)-1;let h=0;for(const x of[e,n,r,o])for(let I=0;I<4;I++){const p=x>>>8*I&255;for(let y=8/s-1;y>=0;y--){const b=p>>>s*y&w,{s0:B,s1:k,s2:T,s3:M}=i[h*a+b];l^=B,c^=k,d^=T,u^=M,h+=1}}this.s0=l,this.s1=c,this.s2=d,this.s3=u}update(e){yn(this),oe(e),e=Je(e);const n=Ce(e),r=Math.floor(e.length/Me),o=e.length%Me;for(let s=0;s<r;s++)this._updateBlock(K(n[s*4+0]),K(n[s*4+1]),K(n[s*4+2]),K(n[s*4+3]));return o&&(tr.set(e.subarray(r*Me)),this._updateBlock(K(Ze[0]),K(Ze[1]),K(Ze[2]),K(Ze[3])),Ae(Ze)),this}destroy(){this.destroyed=!0;const{t:e}=this;for(const n of e)n.s0=0,n.s1=0,n.s2=0,n.s3=0}digestInto(e){yn(this),vo(e,this,!0),this.finished=!0;const{s0:n,s1:r,s2:o,s3:s}=this,i=Ce(e);i[0]=n,i[1]=r,i[2]=o,i[3]=s,Yt(i)}digest(){const e=new Uint8Array(Me);return this.digestInto(e),this.destroy(),e}}const bn=_o(16,(t,e)=>new qo(t,e),t=>[t.length]),Nt=16,Lo=4,st=new Uint8Array(Nt),Co=283;function Uo(t){if(![16,24,32].includes(t.length))throw new Error('"aes key" expected Uint8Array of length 16/24/32, got length='+t.length)}function Vt(t){return t<<1^Co&-(t>>7)}function En(t,e){let n=0;for(;e>0;e>>=1)n^=t&-(e&1),t=Vt(t);return n}const $o=(()=>{const t=new Uint8Array(256);for(let n=0,r=1;n<256;n++,r^=Vt(r))t[n]=r;const e=new Uint8Array(256);e[0]=99;for(let n=0;n<255;n++){let r=t[255-n];r|=r<<8,e[t[n]]=(r^r>>4^r>>5^r>>6^r>>7^99)&255}return Ae(t),e})(),No=t=>t<<24|t>>>8,Bt=t=>t<<8|t>>>24;function Mo(t,e){if(t.length!==256)throw new Error("Wrong sbox length");const n=new Uint32Array(256).map((c,d)=>e(t[d])),r=n.map(Bt),o=r.map(Bt),s=o.map(Bt),i=new Uint32Array(256*256),a=new Uint32Array(256*256),l=new Uint16Array(256*256);for(let c=0;c<256;c++)for(let d=0;d<256;d++){const u=c*256+d;i[u]=n[c]^r[d],a[u]=o[c]^s[d],l[u]=t[c]<<8|t[d]}return{sbox:t,sbox2:l,T0:n,T1:r,T2:o,T3:s,T01:i,T23:a}}const nr=Mo($o,t=>En(t,3)<<24|t<<16|t<<8|En(t,2)),Po=(()=>{const t=new Uint8Array(16);for(let e=0,n=1;e<16;e++,n=Vt(n))t[e]=n;return t})();function Do(t){oe(t);const e=t.length;Uo(t);const{sbox2:n}=nr,r=[];(!Kt||!Qe(t))&&r.push(t=Je(t));const o=Yt(Ce(t)),s=o.length,i=l=>Ke(n,l,l,l,l),a=new Uint32Array(e+28);a.set(o);for(let l=s;l<a.length;l++){let c=a[l-1];l%s===0?c=i(No(c))^Po[l/s-1]:s>6&&l%s===4&&(c=i(c)),a[l]=a[l-s]^c}return Ae(...r),a}function it(t,e,n,r,o,s){return t[n<<8&65280|r>>>8&255]^e[o>>>8&65280|s>>>24&255]}function Ke(t,e,n,r,o){return t[e&255|n&65280]|t[r>>>16&255|o>>>16&65280]<<16}function vn(t,e,n,r,o){const{sbox2:s,T01:i,T23:a}=nr;let l=0;e^=t[l++],n^=t[l++],r^=t[l++],o^=t[l++];const c=t.length/4-2;for(let x=0;x<c;x++){const I=t[l++]^it(i,a,e,n,r,o),p=t[l++]^it(i,a,n,r,o,e),y=t[l++]^it(i,a,r,o,e,n),b=t[l++]^it(i,a,o,e,n,r);e=I,n=p,r=y,o=b}const d=t[l++]^Ke(s,e,n,r,o),u=t[l++]^Ke(s,n,r,o,e),w=t[l++]^Ke(s,r,o,e,n),h=t[l++]^Ke(s,o,e,n,r);return{s0:d,s1:u,s2:w,s3:h}}function ct(t,e,n,r,o){oe(n,Nt,"nonce"),oe(r),o=Ao(r.length,o);const s=n,i=Ce(s),a=bt(s),l=Ce(r),c=Ce(o),d=e?0:12,u=r.length;let w=a.getUint32(d,e),{s0:h,s1:x,s2:I,s3:p}=vn(t,K(i[0]),K(i[1]),K(i[2]),K(i[3]));for(let b=0;b+4<=l.length;b+=4)c[b+0]=l[b+0]^K(h),c[b+1]=l[b+1]^K(x),c[b+2]=l[b+2]^K(I),c[b+3]=l[b+3]^K(p),w=w+1>>>0,a.setUint32(d,w,e),{s0:h,s1:x,s2:I,s3:p}=vn(t,K(i[0]),K(i[1]),K(i[2]),K(i[3]));const y=Nt*Math.floor(l.length/Lo);if(y<u){const b=new Uint32Array([h,x,I,p]);Yt(b);const B=xo(b);for(let k=y,T=0;k<u;k++,T++)o[k]=r[k]^B[T];Ae(b)}return o}function Fo(t,e,n,r,o){const s=o?o.length:0,i=t.create(n,r.length+s);o&&i.update(o);const a=Bo(8*r.length,8*s,e);i.update(r),i.update(a);const l=i.digest();return Ae(a),l}const xn=Ro({blockSize:16,nonceLength:12,tagLength:16,varSizeNonce:!0},function(e,n,r){if(n.length<8)throw new Error("aes/gcm: invalid nonce length");const o=16;function s(a,l,c){const d=Fo(bn,!1,a,c,r);for(let u=0;u<l.length;u++)d[u]^=l[u];return d}function i(){const a=Do(e),l=st.slice(),c=st.slice();if(ct(a,!1,c,c,l),n.length===12)c.set(n);else{const u=st.slice();bt(u).setBigUint64(8,BigInt(n.length*8),!1);const h=bn.create(l).update(n).update(u);h.digestInto(c),h.destroy()}const d=ct(a,!1,c,st);return{xk:a,authKey:l,counter:c,tagMask:d}}return{encrypt(a){const{xk:l,authKey:c,counter:d,tagMask:u}=i(),w=new Uint8Array(a.length+o),h=[l,c,d,u];Qe(a)||h.push(a=Je(a)),ct(l,!1,d,a,w.subarray(0,a.length));const x=s(c,u,w.subarray(0,w.length-o));return h.push(x),w.set(x,a.length),Ae(...h),w},decrypt(a){const{xk:l,authKey:c,counter:d,tagMask:u}=i(),w=[l,c,u,d];Qe(a)||w.push(a=Je(a));const h=a.subarray(0,-o),x=a.subarray(-o),I=s(c,u,h);if(w.push(I),!So(I,x))throw Ae(...w),new Error("aes/gcm: invalid ghash tag");const p=ct(l,!1,d,h);return Ae(...w),p}}}),rr="chainlesschain.remote-session.e2ee.v1",In="chainlesschain://remote-session/pair#",Ot=32,jo=new TextEncoder,or=new TextDecoder;function pt(t){return jo.encode(t)}function at(t){let e="";for(const n of t)e+=String.fromCharCode(n);return btoa(e).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function Ye(t){const e=String(t).replace(/-/g,"+").replace(/_/g,"/"),n=atob(e),r=new Uint8Array(n.length);for(let o=0;o<n.length;o+=1)r[o]=n.charCodeAt(o);return r}function Ho(t){const e=new Uint8Array(t);return globalThis.crypto.getRandomValues(e),e}function zo(){const t=$t.utils;return t.randomSecretKey?t.randomSecretKey():t.randomPrivateKey()}function Sn(t,e,n){return pt(`${rr}
2
2
  ${t}
3
3
  ${e}
4
4
  ${n}`)}function Zo(t,e=Date.now()){if(typeof t!="string"||!t.startsWith(In))throw new Error("Invalid Remote Session pairing URI");let n;try{n=JSON.parse(or.decode(Ye(t.slice(In.length))))}catch{throw new Error("Malformed Remote Session pairing payload")}if(n.v!==1||!n.relayUrl||!n.remoteSessionId||!n.hostPeerId||!n.hostPublicKey||!n.pairingToken)throw new Error("Incomplete Remote Session pairing payload");if(n.expiresAt&&n.expiresAt<=e)throw new Error("Remote Session pairing payload expired");let r;try{r=new URL(n.relayUrl).protocol}catch{r=null}if(r!=="ws:"&&r!=="wss:")throw new Error("Remote Session relay must use ws or wss");return n}class Ko{constructor(e,n){if(!e||!n)throw new Error("sessionId and localPeerId are required");this.sessionId=e,this.localPeerId=n,this.secretKey=zo(),this.publicKey=$t.getPublicKey(this.secretKey),this.key=null,this.sendSequence=0,this.receivedSequences=new Map}publicKeyBase64(){return at(this.publicKey)}pair(e,n){if(!e||!n)throw new Error("Incomplete peer key material");const r=Ye(e),o=r.length===Ot?r:r.slice(-Ot);if(o.length!==Ot)throw new Error("Invalid X25519 host public key");const s=$t.getSharedSecret(this.secretKey,o),i=tn(pt(n));this.key=bo(tn,s,i,pt(`${rr}:${this.sessionId}`),32)}encrypt(e){if(!this.key)throw new Error("Remote Session is not paired");const n=this.sendSequence+=1,r=Ho(12),o=xn(this.key,r,Sn(this.sessionId,this.localPeerId,n)).encrypt(pt(JSON.stringify(e)));return{v:1,sessionId:this.sessionId,senderId:this.localPeerId,sequence:n,nonce:at(r),ciphertext:at(o.slice(0,o.length-16)),tag:at(o.slice(o.length-16))}}decrypt(e){if(e?.v!==1||e.sessionId!==this.sessionId)throw new Error("Invalid encrypted Remote Session envelope");if(!this.key)throw new Error("Remote Session is not paired");const n=this.receivedSequences.get(e.senderId)||0;if(!Number.isSafeInteger(e.sequence)||e.sequence<=n)throw new Error("Remote Session replay or out-of-order envelope rejected");const r=new Uint8Array([...Ye(e.ciphertext),...Ye(e.tag)]),o=xn(this.key,Ye(e.nonce),Sn(this.sessionId,e.senderId,e.sequence)).decrypt(r);return this.receivedSequences.set(e.senderId,e.sequence),JSON.parse(or.decode(o))}}const sr="chainlesschain://remote-control/pair#";function Yo(t){const e=String(t).replace(/-/g,"+").replace(/_/g,"/"),n=e.padEnd(e.length+(4-e.length%4)%4,"="),r=atob(n),o=new Uint8Array(r.length);for(let s=0;s<r.length;s+=1)o[s]=r.charCodeAt(s);return new TextDecoder().decode(o)}function ir(t){return typeof t=="string"&&t.startsWith(sr)}function kt(t){const e=/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/.exec(t);if(!e)return!1;const[n,r]=[Number(e[1]),Number(e[2])];return[e[1],e[2],e[3],e[4]].some(o=>Number(o)>255)?!1:n===127||n===10||n===172&&r>=16&&r<=31||n===192&&r===168||n===169&&r===254}function Vo(t){const e=String(t||"").toLowerCase().replace(/^\[|\]$/g,"");if(!e)return!1;if(e==="localhost"||kt(e)||e==="::1")return!0;const n=/^::ffff:(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})$/.exec(e);if(n)return kt(n[1]);const r=/^::ffff:([0-9a-f]{1,4}):([0-9a-f]{1,4})$/.exec(e);if(r){const o=parseInt(r[1],16),s=parseInt(r[2],16);return kt(`${o>>8&255}.${o&255}.${s>>8&255}.${s&255}`)}return!!(/^fe[89ab]/.test(e)||/^f[cd]/.test(e))}function Xo(t){let e;try{e=new URL(String(t))}catch{throw new Error(`Invalid direct pairing endpoint: ${t}`)}if(e.protocol!=="ws:"&&e.protocol!=="wss:")throw new Error(`Direct pairing endpoint must be ws:// or wss:// (got ${e.protocol})`);if(e.protocol==="ws:"&&!Vo(e.hostname))throw new Error(`Refusing plaintext ws:// to non-private host "${e.hostname}" — direct pairing is LAN/loopback only; use wss:// for anything else`);return e}function Go(t,e=Date.now()){if(!ir(t))throw new Error("Not a remote-control pairing URI");let n;try{n=JSON.parse(Yo(t.slice(sr.length)))}catch{throw new Error("Malformed remote-control pairing payload")}if(n.v!==1||n.transport!=="direct")throw new Error(`Unsupported remote-control pairing payload (v=${n.v}, transport=${n.transport})`);if(!n.wsUrl||!n.remoteSessionId||!n.pairingToken)throw new Error("Pairing payload is missing wsUrl/session/token");if(n.expiresAt!=null&&n.expiresAt<=e)throw new Error("Pairing link has expired — generate a new one");return Xo(n.wsUrl),{wsUrl:n.wsUrl,serverToken:n.serverToken||null,remoteSessionId:n.remoteSessionId,agentSessionId:n.agentSessionId||null,pairingToken:n.pairingToken,scopes:Array.isArray(n.scopes)?n.scopes:null,expiresAt:n.expiresAt??null,durableMembership:n.durableMembership===!0}}const Wo="chainlesschain.remote-membership-authentication-challenge.v1\0",cr="cc-remote-membership-credential/v1",Qo="cc-remote-membership",Jo=1,lt="credentials",es="cc.remote-membership.ed25519.v1:",ut=Object.freeze({storageUnavailable:!0});function ar(t){let e="";for(const n of new Uint8Array(t))e+=String.fromCharCode(n);return btoa(e).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}function ts(t){return[...new Uint8Array(t)].map(e=>e.toString(16).padStart(2,"0")).join("")}function Mt(t){if(t===null||typeof t=="boolean"||typeof t=="string")return JSON.stringify(t);if(typeof t=="number"){if(!Number.isSafeInteger(t)||Object.is(t,-0))throw new Error("Remote membership challenge contains a non-canonical number");return JSON.stringify(t)}if(Array.isArray(t))return`[${t.map(e=>Mt(e)).join(",")}]`;if(!t||typeof t!="object")throw new Error("Remote membership challenge is not canonical JSON");return`{${Object.keys(t).sort().map(e=>`${JSON.stringify(e)}:${Mt(t[e])}`).join(",")}}`}function Tt(t){const e=typeof t=="string"?t.trim():"";if(!e||e.length>256||/[\u0000-\u001f\u007f]/.test(e))throw new Error("Remote membership session id is invalid");return e}function lr(t,{optional:e=!1}={}){if(e&&t==null)return null;const n=typeof t=="string"?t.trim():"";if(!n||n.length>256||/[\u0000-\u001f\u007f]/.test(n))throw new Error("Remote membership principal id is invalid");return n}function _n(t,e){try{e?.removeItem(`${es}${t}`)}catch{}}function ns(t=globalThis.indexedDB){if(!t||typeof t.open!="function")return null;let e=null;function n(){return e||(e=new Promise((o,s)=>{const i=t.open(Qo,Jo);i.onupgradeneeded=()=>{const a=i.result;a.objectStoreNames.contains(lt)||a.createObjectStore(lt,{keyPath:"sessionId"})},i.onsuccess=()=>o(i.result),i.onerror=()=>s(i.error||new Error("Remote membership database failed")),i.onblocked=()=>s(new Error("Remote membership database upgrade is blocked"))}).catch(o=>{throw e=null,o}),e)}async function r(o,s){const i=await n();return new Promise((a,l)=>{const c=i.transaction(lt,o),d=c.objectStore(lt);let u,w=!1;const h=s(d);h.onsuccess=()=>{u=h.result},h.onerror=x=>{if(h.error?.name==="ConstraintError"){w=!0,x.preventDefault(),x.stopPropagation();return}},c.oncomplete=()=>a(w?{duplicate:!0}:{result:u}),c.onerror=()=>l(c.error||h.error||new Error("Credential transaction failed")),c.onabort=()=>l(c.error||h.error||new Error("Credential transaction aborted"))})}return Object.freeze({async get(o){return(await r("readonly",s=>s.get(o))).result},async add(o){return(await r("readwrite",i=>i.add(o))).duplicate!==!0},async put(o){await r("readwrite",s=>s.put(o))},async delete(o){await r("readwrite",s=>s.delete(o))}})}function Pt(t,{type:e,usage:n,extractable:r}){if(!t||t.type!==e||t.algorithm?.name!=="Ed25519"||t.extractable!==r||!Array.isArray(t.usages)||t.usages.length!==1||t.usages[0]!==n)throw new Error("Remote membership credential record is invalid")}function ft(t,e){if(!t||typeof t!="object"||Array.isArray(t)||t.schema!==cr||t.sessionId!==e)throw new Error("Remote membership credential record is invalid");return Pt(t.publicKey,{type:"public",usage:"verify",extractable:!0}),Pt(t.privateKey,{type:"private",usage:"sign",extractable:!1}),lr(t.principalId,{optional:!0}),t}function rs({subtle:t=globalThis.crypto?.subtle,credentialStore:e=ns(),legacyStorage:n=(()=>{try{return globalThis.localStorage||null}catch{return null}})()}={}){if(!t)throw new Error("WebCrypto is required for durable pairing");const r=new Map,o=new Map;function s(u,w){const x=(o.get(u)||Promise.resolve()).then(w,w);return o.set(u,x),x.finally(()=>{o.get(u)===x&&o.delete(u)})}async function i(u){r.delete(u);try{await e?.delete(u)}catch{}}async function a(u){const w=r.get(u);if(w)try{return{record:ft(w,u),persistence:"memory"}}catch{r.delete(u)}if(!e)return null;let h;try{h=await e.get(u)}catch{return ut}if(!h)return null;try{return{record:ft(h,u),persistence:"indexeddb"}}catch{return await i(u),null}}async function l(u,w){const h=await t.exportKey("spki",u.publicKey),x=ar(h),I=`ed25519:${ts(await t.digest("SHA-256",h))}`;if(u.principalId&&u.principalId!==I)throw new Error("Remote membership principal binding changed");return Object.freeze({publicKey:x,privateKey:u.privateKey,principalId:u.principalId||null,credentialPrincipalId:I,persistence:w})}async function c(u,{memoryOnly:w=!1}={}){const h=await t.generateKey({name:"Ed25519"},!1,["sign","verify"]),x=ft({schema:cr,sessionId:u,publicKey:h.publicKey,privateKey:h.privateKey,principalId:null},u);if(e&&!w){let I;try{I=await e.add(x)}catch{return r.set(u,x),{record:x,persistence:"memory"}}if(I)return{record:x,persistence:"indexeddb"};const p=await a(u);if(p&&p!==ut)return p;throw new Error("Concurrent credential creation did not persist a key")}return r.set(u,x),{record:x,persistence:"memory"}}async function d(u){_n(u,n);const w=await a(u),h=w===ut?await c(u,{memoryOnly:!0}):w||await c(u);return l(h.record,h.persistence)}return Object.freeze({getOrCreate(u){const w=Tt(u);return s(w,()=>d(w))},rememberPrincipal(u,w){const h=Tt(u),x=lr(w);return s(h,async()=>{const I=await a(h);if(I===ut)throw new Error("Remote membership principal persistence is unavailable");const p=I||await c(h),y=await l(p.record,p.persistence);if(x!==y.credentialPrincipalId)throw new Error("Remote membership principal binding changed");if(p.record.principalId&&p.record.principalId!==x)throw new Error("Remote membership principal binding changed");if(p.record.principalId===x&&p.persistence==="indexeddb")return y;if(p.persistence!=="indexeddb"||!e)throw new Error("Remote membership principal could not be persisted before join");const b=ft({...p.record,principalId:x},h);try{await e.put(b)}catch(B){throw new Error("Remote membership principal could not be persisted before join",{cause:B})}return l(b,"indexeddb")})},forget(u){const w=Tt(u);return s(w,async()=>{_n(w,n),r.delete(w);try{await e?.delete(w)}catch{}})}})}let qt=null;function Xt(){return qt||(qt=rs()),qt}function os(t){return Xt().getOrCreate(t)}function ss(t,e){return Xt().rememberPrincipal(t,e)}function is(t){return Xt().forget(t)}async function Rn(t,e){const n=globalThis.crypto?.subtle;if(!n||!e)throw new Error("Remote membership signing credential is unavailable");Pt(e,{type:"private",usage:"sign",extractable:!1});const r=new TextEncoder,o=r.encode(Wo),s=r.encode(Mt(t)),i=new Uint8Array(o.length+s.length);return i.set(o,0),i.set(s,o.length),ar(await n.sign({name:"Ed25519"},e,i))}const An=1e3,Bn=3e4,On=20,cs=15e3,as=5e3,ls=2;let kn=0;function ht(){return globalThis.crypto?.randomUUID?globalThis.crypto.randomUUID():`${Date.now()}-${Math.random().toString(36).slice(2)}`}function us(){return`web-${ht()}`}const fs=wr("remoteSession",()=>{const t=ue("idle"),e=ue([]),n=ue(""),r=ue(null),o=ue(null),s=ue(null),i=ue([]),a=ue([]),l=new Map,c=new Set,d=[];let u=null,w=null,h=null,x=null,I=!1,p=!1,y=0,b=null,B=null,k=0,T=null,M=0,_=null,q=null,O=null,C=null,D=new Map,Q=0;function Z(){b&&(clearTimeout(b),b=null)}function E(){B&&(clearTimeout(B),B=null)}function v(f){const g=f?.payload&&typeof f.payload=="object"?f.payload:f;if(["permission.request","approval.requested","approval_request"].includes(f?.type)){const m=j(f);m&&!l.has(m)&&!c.has(m)&&!i.value.some(S=>S.requestId===m)&&(l.set(m,"pending"),i.value=[...i.value,{requestId:m,tool:f.tool||null,action:f.action||null,detail:f.detail||null,askedAt:f.askedAt||Date.now(),fingerprint:f.fingerprint||null,binding:f.binding||null,revision:f.revision??null,requestedPermissions:Y(f)}])}else if(["permission.resolved","approval.resolved","approval_resolved"].includes(f?.type)){const m=j(f);m&&(l.delete(m),G(m),U(m))}else if(["question_request","question.requested","question"].includes(f?.type)){const m=g?.requestId||g?.id||f?.id||null,S=g?.binding&&typeof g.binding=="object"&&!Array.isArray(g.binding)?g.binding:null;m&&S&&!a.value.some($=>$.requestId===m)&&(a.value=[...a.value,{requestId:m,question:g.question||g.prompt||"",options:Array.isArray(g.options)?g.options:[],multiSelect:g.multiSelect===!0,binding:S}])}else if(["question_resolved","question.resolved"].includes(f?.type)){const m=g?.requestId||g?.id||f?.id||null;m&&X(m)}kn+=1,e.value=[...e.value,{...f,_id:kn,_rxAt:Date.now()}].slice(-200)}function U(f){i.value=i.value.filter(g=>g.requestId!==f)}function j(f){return f?.requestId||f?.approvalId||f?.id||null}function Y(f){const g=f?.requested_permissions??f?.requestedPermissions;if(!Array.isArray(g)||g.length===0||g.length>64)return null;const m=[];for(const S of g){if(!S||typeof S!="object"||Array.isArray(S))return null;const $=S.capability,J=S.scope,me=S.expiresAt??S.expires_at??null;if(typeof $!="string"||$.length<1||$.length>128||typeof J!="string"||J.length<1||J.length>1024||me!==null&&typeof me!="string")return null;m.push({capability:$,scope:J,...me===null?{}:{expiresAt:me}})}return m}function G(f){for(c.has(f)||(c.add(f),d.push(f));d.length>1024;)c.delete(d.shift())}function P(){l.clear(),c.clear(),d.splice(0),i.value=[]}function X(f){a.value=a.value.filter(g=>g.requestId!==f)}function te(f){!f||!f.requestId||e.value.some(m=>["permission.resolved","approval.resolved","approval_resolved"].includes(m.type)&&j(m)===f.requestId)||c.has(f.requestId)||(l.set(f.requestId,"pending"),i.value.some(m=>m.requestId===f.requestId)||(i.value=[...i.value,f]))}function Be(){if(!h)return;I||(k=0);const f=new WebSocket(h.relayUrl);u=f,f.addEventListener("open",()=>{f===u&&f.send(JSON.stringify({type:"register",peerId:x,deviceType:"web",deviceInfo:{protocol:"remote-session.e2ee.v1"}}))}),f.addEventListener("message",g=>{f===u&&ge(g.data)}),f.addEventListener("close",()=>{f===u&&(E(),u=null,p?t.value="disconnected":he())}),f.addEventListener("error",()=>{f===u&&(n.value="Remote Session relay connection error")})}function he(){if(p||b)return;if(y>=On){t.value="disconnected",n.value="Remote Session 重连已放弃(中继长时间不可达)— 回到本页可自动重试";return}const f=Math.min(An*2**y,Bn);y+=1,t.value="reconnecting",b=setTimeout(()=>{b=null,p||Be()},f)}function Ee(){if(!(p||b)){if(o.value==="direct"){if(!q?.durableMembership||!C||_)return;y=0,n.value="",Ue(q,{resumeOnly:!0});return}o.value!=="relay"||!h||u||(y=0,n.value="",t.value="connecting",Be())}}function ge(f){try{let g=JSON.parse(typeof f=="string"?f:String(f));if(g.type==="offline-message"&&(g=g.originalMessage||{}),g.type==="registered"){I?t.value="connected":(t.value="pairing",xe());return}if(g.type!=="message")return;const m=g.payload;if(!m||m.type!=="remote-session.encrypted")return;const S=w.decrypt(m.envelope);S.type==="pair.accepted"?(E(),I=!0,k=0,y=0,t.value="connected"):S.type==="session.revoked"?(p=!0,I=!1,Z(),E(),u&&u.close(),u=null,t.value="revoked"):v(S)}catch(g){t.value="error",n.value=g?.message||"Remote Session protocol error"}}function ve(f,g){return!u||u.readyState!==WebSocket.OPEN||!h?!1:(u.send(JSON.stringify({type:"message",to:h.hostPeerId,payload:{type:f,...g}})),!0)}function xe(){const f={type:"pair.join",remoteSessionId:h.remoteSessionId,token:h.pairingToken,capabilities:["approval-binding-v1","approval-decision-v1"]};T?.token&&(f.pushToken=T.token,f.pushProvider=T.provider||"web");const g=ve("remote-session.pair",{mobilePeerId:x,mobilePublicKey:w.publicKeyBase64(),envelope:w.encrypt(f)});return E(),g?(B=setTimeout(()=>{if(B=null,!(I||p)){if(k>=ls){try{u?.close()}catch{}return}k+=1,xe()}},as),!0):!1}function A(f){if(!u||u.readyState!==WebSocket.OPEN||!I)return!1;const g={...f,commandId:f.commandId||ht(),seq:f.seq??++M};return ve("remote-session.encrypted",{envelope:w.encrypt(g)})}function F(f){for(const[,g]of D)clearTimeout(g.timer),g.reject(new Error(f));D=new Map}function fe(f,g={}){const m=_;if(!m||m.readyState!==WebSocket.OPEN)return Promise.reject(new Error("not connected"));const S=`web-rc-${++Q}-${ht()}`;return new Promise(($,J)=>{const me=setTimeout(()=>{D.delete(S),J(new Error(`request "${f}" timed out`))},cs);D.set(S,{resolve:$,reject:J,timer:me}),m.send(JSON.stringify({id:S,type:f,...g}))})}function Et(f){let g;try{g=JSON.parse(typeof f=="string"?f:String(f))}catch{return}const m=g.requestId&&D.has(g.requestId)?g.requestId:g.id&&D.has(g.id)?g.id:null;if(m){const S=D.get(m);if(D.delete(m),clearTimeout(S.timer),g.type==="error"){const $=new Error(g.message||g.payload?.message||"server error");typeof g.code=="string"&&g.code&&($.code=g.code),$.remoteResponse=!0,S.reject($)}else S.resolve(g);return}if(g.type==="remote-session-event"&&g.remoteSessionId===q?.remoteSessionId){v(g.event||{});return}if(g.type==="remote-session-revoked"&&g.remoteSessionId===q?.remoteSessionId){p=!0;const S=q.remoteSessionId;C=null,O=null,is(S),_&&_.close(),_=null,t.value="revoked"}}function je(){if(p||b||!q?.durableMembership||!C)return;if(y>=On){t.value="disconnected",n.value="Durable Remote Session reconnect attempts were exhausted; retry from this page.";return}const f=Math.min(An*2**y,Bn);y+=1,t.value="reconnecting",b=setTimeout(()=>{b=null,!p&&q&&Ue(q,{resumeOnly:!0})},f)}function Ue(f,{resumeOnly:g=!1}={}){q=f,r.value=f.remoteSessionId,o.value="direct",s.value=f.scopes,t.value=g?"reconnecting":"connecting";const m=new WebSocket(f.wsUrl);_=m,m.addEventListener("open",async()=>{if(m===_)try{if(t.value=g?"reconnecting":"pairing",f.serverToken){const $=await fe("auth",{token:f.serverToken});if(!$.success)throw new Error($.message||"authentication failed")}let S;if(f.durableMembership){O=O||await os(f.remoteSessionId),C=C||O.principalId||null;const $=N=>typeof N=="string"&&/^[1-9]\d*$/.test(N),J=(N,He,ke)=>{const tt=N.session?.sessionId||null,mr=N.member?.principalId||N.member?.clientId||null;if(tt!==f.remoteSessionId||mr!==O.credentialPrincipalId||!$(ke?.sessionEpoch)||!$(ke?.membershipEpoch)||N.session?.sessionEpoch!==ke.sessionEpoch||N.member?.membershipEpoch!==ke.membershipEpoch)throw new Error(`Durable Remote Session ${He} binding changed`);return N},me=async()=>{if(!C)throw new Error("Durable Remote Session principal binding is unavailable");const N=await fe("remote-session-resume-challenge",{remoteSessionId:f.remoteSessionId,principalId:C});if(N.challenge?.sessionId!==f.remoteSessionId||N.challenge?.principalId!==C||!$(N.challenge?.sessionEpoch)||!$(N.challenge?.membershipEpoch))throw new Error("Durable Remote Session resume challenge binding changed");const He=await Rn(N.challenge,O.privateKey);return J(await fe("remote-session-resume",{remoteSessionId:f.remoteSessionId,challengeId:N.challenge.challengeId,signature:He}),"resume",N.challenge)},Wt=async()=>{const N=await fe("remote-session-join-challenge",{remoteSessionId:f.remoteSessionId,token:f.pairingToken,credentialPublicKey:O.publicKey,capabilities:["approval-binding-v1","approval-decision-v1"]});if(N.challenge?.sessionId!==f.remoteSessionId||N.challenge?.principalId!==O.credentialPrincipalId||N.challenge?.credentialPublicKey!==O.publicKey||!$(N.challenge?.sessionEpoch)||!$(N.challenge?.membershipEpoch))throw new Error("Durable Remote Session join challenge binding changed");O=await ss(f.remoteSessionId,O.credentialPrincipalId),C=O.principalId;const He=await Rn(N.challenge,O.privateKey);try{return J(await fe("remote-session-join",{remoteSessionId:f.remoteSessionId,challengeId:N.challenge.challengeId,signature:He}),"join",N.challenge)}catch(ke){if(ke?.remoteResponse)throw ke;try{return await me()}catch(tt){throw tt.joinOutcomeUnknown=!0,tt}}};if(C)try{S=await me()}catch(N){if(g||N?.code!=="REMOTE_SESSION_MEMBERSHIP_NOT_ACTIVE")throw N;S=await Wt()}else{if(g)throw new Error("Durable Remote Session principal binding is unavailable");S=await Wt()}}else S=await fe("remote-session-join",{remoteSessionId:f.remoteSessionId,token:f.pairingToken});if(m!==_)return;s.value=S.member?.scopes||f.scopes,y=0,n.value="",t.value="connected"}catch(S){if(m!==_)return;n.value=S?.message||"Direct pairing failed",F(n.value),_=null;try{m.close()}catch{}!p&&(g||S?.joinOutcomeUnknown===!0)?je():t.value="error"}}),m.addEventListener("message",S=>{m===_&&Et(S.data)}),m.addEventListener("close",()=>{if(m===_){if(_=null,F("connection closed"),p){t.value!=="revoked"&&(t.value="disconnected");return}if(f.durableMembership&&C){je();return}["connected","connecting","pairing","reconnecting"].includes(t.value)&&(t.value="disconnected",n.value="直连会话已断开 — 配对码为一次性,请在主机端重新生成配对链接")}}),m.addEventListener("error",()=>{m===_&&(n.value="Remote control host connection error")})}function Oe(f){return fe("remote-session-publish",{remoteSessionId:q.remoteSessionId,commandId:ht(),seq:++M,event:f}).catch(g=>(n.value=g?.message||"Remote control send failed",null))}function et(f,g={}){Gt();try{if(n.value="",e.value=[],P(),p=!1,M=0,ir(f))return O=null,C=null,y=0,Ue(Go(f)),!0;const m=Zo(f);return T=g.pushCredentials||null,x=us(),w=new Ko(m.remoteSessionId,x),w.pair(m.hostPublicKey,m.pairingToken),h=m,r.value=m.remoteSessionId,o.value="relay",s.value=null,I=!1,k=0,y=0,t.value="connecting",Be(),!0}catch(m){return t.value="error",n.value=m?.message||"Invalid pairing link",!1}}function ur(f){const g=(f||"").trim();if(g){if(o.value==="direct"){_?Oe({type:"prompt",content:g}):n.value="Remote Session is not connected";return}A({type:"prompt",content:g})||(n.value="Remote Session is not connected")}}function fr(f,g){if(!f)return!1;const m=i.value.find(J=>J.requestId===f)||null;if(!m||l.get(f)!=="pending")return!1;const S=dr(m,g);if(!S)return n.value="This approval does not contain a reviewable persistent grant",!1;const $=S.kind.startsWith("accept");return l.set(f,"responding"),U(f),o.value==="direct"?_?(Oe({type:"approval.resolve",requestId:f,decision:S,answer:$,approved:$,fingerprint:m?.fingerprint||null,binding:m?.binding||null,revision:m?.revision??null}).then(J=>{J===null&&te(m)}),!0):(n.value="Remote Session is not connected",te(m),!1):A({type:"approval.resolve",requestId:f,decision:S,approved:$,fingerprint:m?.fingerprint||null,binding:m?.binding||null,revision:m?.revision??null})?!0:(n.value="Remote Session is not connected",te(m),!1)}function dr(f,g){return g===!0||g==="once"||g==="acceptOnce"?{kind:"acceptOnce"}:g===!1||g==="decline"?{kind:"decline"}:g==="turn"||g==="acceptForTurn"?f.requestedPermissions?.length?{kind:"acceptForTurn",permissions:f.requestedPermissions}:null:(g==="session"||g==="acceptForSession")&&f.requestedPermissions?.length?{kind:"acceptForSession",permissions:f.requestedPermissions}:null}function pr(f,g){if(!f)return;const m=a.value.find($=>$.requestId===f)||null;if(!m?.binding)return;X(f);const S={type:"question.answer",requestId:f,answer:g,binding:m.binding};if(o.value==="direct"){if(!_){n.value="Remote Session is not connected",a.value=[...a.value,m];return}Oe(S).then($=>{$===null&&!a.value.some(J=>J.requestId===f)&&(a.value=[...a.value,m])});return}A(S)||(n.value="Remote Session is not connected",a.value=[...a.value,m])}function hr(){const f=i.value.filter(m=>l.get(m.requestId)==="pending");for(const m of f)l.set(m.requestId,"interrupting"),U(m.requestId);const g=m=>{for(const S of f)l.get(S.requestId)==="interrupting"&&(m?(l.delete(S.requestId),G(S.requestId)):te(S));return m};return o.value==="direct"?_?(Oe({type:"interrupt"}).then(m=>g(m!==null)),!0):g(!1):g(A({type:"interrupt"}))}function gr(f,g="web"){if(T=f?{token:f,provider:g}:null,!I)return;const m={type:"push.register"};T?.token&&(m.pushToken=T.token,m.pushProvider=T.provider),A(m)}function Gt(){if(p=!0,I=!1,Z(),E(),u)try{u.close()}catch{}if(u=null,_)try{_.close()}catch{}_=null,q=null,O=null,C=null,F("disconnected"),P(),t.value!=="revoked"&&(t.value="disconnected")}return{status:t,events:e,error:n,remoteSessionId:r,transport:o,scopes:s,pendingApprovals:i,pendingQuestions:a,connect:et,sendPrompt:ur,approve:fr,answerQuestion:pr,interrupt:hr,updatePushCredentials:gr,resumeReconnect:Ee,disconnect:Gt}}),ds={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},ps={key:0,class:"page-sub"},hs={key:0,style:{"word-break":"break-all"}},gs={key:1,class:"page-sub"},ms={key:2,style:{"margin-top":"8px"},"data-testid":"approval-grants"},ws={key:0},Is={__name:"RemoteSession",setup(t){const e=fs();yr(()=>e.resumeReconnect());const{status:n,events:r,error:o,transport:s,pendingApprovals:i,pendingQuestions:a}=br(e),l=ue(""),c=ue(""),d=ue(!1),u=nt(()=>["connecting","pairing","connected","reconnecting"].includes(n.value)),w=nt(()=>({idle:"未连接",connecting:"连接中",pairing:"配对中",connected:"已连接",reconnecting:"重连中",disconnected:"已断开",revoked:"已被撤销",error:"错误"})[n.value]||n.value),h=nt(()=>n.value==="connected"?"green":["connecting","pairing","reconnecting"].includes(n.value)?"blue":["revoked","error"].includes(n.value)?"red":"default"),x=nt(()=>[...r.value].reverse());function I(E){return String(E?.type||"").includes("approval")}function p(E){const v=String(E?.type||""),U=b(E);return["permission.request","approval.requested","approval_request"].includes(v)&&U!==""&&i.value.some(j=>j.requestId===U)}function y(E){return E?.content||E?.payload?.content||E?.message||""}function b(E){return E?.requestId||E?.approvalId||E?.id||""}function B(){e.connect(l.value.trim())}function k(E){d.value=!1,E&&(l.value=E,e.connect(E))}function T(E){const v=typeof E=="string"?E:c.value;e.sendPrompt(v),c.value=""}function M(E,v){e.approve(b(E),v)}function _(E,v){e.approve(E.requestId,v)}function q(E){return String(E&&typeof E=="object"?E.label??E.value??"":E??"")}function O(E){return E&&typeof E=="object"&&"value"in E?E.value:q(E)}function C(E,v){let U=v;if(U===void 0){const j=E.options.map(q).filter(Boolean),Y=window.prompt(`${E.question||"Input required"}${j.length?`