chainlesschain 0.162.148 → 0.162.149
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/package.json +1 -1
- package/src/assets/web-panel/.build-hash +1 -1
- package/src/assets/web-panel/assets/{AIOps-DwpCCp64.js → AIOps-BJif14yR.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-C9pBYocA.js → ActionButton-CXek6gJY.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-BWAkeXxK.js → Analytics-BgQhdAJi.js} +2 -2
- package/src/assets/web-panel/assets/{AppLayout-CivFGH6B.js → AppLayout-DTYl5NtR.js} +3 -3
- package/src/assets/web-panel/assets/{Audit-Cm8hRpZm.js → Audit-BzATQAeR.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-DXdFMsE8.js → Backup-BzdPEQhL.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-uAwSTeql.js → BaseInput-BM0KVh8E.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-KU8eeJJE.js → Chat-D7fHXHkz.js} +4 -4
- package/src/assets/web-panel/assets/ChatBubbleRenderer-Wm34RR-b.js +1 -0
- package/src/assets/web-panel/assets/{Checkbox-C6AMDkjd.js → Checkbox-CAiSQ9vO.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-t2moDxcO.js → Codegen-Df40CrEe.js} +1 -1
- package/src/assets/web-panel/assets/{Col-DCcsRRhN.js → Col-DIT2fNFU.js} +1 -1
- package/src/assets/web-panel/assets/{Community-DtB-8SAC.js → Community-CSTIbW2k.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-CZm8THYA.js → Compact-DtqXZZUi.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-LiQgC7g1.js → Compliance-CUtzw6o7.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-CA8SAxht.js → Cowork-CezmlnmU.js} +2 -2
- package/src/assets/web-panel/assets/{Cron-CtRaF1wD.js → Cron-P4BITarg.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-6-br6Hub.js → Crosschain-BRRiYwvq.js} +1 -1
- package/src/assets/web-panel/assets/{DID-Do2EccrL.js → DID-L5ijB9i4.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-wrXcbzGe.js → Dashboard-CFxro4ob.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-p3FsT245.js → Dropdown-BmAFCQ71.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-D95A2L8q.js → EmailListRenderer-DJBCEuon.js} +1 -1
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-cLuJW2zo.js → FamilyGuardDashboard-z4oLq6eT.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-Brgq_cbN.js → Federation-DsVCpHMF.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-DWLCkNgh.js → FormItemContext-DP3bP5th.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-BBqUfQd6.js → GenericCardRenderer-BAXP2Gc6.js} +1 -1
- package/src/assets/web-panel/assets/{Git-8F090w4I.js → Git-I3g_bAw9.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-CCogEbxb.js → Governance-jHS5-ioS.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-CfLD7v7C.js → Inference-CPL7sfx9.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-DDuHJewd.js → KnowledgeGraph-Jf236h4C.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-CE8KSEVC.js → Logs-Cm2tcSKg.js} +2 -2
- package/src/assets/web-panel/assets/{Marketplace-DmwpZmhT.js → Marketplace-CZK82rhi.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-Bf7AazU8.js → McpTools-CZCeji7a.js} +4 -4
- package/src/assets/web-panel/assets/{Memory-D0QU_00S.js → Memory-3l2KVS9k.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-yXS9xdhx.js → MobileBridge-VYdpoLh6.js} +1 -1
- package/src/assets/web-panel/assets/{MobileProjects-BuDUoGUP.js → MobileProjects-CiB9cmm1.js} +1 -1
- package/src/assets/web-panel/assets/{Mtc-BYyHy28p.js → Mtc-wCFZbBuL.js} +2 -2
- package/src/assets/web-panel/assets/{MtcAudit-CK0aqpiZ.js → MtcAudit-1a3THIyG.js} +4 -4
- package/src/assets/web-panel/assets/{Multisig-mNimKYeb.js → Multisig-DMzLB2hG.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-AioAJ0YA.js → NLProgramming-D9wZbf6l.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-CVVNCLHE.js → Notes-hrFe2ZM-.js} +3 -3
- package/src/assets/web-panel/assets/{NotificationSettings-C4ABj-TK.js → NotificationSettings-CHGX5Jwm.js} +1 -1
- package/src/assets/web-panel/assets/OrderTableRenderer-CRIFE2Tj.js +1 -0
- package/src/assets/web-panel/assets/{Organization-uozl_gWK.js → Organization-By7FkhtY.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-BCZOM2hK.js → Overflow--khGSzJn.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-CArcaiaj.js → P2P-CAG9dH35.js} +2 -2
- package/src/assets/web-panel/assets/{PdhVaultBrowser-Sgq2Srr8.js → PdhVaultBrowser-B3SQZmK9.js} +3 -3
- package/src/assets/web-panel/assets/{Permissions-BYrQrXnH.js → Permissions-D35ec6JA.js} +4 -4
- package/src/assets/web-panel/assets/{PersonalDataHub-BzHStAbz.js → PersonalDataHub-CxBF7hW_.js} +2 -2
- package/src/assets/web-panel/assets/{Pipeline-k7KqxX1M.js → Pipeline-s6EtOO1s.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-IumTUWqx.js → Privacy-BbJYmWmO.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-BRyImYTf.js → ProjectInit-VGQq1jMT.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-BFIqTBFk.js → ProjectSettings-B1ew3Teh.js} +2 -2
- package/src/assets/web-panel/assets/Projects-CGcNIs_g.js +1 -0
- package/src/assets/web-panel/assets/{Providers-CyyFnUPs.js → Providers-mrO47FIK.js} +1 -1
- package/src/assets/web-panel/assets/{QrScannerModal-C82cRx-X.js → QrScannerModal-IJF2mHyw.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-DGxDF521.js → QuickAsk-CU0wN_Z0.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-Cns-Am1y.js → Recommend-DhN37R6G.js} +1 -1
- package/src/assets/web-panel/assets/{RemoteSession-R7OqAIlg.js → RemoteSession-D_xOX_hu.js} +2 -2
- package/src/assets/web-panel/assets/{Reputation-D7mgPIYV.js → Reputation-D_Ssv7uH.js} +1 -1
- package/src/assets/web-panel/assets/{Row-B3lEURyd.js → Row-Kx5dKxX7.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-9_UVrpBt.js → RssFeed-BlGwqZkY.js} +2 -2
- package/src/assets/web-panel/assets/{Search-ClZeO80q.js → Search-hLFQzxpb.js} +1 -1
- package/src/assets/web-panel/assets/{Security-BNNJczEp.js → Security-DMlvsVt4.js} +3 -3
- package/src/assets/web-panel/assets/{Services-C5SjrWUj.js → Services-Bd0Qsj2m.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-Ci_obQ-g.js → Skeleton-DFclq9X3.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-DdebN15P.js → Skills-BNtln2qY.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-OinZP2vi.js → Sla-Dch5H19G.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-CxzbNF51.js → SpeechSettings-2UfQcU1g.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-D06N_66b.js → SyncSettings-CD9YQr4i.js} +2 -2
- package/src/assets/web-panel/assets/{Tasks-BdEdW0AZ.js → Tasks-BNu-7MzI.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-F1ctKmPa.js → Templates-D1n9CaIR.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-CVz1Urot.js → Tenant-DenL3iBW.js} +1 -1
- package/src/assets/web-panel/assets/Terminal-ZzU0Io1Y.js +3 -0
- package/src/assets/web-panel/assets/{TimelineRenderer-Doitzjmf.js → TimelineRenderer-D87IfukO.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-BpyVRpVA.js → Tokens-BkiZc8E3.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-nWhWYTbU.js → Trigger-BNRSytGN.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-DK_G-wLx.js → Trust-Bwbd4X2m.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-B5yBUojO.js → UkeySign-B8O2bs0o.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-C5D51qAe.js → VideoEditing-C2fL8zmH.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-CLbL9K7v.js → Wallet-BORYDdE1.js} +4 -4
- package/src/assets/web-panel/assets/{WebAuthn-DZUelI3V.js → WebAuthn-C0V5S2FM.js} +4 -4
- package/src/assets/web-panel/assets/{WorkflowEditor-8RPxt4KW.js → WorkflowEditor-2dR0fcHL.js} +1 -1
- package/src/assets/web-panel/assets/{chat-4N4tOA3d.js → chat-BmuAFAn8.js} +1 -1
- package/src/assets/web-panel/assets/{colors-zbbGVrua.js → colors-CN3smMcK.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-D7iMkbnE.js → compact-item-DCnxb4kW.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-CBzPJv-w.js → createContext-vlR43pHn.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-DxwmsL4j.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-bHdrQSqZ.js → hasIn-D04tHYFd.js} +1 -1
- package/src/assets/web-panel/assets/{index-DbE5D0WL.js → index-0DnaZGkC.js} +1 -1
- package/src/assets/web-panel/assets/{index-308gCGh7.js → index-430S68MN.js} +1 -1
- package/src/assets/web-panel/assets/{index-kmh1TxRa.js → index-B78xL3s2.js} +1 -1
- package/src/assets/web-panel/assets/{index-QFObYeo1.js → index-BTPEZTk1.js} +1 -1
- package/src/assets/web-panel/assets/{index-BZb8F8YG.js → index-BXRg8GFQ.js} +1 -1
- package/src/assets/web-panel/assets/{index-DE9j5YgT.js → index-BasvsWDM.js} +1 -1
- package/src/assets/web-panel/assets/{index-CiG1IZao.js → index-BeGDEXFs.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bqmx24kh.js → index-BqhASEL4.js} +1 -1
- package/src/assets/web-panel/assets/{index-BCr0geV9.js → index-BudvKQfG.js} +1 -1
- package/src/assets/web-panel/assets/{index-S74FpAIn.js → index-C-6NO5il.js} +1 -1
- package/src/assets/web-panel/assets/{index-DyoNgbXl.js → index-C5Sxb1sE.js} +1 -1
- package/src/assets/web-panel/assets/{index-BtbbdLnf.js → index-CP9m9Ggr.js} +3 -3
- package/src/assets/web-panel/assets/{index-CkxK86vf.js → index-CTOCnIQ7.js} +1 -1
- package/src/assets/web-panel/assets/index-Cg2ldRfU.js +1 -0
- package/src/assets/web-panel/assets/{index-BTIjjXry.js → index-ClhAHDK3.js} +1 -1
- package/src/assets/web-panel/assets/{index-B7b1hGry.js → index-CnXebZLL.js} +1 -1
- package/src/assets/web-panel/assets/{index-CPxkoKgA.js → index-CngCC8hC.js} +1 -1
- package/src/assets/web-panel/assets/{index-Ci009ijp.js → index-Cr-A0FYJ.js} +1 -1
- package/src/assets/web-panel/assets/{index-CdmMoYN1.js → index-CsAsCPJ6.js} +1 -1
- package/src/assets/web-panel/assets/{index-BBNr77E1.js → index-D28DeAAB.js} +1 -1
- package/src/assets/web-panel/assets/{index-B1s0Bz9O.js → index-D5LZVZ0L.js} +1 -1
- package/src/assets/web-panel/assets/{index-oDKNgCsP.js → index-D65_XseV.js} +1 -1
- package/src/assets/web-panel/assets/{index-QNAG4JtR.js → index-D8vwp4qp.js} +1 -1
- package/src/assets/web-panel/assets/{index-CQfu1U78.js → index-DDwLgQY9.js} +1 -1
- package/src/assets/web-panel/assets/{index-BnBOpqv3.js → index-DIpY0qM5.js} +1 -1
- package/src/assets/web-panel/assets/{index-CQ6NcfWz.js → index-DTWg-18U.js} +1 -1
- package/src/assets/web-panel/assets/{index-D4XKpj6c.js → index-DTtRscUa.js} +1 -1
- package/src/assets/web-panel/assets/{index-D1YDh7Wr.js → index-DYAtmqiv.js} +1 -1
- package/src/assets/web-panel/assets/{index-CvRMA9uT.js → index-D_n8_vfI.js} +1 -1
- package/src/assets/web-panel/assets/{index-CahryTX0.js → index-DbADHwhr.js} +1 -1
- package/src/assets/web-panel/assets/{index-BJ4ZGyW0.js → index-DbVsQBOH.js} +1 -1
- package/src/assets/web-panel/assets/index-Dwzo-dtJ.js +1 -0
- package/src/assets/web-panel/assets/{index-xYCm6W2h.js → index-HhNjnCfe.js} +1 -1
- package/src/assets/web-panel/assets/{index-BS4_Mwk6.js → index-ToUh2b1-.js} +1 -1
- package/src/assets/web-panel/assets/{index-DISWAYce.js → index-TslMTwNy.js} +1 -1
- package/src/assets/web-panel/assets/{index-DmqlJed-.js → index-_FIkN3jd.js} +1 -1
- package/src/assets/web-panel/assets/{index-CqdPyWm5.js → index-hpvvtAZ3.js} +1 -1
- package/src/assets/web-panel/assets/{index-BsKehmmS.js → index-jzR7Ujuw.js} +1 -1
- package/src/assets/web-panel/assets/{index-DUyjUkY7.js → index-ljuBiQW9.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-BD55yNBt.js → initDefaultProps-C3wUb4je.js} +1 -1
- package/src/assets/web-panel/assets/{motion-B5Bbe77U.js → motion-D-jYFUNA.js} +1 -1
- package/src/assets/web-panel/assets/{move-CTvIqHEH.js → move-tqb8nwJ2.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-BkNyPQKB.js → mtc-parser-DSOjMJMz.js} +1 -1
- package/src/assets/web-panel/assets/{omit-BaXJXgHA.js → omit-CJ7VimIW.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-Bw6-YTxH.js → pickAttrs-qXiG1iT3.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-BLdbkLqJ.js → placementArrow-CkGBcy1Z.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-IVYkzntU.js → responsiveObserve-D3WvTlLO.js} +1 -1
- package/src/assets/web-panel/assets/{slide-DFMFwwtY.js → slide-BEE2ftge.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-CURYRtZ1.js → statusUtils-CsfBpxiG.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-Cfz63s1r.js → styleChecker-xPrIiJPI.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-COJL0KE3.js → useFlexGapSupport-C5Yd-SCR.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-YLLojQQf.js → useFs-D_MDS8HI.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-BF_21qUC.js → usePersonalDataHub-BqJh-usA.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-9ZpkA7bb.js → vnode-chm_p-gz.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-DhtAfhl8.js → zoom-3-YDNz0Z.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/assets/web-panel/remote-session-sw.js +43 -0
- package/src/command-manifest.json +22 -1
- package/src/commands/agent.js +44 -5
- package/src/commands/codeintel.js +252 -0
- package/src/commands/eval.js +248 -0
- package/src/commands/plugin.js +354 -0
- package/src/commands/team.js +456 -0
- package/src/gateways/ws/message-dispatcher.js +45 -2
- package/src/gateways/ws/remote-session-protocol.js +37 -0
- package/src/gateways/ws/ws-server.js +1 -1
- package/src/harness/prompt-compressor.js +27 -1
- package/src/harness/remote-command-ledger.js +158 -0
- package/src/harness/remote-session-push-apns.js +246 -0
- package/src/harness/remote-session-push-errors.js +15 -0
- package/src/harness/remote-session-push-fcm.js +9 -25
- package/src/harness/remote-session-push-huawei.js +174 -0
- package/src/harness/remote-session-push-oppo.js +171 -0
- package/src/harness/remote-session-push-senders.js +42 -0
- package/src/harness/remote-session-push-vivo.js +179 -0
- package/src/harness/remote-session-push-web.js +299 -0
- package/src/harness/remote-session-push-xiaomi.js +99 -0
- package/src/index.js +6 -0
- package/src/lib/agent-core.js +2 -0
- package/src/lib/agent-sandbox.js +161 -5
- package/src/lib/agent-team/task-lease.js +434 -0
- package/src/lib/agent-team/team-budget.js +165 -0
- package/src/lib/agent-team/team-mailbox.js +106 -0
- package/src/lib/agent-team/team-runner.js +266 -0
- package/src/lib/agent-team/team-worktree.js +204 -0
- package/src/lib/agents.js +18 -0
- package/src/lib/async-hook-supervisor.cjs +305 -0
- package/src/lib/eval/runner.js +163 -0
- package/src/lib/eval/tasks.js +456 -0
- package/src/lib/eval/trend.js +185 -0
- package/src/lib/lsp/__tests__/code-intelligence.integration.test.js +129 -0
- package/src/lib/lsp/__tests__/code-intelligence.test.js +228 -0
- package/src/lib/lsp/__tests__/jsonrpc-stream.test.js +104 -0
- package/src/lib/lsp/__tests__/lsp-client.test.js +258 -0
- package/src/lib/lsp/__tests__/lsp-manager.test.js +264 -0
- package/src/lib/lsp/__tests__/lsp-server-registry.test.js +128 -0
- package/src/lib/lsp/code-intelligence.js +356 -0
- package/src/lib/lsp/jsonrpc-stream.js +139 -0
- package/src/lib/lsp/lsp-client.js +318 -0
- package/src/lib/lsp/lsp-manager.js +323 -0
- package/src/lib/lsp/lsp-server-registry.js +196 -0
- package/src/lib/plugin-monitor-supervisor.js +238 -0
- package/src/lib/plugin-runtime/agents.js +51 -0
- package/src/lib/plugin-runtime/bin.js +100 -0
- package/src/lib/plugin-runtime/hooks.js +100 -0
- package/src/lib/plugin-runtime/install.js +388 -0
- package/src/lib/plugin-runtime/lsp.js +75 -0
- package/src/lib/plugin-runtime/manifest.js +458 -0
- package/src/lib/plugin-runtime/mcp.js +89 -0
- package/src/lib/plugin-runtime/monitors.js +100 -0
- package/src/lib/plugin-runtime/policy.js +144 -0
- package/src/lib/plugin-runtime/reload.js +79 -0
- package/src/lib/plugin-runtime/scopes.js +197 -0
- package/src/lib/plugin-runtime/settings.js +119 -0
- package/src/lib/plugin-runtime/signature.js +107 -0
- package/src/lib/plugin-runtime/skills.js +43 -0
- package/src/lib/plugin-runtime/trust.js +140 -0
- package/src/lib/sandbox-egress-proxy.js +162 -0
- package/src/lib/sandbox-network-policy.js +134 -0
- package/src/lib/sandbox-v2.js +10 -4
- package/src/lib/settings-hook-events.cjs +78 -6
- package/src/lib/settings-hooks.cjs +29 -3
- package/src/lib/settings-loader.cjs +35 -1
- package/src/lib/skill-loader.js +18 -0
- package/src/lib/telemetry/span-recorder.js +237 -0
- package/src/repl/agent-repl.js +400 -4
- package/src/runtime/agent-core.js +546 -52
- package/src/runtime/coding-agent-contract-shared.cjs +82 -8
- package/src/runtime/coding-agent-policy.cjs +32 -7
- package/src/runtime/fallback-model.js +134 -7
- package/src/runtime/headless-runner.js +353 -108
- package/src/runtime/mcp-config.js +46 -0
- package/src/assets/web-panel/assets/ChatBubbleRenderer-DCNfbdlx.js +0 -1
- package/src/assets/web-panel/assets/OrderTableRenderer-DIp8Xcbd.js +0 -1
- package/src/assets/web-panel/assets/Projects-Dpid9CDg.js +0 -1
- package/src/assets/web-panel/assets/Terminal-BvAK_Zel.js +0 -3
- package/src/assets/web-panel/assets/devWarning-C2Z5LRgq.js +0 -1
- package/src/assets/web-panel/assets/index-BGp6Yr-Y.js +0 -1
- package/src/assets/web-panel/assets/index-BXiw9dQf.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{I as _,J as m,U as v,R as l,c as p,K as u,S as w,V as k,r as h,P as i,a1 as P,a2 as Q,Q as b}from"./vendor-BMxUs6UX.js";import{u as B,_ as D}from"./index-
|
|
1
|
+
import{I as _,J as m,U as v,R as l,c as p,K as u,S as w,V as k,r as h,P as i,a1 as P,a2 as Q,Q as b}from"./vendor-BMxUs6UX.js";import{u as B,_ as D}from"./index-CP9m9Ggr.js";import{b as E,f as K,S as N,al as T}from"./icons-BsDmGpcT.js";function L(){const n=[];let a=null,d=!1,e=null;return{push(o){if(n.push(o),a){const t=a;a=null,t()}},finish(o){if(d=!0,e=o||null,a){const t=a;a=null,t()}},async*iterate(){for(;;){for(;n.length>0;)yield n.shift();if(d){if(e)throw e;return}await new Promise(o=>{a=o})}}}}function V(){const n=B();function a(e){if(!e||!Array.isArray(e.messages))throw new Error("messages array is required");const o=L(),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 s=n.sendStream({type:"llm.chat",messages:e.messages,options:e.options||{}},{onChunk:r=>o.push(r),idleMs:e.idleMs??6e4,signal:t.signal}).then(r=>(o.finish(null),r),r=>{throw o.finish(r),r});function c(){t.signal.aborted||t.abort(new Error("aborted"))}return{stream:o.iterate(),result:s,cancel:c}}async function d(e){const o=typeof e.onDelta=="function"?e.onDelta:()=>{},{stream:t,result:s}=a(e);try{for await(const c of t)o(c)}catch{}return s}return{chat:a,chatTo:d}}const U={__name:"QuickAsk",setup(n,{expose:a}){a();const d=V(),e=h(""),o=h(""),t=h(""),s=h(!1),c=h(""),r=h(null);let f=null;async function C(){if(!(s.value||!e.value.trim())){s.value=!0,t.value="",c.value="",r.value=null;try{const y=[{role:"user",content:e.value}],M={},z=o.value.trim();z&&(M.model=z);const x=d.chat({messages:y,options:M});f=x;try{for await(const S of x.stream)S?.content?t.value=S.content:S?.delta&&(t.value+=S.delta)}catch{}const A=await x.result;r.value={model:A?.model||null,tokens:A?.tokens??null},!t.value&&A?.message?.content&&(t.value=A.message.content)}catch(y){c.value=y?.message||String(y)}finally{s.value=!1,f=null}}}function q(){f?.cancel&&f.cancel()}function g(){t.value="",c.value="",r.value=null}const O={llm:d,prompt:e,model:o,answer:t,running:s,error:c,finalMeta:r,get activeChat(){return f},set activeChat(y){f=y},run:C,cancel:q,reset:g,ref:h,get SendOutlined(){return T},get SyncOutlined(){return N},get CheckCircleOutlined(){return K},get CloseOutlined(){return E},get useLlmChat(){return V}};return Object.defineProperty(O,"__isScriptSetup",{enumerable:!1,value:!0}),O}},j={style:{"margin-bottom":"24px"}},F={class:"page-title"},I={class:"page-sub"},J={style:{display:"flex","justify-content":"space-between","align-items":"center","margin-top":"12px"}},R={style:{display:"flex",gap:"8px","align-items":"center",color:"var(--text-muted)","font-size":"11px"}},W={key:0},G={key:1},H={key:2},X={key:0,style:{color:"#1677ff","font-size":"11px"}},Y={key:1,style:{color:"#52c41a","font-size":"11px"}},Z={key:0,style:{margin:"0","white-space":"pre-wrap","font-family":"var(--font-body, system-ui)","font-size":"13px"}},$={key:2,style:{background:"#2a1517",border:"1px solid #5c2426",padding:"8px","border-radius":"4px","margin-top":"8px"}},ee={style:{color:"#ff7875","font-size":"11px",margin:"0","white-space":"pre-wrap"}};function ne(n,a,d,e,o,t){const s=_("a-textarea"),c=_("a-input"),r=_("a-button"),f=_("a-space"),C=_("a-card"),q=_("a-empty");return i(),m("div",null,[v("div",j,[v("h2",F,l(n.$t("quickAsk.title")),1),v("p",I,l(n.$t("quickAsk.subtitle")),1)]),p(C,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:u(()=>[p(s,{value:e.prompt,"onUpdate:value":a[0]||(a[0]=g=>e.prompt=g),rows:4,placeholder:n.$t("quickAsk.promptPlaceholder"),disabled:e.running,onKeydown:[P(Q(e.run,["ctrl","prevent"]),["enter"]),P(Q(e.run,["meta","prevent"]),["enter"])]},null,8,["value","placeholder","disabled","onKeydown"]),v("div",J,[v("div",R,[p(c,{value:e.model,"onUpdate:value":a[1]||(a[1]=g=>e.model=g),placeholder:n.$t("quickAsk.modelPlaceholder"),size:"small",style:{width:"200px"},disabled:e.running,"allow-clear":""},null,8,["value","placeholder","disabled"]),e.answer?(i(),m("span",W,l(e.answer.length)+" "+l(n.$t("quickAsk.charsSuffix")),1)):k("v-if",!0),e.finalMeta?(i(),m("span",G,"· "+l(e.finalMeta.tokens??0)+" "+l(n.$t("quickAsk.tokensSuffix")),1)):k("v-if",!0),e.finalMeta?.model?(i(),m("span",H,"· "+l(e.finalMeta.model),1)):k("v-if",!0)]),p(f,null,{default:u(()=>[e.answer||e.error?(i(),w(r,{key:0,disabled:e.running,onClick:e.reset},{default:u(()=>[b(l(n.$t("quickAsk.clear")),1)]),_:1},8,["disabled"])):k("v-if",!0),e.running?(i(),w(r,{key:1,danger:"",onClick:e.cancel},{icon:u(()=>[p(e.CloseOutlined)]),default:u(()=>[b(" "+l(n.$t("quickAsk.cancel")),1)]),_:1})):(i(),w(r,{key:2,type:"primary",disabled:!e.prompt.trim(),onClick:e.run},{icon:u(()=>[p(e.SendOutlined)]),default:u(()=>[b(" "+l(n.$t("quickAsk.send")),1)]),_:1},8,["disabled"]))]),_:1})])]),_:1}),e.answer||e.running||e.error?(i(),w(C,{key:0,title:n.$t("quickAsk.answerCardTitle"),style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-top":"16px"}},{extra:u(()=>[e.running?(i(),m("span",X,[p(e.SyncOutlined,{spin:!0}),b(" "+l(n.$t("quickAsk.streaming")),1)])):e.finalMeta?(i(),m("span",Y,[p(e.CheckCircleOutlined),b(" "+l(n.$t("quickAsk.done")),1)])):k("v-if",!0)]),default:u(()=>[e.answer?(i(),m("pre",Z,l(e.answer),1)):e.running?(i(),w(q,{key:1,description:n.$t("quickAsk.waitingFirstToken")},null,8,["description"])):k("v-if",!0),e.error?(i(),m("div",$,[v("pre",ee,l(e.error),1)])):k("v-if",!0)]),_:1},8,["title"])):k("v-if",!0)])}const re=D(U,[["render",ne],["__file","/tmp/cc-web-panel-e7ho6d/repo/packages/web-panel/src/views/QuickAsk.vue"]]);export{re as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{I as y,J as _,U as b,R as i,c as n,K as r,V as u,o as ce,a as de,b as K,r as h,P as d,Q as p,S as k,F as A,Z as q,$ as Pe}from"./vendor-BMxUs6UX.js";import{t as W,_ as Ae,b as me,u as ue,E as fe,d as g}from"./index-BtbbdLnf.js";import{o as Ue,aV as ze,aA as Re,aT as Ee,aW as Me,F as je,ak as Ne,aP as Je,R as De}from"./icons-BsDmGpcT.js";const Le=Object.freeze(["note","post","article","document"]),Be=Object.freeze(["pending","viewed","dismissed"]);function I(l,a=0){return typeof l=="number"&&Number.isFinite(l)?l:a}function pe(l){if(!l||typeof l!="object"||Array.isArray(l))return{};const a={};for(const[t,e]of Object.entries(l))typeof e=="number"&&Number.isFinite(e)&&(a[t]=e);return a}function We(l,a=0){if(!l||typeof l!="object")return null;const t=l.user_id??l.userId??"";if(!t)return null;const e=l.topics&&typeof l.topics=="object"&&!Array.isArray(l.topics)?pe(l.topics):{},z=l.interaction_weights??l.interactionWeights,M=z&&typeof z=="object"&&!Array.isArray(z)?pe(z):{};return{key:t,id:String(l.id||""),userId:t,topics:e,topicCount:Object.keys(e).length,interactionWeights:M,decayFactor:I(l.decay_factor??l.decayFactor,.9),lastUpdated:l.last_updated??l.lastUpdated??null,updateCount:I(l.update_count??l.updateCount,0),_idx:a}}function ye(l){const a=W(l);return Array.isArray(a)?a.map(We).filter(Boolean):[]}function Ye(l,a=0){if(!l||typeof l!="object")return null;const t=l.id||"";return t?{key:t,id:t,userId:l.user_id??l.userId??"",contentId:l.content_id??l.contentId??"",contentType:String(l.content_type??l.contentType??"note").toLowerCase(),title:String(l.title||""),score:I(l.score,0),reason:String(l.reason||""),source:String(l.source||"heuristic"),status:String(l.status||"pending").toLowerCase(),feedback:l.feedback??null,createdAt:l.created_at??l.createdAt??null,viewedAt:l.viewed_at??l.viewedAt??null,_idx:a}:null}function ge(l){const a=W(l);return Array.isArray(a)?a.map(Ye).filter(Boolean):[]}const Ve={total:0,pending:0,viewed:0,dismissed:0,feedbackCount:0,feedbackRate:0,avgScore:0};function _e(l){const a={...Ve},t=W(l);return!t||typeof t!="object"||Array.isArray(t)||(a.total=I(t.total,0),a.pending=I(t.pending,0),a.viewed=I(t.viewed,0),a.dismissed=I(t.dismissed,0),a.feedbackCount=I(t.feedbackCount,0),a.feedbackRate=I(t.feedbackRate,0),a.avgScore=I(t.avgScore,0)),a}function ve(l){const a=W(l);return Array.isArray(a)?a.filter(t=>t&&typeof t=="object"&&typeof t.topic=="string").map((t,e)=>({key:`${t.topic}-${e}`,topic:t.topic,weight:I(t.weight,0)})):[]}function ke(l){const a=W(l);return Array.isArray(a)?a.filter(t=>t&&typeof t=="object"&&typeof t.topic=="string"&&typeof t.action=="string").map((t,e)=>({key:`${t.topic}-${e}`,topic:t.topic,action:t.action,amount:I(t.amount,0)})):[]}function E(l){const a=W(l);return!a||typeof a!="object"||Array.isArray(a)?{ok:!1,reason:"",profileId:null,topicCount:null}:{ok:!!(a.updated||a.deleted||a.marked||a.dismissed||a.recorded||a.applied||a.profileId),reason:a.reason?String(a.reason):"",profileId:a.profileId?String(a.profileId):null,topicCount:typeof a.topicCount=="number"?a.topicCount:null}}function Ge(l){if(l==null||l==="")return"—";const a=typeof l=="number"?new Date(l):new Date(String(l));return isNaN(a.getTime())?String(l):a.toLocaleString("zh-CN",{hour12:!1})}const Ke={__name:"Recommend",setup(l,{expose:a}){a();const{t}=me(),e=ue(),z=fe.PRESENTED_IMAGE_SIMPLE,M=h(!1),w=h(!1),Y=h(!1),j=h([]),S=h([]),O=h({total:0,pending:0,viewed:0,dismissed:0,feedbackCount:0,feedbackRate:0,avgScore:0}),T=h([]),F=h([]),v=h(null),U=h("recs"),N=h(""),P=h(""),J=h(!1),D=h(!1),x=de({userId:"",topicsJson:"",weightsJson:""}),H=h(null),Q=K(()=>j.value.map(o=>({value:o.userId,label:`${o.userId} (${t("recommend.userBar.topicSuffix",{count:o.topicCount})})`}))),Z=K(()=>[{title:t("recommend.recColumns.title"),key:"title"},{title:t("recommend.recColumns.contentType"),key:"contentType",width:"110px"},{title:t("recommend.recColumns.score"),key:"score",width:"180px"},{title:t("recommend.recColumns.reason"),key:"reason",width:"220px"},{title:t("recommend.recColumns.status"),key:"status",width:"100px"},{title:t("recommend.recColumns.feedback"),key:"feedback",width:"90px"},{title:t("recommend.recColumns.action"),key:"action",width:"210px"}]),V=K(()=>[{title:t("recommend.profileColumns.userId"),key:"userId"},{title:t("recommend.profileColumns.topicCount"),key:"topicCount",width:"110px"},{title:t("recommend.profileColumns.decayFactor"),key:"decayFactor",width:"110px"},{title:t("recommend.profileColumns.updateCount"),key:"updateCount",width:"110px"},{title:t("recommend.profileColumns.lastUpdated"),key:"lastUpdated",width:"180px"},{title:t("recommend.profileColumns.action"),key:"action",width:"200px"}]),ee=K(()=>{let o=S.value;return N.value&&(o=o.filter(c=>c.status===N.value)),P.value&&(o=o.filter(c=>c.contentType===P.value)),o});function te(o){const c=`recommend.type.${o}`,f=t(c);return f===c?o:f}function oe(o){return{note:"blue",post:"green",article:"purple",document:"orange"}[o]||"default"}function re(o){return{note:"#1677ff",post:"#52c41a",article:"#722ed1",document:"#fa8c16"}[o]||"#888"}function G(o){const c=`recommend.status.${o}`,f=t(c);return f===c?o:f}function X(o){return{pending:"processing",viewed:"green",dismissed:"default"}[o]||"default"}function ne(o){const c=`recommend.feedbackLabel.${o}`,f=t(c);return f===c?o:f}function $(o){return{like:"green",dislike:"red",later:"gold"}[o]||"default"}function R(o){return o>=.7?"#52c41a":o>=.4?"#1677ff":o>=.2?"#faad14":"#ff4d4f"}function ae(o){return o>=.7?"#52c41a":o>=.4?"#1677ff":o>=.2?"#faad14":"#888"}function s(o){try{return JSON.stringify(o,null,2)}catch{return String(o)}}async function m(){M.value=!0;try{const{output:o}=await e.execute("recommend profiles --json",1e4).catch(()=>({output:""}));j.value=ye(o),v.value&&!j.value.find(c=>c.userId===v.value)&&(v.value=null),v.value&&await C()}catch(o){g.error(t("recommend.messages.loadProfilesFailed",{err:o?.message||o}))}finally{M.value=!1}}async function C(){if(!v.value){S.value=[],O.value={total:0,pending:0,viewed:0,dismissed:0,feedbackCount:0,feedbackRate:0,avgScore:0},T.value=[];return}w.value=!0;try{const o=L(v.value),[c,f,B]=await Promise.all([e.execute(`recommend list ${o} --limit 200 --json`,1e4).catch(()=>({output:""})),e.execute(`recommend stats ${o} --json`,8e3).catch(()=>({output:""})),e.execute(`recommend top-interests ${o} --limit 30 --json`,8e3).catch(()=>({output:""}))]);S.value=ge(c.output),O.value=_e(f.output),T.value=ve(B.output)}catch(o){g.error(t("recommend.messages.loadUserFailed",{err:o?.message||o}))}finally{w.value=!1}}function L(o){return`"${String(o).replace(/"/g,'\\"')}"`}function be(){F.value=[],C()}function xe(o){v.value=o,U.value="recs",C()}async function he(){if(!x.userId.trim()){g.warning(t("recommend.messages.userIdRequired"));return}if(x.topicsJson.trim())try{JSON.parse(x.topicsJson)}catch{g.warning(t("recommend.messages.topicsJsonInvalid"));return}if(x.weightsJson.trim())try{JSON.parse(x.weightsJson)}catch{g.warning(t("recommend.messages.weightsJsonInvalid"));return}Y.value=!0;try{const o=[`recommend create-profile ${L(x.userId.trim())}`];x.topicsJson.trim()&&o.push(`-t ${se(x.topicsJson.trim())}`),x.weightsJson.trim()&&o.push(`-w ${se(x.weightsJson.trim())}`),o.push("--json");const{output:c}=await e.execute(o.join(" "),1e4),f=E(c);if(!f.ok){g.error(t("recommend.messages.createFailed",{err:f.reason||c.slice(0,120)}));return}g.success(t("recommend.messages.createOk",{id:f.profileId?.slice(0,8)||""})),J.value=!1;const B=x.userId.trim();le(),await m(),v.value=B,await C()}catch(o){g.error(t("recommend.messages.createFailed",{err:o?.message||o}))}finally{Y.value=!1}}function se(o){return`'${String(o).replace(/'/g,"'\\''")}'`}async function Ce(){if(v.value)try{const{output:o}=await e.execute(`recommend decay ${L(v.value)} --json`,8e3),c=E(o);if(!c.ok){g.error(t("recommend.messages.decayFailed",{err:c.reason||o.slice(0,120)}));return}g.success(c.topicCount!==null?t("recommend.messages.decayOkTopics",{count:c.topicCount}):t("recommend.messages.decayOk")),await m()}catch(o){g.error(t("recommend.messages.decayFailed",{err:o?.message||o}))}}async function we(){if(v.value)try{const{output:o}=await e.execute(`recommend suggest ${L(v.value)} --json`,8e3);F.value=ke(o),U.value="interests",F.value.length?g.success(t("recommend.messages.suggestFound",{count:F.value.length})):g.info(t("recommend.messages.suggestNone"))}catch(o){g.error(t("recommend.messages.loadSuggestFailed",{err:o?.message||o}))}}async function Se(o){try{const{output:c}=await e.execute(`recommend delete-profile ${L(o.userId)} --json`,8e3),f=E(c);if(!f.ok){g.error(t("recommend.messages.deleteFailed",{err:f.reason||c.slice(0,120)}));return}g.success(t("recommend.messages.deleteOk")),v.value===o.userId&&(v.value=null),await m()}catch(c){g.error(t("recommend.messages.deleteFailed",{err:c?.message||c}))}}function Te(o){H.value=o,D.value=!0}async function Ie(o){try{const{output:c}=await e.execute(`recommend view ${o.id} --json`,8e3),f=E(c);if(!f.ok){g.error(t("recommend.messages.viewFailed",{err:f.reason||c.slice(0,120)}));return}g.success(t("recommend.messages.viewOk")),await C()}catch(c){g.error(t("recommend.messages.viewFailed",{err:c?.message||c}))}}async function Oe(o,c){try{const{output:f}=await e.execute(`recommend feedback ${o.id} ${c} --json`,8e3),B=E(f);if(!B.ok){g.error(t("recommend.messages.feedbackFailed",{err:B.reason||f.slice(0,120)}));return}g.success(t("recommend.messages.feedbackOk")),await C()}catch(f){g.error(t("recommend.messages.feedbackFailed",{err:f?.message||f}))}}async function Fe(o){try{const{output:c}=await e.execute(`recommend dismiss ${o.id} --json`,8e3),f=E(c);if(!f.ok){g.error(t("recommend.messages.dismissFailed",{err:f.reason||c.slice(0,120)}));return}g.success(t("recommend.messages.dismissOk")),await C()}catch(c){g.error(t("recommend.messages.dismissFailed",{err:c?.message||c}))}}function le(){x.userId="",x.topicsJson="",x.weightsJson=""}ce(m);const ie={t,ws:e,EMPTY_IMG:z,loading:M,loadingRecs:w,creating:Y,profiles:j,recs:S,userStats:O,topInterests:T,suggestions:F,selectedUser:v,activeTab:U,statusFilter:N,typeFilter:P,showCreateProfileModal:J,showDetailsModal:D,createForm:x,currentProfile:H,userOptions:Q,recColumns:Z,profileColumns:V,filteredRecs:ee,typeLabel:te,typeColor:oe,typeBarColor:re,statusLabel:G,statusColor:X,feedbackLabel:ne,feedbackColor:$,scoreColor:R,weightColor:ae,formatJson:s,loadAll:m,loadUserData:C,encodeArg:L,onUserChange:be,selectAndSwitch:xe,submitCreateProfile:he,shellQuote:se,applyDecay:Ce,loadSuggestions:we,deleteProfile:Se,viewProfileDetails:Te,markViewed:Ie,provideFeedback:Oe,dismissRec:Fe,resetCreateForm:le,ref:h,computed:K,onMounted:ce,reactive:de,get useI18n(){return me},get ReloadOutlined(){return De},get UserAddOutlined(){return Je},get UserOutlined(){return Ne},get FireOutlined(){return je},get EyeInvisibleOutlined(){return Me},get LikeOutlined(){return Ee},get StarOutlined(){return Re},get FieldTimeOutlined(){return ze},get BulbOutlined(){return Ue},get message(){return g},get Empty(){return fe},get useWsStore(){return ue},get parseProfiles(){return ye},get parseRecommendations(){return ge},get parseUserStats(){return _e},get parseTopInterests(){return ve},get parseSuggestions(){return ke},get parseActionResult(){return E},get formatRecommendTime(){return Ge},get CONTENT_TYPE_IDS(){return Le},get RECOMMENDATION_STATUSES(){return Be}};return Object.defineProperty(ie,"__isScriptSetup",{enumerable:!1,value:!0}),ie}},qe={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},He={class:"page-title"},Qe={class:"page-sub"},Ze={style:{display:"flex","align-items":"center",gap:"12px","flex-wrap":"wrap"}},Xe={style:{color:"var(--text-secondary)","font-size":"12px"}},$e={class:"type-name"},et={class:"filter-bar"},tt={style:{color:"var(--text-primary)","font-weight":"500"}},ot={style:{color:"var(--text-muted)","font-size":"11px","margin-top":"2px"}},rt={key:3,style:{color:"var(--text-secondary)","font-size":"12px"}},nt={key:1,style:{color:"var(--text-muted)"}},at={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},st={key:0,style:{color:"var(--text-primary)","font-family":"monospace","font-weight":"500"}},lt={key:2,style:{color:"var(--text-secondary)","font-family":"monospace","font-size":"12px"}},it={key:3,style:{color:"var(--text-secondary)"}},ct={key:4,style:{color:"var(--text-secondary)","font-size":"11px"}},dt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},mt={key:1},ut={class:"interest-topic"},ft={style:{"margin-left":"8px","font-family":"monospace",color:"var(--text-primary)"}},pt={style:{"margin-left":"auto",color:"var(--text-secondary)","font-size":"12px"}},yt={key:0,style:{"padding-top":"8px"}},gt={style:{"font-family":"monospace","font-size":"12px"}},_t={style:{color:"var(--text-primary)","font-size":"13px",margin:"16px 0 8px"}},vt={key:1},kt={class:"interest-topic"},bt={key:2,style:{color:"var(--text-primary)","font-size":"13px",margin:"16px 0 8px"}},xt={key:3,class:"weights-pre"};function ht(l,a,t,e,z,M){const w=y("a-button"),Y=y("a-space"),j=y("a-select"),S=y("a-card"),O=y("a-statistic"),T=y("a-col"),F=y("a-row"),v=y("a-tag"),U=y("a-radio-button"),N=y("a-radio-group"),P=y("a-empty"),J=y("a-progress"),D=y("a-menu-item"),x=y("a-menu"),H=y("a-dropdown"),Q=y("a-popconfirm"),Z=y("a-table"),V=y("a-tab-pane"),ee=y("a-list-item"),te=y("a-list"),oe=y("a-tabs"),re=y("a-input"),G=y("a-form-item"),X=y("a-textarea"),ne=y("a-form"),$=y("a-modal"),R=y("a-descriptions-item"),ae=y("a-descriptions");return d(),_("div",null,[b("div",qe,[b("div",null,[b("h2",He,i(e.t("recommend.title")),1),b("p",Qe,i(e.t("recommend.subtitle")),1)]),n(Y,null,{default:r(()=>[n(w,{loading:e.loading,onClick:e.loadAll},{icon:r(()=>[n(e.ReloadOutlined)]),default:r(()=>[p(" "+i(e.t("recommend.refresh")),1)]),_:1},8,["loading"]),n(w,{type:"primary",onClick:a[0]||(a[0]=s=>e.showCreateProfileModal=!0)},{icon:r(()=>[n(e.UserAddOutlined)]),default:r(()=>[p(" "+i(e.t("recommend.createProfile")),1)]),_:1})]),_:1})]),u(" User selector "),n(S,{size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"},"body-style":{padding:"10px 16px"}},{default:r(()=>[b("div",Ze,[b("span",Xe,i(e.t("recommend.userBar.currentUser")),1),n(j,{value:e.selectedUser,"onUpdate:value":a[1]||(a[1]=s=>e.selectedUser=s),options:e.userOptions,placeholder:e.t("recommend.userBar.selectPlaceholder"),style:{"min-width":"280px"},"allow-clear":"","show-search":"",onChange:e.onUserChange},null,8,["value","options","placeholder"]),e.selectedUser?(d(),k(w,{key:0,size:"small",onClick:e.applyDecay},{icon:r(()=>[n(e.FieldTimeOutlined)]),default:r(()=>[p(" "+i(e.t("recommend.userBar.applyDecay")),1)]),_:1})):u("v-if",!0),e.selectedUser?(d(),k(w,{key:1,size:"small",onClick:e.loadSuggestions},{icon:r(()=>[n(e.BulbOutlined)]),default:r(()=>[p(" "+i(e.t("recommend.userBar.suggest")),1)]),_:1})):u("v-if",!0)])]),_:1}),u(" Stat cards "),n(F,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:r(()=>[n(T,{xs:12,sm:8,lg:5},{default:r(()=>[n(S,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[n(O,{title:e.t("recommend.stats.profiles"),value:e.profiles.length,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:r(()=>[n(e.UserOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),n(T,{xs:12,sm:8,lg:5},{default:r(()=>[n(S,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[n(O,{title:e.t("recommend.stats.totalRecs"),value:e.userStats.total,"value-style":{color:"#722ed1",fontSize:"20px"}},{prefix:r(()=>[n(e.FireOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),n(T,{xs:12,sm:8,lg:5},{default:r(()=>[n(S,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[n(O,{title:e.t("recommend.stats.pending"),value:e.userStats.pending,"value-style":{color:e.userStats.pending>0?"#faad14":"#888",fontSize:"20px"}},{prefix:r(()=>[n(e.EyeInvisibleOutlined)]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),n(T,{xs:12,sm:8,lg:5},{default:r(()=>[n(S,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[n(O,{title:e.t("recommend.stats.feedbackRate"),value:e.userStats.feedbackRate*100,suffix:"%",precision:1,"value-style":{color:"#13c2c2",fontSize:"20px"}},{prefix:r(()=>[n(e.LikeOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),n(T,{xs:24,sm:8,lg:4},{default:r(()=>[n(S,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[n(O,{title:e.t("recommend.stats.avgScore"),value:e.userStats.avgScore,precision:3,"value-style":{color:e.scoreColor(e.userStats.avgScore),fontSize:"20px"}},{prefix:r(()=>[n(e.StarOutlined)]),_:1},8,["title","value","value-style"])]),_:1})]),_:1})]),_:1}),u(" Content type catalogue "),n(S,{title:e.t("recommend.typeCatalogue"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"},"body-style":{padding:"12px 16px"}},{default:r(()=>[n(F,{gutter:[12,12]},{default:r(()=>[(d(!0),_(A,null,q(e.CONTENT_TYPE_IDS,s=>(d(),k(T,{key:s,xs:12,sm:6},{default:r(()=>[b("div",{class:"type-pill",style:Pe({borderLeftColor:e.typeBarColor(s)})},[n(v,{color:e.typeColor(s),style:{"font-family":"monospace"}},{default:r(()=>[p(i(s),1)]),_:2},1032,["color"]),b("div",$e,i(e.typeLabel(s)),1)],4)]),_:2},1024))),128))]),_:1})]),_:1},8,["title"]),u(" Tabs "),n(oe,{activeKey:e.activeTab,"onUpdate:activeKey":a[4]||(a[4]=s=>e.activeTab=s),class:"recommend-tabs"},{default:r(()=>[u(" ── Recommendations tab ────────────────────────────────── "),n(V,{key:"recs",tab:e.t("recommend.tabs.recs")},{default:r(()=>[b("div",et,[n(N,{value:e.statusFilter,"onUpdate:value":a[2]||(a[2]=s=>e.statusFilter=s),size:"small","button-style":"solid"},{default:r(()=>[n(U,{value:""},{default:r(()=>[p(i(e.t("recommend.filter.allStatuses")),1)]),_:1}),(d(!0),_(A,null,q(e.RECOMMENDATION_STATUSES,s=>(d(),k(U,{key:s,value:s},{default:r(()=>[p(i(e.statusLabel(s)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),n(N,{value:e.typeFilter,"onUpdate:value":a[3]||(a[3]=s=>e.typeFilter=s),size:"small"},{default:r(()=>[n(U,{value:""},{default:r(()=>[p(i(e.t("recommend.filter.allTypes")),1)]),_:1}),(d(!0),_(A,null,q(e.CONTENT_TYPE_IDS,s=>(d(),k(U,{key:s,value:s},{default:r(()=>[p(i(e.typeLabel(s)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),e.selectedUser?(d(),k(Z,{key:1,columns:e.recColumns,"data-source":e.filteredRecs,pagination:{pageSize:20,showTotal:s=>e.t("recommend.totals.rows",{count:s})},size:"small",loading:e.loadingRecs,style:{background:"var(--bg-card)"}},{bodyCell:r(({column:s,record:m})=>[s.key==="title"?(d(),_(A,{key:0},[b("span",tt,i(m.title||e.t("recommend.noTitle")),1),b("div",ot,i(m.contentId),1)],64)):u("v-if",!0),s.key==="contentType"?(d(),k(v,{key:1,color:e.typeColor(m.contentType),style:{"font-family":"monospace"}},{default:r(()=>[p(i(m.contentType),1)]),_:2},1032,["color"])):u("v-if",!0),s.key==="score"?(d(),k(J,{key:2,percent:Math.round(m.score*100),"stroke-color":e.scoreColor(m.score),size:"small",format:()=>m.score.toFixed(3)},null,8,["percent","stroke-color","format"])):u("v-if",!0),s.key==="reason"?(d(),_("span",rt,i(m.reason),1)):u("v-if",!0),s.key==="status"?(d(),k(v,{key:4,color:e.statusColor(m.status)},{default:r(()=>[p(i(e.statusLabel(m.status)),1)]),_:2},1032,["color"])):u("v-if",!0),s.key==="feedback"?(d(),_(A,{key:5},[m.feedback?(d(),k(v,{key:0,color:e.feedbackColor(m.feedback)},{default:r(()=>[p(i(e.feedbackLabel(m.feedback)),1)]),_:2},1032,["color"])):(d(),_("span",nt,"—"))],64)):u("v-if",!0),s.key==="action"?(d(),_(A,{key:6},[m.status==="pending"?(d(),k(w,{key:0,size:"small",type:"link",onClick:C=>e.markViewed(m)},{default:r(()=>[p(i(e.t("recommend.rowActions.view")),1)]),_:1},8,["onClick"])):u("v-if",!0),m.status!=="dismissed"?(d(),k(H,{key:1},{overlay:r(()=>[n(x,{onClick:({key:C})=>e.provideFeedback(m,C)},{default:r(()=>[n(D,{key:"like",style:{color:"#52c41a"}},{default:r(()=>[p(i(e.t("recommend.feedbackMenu.like")),1)]),_:1}),n(D,{key:"dislike",style:{color:"#ff4d4f"}},{default:r(()=>[p(i(e.t("recommend.feedbackMenu.dislike")),1)]),_:1}),n(D,{key:"later"},{default:r(()=>[p(i(e.t("recommend.feedbackMenu.later")),1)]),_:1})]),_:1},8,["onClick"])]),default:r(()=>[n(w,{size:"small",type:"link"},{default:r(()=>[p(i(e.t("recommend.feedbackDropdown")),1)]),_:1})]),_:2},1024)):u("v-if",!0),m.status!=="dismissed"?(d(),k(Q,{key:2,title:e.t("recommend.rowActions.dismissConfirmTitle"),"ok-text":e.t("recommend.rowActions.dismissOk"),"cancel-text":e.t("common.cancel"),onConfirm:C=>e.dismissRec(m)},{default:r(()=>[n(w,{size:"small",type:"link",danger:""},{default:r(()=>[p(i(e.t("recommend.rowActions.dismiss")),1)]),_:1})]),_:1},8,["title","ok-text","cancel-text","onConfirm"])):u("v-if",!0)],64)):u("v-if",!0)]),emptyText:r(()=>[b("div",at,[n(e.FireOutlined,{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),p(" "+i(e.statusFilter||e.typeFilter?e.t("recommend.empty.filtered"):e.t("recommend.empty.noRecsHint")),1)])]),_:1},8,["columns","data-source","pagination","loading"])):(d(),k(P,{key:0,description:e.t("recommend.empty.selectUser"),image:e.EMPTY_IMG,style:{padding:"40px 0"}},null,8,["description","image"]))]),_:1},8,["tab"]),u(" ── Profiles tab ───────────────────────────────────────── "),n(V,{key:"profiles",tab:e.t("recommend.tabs.profiles")},{default:r(()=>[n(Z,{columns:e.profileColumns,"data-source":e.profiles,pagination:{pageSize:20,showTotal:s=>e.t("recommend.totals.profiles",{count:s})},size:"small",loading:e.loading,style:{background:"var(--bg-card)"}},{bodyCell:r(({column:s,record:m})=>[s.key==="userId"?(d(),_("span",st,i(m.userId),1)):u("v-if",!0),s.key==="topicCount"?(d(),k(v,{key:1,color:"blue"},{default:r(()=>[p(i(e.t("recommend.topicTagSuffix",{count:m.topicCount})),1)]),_:2},1024)):u("v-if",!0),s.key==="decayFactor"?(d(),_("span",lt,i(m.decayFactor.toFixed(2)),1)):u("v-if",!0),s.key==="updateCount"?(d(),_("span",it,i(m.updateCount),1)):u("v-if",!0),s.key==="lastUpdated"?(d(),_("span",ct,i(e.formatRecommendTime(m.lastUpdated)),1)):u("v-if",!0),s.key==="action"?(d(),_(A,{key:5},[n(w,{size:"small",type:"link",onClick:C=>e.viewProfileDetails(m)},{default:r(()=>[p(i(e.t("recommend.rowActions.details")),1)]),_:1},8,["onClick"]),n(w,{size:"small",type:"link",onClick:C=>e.selectAndSwitch(m.userId)},{default:r(()=>[p(i(e.t("recommend.rowActions.switch")),1)]),_:1},8,["onClick"]),n(Q,{title:e.t("recommend.rowActions.deleteConfirmTitle"),"ok-text":e.t("recommend.rowActions.deleteOk"),"cancel-text":e.t("common.cancel"),onConfirm:C=>e.deleteProfile(m)},{default:r(()=>[n(w,{size:"small",type:"link",danger:""},{default:r(()=>[p(i(e.t("recommend.rowActions.delete")),1)]),_:1})]),_:1},8,["title","ok-text","cancel-text","onConfirm"])],64)):u("v-if",!0)]),emptyText:r(()=>[b("div",dt,[n(e.UserOutlined,{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),p(" "+i(e.t("recommend.empty.noProfiles")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),u(" ── Top interests tab ──────────────────────────────────── "),n(V,{key:"interests",tab:e.t("recommend.tabs.interests")},{default:r(()=>[e.selectedUser?(d(),k(F,{key:1,gutter:[16,16]},{default:r(()=>[n(T,{xs:24,lg:14},{default:r(()=>[n(S,{title:e.t("recommend.interest.topicWeights"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[e.topInterests.length?(d(),_("div",mt,[(d(!0),_(A,null,q(e.topInterests,s=>(d(),_("div",{key:s.key,class:"interest-row"},[b("span",ut,i(s.topic),1),n(J,{percent:Math.round(s.weight*100),"stroke-color":e.weightColor(s.weight),format:()=>s.weight.toFixed(3),size:"small",style:{flex:"1","margin-left":"12px"}},null,8,["percent","stroke-color","format"])]))),128))])):(d(),k(P,{key:0,description:e.t("recommend.empty.noInterests"),image:e.EMPTY_IMG},null,8,["description","image"]))]),_:1},8,["title"])]),_:1}),n(T,{xs:24,lg:10},{default:r(()=>[n(S,{title:e.t("recommend.interest.feedbackSuggest"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[e.suggestions.length?(d(),k(te,{key:1,size:"small","data-source":e.suggestions},{renderItem:r(({item:s})=>[n(ee,null,{default:r(()=>[n(v,{color:s.action==="boost"?"green":"orange"},{default:r(()=>[p(i(s.action==="boost"?e.t("recommend.interest.boost"):e.t("recommend.interest.lower")),1)]),_:2},1032,["color"]),b("span",ft,i(s.topic),1),b("span",pt,"±"+i(s.amount),1)]),_:2},1024)]),_:1},8,["data-source"])):(d(),k(P,{key:0,description:e.t("recommend.empty.noSuggestions"),image:e.EMPTY_IMG},null,8,["description","image"]))]),_:1},8,["title"])]),_:1})]),_:1})):(d(),k(P,{key:0,description:e.t("recommend.empty.selectUser"),image:e.EMPTY_IMG,style:{padding:"40px 0"}},null,8,["description","image"]))]),_:1},8,["tab"])]),_:1},8,["activeKey"]),u(" ── Create profile modal ───────────────────────────────── "),n($,{open:e.showCreateProfileModal,"onUpdate:open":a[8]||(a[8]=s=>e.showCreateProfileModal=s),title:e.t("recommend.create.title"),"confirm-loading":e.creating,width:560,"ok-text":e.t("recommend.create.ok"),"cancel-text":e.t("common.cancel"),onOk:e.submitCreateProfile,onCancel:e.resetCreateForm},{default:r(()=>[n(ne,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:r(()=>[n(G,{label:e.t("recommend.create.userIdLabel"),required:""},{default:r(()=>[n(re,{value:e.createForm.userId,"onUpdate:value":a[5]||(a[5]=s=>e.createForm.userId=s),placeholder:e.t("recommend.create.userIdPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),n(G,{label:e.t("recommend.create.topicsLabel")},{default:r(()=>[n(X,{value:e.createForm.topicsJson,"onUpdate:value":a[6]||(a[6]=s=>e.createForm.topicsJson=s),placeholder:e.t("recommend.create.topicsPlaceholder"),"auto-size":{minRows:2,maxRows:5}},null,8,["value","placeholder"])]),_:1},8,["label"]),n(G,{label:e.t("recommend.create.weightsLabel")},{default:r(()=>[n(X,{value:e.createForm.weightsJson,"onUpdate:value":a[7]||(a[7]=s=>e.createForm.weightsJson=s),placeholder:e.t("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"]),u(" ── Profile details modal ──────────────────────────────── "),n($,{open:e.showDetailsModal,"onUpdate:open":a[9]||(a[9]=s=>e.showDetailsModal=s),title:e.t("recommend.details.title",{userId:e.currentProfile?.userId||""}),width:680,footer:null},{default:r(()=>[e.currentProfile?(d(),_("div",yt,[n(ae,{column:2,size:"small",bordered:""},{default:r(()=>[n(R,{label:e.t("recommend.details.id"),span:2},{default:r(()=>[b("span",gt,i(e.currentProfile.id),1)]),_:1},8,["label"]),n(R,{label:e.t("recommend.details.topicCount")},{default:r(()=>[p(i(e.currentProfile.topicCount),1)]),_:1},8,["label"]),n(R,{label:e.t("recommend.details.decayFactor")},{default:r(()=>[p(i(e.currentProfile.decayFactor.toFixed(2)),1)]),_:1},8,["label"]),n(R,{label:e.t("recommend.details.updateCount")},{default:r(()=>[p(i(e.currentProfile.updateCount),1)]),_:1},8,["label"]),n(R,{label:e.t("recommend.details.lastUpdated")},{default:r(()=>[p(i(e.formatRecommendTime(e.currentProfile.lastUpdated)),1)]),_:1},8,["label"])]),_:1}),b("h4",_t,i(e.t("recommend.details.topicWeights")),1),Object.keys(e.currentProfile.topics).length?(d(),_("div",vt,[(d(!0),_(A,null,q(e.currentProfile.topics,(s,m)=>(d(),_("div",{key:m,class:"interest-row"},[b("span",kt,i(m),1),n(J,{percent:Math.round(s*100),"stroke-color":e.weightColor(s),format:()=>s.toFixed(3),size:"small",style:{flex:"1","margin-left":"12px"}},null,8,["percent","stroke-color","format"])]))),128))])):(d(),k(P,{key:0,description:e.t("recommend.empty.noTopics"),image:e.EMPTY_IMG},null,8,["description","image"])),Object.keys(e.currentProfile.interactionWeights).length?(d(),_("h4",bt,i(e.t("recommend.details.interactionWeights")),1)):u("v-if",!0),Object.keys(e.currentProfile.interactionWeights).length?(d(),_("pre",xt,i(e.formatJson(e.currentProfile.interactionWeights)),1)):u("v-if",!0)])):u("v-if",!0)]),_:1},8,["open","title"])])}const Tt=Ae(Ke,[["render",ht],["__scopeId","data-v-9cfd9dba"],["__file","/tmp/cc-web-panel-w66Hyb/repo/packages/web-panel/src/views/Recommend.vue"]]);export{Tt as default};
|
|
1
|
+
import{I as y,J as _,U as b,R as i,c as n,K as r,V as u,o as ce,a as de,b as K,r as h,P as d,Q as p,S as k,F as A,Z as q,$ as Pe}from"./vendor-BMxUs6UX.js";import{t as W,_ as Ae,b as me,u as ue,E as fe,d as g}from"./index-CP9m9Ggr.js";import{o as Ue,aV as ze,aA as Re,aT as Ee,aW as Me,F as je,ak as Ne,aP as Je,R as De}from"./icons-BsDmGpcT.js";const Le=Object.freeze(["note","post","article","document"]),Be=Object.freeze(["pending","viewed","dismissed"]);function I(l,a=0){return typeof l=="number"&&Number.isFinite(l)?l:a}function pe(l){if(!l||typeof l!="object"||Array.isArray(l))return{};const a={};for(const[t,e]of Object.entries(l))typeof e=="number"&&Number.isFinite(e)&&(a[t]=e);return a}function We(l,a=0){if(!l||typeof l!="object")return null;const t=l.user_id??l.userId??"";if(!t)return null;const e=l.topics&&typeof l.topics=="object"&&!Array.isArray(l.topics)?pe(l.topics):{},z=l.interaction_weights??l.interactionWeights,M=z&&typeof z=="object"&&!Array.isArray(z)?pe(z):{};return{key:t,id:String(l.id||""),userId:t,topics:e,topicCount:Object.keys(e).length,interactionWeights:M,decayFactor:I(l.decay_factor??l.decayFactor,.9),lastUpdated:l.last_updated??l.lastUpdated??null,updateCount:I(l.update_count??l.updateCount,0),_idx:a}}function ye(l){const a=W(l);return Array.isArray(a)?a.map(We).filter(Boolean):[]}function Ye(l,a=0){if(!l||typeof l!="object")return null;const t=l.id||"";return t?{key:t,id:t,userId:l.user_id??l.userId??"",contentId:l.content_id??l.contentId??"",contentType:String(l.content_type??l.contentType??"note").toLowerCase(),title:String(l.title||""),score:I(l.score,0),reason:String(l.reason||""),source:String(l.source||"heuristic"),status:String(l.status||"pending").toLowerCase(),feedback:l.feedback??null,createdAt:l.created_at??l.createdAt??null,viewedAt:l.viewed_at??l.viewedAt??null,_idx:a}:null}function ge(l){const a=W(l);return Array.isArray(a)?a.map(Ye).filter(Boolean):[]}const Ve={total:0,pending:0,viewed:0,dismissed:0,feedbackCount:0,feedbackRate:0,avgScore:0};function _e(l){const a={...Ve},t=W(l);return!t||typeof t!="object"||Array.isArray(t)||(a.total=I(t.total,0),a.pending=I(t.pending,0),a.viewed=I(t.viewed,0),a.dismissed=I(t.dismissed,0),a.feedbackCount=I(t.feedbackCount,0),a.feedbackRate=I(t.feedbackRate,0),a.avgScore=I(t.avgScore,0)),a}function ve(l){const a=W(l);return Array.isArray(a)?a.filter(t=>t&&typeof t=="object"&&typeof t.topic=="string").map((t,e)=>({key:`${t.topic}-${e}`,topic:t.topic,weight:I(t.weight,0)})):[]}function ke(l){const a=W(l);return Array.isArray(a)?a.filter(t=>t&&typeof t=="object"&&typeof t.topic=="string"&&typeof t.action=="string").map((t,e)=>({key:`${t.topic}-${e}`,topic:t.topic,action:t.action,amount:I(t.amount,0)})):[]}function E(l){const a=W(l);return!a||typeof a!="object"||Array.isArray(a)?{ok:!1,reason:"",profileId:null,topicCount:null}:{ok:!!(a.updated||a.deleted||a.marked||a.dismissed||a.recorded||a.applied||a.profileId),reason:a.reason?String(a.reason):"",profileId:a.profileId?String(a.profileId):null,topicCount:typeof a.topicCount=="number"?a.topicCount:null}}function Ge(l){if(l==null||l==="")return"—";const a=typeof l=="number"?new Date(l):new Date(String(l));return isNaN(a.getTime())?String(l):a.toLocaleString("zh-CN",{hour12:!1})}const Ke={__name:"Recommend",setup(l,{expose:a}){a();const{t}=me(),e=ue(),z=fe.PRESENTED_IMAGE_SIMPLE,M=h(!1),w=h(!1),Y=h(!1),j=h([]),S=h([]),O=h({total:0,pending:0,viewed:0,dismissed:0,feedbackCount:0,feedbackRate:0,avgScore:0}),T=h([]),F=h([]),v=h(null),U=h("recs"),N=h(""),P=h(""),J=h(!1),D=h(!1),x=de({userId:"",topicsJson:"",weightsJson:""}),Q=h(null),H=K(()=>j.value.map(o=>({value:o.userId,label:`${o.userId} (${t("recommend.userBar.topicSuffix",{count:o.topicCount})})`}))),Z=K(()=>[{title:t("recommend.recColumns.title"),key:"title"},{title:t("recommend.recColumns.contentType"),key:"contentType",width:"110px"},{title:t("recommend.recColumns.score"),key:"score",width:"180px"},{title:t("recommend.recColumns.reason"),key:"reason",width:"220px"},{title:t("recommend.recColumns.status"),key:"status",width:"100px"},{title:t("recommend.recColumns.feedback"),key:"feedback",width:"90px"},{title:t("recommend.recColumns.action"),key:"action",width:"210px"}]),V=K(()=>[{title:t("recommend.profileColumns.userId"),key:"userId"},{title:t("recommend.profileColumns.topicCount"),key:"topicCount",width:"110px"},{title:t("recommend.profileColumns.decayFactor"),key:"decayFactor",width:"110px"},{title:t("recommend.profileColumns.updateCount"),key:"updateCount",width:"110px"},{title:t("recommend.profileColumns.lastUpdated"),key:"lastUpdated",width:"180px"},{title:t("recommend.profileColumns.action"),key:"action",width:"200px"}]),ee=K(()=>{let o=S.value;return N.value&&(o=o.filter(c=>c.status===N.value)),P.value&&(o=o.filter(c=>c.contentType===P.value)),o});function te(o){const c=`recommend.type.${o}`,f=t(c);return f===c?o:f}function oe(o){return{note:"blue",post:"green",article:"purple",document:"orange"}[o]||"default"}function re(o){return{note:"#1677ff",post:"#52c41a",article:"#722ed1",document:"#fa8c16"}[o]||"#888"}function G(o){const c=`recommend.status.${o}`,f=t(c);return f===c?o:f}function X(o){return{pending:"processing",viewed:"green",dismissed:"default"}[o]||"default"}function ne(o){const c=`recommend.feedbackLabel.${o}`,f=t(c);return f===c?o:f}function $(o){return{like:"green",dislike:"red",later:"gold"}[o]||"default"}function R(o){return o>=.7?"#52c41a":o>=.4?"#1677ff":o>=.2?"#faad14":"#ff4d4f"}function ae(o){return o>=.7?"#52c41a":o>=.4?"#1677ff":o>=.2?"#faad14":"#888"}function s(o){try{return JSON.stringify(o,null,2)}catch{return String(o)}}async function m(){M.value=!0;try{const{output:o}=await e.execute("recommend profiles --json",1e4).catch(()=>({output:""}));j.value=ye(o),v.value&&!j.value.find(c=>c.userId===v.value)&&(v.value=null),v.value&&await C()}catch(o){g.error(t("recommend.messages.loadProfilesFailed",{err:o?.message||o}))}finally{M.value=!1}}async function C(){if(!v.value){S.value=[],O.value={total:0,pending:0,viewed:0,dismissed:0,feedbackCount:0,feedbackRate:0,avgScore:0},T.value=[];return}w.value=!0;try{const o=L(v.value),[c,f,B]=await Promise.all([e.execute(`recommend list ${o} --limit 200 --json`,1e4).catch(()=>({output:""})),e.execute(`recommend stats ${o} --json`,8e3).catch(()=>({output:""})),e.execute(`recommend top-interests ${o} --limit 30 --json`,8e3).catch(()=>({output:""}))]);S.value=ge(c.output),O.value=_e(f.output),T.value=ve(B.output)}catch(o){g.error(t("recommend.messages.loadUserFailed",{err:o?.message||o}))}finally{w.value=!1}}function L(o){return`"${String(o).replace(/"/g,'\\"')}"`}function be(){F.value=[],C()}function xe(o){v.value=o,U.value="recs",C()}async function he(){if(!x.userId.trim()){g.warning(t("recommend.messages.userIdRequired"));return}if(x.topicsJson.trim())try{JSON.parse(x.topicsJson)}catch{g.warning(t("recommend.messages.topicsJsonInvalid"));return}if(x.weightsJson.trim())try{JSON.parse(x.weightsJson)}catch{g.warning(t("recommend.messages.weightsJsonInvalid"));return}Y.value=!0;try{const o=[`recommend create-profile ${L(x.userId.trim())}`];x.topicsJson.trim()&&o.push(`-t ${se(x.topicsJson.trim())}`),x.weightsJson.trim()&&o.push(`-w ${se(x.weightsJson.trim())}`),o.push("--json");const{output:c}=await e.execute(o.join(" "),1e4),f=E(c);if(!f.ok){g.error(t("recommend.messages.createFailed",{err:f.reason||c.slice(0,120)}));return}g.success(t("recommend.messages.createOk",{id:f.profileId?.slice(0,8)||""})),J.value=!1;const B=x.userId.trim();le(),await m(),v.value=B,await C()}catch(o){g.error(t("recommend.messages.createFailed",{err:o?.message||o}))}finally{Y.value=!1}}function se(o){return`'${String(o).replace(/'/g,"'\\''")}'`}async function Ce(){if(v.value)try{const{output:o}=await e.execute(`recommend decay ${L(v.value)} --json`,8e3),c=E(o);if(!c.ok){g.error(t("recommend.messages.decayFailed",{err:c.reason||o.slice(0,120)}));return}g.success(c.topicCount!==null?t("recommend.messages.decayOkTopics",{count:c.topicCount}):t("recommend.messages.decayOk")),await m()}catch(o){g.error(t("recommend.messages.decayFailed",{err:o?.message||o}))}}async function we(){if(v.value)try{const{output:o}=await e.execute(`recommend suggest ${L(v.value)} --json`,8e3);F.value=ke(o),U.value="interests",F.value.length?g.success(t("recommend.messages.suggestFound",{count:F.value.length})):g.info(t("recommend.messages.suggestNone"))}catch(o){g.error(t("recommend.messages.loadSuggestFailed",{err:o?.message||o}))}}async function Se(o){try{const{output:c}=await e.execute(`recommend delete-profile ${L(o.userId)} --json`,8e3),f=E(c);if(!f.ok){g.error(t("recommend.messages.deleteFailed",{err:f.reason||c.slice(0,120)}));return}g.success(t("recommend.messages.deleteOk")),v.value===o.userId&&(v.value=null),await m()}catch(c){g.error(t("recommend.messages.deleteFailed",{err:c?.message||c}))}}function Te(o){Q.value=o,D.value=!0}async function Ie(o){try{const{output:c}=await e.execute(`recommend view ${o.id} --json`,8e3),f=E(c);if(!f.ok){g.error(t("recommend.messages.viewFailed",{err:f.reason||c.slice(0,120)}));return}g.success(t("recommend.messages.viewOk")),await C()}catch(c){g.error(t("recommend.messages.viewFailed",{err:c?.message||c}))}}async function Oe(o,c){try{const{output:f}=await e.execute(`recommend feedback ${o.id} ${c} --json`,8e3),B=E(f);if(!B.ok){g.error(t("recommend.messages.feedbackFailed",{err:B.reason||f.slice(0,120)}));return}g.success(t("recommend.messages.feedbackOk")),await C()}catch(f){g.error(t("recommend.messages.feedbackFailed",{err:f?.message||f}))}}async function Fe(o){try{const{output:c}=await e.execute(`recommend dismiss ${o.id} --json`,8e3),f=E(c);if(!f.ok){g.error(t("recommend.messages.dismissFailed",{err:f.reason||c.slice(0,120)}));return}g.success(t("recommend.messages.dismissOk")),await C()}catch(c){g.error(t("recommend.messages.dismissFailed",{err:c?.message||c}))}}function le(){x.userId="",x.topicsJson="",x.weightsJson=""}ce(m);const ie={t,ws:e,EMPTY_IMG:z,loading:M,loadingRecs:w,creating:Y,profiles:j,recs:S,userStats:O,topInterests:T,suggestions:F,selectedUser:v,activeTab:U,statusFilter:N,typeFilter:P,showCreateProfileModal:J,showDetailsModal:D,createForm:x,currentProfile:Q,userOptions:H,recColumns:Z,profileColumns:V,filteredRecs:ee,typeLabel:te,typeColor:oe,typeBarColor:re,statusLabel:G,statusColor:X,feedbackLabel:ne,feedbackColor:$,scoreColor:R,weightColor:ae,formatJson:s,loadAll:m,loadUserData:C,encodeArg:L,onUserChange:be,selectAndSwitch:xe,submitCreateProfile:he,shellQuote:se,applyDecay:Ce,loadSuggestions:we,deleteProfile:Se,viewProfileDetails:Te,markViewed:Ie,provideFeedback:Oe,dismissRec:Fe,resetCreateForm:le,ref:h,computed:K,onMounted:ce,reactive:de,get useI18n(){return me},get ReloadOutlined(){return De},get UserAddOutlined(){return Je},get UserOutlined(){return Ne},get FireOutlined(){return je},get EyeInvisibleOutlined(){return Me},get LikeOutlined(){return Ee},get StarOutlined(){return Re},get FieldTimeOutlined(){return ze},get BulbOutlined(){return Ue},get message(){return g},get Empty(){return fe},get useWsStore(){return ue},get parseProfiles(){return ye},get parseRecommendations(){return ge},get parseUserStats(){return _e},get parseTopInterests(){return ve},get parseSuggestions(){return ke},get parseActionResult(){return E},get formatRecommendTime(){return Ge},get CONTENT_TYPE_IDS(){return Le},get RECOMMENDATION_STATUSES(){return Be}};return Object.defineProperty(ie,"__isScriptSetup",{enumerable:!1,value:!0}),ie}},qe={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},Qe={class:"page-title"},He={class:"page-sub"},Ze={style:{display:"flex","align-items":"center",gap:"12px","flex-wrap":"wrap"}},Xe={style:{color:"var(--text-secondary)","font-size":"12px"}},$e={class:"type-name"},et={class:"filter-bar"},tt={style:{color:"var(--text-primary)","font-weight":"500"}},ot={style:{color:"var(--text-muted)","font-size":"11px","margin-top":"2px"}},rt={key:3,style:{color:"var(--text-secondary)","font-size":"12px"}},nt={key:1,style:{color:"var(--text-muted)"}},at={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},st={key:0,style:{color:"var(--text-primary)","font-family":"monospace","font-weight":"500"}},lt={key:2,style:{color:"var(--text-secondary)","font-family":"monospace","font-size":"12px"}},it={key:3,style:{color:"var(--text-secondary)"}},ct={key:4,style:{color:"var(--text-secondary)","font-size":"11px"}},dt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},mt={key:1},ut={class:"interest-topic"},ft={style:{"margin-left":"8px","font-family":"monospace",color:"var(--text-primary)"}},pt={style:{"margin-left":"auto",color:"var(--text-secondary)","font-size":"12px"}},yt={key:0,style:{"padding-top":"8px"}},gt={style:{"font-family":"monospace","font-size":"12px"}},_t={style:{color:"var(--text-primary)","font-size":"13px",margin:"16px 0 8px"}},vt={key:1},kt={class:"interest-topic"},bt={key:2,style:{color:"var(--text-primary)","font-size":"13px",margin:"16px 0 8px"}},xt={key:3,class:"weights-pre"};function ht(l,a,t,e,z,M){const w=y("a-button"),Y=y("a-space"),j=y("a-select"),S=y("a-card"),O=y("a-statistic"),T=y("a-col"),F=y("a-row"),v=y("a-tag"),U=y("a-radio-button"),N=y("a-radio-group"),P=y("a-empty"),J=y("a-progress"),D=y("a-menu-item"),x=y("a-menu"),Q=y("a-dropdown"),H=y("a-popconfirm"),Z=y("a-table"),V=y("a-tab-pane"),ee=y("a-list-item"),te=y("a-list"),oe=y("a-tabs"),re=y("a-input"),G=y("a-form-item"),X=y("a-textarea"),ne=y("a-form"),$=y("a-modal"),R=y("a-descriptions-item"),ae=y("a-descriptions");return d(),_("div",null,[b("div",qe,[b("div",null,[b("h2",Qe,i(e.t("recommend.title")),1),b("p",He,i(e.t("recommend.subtitle")),1)]),n(Y,null,{default:r(()=>[n(w,{loading:e.loading,onClick:e.loadAll},{icon:r(()=>[n(e.ReloadOutlined)]),default:r(()=>[p(" "+i(e.t("recommend.refresh")),1)]),_:1},8,["loading"]),n(w,{type:"primary",onClick:a[0]||(a[0]=s=>e.showCreateProfileModal=!0)},{icon:r(()=>[n(e.UserAddOutlined)]),default:r(()=>[p(" "+i(e.t("recommend.createProfile")),1)]),_:1})]),_:1})]),u(" User selector "),n(S,{size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"},"body-style":{padding:"10px 16px"}},{default:r(()=>[b("div",Ze,[b("span",Xe,i(e.t("recommend.userBar.currentUser")),1),n(j,{value:e.selectedUser,"onUpdate:value":a[1]||(a[1]=s=>e.selectedUser=s),options:e.userOptions,placeholder:e.t("recommend.userBar.selectPlaceholder"),style:{"min-width":"280px"},"allow-clear":"","show-search":"",onChange:e.onUserChange},null,8,["value","options","placeholder"]),e.selectedUser?(d(),k(w,{key:0,size:"small",onClick:e.applyDecay},{icon:r(()=>[n(e.FieldTimeOutlined)]),default:r(()=>[p(" "+i(e.t("recommend.userBar.applyDecay")),1)]),_:1})):u("v-if",!0),e.selectedUser?(d(),k(w,{key:1,size:"small",onClick:e.loadSuggestions},{icon:r(()=>[n(e.BulbOutlined)]),default:r(()=>[p(" "+i(e.t("recommend.userBar.suggest")),1)]),_:1})):u("v-if",!0)])]),_:1}),u(" Stat cards "),n(F,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:r(()=>[n(T,{xs:12,sm:8,lg:5},{default:r(()=>[n(S,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[n(O,{title:e.t("recommend.stats.profiles"),value:e.profiles.length,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:r(()=>[n(e.UserOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),n(T,{xs:12,sm:8,lg:5},{default:r(()=>[n(S,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[n(O,{title:e.t("recommend.stats.totalRecs"),value:e.userStats.total,"value-style":{color:"#722ed1",fontSize:"20px"}},{prefix:r(()=>[n(e.FireOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),n(T,{xs:12,sm:8,lg:5},{default:r(()=>[n(S,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[n(O,{title:e.t("recommend.stats.pending"),value:e.userStats.pending,"value-style":{color:e.userStats.pending>0?"#faad14":"#888",fontSize:"20px"}},{prefix:r(()=>[n(e.EyeInvisibleOutlined)]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),n(T,{xs:12,sm:8,lg:5},{default:r(()=>[n(S,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[n(O,{title:e.t("recommend.stats.feedbackRate"),value:e.userStats.feedbackRate*100,suffix:"%",precision:1,"value-style":{color:"#13c2c2",fontSize:"20px"}},{prefix:r(()=>[n(e.LikeOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),n(T,{xs:24,sm:8,lg:4},{default:r(()=>[n(S,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[n(O,{title:e.t("recommend.stats.avgScore"),value:e.userStats.avgScore,precision:3,"value-style":{color:e.scoreColor(e.userStats.avgScore),fontSize:"20px"}},{prefix:r(()=>[n(e.StarOutlined)]),_:1},8,["title","value","value-style"])]),_:1})]),_:1})]),_:1}),u(" Content type catalogue "),n(S,{title:e.t("recommend.typeCatalogue"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"},"body-style":{padding:"12px 16px"}},{default:r(()=>[n(F,{gutter:[12,12]},{default:r(()=>[(d(!0),_(A,null,q(e.CONTENT_TYPE_IDS,s=>(d(),k(T,{key:s,xs:12,sm:6},{default:r(()=>[b("div",{class:"type-pill",style:Pe({borderLeftColor:e.typeBarColor(s)})},[n(v,{color:e.typeColor(s),style:{"font-family":"monospace"}},{default:r(()=>[p(i(s),1)]),_:2},1032,["color"]),b("div",$e,i(e.typeLabel(s)),1)],4)]),_:2},1024))),128))]),_:1})]),_:1},8,["title"]),u(" Tabs "),n(oe,{activeKey:e.activeTab,"onUpdate:activeKey":a[4]||(a[4]=s=>e.activeTab=s),class:"recommend-tabs"},{default:r(()=>[u(" ── Recommendations tab ────────────────────────────────── "),n(V,{key:"recs",tab:e.t("recommend.tabs.recs")},{default:r(()=>[b("div",et,[n(N,{value:e.statusFilter,"onUpdate:value":a[2]||(a[2]=s=>e.statusFilter=s),size:"small","button-style":"solid"},{default:r(()=>[n(U,{value:""},{default:r(()=>[p(i(e.t("recommend.filter.allStatuses")),1)]),_:1}),(d(!0),_(A,null,q(e.RECOMMENDATION_STATUSES,s=>(d(),k(U,{key:s,value:s},{default:r(()=>[p(i(e.statusLabel(s)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),n(N,{value:e.typeFilter,"onUpdate:value":a[3]||(a[3]=s=>e.typeFilter=s),size:"small"},{default:r(()=>[n(U,{value:""},{default:r(()=>[p(i(e.t("recommend.filter.allTypes")),1)]),_:1}),(d(!0),_(A,null,q(e.CONTENT_TYPE_IDS,s=>(d(),k(U,{key:s,value:s},{default:r(()=>[p(i(e.typeLabel(s)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),e.selectedUser?(d(),k(Z,{key:1,columns:e.recColumns,"data-source":e.filteredRecs,pagination:{pageSize:20,showTotal:s=>e.t("recommend.totals.rows",{count:s})},size:"small",loading:e.loadingRecs,style:{background:"var(--bg-card)"}},{bodyCell:r(({column:s,record:m})=>[s.key==="title"?(d(),_(A,{key:0},[b("span",tt,i(m.title||e.t("recommend.noTitle")),1),b("div",ot,i(m.contentId),1)],64)):u("v-if",!0),s.key==="contentType"?(d(),k(v,{key:1,color:e.typeColor(m.contentType),style:{"font-family":"monospace"}},{default:r(()=>[p(i(m.contentType),1)]),_:2},1032,["color"])):u("v-if",!0),s.key==="score"?(d(),k(J,{key:2,percent:Math.round(m.score*100),"stroke-color":e.scoreColor(m.score),size:"small",format:()=>m.score.toFixed(3)},null,8,["percent","stroke-color","format"])):u("v-if",!0),s.key==="reason"?(d(),_("span",rt,i(m.reason),1)):u("v-if",!0),s.key==="status"?(d(),k(v,{key:4,color:e.statusColor(m.status)},{default:r(()=>[p(i(e.statusLabel(m.status)),1)]),_:2},1032,["color"])):u("v-if",!0),s.key==="feedback"?(d(),_(A,{key:5},[m.feedback?(d(),k(v,{key:0,color:e.feedbackColor(m.feedback)},{default:r(()=>[p(i(e.feedbackLabel(m.feedback)),1)]),_:2},1032,["color"])):(d(),_("span",nt,"—"))],64)):u("v-if",!0),s.key==="action"?(d(),_(A,{key:6},[m.status==="pending"?(d(),k(w,{key:0,size:"small",type:"link",onClick:C=>e.markViewed(m)},{default:r(()=>[p(i(e.t("recommend.rowActions.view")),1)]),_:1},8,["onClick"])):u("v-if",!0),m.status!=="dismissed"?(d(),k(Q,{key:1},{overlay:r(()=>[n(x,{onClick:({key:C})=>e.provideFeedback(m,C)},{default:r(()=>[n(D,{key:"like",style:{color:"#52c41a"}},{default:r(()=>[p(i(e.t("recommend.feedbackMenu.like")),1)]),_:1}),n(D,{key:"dislike",style:{color:"#ff4d4f"}},{default:r(()=>[p(i(e.t("recommend.feedbackMenu.dislike")),1)]),_:1}),n(D,{key:"later"},{default:r(()=>[p(i(e.t("recommend.feedbackMenu.later")),1)]),_:1})]),_:1},8,["onClick"])]),default:r(()=>[n(w,{size:"small",type:"link"},{default:r(()=>[p(i(e.t("recommend.feedbackDropdown")),1)]),_:1})]),_:2},1024)):u("v-if",!0),m.status!=="dismissed"?(d(),k(H,{key:2,title:e.t("recommend.rowActions.dismissConfirmTitle"),"ok-text":e.t("recommend.rowActions.dismissOk"),"cancel-text":e.t("common.cancel"),onConfirm:C=>e.dismissRec(m)},{default:r(()=>[n(w,{size:"small",type:"link",danger:""},{default:r(()=>[p(i(e.t("recommend.rowActions.dismiss")),1)]),_:1})]),_:1},8,["title","ok-text","cancel-text","onConfirm"])):u("v-if",!0)],64)):u("v-if",!0)]),emptyText:r(()=>[b("div",at,[n(e.FireOutlined,{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),p(" "+i(e.statusFilter||e.typeFilter?e.t("recommend.empty.filtered"):e.t("recommend.empty.noRecsHint")),1)])]),_:1},8,["columns","data-source","pagination","loading"])):(d(),k(P,{key:0,description:e.t("recommend.empty.selectUser"),image:e.EMPTY_IMG,style:{padding:"40px 0"}},null,8,["description","image"]))]),_:1},8,["tab"]),u(" ── Profiles tab ───────────────────────────────────────── "),n(V,{key:"profiles",tab:e.t("recommend.tabs.profiles")},{default:r(()=>[n(Z,{columns:e.profileColumns,"data-source":e.profiles,pagination:{pageSize:20,showTotal:s=>e.t("recommend.totals.profiles",{count:s})},size:"small",loading:e.loading,style:{background:"var(--bg-card)"}},{bodyCell:r(({column:s,record:m})=>[s.key==="userId"?(d(),_("span",st,i(m.userId),1)):u("v-if",!0),s.key==="topicCount"?(d(),k(v,{key:1,color:"blue"},{default:r(()=>[p(i(e.t("recommend.topicTagSuffix",{count:m.topicCount})),1)]),_:2},1024)):u("v-if",!0),s.key==="decayFactor"?(d(),_("span",lt,i(m.decayFactor.toFixed(2)),1)):u("v-if",!0),s.key==="updateCount"?(d(),_("span",it,i(m.updateCount),1)):u("v-if",!0),s.key==="lastUpdated"?(d(),_("span",ct,i(e.formatRecommendTime(m.lastUpdated)),1)):u("v-if",!0),s.key==="action"?(d(),_(A,{key:5},[n(w,{size:"small",type:"link",onClick:C=>e.viewProfileDetails(m)},{default:r(()=>[p(i(e.t("recommend.rowActions.details")),1)]),_:1},8,["onClick"]),n(w,{size:"small",type:"link",onClick:C=>e.selectAndSwitch(m.userId)},{default:r(()=>[p(i(e.t("recommend.rowActions.switch")),1)]),_:1},8,["onClick"]),n(H,{title:e.t("recommend.rowActions.deleteConfirmTitle"),"ok-text":e.t("recommend.rowActions.deleteOk"),"cancel-text":e.t("common.cancel"),onConfirm:C=>e.deleteProfile(m)},{default:r(()=>[n(w,{size:"small",type:"link",danger:""},{default:r(()=>[p(i(e.t("recommend.rowActions.delete")),1)]),_:1})]),_:1},8,["title","ok-text","cancel-text","onConfirm"])],64)):u("v-if",!0)]),emptyText:r(()=>[b("div",dt,[n(e.UserOutlined,{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),p(" "+i(e.t("recommend.empty.noProfiles")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),u(" ── Top interests tab ──────────────────────────────────── "),n(V,{key:"interests",tab:e.t("recommend.tabs.interests")},{default:r(()=>[e.selectedUser?(d(),k(F,{key:1,gutter:[16,16]},{default:r(()=>[n(T,{xs:24,lg:14},{default:r(()=>[n(S,{title:e.t("recommend.interest.topicWeights"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[e.topInterests.length?(d(),_("div",mt,[(d(!0),_(A,null,q(e.topInterests,s=>(d(),_("div",{key:s.key,class:"interest-row"},[b("span",ut,i(s.topic),1),n(J,{percent:Math.round(s.weight*100),"stroke-color":e.weightColor(s.weight),format:()=>s.weight.toFixed(3),size:"small",style:{flex:"1","margin-left":"12px"}},null,8,["percent","stroke-color","format"])]))),128))])):(d(),k(P,{key:0,description:e.t("recommend.empty.noInterests"),image:e.EMPTY_IMG},null,8,["description","image"]))]),_:1},8,["title"])]),_:1}),n(T,{xs:24,lg:10},{default:r(()=>[n(S,{title:e.t("recommend.interest.feedbackSuggest"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[e.suggestions.length?(d(),k(te,{key:1,size:"small","data-source":e.suggestions},{renderItem:r(({item:s})=>[n(ee,null,{default:r(()=>[n(v,{color:s.action==="boost"?"green":"orange"},{default:r(()=>[p(i(s.action==="boost"?e.t("recommend.interest.boost"):e.t("recommend.interest.lower")),1)]),_:2},1032,["color"]),b("span",ft,i(s.topic),1),b("span",pt,"±"+i(s.amount),1)]),_:2},1024)]),_:1},8,["data-source"])):(d(),k(P,{key:0,description:e.t("recommend.empty.noSuggestions"),image:e.EMPTY_IMG},null,8,["description","image"]))]),_:1},8,["title"])]),_:1})]),_:1})):(d(),k(P,{key:0,description:e.t("recommend.empty.selectUser"),image:e.EMPTY_IMG,style:{padding:"40px 0"}},null,8,["description","image"]))]),_:1},8,["tab"])]),_:1},8,["activeKey"]),u(" ── Create profile modal ───────────────────────────────── "),n($,{open:e.showCreateProfileModal,"onUpdate:open":a[8]||(a[8]=s=>e.showCreateProfileModal=s),title:e.t("recommend.create.title"),"confirm-loading":e.creating,width:560,"ok-text":e.t("recommend.create.ok"),"cancel-text":e.t("common.cancel"),onOk:e.submitCreateProfile,onCancel:e.resetCreateForm},{default:r(()=>[n(ne,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:r(()=>[n(G,{label:e.t("recommend.create.userIdLabel"),required:""},{default:r(()=>[n(re,{value:e.createForm.userId,"onUpdate:value":a[5]||(a[5]=s=>e.createForm.userId=s),placeholder:e.t("recommend.create.userIdPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),n(G,{label:e.t("recommend.create.topicsLabel")},{default:r(()=>[n(X,{value:e.createForm.topicsJson,"onUpdate:value":a[6]||(a[6]=s=>e.createForm.topicsJson=s),placeholder:e.t("recommend.create.topicsPlaceholder"),"auto-size":{minRows:2,maxRows:5}},null,8,["value","placeholder"])]),_:1},8,["label"]),n(G,{label:e.t("recommend.create.weightsLabel")},{default:r(()=>[n(X,{value:e.createForm.weightsJson,"onUpdate:value":a[7]||(a[7]=s=>e.createForm.weightsJson=s),placeholder:e.t("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"]),u(" ── Profile details modal ──────────────────────────────── "),n($,{open:e.showDetailsModal,"onUpdate:open":a[9]||(a[9]=s=>e.showDetailsModal=s),title:e.t("recommend.details.title",{userId:e.currentProfile?.userId||""}),width:680,footer:null},{default:r(()=>[e.currentProfile?(d(),_("div",yt,[n(ae,{column:2,size:"small",bordered:""},{default:r(()=>[n(R,{label:e.t("recommend.details.id"),span:2},{default:r(()=>[b("span",gt,i(e.currentProfile.id),1)]),_:1},8,["label"]),n(R,{label:e.t("recommend.details.topicCount")},{default:r(()=>[p(i(e.currentProfile.topicCount),1)]),_:1},8,["label"]),n(R,{label:e.t("recommend.details.decayFactor")},{default:r(()=>[p(i(e.currentProfile.decayFactor.toFixed(2)),1)]),_:1},8,["label"]),n(R,{label:e.t("recommend.details.updateCount")},{default:r(()=>[p(i(e.currentProfile.updateCount),1)]),_:1},8,["label"]),n(R,{label:e.t("recommend.details.lastUpdated")},{default:r(()=>[p(i(e.formatRecommendTime(e.currentProfile.lastUpdated)),1)]),_:1},8,["label"])]),_:1}),b("h4",_t,i(e.t("recommend.details.topicWeights")),1),Object.keys(e.currentProfile.topics).length?(d(),_("div",vt,[(d(!0),_(A,null,q(e.currentProfile.topics,(s,m)=>(d(),_("div",{key:m,class:"interest-row"},[b("span",kt,i(m),1),n(J,{percent:Math.round(s*100),"stroke-color":e.weightColor(s),format:()=>s.toFixed(3),size:"small",style:{flex:"1","margin-left":"12px"}},null,8,["percent","stroke-color","format"])]))),128))])):(d(),k(P,{key:0,description:e.t("recommend.empty.noTopics"),image:e.EMPTY_IMG},null,8,["description","image"])),Object.keys(e.currentProfile.interactionWeights).length?(d(),_("h4",bt,i(e.t("recommend.details.interactionWeights")),1)):u("v-if",!0),Object.keys(e.currentProfile.interactionWeights).length?(d(),_("pre",xt,i(e.formatJson(e.currentProfile.interactionWeights)),1)):u("v-if",!0)])):u("v-if",!0)]),_:1},8,["open","title"])])}const Tt=Ae(Ke,[["render",ht],["__scopeId","data-v-9cfd9dba"],["__file","/tmp/cc-web-panel-e7ho6d/repo/packages/web-panel/src/views/Recommend.vue"]]);export{Tt as default};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{E as An,r as nt,I as z,J as Ln,U as yt,c as L,K as R,S as lt,V as ve,a6 as Be,b as mt,P as it,Q as P,R as Se,a5 as Tn}from"./vendor-BMxUs6UX.js";import{Q as kn}from"./QrScannerModal-C82cRx-X.js";import{_ as Un}from"./index-BtbbdLnf.js";import{aw as Nn,aB as Fn}from"./icons-BsDmGpcT.js";import"./markdown-CsiA8-E5.js";function qn(e){return e instanceof Uint8Array||ArrayBuffer.isView(e)&&e.constructor.name==="Uint8Array"&&"BYTES_PER_ELEMENT"in e&&e.BYTES_PER_ELEMENT===1}function gt(e,t=""){if(typeof e!="number"){const n=t&&`"${t}" `;throw new TypeError(`${n}expected number, got ${typeof e}`)}if(!Number.isSafeInteger(e)||e<0){const n=t&&`"${t}" `;throw new RangeError(`${n}expected integer >= 0, got ${e}`)}}function W(e,t,n=""){const r=qn(e),o=e?.length,s=t!==void 0;if(!r||s&&o!==t){const i=n&&`"${n}" `,f=s?` of length ${t}`:"",a=r?`length=${o}`:`type=${typeof e}`,c=i+"expected Uint8Array"+f+", got "+a;throw r?new RangeError(c):new TypeError(c)}return e}function ie(e){if(typeof e!="function"||typeof e.create!="function")throw new TypeError("Hash must wrapped by utils.createHasher");if(gt(e.outputLen),gt(e.blockLen),e.outputLen<1)throw new Error('"outputLen" must be >= 1');if(e.blockLen<1)throw new Error('"blockLen" must be >= 1')}function Ct(e,t=!0){if(e.destroyed)throw new Error("Hash instance has been destroyed");if(t&&e.finished)throw new Error("Hash#digest() has already been called")}function We(e,t){W(e,void 0,"digestInto() output");const n=t.outputLen;if(e.length<n)throw new RangeError('"digestInto() output" expected to be of length >='+n)}function St(...e){for(let t=0;t<e.length;t++)e[t].fill(0)}function Vt(e){return new DataView(e.buffer,e.byteOffset,e.byteLength)}function V(e,t){return e<<32-t|e>>>t}const Qe=typeof Uint8Array.from([]).toHex=="function"&&typeof Uint8Array.fromHex=="function",Cn=Array.from({length:256},(e,t)=>t.toString(16).padStart(2,"0"));function ce(e){if(W(e),Qe)return e.toHex();let t="";for(let n=0;n<e.length;n++)t+=Cn[e[n]];return t}const G={_0:48,_9:57,A:65,F:70,a:97,f:102};function _e(e){if(e>=G._0&&e<=G._9)return e-G._0;if(e>=G.A&&e<=G.F)return e-(G.A-10);if(e>=G.a&&e<=G.f)return e-(G.a-10)}function fe(e){if(typeof e!="string")throw new TypeError("hex string expected, got "+typeof e);if(Qe)try{return Uint8Array.fromHex(e)}catch(o){throw o instanceof SyntaxError?new RangeError(o.message):o}const t=e.length,n=t/2;if(t%2)throw new RangeError("hex string expected, got unpadded hex of length "+t);const r=new Uint8Array(n);for(let o=0,s=0;o<n;o++,s+=2){const i=_e(e.charCodeAt(s)),f=_e(e.charCodeAt(s+1));if(i===void 0||f===void 0){const a=e[s]+e[s+1];throw new RangeError('hex string expected, got non-hex character "'+a+'" at index '+s)}r[o]=i*16+f}return r}function Hn(e,t={}){const n=(o,s)=>e(s).update(o).digest(),r=e(void 0);return n.outputLen=r.outputLen,n.blockLen=r.blockLen,n.canXOF=r.canXOF,n.create=o=>e(o),Object.assign(n,t),Object.freeze(n)}function Zn(e=32){gt(e,"bytesLength");const t=typeof globalThis=="object"?globalThis.crypto:null;if(typeof t?.getRandomValues!="function")throw new Error("crypto.getRandomValues must be defined");if(e>65536)throw new RangeError(`"bytesLength" expected <= 65536, got ${e}`);return t.getRandomValues(new Uint8Array(e))}const Dn=e=>({oid:Uint8Array.from([6,9,96,134,72,1,101,3,4,2,e])});function $n(e,t,n){return e&t^~e&n}function zn(e,t,n){return e&t^e&n^t&n}class Yn{blockLen;outputLen;canXOF=!1;padOffset;isLE;buffer;view;finished=!1;length=0;pos=0;destroyed=!1;constructor(t,n,r,o){this.blockLen=t,this.outputLen=n,this.padOffset=r,this.isLE=o,this.buffer=new Uint8Array(t),this.view=Vt(this.buffer)}update(t){Ct(this),W(t);const{view:n,buffer:r,blockLen:o}=this,s=t.length;for(let i=0;i<s;){const f=Math.min(o-this.pos,s-i);if(f===o){const a=Vt(t);for(;o<=s-i;i+=o)this.process(a,i);continue}r.set(t.subarray(i,i+f),this.pos),this.pos+=f,i+=f,this.pos===o&&(this.process(n,0),this.pos=0)}return this.length+=t.length,this.roundClean(),this}digestInto(t){Ct(this),We(t,this),this.finished=!0;const{buffer:n,view:r,blockLen:o,isLE:s}=this;let{pos:i}=this;n[i++]=128,St(this.buffer.subarray(i)),this.padOffset>o-i&&(this.process(r,0),i=0);for(let l=i;l<o;l++)n[l]=0;r.setBigUint64(o-8,BigInt(this.length*8),s),this.process(r,0);const f=Vt(t),a=this.outputLen;if(a%4)throw new Error("_sha2: outputLen must be aligned to 32bit");const c=a/4,u=this.get();if(c>u.length)throw new Error("_sha2: outputLen bigger than state");for(let l=0;l<c;l++)f.setUint32(4*l,u[l],s)}digest(){const{buffer:t,outputLen:n}=this;this.digestInto(t);const r=t.slice(0,n);return this.destroy(),r}_cloneInto(t){t||=new this.constructor,t.set(...this.get());const{blockLen:n,buffer:r,length:o,finished:s,destroyed:i,pos:f}=this;return t.destroyed=i,t.finished=s,t.length=o,t.pos=f,o%n&&t.buffer.set(r),t}clone(){return this._cloneInto()}}const J=Uint32Array.from([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),Mn=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]),tt=new Uint32Array(64);class jn extends Yn{constructor(t){super(64,t,8,!1)}get(){const{A:t,B:n,C:r,D:o,E:s,F:i,G:f,H:a}=this;return[t,n,r,o,s,i,f,a]}set(t,n,r,o,s,i,f,a){this.A=t|0,this.B=n|0,this.C=r|0,this.D=o|0,this.E=s|0,this.F=i|0,this.G=f|0,this.H=a|0}process(t,n){for(let l=0;l<16;l++,n+=4)tt[l]=t.getUint32(n,!1);for(let l=16;l<64;l++){const y=tt[l-15],p=tt[l-2],b=V(y,7)^V(y,18)^y>>>3,m=V(p,17)^V(p,19)^p>>>10;tt[l]=m+tt[l-7]+b+tt[l-16]|0}let{A:r,B:o,C:s,D:i,E:f,F:a,G:c,H:u}=this;for(let l=0;l<64;l++){const y=V(f,6)^V(f,11)^V(f,25),p=u+y+$n(f,a,c)+Mn[l]+tt[l]|0,m=(V(r,2)^V(r,13)^V(r,22))+zn(r,o,s)|0;u=c,c=a,a=f,f=i+p|0,i=s,s=o,o=r,r=p+m|0}r=r+this.A|0,o=o+this.B|0,s=s+this.C|0,i=i+this.D|0,f=f+this.E|0,a=a+this.F|0,c=c+this.G|0,u=u+this.H|0,this.set(r,o,s,i,f,a,c,u)}roundClean(){St(tt)}destroy(){this.destroyed=!0,this.set(0,0,0,0,0,0,0,0),St(this.buffer)}}class Vn extends jn{A=J[0]|0;B=J[1]|0;C=J[2]|0;D=J[3]|0;E=J[4]|0;F=J[5]|0;G=J[6]|0;H=J[7]|0;constructor(){super(32)}}const Ie=Hn(()=>new Vn,Dn(1));const rt=(e,t,n)=>W(e,t,n),Je=gt,tn=ce,Xn=e=>fe(e),Kn=e=>Zn(e),Ht=BigInt(0),ee=BigInt(1);function en(e,t=""){if(typeof e!="boolean"){const n=t&&`"${t}" `;throw new TypeError(n+"expected boolean, got type="+typeof e)}return e}function Pn(e){if(typeof e=="bigint"){if(!Ft(e))throw new RangeError("positive bigint expected, got "+e)}else Je(e);return e}function Re(e,t=""){if(typeof e!="number"){const n=t&&`"${t}" `;throw new TypeError(n+"expected number, got type="+typeof e)}if(!Number.isSafeInteger(e)){const n=t&&`"${t}" `;throw new RangeError(n+"expected safe integer, got "+e)}}function nn(e){if(typeof e!="string")throw new TypeError("hex string expected, got "+typeof e);return e===""?Ht:BigInt("0x"+e)}function Gn(e){return nn(ce(e))}function _t(e){return nn(ce(It(W(e)).reverse()))}function rn(e,t){if(gt(t),t===0)throw new RangeError("zero length");e=Pn(e);const n=e.toString(16);if(n.length>t*2)throw new RangeError("number too large");return fe(n.padStart(t*2,"0"))}function on(e,t){return rn(e,t).reverse()}function Wn(e,t){if(e=rt(e),t=rt(t),e.length!==t.length)return!1;let n=0;for(let r=0;r<e.length;r++)n|=e[r]^t[r];return n===0}function It(e){return Uint8Array.from(rt(e))}const Ft=e=>typeof e=="bigint"&&Ht<=e;function Qn(e,t,n){return Ft(e)&&Ft(t)&&Ft(n)&&t<=e&&e<n}function Zt(e,t,n,r){if(!Qn(t,n,r))throw new RangeError("expected valid "+e+": "+n+" <= n < "+r+", got "+t)}function Jn(e){if(e<Ht)throw new Error("expected non-negative bigint, got "+e);let t;for(t=0;e>Ht;e>>=ee,t+=1);return t}const tr=e=>(ee<<BigInt(e))-ee;function ae(e,t={},n={}){if(Object.prototype.toString.call(e)!=="[object Object]")throw new TypeError("expected valid options object");function r(s,i,f){if(!f&&i!=="function"&&!Object.hasOwn(e,s))throw new TypeError(`param "${s}" is invalid: expected own property`);const a=e[s];if(f&&a===void 0)return;const c=typeof a;if(c!==i||a===null)throw new TypeError(`param "${s}" is invalid: expected ${i}, got ${c}`)}const o=(s,i)=>Object.entries(s).forEach(([f,a])=>r(f,a,i));o(t,!1),o(n,!0)}const Oe=()=>{throw new Error("not implemented")};const F=BigInt(0),N=BigInt(1),at=BigInt(2),sn=BigInt(3),cn=BigInt(4),fn=BigInt(5),er=BigInt(7),an=BigInt(8),nr=BigInt(9),un=BigInt(16);function A(e,t){if(t<=F)throw new Error("mod: expected positive modulus, got "+t);const n=e%t;return n>=F?n:t+n}function M(e,t,n){if(t<F)throw new Error("pow2: expected non-negative exponent, got "+t);let r=e;for(;t-- >F;)r*=r,r%=n;return r}function Ae(e,t){if(e===F)throw new Error("invert: expected non-zero number");if(t<=F)throw new Error("invert: expected positive modulus, got "+t);let n=A(e,t),r=t,o=F,s=N;for(;n!==F;){const f=r/n,a=r-n*f,c=o-s*f;r=n,n=a,o=s,s=c}if(r!==N)throw new Error("invert: does not exist");return A(o,t)}function ue(e,t,n){const r=e;if(!r.eql(r.sqr(t),n))throw new Error("Cannot find square root")}function ln(e,t){const n=e,r=(n.ORDER+N)/cn,o=n.pow(t,r);return ue(n,o,t),o}function rr(e,t){const n=e,r=(n.ORDER-fn)/an,o=n.mul(t,at),s=n.pow(o,r),i=n.mul(t,s),f=n.mul(n.mul(i,at),s),a=n.mul(i,n.sub(f,n.ONE));return ue(n,a,t),a}function or(e){const t=le(e),n=dn(e),r=n(t,t.neg(t.ONE)),o=n(t,r),s=n(t,t.neg(r)),i=(e+er)/un;return((f,a)=>{const c=f;let u=c.pow(a,i),l=c.mul(u,r);const y=c.mul(u,o),p=c.mul(u,s),b=c.eql(c.sqr(l),a),m=c.eql(c.sqr(y),a);u=c.cmov(u,l,b),l=c.cmov(p,y,m);const d=c.eql(c.sqr(l),a),g=c.cmov(u,l,d);return ue(c,g,a),g})}function dn(e){if(e<sn)throw new Error("sqrt is not defined for small field");let t=e-N,n=0;for(;t%at===F;)t/=at,n++;let r=at;const o=le(e);for(;Le(o,r)===1;)if(r++>1e3)throw new Error("Cannot find square root: probably non-prime P");if(n===1)return ln;let s=o.pow(r,t);const i=(t+N)/at;return function(a,c){const u=a;if(u.is0(c))return c;if(Le(u,c)!==1)throw new Error("Cannot find square root");let l=n,y=u.mul(u.ONE,s),p=u.pow(c,t),b=u.pow(c,i);for(;!u.eql(p,u.ONE);){if(u.is0(p))return u.ZERO;let m=1,d=u.sqr(p);for(;!u.eql(d,u.ONE);)if(m++,d=u.sqr(d),m===l)throw new Error("Cannot find square root");const g=N<<BigInt(l-m-1),h=u.pow(y,g);l=m,y=u.sqr(h),p=u.mul(p,y),b=u.mul(b,h)}return b}}function sr(e){return e%cn===sn?ln:e%an===fn?rr:e%un===nr?or(e):dn(e)}const ct=(e,t)=>(A(e,t)&N)===N,ir=["create","isValid","is0","neg","inv","sqrt","sqr","eql","add","sub","mul","pow","div","addN","subN","mulN","sqrN"];function cr(e){const t={ORDER:"bigint",BYTES:"number",BITS:"number"},n=ir.reduce((r,o)=>(r[o]="function",r),t);if(ae(e,n),Re(e.BYTES,"BYTES"),Re(e.BITS,"BITS"),e.BYTES<1||e.BITS<1)throw new Error("invalid field: expected BYTES/BITS > 0");if(e.ORDER<=N)throw new Error("invalid field: expected ORDER > 1, got "+e.ORDER);return e}function fr(e,t,n){const r=e;if(n<F)throw new Error("invalid exponent, negatives unsupported");if(n===F)return r.ONE;if(n===N)return t;let o=r.ONE,s=t;for(;n>F;)n&N&&(o=r.mul(o,s)),s=r.sqr(s),n>>=N;return o}function hn(e,t,n=!1){const r=e,o=new Array(t.length).fill(n?r.ZERO:void 0),s=t.reduce((f,a,c)=>r.is0(a)?f:(o[c]=f,r.mul(f,a)),r.ONE),i=r.inv(s);return t.reduceRight((f,a,c)=>r.is0(a)?f:(o[c]=r.mul(f,o[c]),r.mul(f,a)),i),o}function Le(e,t){const n=e,r=(n.ORDER-N)/at,o=n.pow(t,r),s=n.eql(o,n.ONE),i=n.eql(o,n.ZERO),f=n.eql(o,n.neg(n.ONE));if(!s&&!i&&!f)throw new Error("invalid Legendre symbol result");return s?1:i?0:-1}function ar(e,t){if(t!==void 0&&Je(t),e<=F)throw new Error("invalid n length: expected positive n, got "+e);if(t!==void 0&&t<1)throw new Error("invalid n length: expected positive bit length, got "+t);const n=Jn(e);if(t!==void 0&&t<n)throw new Error(`invalid n length: expected bit length (${n}) >= n.length (${t})`);const r=t!==void 0?t:n,o=Math.ceil(r/8);return{nBitLength:r,nByteLength:o}}const Te=new WeakMap;class pn{ORDER;BITS;BYTES;isLE;ZERO=F;ONE=N;_lengths;_mod;constructor(t,n={}){if(t<=N)throw new Error("invalid field: expected ORDER > 1, got "+t);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}=ar(t,r);if(s>2048)throw new Error("invalid field: expected ORDER of <= 2048 bytes");this.ORDER=t,this.BITS=o,this.BYTES=s,Object.freeze(this)}create(t){return A(t,this.ORDER)}isValid(t){if(typeof t!="bigint")throw new TypeError("invalid field element: expected bigint, got "+typeof t);return F<=t&&t<this.ORDER}is0(t){return t===F}isValidNot0(t){return!this.is0(t)&&this.isValid(t)}isOdd(t){return(t&N)===N}neg(t){return A(-t,this.ORDER)}eql(t,n){return t===n}sqr(t){return A(t*t,this.ORDER)}add(t,n){return A(t+n,this.ORDER)}sub(t,n){return A(t-n,this.ORDER)}mul(t,n){return A(t*n,this.ORDER)}pow(t,n){return fr(this,t,n)}div(t,n){return A(t*Ae(n,this.ORDER),this.ORDER)}sqrN(t){return t*t}addN(t,n){return t+n}subN(t,n){return t-n}mulN(t,n){return t*n}inv(t){return Ae(t,this.ORDER)}sqrt(t){let n=Te.get(this);return n||Te.set(this,n=sr(this.ORDER)),n(this,t)}toBytes(t){return this.isLE?on(t,this.BYTES):rn(t,this.BYTES)}fromBytes(t,n=!1){rt(t);const{_lengths:r,BYTES:o,isLE:s,ORDER:i,_mod:f}=this;if(r){if(t.length<1||!r.includes(t.length)||t.length>o)throw new Error("Field.fromBytes: expected "+r+" bytes, got "+t.length);const c=new Uint8Array(o);c.set(t,s?0:c.length-t.length),t=c}if(t.length!==o)throw new Error("Field.fromBytes: expected "+o+" bytes, got "+t.length);let a=s?_t(t):Gn(t);if(f&&(a=A(a,i)),!n&&!this.isValid(a))throw new Error("invalid field element: outside of range 0..ORDER");return a}invertBatch(t){return hn(this,t)}cmov(t,n,r){return en(r,"condition"),r?n:t}}Object.freeze(pn.prototype);function le(e,t={}){return new pn(e,t)}const Dt=BigInt(0),ne=BigInt(1);function ke(e,t){const n=t.negate();return e?n:t}function Xt(e,t){const n=hn(e.Fp,t.map(r=>r.Z));return t.map((r,o)=>e.fromAffine(r.toAffine(n[o])))}function gn(e,t){if(!Number.isSafeInteger(e)||e<=0||e>t)throw new Error("invalid window size, expected [1.."+t+"], got W="+e)}function Kt(e,t){gn(e,t);const n=Math.ceil(t/e)+1,r=2**(e-1),o=2**e,s=tr(e),i=BigInt(e);return{windows:n,windowSize:r,mask:s,maxNumber:o,shiftBy:i}}function Ue(e,t,n){const{windowSize:r,mask:o,maxNumber:s,shiftBy:i}=n;let f=Number(e&o),a=e>>i;f>r&&(f-=s,a+=ne);const c=t*r,u=c+Math.abs(f)-1,l=f===0,y=f<0,p=t%2!==0;return{nextN:a,offset:u,isZero:l,isNeg:y,isNegF:p,offsetF:c}}const Pt=new WeakMap,wn=new WeakMap;function Gt(e){return wn.get(e)||1}function Ne(e){if(e!==Dt)throw new Error("invalid wNAF")}class ur{BASE;ZERO;Fn;bits;constructor(t,n){this.BASE=t.BASE,this.ZERO=t.ZERO,this.Fn=t.Fn,this.bits=n}_unsafeLadder(t,n,r=this.ZERO){let o=t;for(;n>Dt;)n&ne&&(r=r.add(o)),o=o.double(),n>>=ne;return r}precomputeWindow(t,n){const{windows:r,windowSize:o}=Kt(n,this.bits),s=[];let i=t,f=i;for(let a=0;a<r;a++){f=i,s.push(f);for(let c=1;c<o;c++)f=f.add(i),s.push(f);i=f.double()}return s}wNAF(t,n,r){if(!this.Fn.isValid(r))throw new Error("invalid scalar");let o=this.ZERO,s=this.BASE;const i=Kt(t,this.bits);for(let f=0;f<i.windows;f++){const{nextN:a,offset:c,isZero:u,isNeg:l,isNegF:y,offsetF:p}=Ue(r,f,i);r=a,u?s=s.add(ke(y,n[p])):o=o.add(ke(l,n[c]))}return Ne(r),{p:o,f:s}}wNAFUnsafe(t,n,r,o=this.ZERO){const s=Kt(t,this.bits);for(let i=0;i<s.windows&&r!==Dt;i++){const{nextN:f,offset:a,isZero:c,isNeg:u}=Ue(r,i,s);if(r=f,!c){const l=n[a];o=o.add(u?l.negate():l)}}return Ne(r),o}getPrecomputes(t,n,r){let o=Pt.get(n);return o||(o=this.precomputeWindow(n,t),t!==1&&(typeof r=="function"&&(o=r(o)),Pt.set(n,o))),o}cached(t,n,r){const o=Gt(t);return this.wNAF(o,this.getPrecomputes(o,t,r),n)}unsafe(t,n,r,o){const s=Gt(t);return s===1?this._unsafeLadder(t,n,o):this.wNAFUnsafe(s,this.getPrecomputes(s,t,r),n,o)}createCache(t,n){gn(n,this.bits),wn.set(t,n),Pt.delete(t)}hasCache(t){return Gt(t)!==1}}function Fe(e,t,n){if(t){if(t.ORDER!==e)throw new Error("Field.ORDER must match order: Fp == p, Fn == n");return cr(t),t}else return le(e,{isLE:n})}function lr(e,t,n={},r){if(r===void 0&&(r=e==="edwards"),!t||typeof t!="object")throw new Error(`expected valid ${e} CURVE object`);for(const a of["p","n","h"]){const c=t[a];if(!(typeof c=="bigint"&&c>Dt))throw new Error(`CURVE.${a} must be positive bigint`)}const o=Fe(t.p,n.Fp,r),s=Fe(t.n,n.Fn,r),f=["Gx","Gy","a","d"];for(const a of f)if(!o.isValid(t[a]))throw new Error(`CURVE.${a} must be valid field element of CURVE.Fp`);return t=Object.freeze(Object.assign({},t)),{CURVE:t,Fp:o,Fn:s}}function dr(e,t){return function(r){const o=e(r);return{secretKey:o,publicKey:t(o)}}}const et=BigInt(0),H=BigInt(1),Wt=BigInt(2),hr=BigInt(8);function pr(e,t,n,r){const o=e.sqr(n),s=e.sqr(r),i=e.add(e.mul(t.a,o),s),f=e.add(e.ONE,e.mul(t.d,e.mul(o,s)));return e.eql(i,f)}function gr(e,t={}){const n=t,r=lr("edwards",e,n,n.FpFnLE),{Fp:o,Fn:s}=r;let i=r.CURVE;const{h:f}=i;ae(n,{},{uvRatio:"function"});const a=Wt<<BigInt(s.BYTES*8)-H,c=m=>o.create(m),u=n.uvRatio===void 0?(m,d)=>{try{return{isValid:!0,value:o.sqrt(o.div(m,d))}}catch{return{isValid:!1,value:et}}}:n.uvRatio;if(!pr(o,i,i.Gx,i.Gy))throw new Error("bad curve params: generator point");function l(m,d,g=!1){const h=g?H:et;return Zt("coordinate "+m,d,h,a),d}function y(m){if(!(m instanceof p))throw new Error("EdwardsPoint expected")}class p{static BASE=new p(i.Gx,i.Gy,H,c(i.Gx*i.Gy));static ZERO=new p(et,H,H,et);static Fp=o;static Fn=s;X;Y;Z;T;constructor(d,g,h,x){this.X=l("x",d),this.Y=l("y",g),this.Z=l("z",h,!0),this.T=l("t",x),Object.freeze(this)}static CURVE(){return i}static fromAffine(d){if(d instanceof p)throw new Error("extended point not allowed");const{x:g,y:h}=d||{};return l("x",g),l("y",h),new p(g,h,H,c(g*h))}static fromBytes(d,g=!1){const h=o.BYTES,{a:x,d:v}=i;d=It(rt(d,h,"point")),en(g,"zip215");const S=It(d),I=d[h-1];S[h-1]=I&-129;const _=_t(S),w=g?a:o.ORDER;Zt("point.y",_,et,w);const E=c(_*_),k=c(E-H),U=c(v*E-x);let{isValid:$,value:q}=u(k,U);if(!$)throw new Error("bad point: invalid y coordinate");const B=(q&H)===H,O=(I&128)!==0;if(!g&&q===et&&O)throw new Error("bad point: x=0 and x_0=1");return O!==B&&(q=c(-q)),p.fromAffine({x:q,y:_})}static fromHex(d,g=!1){return p.fromBytes(Xn(d),g)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}precompute(d=8,g=!0){return b.createCache(this,d),g||this.multiply(Wt),this}assertValidity(){const d=this,{a:g,d:h}=i;if(d.is0())throw new Error("bad point: ZERO");const{X:x,Y:v,Z:S,T:I}=d,_=c(x*x),w=c(v*v),E=c(S*S),k=c(E*E),U=c(_*g),$=c(E*c(U+w)),q=c(k+c(h*c(_*w)));if($!==q)throw new Error("bad point: equation left != right (1)");const B=c(x*v),O=c(S*I);if(B!==O)throw new Error("bad point: equation left != right (2)")}equals(d){y(d);const{X:g,Y:h,Z:x}=this,{X:v,Y:S,Z:I}=d,_=c(g*I),w=c(v*x),E=c(h*I),k=c(S*x);return _===w&&E===k}is0(){return this.equals(p.ZERO)}negate(){return new p(c(-this.X),this.Y,this.Z,c(-this.T))}double(){const{a:d}=i,{X:g,Y:h,Z:x}=this,v=c(g*g),S=c(h*h),I=c(Wt*c(x*x)),_=c(d*v),w=g+h,E=c(c(w*w)-v-S),k=_+S,U=k-I,$=_-S,q=c(E*U),B=c(k*$),O=c(E*$),C=c(U*k);return new p(q,B,C,O)}add(d){y(d);const{a:g,d:h}=i,{X:x,Y:v,Z:S,T:I}=this,{X:_,Y:w,Z:E,T:k}=d,U=c(x*_),$=c(v*w),q=c(I*h*k),B=c(S*E),O=c((x+v)*(_+w)-U-$),C=B-q,st=B+q,Y=c($-g*U),j=c(O*C),X=c(st*Y),K=c(O*Y),Q=c(C*st);return new p(j,X,Q,K)}subtract(d){return y(d),this.add(d.negate())}multiply(d){if(!s.isValidNot0(d))throw new RangeError("invalid scalar: expected 1 <= sc < curve.n");const{p:g,f:h}=b.cached(this,d,x=>Xt(p,x));return Xt(p,[g,h])[0]}multiplyUnsafe(d){if(!s.isValid(d))throw new RangeError("invalid scalar: expected 0 <= sc < curve.n");return d===et?p.ZERO:this.is0()||d===H?this:b.unsafe(this,d,g=>Xt(p,g))}isSmallOrder(){return this.clearCofactor().is0()}isTorsionFree(){return b.unsafe(this,i.n).is0()}toAffine(d){const g=this;let h=d;const{X:x,Y:v,Z:S}=g,I=g.is0();h==null&&(h=I?hr:o.inv(S));const _=c(x*h),w=c(v*h),E=o.mul(S,h);if(I)return{x:et,y:H};if(E!==H)throw new Error("invZ was invalid");return{x:_,y:w}}clearCofactor(){return f===H?this:this.multiplyUnsafe(f)}toBytes(){const{x:d,y:g}=this.toAffine(),h=o.toBytes(g);return h[h.length-1]|=d&H?128:0,h}toHex(){return tn(this.toBytes())}toString(){return`<Point ${this.is0()?"ZERO":this.toHex()}>`}}const b=new ur(p,s.BITS);return s.BITS>=8&&p.BASE.precompute(8),Object.freeze(p.prototype),Object.freeze(p),p}class wr{static BASE;static ZERO;static Fp;static Fn;ep;constructor(t){this.ep=t}static fromBytes(t){Oe()}static fromHex(t){Oe()}get x(){return this.toAffine().x}get y(){return this.toAffine().y}clearCofactor(){return this}assertValidity(){this.ep.assertValidity()}toAffine(t){return this.ep.toAffine(t)}toHex(){return tn(this.toBytes())}toString(){return this.toHex()}isTorsionFree(){return!0}isSmallOrder(){return!1}add(t){return this.assertSame(t),this.init(this.ep.add(t.ep))}subtract(t){return this.assertSame(t),this.init(this.ep.subtract(t.ep))}multiply(t){return this.init(this.ep.multiply(t))}multiplyUnsafe(t){return this.init(this.ep.multiplyUnsafe(t))}double(){return this.init(this.ep.double())}negate(){return this.init(this.ep.negate())}precompute(t,n){return this.ep.precompute(t,n),this}}const bt=BigInt(0),dt=BigInt(1),At=BigInt(2);function yr(e){return ae(e,{P:"bigint",type:"string",adjustScalarBytes:"function",powPminus2:"function"},{randomBytes:"function"}),Object.freeze({...e})}function mr(e){const t=yr(e),{P:n,type:r,adjustScalarBytes:o,powPminus2:s,randomBytes:i}=t,f=r==="x25519";if(!f&&r!=="x448")throw new Error("invalid type");const a=i===void 0?Kn:i,c=f?255:448,u=f?32:56,l=BigInt(f?9:5),y=BigInt(f?121665:39081),p=f?At**BigInt(254):At**BigInt(447),b=f?BigInt(8)*At**BigInt(251)-dt:BigInt(4)*At**BigInt(445)-dt,m=p+b+dt,d=B=>A(B,n),g=h(l);function h(B){return on(d(B),u)}function x(B){const O=It(rt(B,u,"uCoordinate"));return f&&(O[31]&=127),d(_t(O))}function v(B){return _t(o(It(rt(B,u,"scalar"))))}function S(B,O){const C=k(x(O),v(B));if(C===bt)throw new Error("invalid private or public key received");return h(C)}function I(B){return S(B,g)}const _=I,w=S;function E(B,O,C){const st=d(B*(O-C));return O=d(O-st),C=d(C+st),{x_2:O,x_3:C}}function k(B,O){Zt("u",B,bt,n),Zt("scalar",O,p,m);const C=O,st=B;let Y=dt,j=bt,X=B,K=dt,Q=bt;for(let zt=BigInt(c-1);zt>=bt;zt--){const ge=C>>zt&dt;Q^=ge,{x_2:Y,x_3:X}=E(Q,Y,X),{x_2:j,x_3:K}=E(Q,j,K),Q=ge;const Yt=Y+j,Mt=d(Yt*Yt),jt=Y-j,we=d(jt*jt),ye=Mt-we,Rn=X+K,On=X-K,me=d(On*Yt),be=d(Rn*jt),Ee=me+be,xe=me-be;X=d(Ee*Ee),K=d(st*d(xe*xe)),Y=d(Mt*we),j=d(ye*(Mt+d(y*ye)))}({x_2:Y,x_3:X}=E(Q,Y,X)),{x_2:j,x_3:K}=E(Q,j,K);const In=s(j);return d(Y*In)}const U={secretKey:u,publicKey:u,seed:u},$=B=>(B=B===void 0?a(u):B,rt(B,U.seed,"seed"),B),q={randomSecretKey:$};return Object.freeze(U),Object.freeze(q),Object.freeze({keygen:dr($,_),getSharedSecret:w,getPublicKey:_,scalarMult:S,scalarMultBase:I,utils:q,GuBytes:g.slice(),lengths:U})}const br=BigInt(0),Bt=BigInt(1),qe=BigInt(2),Er=BigInt(3),xr=BigInt(5),vr=BigInt(8),wt=BigInt("0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffed"),yn={p:wt,n:BigInt("0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3ed"),h:vr,a:BigInt("0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec"),d:BigInt("0x52036cee2b6ffe738cc740797779e89800700a4d4141d8ab75eb4dca135978a3"),Gx:BigInt("0x216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a"),Gy:BigInt("0x6666666666666666666666666666666666666666666666666666666666666658")};function mn(e){const t=BigInt(10),n=BigInt(20),r=BigInt(40),o=BigInt(80),s=wt,f=e*e%s*e%s,a=M(f,qe,s)*f%s,c=M(a,Bt,s)*e%s,u=M(c,xr,s)*c%s,l=M(u,t,s)*u%s,y=M(l,n,s)*l%s,p=M(y,r,s)*y%s,b=M(p,o,s)*p%s,m=M(b,o,s)*p%s,d=M(m,t,s)*u%s;return{pow_p_5_8:M(d,qe,s)*e%s,b2:f}}function Br(e){return e[0]&=248,e[31]&=127,e[31]|=64,e}const re=BigInt("19681161376707505956807079304988542015446066515923890162744021073123829784752");function bn(e,t){const n=wt,r=A(t*t*t,n),o=A(r*r*t,n),s=mn(e*o).pow_p_5_8;let i=A(e*r*s,n);const f=A(t*i*i,n),a=i,c=A(i*re,n),u=f===e,l=f===A(-e,n),y=f===A(-e*re,n);return u&&(i=a),(l||y)&&(i=c),ct(i,n)&&(i=A(-i,n)),{isValid:u||l,value:i}}const pt=gr(yn,{uvRatio:bn}),ft=pt.Fp,Sr=pt.Fn,oe=(()=>{const e=wt;return mr({P:e,type:"x25519",powPminus2:t=>{const{pow_p_5_8:n,b2:r}=mn(t);return A(M(n,Er,e)*r,e)},adjustScalarBytes:Br})})(),Ce=re,_r=BigInt("54469307008909316920995813868745141605393597292927456921205312896311721017578"),He=e=>bn(Bt,e),Ir=BigInt("0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"),Rr=e=>ft.create(_t(e)&Ir);class D extends wr{static BASE=new D(pt.BASE);static ZERO=new D(pt.ZERO);static Fp=ft;static Fn=Sr;constructor(t){super(t)}static fromAffine(t){return new D(pt.fromAffine(t))}assertSame(t){if(!(t instanceof D))throw new Error("RistrettoPoint expected")}init(t){return new D(t)}static fromBytes(t){W(t,32);const{a:n,d:r}=yn,o=wt,s=v=>ft.create(v),i=Rr(t);if(!Wn(ft.toBytes(i),t)||ct(i,o))throw new Error("invalid ristretto255 encoding 1");const f=s(i*i),a=s(Bt+n*f),c=s(Bt-n*f),u=s(a*a),l=s(c*c),y=s(n*r*u-l),{isValid:p,value:b}=He(s(y*l)),m=s(b*c),d=s(b*m*y);let g=s((i+i)*m);ct(g,o)&&(g=s(-g));const h=s(a*d),x=s(g*h);if(!p||ct(x,o)||h===br)throw new Error("invalid ristretto255 encoding 2");return new D(new pt(g,h,Bt,x))}static fromHex(t){return D.fromBytes(fe(t))}toBytes(){let{X:t,Y:n,Z:r,T:o}=this.ep;const s=wt,i=d=>ft.create(d),f=i(i(r+n)*i(r-n)),a=i(t*n),c=i(a*a),{value:u}=He(i(f*c)),l=i(u*f),y=i(u*a),p=i(l*y*o);let b;if(ct(o*p,s)){let d=i(n*Ce),g=i(t*Ce);t=d,n=g,b=i(l*_r)}else b=y;ct(t*p,s)&&(n=i(-n));let m=i((r-n)*b);return ct(m,s)&&(m=i(-m)),ft.toBytes(m)}equals(t){this.assertSame(t);const{X:n,Y:r}=this.ep,{X:o,Y:s}=t.ep,i=c=>ft.create(c),f=i(n*s)===i(r*o),a=i(r*s)===i(n*o);return f||a}is0(){return this.equals(D.ZERO)}}Object.freeze(D.BASE);Object.freeze(D.ZERO);Object.freeze(D.prototype);Object.freeze(D);class Ze{oHash;iHash;blockLen;outputLen;canXOF=!1;finished=!1;destroyed=!1;constructor(t,n){if(ie(t),W(n,void 0,"key"),this.iHash=t.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?t.create().update(n).digest():n);for(let s=0;s<o.length;s++)o[s]^=54;this.iHash.update(o),this.oHash=t.create();for(let s=0;s<o.length;s++)o[s]^=106;this.oHash.update(o),St(o)}update(t){return Ct(this),this.iHash.update(t),this}digestInto(t){Ct(this),We(t,this),this.finished=!0;const n=t.subarray(0,this.outputLen);this.iHash.digestInto(n),this.oHash.update(n),this.oHash.digestInto(n),this.destroy()}digest(){const t=new Uint8Array(this.oHash.outputLen);return this.digestInto(t),t}_cloneInto(t){t||=Object.create(Object.getPrototypeOf(this),{});const{oHash:n,iHash:r,finished:o,destroyed:s,blockLen:i,outputLen:f}=this;return t=t,t.finished=o,t.destroyed=s,t.blockLen=i,t.outputLen=f,t.oHash=n._cloneInto(t.oHash),t.iHash=r._cloneInto(t.iHash),t}clone(){return this._cloneInto()}destroy(){this.destroyed=!0,this.oHash.destroy(),this.iHash.destroy()}}const En=(()=>{const e=((t,n,r)=>new Ze(t,n).update(r).digest());return e.create=(t,n)=>new Ze(t,n),e})();function Or(e,t,n){return ie(e),n===void 0&&(n=new Uint8Array(e.outputLen)),En(e,n,t)}const Qt=Uint8Array.of(0),De=Uint8Array.of();function Ar(e,t,n,r=32){ie(e),gt(r,"length"),W(t,void 0,"prk");const o=e.outputLen;if(t.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=De:W(n,void 0,"info");const i=new Uint8Array(s*o),f=En.create(e,t),a=f._cloneInto(),c=new Uint8Array(f.outputLen);for(let u=0;u<s;u++)Qt[0]=u+1,a.update(u===0?De:c).update(n).update(Qt).digestInto(c),i.set(c,o*u),f._cloneInto(a);return f.destroy(),a.destroy(),St(c,Qt),i.slice(0,r)}const Lr=(e,t,n,r,o)=>Ar(e,Or(e,t,n),r,o);function Tr(e){return e instanceof Uint8Array||ArrayBuffer.isView(e)&&e.constructor.name==="Uint8Array"&&"BYTES_PER_ELEMENT"in e&&e.BYTES_PER_ELEMENT===1}function $e(e){if(typeof e!="number")throw new TypeError("number expected, got "+typeof e);if(!Number.isSafeInteger(e)||e<0)throw new RangeError("positive integer expected, got "+e)}function Z(e,t,n=""){const r=Tr(e),o=e?.length,s=t!==void 0;if(!r||s&&o!==t){const i=n&&`"${n}" `,f=s?` of length ${t}`:"",a=r?`length=${o}`:`type=${typeof e}`,c=i+"expected Uint8Array"+f+", got "+a;throw r?new RangeError(c):new TypeError(c)}return e}function ze(e,t=!0){if(e.destroyed)throw new Error("Hash instance has been destroyed");if(t&&e.finished)throw new Error("Hash#digest() has already been called")}function kr(e,t,n=!1){Z(e,void 0,"output");const r=t.outputLen;if(e.length<r)throw new RangeError("digestInto() expects output buffer of length at least "+r);if(n&&!Rt(e))throw new Error("invalid output, must be aligned")}function Ur(e){return new Uint8Array(e.buffer,e.byteOffset,e.byteLength)}function ut(e){return new Uint32Array(e.buffer,e.byteOffset,Math.floor(e.byteLength/4))}function ot(...e){for(let t=0;t<e.length;t++)e[t].fill(0)}function $t(e){return new DataView(e.buffer,e.byteOffset,e.byteLength)}const de=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68,xn=e=>e<<24&4278190080|e<<8&16711680|e>>>8&65280|e>>>24&255,T=de?e=>e:e=>xn(e)>>>0,Nr=e=>{for(let t=0;t<e.length;t++)e[t]=xn(e[t]);return e},he=de?e=>e:Nr;function Fr(e,t){if(e.length!==t.length)return!1;let n=0;for(let r=0;r<e.length;r++)n|=e[r]^t[r];return n===0}function qr(e,t,n){const r=t,o=n||(()=>[]),s=(f,a)=>r(a,...o(f)).update(f).digest(),i=r(new Uint8Array(e),...o(new Uint8Array(0)));return s.outputLen=i.outputLen,s.blockLen=i.blockLen,s.create=(f,...a)=>r(f,...a),s}const Cr=(e,t)=>{function n(r,...o){if(Z(r,void 0,"key"),e.nonceLength!==void 0){const u=o[0];Z(u,e.varSizeNonce?void 0:e.nonceLength,"nonce")}const s=e.tagLength;s&&o[1]!==void 0&&Z(o[1],void 0,"AAD");const i=t(r,...o),f=(u,l)=>{if(l!==void 0){if(u!==2)throw new Error("cipher output not supported");Z(l,void 0,"output")}};let a=!1;return{encrypt(u,l){if(a)throw new Error("cannot encrypt() twice with same key + nonce");return a=!0,Z(u),f(i.encrypt.length,l),i.encrypt(u,l)},decrypt(u,l){if(Z(u),s&&u.length<s)throw new Error('"ciphertext" expected length bigger than tagLength='+s);return f(i.decrypt.length,l),i.decrypt(u,l)}}}return Object.assign(n,e),n};function Hr(e,t,n=!0){if(t===void 0)return new Uint8Array(e);if(Z(t,void 0,"output"),t.length!==e)throw new Error('"output" expected Uint8Array of length '+e+", got: "+t.length);if(n&&!Rt(t))throw new Error("invalid output, must be aligned");return t}function Zr(e,t,n){$e(e),$e(t);const r=new Uint8Array(16),o=$t(r);return o.setBigUint64(0,BigInt(t),n),o.setBigUint64(8,BigInt(e),n),r}function Rt(e){return e.byteOffset%4===0}function Ot(e){return Uint8Array.from(Z(e))}const ht=16,vn=new Uint8Array(16),Et=ut(vn),Dr=225,$r=(e,t,n,r)=>{const o=r&1;return{s3:n<<31|r>>>1,s2:t<<31|n>>>1,s1:e<<31|t>>>1,s0:e>>>1^Dr<<24&-(o&1)}},Lt=e=>(e>>>0&255)<<24|(e>>>8&255)<<16|(e>>>16&255)<<8|e>>>24&255|0,zr=e=>e>64*1024?8:e>1024?4:2;class Yr{blockLen=ht;outputLen=ht;s0=0;s1=0;s2=0;s3=0;finished=!1;destroyed=!1;t;W;windowSize;constructor(t,n){Z(t,16,"key"),t=Ot(t);const r=$t(t);let o=r.getUint32(0,!1),s=r.getUint32(4,!1),i=r.getUint32(8,!1),f=r.getUint32(12,!1);const a=[];for(let b=0;b<128;b++)a.push({s0:Lt(o),s1:Lt(s),s2:Lt(i),s3:Lt(f)}),{s0:o,s1:s,s2:i,s3:f}=$r(o,s,i,f);const c=zr(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 l=128/c,y=this.windowSize=2**c,p=[];for(let b=0;b<l;b++)for(let m=0;m<y;m++){let d=0,g=0,h=0,x=0;for(let v=0;v<c;v++){if(!(m>>>c-v-1&1))continue;const{s0:I,s1:_,s2:w,s3:E}=a[c*b+v];d^=I,g^=_,h^=w,x^=E}p.push({s0:d,s1:g,s2:h,s3:x})}this.t=p}_updateBlock(t,n,r,o){t^=this.s0,n^=this.s1,r^=this.s2,o^=this.s3;const{W:s,t:i,windowSize:f}=this;let a=0,c=0,u=0,l=0;const y=(1<<s)-1;let p=0;for(const b of[t,n,r,o])for(let m=0;m<4;m++){const d=b>>>8*m&255;for(let g=8/s-1;g>=0;g--){const h=d>>>s*g&y,{s0:x,s1:v,s2:S,s3:I}=i[p*f+h];a^=x,c^=v,u^=S,l^=I,p+=1}}this.s0=a,this.s1=c,this.s2=u,this.s3=l}update(t){ze(this),Z(t),t=Ot(t);const n=ut(t),r=Math.floor(t.length/ht),o=t.length%ht;for(let s=0;s<r;s++)this._updateBlock(T(n[s*4+0]),T(n[s*4+1]),T(n[s*4+2]),T(n[s*4+3]));return o&&(vn.set(t.subarray(r*ht)),this._updateBlock(T(Et[0]),T(Et[1]),T(Et[2]),T(Et[3])),ot(Et)),this}destroy(){this.destroyed=!0;const{t}=this;for(const n of t)n.s0=0,n.s1=0,n.s2=0,n.s3=0}digestInto(t){ze(this),kr(t,this,!0),this.finished=!0;const{s0:n,s1:r,s2:o,s3:s}=this,i=ut(t);i[0]=n,i[1]=r,i[2]=o,i[3]=s,he(i)}digest(){const t=new Uint8Array(ht);return this.digestInto(t),this.destroy(),t}}const Ye=qr(16,(e,t)=>new Yr(e,t),e=>[e.length]),se=16,Mr=4,Tt=new Uint8Array(se),jr=283;function Vr(e){if(![16,24,32].includes(e.length))throw new Error('"aes key" expected Uint8Array of length 16/24/32, got length='+e.length)}function pe(e){return e<<1^jr&-(e>>7)}function Me(e,t){let n=0;for(;t>0;t>>=1)n^=e&-(t&1),e=pe(e);return n}const Xr=(()=>{const e=new Uint8Array(256);for(let n=0,r=1;n<256;n++,r^=pe(r))e[n]=r;const t=new Uint8Array(256);t[0]=99;for(let n=0;n<255;n++){let r=e[255-n];r|=r<<8,t[e[n]]=(r^r>>4^r>>5^r>>6^r>>7^99)&255}return ot(e),t})(),Kr=e=>e<<24|e>>>8,Jt=e=>e<<8|e>>>24;function Pr(e,t){if(e.length!==256)throw new Error("Wrong sbox length");const n=new Uint32Array(256).map((c,u)=>t(e[u])),r=n.map(Jt),o=r.map(Jt),s=o.map(Jt),i=new Uint32Array(256*256),f=new Uint32Array(256*256),a=new Uint16Array(256*256);for(let c=0;c<256;c++)for(let u=0;u<256;u++){const l=c*256+u;i[l]=n[c]^r[u],f[l]=o[c]^s[u],a[l]=e[c]<<8|e[u]}return{sbox:e,sbox2:a,T0:n,T1:r,T2:o,T3:s,T01:i,T23:f}}const Bn=Pr(Xr,e=>Me(e,3)<<24|e<<16|e<<8|Me(e,2)),Gr=(()=>{const e=new Uint8Array(16);for(let t=0,n=1;t<16;t++,n=pe(n))e[t]=n;return e})();function Wr(e){Z(e);const t=e.length;Vr(e);const{sbox2:n}=Bn,r=[];(!de||!Rt(e))&&r.push(e=Ot(e));const o=he(ut(e)),s=o.length,i=a=>xt(n,a,a,a,a),f=new Uint32Array(t+28);f.set(o);for(let a=s;a<f.length;a++){let c=f[a-1];a%s===0?c=i(Kr(c))^Gr[a/s-1]:s>6&&a%s===4&&(c=i(c)),f[a]=f[a-s]^c}return ot(...r),f}function kt(e,t,n,r,o,s){return e[n<<8&65280|r>>>8&255]^t[o>>>8&65280|s>>>24&255]}function xt(e,t,n,r,o){return e[t&255|n&65280]|e[r>>>16&255|o>>>16&65280]<<16}function je(e,t,n,r,o){const{sbox2:s,T01:i,T23:f}=Bn;let a=0;t^=e[a++],n^=e[a++],r^=e[a++],o^=e[a++];const c=e.length/4-2;for(let b=0;b<c;b++){const m=e[a++]^kt(i,f,t,n,r,o),d=e[a++]^kt(i,f,n,r,o,t),g=e[a++]^kt(i,f,r,o,t,n),h=e[a++]^kt(i,f,o,t,n,r);t=m,n=d,r=g,o=h}const u=e[a++]^xt(s,t,n,r,o),l=e[a++]^xt(s,n,r,o,t),y=e[a++]^xt(s,r,o,t,n),p=e[a++]^xt(s,o,t,n,r);return{s0:u,s1:l,s2:y,s3:p}}function Ut(e,t,n,r,o){Z(n,se,"nonce"),Z(r),o=Hr(r.length,o);const s=n,i=ut(s),f=$t(s),a=ut(r),c=ut(o),u=t?0:12,l=r.length;let y=f.getUint32(u,t),{s0:p,s1:b,s2:m,s3:d}=je(e,T(i[0]),T(i[1]),T(i[2]),T(i[3]));for(let h=0;h+4<=a.length;h+=4)c[h+0]=a[h+0]^T(p),c[h+1]=a[h+1]^T(b),c[h+2]=a[h+2]^T(m),c[h+3]=a[h+3]^T(d),y=y+1>>>0,f.setUint32(u,y,t),{s0:p,s1:b,s2:m,s3:d}=je(e,T(i[0]),T(i[1]),T(i[2]),T(i[3]));const g=se*Math.floor(a.length/Mr);if(g<l){const h=new Uint32Array([p,b,m,d]);he(h);const x=Ur(h);for(let v=g,S=0;v<l;v++,S++)o[v]=r[v]^x[S];ot(h)}return o}function Qr(e,t,n,r,o){const s=o?o.length:0,i=e.create(n,r.length+s);o&&i.update(o);const f=Zr(8*r.length,8*s,t);i.update(r),i.update(f);const a=i.digest();return ot(f),a}const Ve=Cr({blockSize:16,nonceLength:12,tagLength:16,varSizeNonce:!0},function(t,n,r){if(n.length<8)throw new Error("aes/gcm: invalid nonce length");const o=16;function s(f,a,c){const u=Qr(Ye,!1,f,c,r);for(let l=0;l<a.length;l++)u[l]^=a[l];return u}function i(){const f=Wr(t),a=Tt.slice(),c=Tt.slice();if(Ut(f,!1,c,c,a),n.length===12)c.set(n);else{const l=Tt.slice();$t(l).setBigUint64(8,BigInt(n.length*8),!1);const p=Ye.create(a).update(n).update(l);p.digestInto(c),p.destroy()}const u=Ut(f,!1,c,Tt);return{xk:f,authKey:a,counter:c,tagMask:u}}return{encrypt(f){const{xk:a,authKey:c,counter:u,tagMask:l}=i(),y=new Uint8Array(f.length+o),p=[a,c,u,l];Rt(f)||p.push(f=Ot(f)),Ut(a,!1,u,f,y.subarray(0,f.length));const b=s(c,l,y.subarray(0,y.length-o));return p.push(b),y.set(b,f.length),ot(...p),y},decrypt(f){const{xk:a,authKey:c,counter:u,tagMask:l}=i(),y=[a,c,l,u];Rt(f)||y.push(f=Ot(f));const p=f.subarray(0,-o),b=f.subarray(-o),m=s(c,l,p);if(y.push(m),!Fr(m,b))throw ot(...y),new Error("aes/gcm: invalid ghash tag");const d=Ut(a,!1,u,p);return ot(...y),d}}}),Sn="chainlesschain.remote-session.e2ee.v1",Xe="chainlesschain://remote-session/pair#",te=32,Jr=new TextEncoder,_n=new TextDecoder;function qt(e){return Jr.encode(e)}function Nt(e){let t="";for(const n of e)t+=String.fromCharCode(n);return btoa(t).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function vt(e){const t=String(e).replace(/-/g,"+").replace(/_/g,"/"),n=atob(t),r=new Uint8Array(n.length);for(let o=0;o<n.length;o+=1)r[o]=n.charCodeAt(o);return r}function to(e){const t=new Uint8Array(e);return globalThis.crypto.getRandomValues(t),t}function eo(){const e=oe.utils;return e.randomSecretKey?e.randomSecretKey():e.randomPrivateKey()}function Ke(e,t,n){return qt(`${Sn}
|
|
1
|
+
import{E as An,r as nt,I as z,J as Ln,U as yt,c as U,K as L,S as lt,V as ve,a6 as Be,b as mt,P as it,Q as P,R as Se,a5 as Tn}from"./vendor-BMxUs6UX.js";import{Q as kn}from"./QrScannerModal-IJF2mHyw.js";import{_ as Un}from"./index-CP9m9Ggr.js";import{aw as Nn,aB as Cn}from"./icons-BsDmGpcT.js";import"./markdown-CsiA8-E5.js";function Fn(e){return e instanceof Uint8Array||ArrayBuffer.isView(e)&&e.constructor.name==="Uint8Array"&&"BYTES_PER_ELEMENT"in e&&e.BYTES_PER_ELEMENT===1}function gt(e,t=""){if(typeof e!="number"){const n=t&&`"${t}" `;throw new TypeError(`${n}expected number, got ${typeof e}`)}if(!Number.isSafeInteger(e)||e<0){const n=t&&`"${t}" `;throw new RangeError(`${n}expected integer >= 0, got ${e}`)}}function W(e,t,n=""){const r=Fn(e),o=e?.length,s=t!==void 0;if(!r||s&&o!==t){const i=n&&`"${n}" `,f=s?` of length ${t}`:"",a=r?`length=${o}`:`type=${typeof e}`,c=i+"expected Uint8Array"+f+", got "+a;throw r?new RangeError(c):new TypeError(c)}return e}function ie(e){if(typeof e!="function"||typeof e.create!="function")throw new TypeError("Hash must wrapped by utils.createHasher");if(gt(e.outputLen),gt(e.blockLen),e.outputLen<1)throw new Error('"outputLen" must be >= 1');if(e.blockLen<1)throw new Error('"blockLen" must be >= 1')}function qt(e,t=!0){if(e.destroyed)throw new Error("Hash instance has been destroyed");if(t&&e.finished)throw new Error("Hash#digest() has already been called")}function We(e,t){W(e,void 0,"digestInto() output");const n=t.outputLen;if(e.length<n)throw new RangeError('"digestInto() output" expected to be of length >='+n)}function St(...e){for(let t=0;t<e.length;t++)e[t].fill(0)}function Vt(e){return new DataView(e.buffer,e.byteOffset,e.byteLength)}function V(e,t){return e<<32-t|e>>>t}const Qe=typeof Uint8Array.from([]).toHex=="function"&&typeof Uint8Array.fromHex=="function",qn=Array.from({length:256},(e,t)=>t.toString(16).padStart(2,"0"));function ce(e){if(W(e),Qe)return e.toHex();let t="";for(let n=0;n<e.length;n++)t+=qn[e[n]];return t}const G={_0:48,_9:57,A:65,F:70,a:97,f:102};function _e(e){if(e>=G._0&&e<=G._9)return e-G._0;if(e>=G.A&&e<=G.F)return e-(G.A-10);if(e>=G.a&&e<=G.f)return e-(G.a-10)}function fe(e){if(typeof e!="string")throw new TypeError("hex string expected, got "+typeof e);if(Qe)try{return Uint8Array.fromHex(e)}catch(o){throw o instanceof SyntaxError?new RangeError(o.message):o}const t=e.length,n=t/2;if(t%2)throw new RangeError("hex string expected, got unpadded hex of length "+t);const r=new Uint8Array(n);for(let o=0,s=0;o<n;o++,s+=2){const i=_e(e.charCodeAt(s)),f=_e(e.charCodeAt(s+1));if(i===void 0||f===void 0){const a=e[s]+e[s+1];throw new RangeError('hex string expected, got non-hex character "'+a+'" at index '+s)}r[o]=i*16+f}return r}function Hn(e,t={}){const n=(o,s)=>e(s).update(o).digest(),r=e(void 0);return n.outputLen=r.outputLen,n.blockLen=r.blockLen,n.canXOF=r.canXOF,n.create=o=>e(o),Object.assign(n,t),Object.freeze(n)}function Zn(e=32){gt(e,"bytesLength");const t=typeof globalThis=="object"?globalThis.crypto:null;if(typeof t?.getRandomValues!="function")throw new Error("crypto.getRandomValues must be defined");if(e>65536)throw new RangeError(`"bytesLength" expected <= 65536, got ${e}`);return t.getRandomValues(new Uint8Array(e))}const Dn=e=>({oid:Uint8Array.from([6,9,96,134,72,1,101,3,4,2,e])});function $n(e,t,n){return e&t^~e&n}function zn(e,t,n){return e&t^e&n^t&n}class Yn{blockLen;outputLen;canXOF=!1;padOffset;isLE;buffer;view;finished=!1;length=0;pos=0;destroyed=!1;constructor(t,n,r,o){this.blockLen=t,this.outputLen=n,this.padOffset=r,this.isLE=o,this.buffer=new Uint8Array(t),this.view=Vt(this.buffer)}update(t){qt(this),W(t);const{view:n,buffer:r,blockLen:o}=this,s=t.length;for(let i=0;i<s;){const f=Math.min(o-this.pos,s-i);if(f===o){const a=Vt(t);for(;o<=s-i;i+=o)this.process(a,i);continue}r.set(t.subarray(i,i+f),this.pos),this.pos+=f,i+=f,this.pos===o&&(this.process(n,0),this.pos=0)}return this.length+=t.length,this.roundClean(),this}digestInto(t){qt(this),We(t,this),this.finished=!0;const{buffer:n,view:r,blockLen:o,isLE:s}=this;let{pos:i}=this;n[i++]=128,St(this.buffer.subarray(i)),this.padOffset>o-i&&(this.process(r,0),i=0);for(let l=i;l<o;l++)n[l]=0;r.setBigUint64(o-8,BigInt(this.length*8),s),this.process(r,0);const f=Vt(t),a=this.outputLen;if(a%4)throw new Error("_sha2: outputLen must be aligned to 32bit");const c=a/4,u=this.get();if(c>u.length)throw new Error("_sha2: outputLen bigger than state");for(let l=0;l<c;l++)f.setUint32(4*l,u[l],s)}digest(){const{buffer:t,outputLen:n}=this;this.digestInto(t);const r=t.slice(0,n);return this.destroy(),r}_cloneInto(t){t||=new this.constructor,t.set(...this.get());const{blockLen:n,buffer:r,length:o,finished:s,destroyed:i,pos:f}=this;return t.destroyed=i,t.finished=s,t.length=o,t.pos=f,o%n&&t.buffer.set(r),t}clone(){return this._cloneInto()}}const J=Uint32Array.from([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),Mn=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]),tt=new Uint32Array(64);class jn extends Yn{constructor(t){super(64,t,8,!1)}get(){const{A:t,B:n,C:r,D:o,E:s,F:i,G:f,H:a}=this;return[t,n,r,o,s,i,f,a]}set(t,n,r,o,s,i,f,a){this.A=t|0,this.B=n|0,this.C=r|0,this.D=o|0,this.E=s|0,this.F=i|0,this.G=f|0,this.H=a|0}process(t,n){for(let l=0;l<16;l++,n+=4)tt[l]=t.getUint32(n,!1);for(let l=16;l<64;l++){const w=tt[l-15],p=tt[l-2],m=V(w,7)^V(w,18)^w>>>3,y=V(p,17)^V(p,19)^p>>>10;tt[l]=y+tt[l-7]+m+tt[l-16]|0}let{A:r,B:o,C:s,D:i,E:f,F:a,G:c,H:u}=this;for(let l=0;l<64;l++){const w=V(f,6)^V(f,11)^V(f,25),p=u+w+$n(f,a,c)+Mn[l]+tt[l]|0,y=(V(r,2)^V(r,13)^V(r,22))+zn(r,o,s)|0;u=c,c=a,a=f,f=i+p|0,i=s,s=o,o=r,r=p+y|0}r=r+this.A|0,o=o+this.B|0,s=s+this.C|0,i=i+this.D|0,f=f+this.E|0,a=a+this.F|0,c=c+this.G|0,u=u+this.H|0,this.set(r,o,s,i,f,a,c,u)}roundClean(){St(tt)}destroy(){this.destroyed=!0,this.set(0,0,0,0,0,0,0,0),St(this.buffer)}}class Vn extends jn{A=J[0]|0;B=J[1]|0;C=J[2]|0;D=J[3]|0;E=J[4]|0;F=J[5]|0;G=J[6]|0;H=J[7]|0;constructor(){super(32)}}const Ie=Hn(()=>new Vn,Dn(1));const rt=(e,t,n)=>W(e,t,n),Je=gt,tn=ce,Xn=e=>fe(e),Kn=e=>Zn(e),Ht=BigInt(0),ee=BigInt(1);function en(e,t=""){if(typeof e!="boolean"){const n=t&&`"${t}" `;throw new TypeError(n+"expected boolean, got type="+typeof e)}return e}function Pn(e){if(typeof e=="bigint"){if(!Ct(e))throw new RangeError("positive bigint expected, got "+e)}else Je(e);return e}function Re(e,t=""){if(typeof e!="number"){const n=t&&`"${t}" `;throw new TypeError(n+"expected number, got type="+typeof e)}if(!Number.isSafeInteger(e)){const n=t&&`"${t}" `;throw new RangeError(n+"expected safe integer, got "+e)}}function nn(e){if(typeof e!="string")throw new TypeError("hex string expected, got "+typeof e);return e===""?Ht:BigInt("0x"+e)}function Gn(e){return nn(ce(e))}function _t(e){return nn(ce(It(W(e)).reverse()))}function rn(e,t){if(gt(t),t===0)throw new RangeError("zero length");e=Pn(e);const n=e.toString(16);if(n.length>t*2)throw new RangeError("number too large");return fe(n.padStart(t*2,"0"))}function on(e,t){return rn(e,t).reverse()}function Wn(e,t){if(e=rt(e),t=rt(t),e.length!==t.length)return!1;let n=0;for(let r=0;r<e.length;r++)n|=e[r]^t[r];return n===0}function It(e){return Uint8Array.from(rt(e))}const Ct=e=>typeof e=="bigint"&&Ht<=e;function Qn(e,t,n){return Ct(e)&&Ct(t)&&Ct(n)&&t<=e&&e<n}function Zt(e,t,n,r){if(!Qn(t,n,r))throw new RangeError("expected valid "+e+": "+n+" <= n < "+r+", got "+t)}function Jn(e){if(e<Ht)throw new Error("expected non-negative bigint, got "+e);let t;for(t=0;e>Ht;e>>=ee,t+=1);return t}const tr=e=>(ee<<BigInt(e))-ee;function ae(e,t={},n={}){if(Object.prototype.toString.call(e)!=="[object Object]")throw new TypeError("expected valid options object");function r(s,i,f){if(!f&&i!=="function"&&!Object.hasOwn(e,s))throw new TypeError(`param "${s}" is invalid: expected own property`);const a=e[s];if(f&&a===void 0)return;const c=typeof a;if(c!==i||a===null)throw new TypeError(`param "${s}" is invalid: expected ${i}, got ${c}`)}const o=(s,i)=>Object.entries(s).forEach(([f,a])=>r(f,a,i));o(t,!1),o(n,!0)}const Oe=()=>{throw new Error("not implemented")};const q=BigInt(0),F=BigInt(1),at=BigInt(2),sn=BigInt(3),cn=BigInt(4),fn=BigInt(5),er=BigInt(7),an=BigInt(8),nr=BigInt(9),un=BigInt(16);function k(e,t){if(t<=q)throw new Error("mod: expected positive modulus, got "+t);const n=e%t;return n>=q?n:t+n}function M(e,t,n){if(t<q)throw new Error("pow2: expected non-negative exponent, got "+t);let r=e;for(;t-- >q;)r*=r,r%=n;return r}function Ae(e,t){if(e===q)throw new Error("invert: expected non-zero number");if(t<=q)throw new Error("invert: expected positive modulus, got "+t);let n=k(e,t),r=t,o=q,s=F;for(;n!==q;){const f=r/n,a=r-n*f,c=o-s*f;r=n,n=a,o=s,s=c}if(r!==F)throw new Error("invert: does not exist");return k(o,t)}function ue(e,t,n){const r=e;if(!r.eql(r.sqr(t),n))throw new Error("Cannot find square root")}function ln(e,t){const n=e,r=(n.ORDER+F)/cn,o=n.pow(t,r);return ue(n,o,t),o}function rr(e,t){const n=e,r=(n.ORDER-fn)/an,o=n.mul(t,at),s=n.pow(o,r),i=n.mul(t,s),f=n.mul(n.mul(i,at),s),a=n.mul(i,n.sub(f,n.ONE));return ue(n,a,t),a}function or(e){const t=le(e),n=dn(e),r=n(t,t.neg(t.ONE)),o=n(t,r),s=n(t,t.neg(r)),i=(e+er)/un;return((f,a)=>{const c=f;let u=c.pow(a,i),l=c.mul(u,r);const w=c.mul(u,o),p=c.mul(u,s),m=c.eql(c.sqr(l),a),y=c.eql(c.sqr(w),a);u=c.cmov(u,l,m),l=c.cmov(p,w,y);const d=c.eql(c.sqr(l),a),g=c.cmov(u,l,d);return ue(c,g,a),g})}function dn(e){if(e<sn)throw new Error("sqrt is not defined for small field");let t=e-F,n=0;for(;t%at===q;)t/=at,n++;let r=at;const o=le(e);for(;Le(o,r)===1;)if(r++>1e3)throw new Error("Cannot find square root: probably non-prime P");if(n===1)return ln;let s=o.pow(r,t);const i=(t+F)/at;return function(a,c){const u=a;if(u.is0(c))return c;if(Le(u,c)!==1)throw new Error("Cannot find square root");let l=n,w=u.mul(u.ONE,s),p=u.pow(c,t),m=u.pow(c,i);for(;!u.eql(p,u.ONE);){if(u.is0(p))return u.ZERO;let y=1,d=u.sqr(p);for(;!u.eql(d,u.ONE);)if(y++,d=u.sqr(d),y===l)throw new Error("Cannot find square root");const g=F<<BigInt(l-y-1),h=u.pow(w,g);l=y,w=u.sqr(h),p=u.mul(p,w),m=u.mul(m,h)}return m}}function sr(e){return e%cn===sn?ln:e%an===fn?rr:e%un===nr?or(e):dn(e)}const ct=(e,t)=>(k(e,t)&F)===F,ir=["create","isValid","is0","neg","inv","sqrt","sqr","eql","add","sub","mul","pow","div","addN","subN","mulN","sqrN"];function cr(e){const t={ORDER:"bigint",BYTES:"number",BITS:"number"},n=ir.reduce((r,o)=>(r[o]="function",r),t);if(ae(e,n),Re(e.BYTES,"BYTES"),Re(e.BITS,"BITS"),e.BYTES<1||e.BITS<1)throw new Error("invalid field: expected BYTES/BITS > 0");if(e.ORDER<=F)throw new Error("invalid field: expected ORDER > 1, got "+e.ORDER);return e}function fr(e,t,n){const r=e;if(n<q)throw new Error("invalid exponent, negatives unsupported");if(n===q)return r.ONE;if(n===F)return t;let o=r.ONE,s=t;for(;n>q;)n&F&&(o=r.mul(o,s)),s=r.sqr(s),n>>=F;return o}function hn(e,t,n=!1){const r=e,o=new Array(t.length).fill(n?r.ZERO:void 0),s=t.reduce((f,a,c)=>r.is0(a)?f:(o[c]=f,r.mul(f,a)),r.ONE),i=r.inv(s);return t.reduceRight((f,a,c)=>r.is0(a)?f:(o[c]=r.mul(f,o[c]),r.mul(f,a)),i),o}function Le(e,t){const n=e,r=(n.ORDER-F)/at,o=n.pow(t,r),s=n.eql(o,n.ONE),i=n.eql(o,n.ZERO),f=n.eql(o,n.neg(n.ONE));if(!s&&!i&&!f)throw new Error("invalid Legendre symbol result");return s?1:i?0:-1}function ar(e,t){if(t!==void 0&&Je(t),e<=q)throw new Error("invalid n length: expected positive n, got "+e);if(t!==void 0&&t<1)throw new Error("invalid n length: expected positive bit length, got "+t);const n=Jn(e);if(t!==void 0&&t<n)throw new Error(`invalid n length: expected bit length (${n}) >= n.length (${t})`);const r=t!==void 0?t:n,o=Math.ceil(r/8);return{nBitLength:r,nByteLength:o}}const Te=new WeakMap;class pn{ORDER;BITS;BYTES;isLE;ZERO=q;ONE=F;_lengths;_mod;constructor(t,n={}){if(t<=F)throw new Error("invalid field: expected ORDER > 1, got "+t);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}=ar(t,r);if(s>2048)throw new Error("invalid field: expected ORDER of <= 2048 bytes");this.ORDER=t,this.BITS=o,this.BYTES=s,Object.freeze(this)}create(t){return k(t,this.ORDER)}isValid(t){if(typeof t!="bigint")throw new TypeError("invalid field element: expected bigint, got "+typeof t);return q<=t&&t<this.ORDER}is0(t){return t===q}isValidNot0(t){return!this.is0(t)&&this.isValid(t)}isOdd(t){return(t&F)===F}neg(t){return k(-t,this.ORDER)}eql(t,n){return t===n}sqr(t){return k(t*t,this.ORDER)}add(t,n){return k(t+n,this.ORDER)}sub(t,n){return k(t-n,this.ORDER)}mul(t,n){return k(t*n,this.ORDER)}pow(t,n){return fr(this,t,n)}div(t,n){return k(t*Ae(n,this.ORDER),this.ORDER)}sqrN(t){return t*t}addN(t,n){return t+n}subN(t,n){return t-n}mulN(t,n){return t*n}inv(t){return Ae(t,this.ORDER)}sqrt(t){let n=Te.get(this);return n||Te.set(this,n=sr(this.ORDER)),n(this,t)}toBytes(t){return this.isLE?on(t,this.BYTES):rn(t,this.BYTES)}fromBytes(t,n=!1){rt(t);const{_lengths:r,BYTES:o,isLE:s,ORDER:i,_mod:f}=this;if(r){if(t.length<1||!r.includes(t.length)||t.length>o)throw new Error("Field.fromBytes: expected "+r+" bytes, got "+t.length);const c=new Uint8Array(o);c.set(t,s?0:c.length-t.length),t=c}if(t.length!==o)throw new Error("Field.fromBytes: expected "+o+" bytes, got "+t.length);let a=s?_t(t):Gn(t);if(f&&(a=k(a,i)),!n&&!this.isValid(a))throw new Error("invalid field element: outside of range 0..ORDER");return a}invertBatch(t){return hn(this,t)}cmov(t,n,r){return en(r,"condition"),r?n:t}}Object.freeze(pn.prototype);function le(e,t={}){return new pn(e,t)}const Dt=BigInt(0),ne=BigInt(1);function ke(e,t){const n=t.negate();return e?n:t}function Xt(e,t){const n=hn(e.Fp,t.map(r=>r.Z));return t.map((r,o)=>e.fromAffine(r.toAffine(n[o])))}function gn(e,t){if(!Number.isSafeInteger(e)||e<=0||e>t)throw new Error("invalid window size, expected [1.."+t+"], got W="+e)}function Kt(e,t){gn(e,t);const n=Math.ceil(t/e)+1,r=2**(e-1),o=2**e,s=tr(e),i=BigInt(e);return{windows:n,windowSize:r,mask:s,maxNumber:o,shiftBy:i}}function Ue(e,t,n){const{windowSize:r,mask:o,maxNumber:s,shiftBy:i}=n;let f=Number(e&o),a=e>>i;f>r&&(f-=s,a+=ne);const c=t*r,u=c+Math.abs(f)-1,l=f===0,w=f<0,p=t%2!==0;return{nextN:a,offset:u,isZero:l,isNeg:w,isNegF:p,offsetF:c}}const Pt=new WeakMap,wn=new WeakMap;function Gt(e){return wn.get(e)||1}function Ne(e){if(e!==Dt)throw new Error("invalid wNAF")}class ur{BASE;ZERO;Fn;bits;constructor(t,n){this.BASE=t.BASE,this.ZERO=t.ZERO,this.Fn=t.Fn,this.bits=n}_unsafeLadder(t,n,r=this.ZERO){let o=t;for(;n>Dt;)n&ne&&(r=r.add(o)),o=o.double(),n>>=ne;return r}precomputeWindow(t,n){const{windows:r,windowSize:o}=Kt(n,this.bits),s=[];let i=t,f=i;for(let a=0;a<r;a++){f=i,s.push(f);for(let c=1;c<o;c++)f=f.add(i),s.push(f);i=f.double()}return s}wNAF(t,n,r){if(!this.Fn.isValid(r))throw new Error("invalid scalar");let o=this.ZERO,s=this.BASE;const i=Kt(t,this.bits);for(let f=0;f<i.windows;f++){const{nextN:a,offset:c,isZero:u,isNeg:l,isNegF:w,offsetF:p}=Ue(r,f,i);r=a,u?s=s.add(ke(w,n[p])):o=o.add(ke(l,n[c]))}return Ne(r),{p:o,f:s}}wNAFUnsafe(t,n,r,o=this.ZERO){const s=Kt(t,this.bits);for(let i=0;i<s.windows&&r!==Dt;i++){const{nextN:f,offset:a,isZero:c,isNeg:u}=Ue(r,i,s);if(r=f,!c){const l=n[a];o=o.add(u?l.negate():l)}}return Ne(r),o}getPrecomputes(t,n,r){let o=Pt.get(n);return o||(o=this.precomputeWindow(n,t),t!==1&&(typeof r=="function"&&(o=r(o)),Pt.set(n,o))),o}cached(t,n,r){const o=Gt(t);return this.wNAF(o,this.getPrecomputes(o,t,r),n)}unsafe(t,n,r,o){const s=Gt(t);return s===1?this._unsafeLadder(t,n,o):this.wNAFUnsafe(s,this.getPrecomputes(s,t,r),n,o)}createCache(t,n){gn(n,this.bits),wn.set(t,n),Pt.delete(t)}hasCache(t){return Gt(t)!==1}}function Ce(e,t,n){if(t){if(t.ORDER!==e)throw new Error("Field.ORDER must match order: Fp == p, Fn == n");return cr(t),t}else return le(e,{isLE:n})}function lr(e,t,n={},r){if(r===void 0&&(r=e==="edwards"),!t||typeof t!="object")throw new Error(`expected valid ${e} CURVE object`);for(const a of["p","n","h"]){const c=t[a];if(!(typeof c=="bigint"&&c>Dt))throw new Error(`CURVE.${a} must be positive bigint`)}const o=Ce(t.p,n.Fp,r),s=Ce(t.n,n.Fn,r),f=["Gx","Gy","a","d"];for(const a of f)if(!o.isValid(t[a]))throw new Error(`CURVE.${a} must be valid field element of CURVE.Fp`);return t=Object.freeze(Object.assign({},t)),{CURVE:t,Fp:o,Fn:s}}function dr(e,t){return function(r){const o=e(r);return{secretKey:o,publicKey:t(o)}}}const et=BigInt(0),Z=BigInt(1),Wt=BigInt(2),hr=BigInt(8);function pr(e,t,n,r){const o=e.sqr(n),s=e.sqr(r),i=e.add(e.mul(t.a,o),s),f=e.add(e.ONE,e.mul(t.d,e.mul(o,s)));return e.eql(i,f)}function gr(e,t={}){const n=t,r=lr("edwards",e,n,n.FpFnLE),{Fp:o,Fn:s}=r;let i=r.CURVE;const{h:f}=i;ae(n,{},{uvRatio:"function"});const a=Wt<<BigInt(s.BYTES*8)-Z,c=y=>o.create(y),u=n.uvRatio===void 0?(y,d)=>{try{return{isValid:!0,value:o.sqrt(o.div(y,d))}}catch{return{isValid:!1,value:et}}}:n.uvRatio;if(!pr(o,i,i.Gx,i.Gy))throw new Error("bad curve params: generator point");function l(y,d,g=!1){const h=g?Z:et;return Zt("coordinate "+y,d,h,a),d}function w(y){if(!(y instanceof p))throw new Error("EdwardsPoint expected")}class p{static BASE=new p(i.Gx,i.Gy,Z,c(i.Gx*i.Gy));static ZERO=new p(et,Z,Z,et);static Fp=o;static Fn=s;X;Y;Z;T;constructor(d,g,h,E){this.X=l("x",d),this.Y=l("y",g),this.Z=l("z",h,!0),this.T=l("t",E),Object.freeze(this)}static CURVE(){return i}static fromAffine(d){if(d instanceof p)throw new Error("extended point not allowed");const{x:g,y:h}=d||{};return l("x",g),l("y",h),new p(g,h,Z,c(g*h))}static fromBytes(d,g=!1){const h=o.BYTES,{a:E,d:v}=i;d=It(rt(d,h,"point")),en(g,"zip215");const _=It(d),A=d[h-1];_[h-1]=A&-129;const O=_t(_),x=g?a:o.ORDER;Zt("point.y",O,et,x);const I=c(O*O),b=c(I-Z),B=c(v*I-E);let{isValid:R,value:C}=u(b,B);if(!R)throw new Error("bad point: invalid y coordinate");const S=(C&Z)===Z,T=(A&128)!==0;if(!g&&C===et&&T)throw new Error("bad point: x=0 and x_0=1");return T!==S&&(C=c(-C)),p.fromAffine({x:C,y:O})}static fromHex(d,g=!1){return p.fromBytes(Xn(d),g)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}precompute(d=8,g=!0){return m.createCache(this,d),g||this.multiply(Wt),this}assertValidity(){const d=this,{a:g,d:h}=i;if(d.is0())throw new Error("bad point: ZERO");const{X:E,Y:v,Z:_,T:A}=d,O=c(E*E),x=c(v*v),I=c(_*_),b=c(I*I),B=c(O*g),R=c(I*c(B+x)),C=c(b+c(h*c(O*x)));if(R!==C)throw new Error("bad point: equation left != right (1)");const S=c(E*v),T=c(_*A);if(S!==T)throw new Error("bad point: equation left != right (2)")}equals(d){w(d);const{X:g,Y:h,Z:E}=this,{X:v,Y:_,Z:A}=d,O=c(g*A),x=c(v*E),I=c(h*A),b=c(_*E);return O===x&&I===b}is0(){return this.equals(p.ZERO)}negate(){return new p(c(-this.X),this.Y,this.Z,c(-this.T))}double(){const{a:d}=i,{X:g,Y:h,Z:E}=this,v=c(g*g),_=c(h*h),A=c(Wt*c(E*E)),O=c(d*v),x=g+h,I=c(c(x*x)-v-_),b=O+_,B=b-A,R=O-_,C=c(I*B),S=c(b*R),T=c(I*R),H=c(B*b);return new p(C,S,H,T)}add(d){w(d);const{a:g,d:h}=i,{X:E,Y:v,Z:_,T:A}=this,{X:O,Y:x,Z:I,T:b}=d,B=c(E*O),R=c(v*x),C=c(A*h*b),S=c(_*I),T=c((E+v)*(O+x)-B-R),H=S-C,st=S+C,Y=c(R-g*B),j=c(T*H),X=c(st*Y),K=c(T*Y),Q=c(H*st);return new p(j,X,Q,K)}subtract(d){return w(d),this.add(d.negate())}multiply(d){if(!s.isValidNot0(d))throw new RangeError("invalid scalar: expected 1 <= sc < curve.n");const{p:g,f:h}=m.cached(this,d,E=>Xt(p,E));return Xt(p,[g,h])[0]}multiplyUnsafe(d){if(!s.isValid(d))throw new RangeError("invalid scalar: expected 0 <= sc < curve.n");return d===et?p.ZERO:this.is0()||d===Z?this:m.unsafe(this,d,g=>Xt(p,g))}isSmallOrder(){return this.clearCofactor().is0()}isTorsionFree(){return m.unsafe(this,i.n).is0()}toAffine(d){const g=this;let h=d;const{X:E,Y:v,Z:_}=g,A=g.is0();h==null&&(h=A?hr:o.inv(_));const O=c(E*h),x=c(v*h),I=o.mul(_,h);if(A)return{x:et,y:Z};if(I!==Z)throw new Error("invZ was invalid");return{x:O,y:x}}clearCofactor(){return f===Z?this:this.multiplyUnsafe(f)}toBytes(){const{x:d,y:g}=this.toAffine(),h=o.toBytes(g);return h[h.length-1]|=d&Z?128:0,h}toHex(){return tn(this.toBytes())}toString(){return`<Point ${this.is0()?"ZERO":this.toHex()}>`}}const m=new ur(p,s.BITS);return s.BITS>=8&&p.BASE.precompute(8),Object.freeze(p.prototype),Object.freeze(p),p}class wr{static BASE;static ZERO;static Fp;static Fn;ep;constructor(t){this.ep=t}static fromBytes(t){Oe()}static fromHex(t){Oe()}get x(){return this.toAffine().x}get y(){return this.toAffine().y}clearCofactor(){return this}assertValidity(){this.ep.assertValidity()}toAffine(t){return this.ep.toAffine(t)}toHex(){return tn(this.toBytes())}toString(){return this.toHex()}isTorsionFree(){return!0}isSmallOrder(){return!1}add(t){return this.assertSame(t),this.init(this.ep.add(t.ep))}subtract(t){return this.assertSame(t),this.init(this.ep.subtract(t.ep))}multiply(t){return this.init(this.ep.multiply(t))}multiplyUnsafe(t){return this.init(this.ep.multiplyUnsafe(t))}double(){return this.init(this.ep.double())}negate(){return this.init(this.ep.negate())}precompute(t,n){return this.ep.precompute(t,n),this}}const bt=BigInt(0),dt=BigInt(1),At=BigInt(2);function yr(e){return ae(e,{P:"bigint",type:"string",adjustScalarBytes:"function",powPminus2:"function"},{randomBytes:"function"}),Object.freeze({...e})}function mr(e){const t=yr(e),{P:n,type:r,adjustScalarBytes:o,powPminus2:s,randomBytes:i}=t,f=r==="x25519";if(!f&&r!=="x448")throw new Error("invalid type");const a=i===void 0?Kn:i,c=f?255:448,u=f?32:56,l=BigInt(f?9:5),w=BigInt(f?121665:39081),p=f?At**BigInt(254):At**BigInt(447),m=f?BigInt(8)*At**BigInt(251)-dt:BigInt(4)*At**BigInt(445)-dt,y=p+m+dt,d=S=>k(S,n),g=h(l);function h(S){return on(d(S),u)}function E(S){const T=It(rt(S,u,"uCoordinate"));return f&&(T[31]&=127),d(_t(T))}function v(S){return _t(o(It(rt(S,u,"scalar"))))}function _(S,T){const H=b(E(T),v(S));if(H===bt)throw new Error("invalid private or public key received");return h(H)}function A(S){return _(S,g)}const O=A,x=_;function I(S,T,H){const st=d(S*(T-H));return T=d(T-st),H=d(H+st),{x_2:T,x_3:H}}function b(S,T){Zt("u",S,bt,n),Zt("scalar",T,p,y);const H=T,st=S;let Y=dt,j=bt,X=S,K=dt,Q=bt;for(let zt=BigInt(c-1);zt>=bt;zt--){const ge=H>>zt&dt;Q^=ge,{x_2:Y,x_3:X}=I(Q,Y,X),{x_2:j,x_3:K}=I(Q,j,K),Q=ge;const Yt=Y+j,Mt=d(Yt*Yt),jt=Y-j,we=d(jt*jt),ye=Mt-we,Rn=X+K,On=X-K,me=d(On*Yt),be=d(Rn*jt),Ee=me+be,xe=me-be;X=d(Ee*Ee),K=d(st*d(xe*xe)),Y=d(Mt*we),j=d(ye*(Mt+d(w*ye)))}({x_2:Y,x_3:X}=I(Q,Y,X)),{x_2:j,x_3:K}=I(Q,j,K);const In=s(j);return d(Y*In)}const B={secretKey:u,publicKey:u,seed:u},R=S=>(S=S===void 0?a(u):S,rt(S,B.seed,"seed"),S),C={randomSecretKey:R};return Object.freeze(B),Object.freeze(C),Object.freeze({keygen:dr(R,O),getSharedSecret:x,getPublicKey:O,scalarMult:_,scalarMultBase:A,utils:C,GuBytes:g.slice(),lengths:B})}const br=BigInt(0),Bt=BigInt(1),Fe=BigInt(2),Er=BigInt(3),xr=BigInt(5),vr=BigInt(8),wt=BigInt("0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffed"),yn={p:wt,n:BigInt("0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3ed"),h:vr,a:BigInt("0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec"),d:BigInt("0x52036cee2b6ffe738cc740797779e89800700a4d4141d8ab75eb4dca135978a3"),Gx:BigInt("0x216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a"),Gy:BigInt("0x6666666666666666666666666666666666666666666666666666666666666658")};function mn(e){const t=BigInt(10),n=BigInt(20),r=BigInt(40),o=BigInt(80),s=wt,f=e*e%s*e%s,a=M(f,Fe,s)*f%s,c=M(a,Bt,s)*e%s,u=M(c,xr,s)*c%s,l=M(u,t,s)*u%s,w=M(l,n,s)*l%s,p=M(w,r,s)*w%s,m=M(p,o,s)*p%s,y=M(m,o,s)*p%s,d=M(y,t,s)*u%s;return{pow_p_5_8:M(d,Fe,s)*e%s,b2:f}}function Br(e){return e[0]&=248,e[31]&=127,e[31]|=64,e}const re=BigInt("19681161376707505956807079304988542015446066515923890162744021073123829784752");function bn(e,t){const n=wt,r=k(t*t*t,n),o=k(r*r*t,n),s=mn(e*o).pow_p_5_8;let i=k(e*r*s,n);const f=k(t*i*i,n),a=i,c=k(i*re,n),u=f===e,l=f===k(-e,n),w=f===k(-e*re,n);return u&&(i=a),(l||w)&&(i=c),ct(i,n)&&(i=k(-i,n)),{isValid:u||l,value:i}}const pt=gr(yn,{uvRatio:bn}),ft=pt.Fp,Sr=pt.Fn,oe=(()=>{const e=wt;return mr({P:e,type:"x25519",powPminus2:t=>{const{pow_p_5_8:n,b2:r}=mn(t);return k(M(n,Er,e)*r,e)},adjustScalarBytes:Br})})(),qe=re,_r=BigInt("54469307008909316920995813868745141605393597292927456921205312896311721017578"),He=e=>bn(Bt,e),Ir=BigInt("0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"),Rr=e=>ft.create(_t(e)&Ir);class $ extends wr{static BASE=new $(pt.BASE);static ZERO=new $(pt.ZERO);static Fp=ft;static Fn=Sr;constructor(t){super(t)}static fromAffine(t){return new $(pt.fromAffine(t))}assertSame(t){if(!(t instanceof $))throw new Error("RistrettoPoint expected")}init(t){return new $(t)}static fromBytes(t){W(t,32);const{a:n,d:r}=yn,o=wt,s=v=>ft.create(v),i=Rr(t);if(!Wn(ft.toBytes(i),t)||ct(i,o))throw new Error("invalid ristretto255 encoding 1");const f=s(i*i),a=s(Bt+n*f),c=s(Bt-n*f),u=s(a*a),l=s(c*c),w=s(n*r*u-l),{isValid:p,value:m}=He(s(w*l)),y=s(m*c),d=s(m*y*w);let g=s((i+i)*y);ct(g,o)&&(g=s(-g));const h=s(a*d),E=s(g*h);if(!p||ct(E,o)||h===br)throw new Error("invalid ristretto255 encoding 2");return new $(new pt(g,h,Bt,E))}static fromHex(t){return $.fromBytes(fe(t))}toBytes(){let{X:t,Y:n,Z:r,T:o}=this.ep;const s=wt,i=d=>ft.create(d),f=i(i(r+n)*i(r-n)),a=i(t*n),c=i(a*a),{value:u}=He(i(f*c)),l=i(u*f),w=i(u*a),p=i(l*w*o);let m;if(ct(o*p,s)){let d=i(n*qe),g=i(t*qe);t=d,n=g,m=i(l*_r)}else m=w;ct(t*p,s)&&(n=i(-n));let y=i((r-n)*m);return ct(y,s)&&(y=i(-y)),ft.toBytes(y)}equals(t){this.assertSame(t);const{X:n,Y:r}=this.ep,{X:o,Y:s}=t.ep,i=c=>ft.create(c),f=i(n*s)===i(r*o),a=i(r*s)===i(n*o);return f||a}is0(){return this.equals($.ZERO)}}Object.freeze($.BASE);Object.freeze($.ZERO);Object.freeze($.prototype);Object.freeze($);class Ze{oHash;iHash;blockLen;outputLen;canXOF=!1;finished=!1;destroyed=!1;constructor(t,n){if(ie(t),W(n,void 0,"key"),this.iHash=t.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?t.create().update(n).digest():n);for(let s=0;s<o.length;s++)o[s]^=54;this.iHash.update(o),this.oHash=t.create();for(let s=0;s<o.length;s++)o[s]^=106;this.oHash.update(o),St(o)}update(t){return qt(this),this.iHash.update(t),this}digestInto(t){qt(this),We(t,this),this.finished=!0;const n=t.subarray(0,this.outputLen);this.iHash.digestInto(n),this.oHash.update(n),this.oHash.digestInto(n),this.destroy()}digest(){const t=new Uint8Array(this.oHash.outputLen);return this.digestInto(t),t}_cloneInto(t){t||=Object.create(Object.getPrototypeOf(this),{});const{oHash:n,iHash:r,finished:o,destroyed:s,blockLen:i,outputLen:f}=this;return t=t,t.finished=o,t.destroyed=s,t.blockLen=i,t.outputLen=f,t.oHash=n._cloneInto(t.oHash),t.iHash=r._cloneInto(t.iHash),t}clone(){return this._cloneInto()}destroy(){this.destroyed=!0,this.oHash.destroy(),this.iHash.destroy()}}const En=(()=>{const e=((t,n,r)=>new Ze(t,n).update(r).digest());return e.create=(t,n)=>new Ze(t,n),e})();function Or(e,t,n){return ie(e),n===void 0&&(n=new Uint8Array(e.outputLen)),En(e,n,t)}const Qt=Uint8Array.of(0),De=Uint8Array.of();function Ar(e,t,n,r=32){ie(e),gt(r,"length"),W(t,void 0,"prk");const o=e.outputLen;if(t.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=De:W(n,void 0,"info");const i=new Uint8Array(s*o),f=En.create(e,t),a=f._cloneInto(),c=new Uint8Array(f.outputLen);for(let u=0;u<s;u++)Qt[0]=u+1,a.update(u===0?De:c).update(n).update(Qt).digestInto(c),i.set(c,o*u),f._cloneInto(a);return f.destroy(),a.destroy(),St(c,Qt),i.slice(0,r)}const Lr=(e,t,n,r,o)=>Ar(e,Or(e,t,n),r,o);function Tr(e){return e instanceof Uint8Array||ArrayBuffer.isView(e)&&e.constructor.name==="Uint8Array"&&"BYTES_PER_ELEMENT"in e&&e.BYTES_PER_ELEMENT===1}function $e(e){if(typeof e!="number")throw new TypeError("number expected, got "+typeof e);if(!Number.isSafeInteger(e)||e<0)throw new RangeError("positive integer expected, got "+e)}function D(e,t,n=""){const r=Tr(e),o=e?.length,s=t!==void 0;if(!r||s&&o!==t){const i=n&&`"${n}" `,f=s?` of length ${t}`:"",a=r?`length=${o}`:`type=${typeof e}`,c=i+"expected Uint8Array"+f+", got "+a;throw r?new RangeError(c):new TypeError(c)}return e}function ze(e,t=!0){if(e.destroyed)throw new Error("Hash instance has been destroyed");if(t&&e.finished)throw new Error("Hash#digest() has already been called")}function kr(e,t,n=!1){D(e,void 0,"output");const r=t.outputLen;if(e.length<r)throw new RangeError("digestInto() expects output buffer of length at least "+r);if(n&&!Rt(e))throw new Error("invalid output, must be aligned")}function Ur(e){return new Uint8Array(e.buffer,e.byteOffset,e.byteLength)}function ut(e){return new Uint32Array(e.buffer,e.byteOffset,Math.floor(e.byteLength/4))}function ot(...e){for(let t=0;t<e.length;t++)e[t].fill(0)}function $t(e){return new DataView(e.buffer,e.byteOffset,e.byteLength)}const de=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68,xn=e=>e<<24&4278190080|e<<8&16711680|e>>>8&65280|e>>>24&255,N=de?e=>e:e=>xn(e)>>>0,Nr=e=>{for(let t=0;t<e.length;t++)e[t]=xn(e[t]);return e},he=de?e=>e:Nr;function Cr(e,t){if(e.length!==t.length)return!1;let n=0;for(let r=0;r<e.length;r++)n|=e[r]^t[r];return n===0}function Fr(e,t,n){const r=t,o=n||(()=>[]),s=(f,a)=>r(a,...o(f)).update(f).digest(),i=r(new Uint8Array(e),...o(new Uint8Array(0)));return s.outputLen=i.outputLen,s.blockLen=i.blockLen,s.create=(f,...a)=>r(f,...a),s}const qr=(e,t)=>{function n(r,...o){if(D(r,void 0,"key"),e.nonceLength!==void 0){const u=o[0];D(u,e.varSizeNonce?void 0:e.nonceLength,"nonce")}const s=e.tagLength;s&&o[1]!==void 0&&D(o[1],void 0,"AAD");const i=t(r,...o),f=(u,l)=>{if(l!==void 0){if(u!==2)throw new Error("cipher output not supported");D(l,void 0,"output")}};let a=!1;return{encrypt(u,l){if(a)throw new Error("cannot encrypt() twice with same key + nonce");return a=!0,D(u),f(i.encrypt.length,l),i.encrypt(u,l)},decrypt(u,l){if(D(u),s&&u.length<s)throw new Error('"ciphertext" expected length bigger than tagLength='+s);return f(i.decrypt.length,l),i.decrypt(u,l)}}}return Object.assign(n,e),n};function Hr(e,t,n=!0){if(t===void 0)return new Uint8Array(e);if(D(t,void 0,"output"),t.length!==e)throw new Error('"output" expected Uint8Array of length '+e+", got: "+t.length);if(n&&!Rt(t))throw new Error("invalid output, must be aligned");return t}function Zr(e,t,n){$e(e),$e(t);const r=new Uint8Array(16),o=$t(r);return o.setBigUint64(0,BigInt(t),n),o.setBigUint64(8,BigInt(e),n),r}function Rt(e){return e.byteOffset%4===0}function Ot(e){return Uint8Array.from(D(e))}const ht=16,vn=new Uint8Array(16),Et=ut(vn),Dr=225,$r=(e,t,n,r)=>{const o=r&1;return{s3:n<<31|r>>>1,s2:t<<31|n>>>1,s1:e<<31|t>>>1,s0:e>>>1^Dr<<24&-(o&1)}},Lt=e=>(e>>>0&255)<<24|(e>>>8&255)<<16|(e>>>16&255)<<8|e>>>24&255|0,zr=e=>e>64*1024?8:e>1024?4:2;class Yr{blockLen=ht;outputLen=ht;s0=0;s1=0;s2=0;s3=0;finished=!1;destroyed=!1;t;W;windowSize;constructor(t,n){D(t,16,"key"),t=Ot(t);const r=$t(t);let o=r.getUint32(0,!1),s=r.getUint32(4,!1),i=r.getUint32(8,!1),f=r.getUint32(12,!1);const a=[];for(let m=0;m<128;m++)a.push({s0:Lt(o),s1:Lt(s),s2:Lt(i),s3:Lt(f)}),{s0:o,s1:s,s2:i,s3:f}=$r(o,s,i,f);const c=zr(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 l=128/c,w=this.windowSize=2**c,p=[];for(let m=0;m<l;m++)for(let y=0;y<w;y++){let d=0,g=0,h=0,E=0;for(let v=0;v<c;v++){if(!(y>>>c-v-1&1))continue;const{s0:A,s1:O,s2:x,s3:I}=a[c*m+v];d^=A,g^=O,h^=x,E^=I}p.push({s0:d,s1:g,s2:h,s3:E})}this.t=p}_updateBlock(t,n,r,o){t^=this.s0,n^=this.s1,r^=this.s2,o^=this.s3;const{W:s,t:i,windowSize:f}=this;let a=0,c=0,u=0,l=0;const w=(1<<s)-1;let p=0;for(const m of[t,n,r,o])for(let y=0;y<4;y++){const d=m>>>8*y&255;for(let g=8/s-1;g>=0;g--){const h=d>>>s*g&w,{s0:E,s1:v,s2:_,s3:A}=i[p*f+h];a^=E,c^=v,u^=_,l^=A,p+=1}}this.s0=a,this.s1=c,this.s2=u,this.s3=l}update(t){ze(this),D(t),t=Ot(t);const n=ut(t),r=Math.floor(t.length/ht),o=t.length%ht;for(let s=0;s<r;s++)this._updateBlock(N(n[s*4+0]),N(n[s*4+1]),N(n[s*4+2]),N(n[s*4+3]));return o&&(vn.set(t.subarray(r*ht)),this._updateBlock(N(Et[0]),N(Et[1]),N(Et[2]),N(Et[3])),ot(Et)),this}destroy(){this.destroyed=!0;const{t}=this;for(const n of t)n.s0=0,n.s1=0,n.s2=0,n.s3=0}digestInto(t){ze(this),kr(t,this,!0),this.finished=!0;const{s0:n,s1:r,s2:o,s3:s}=this,i=ut(t);i[0]=n,i[1]=r,i[2]=o,i[3]=s,he(i)}digest(){const t=new Uint8Array(ht);return this.digestInto(t),this.destroy(),t}}const Ye=Fr(16,(e,t)=>new Yr(e,t),e=>[e.length]),se=16,Mr=4,Tt=new Uint8Array(se),jr=283;function Vr(e){if(![16,24,32].includes(e.length))throw new Error('"aes key" expected Uint8Array of length 16/24/32, got length='+e.length)}function pe(e){return e<<1^jr&-(e>>7)}function Me(e,t){let n=0;for(;t>0;t>>=1)n^=e&-(t&1),e=pe(e);return n}const Xr=(()=>{const e=new Uint8Array(256);for(let n=0,r=1;n<256;n++,r^=pe(r))e[n]=r;const t=new Uint8Array(256);t[0]=99;for(let n=0;n<255;n++){let r=e[255-n];r|=r<<8,t[e[n]]=(r^r>>4^r>>5^r>>6^r>>7^99)&255}return ot(e),t})(),Kr=e=>e<<24|e>>>8,Jt=e=>e<<8|e>>>24;function Pr(e,t){if(e.length!==256)throw new Error("Wrong sbox length");const n=new Uint32Array(256).map((c,u)=>t(e[u])),r=n.map(Jt),o=r.map(Jt),s=o.map(Jt),i=new Uint32Array(256*256),f=new Uint32Array(256*256),a=new Uint16Array(256*256);for(let c=0;c<256;c++)for(let u=0;u<256;u++){const l=c*256+u;i[l]=n[c]^r[u],f[l]=o[c]^s[u],a[l]=e[c]<<8|e[u]}return{sbox:e,sbox2:a,T0:n,T1:r,T2:o,T3:s,T01:i,T23:f}}const Bn=Pr(Xr,e=>Me(e,3)<<24|e<<16|e<<8|Me(e,2)),Gr=(()=>{const e=new Uint8Array(16);for(let t=0,n=1;t<16;t++,n=pe(n))e[t]=n;return e})();function Wr(e){D(e);const t=e.length;Vr(e);const{sbox2:n}=Bn,r=[];(!de||!Rt(e))&&r.push(e=Ot(e));const o=he(ut(e)),s=o.length,i=a=>xt(n,a,a,a,a),f=new Uint32Array(t+28);f.set(o);for(let a=s;a<f.length;a++){let c=f[a-1];a%s===0?c=i(Kr(c))^Gr[a/s-1]:s>6&&a%s===4&&(c=i(c)),f[a]=f[a-s]^c}return ot(...r),f}function kt(e,t,n,r,o,s){return e[n<<8&65280|r>>>8&255]^t[o>>>8&65280|s>>>24&255]}function xt(e,t,n,r,o){return e[t&255|n&65280]|e[r>>>16&255|o>>>16&65280]<<16}function je(e,t,n,r,o){const{sbox2:s,T01:i,T23:f}=Bn;let a=0;t^=e[a++],n^=e[a++],r^=e[a++],o^=e[a++];const c=e.length/4-2;for(let m=0;m<c;m++){const y=e[a++]^kt(i,f,t,n,r,o),d=e[a++]^kt(i,f,n,r,o,t),g=e[a++]^kt(i,f,r,o,t,n),h=e[a++]^kt(i,f,o,t,n,r);t=y,n=d,r=g,o=h}const u=e[a++]^xt(s,t,n,r,o),l=e[a++]^xt(s,n,r,o,t),w=e[a++]^xt(s,r,o,t,n),p=e[a++]^xt(s,o,t,n,r);return{s0:u,s1:l,s2:w,s3:p}}function Ut(e,t,n,r,o){D(n,se,"nonce"),D(r),o=Hr(r.length,o);const s=n,i=ut(s),f=$t(s),a=ut(r),c=ut(o),u=t?0:12,l=r.length;let w=f.getUint32(u,t),{s0:p,s1:m,s2:y,s3:d}=je(e,N(i[0]),N(i[1]),N(i[2]),N(i[3]));for(let h=0;h+4<=a.length;h+=4)c[h+0]=a[h+0]^N(p),c[h+1]=a[h+1]^N(m),c[h+2]=a[h+2]^N(y),c[h+3]=a[h+3]^N(d),w=w+1>>>0,f.setUint32(u,w,t),{s0:p,s1:m,s2:y,s3:d}=je(e,N(i[0]),N(i[1]),N(i[2]),N(i[3]));const g=se*Math.floor(a.length/Mr);if(g<l){const h=new Uint32Array([p,m,y,d]);he(h);const E=Ur(h);for(let v=g,_=0;v<l;v++,_++)o[v]=r[v]^E[_];ot(h)}return o}function Qr(e,t,n,r,o){const s=o?o.length:0,i=e.create(n,r.length+s);o&&i.update(o);const f=Zr(8*r.length,8*s,t);i.update(r),i.update(f);const a=i.digest();return ot(f),a}const Ve=qr({blockSize:16,nonceLength:12,tagLength:16,varSizeNonce:!0},function(t,n,r){if(n.length<8)throw new Error("aes/gcm: invalid nonce length");const o=16;function s(f,a,c){const u=Qr(Ye,!1,f,c,r);for(let l=0;l<a.length;l++)u[l]^=a[l];return u}function i(){const f=Wr(t),a=Tt.slice(),c=Tt.slice();if(Ut(f,!1,c,c,a),n.length===12)c.set(n);else{const l=Tt.slice();$t(l).setBigUint64(8,BigInt(n.length*8),!1);const p=Ye.create(a).update(n).update(l);p.digestInto(c),p.destroy()}const u=Ut(f,!1,c,Tt);return{xk:f,authKey:a,counter:c,tagMask:u}}return{encrypt(f){const{xk:a,authKey:c,counter:u,tagMask:l}=i(),w=new Uint8Array(f.length+o),p=[a,c,u,l];Rt(f)||p.push(f=Ot(f)),Ut(a,!1,u,f,w.subarray(0,f.length));const m=s(c,l,w.subarray(0,w.length-o));return p.push(m),w.set(m,f.length),ot(...p),w},decrypt(f){const{xk:a,authKey:c,counter:u,tagMask:l}=i(),w=[a,c,l,u];Rt(f)||w.push(f=Ot(f));const p=f.subarray(0,-o),m=f.subarray(-o),y=s(c,l,p);if(w.push(y),!Cr(y,m))throw ot(...w),new Error("aes/gcm: invalid ghash tag");const d=Ut(a,!1,u,p);return ot(...w),d}}}),Sn="chainlesschain.remote-session.e2ee.v1",Xe="chainlesschain://remote-session/pair#",te=32,Jr=new TextEncoder,_n=new TextDecoder;function Ft(e){return Jr.encode(e)}function Nt(e){let t="";for(const n of e)t+=String.fromCharCode(n);return btoa(t).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function vt(e){const t=String(e).replace(/-/g,"+").replace(/_/g,"/"),n=atob(t),r=new Uint8Array(n.length);for(let o=0;o<n.length;o+=1)r[o]=n.charCodeAt(o);return r}function to(e){const t=new Uint8Array(e);return globalThis.crypto.getRandomValues(t),t}function eo(){const e=oe.utils;return e.randomSecretKey?e.randomSecretKey():e.randomPrivateKey()}function Ke(e,t,n){return Ft(`${Sn}
|
|
2
2
|
${e}
|
|
3
3
|
${t}
|
|
4
|
-
${n}`)}function no(e,t=Date.now()){if(typeof e!="string"||!e.startsWith(Xe))throw new Error("Invalid Remote Session pairing URI");let n;try{n=JSON.parse(_n.decode(vt(e.slice(Xe.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<=t)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 ro{constructor(t,n){if(!t||!n)throw new Error("sessionId and localPeerId are required");this.sessionId=t,this.localPeerId=n,this.secretKey=eo(),this.publicKey=oe.getPublicKey(this.secretKey),this.key=null,this.sendSequence=0,this.receivedSequences=new Map}publicKeyBase64(){return Nt(this.publicKey)}pair(t,n){if(!t||!n)throw new Error("Incomplete peer key material");const r=vt(t),o=r.length===te?r:r.slice(-te);if(o.length!==te)throw new Error("Invalid X25519 host public key");const s=oe.getSharedSecret(this.secretKey,o),i=Ie(qt(n));this.key=Lr(Ie,s,i,qt(`${Sn}:${this.sessionId}`),32)}encrypt(t){if(!this.key)throw new Error("Remote Session is not paired");const n=this.sendSequence+=1,r=to(12),o=Ve(this.key,r,Ke(this.sessionId,this.localPeerId,n)).encrypt(qt(JSON.stringify(t)));return{v:1,sessionId:this.sessionId,senderId:this.localPeerId,sequence:n,nonce:Nt(r),ciphertext:Nt(o.slice(0,o.length-16)),tag:Nt(o.slice(o.length-16))}}decrypt(t){if(t?.v!==1||t.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(t.senderId)||0;if(!Number.isSafeInteger(t.sequence)||t.sequence<=n)throw new Error("Remote Session replay or out-of-order envelope rejected");const r=new Uint8Array([...vt(t.ciphertext),...vt(t.tag)]),o=Ve(this.key,vt(t.nonce),Ke(this.sessionId,t.senderId,t.sequence)).decrypt(r);return this.receivedSequences.set(t.senderId,t.sequence),JSON.parse(_n.decode(o))}}const oo=1e3,so=3e4;let Pe=0;function io(){return`web-${globalThis.crypto?.randomUUID?globalThis.crypto.randomUUID():`${Date.now()}-${Math.random().toString(36).slice(2)}`}`}const Ge=An("remoteSession",()=>{const e=nt("idle"),t=nt([]),n=nt(""),r=nt(null);let o=null,s=null,i=null,f=null,a=!1,c=!1,u=0,l=null;function y(){l&&(clearTimeout(l),l=null)}function p(){if(!i)return;const w=new WebSocket(i.relayUrl);o=w,w.addEventListener("open",()=>{w===o&&w.send(JSON.stringify({type:"register",peerId:f,deviceType:"web",deviceInfo:{protocol:"remote-session.e2ee.v1"}}))}),w.addEventListener("message",E=>{w===o&&m(E.data)}),w.addEventListener("close",()=>{w===o&&(o=null,c?e.value="disconnected":b())}),w.addEventListener("error",()=>{w===o&&(n.value="Remote Session relay connection error")})}function b(){if(c||l)return;const w=Math.min(oo*2**u,so);u+=1,e.value="reconnecting",l=setTimeout(()=>{l=null,c||p()},w)}function m(w){try{let E=JSON.parse(typeof w=="string"?w:String(w));if(E.type==="offline-message"&&(E=E.originalMessage||{}),E.type==="registered"){a?e.value="connected":(e.value="pairing",g());return}if(E.type!=="message")return;const k=E.payload;if(!k||k.type!=="remote-session.encrypted")return;const U=s.decrypt(k.envelope);U.type==="pair.accepted"?(a=!0,u=0,e.value="connected"):U.type==="session.revoked"?(c=!0,a=!1,y(),o&&o.close(),o=null,e.value="revoked"):(Pe+=1,t.value=[...t.value,{...U,_id:Pe,_rxAt:Date.now()}].slice(-200))}catch(E){e.value="error",n.value=E?.message||"Remote Session protocol error"}}function d(w,E){return!o||o.readyState!==WebSocket.OPEN||!i?!1:(o.send(JSON.stringify({type:"message",to:i.hostPeerId,payload:{type:w,...E}})),!0)}function g(){const w=s.encrypt({type:"pair.join",remoteSessionId:i.remoteSessionId,token:i.pairingToken});d("remote-session.pair",{mobilePeerId:f,mobilePublicKey:s.publicKeyBase64(),envelope:w})}function h(w){return!o||o.readyState!==WebSocket.OPEN||!a?!1:d("remote-session.encrypted",{envelope:s.encrypt(w)})}function x(w){_();try{const E=no(w);return f=io(),s=new ro(E.remoteSessionId,f),s.pair(E.hostPublicKey,E.pairingToken),i=E,r.value=E.remoteSessionId,a=!1,c=!1,u=0,n.value="",t.value=[],e.value="connecting",p(),!0}catch(E){return e.value="error",n.value=E?.message||"Invalid pairing link",!1}}function v(w){const E=(w||"").trim();E&&(h({type:"prompt",content:E})||(n.value="Remote Session is not connected"))}function S(w,E){h({type:"approval.resolve",requestId:w,approved:E})}function I(){h({type:"interrupt"})}function _(){if(c=!0,a=!1,y(),o)try{o.close()}catch{}o=null,e.value!=="revoked"&&(e.value="disconnected")}return{status:e,events:t,error:n,remoteSessionId:r,connect:x,sendPrompt:v,approve:S,interrupt:I,disconnect:_}}),co={__name:"RemoteSession",setup(e,{expose:t}){t();const n=Ge(),{status:r,events:o,error:s}=Be(n),i=nt(""),f=nt(""),a=nt(!1),c=mt(()=>["connecting","pairing","connected","reconnecting"].includes(r.value)),u=mt(()=>({idle:"未连接",connecting:"连接中",pairing:"配对中",connected:"已连接",reconnecting:"重连中",disconnected:"已断开",revoked:"已被撤销",error:"错误"})[r.value]||r.value),l=mt(()=>r.value==="connected"?"green":["connecting","pairing","reconnecting"].includes(r.value)?"blue":["revoked","error"].includes(r.value)?"red":"default"),y=mt(()=>[...o.value].reverse());function p(w){return String(w?.type||"").includes("approval")}function b(w){return w?.content||w?.payload?.content||w?.message||""}function m(w){return w?.requestId||w?.approvalId||""}function d(){n.connect(i.value.trim())}function g(w){a.value=!1,w&&(i.value=w,n.connect(w))}function h(w){const E=typeof w=="string"?w:f.value;n.sendPrompt(E),f.value=""}function x(w,E){n.approve(m(w),E)}function v(){n.interrupt()}function S(){n.disconnect()}function I(){s.value=""}const _={store:n,status:r,events:o,error:s,pairingLink:i,promptText:f,scannerOpen:a,isActive:c,statusLabel:u,statusColor:l,orderedEvents:y,isApproval:p,eventBody:b,requestIdOf:m,connect:d,onScanned:g,send:h,respond:x,interrupt:v,disconnect:S,clearError:I,computed:mt,ref:nt,get storeToRefs(){return Be},get LinkOutlined(){return Fn},get ScanOutlined(){return Nn},QrScannerModal:kn,get useRemoteSessionStore(){return Ge}};return Object.defineProperty(_,"__isScriptSetup",{enumerable:!1,value:!0}),_}},fo={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}};function ao(e,t,n,r,o,s){const i=z("a-tag"),f=z("a-alert"),a=z("a-textarea"),c=z("a-button"),u=z("a-space"),l=z("a-card"),y=z("a-input-search"),p=z("a-spin"),b=z("a-empty"),m=z("a-list-item-meta"),d=z("a-list-item"),g=z("a-list");return it(),Ln("div",null,[yt("div",fo,[t[4]||(t[4]=yt("div",null,[yt("h2",{class:"page-title"},"远程会话"),yt("p",{class:"page-sub"},"扫码或粘贴桌面端的配对链接,端到端加密接管一个编码会话(观察 / 提示 / 审批 / 中断)")],-1)),L(i,{color:r.statusColor},{default:R(()=>[P(Se(r.statusLabel),1)]),_:1},8,["color"])]),r.error?(it(),lt(f,{key:0,type:"error","show-icon":"",style:{"margin-bottom":"16px"},message:r.error,closable:"",onClose:r.clearError},null,8,["message"])):ve("v-if",!0),r.isActive?(it(),lt(l,{key:2,title:"会话控制",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"}},{extra:R(()=>[L(u,null,{default:R(()=>[L(c,{size:"small",onClick:r.interrupt},{default:R(()=>[...t[8]||(t[8]=[P("中断",-1)])]),_:1}),L(c,{size:"small",danger:"",onClick:r.disconnect},{default:R(()=>[...t[9]||(t[9]=[P("断开",-1)])]),_:1})]),_:1})]),default:R(()=>[L(u,{direction:"vertical",style:{width:"100%"},size:8},{default:R(()=>[L(y,{value:r.promptText,"onUpdate:value":t[2]||(t[2]=h=>r.promptText=h),placeholder:"发送提示到远程会话…","enter-button":"发送",disabled:r.status!=="connected",onSearch:r.send},null,8,["value","disabled"]),r.status==="reconnecting"?(it(),lt(p,{key:0,size:"small"},{tip:R(()=>[...t[10]||(t[10]=[P("正在重连…",-1)])]),_:1})):ve("v-if",!0)]),_:1})]),_:1})):(it(),lt(l,{key:1,title:"连接远程会话",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"}},{default:R(()=>[L(u,{direction:"vertical",style:{width:"100%"},size:12},{default:R(()=>[L(a,{value:r.pairingLink,"onUpdate:value":t[0]||(t[0]=h=>r.pairingLink=h),rows:3,placeholder:"chainlesschain://remote-session/pair#...","allow-clear":""},null,8,["value"]),L(u,null,{default:R(()=>[L(c,{type:"primary",disabled:!r.pairingLink.trim(),onClick:r.connect},{icon:R(()=>[L(r.LinkOutlined)]),default:R(()=>[t[5]||(t[5]=P(" 连接 ",-1))]),_:1},8,["disabled"]),L(c,{onClick:t[1]||(t[1]=h=>r.scannerOpen=!0)},{icon:R(()=>[L(r.ScanOutlined)]),default:R(()=>[t[6]||(t[6]=P(" 扫码 ",-1))]),_:1})]),_:1}),t[7]||(t[7]=yt("p",{class:"page-sub",style:{margin:"0"}}," 链接为一次性配对码,敏感载荷仅在片段(#)中,不会发往服务器。 ",-1))]),_:1})]),_:1})),L(l,{title:"会话事件",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:R(()=>[r.events.length?(it(),lt(g,{key:1,size:"small","data-source":r.orderedEvents},{renderItem:R(({item:h})=>[L(d,null,Tn({default:R(()=>[L(m,{description:r.eventBody(h)},{title:R(()=>[L(i,{color:r.isApproval(h)?"orange":"blue"},{default:R(()=>[P(Se(h.type||"event"),1)]),_:2},1032,["color"])]),_:2},1032,["description"])]),_:2},[r.isApproval(h)?{name:"actions",fn:R(()=>[L(c,{type:"link",size:"small",onClick:x=>r.respond(h,!0)},{default:R(()=>[...t[11]||(t[11]=[P("批准",-1)])]),_:1},8,["onClick"]),L(c,{type:"link",size:"small",danger:"",onClick:x=>r.respond(h,!1)},{default:R(()=>[...t[12]||(t[12]=[P("拒绝",-1)])]),_:1},8,["onClick"])]),key:"0"}:void 0]),1024)]),_:1},8,["data-source"])):(it(),lt(b,{key:0,description:"尚无事件"}))]),_:1}),L(r.QrScannerModal,{open:r.scannerOpen,onScanned:r.onScanned,onCancel:t[3]||(t[3]=h=>r.scannerOpen=!1)},null,8,["open"])])}const wo=Un(co,[["render",ao],["__file","/tmp/cc-web-panel-w66Hyb/repo/packages/web-panel/src/views/RemoteSession.vue"]]);export{wo as default};
|
|
4
|
+
${n}`)}function no(e,t=Date.now()){if(typeof e!="string"||!e.startsWith(Xe))throw new Error("Invalid Remote Session pairing URI");let n;try{n=JSON.parse(_n.decode(vt(e.slice(Xe.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<=t)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 ro{constructor(t,n){if(!t||!n)throw new Error("sessionId and localPeerId are required");this.sessionId=t,this.localPeerId=n,this.secretKey=eo(),this.publicKey=oe.getPublicKey(this.secretKey),this.key=null,this.sendSequence=0,this.receivedSequences=new Map}publicKeyBase64(){return Nt(this.publicKey)}pair(t,n){if(!t||!n)throw new Error("Incomplete peer key material");const r=vt(t),o=r.length===te?r:r.slice(-te);if(o.length!==te)throw new Error("Invalid X25519 host public key");const s=oe.getSharedSecret(this.secretKey,o),i=Ie(Ft(n));this.key=Lr(Ie,s,i,Ft(`${Sn}:${this.sessionId}`),32)}encrypt(t){if(!this.key)throw new Error("Remote Session is not paired");const n=this.sendSequence+=1,r=to(12),o=Ve(this.key,r,Ke(this.sessionId,this.localPeerId,n)).encrypt(Ft(JSON.stringify(t)));return{v:1,sessionId:this.sessionId,senderId:this.localPeerId,sequence:n,nonce:Nt(r),ciphertext:Nt(o.slice(0,o.length-16)),tag:Nt(o.slice(o.length-16))}}decrypt(t){if(t?.v!==1||t.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(t.senderId)||0;if(!Number.isSafeInteger(t.sequence)||t.sequence<=n)throw new Error("Remote Session replay or out-of-order envelope rejected");const r=new Uint8Array([...vt(t.ciphertext),...vt(t.tag)]),o=Ve(this.key,vt(t.nonce),Ke(this.sessionId,t.senderId,t.sequence)).decrypt(r);return this.receivedSequences.set(t.senderId,t.sequence),JSON.parse(_n.decode(o))}}const oo=1e3,so=3e4;let Pe=0;function io(){return`web-${globalThis.crypto?.randomUUID?globalThis.crypto.randomUUID():`${Date.now()}-${Math.random().toString(36).slice(2)}`}`}const Ge=An("remoteSession",()=>{const e=nt("idle"),t=nt([]),n=nt(""),r=nt(null);let o=null,s=null,i=null,f=null,a=!1,c=!1,u=0,l=null,w=null;function p(){l&&(clearTimeout(l),l=null)}function m(){if(!i)return;const b=new WebSocket(i.relayUrl);o=b,b.addEventListener("open",()=>{b===o&&b.send(JSON.stringify({type:"register",peerId:f,deviceType:"web",deviceInfo:{protocol:"remote-session.e2ee.v1"}}))}),b.addEventListener("message",B=>{b===o&&d(B.data)}),b.addEventListener("close",()=>{b===o&&(o=null,c?e.value="disconnected":y())}),b.addEventListener("error",()=>{b===o&&(n.value="Remote Session relay connection error")})}function y(){if(c||l)return;const b=Math.min(oo*2**u,so);u+=1,e.value="reconnecting",l=setTimeout(()=>{l=null,c||m()},b)}function d(b){try{let B=JSON.parse(typeof b=="string"?b:String(b));if(B.type==="offline-message"&&(B=B.originalMessage||{}),B.type==="registered"){a?e.value="connected":(e.value="pairing",h());return}if(B.type!=="message")return;const R=B.payload;if(!R||R.type!=="remote-session.encrypted")return;const C=s.decrypt(R.envelope);C.type==="pair.accepted"?(a=!0,u=0,e.value="connected"):C.type==="session.revoked"?(c=!0,a=!1,p(),o&&o.close(),o=null,e.value="revoked"):(Pe+=1,t.value=[...t.value,{...C,_id:Pe,_rxAt:Date.now()}].slice(-200))}catch(B){e.value="error",n.value=B?.message||"Remote Session protocol error"}}function g(b,B){return!o||o.readyState!==WebSocket.OPEN||!i?!1:(o.send(JSON.stringify({type:"message",to:i.hostPeerId,payload:{type:b,...B}})),!0)}function h(){const b={type:"pair.join",remoteSessionId:i.remoteSessionId,token:i.pairingToken};w?.token&&(b.pushToken=w.token,b.pushProvider=w.provider||"web"),g("remote-session.pair",{mobilePeerId:f,mobilePublicKey:s.publicKeyBase64(),envelope:s.encrypt(b)})}function E(b){return!o||o.readyState!==WebSocket.OPEN||!a?!1:g("remote-session.encrypted",{envelope:s.encrypt(b)})}function v(b,B={}){I();try{const R=no(b);return w=B.pushCredentials||null,f=io(),s=new ro(R.remoteSessionId,f),s.pair(R.hostPublicKey,R.pairingToken),i=R,r.value=R.remoteSessionId,a=!1,c=!1,u=0,n.value="",t.value=[],e.value="connecting",m(),!0}catch(R){return e.value="error",n.value=R?.message||"Invalid pairing link",!1}}function _(b){const B=(b||"").trim();B&&(E({type:"prompt",content:B})||(n.value="Remote Session is not connected"))}function A(b,B){E({type:"approval.resolve",requestId:b,approved:B})}function O(){E({type:"interrupt"})}function x(b,B="web"){if(w=b?{token:b,provider:B}:null,!a)return;const R={type:"push.register"};w?.token&&(R.pushToken=w.token,R.pushProvider=w.provider),E(R)}function I(){if(c=!0,a=!1,p(),o)try{o.close()}catch{}o=null,e.value!=="revoked"&&(e.value="disconnected")}return{status:e,events:t,error:n,remoteSessionId:r,connect:v,sendPrompt:_,approve:A,interrupt:O,updatePushCredentials:x,disconnect:I}}),co={__name:"RemoteSession",setup(e,{expose:t}){t();const n=Ge(),{status:r,events:o,error:s}=Be(n),i=nt(""),f=nt(""),a=nt(!1),c=mt(()=>["connecting","pairing","connected","reconnecting"].includes(r.value)),u=mt(()=>({idle:"未连接",connecting:"连接中",pairing:"配对中",connected:"已连接",reconnecting:"重连中",disconnected:"已断开",revoked:"已被撤销",error:"错误"})[r.value]||r.value),l=mt(()=>r.value==="connected"?"green":["connecting","pairing","reconnecting"].includes(r.value)?"blue":["revoked","error"].includes(r.value)?"red":"default"),w=mt(()=>[...o.value].reverse());function p(x){return String(x?.type||"").includes("approval")}function m(x){return x?.content||x?.payload?.content||x?.message||""}function y(x){return x?.requestId||x?.approvalId||""}function d(){n.connect(i.value.trim())}function g(x){a.value=!1,x&&(i.value=x,n.connect(x))}function h(x){const I=typeof x=="string"?x:f.value;n.sendPrompt(I),f.value=""}function E(x,I){n.approve(y(x),I)}function v(){n.interrupt()}function _(){n.disconnect()}function A(){s.value=""}const O={store:n,status:r,events:o,error:s,pairingLink:i,promptText:f,scannerOpen:a,isActive:c,statusLabel:u,statusColor:l,orderedEvents:w,isApproval:p,eventBody:m,requestIdOf:y,connect:d,onScanned:g,send:h,respond:E,interrupt:v,disconnect:_,clearError:A,computed:mt,ref:nt,get storeToRefs(){return Be},get LinkOutlined(){return Cn},get ScanOutlined(){return Nn},QrScannerModal:kn,get useRemoteSessionStore(){return Ge}};return Object.defineProperty(O,"__isScriptSetup",{enumerable:!1,value:!0}),O}},fo={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}};function ao(e,t,n,r,o,s){const i=z("a-tag"),f=z("a-alert"),a=z("a-textarea"),c=z("a-button"),u=z("a-space"),l=z("a-card"),w=z("a-input-search"),p=z("a-spin"),m=z("a-empty"),y=z("a-list-item-meta"),d=z("a-list-item"),g=z("a-list");return it(),Ln("div",null,[yt("div",fo,[t[4]||(t[4]=yt("div",null,[yt("h2",{class:"page-title"},"远程会话"),yt("p",{class:"page-sub"},"扫码或粘贴桌面端的配对链接,端到端加密接管一个编码会话(观察 / 提示 / 审批 / 中断)")],-1)),U(i,{color:r.statusColor},{default:L(()=>[P(Se(r.statusLabel),1)]),_:1},8,["color"])]),r.error?(it(),lt(f,{key:0,type:"error","show-icon":"",style:{"margin-bottom":"16px"},message:r.error,closable:"",onClose:r.clearError},null,8,["message"])):ve("v-if",!0),r.isActive?(it(),lt(l,{key:2,title:"会话控制",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"}},{extra:L(()=>[U(u,null,{default:L(()=>[U(c,{size:"small",onClick:r.interrupt},{default:L(()=>[...t[8]||(t[8]=[P("中断",-1)])]),_:1}),U(c,{size:"small",danger:"",onClick:r.disconnect},{default:L(()=>[...t[9]||(t[9]=[P("断开",-1)])]),_:1})]),_:1})]),default:L(()=>[U(u,{direction:"vertical",style:{width:"100%"},size:8},{default:L(()=>[U(w,{value:r.promptText,"onUpdate:value":t[2]||(t[2]=h=>r.promptText=h),placeholder:"发送提示到远程会话…","enter-button":"发送",disabled:r.status!=="connected",onSearch:r.send},null,8,["value","disabled"]),r.status==="reconnecting"?(it(),lt(p,{key:0,size:"small"},{tip:L(()=>[...t[10]||(t[10]=[P("正在重连…",-1)])]),_:1})):ve("v-if",!0)]),_:1})]),_:1})):(it(),lt(l,{key:1,title:"连接远程会话",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"}},{default:L(()=>[U(u,{direction:"vertical",style:{width:"100%"},size:12},{default:L(()=>[U(a,{value:r.pairingLink,"onUpdate:value":t[0]||(t[0]=h=>r.pairingLink=h),rows:3,placeholder:"chainlesschain://remote-session/pair#...","allow-clear":""},null,8,["value"]),U(u,null,{default:L(()=>[U(c,{type:"primary",disabled:!r.pairingLink.trim(),onClick:r.connect},{icon:L(()=>[U(r.LinkOutlined)]),default:L(()=>[t[5]||(t[5]=P(" 连接 ",-1))]),_:1},8,["disabled"]),U(c,{onClick:t[1]||(t[1]=h=>r.scannerOpen=!0)},{icon:L(()=>[U(r.ScanOutlined)]),default:L(()=>[t[6]||(t[6]=P(" 扫码 ",-1))]),_:1})]),_:1}),t[7]||(t[7]=yt("p",{class:"page-sub",style:{margin:"0"}}," 链接为一次性配对码,敏感载荷仅在片段(#)中,不会发往服务器。 ",-1))]),_:1})]),_:1})),U(l,{title:"会话事件",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:L(()=>[r.events.length?(it(),lt(g,{key:1,size:"small","data-source":r.orderedEvents},{renderItem:L(({item:h})=>[U(d,null,Tn({default:L(()=>[U(y,{description:r.eventBody(h)},{title:L(()=>[U(i,{color:r.isApproval(h)?"orange":"blue"},{default:L(()=>[P(Se(h.type||"event"),1)]),_:2},1032,["color"])]),_:2},1032,["description"])]),_:2},[r.isApproval(h)?{name:"actions",fn:L(()=>[U(c,{type:"link",size:"small",onClick:E=>r.respond(h,!0)},{default:L(()=>[...t[11]||(t[11]=[P("批准",-1)])]),_:1},8,["onClick"]),U(c,{type:"link",size:"small",danger:"",onClick:E=>r.respond(h,!1)},{default:L(()=>[...t[12]||(t[12]=[P("拒绝",-1)])]),_:1},8,["onClick"])]),key:"0"}:void 0]),1024)]),_:1},8,["data-source"])):(it(),lt(m,{key:0,description:"尚无事件"}))]),_:1}),U(r.QrScannerModal,{open:r.scannerOpen,onScanned:r.onScanned,onCancel:t[3]||(t[3]=h=>r.scannerOpen=!1)},null,8,["open"])])}const wo=Un(co,[["render",ao],["__file","/tmp/cc-web-panel-e7ho6d/repo/packages/web-panel/src/views/RemoteSession.vue"]]);export{wo as default};
|