chainlesschain 0.166.130 → 0.166.132
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 +30 -4
- package/package.json +2 -2
- package/src/assets/linux-subreaper/linux-arm64/manifest.json +1 -1
- package/src/assets/linux-subreaper/linux-x64/manifest.json +1 -1
- package/src/assets/web-panel/.build-hash +1 -1
- package/src/assets/web-panel/assets/AIOps-CHItp4vg.js +1 -0
- package/src/assets/web-panel/assets/AIOps-Cchx1iXI.css +1 -0
- package/src/assets/web-panel/assets/{ActionButton-Dzv1ReHF.js → ActionButton-nhMNWW_d.js} +1 -1
- package/src/assets/web-panel/assets/Analytics-DRc81BBI.js +3 -0
- package/src/assets/web-panel/assets/Analytics-Dr-1kvaM.css +1 -0
- package/src/assets/web-panel/assets/AppLayout-BTBIIl1e.css +1 -0
- package/src/assets/web-panel/assets/AppLayout-CVt7HMkp.js +3 -0
- package/src/assets/web-panel/assets/Artifacts-BuJgG5jf.js +1 -0
- package/src/assets/web-panel/assets/Artifacts-Dohtjyfl.css +1 -0
- package/src/assets/web-panel/assets/Audit-DDnViLtj.css +1 -0
- package/src/assets/web-panel/assets/Audit-msNg0aH-.js +1 -0
- package/src/assets/web-panel/assets/BackgroundAgents-BpcV8yWC.js +1 -0
- package/src/assets/web-panel/assets/BackgroundAgents-CH3Uc9sF.css +1 -0
- package/src/assets/web-panel/assets/Backup-CYh10zO3.css +1 -0
- package/src/assets/web-panel/assets/Backup-P53DADwG.js +1 -0
- package/src/assets/web-panel/assets/BaseInput-DFxT2yWN.js +1 -0
- package/src/assets/web-panel/assets/Chat-B5JvvQJb.css +1 -0
- package/src/assets/web-panel/assets/Chat-BXoHisHW.js +7 -0
- package/src/assets/web-panel/assets/ChatBubbleRenderer-CO908iBt.css +1 -0
- package/src/assets/web-panel/assets/ChatBubbleRenderer-DMGtSdDx.js +1 -0
- package/src/assets/web-panel/assets/{Checkbox-B5uzaLLP.js → Checkbox-B4g_ckJq.js} +1 -1
- package/src/assets/web-panel/assets/Codegen-BLP7id2a.css +1 -0
- package/src/assets/web-panel/assets/Codegen-C6SSSOfp.js +1 -0
- package/src/assets/web-panel/assets/{Col-D3I2kUGu.js → Col-IO1NEUYL.js} +1 -1
- package/src/assets/web-panel/assets/Community-C2RejeOY.css +1 -0
- package/src/assets/web-panel/assets/Community-CdEBl93F.js +1 -0
- package/src/assets/web-panel/assets/{Compact-5GigOmb8.js → Compact-DYs0a9k7.js} +1 -1
- package/src/assets/web-panel/assets/Compliance-BPnk7948.js +1 -0
- package/src/assets/web-panel/assets/Compliance-DOys4Ov1.css +1 -0
- package/src/assets/web-panel/assets/Cowork-DsOst4XK.css +1 -0
- package/src/assets/web-panel/assets/Cowork-VLOTGbza.js +6 -0
- package/src/assets/web-panel/assets/Cron-_9GgQLJo.js +2 -0
- package/src/assets/web-panel/assets/Crosschain-B21yn0qy.js +1 -0
- package/src/assets/web-panel/assets/Crosschain-C7Le4Pte.css +1 -0
- package/src/assets/web-panel/assets/DID-BX6k3jZi.css +1 -0
- package/src/assets/web-panel/assets/DID-mBeDgRZ7.js +2 -0
- package/src/assets/web-panel/assets/Dashboard-BckYYzhP.js +3 -0
- package/src/assets/web-panel/assets/Dashboard-MFDcsVcM.css +1 -0
- package/src/assets/web-panel/assets/Dropdown-DEedqFiE.js +1 -0
- package/src/assets/web-panel/assets/EmailListRenderer-CMs0k9TB.js +1 -0
- package/src/assets/web-panel/assets/EmailListRenderer-CVJ1j3Ll.css +1 -0
- package/src/assets/web-panel/assets/EvolutionSettings-B00Qd0fN.js +1 -0
- package/src/assets/web-panel/assets/EvolutionSettings-BnQ91YHJ.css +1 -0
- package/src/assets/web-panel/assets/FamilyGuardDashboard-Df-D09Q4.css +1 -0
- package/src/assets/web-panel/assets/FamilyGuardDashboard-DxMTAMa8.js +1 -0
- package/src/assets/web-panel/assets/Federation-B-UZw0LO.js +1 -0
- package/src/assets/web-panel/assets/Federation-CgmfLbx1.css +1 -0
- package/src/assets/web-panel/assets/FormItemContext-CkafazEw.js +1 -0
- package/src/assets/web-panel/assets/GenericCardRenderer-DEUG25ZJ.js +1 -0
- package/src/assets/web-panel/assets/GenericCardRenderer-DtJFcJYl.css +1 -0
- package/src/assets/web-panel/assets/Git-D7dr9oz9.js +2 -0
- package/src/assets/web-panel/assets/{Git-BdHhxBWR.css → Git-DPuaGtg7.css} +1 -1
- package/src/assets/web-panel/assets/Governance-BoipmXaM.css +1 -0
- package/src/assets/web-panel/assets/Governance-DKlUJ1wg.js +1 -0
- package/src/assets/web-panel/assets/Inference-BJKqplap.js +1 -0
- package/src/assets/web-panel/assets/Inference-BWxYJF9-.css +1 -0
- package/src/assets/web-panel/assets/KnowledgeGraph-B78fB-bz.js +1 -0
- package/src/assets/web-panel/assets/KnowledgeGraph-CztPDA96.css +1 -0
- package/src/assets/web-panel/assets/Logs-DJGcHYH_.js +2 -0
- package/src/assets/web-panel/assets/Logs-Gf_Mv9Nx.css +1 -0
- package/src/assets/web-panel/assets/MarkdownRenderer-BAxj61I3.css +1 -0
- package/src/assets/web-panel/assets/MarkdownRenderer-DkcG_MxW.js +1 -0
- package/src/assets/web-panel/assets/Marketplace-Djp5q9dS.css +1 -0
- package/src/assets/web-panel/assets/Marketplace-ucTbwByD.js +1 -0
- package/src/assets/web-panel/assets/McpTools-Cu1xZYYk.js +2 -0
- package/src/assets/web-panel/assets/McpTools-DSGHWYS_.css +1 -0
- package/src/assets/web-panel/assets/Memory-Bcc2hxOA.css +1 -0
- package/src/assets/web-panel/assets/Memory-DCGpXmi-.js +2 -0
- package/src/assets/web-panel/assets/MobileBridge-BQ-Uwwg7.css +1 -0
- package/src/assets/web-panel/assets/MobileBridge-BnKr0aAS.js +1 -0
- package/src/assets/web-panel/assets/MobileProjects-C5UvYJTP.js +1 -0
- package/src/assets/web-panel/assets/MobileProjects-Ceaxrqzc.css +1 -0
- package/src/assets/web-panel/assets/Mtc-D1UUl4WH.js +6 -0
- package/src/assets/web-panel/assets/Mtc-DHwbdUqA.css +1 -0
- package/src/assets/web-panel/assets/MtcAudit-B0x8gahq.css +1 -0
- package/src/assets/web-panel/assets/MtcAudit-D3aa8XP4.js +19 -0
- package/src/assets/web-panel/assets/Multisig-DiXdfJjO.js +7 -0
- package/src/assets/web-panel/assets/Multisig-kwPDnXnl.css +1 -0
- package/src/assets/web-panel/assets/NLProgramming-CLOvy-35.css +1 -0
- package/src/assets/web-panel/assets/NLProgramming-DbWABgSE.js +1 -0
- package/src/assets/web-panel/assets/Notes-BP1DPl-R.js +7 -0
- package/src/assets/web-panel/assets/Notes-COE2q2gD.css +1 -0
- package/src/assets/web-panel/assets/NotificationSettings-Co0e0uEO.css +1 -0
- package/src/assets/web-panel/assets/NotificationSettings-xaB6ONe7.js +1 -0
- package/src/assets/web-panel/assets/OrderTableRenderer-BnOISpKI.css +1 -0
- package/src/assets/web-panel/assets/OrderTableRenderer-D1uNcz3b.js +1 -0
- package/src/assets/web-panel/assets/Organization-BM3Lh8Q8.css +1 -0
- package/src/assets/web-panel/assets/Organization-DMLDGaf1.js +4 -0
- package/src/assets/web-panel/assets/{Overflow-ky9UfGv4.js → Overflow-DH4QPEoI.js} +1 -1
- package/src/assets/web-panel/assets/{OverrideContext-C0w0P4A3.js → OverrideContext-DLR1AtLy.js} +1 -1
- package/src/assets/web-panel/assets/P2P-Bl4OS10o.js +2 -0
- package/src/assets/web-panel/assets/P2P-Cx88UaiD.css +1 -0
- package/src/assets/web-panel/assets/PdhVaultBrowser-B9ZGFpn4.css +1 -0
- package/src/assets/web-panel/assets/PdhVaultBrowser-D9XSE2YI.js +7 -0
- package/src/assets/web-panel/assets/Permissions-CUaPlr6d.js +4 -0
- package/src/assets/web-panel/assets/Permissions-Diejgkbs.css +1 -0
- package/src/assets/web-panel/assets/PersonalDataHub-Ba92dZk-.js +3 -0
- package/src/assets/web-panel/assets/PersonalDataHub-C_xhspRy.css +1 -0
- package/src/assets/web-panel/assets/Pipeline-Bh2okm-8.js +1 -0
- package/src/assets/web-panel/assets/Pipeline-DxkXqrH2.css +1 -0
- package/src/assets/web-panel/assets/Privacy-Bmq3p4gC.js +1 -0
- package/src/assets/web-panel/assets/Privacy-CrsfSFKd.css +1 -0
- package/src/assets/web-panel/assets/ProjectInit-BPu2fdKR.js +2 -0
- package/src/assets/web-panel/assets/ProjectInit-CteEo-wF.css +1 -0
- package/src/assets/web-panel/assets/ProjectSettings-D6ABLpmt.js +2 -0
- package/src/assets/web-panel/assets/ProjectSettings-pLSae-wy.css +1 -0
- package/src/assets/web-panel/assets/Projects-BX-SG9R4.css +1 -0
- package/src/assets/web-panel/assets/Projects-qWHEve0z.js +1 -0
- package/src/assets/web-panel/assets/Providers-CpAXh_6c.css +1 -0
- package/src/assets/web-panel/assets/Providers-D9DI-2hc.js +1 -0
- package/src/assets/web-panel/assets/{QrScannerModal-er_HkLCI.js → QrScannerModal-CxifoeD5.js} +1 -1
- package/src/assets/web-panel/assets/QrScannerModal-DFrn7rxS.css +1 -0
- package/src/assets/web-panel/assets/QuickAsk-DC1BvwR7.js +1 -0
- package/src/assets/web-panel/assets/Recommend-CH6wKzGo.css +1 -0
- package/src/assets/web-panel/assets/Recommend-CKqbMB5o.js +1 -0
- package/src/assets/web-panel/assets/RemoteSession-BGGzPdS5.js +5 -0
- package/src/assets/web-panel/assets/Reputation-D6VPNEd0.css +1 -0
- package/src/assets/web-panel/assets/Reputation-DH90O9-5.js +1 -0
- package/src/assets/web-panel/assets/Row-h7ovueJc.js +1 -0
- package/src/assets/web-panel/assets/RssFeed-Cze7YLaG.css +1 -0
- package/src/assets/web-panel/assets/RssFeed-DaHxXTZg.js +3 -0
- package/src/assets/web-panel/assets/Search-B6RalzTB.css +1 -0
- package/src/assets/web-panel/assets/Search-Bn6Nqpn4.js +1 -0
- package/src/assets/web-panel/assets/Security-13K57V_v.css +1 -0
- package/src/assets/web-panel/assets/Security-ClbBmPJi.js +4 -0
- package/src/assets/web-panel/assets/Services-C8Qs6KXv.css +1 -0
- package/src/assets/web-panel/assets/Services-ChHLQwRn.js +2 -0
- package/src/assets/web-panel/assets/{Skeleton-CrFs6rUL.js → Skeleton-DfN6BFzt.js} +1 -1
- package/src/assets/web-panel/assets/Skills-BdjRyorN.css +1 -0
- package/src/assets/web-panel/assets/Skills-C926wDev.js +1 -0
- package/src/assets/web-panel/assets/Sla-DJzi1l1M.js +1 -0
- package/src/assets/web-panel/assets/Sla-K19oOyQc.css +1 -0
- package/src/assets/web-panel/assets/SpeechSettings-DYPJTDKz.css +1 -0
- package/src/assets/web-panel/assets/SpeechSettings-_GSyVjm_.js +1 -0
- package/src/assets/web-panel/assets/SyncSettings-B67xnERe.js +1 -0
- package/src/assets/web-panel/assets/SyncSettings-C6cDrwDR.css +1 -0
- package/src/assets/web-panel/assets/Tasks-BJjN_YEm.css +1 -0
- package/src/assets/web-panel/assets/Tasks-BaYZadcG.js +1 -0
- package/src/assets/web-panel/assets/Templates-BsMmCdZI.css +1 -0
- package/src/assets/web-panel/assets/Templates-Bu8kN1Xt.js +1 -0
- package/src/assets/web-panel/assets/Tenant-BM9qufw1.js +1 -0
- package/src/assets/web-panel/assets/Tenant-D3zkSAV0.css +1 -0
- package/src/assets/web-panel/assets/Terminal-MEdd5DjB.js +3 -0
- package/src/assets/web-panel/assets/Terminal-qPp9MaPu.css +1 -0
- package/src/assets/web-panel/assets/TimelineRenderer-C27kL2oU.js +1 -0
- package/src/assets/web-panel/assets/TimelineRenderer-DmztdsbF.css +1 -0
- package/src/assets/web-panel/assets/Tokens-BBOdNRHQ.css +1 -0
- package/src/assets/web-panel/assets/Tokens-Cvjd98VC.js +1 -0
- package/src/assets/web-panel/assets/{Trigger-CXrW4Nry.js → Trigger-CLym84HI.js} +1 -1
- package/src/assets/web-panel/assets/Trust-Bv2JTaNN.js +1 -0
- package/src/assets/web-panel/assets/Trust-DeOo0xAh.css +1 -0
- package/src/assets/web-panel/assets/UkeySign-CSCkNbtm.js +1 -0
- package/src/assets/web-panel/assets/VideoEditing-BFDXB4xh.js +1 -0
- package/src/assets/web-panel/assets/VideoEditing-DksiizfS.css +1 -0
- package/src/assets/web-panel/assets/Wallet-CMEFrG_b.js +4 -0
- package/src/assets/web-panel/assets/Wallet-Dw8uV4Ug.css +1 -0
- package/src/assets/web-panel/assets/WebAuthn-DKx6xPPl.css +1 -0
- package/src/assets/web-panel/assets/WebAuthn-x4eO_Q4y.js +5 -0
- package/src/assets/web-panel/assets/WorkflowEditor-ClWEPgV1.js +1 -0
- package/src/assets/web-panel/assets/WorkflowEditor-IiwsD8Kh.css +1 -0
- package/src/assets/web-panel/assets/{_getTag-DnrRH4E6.js → _getTag-BVc6NQ_K.js} +1 -1
- package/src/assets/web-panel/assets/{chat-BpJsXlTK.js → chat-BdYOI4gM.js} +1 -1
- package/src/assets/web-panel/assets/{collapseMotion-CqM1QOwM.js → collapseMotion-B4IZiILV.js} +1 -1
- package/src/assets/web-panel/assets/{colors-CUNg0-fh.js → colors-DcTBrGvS.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-C3tFHnhu.js → compact-item-Dn2ktVuj.js} +1 -1
- package/src/assets/web-panel/assets/createContext-XTreuyqp.js +1 -0
- package/src/assets/web-panel/assets/{debounce-CFGTTtN3.js → debounce-D9xTw4Sx.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-CNIS3FrJ.js +1 -0
- package/src/assets/web-panel/assets/echarts-CDp6K7pj.js +19 -0
- package/src/assets/web-panel/assets/{hasIn-CU6RIciB.js → hasIn-CFRNsYQd.js} +1 -1
- package/src/assets/web-panel/assets/{icons-DG5UD-6K.js → icons-DlxlFL4g.js} +4 -4
- package/src/assets/web-panel/assets/index-3RqDry-K.js +71 -0
- package/src/assets/web-panel/assets/{index-BPWJw4Ji.js → index-8METW_Wr.js} +1 -1
- package/src/assets/web-panel/assets/index-BBd64wj8.js +31 -0
- package/src/assets/web-panel/assets/index-BEyVNbNE.js +3 -0
- package/src/assets/web-panel/assets/index-BMLpP8QQ.js +1 -0
- package/src/assets/web-panel/assets/{index-BzhobTgZ.js → index-BSqydcDa.js} +1 -1
- package/src/assets/web-panel/assets/index-BV6LojRv.js +21 -0
- package/src/assets/web-panel/assets/index-BbMWvjLZ.js +1 -0
- package/src/assets/web-panel/assets/{index-KgR1f2Gq.js → index-Brc0BF-k.js} +2 -2
- package/src/assets/web-panel/assets/{index-D4njcYFw.js → index-CG9YLDmI.js} +1 -1
- package/src/assets/web-panel/assets/{index-6EwPIfXu.js → index-CNHWMMDX.js} +1 -1
- package/src/assets/web-panel/assets/{index-CEIoRm_c.js → index-COuEJdmr.js} +3 -3
- package/src/assets/web-panel/assets/{index-BG4zuFf0.js → index-CRW3AWdS.js} +1 -1
- package/src/assets/web-panel/assets/{index-BOlAutGy.js → index-CUT4h5JB.js} +2 -2
- package/src/assets/web-panel/assets/index-CXMa7Z-S.js +1 -0
- package/src/assets/web-panel/assets/index-CbaPXyNc.js +19 -0
- package/src/assets/web-panel/assets/{index-Cq93VfoF.css → index-CfX1DEtk.css} +1 -1
- package/src/assets/web-panel/assets/{index-X6e0cGRU.js → index-CjHA_Q7s.js} +1 -1
- package/src/assets/web-panel/assets/index-CsnYp4qF.js +1 -0
- package/src/assets/web-panel/assets/index-D45vulkq.js +12 -0
- package/src/assets/web-panel/assets/index-D9kPBEqD.js +55 -0
- package/src/assets/web-panel/assets/index-DDTSgpXz.js +1 -0
- package/src/assets/web-panel/assets/index-DFl_a0n5.js +1 -0
- package/src/assets/web-panel/assets/index-DNdiAymC.js +1 -0
- package/src/assets/web-panel/assets/{index-BJjEAoDb.js → index-DQEu7uW0.js} +1 -1
- package/src/assets/web-panel/assets/index-DW9XncMy.js +21 -0
- package/src/assets/web-panel/assets/index-Daa1yCt_.js +1 -0
- package/src/assets/web-panel/assets/index-DdVpoNEQ.js +12 -0
- package/src/assets/web-panel/assets/index-Dhi4Oybt.js +1 -0
- package/src/assets/web-panel/assets/index-DoVoNjtJ.js +1 -0
- package/src/assets/web-panel/assets/{index-111hR8WZ.js → index-Vo7A4aiN.js} +4 -4
- package/src/assets/web-panel/assets/{index-lo9rgpyj.js → index-XdlYkgCa.js} +1 -1
- package/src/assets/web-panel/assets/{index-1L0tt7G2.js → index-ir2ZwWz5.js} +2 -2
- package/src/assets/web-panel/assets/index-kzyCd8a0.js +3 -0
- package/src/assets/web-panel/assets/{index-CyyhilXV.js → index-lnTt0Jps.js} +2 -2
- package/src/assets/web-panel/assets/{index-CLQjdKmE.js → index-ma-rJkfE.js} +1 -1
- package/src/assets/web-panel/assets/index-oE4jTpHK.js +13 -0
- package/src/assets/web-panel/assets/{index-K2Uqqkr1.js → index-r5sNECM5.js} +1 -1
- package/src/assets/web-panel/assets/index-uT4fRDzU.js +1 -0
- package/src/assets/web-panel/assets/index-xlS8pDS2.js +1 -0
- package/src/assets/web-panel/assets/{initDefaultProps-FI8D7E2x.js → initDefaultProps-mdL0oeZa.js} +1 -1
- package/src/assets/web-panel/assets/{isPlainObject-BWRMT62c.js → isPlainObject-_gz-soRW.js} +1 -1
- package/src/assets/web-panel/assets/isSymbol-DAy2hlR5.js +1 -0
- package/src/assets/web-panel/assets/motion-ZgVCKcEX.js +11 -0
- package/src/assets/web-panel/assets/{move-Vl1vUReW.js → move-A_28O5T2.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-6Cu2aFME.js → mtc-parser-0zlMjabo.js} +1 -1
- package/src/assets/web-panel/assets/{omit-VRKL8iSO.js → omit-DF7mU3yG.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-DZfWsOe0.js → pickAttrs-Cmt8liJP.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-qmcOUc4W.js → placementArrow-DaMDC57b.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-BLB6SsSw.js → responsiveObserve-CHw_f2d3.js} +1 -1
- package/src/assets/web-panel/assets/{slide-41jdYeSH.js → slide-DJS9fFQq.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-Yn8OQ5ey.js → statusUtils-Bk3XdZwh.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-4CEwz9Zd.js → styleChecker-DMybAFsA.js} +1 -1
- package/src/assets/web-panel/assets/useFlexGapSupport-_tbIIFMu.js +1 -0
- package/src/assets/web-panel/assets/{useFs-Bugo8HuF.js → useFs-KPklVptS.js} +1 -1
- package/src/assets/web-panel/assets/{useMergedState-DXbJa_zE.js → useMergedState-d-EXs3xd.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-B-q2ElB0.js → usePersonalDataHub-C7FrKDhD.js} +1 -1
- package/src/assets/web-panel/assets/{useRefs-BrCfMLMc.js → useRefs-DHeCQehi.js} +1 -1
- package/src/assets/web-panel/assets/{useState-CnxtbLoC.js → useState-Dlgl7fUg.js} +1 -1
- package/src/assets/web-panel/assets/vendor-BXcBOG8b.js +1 -0
- package/src/assets/web-panel/assets/vnode-DB3JBusp.js +1 -0
- package/src/assets/web-panel/assets/warning-Pq00owYb.js +1 -0
- package/src/assets/web-panel/assets/{zoom-DM1y_KKP.js → zoom-C8rAdf81.js} +1 -1
- package/src/assets/web-panel/index.html +4 -4
- package/src/command-help-index.json +1 -1
- package/src/commands/agent.js +1 -1
- package/src/commands/governed-skill-marketplace.js +24 -10
- package/src/commands/llm.js +4 -3
- package/src/data/changelog.json +27 -1
- package/src/harness/worktree-isolator.js +4 -1
- package/src/lib/compaction-host-provenance.js +24 -0
- package/src/lib/context-memory-kernel/durable-memory-port.js +46 -34
- package/src/lib/context-memory-kernel/live-compaction.js +12 -3
- package/src/lib/context-memory-kernel/memory-query-bundle.js +375 -0
- package/src/lib/context-memory-kernel/memory-query-control.js +28 -0
- package/src/lib/context-memory-kernel/memory-service.js +30 -16
- package/src/lib/context-memory-kernel/memory-shard-snapshots.js +63 -0
- package/src/lib/context-memory-kernel/message-adapter.js +27 -6
- package/src/lib/context-memory-kernel/provider-context.js +103 -27
- package/src/lib/context-memory-kernel/segmented-memory-port.js +347 -138
- package/src/lib/cost-budget.js +2 -0
- package/src/lib/ephemeral-worktree-scope.js +24 -0
- package/src/lib/evolution/evolution-deployment-loader.js +6 -4
- package/src/lib/evolution/governed-skill-marketplace-abort.js +14 -0
- package/src/lib/evolution/governed-skill-marketplace-candidate.js +10 -2
- package/src/lib/evolution/governed-skill-marketplace-cli-host.js +47 -20
- package/src/lib/evolution/governed-skill-marketplace.js +47 -24
- package/src/lib/goal-condition-engine.js +20 -3
- package/src/lib/goal-verification-command.js +221 -0
- package/src/lib/goal-verification-plan.js +372 -0
- package/src/lib/llm-connection-probe.js +12 -5
- package/src/lib/llm-onboarding-catalog.json +1 -1
- package/src/lib/llm-pricing.js +34 -8
- package/src/lib/mcp-tool-catalog-authority.js +244 -0
- package/src/lib/model-capabilities.js +6 -0
- package/src/lib/model-catalog-review.js +3 -0
- package/src/lib/model-context-catalog.js +44 -2
- package/src/lib/openai-responses.js +35 -6
- package/src/lib/sub-agent-context.js +12 -4
- package/src/lib/subagent-inheritance.js +162 -2
- package/src/lib/usage-pricing-context.js +34 -17
- package/src/repl/agent-repl.js +34 -2
- package/src/runtime/agent-core.js +335 -18
- package/src/runtime/compaction-host-context.js +72 -0
- package/src/runtime/headless-runner.js +133 -37
- package/src/runtime/headless-stream.js +38 -21
- package/src/runtime/mcp-agent-catalog.js +257 -0
- package/src/runtime/mcp-config.js +18 -69
- package/src/runtime/mcp-tool-search.js +16 -1
- package/src/runtime/message-roles.js +67 -3
- package/src/runtime/provider-stream-state.js +35 -1
- package/src/runtime/system-prompt.js +9 -0
- package/src/assets/web-panel/assets/AIOps-CSpp7iGY.css +0 -1
- package/src/assets/web-panel/assets/AIOps-o-rFKEYL.js +0 -1
- package/src/assets/web-panel/assets/Analytics-Bt7H_jrh.js +0 -3
- package/src/assets/web-panel/assets/Analytics-DJcHjy5J.css +0 -1
- package/src/assets/web-panel/assets/AppLayout-CgynsRFP.js +0 -9
- package/src/assets/web-panel/assets/AppLayout-VlanTjPw.css +0 -1
- package/src/assets/web-panel/assets/Artifacts-CTVt96zW.css +0 -1
- package/src/assets/web-panel/assets/Artifacts-gghOGDyE.js +0 -1
- package/src/assets/web-panel/assets/Audit-D8oxP0wr.css +0 -1
- package/src/assets/web-panel/assets/Audit-DBXn-AZ6.js +0 -1
- package/src/assets/web-panel/assets/BackgroundAgents--dxPftKa.js +0 -1
- package/src/assets/web-panel/assets/BackgroundAgents-Dq2340Kl.css +0 -1
- package/src/assets/web-panel/assets/Backup-D9Zf_2tH.js +0 -1
- package/src/assets/web-panel/assets/Backup-Wi9CaP3d.css +0 -1
- package/src/assets/web-panel/assets/BaseInput-DDTOjovq.js +0 -1
- package/src/assets/web-panel/assets/Chat-2ETqdBLn.js +0 -8
- package/src/assets/web-panel/assets/Chat-KSGPtU0L.css +0 -1
- package/src/assets/web-panel/assets/ChatBubbleRenderer-DSg2Xs8G.js +0 -1
- package/src/assets/web-panel/assets/ChatBubbleRenderer-gy5SDGw2.css +0 -1
- package/src/assets/web-panel/assets/Codegen-4ieEEIwt.js +0 -1
- package/src/assets/web-panel/assets/Codegen-BB08p1fn.css +0 -1
- package/src/assets/web-panel/assets/Community-Cbq1nrpo.css +0 -1
- package/src/assets/web-panel/assets/Community-DeYxFMJb.js +0 -1
- package/src/assets/web-panel/assets/Compliance-DLVjbVUh.js +0 -1
- package/src/assets/web-panel/assets/Compliance-NoXr2Vof.css +0 -1
- package/src/assets/web-panel/assets/Cowork-BlXJRu6L.css +0 -1
- package/src/assets/web-panel/assets/Cowork-DfUKa0T5.js +0 -6
- package/src/assets/web-panel/assets/Cron-_RpktpO5.js +0 -2
- package/src/assets/web-panel/assets/Crosschain-7x6xdbwH.js +0 -1
- package/src/assets/web-panel/assets/Crosschain-CgRAecoR.css +0 -1
- package/src/assets/web-panel/assets/DID-DVsYcgvs.css +0 -1
- package/src/assets/web-panel/assets/DID-ccVhToC1.js +0 -2
- package/src/assets/web-panel/assets/Dashboard-CAPSdFR4.css +0 -1
- package/src/assets/web-panel/assets/Dashboard-DhygcaoK.js +0 -3
- package/src/assets/web-panel/assets/Dropdown-DFplwXK7.js +0 -1
- package/src/assets/web-panel/assets/EmailListRenderer-Bm01soCN.js +0 -1
- package/src/assets/web-panel/assets/EmailListRenderer-DTPZPx_S.css +0 -1
- package/src/assets/web-panel/assets/EvolutionSettings-Bdw8ApoT.css +0 -1
- package/src/assets/web-panel/assets/EvolutionSettings-C4v--DkD.js +0 -1
- package/src/assets/web-panel/assets/FamilyGuardDashboard-ChQXDBA3.js +0 -1
- package/src/assets/web-panel/assets/FamilyGuardDashboard-nd3idUVb.css +0 -1
- package/src/assets/web-panel/assets/Federation-C0yomE-M.js +0 -1
- package/src/assets/web-panel/assets/Federation-fGN6iMX_.css +0 -1
- package/src/assets/web-panel/assets/FormItemContext-DtT3ZEZK.js +0 -2
- package/src/assets/web-panel/assets/GenericCardRenderer-DgITtFRv.js +0 -1
- package/src/assets/web-panel/assets/GenericCardRenderer-o85VDYQS.css +0 -1
- package/src/assets/web-panel/assets/Git-CCY42R8S.js +0 -2
- package/src/assets/web-panel/assets/Governance-DtCS4NDm.css +0 -1
- package/src/assets/web-panel/assets/Governance-N66Bwvqg.js +0 -1
- package/src/assets/web-panel/assets/Inference-BkbPuR_2.js +0 -1
- package/src/assets/web-panel/assets/Inference-t-w0NgIS.css +0 -1
- package/src/assets/web-panel/assets/KnowledgeGraph-4NU1S2Xm.css +0 -1
- package/src/assets/web-panel/assets/KnowledgeGraph-B3PibXdA.js +0 -1
- package/src/assets/web-panel/assets/Logs-CUtNB_N6.js +0 -2
- package/src/assets/web-panel/assets/Logs-DQbCaYhL.css +0 -1
- package/src/assets/web-panel/assets/MarkdownRenderer-D-V4dOe3.js +0 -1
- package/src/assets/web-panel/assets/MarkdownRenderer-DbzhFwvz.css +0 -1
- package/src/assets/web-panel/assets/Marketplace-Bvo5cuGa.css +0 -1
- package/src/assets/web-panel/assets/Marketplace-DLNJb6Nr.js +0 -1
- package/src/assets/web-panel/assets/McpTools-2zGjJb5K.js +0 -4
- package/src/assets/web-panel/assets/McpTools-534Q95Mx.css +0 -1
- package/src/assets/web-panel/assets/Memory-9rNZ1EvR.js +0 -2
- package/src/assets/web-panel/assets/Memory-CleW_R6V.css +0 -1
- package/src/assets/web-panel/assets/MobileBridge-Cw7sAAgn.js +0 -1
- package/src/assets/web-panel/assets/MobileBridge-D3Arxfeg.css +0 -1
- package/src/assets/web-panel/assets/MobileProjects-8XACrqqy.js +0 -1
- package/src/assets/web-panel/assets/MobileProjects-BD4alw6-.css +0 -1
- package/src/assets/web-panel/assets/Mtc-CXZGO9Sh.css +0 -1
- package/src/assets/web-panel/assets/Mtc-mg02JNy-.js +0 -6
- package/src/assets/web-panel/assets/MtcAudit-B1Vkhj2l.js +0 -19
- package/src/assets/web-panel/assets/MtcAudit-C1JM8esp.css +0 -1
- package/src/assets/web-panel/assets/Multisig-BQEeA7GG.js +0 -13
- package/src/assets/web-panel/assets/Multisig-BryR2Jpr.css +0 -1
- package/src/assets/web-panel/assets/NLProgramming-BIbkjZV3.js +0 -1
- package/src/assets/web-panel/assets/NLProgramming-DGDHq6Z9.css +0 -1
- package/src/assets/web-panel/assets/Notes-BKKmMtqV.css +0 -1
- package/src/assets/web-panel/assets/Notes-DIwhkZNY.js +0 -7
- package/src/assets/web-panel/assets/NotificationSettings-CG3Kfuef.css +0 -1
- package/src/assets/web-panel/assets/NotificationSettings-Cj9175ce.js +0 -1
- package/src/assets/web-panel/assets/OrderTableRenderer-CfrDjSHT.css +0 -1
- package/src/assets/web-panel/assets/OrderTableRenderer-IfNpXT2R.js +0 -1
- package/src/assets/web-panel/assets/Organization-DPFp6G9o.js +0 -4
- package/src/assets/web-panel/assets/Organization-LVvqwG0D.css +0 -1
- package/src/assets/web-panel/assets/P2P-DcFvP7F-.css +0 -1
- package/src/assets/web-panel/assets/P2P-tXck8GLq.js +0 -2
- package/src/assets/web-panel/assets/PdhVaultBrowser-DSvpQl9k.js +0 -7
- package/src/assets/web-panel/assets/PdhVaultBrowser-DZZrUOr1.css +0 -1
- package/src/assets/web-panel/assets/Permissions-CKPkdLj-.js +0 -4
- package/src/assets/web-panel/assets/Permissions-DsPE_IQy.css +0 -1
- package/src/assets/web-panel/assets/PersonalDataHub-BhpRlh9D.css +0 -1
- package/src/assets/web-panel/assets/PersonalDataHub-DnqXc12l.js +0 -9
- package/src/assets/web-panel/assets/Pipeline-BItr5CyP.css +0 -1
- package/src/assets/web-panel/assets/Pipeline-BKjFU_kd.js +0 -1
- package/src/assets/web-panel/assets/Privacy-ChC-J5Tn.js +0 -1
- package/src/assets/web-panel/assets/Privacy-F_ENsxZk.css +0 -1
- package/src/assets/web-panel/assets/ProjectInit-B86LEzDL.css +0 -1
- package/src/assets/web-panel/assets/ProjectInit-ByFZG9sY.js +0 -2
- package/src/assets/web-panel/assets/ProjectSettings-Bbv1Kiw-.js +0 -2
- package/src/assets/web-panel/assets/ProjectSettings-DK7KA_iX.css +0 -1
- package/src/assets/web-panel/assets/Projects-CmJeUDBW.css +0 -1
- package/src/assets/web-panel/assets/Projects-QYyGW31-.js +0 -1
- package/src/assets/web-panel/assets/Providers-C6q_fvea.css +0 -1
- package/src/assets/web-panel/assets/Providers-CJLnWw0r.js +0 -1
- package/src/assets/web-panel/assets/QrScannerModal-NwAHNfiJ.css +0 -1
- package/src/assets/web-panel/assets/QuickAsk-DoXU0np9.js +0 -1
- package/src/assets/web-panel/assets/Recommend-DCo_vuaf.js +0 -1
- package/src/assets/web-panel/assets/Recommend-D_bf91K6.css +0 -1
- package/src/assets/web-panel/assets/RemoteSession-CLuL925Z.js +0 -5
- package/src/assets/web-panel/assets/Reputation-CNNCA_-M.js +0 -1
- package/src/assets/web-panel/assets/Reputation-DiOsOleI.css +0 -1
- package/src/assets/web-panel/assets/Row-Vu4j631i.js +0 -1
- package/src/assets/web-panel/assets/RssFeed-C18B4xiy.js +0 -3
- package/src/assets/web-panel/assets/RssFeed-CjcbkyUb.css +0 -1
- package/src/assets/web-panel/assets/Search-DxiqccE2.js +0 -1
- package/src/assets/web-panel/assets/Search-Klk29S7C.css +0 -1
- package/src/assets/web-panel/assets/Security-BmrukMHn.css +0 -1
- package/src/assets/web-panel/assets/Security-Droe_hHI.js +0 -4
- package/src/assets/web-panel/assets/Services-CwmmyXzq.js +0 -2
- package/src/assets/web-panel/assets/Services-DAnVNhUG.css +0 -1
- package/src/assets/web-panel/assets/Skills-BUu9owbR.css +0 -1
- package/src/assets/web-panel/assets/Skills-Dp-d2miK.js +0 -1
- package/src/assets/web-panel/assets/Sla-2DFXVbK4.js +0 -1
- package/src/assets/web-panel/assets/Sla-sodqCU4a.css +0 -1
- package/src/assets/web-panel/assets/SpeechSettings-Cdd9lCoy.js +0 -1
- package/src/assets/web-panel/assets/SpeechSettings-CgB9nFyq.css +0 -1
- package/src/assets/web-panel/assets/SyncSettings-B3hJqmBP.css +0 -1
- package/src/assets/web-panel/assets/SyncSettings-CxQhcYSk.js +0 -2
- package/src/assets/web-panel/assets/Tasks-BHWVRfXx.js +0 -1
- package/src/assets/web-panel/assets/Tasks-nbTUVXvt.css +0 -1
- package/src/assets/web-panel/assets/Templates-CpFsKk_l.css +0 -1
- package/src/assets/web-panel/assets/Templates-DNFk3a5_.js +0 -1
- package/src/assets/web-panel/assets/Tenant-B6X6dPo8.js +0 -1
- package/src/assets/web-panel/assets/Tenant-MuPJnOjk.css +0 -1
- package/src/assets/web-panel/assets/Terminal-BuUNoLGM.js +0 -3
- package/src/assets/web-panel/assets/Terminal-DHoveJwj.css +0 -1
- package/src/assets/web-panel/assets/TimelineRenderer-BlTAtkOc.css +0 -1
- package/src/assets/web-panel/assets/TimelineRenderer-DThrBYj8.js +0 -1
- package/src/assets/web-panel/assets/Tokens-CA_u4Blu.js +0 -1
- package/src/assets/web-panel/assets/Tokens-CynVae-o.css +0 -1
- package/src/assets/web-panel/assets/Trust-C-WrW0Fj.css +0 -1
- package/src/assets/web-panel/assets/Trust-DHcLpNy3.js +0 -1
- package/src/assets/web-panel/assets/UkeySign-B_fni4C2.js +0 -1
- package/src/assets/web-panel/assets/VideoEditing-BDFghpzP.css +0 -1
- package/src/assets/web-panel/assets/VideoEditing-g9nf2EhS.js +0 -1
- package/src/assets/web-panel/assets/Wallet-C8pOjIve.js +0 -4
- package/src/assets/web-panel/assets/Wallet-DUbpTRcg.css +0 -1
- package/src/assets/web-panel/assets/WebAuthn-BaKNjxZt.js +0 -5
- package/src/assets/web-panel/assets/WebAuthn-CVAFRfCQ.css +0 -1
- package/src/assets/web-panel/assets/WorkflowEditor-429lPWYk.css +0 -1
- package/src/assets/web-panel/assets/WorkflowEditor-CX030Wb1.js +0 -1
- package/src/assets/web-panel/assets/createContext-B8rTvO61.js +0 -1
- package/src/assets/web-panel/assets/devWarning-B4_IVU_n.js +0 -1
- package/src/assets/web-panel/assets/echarts-C61Vn3mP.js +0 -25
- package/src/assets/web-panel/assets/index--6BUI55w.js +0 -1
- package/src/assets/web-panel/assets/index-5Q1bepcM.js +0 -1
- package/src/assets/web-panel/assets/index-B10Ia2KL.js +0 -21
- package/src/assets/web-panel/assets/index-B1SLBLli.js +0 -3
- package/src/assets/web-panel/assets/index-B8_VQAav.js +0 -1
- package/src/assets/web-panel/assets/index-BMuPJra-.js +0 -1
- package/src/assets/web-panel/assets/index-BOCjph-k.js +0 -12
- package/src/assets/web-panel/assets/index-BpBaOWmV.js +0 -1
- package/src/assets/web-panel/assets/index-CDlHvQtw.js +0 -1
- package/src/assets/web-panel/assets/index-CPF7Vqri.js +0 -55
- package/src/assets/web-panel/assets/index-CPmgKQcl.js +0 -1
- package/src/assets/web-panel/assets/index-CcpMHPWd.js +0 -21
- package/src/assets/web-panel/assets/index-Cyksnofp.js +0 -1
- package/src/assets/web-panel/assets/index-Dc9pcin6.js +0 -1
- package/src/assets/web-panel/assets/index-DfAC55QA.js +0 -19
- package/src/assets/web-panel/assets/index-DgNCfwvg.js +0 -1
- package/src/assets/web-panel/assets/index-DvfhIBNZ.js +0 -1
- package/src/assets/web-panel/assets/index-Hbzd9WeI.js +0 -1
- package/src/assets/web-panel/assets/index-IiS7WoUl.js +0 -13
- package/src/assets/web-panel/assets/index-Xa6TlaD7.js +0 -31
- package/src/assets/web-panel/assets/index-YczWc2_0.js +0 -12
- package/src/assets/web-panel/assets/index-h_ANnbR8.js +0 -3
- package/src/assets/web-panel/assets/index-k7QsBwyo.js +0 -75
- package/src/assets/web-panel/assets/isSymbol-S5WZT7lS.js +0 -1
- package/src/assets/web-panel/assets/motion-B1hpJYSD.js +0 -11
- package/src/assets/web-panel/assets/useFlexGapSupport-BClv53kR.js +0 -1
- package/src/assets/web-panel/assets/vendor-Bn1JzzAn.js +0 -42
- package/src/assets/web-panel/assets/vnode-ejVeFJ0x.js +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.scanner-wrap[data-v-5e64932d]{display:flex;flex-direction:column}.video-frame[data-v-5e64932d]{position:relative;width:100%;aspect-ratio:4 / 3;background:#000;border-radius:8px;overflow:hidden}.video-frame video[data-v-5e64932d]{width:100%;height:100%;object-fit:cover}.overlay[data-v-5e64932d]{position:absolute;inset:0;display:flex;align-items:flex-end;justify-content:center;pointer-events:none}.overlay .hint[data-v-5e64932d]{background:#0009;color:#fff;padding:6px 12px;border-radius:4px;font-size:12px;margin-bottom:16px}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{e as E,M as f,R as w,P as s,c as v,N as d,Q as A,S as m,K as b,r as h,L as i,a0 as O,a1 as P,O as q,u as x}from"./vendor-BXcBOG8b.js";import{u as K,b as V}from"./index-3RqDry-K.js";import{b as L,am as Q,q as U,f as F}from"./icons-DlxlFL4g.js";function j(){const y=[];let r=null,_=!1,e=null;return{push(a){if(y.push(a),r){const t=r;r=null,t()}},finish(a){if(_=!0,e=a||null,r){const t=r;r=null,t()}},async*iterate(){for(;;){for(;y.length>0;)yield y.shift();if(_){if(e)throw e;return}await new Promise(a=>{r=a})}}}}function I(){const y=K();function r(e){if(!e||!Array.isArray(e.messages))throw new Error("messages array is required");const a=j(),t=new AbortController;e.signal&&(e.signal.aborted?t.abort(e.signal.reason):e.signal.addEventListener("abort",()=>t.abort(e.signal.reason),{once:!0}));const l=y.sendStream({type:"llm.chat",messages:e.messages,options:e.options||{}},{onChunk:o=>a.push(o),onStatus:e.onStatus,idleMs:e.idleMs??21e4,followServerTimeout:e.idleMs==null,signal:t.signal}).then(o=>(a.finish(null),o),o=>{throw a.finish(o),o});function u(){t.signal.aborted||t.abort(new Error("aborted"))}return{stream:a.iterate(),result:l,cancel:u}}async function _(e){const a=typeof e.onDelta=="function"?e.onDelta:()=>{},{stream:t,result:l}=r(e);try{for await(const u of t)a(u)}catch{}return l}return{chat:r,chatTo:_}}const R={style:{"margin-bottom":"24px"}},W={class:"page-title"},G={class:"page-sub"},H={style:{display:"flex","justify-content":"space-between","align-items":"center","margin-top":"12px"}},J={style:{display:"flex",gap:"8px","align-items":"center",color:"var(--text-muted)","font-size":"11px"}},X={key:0},Y={key:1},Z={key:2},ee={key:0,style:{color:"#1677ff","font-size":"11px"}},te={key:1,style:{color:"#52c41a","font-size":"11px"}},ne={key:0,style:{margin:"0","white-space":"pre-wrap","font-family":"var(--font-body, system-ui)","font-size":"13px"}},ae={key:2,style:{background:"#2a1517",border:"1px solid #5c2426",padding:"8px","border-radius":"4px","margin-top":"8px"}},oe={style:{color:"#ff7875","font-size":"11px",margin:"0","white-space":"pre-wrap"}},re={__name:"QuickAsk",setup(y){const r=I(),{t:_}=V(),e=h(""),a=h(""),t=h(""),l=h(!1),u=h(""),o=h(null),$=h("");let C=null;async function M(){if(!(l.value||!e.value.trim())){l.value=!0,t.value="",u.value="",o.value=null,$.value="";try{const n=[{role:"user",content:e.value}],k={},S=a.value.trim();S&&(k.model=S);const g=r.chat({messages:n,options:k,onStatus:c=>{c?.stage==="waiting"&&($.value=_("quickAsk.waitingForProvider",{provider:c.provider||"",model:c.model||"",seconds:Math.ceil((c.timeoutMs||18e4)/1e3)}))}});C=g;try{for await(const c of g.stream)c?.content?t.value=c.content:c?.delta&&(t.value+=c.delta)}catch{}const p=await g.result;o.value={model:p?.model||null,tokens:p?.tokens??null},!t.value&&p?.message?.content&&(t.value=p.message.content)}catch(n){u.value=n?.message||String(n)}finally{l.value=!1,C=null}}}function B(){C?.cancel&&C.cancel()}function T(){t.value="",u.value="",o.value=null}return E(B),(n,k)=>{const S=b("a-textarea"),g=b("a-input"),p=b("a-button"),c=b("a-space"),N=b("a-card"),D=b("a-empty");return i(),f("div",null,[w("div",R,[w("h2",W,s(n.$t("quickAsk.title")),1),w("p",G,s(n.$t("quickAsk.subtitle")),1)]),v(N,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:d(()=>[v(S,{value:e.value,"onUpdate:value":k[0]||(k[0]=z=>e.value=z),rows:4,placeholder:n.$t("quickAsk.promptPlaceholder"),disabled:l.value,onKeydown:[O(P(M,["ctrl","prevent"]),["enter"]),O(P(M,["meta","prevent"]),["enter"])]},null,8,["value","placeholder","disabled","onKeydown"]),w("div",H,[w("div",J,[v(g,{value:a.value,"onUpdate:value":k[1]||(k[1]=z=>a.value=z),placeholder:n.$t("quickAsk.modelPlaceholder"),size:"small",style:{width:"200px"},disabled:l.value,"allow-clear":""},null,8,["value","placeholder","disabled"]),t.value?(i(),f("span",X,s(t.value.length)+" "+s(n.$t("quickAsk.charsSuffix")),1)):m("",!0),o.value?(i(),f("span",Y,"· "+s(o.value.tokens??0)+" "+s(n.$t("quickAsk.tokensSuffix")),1)):m("",!0),o.value?.model?(i(),f("span",Z,"· "+s(o.value.model),1)):m("",!0)]),v(c,null,{default:d(()=>[t.value||u.value?(i(),A(p,{key:0,disabled:l.value,onClick:T},{default:d(()=>[q(s(n.$t("quickAsk.clear")),1)]),_:1},8,["disabled"])):m("",!0),l.value?(i(),A(p,{key:1,danger:"",onClick:B},{icon:d(()=>[v(x(L))]),default:d(()=>[q(" "+s(n.$t("quickAsk.cancel")),1)]),_:1})):(i(),A(p,{key:2,type:"primary",disabled:!e.value.trim(),onClick:M},{icon:d(()=>[v(x(Q))]),default:d(()=>[q(" "+s(n.$t("quickAsk.send")),1)]),_:1},8,["disabled"]))]),_:1})])]),_:1}),t.value||l.value||u.value?(i(),A(N,{key:0,title:n.$t("quickAsk.answerCardTitle"),style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-top":"16px"}},{extra:d(()=>[l.value?(i(),f("span",ee,[v(x(U),{spin:!0}),q(" "+s(n.$t("quickAsk.streaming")),1)])):o.value?(i(),f("span",te,[v(x(F)),q(" "+s(n.$t("quickAsk.done")),1)])):m("",!0)]),default:d(()=>[t.value?(i(),f("pre",ne,s(t.value),1)):l.value?(i(),A(D,{key:1,description:$.value||n.$t("quickAsk.waitingFirstToken")},null,8,["description"])):m("",!0),u.value?(i(),f("div",ae,[w("pre",oe,s(u.value),1)])):m("",!0)]),_:1},8,["title"])):m("",!0)])}}};export{re as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.page-title[data-v-16fcadc2]{margin:0;color:var(--text-primary);font-size:22px;font-weight:600}.page-sub[data-v-16fcadc2]{margin:4px 0 0;color:var(--text-secondary);font-size:13px}.recommend-tabs[data-v-16fcadc2] .ant-tabs-nav{margin-bottom:16px}.filter-bar[data-v-16fcadc2]{display:flex;align-items:center;gap:12px;margin-bottom:12px;flex-wrap:wrap}.type-pill[data-v-16fcadc2]{padding:8px 12px;border-radius:6px;background:#1677ff0a;border:1px solid var(--border-color);border-left:3px solid #1677ff;height:100%;display:flex;align-items:center;gap:8px}.type-name[data-v-16fcadc2]{color:var(--text-primary);font-size:13px}.interest-row[data-v-16fcadc2]{display:flex;align-items:center;margin-bottom:8px}.interest-topic[data-v-16fcadc2]{min-width:100px;font-family:monospace;font-size:12px;color:var(--text-primary)}.weights-pre[data-v-16fcadc2]{margin:0;padding:8px 10px;background:var(--bg-base);border:1px solid var(--border-color);border-radius:4px;font-size:11px;max-height:200px;overflow:auto;color:var(--text-primary)}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as P,_ as Xe,b as Ze,u as et,E as tt,d as y}from"./index-3RqDry-K.js";import{R as ot,aQ as nt,aW as at,r as st,al as ke,ab as be,aX as rt,aU as lt,aB as it}from"./icons-DlxlFL4g.js";import{o as ct,M as g,R as x,P as c,u as t,c as a,N as n,K as f,r as C,L as d,O as p,Q as _,S as v,F as A,Y as Q,_ as dt,f as X,a as ut}from"./vendor-BXcBOG8b.js";const xe=Object.freeze(["note","post","article","document"]),mt=Object.freeze(["pending","viewed","dismissed"]);function S(s,e=0){return typeof s=="number"&&Number.isFinite(s)?s:e}function he(s){if(!s||typeof s!="object"||Array.isArray(s))return{};const e={};for(const[i,h]of Object.entries(s))typeof h=="number"&&Number.isFinite(h)&&(e[i]=h);return e}function pt(s,e=0){if(!s||typeof s!="object")return null;const i=s.user_id??s.userId??"";if(!i)return null;const h=s.topics&&typeof s.topics=="object"&&!Array.isArray(s.topics)?he(s.topics):{},I=s.interaction_weights??s.interactionWeights,N=I&&typeof I=="object"&&!Array.isArray(I)?he(I):{};return{key:i,id:String(s.id||""),userId:i,topics:h,topicCount:Object.keys(h).length,interactionWeights:N,decayFactor:S(s.decay_factor??s.decayFactor,.9),lastUpdated:s.last_updated??s.lastUpdated??null,updateCount:S(s.update_count??s.updateCount,0),_idx:e}}function ft(s){const e=P(s);return Array.isArray(e)?e.map(pt).filter(Boolean):[]}function yt(s,e=0){if(!s||typeof s!="object")return null;const i=s.id||"";return i?{key:i,id:i,userId:s.user_id??s.userId??"",contentId:s.content_id??s.contentId??"",contentType:String(s.content_type??s.contentType??"note").toLowerCase(),title:String(s.title||""),score:S(s.score,0),reason:String(s.reason||""),source:String(s.source||"heuristic"),status:String(s.status||"pending").toLowerCase(),feedback:s.feedback??null,createdAt:s.created_at??s.createdAt??null,viewedAt:s.viewed_at??s.viewedAt??null,_idx:e}:null}function gt(s){const e=P(s);return Array.isArray(e)?e.map(yt).filter(Boolean):[]}const _t={total:0,pending:0,viewed:0,dismissed:0,feedbackCount:0,feedbackRate:0,avgScore:0};function vt(s){const e={..._t},i=P(s);return!i||typeof i!="object"||Array.isArray(i)||(e.total=S(i.total,0),e.pending=S(i.pending,0),e.viewed=S(i.viewed,0),e.dismissed=S(i.dismissed,0),e.feedbackCount=S(i.feedbackCount,0),e.feedbackRate=S(i.feedbackRate,0),e.avgScore=S(i.avgScore,0)),e}function kt(s){const e=P(s);return Array.isArray(e)?e.filter(i=>i&&typeof i=="object"&&typeof i.topic=="string").map((i,h)=>({key:`${i.topic}-${h}`,topic:i.topic,weight:S(i.weight,0)})):[]}function bt(s){const e=P(s);return Array.isArray(e)?e.filter(i=>i&&typeof i=="object"&&typeof i.topic=="string"&&typeof i.action=="string").map((i,h)=>({key:`${i.topic}-${h}`,topic:i.topic,action:i.action,amount:S(i.amount,0)})):[]}function J(s){const e=P(s);return!e||typeof e!="object"||Array.isArray(e)?{ok:!1,reason:"",profileId:null,topicCount:null}:{ok:!!(e.updated||e.deleted||e.marked||e.dismissed||e.recorded||e.applied||e.profileId),reason:e.reason?String(e.reason):"",profileId:e.profileId?String(e.profileId):null,topicCount:typeof e.topicCount=="number"?e.topicCount:null}}function Ce(s){if(s==null||s==="")return"—";const e=typeof s=="number"?new Date(s):new Date(String(s));return isNaN(e.getTime())?String(s):e.toLocaleString("zh-CN",{hour12:!1})}const xt={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},ht={class:"page-title"},Ct={class:"page-sub"},wt={style:{display:"flex","align-items":"center",gap:"12px","flex-wrap":"wrap"}},St={style:{color:"var(--text-secondary)","font-size":"12px"}},It={class:"type-name"},zt={class:"filter-bar"},At={style:{color:"var(--text-primary)","font-weight":"500"}},Ft={style:{color:"var(--text-muted)","font-size":"11px","margin-top":"2px"}},Tt={key:3,style:{color:"var(--text-secondary)","font-size":"12px"}},Ot={key:1,style:{color:"var(--text-muted)"}},Rt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},Ut={key:0,style:{color:"var(--text-primary)","font-family":"monospace","font-weight":"500"}},$t={key:2,style:{color:"var(--text-secondary)","font-family":"monospace","font-size":"12px"}},jt={key:3,style:{color:"var(--text-secondary)"}},Jt={key:4,style:{color:"var(--text-secondary)","font-size":"11px"}},Pt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},Nt={key:1},Et={class:"interest-topic"},Lt={style:{"margin-left":"8px","font-family":"monospace",color:"var(--text-primary)"}},Mt={style:{"margin-left":"auto",color:"var(--text-secondary)","font-size":"12px"}},Bt={key:0,style:{"padding-top":"8px"}},Dt={style:{"font-family":"monospace","font-size":"12px"}},Wt={style:{color:"var(--text-primary)","font-size":"13px",margin:"16px 0 8px"}},Vt={key:1},Kt={class:"interest-topic"},Qt={key:2,style:{color:"var(--text-primary)","font-size":"13px",margin:"16px 0 8px"}},Yt={key:3,class:"weights-pre"},qt={__name:"Recommend",setup(s){const{t:e}=Ze(),i=et(),h=tt.PRESENTED_IMAGE_SIMPLE,I=C(!1),N=C(!1),Z=C(!1),E=C([]),ee=C([]),F=C({total:0,pending:0,viewed:0,dismissed:0,feedbackCount:0,feedbackRate:0,avgScore:0}),Y=C([]),U=C([]),k=C(null),q=C("recs"),L=C(""),M=C(""),G=C(!1),te=C(!1),b=ut({userId:"",topicsJson:"",weightsJson:""}),w=C(null),we=X(()=>E.value.map(o=>({value:o.userId,label:`${o.userId} (${e("recommend.userBar.topicSuffix",{count:o.topicCount})})`}))),Se=X(()=>[{title:e("recommend.recColumns.title"),key:"title"},{title:e("recommend.recColumns.contentType"),key:"contentType",width:"110px"},{title:e("recommend.recColumns.score"),key:"score",width:"180px"},{title:e("recommend.recColumns.reason"),key:"reason",width:"220px"},{title:e("recommend.recColumns.status"),key:"status",width:"100px"},{title:e("recommend.recColumns.feedback"),key:"feedback",width:"90px"},{title:e("recommend.recColumns.action"),key:"action",width:"210px"}]),Ie=X(()=>[{title:e("recommend.profileColumns.userId"),key:"userId"},{title:e("recommend.profileColumns.topicCount"),key:"topicCount",width:"110px"},{title:e("recommend.profileColumns.decayFactor"),key:"decayFactor",width:"110px"},{title:e("recommend.profileColumns.updateCount"),key:"updateCount",width:"110px"},{title:e("recommend.profileColumns.lastUpdated"),key:"lastUpdated",width:"180px"},{title:e("recommend.profileColumns.action"),key:"action",width:"200px"}]),ze=X(()=>{let o=ee.value;return L.value&&(o=o.filter(l=>l.status===L.value)),M.value&&(o=o.filter(l=>l.contentType===M.value)),o});function le(o){const l=`recommend.type.${o}`,u=e(l);return u===l?o:u}function ie(o){return{note:"blue",post:"green",article:"purple",document:"orange"}[o]||"default"}function Ae(o){return{note:"#1677ff",post:"#52c41a",article:"#722ed1",document:"#fa8c16"}[o]||"#888"}function ce(o){const l=`recommend.status.${o}`,u=e(l);return u===l?o:u}function Fe(o){return{pending:"processing",viewed:"green",dismissed:"default"}[o]||"default"}function Te(o){const l=`recommend.feedbackLabel.${o}`,u=e(l);return u===l?o:u}function Oe(o){return{like:"green",dislike:"red",later:"gold"}[o]||"default"}function de(o){return o>=.7?"#52c41a":o>=.4?"#1677ff":o>=.2?"#faad14":"#ff4d4f"}function ue(o){return o>=.7?"#52c41a":o>=.4?"#1677ff":o>=.2?"#faad14":"#888"}function Re(o){try{return JSON.stringify(o,null,2)}catch{return String(o)}}async function B(){I.value=!0;try{const{output:o}=await i.execute("recommend profiles --json",1e4).catch(()=>({output:""}));E.value=ft(o),k.value&&!E.value.find(l=>l.userId===k.value)&&(k.value=null),k.value&&await R()}catch(o){y.error(e("recommend.messages.loadProfilesFailed",{err:o?.message||o}))}finally{I.value=!1}}async function R(){if(!k.value){ee.value=[],F.value={total:0,pending:0,viewed:0,dismissed:0,feedbackCount:0,feedbackRate:0,avgScore:0},Y.value=[];return}N.value=!0;try{const o=D(k.value),[l,u,T]=await Promise.all([i.execute(`recommend list ${o} --limit 200 --json`,1e4).catch(()=>({output:""})),i.execute(`recommend stats ${o} --json`,8e3).catch(()=>({output:""})),i.execute(`recommend top-interests ${o} --limit 30 --json`,8e3).catch(()=>({output:""}))]);ee.value=gt(l.output),F.value=vt(u.output),Y.value=kt(T.output)}catch(o){y.error(e("recommend.messages.loadUserFailed",{err:o?.message||o}))}finally{N.value=!1}}function D(o){return`"${String(o).replace(/"/g,'\\"')}"`}function Ue(){U.value=[],R()}function $e(o){k.value=o,q.value="recs",R()}async function je(){if(!b.userId.trim()){y.warning(e("recommend.messages.userIdRequired"));return}if(b.topicsJson.trim())try{JSON.parse(b.topicsJson)}catch{y.warning(e("recommend.messages.topicsJsonInvalid"));return}if(b.weightsJson.trim())try{JSON.parse(b.weightsJson)}catch{y.warning(e("recommend.messages.weightsJsonInvalid"));return}Z.value=!0;try{const o=[`recommend create-profile ${D(b.userId.trim())}`];b.topicsJson.trim()&&o.push(`-t ${me(b.topicsJson.trim())}`),b.weightsJson.trim()&&o.push(`-w ${me(b.weightsJson.trim())}`),o.push("--json");const{output:l}=await i.execute(o.join(" "),1e4),u=J(l);if(!u.ok){y.error(e("recommend.messages.createFailed",{err:u.reason||l.slice(0,120)}));return}y.success(e("recommend.messages.createOk",{id:u.profileId?.slice(0,8)||""})),G.value=!1;const T=b.userId.trim();pe(),await B(),k.value=T,await R()}catch(o){y.error(e("recommend.messages.createFailed",{err:o?.message||o}))}finally{Z.value=!1}}function me(o){return`'${String(o).replace(/'/g,"'\\''")}'`}async function Je(){if(k.value)try{const{output:o}=await i.execute(`recommend decay ${D(k.value)} --json`,8e3),l=J(o);if(!l.ok){y.error(e("recommend.messages.decayFailed",{err:l.reason||o.slice(0,120)}));return}y.success(l.topicCount!==null?e("recommend.messages.decayOkTopics",{count:l.topicCount}):e("recommend.messages.decayOk")),await B()}catch(o){y.error(e("recommend.messages.decayFailed",{err:o?.message||o}))}}async function Pe(){if(k.value)try{const{output:o}=await i.execute(`recommend suggest ${D(k.value)} --json`,8e3);U.value=bt(o),q.value="interests",U.value.length?y.success(e("recommend.messages.suggestFound",{count:U.value.length})):y.info(e("recommend.messages.suggestNone"))}catch(o){y.error(e("recommend.messages.loadSuggestFailed",{err:o?.message||o}))}}async function Ne(o){try{const{output:l}=await i.execute(`recommend delete-profile ${D(o.userId)} --json`,8e3),u=J(l);if(!u.ok){y.error(e("recommend.messages.deleteFailed",{err:u.reason||l.slice(0,120)}));return}y.success(e("recommend.messages.deleteOk")),k.value===o.userId&&(k.value=null),await B()}catch(l){y.error(e("recommend.messages.deleteFailed",{err:l?.message||l}))}}function Ee(o){w.value=o,te.value=!0}async function Le(o){try{const{output:l}=await i.execute(`recommend view ${o.id} --json`,8e3),u=J(l);if(!u.ok){y.error(e("recommend.messages.viewFailed",{err:u.reason||l.slice(0,120)}));return}y.success(e("recommend.messages.viewOk")),await R()}catch(l){y.error(e("recommend.messages.viewFailed",{err:l?.message||l}))}}async function Me(o,l){try{const{output:u}=await i.execute(`recommend feedback ${o.id} ${l} --json`,8e3),T=J(u);if(!T.ok){y.error(e("recommend.messages.feedbackFailed",{err:T.reason||u.slice(0,120)}));return}y.success(e("recommend.messages.feedbackOk")),await R()}catch(u){y.error(e("recommend.messages.feedbackFailed",{err:u?.message||u}))}}async function Be(o){try{const{output:l}=await i.execute(`recommend dismiss ${o.id} --json`,8e3),u=J(l);if(!u.ok){y.error(e("recommend.messages.dismissFailed",{err:u.reason||l.slice(0,120)}));return}y.success(e("recommend.messages.dismissOk")),await R()}catch(l){y.error(e("recommend.messages.dismissFailed",{err:l?.message||l}))}}function pe(){b.userId="",b.topicsJson="",b.weightsJson=""}return ct(B),(o,l)=>{const u=f("a-button"),T=f("a-space"),De=f("a-select"),z=f("a-card"),W=f("a-statistic"),O=f("a-col"),oe=f("a-row"),$=f("a-tag"),H=f("a-radio-button"),fe=f("a-radio-group"),V=f("a-empty"),ne=f("a-progress"),ae=f("a-menu-item"),We=f("a-menu"),Ve=f("a-dropdown"),ye=f("a-popconfirm"),ge=f("a-table"),se=f("a-tab-pane"),Ke=f("a-list-item"),Qe=f("a-list"),Ye=f("a-tabs"),qe=f("a-input"),re=f("a-form-item"),_e=f("a-textarea"),Ge=f("a-form"),ve=f("a-modal"),K=f("a-descriptions-item"),He=f("a-descriptions");return d(),g("div",null,[x("div",xt,[x("div",null,[x("h2",ht,c(t(e)("recommend.title")),1),x("p",Ct,c(t(e)("recommend.subtitle")),1)]),a(T,null,{default:n(()=>[a(u,{loading:I.value,onClick:B},{icon:n(()=>[a(t(ot))]),default:n(()=>[p(" "+c(t(e)("recommend.refresh")),1)]),_:1},8,["loading"]),a(u,{type:"primary",onClick:l[0]||(l[0]=r=>G.value=!0)},{icon:n(()=>[a(t(nt))]),default:n(()=>[p(" "+c(t(e)("recommend.createProfile")),1)]),_:1})]),_:1})]),a(z,{size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"},"body-style":{padding:"10px 16px"}},{default:n(()=>[x("div",wt,[x("span",St,c(t(e)("recommend.userBar.currentUser")),1),a(De,{value:k.value,"onUpdate:value":l[1]||(l[1]=r=>k.value=r),options:we.value,placeholder:t(e)("recommend.userBar.selectPlaceholder"),style:{"min-width":"280px"},"allow-clear":"","show-search":"",onChange:Ue},null,8,["value","options","placeholder"]),k.value?(d(),_(u,{key:0,size:"small",onClick:Je},{icon:n(()=>[a(t(at))]),default:n(()=>[p(" "+c(t(e)("recommend.userBar.applyDecay")),1)]),_:1})):v("",!0),k.value?(d(),_(u,{key:1,size:"small",onClick:Pe},{icon:n(()=>[a(t(st))]),default:n(()=>[p(" "+c(t(e)("recommend.userBar.suggest")),1)]),_:1})):v("",!0)])]),_:1}),a(oe,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:n(()=>[a(O,{xs:12,sm:8,lg:5},{default:n(()=>[a(z,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[a(W,{title:t(e)("recommend.stats.profiles"),value:E.value.length,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:n(()=>[a(t(ke))]),_:1},8,["title","value"])]),_:1})]),_:1}),a(O,{xs:12,sm:8,lg:5},{default:n(()=>[a(z,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[a(W,{title:t(e)("recommend.stats.totalRecs"),value:F.value.total,"value-style":{color:"#722ed1",fontSize:"20px"}},{prefix:n(()=>[a(t(be))]),_:1},8,["title","value"])]),_:1})]),_:1}),a(O,{xs:12,sm:8,lg:5},{default:n(()=>[a(z,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[a(W,{title:t(e)("recommend.stats.pending"),value:F.value.pending,"value-style":{color:F.value.pending>0?"#faad14":"#888",fontSize:"20px"}},{prefix:n(()=>[a(t(rt))]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),a(O,{xs:12,sm:8,lg:5},{default:n(()=>[a(z,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[a(W,{title:t(e)("recommend.stats.feedbackRate"),value:F.value.feedbackRate*100,suffix:"%",precision:1,"value-style":{color:"#13c2c2",fontSize:"20px"}},{prefix:n(()=>[a(t(lt))]),_:1},8,["title","value"])]),_:1})]),_:1}),a(O,{xs:24,sm:8,lg:4},{default:n(()=>[a(z,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[a(W,{title:t(e)("recommend.stats.avgScore"),value:F.value.avgScore,precision:3,"value-style":{color:de(F.value.avgScore),fontSize:"20px"}},{prefix:n(()=>[a(t(it))]),_:1},8,["title","value","value-style"])]),_:1})]),_:1})]),_:1}),a(z,{title:t(e)("recommend.typeCatalogue"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"},"body-style":{padding:"12px 16px"}},{default:n(()=>[a(oe,{gutter:[12,12]},{default:n(()=>[(d(!0),g(A,null,Q(t(xe),r=>(d(),_(O,{key:r,xs:12,sm:6},{default:n(()=>[x("div",{class:"type-pill",style:dt({borderLeftColor:Ae(r)})},[a($,{color:ie(r),style:{"font-family":"monospace"}},{default:n(()=>[p(c(r),1)]),_:2},1032,["color"]),x("div",It,c(le(r)),1)],4)]),_:2},1024))),128))]),_:1})]),_:1},8,["title"]),a(Ye,{activeKey:q.value,"onUpdate:activeKey":l[4]||(l[4]=r=>q.value=r),class:"recommend-tabs"},{default:n(()=>[a(se,{key:"recs",tab:t(e)("recommend.tabs.recs")},{default:n(()=>[x("div",zt,[a(fe,{value:L.value,"onUpdate:value":l[2]||(l[2]=r=>L.value=r),size:"small","button-style":"solid"},{default:n(()=>[a(H,{value:""},{default:n(()=>[p(c(t(e)("recommend.filter.allStatuses")),1)]),_:1}),(d(!0),g(A,null,Q(t(mt),r=>(d(),_(H,{key:r,value:r},{default:n(()=>[p(c(ce(r)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),a(fe,{value:M.value,"onUpdate:value":l[3]||(l[3]=r=>M.value=r),size:"small"},{default:n(()=>[a(H,{value:""},{default:n(()=>[p(c(t(e)("recommend.filter.allTypes")),1)]),_:1}),(d(!0),g(A,null,Q(t(xe),r=>(d(),_(H,{key:r,value:r},{default:n(()=>[p(c(le(r)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),k.value?(d(),_(ge,{key:1,columns:Se.value,"data-source":ze.value,pagination:{pageSize:20,showTotal:r=>t(e)("recommend.totals.rows",{count:r})},size:"small",loading:N.value,style:{background:"var(--bg-card)"}},{bodyCell:n(({column:r,record:m})=>[r.key==="title"?(d(),g(A,{key:0},[x("span",At,c(m.title||t(e)("recommend.noTitle")),1),x("div",Ft,c(m.contentId),1)],64)):v("",!0),r.key==="contentType"?(d(),_($,{key:1,color:ie(m.contentType),style:{"font-family":"monospace"}},{default:n(()=>[p(c(m.contentType),1)]),_:2},1032,["color"])):v("",!0),r.key==="score"?(d(),_(ne,{key:2,percent:Math.round(m.score*100),"stroke-color":de(m.score),size:"small",format:()=>m.score.toFixed(3)},null,8,["percent","stroke-color","format"])):v("",!0),r.key==="reason"?(d(),g("span",Tt,c(m.reason),1)):v("",!0),r.key==="status"?(d(),_($,{key:4,color:Fe(m.status)},{default:n(()=>[p(c(ce(m.status)),1)]),_:2},1032,["color"])):v("",!0),r.key==="feedback"?(d(),g(A,{key:5},[m.feedback?(d(),_($,{key:0,color:Oe(m.feedback)},{default:n(()=>[p(c(Te(m.feedback)),1)]),_:2},1032,["color"])):(d(),g("span",Ot,"—"))],64)):v("",!0),r.key==="action"?(d(),g(A,{key:6},[m.status==="pending"?(d(),_(u,{key:0,size:"small",type:"link",onClick:j=>Le(m)},{default:n(()=>[p(c(t(e)("recommend.rowActions.view")),1)]),_:1},8,["onClick"])):v("",!0),m.status!=="dismissed"?(d(),_(Ve,{key:1},{overlay:n(()=>[a(We,{onClick:({key:j})=>Me(m,j)},{default:n(()=>[a(ae,{key:"like",style:{color:"#52c41a"}},{default:n(()=>[p(c(t(e)("recommend.feedbackMenu.like")),1)]),_:1}),a(ae,{key:"dislike",style:{color:"#ff4d4f"}},{default:n(()=>[p(c(t(e)("recommend.feedbackMenu.dislike")),1)]),_:1}),a(ae,{key:"later"},{default:n(()=>[p(c(t(e)("recommend.feedbackMenu.later")),1)]),_:1})]),_:1},8,["onClick"])]),default:n(()=>[a(u,{size:"small",type:"link"},{default:n(()=>[p(c(t(e)("recommend.feedbackDropdown")),1)]),_:1})]),_:2},1024)):v("",!0),m.status!=="dismissed"?(d(),_(ye,{key:2,title:t(e)("recommend.rowActions.dismissConfirmTitle"),"ok-text":t(e)("recommend.rowActions.dismissOk"),"cancel-text":t(e)("common.cancel"),onConfirm:j=>Be(m)},{default:n(()=>[a(u,{size:"small",type:"link",danger:""},{default:n(()=>[p(c(t(e)("recommend.rowActions.dismiss")),1)]),_:1})]),_:1},8,["title","ok-text","cancel-text","onConfirm"])):v("",!0)],64)):v("",!0)]),emptyText:n(()=>[x("div",Rt,[a(t(be),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),p(" "+c(L.value||M.value?t(e)("recommend.empty.filtered"):t(e)("recommend.empty.noRecsHint")),1)])]),_:1},8,["columns","data-source","pagination","loading"])):(d(),_(V,{key:0,description:t(e)("recommend.empty.selectUser"),image:t(h),style:{padding:"40px 0"}},null,8,["description","image"]))]),_:1},8,["tab"]),a(se,{key:"profiles",tab:t(e)("recommend.tabs.profiles")},{default:n(()=>[a(ge,{columns:Ie.value,"data-source":E.value,pagination:{pageSize:20,showTotal:r=>t(e)("recommend.totals.profiles",{count:r})},size:"small",loading:I.value,style:{background:"var(--bg-card)"}},{bodyCell:n(({column:r,record:m})=>[r.key==="userId"?(d(),g("span",Ut,c(m.userId),1)):v("",!0),r.key==="topicCount"?(d(),_($,{key:1,color:"blue"},{default:n(()=>[p(c(t(e)("recommend.topicTagSuffix",{count:m.topicCount})),1)]),_:2},1024)):v("",!0),r.key==="decayFactor"?(d(),g("span",$t,c(m.decayFactor.toFixed(2)),1)):v("",!0),r.key==="updateCount"?(d(),g("span",jt,c(m.updateCount),1)):v("",!0),r.key==="lastUpdated"?(d(),g("span",Jt,c(t(Ce)(m.lastUpdated)),1)):v("",!0),r.key==="action"?(d(),g(A,{key:5},[a(u,{size:"small",type:"link",onClick:j=>Ee(m)},{default:n(()=>[p(c(t(e)("recommend.rowActions.details")),1)]),_:1},8,["onClick"]),a(u,{size:"small",type:"link",onClick:j=>$e(m.userId)},{default:n(()=>[p(c(t(e)("recommend.rowActions.switch")),1)]),_:1},8,["onClick"]),a(ye,{title:t(e)("recommend.rowActions.deleteConfirmTitle"),"ok-text":t(e)("recommend.rowActions.deleteOk"),"cancel-text":t(e)("common.cancel"),onConfirm:j=>Ne(m)},{default:n(()=>[a(u,{size:"small",type:"link",danger:""},{default:n(()=>[p(c(t(e)("recommend.rowActions.delete")),1)]),_:1})]),_:1},8,["title","ok-text","cancel-text","onConfirm"])],64)):v("",!0)]),emptyText:n(()=>[x("div",Pt,[a(t(ke),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),p(" "+c(t(e)("recommend.empty.noProfiles")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),a(se,{key:"interests",tab:t(e)("recommend.tabs.interests")},{default:n(()=>[k.value?(d(),_(oe,{key:1,gutter:[16,16]},{default:n(()=>[a(O,{xs:24,lg:14},{default:n(()=>[a(z,{title:t(e)("recommend.interest.topicWeights"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[Y.value.length?(d(),g("div",Nt,[(d(!0),g(A,null,Q(Y.value,r=>(d(),g("div",{key:r.key,class:"interest-row"},[x("span",Et,c(r.topic),1),a(ne,{percent:Math.round(r.weight*100),"stroke-color":ue(r.weight),format:()=>r.weight.toFixed(3),size:"small",style:{flex:"1","margin-left":"12px"}},null,8,["percent","stroke-color","format"])]))),128))])):(d(),_(V,{key:0,description:t(e)("recommend.empty.noInterests"),image:t(h)},null,8,["description","image"]))]),_:1},8,["title"])]),_:1}),a(O,{xs:24,lg:10},{default:n(()=>[a(z,{title:t(e)("recommend.interest.feedbackSuggest"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[U.value.length?(d(),_(Qe,{key:1,size:"small","data-source":U.value},{renderItem:n(({item:r})=>[a(Ke,null,{default:n(()=>[a($,{color:r.action==="boost"?"green":"orange"},{default:n(()=>[p(c(r.action==="boost"?t(e)("recommend.interest.boost"):t(e)("recommend.interest.lower")),1)]),_:2},1032,["color"]),x("span",Lt,c(r.topic),1),x("span",Mt,"±"+c(r.amount),1)]),_:2},1024)]),_:1},8,["data-source"])):(d(),_(V,{key:0,description:t(e)("recommend.empty.noSuggestions"),image:t(h)},null,8,["description","image"]))]),_:1},8,["title"])]),_:1})]),_:1})):(d(),_(V,{key:0,description:t(e)("recommend.empty.selectUser"),image:t(h),style:{padding:"40px 0"}},null,8,["description","image"]))]),_:1},8,["tab"])]),_:1},8,["activeKey"]),a(ve,{open:G.value,"onUpdate:open":l[8]||(l[8]=r=>G.value=r),title:t(e)("recommend.create.title"),"confirm-loading":Z.value,width:560,"ok-text":t(e)("recommend.create.ok"),"cancel-text":t(e)("common.cancel"),onOk:je,onCancel:pe},{default:n(()=>[a(Ge,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:n(()=>[a(re,{label:t(e)("recommend.create.userIdLabel"),required:""},{default:n(()=>[a(qe,{value:b.userId,"onUpdate:value":l[5]||(l[5]=r=>b.userId=r),placeholder:t(e)("recommend.create.userIdPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),a(re,{label:t(e)("recommend.create.topicsLabel")},{default:n(()=>[a(_e,{value:b.topicsJson,"onUpdate:value":l[6]||(l[6]=r=>b.topicsJson=r),placeholder:t(e)("recommend.create.topicsPlaceholder"),"auto-size":{minRows:2,maxRows:5}},null,8,["value","placeholder"])]),_:1},8,["label"]),a(re,{label:t(e)("recommend.create.weightsLabel")},{default:n(()=>[a(_e,{value:b.weightsJson,"onUpdate:value":l[7]||(l[7]=r=>b.weightsJson=r),placeholder:t(e)("recommend.create.weightsPlaceholder"),"auto-size":{minRows:2,maxRows:5}},null,8,["value","placeholder"])]),_:1},8,["label"])]),_:1})]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),a(ve,{open:te.value,"onUpdate:open":l[9]||(l[9]=r=>te.value=r),title:t(e)("recommend.details.title",{userId:w.value?.userId||""}),width:680,footer:null},{default:n(()=>[w.value?(d(),g("div",Bt,[a(He,{column:2,size:"small",bordered:""},{default:n(()=>[a(K,{label:t(e)("recommend.details.id"),span:2},{default:n(()=>[x("span",Dt,c(w.value.id),1)]),_:1},8,["label"]),a(K,{label:t(e)("recommend.details.topicCount")},{default:n(()=>[p(c(w.value.topicCount),1)]),_:1},8,["label"]),a(K,{label:t(e)("recommend.details.decayFactor")},{default:n(()=>[p(c(w.value.decayFactor.toFixed(2)),1)]),_:1},8,["label"]),a(K,{label:t(e)("recommend.details.updateCount")},{default:n(()=>[p(c(w.value.updateCount),1)]),_:1},8,["label"]),a(K,{label:t(e)("recommend.details.lastUpdated")},{default:n(()=>[p(c(t(Ce)(w.value.lastUpdated)),1)]),_:1},8,["label"])]),_:1}),x("h4",Wt,c(t(e)("recommend.details.topicWeights")),1),Object.keys(w.value.topics).length?(d(),g("div",Vt,[(d(!0),g(A,null,Q(w.value.topics,(r,m)=>(d(),g("div",{key:m,class:"interest-row"},[x("span",Kt,c(m),1),a(ne,{percent:Math.round(r*100),"stroke-color":ue(r),format:()=>r.toFixed(3),size:"small",style:{flex:"1","margin-left":"12px"}},null,8,["percent","stroke-color","format"])]))),128))])):(d(),_(V,{key:0,description:t(e)("recommend.empty.noTopics"),image:t(h)},null,8,["description","image"])),Object.keys(w.value.interactionWeights).length?(d(),g("h4",Qt,c(t(e)("recommend.details.interactionWeights")),1)):v("",!0),Object.keys(w.value.interactionWeights).length?(d(),g("pre",Yt,c(Re(w.value.interactionWeights)),1)):v("",!0)])):v("",!0)]),_:1},8,["open","title"])])}}},Zt=Xe(qt,[["__scopeId","data-v-16fcadc2"]]);export{Zt as default};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import{E as wr,r as ue,o as yr,a7 as br,M as we,R as $e,c as L,N as R,u as ne,Q as se,S as ae,K as ie,f as nt,L as H,O as V,P as de,F as Qt,Y as Jt,a4 as Er}from"./vendor-BXcBOG8b.js";import{Q as vr}from"./QrScannerModal-CxifoeD5.js";import{aC as xr,ay as Ir}from"./icons-DlxlFL4g.js";import"./markdown-DUKxbhE4.js";import"./index-3RqDry-K.js";function Sr(t){return t instanceof Uint8Array||ArrayBuffer.isView(t)&&t.constructor.name==="Uint8Array"&&"BYTES_PER_ELEMENT"in t&&t.BYTES_PER_ELEMENT===1}function De(t,e=""){if(typeof t!="number"){const n=e&&`"${e}" `;throw new TypeError(`${n}expected number, got ${typeof t}`)}if(!Number.isSafeInteger(t)||t<0){const n=e&&`"${e}" `;throw new RangeError(`${n}expected integer >= 0, got ${t}`)}}function be(t,e,n=""){const r=Sr(t),o=t?.length,s=e!==void 0;if(!r||s&&o!==e){const i=n&&`"${n}" `,a=s?` of length ${e}`:"",l=r?`length=${o}`:`type=${typeof t}`,c=i+"expected Uint8Array"+a+", got "+l;throw r?new RangeError(c):new TypeError(c)}return t}function Dt(t){if(typeof t!="function"||typeof t.create!="function")throw new TypeError("Hash must wrapped by utils.createHasher");if(De(t.outputLen),De(t.blockLen),t.outputLen<1)throw new Error('"outputLen" must be >= 1');if(t.blockLen<1)throw new Error('"blockLen" must be >= 1')}function gt(t,e=!0){if(t.destroyed)throw new Error("Hash instance has been destroyed");if(e&&t.finished)throw new Error("Hash#digest() has already been called")}function Tn(t,e){be(t,void 0,"digestInto() output");const n=e.outputLen;if(t.length<n)throw new RangeError('"digestInto() output" expected to be of length >='+n)}function Xe(...t){for(let e=0;e<t.length;e++)t[e].fill(0)}function vt(t){return new DataView(t.buffer,t.byteOffset,t.byteLength)}function pe(t,e){return t<<32-e|t>>>e}const qn=typeof Uint8Array.from([]).toHex=="function"&&typeof Uint8Array.fromHex=="function",_r=Array.from({length:256},(t,e)=>e.toString(16).padStart(2,"0"));function Ft(t){if(be(t),qn)return t.toHex();let e="";for(let n=0;n<t.length;n++)e+=_r[t[n]];return e}const ye={_0:48,_9:57,A:65,F:70,a:97,f:102};function en(t){if(t>=ye._0&&t<=ye._9)return t-ye._0;if(t>=ye.A&&t<=ye.F)return t-(ye.A-10);if(t>=ye.a&&t<=ye.f)return t-(ye.a-10)}function jt(t){if(typeof t!="string")throw new TypeError("hex string expected, got "+typeof t);if(qn)try{return Uint8Array.fromHex(t)}catch(o){throw o instanceof SyntaxError?new RangeError(o.message):o}const e=t.length,n=e/2;if(e%2)throw new RangeError("hex string expected, got unpadded hex of length "+e);const r=new Uint8Array(n);for(let o=0,s=0;o<n;o++,s+=2){const i=en(t.charCodeAt(s)),a=en(t.charCodeAt(s+1));if(i===void 0||a===void 0){const l=t[s]+t[s+1];throw new RangeError('hex string expected, got non-hex character "'+l+'" at index '+s)}r[o]=i*16+a}return r}function Rr(t,e={}){const n=(o,s)=>t(s).update(o).digest(),r=t(void 0);return n.outputLen=r.outputLen,n.blockLen=r.blockLen,n.canXOF=r.canXOF,n.create=o=>t(o),Object.assign(n,e),Object.freeze(n)}function Ar(t=32){De(t,"bytesLength");const e=typeof globalThis=="object"?globalThis.crypto:null;if(typeof e?.getRandomValues!="function")throw new Error("crypto.getRandomValues must be defined");if(t>65536)throw new RangeError(`"bytesLength" expected <= 65536, got ${t}`);return e.getRandomValues(new Uint8Array(t))}const Br=t=>({oid:Uint8Array.from([6,9,96,134,72,1,101,3,4,2,t])});function Or(t,e,n){return t&e^~t&n}function kr(t,e,n){return t&e^t&n^e&n}class Tr{blockLen;outputLen;canXOF=!1;padOffset;isLE;buffer;view;finished=!1;length=0;pos=0;destroyed=!1;constructor(e,n,r,o){this.blockLen=e,this.outputLen=n,this.padOffset=r,this.isLE=o,this.buffer=new Uint8Array(e),this.view=vt(this.buffer)}update(e){gt(this),be(e);const{view:n,buffer:r,blockLen:o}=this,s=e.length;for(let i=0;i<s;){const a=Math.min(o-this.pos,s-i);if(a===o){const l=vt(e);for(;o<=s-i;i+=o)this.process(l,i);continue}r.set(e.subarray(i,i+a),this.pos),this.pos+=a,i+=a,this.pos===o&&(this.process(n,0),this.pos=0)}return this.length+=e.length,this.roundClean(),this}digestInto(e){gt(this),Tn(e,this),this.finished=!0;const{buffer:n,view:r,blockLen:o,isLE:s}=this;let{pos:i}=this;n[i++]=128,Xe(this.buffer.subarray(i)),this.padOffset>o-i&&(this.process(r,0),i=0);for(let u=i;u<o;u++)n[u]=0;r.setBigUint64(o-8,BigInt(this.length*8),s),this.process(r,0);const a=vt(e),l=this.outputLen;if(l%4)throw new Error("_sha2: outputLen must be aligned to 32bit");const c=l/4,d=this.get();if(c>d.length)throw new Error("_sha2: outputLen bigger than state");for(let u=0;u<c;u++)a.setUint32(4*u,d[u],s)}digest(){const{buffer:e,outputLen:n}=this;this.digestInto(e);const r=e.slice(0,n);return this.destroy(),r}_cloneInto(e){e||=new this.constructor,e.set(...this.get());const{blockLen:n,buffer:r,length:o,finished:s,destroyed:i,pos:a}=this;return e.destroyed=i,e.finished=s,e.length=o,e.pos=a,o%n&&e.buffer.set(r),e}clone(){return this._cloneInto()}}const Ie=Uint32Array.from([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),qr=Uint32Array.from([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),Se=new Uint32Array(64);class Lr extends Tr{constructor(e){super(64,e,8,!1)}get(){const{A:e,B:n,C:r,D:o,E:s,F:i,G:a,H:l}=this;return[e,n,r,o,s,i,a,l]}set(e,n,r,o,s,i,a,l){this.A=e|0,this.B=n|0,this.C=r|0,this.D=o|0,this.E=s|0,this.F=i|0,this.G=a|0,this.H=l|0}process(e,n){for(let u=0;u<16;u++,n+=4)Se[u]=e.getUint32(n,!1);for(let u=16;u<64;u++){const w=Se[u-15],h=Se[u-2],x=pe(w,7)^pe(w,18)^w>>>3,I=pe(h,17)^pe(h,19)^h>>>10;Se[u]=I+Se[u-7]+x+Se[u-16]|0}let{A:r,B:o,C:s,D:i,E:a,F:l,G:c,H:d}=this;for(let u=0;u<64;u++){const w=pe(a,6)^pe(a,11)^pe(a,25),h=d+w+Or(a,l,c)+qr[u]+Se[u]|0,I=(pe(r,2)^pe(r,13)^pe(r,22))+kr(r,o,s)|0;d=c,c=l,l=a,a=i+h|0,i=s,s=o,o=r,r=h+I|0}r=r+this.A|0,o=o+this.B|0,s=s+this.C|0,i=i+this.D|0,a=a+this.E|0,l=l+this.F|0,c=c+this.G|0,d=d+this.H|0,this.set(r,o,s,i,a,l,c,d)}roundClean(){Xe(Se)}destroy(){this.destroyed=!0,this.set(0,0,0,0,0,0,0,0),Xe(this.buffer)}}class Cr extends Lr{A=Ie[0]|0;B=Ie[1]|0;C=Ie[2]|0;D=Ie[3]|0;E=Ie[4]|0;F=Ie[5]|0;G=Ie[6]|0;H=Ie[7]|0;constructor(){super(32)}}const tn=Rr(()=>new Cr,Br(1));const Re=(t,e,n)=>be(t,e,n),Ln=De,Cn=Ft,Ur=t=>jt(t),$r=t=>Ar(t),mt=BigInt(0),Lt=BigInt(1);function Un(t,e=""){if(typeof t!="boolean"){const n=e&&`"${e}" `;throw new TypeError(n+"expected boolean, got type="+typeof t)}return t}function Nr(t){if(typeof t=="bigint"){if(!dt(t))throw new RangeError("positive bigint expected, got "+t)}else Ln(t);return t}function nn(t,e=""){if(typeof t!="number"){const n=e&&`"${e}" `;throw new TypeError(n+"expected number, got type="+typeof t)}if(!Number.isSafeInteger(t)){const n=e&&`"${e}" `;throw new RangeError(n+"expected safe integer, got "+t)}}function $n(t){if(typeof t!="string")throw new TypeError("hex string expected, got "+typeof t);return t===""?mt:BigInt("0x"+t)}function Mr(t){return $n(Ft(t))}function Ge(t){return $n(Ft(We(be(t)).reverse()))}function Nn(t,e){if(De(e),e===0)throw new RangeError("zero length");t=Nr(t);const n=t.toString(16);if(n.length>e*2)throw new RangeError("number too large");return jt(n.padStart(e*2,"0"))}function Mn(t,e){return Nn(t,e).reverse()}function Pr(t,e){if(t=Re(t),e=Re(e),t.length!==e.length)return!1;let n=0;for(let r=0;r<t.length;r++)n|=t[r]^e[r];return n===0}function We(t){return Uint8Array.from(Re(t))}const dt=t=>typeof t=="bigint"&&mt<=t;function Dr(t,e,n){return dt(t)&&dt(e)&&dt(n)&&e<=t&&t<n}function wt(t,e,n,r){if(!Dr(e,n,r))throw new RangeError("expected valid "+t+": "+n+" <= n < "+r+", got "+e)}function Fr(t){if(t<mt)throw new Error("expected non-negative bigint, got "+t);let e;for(e=0;t>mt;t>>=Lt,e+=1);return e}const jr=t=>(Lt<<BigInt(t))-Lt;function Ht(t,e={},n={}){if(Object.prototype.toString.call(t)!=="[object Object]")throw new TypeError("expected valid options object");function r(s,i,a){if(!a&&i!=="function"&&!Object.hasOwn(t,s))throw new TypeError(`param "${s}" is invalid: expected own property`);const l=t[s];if(a&&l===void 0)return;const c=typeof l;if(c!==i||l===null)throw new TypeError(`param "${s}" is invalid: expected ${i}, got ${c}`)}const o=(s,i)=>Object.entries(s).forEach(([a,l])=>r(a,l,i));o(e,!1),o(n,!0)}const rn=()=>{throw new Error("not implemented")};const ee=BigInt(0),W=BigInt(1),Le=BigInt(2),Pn=BigInt(3),Dn=BigInt(4),Fn=BigInt(5),Hr=BigInt(7),jn=BigInt(8),zr=BigInt(9),Hn=BigInt(16);function z(t,e){if(e<=ee)throw new Error("mod: expected positive modulus, got "+e);const n=t%e;return n>=ee?n:e+n}function le(t,e,n){if(e<ee)throw new Error("pow2: expected non-negative exponent, got "+e);let r=t;for(;e-- >ee;)r*=r,r%=n;return r}function on(t,e){if(t===ee)throw new Error("invert: expected non-zero number");if(e<=ee)throw new Error("invert: expected positive modulus, got "+e);let n=z(t,e),r=e,o=ee,s=W;for(;n!==ee;){const a=r/n,l=r-n*a,c=o-s*a;r=n,n=l,o=s,s=c}if(r!==W)throw new Error("invert: does not exist");return z(o,e)}function zt(t,e,n){const r=t;if(!r.eql(r.sqr(e),n))throw new Error("Cannot find square root")}function zn(t,e){const n=t,r=(n.ORDER+W)/Dn,o=n.pow(e,r);return zt(n,o,e),o}function Zr(t,e){const n=t,r=(n.ORDER-Fn)/jn,o=n.mul(e,Le),s=n.pow(o,r),i=n.mul(e,s),a=n.mul(n.mul(i,Le),s),l=n.mul(i,n.sub(a,n.ONE));return zt(n,l,e),l}function Kr(t){const e=Zt(t),n=Zn(t),r=n(e,e.neg(e.ONE)),o=n(e,r),s=n(e,e.neg(r)),i=(t+Hr)/Hn;return((a,l)=>{const c=a;let d=c.pow(l,i),u=c.mul(d,r);const w=c.mul(d,o),h=c.mul(d,s),x=c.eql(c.sqr(u),l),I=c.eql(c.sqr(w),l);d=c.cmov(d,u,x),u=c.cmov(h,w,I);const p=c.eql(c.sqr(u),l),y=c.cmov(d,u,p);return zt(c,y,l),y})}function Zn(t){if(t<Pn)throw new Error("sqrt is not defined for small field");let e=t-W,n=0;for(;e%Le===ee;)e/=Le,n++;let r=Le;const o=Zt(t);for(;sn(o,r)===1;)if(r++>1e3)throw new Error("Cannot find square root: probably non-prime P");if(n===1)return zn;let s=o.pow(r,e);const i=(e+W)/Le;return function(l,c){const d=l;if(d.is0(c))return c;if(sn(d,c)!==1)throw new Error("Cannot find square root");let u=n,w=d.mul(d.ONE,s),h=d.pow(c,e),x=d.pow(c,i);for(;!d.eql(h,d.ONE);){if(d.is0(h))return d.ZERO;let I=1,p=d.sqr(h);for(;!d.eql(p,d.ONE);)if(I++,p=d.sqr(p),I===u)throw new Error("Cannot find square root");const y=W<<BigInt(u-I-1),b=d.pow(w,y);u=I,w=d.sqr(b),h=d.mul(h,w),x=d.mul(x,b)}return x}}function Yr(t){return t%Dn===Pn?zn:t%jn===Fn?Zr:t%Hn===zr?Kr(t):Zn(t)}const Te=(t,e)=>(z(t,e)&W)===W,Vr=["create","isValid","is0","neg","inv","sqrt","sqr","eql","add","sub","mul","pow","div","addN","subN","mulN","sqrN"];function Xr(t){const e={ORDER:"bigint",BYTES:"number",BITS:"number"},n=Vr.reduce((r,o)=>(r[o]="function",r),e);if(Ht(t,n),nn(t.BYTES,"BYTES"),nn(t.BITS,"BITS"),t.BYTES<1||t.BITS<1)throw new Error("invalid field: expected BYTES/BITS > 0");if(t.ORDER<=W)throw new Error("invalid field: expected ORDER > 1, got "+t.ORDER);return t}function Gr(t,e,n){const r=t;if(n<ee)throw new Error("invalid exponent, negatives unsupported");if(n===ee)return r.ONE;if(n===W)return e;let o=r.ONE,s=e;for(;n>ee;)n&W&&(o=r.mul(o,s)),s=r.sqr(s),n>>=W;return o}function Kn(t,e,n=!1){const r=t,o=new Array(e.length).fill(n?r.ZERO:void 0),s=e.reduce((a,l,c)=>r.is0(l)?a:(o[c]=a,r.mul(a,l)),r.ONE),i=r.inv(s);return e.reduceRight((a,l,c)=>r.is0(l)?a:(o[c]=r.mul(a,o[c]),r.mul(a,l)),i),o}function sn(t,e){const n=t,r=(n.ORDER-W)/Le,o=n.pow(e,r),s=n.eql(o,n.ONE),i=n.eql(o,n.ZERO),a=n.eql(o,n.neg(n.ONE));if(!s&&!i&&!a)throw new Error("invalid Legendre symbol result");return s?1:i?0:-1}function Wr(t,e){if(e!==void 0&&Ln(e),t<=ee)throw new Error("invalid n length: expected positive n, got "+t);if(e!==void 0&&e<1)throw new Error("invalid n length: expected positive bit length, got "+e);const n=Fr(t);if(e!==void 0&&e<n)throw new Error(`invalid n length: expected bit length (${n}) >= n.length (${e})`);const r=e!==void 0?e:n,o=Math.ceil(r/8);return{nBitLength:r,nByteLength:o}}const cn=new WeakMap;class Yn{ORDER;BITS;BYTES;isLE;ZERO=ee;ONE=W;_lengths;_mod;constructor(e,n={}){if(e<=W)throw new Error("invalid field: expected ORDER > 1, got "+e);let r;this.isLE=!1,n!=null&&typeof n=="object"&&(typeof n.BITS=="number"&&(r=n.BITS),typeof n.sqrt=="function"&&Object.defineProperty(this,"sqrt",{value:n.sqrt,enumerable:!0}),typeof n.isLE=="boolean"&&(this.isLE=n.isLE),n.allowedLengths&&(this._lengths=Object.freeze(n.allowedLengths.slice())),typeof n.modFromBytes=="boolean"&&(this._mod=n.modFromBytes));const{nBitLength:o,nByteLength:s}=Wr(e,r);if(s>2048)throw new Error("invalid field: expected ORDER of <= 2048 bytes");this.ORDER=e,this.BITS=o,this.BYTES=s,Object.freeze(this)}create(e){return z(e,this.ORDER)}isValid(e){if(typeof e!="bigint")throw new TypeError("invalid field element: expected bigint, got "+typeof e);return ee<=e&&e<this.ORDER}is0(e){return e===ee}isValidNot0(e){return!this.is0(e)&&this.isValid(e)}isOdd(e){return(e&W)===W}neg(e){return z(-e,this.ORDER)}eql(e,n){return e===n}sqr(e){return z(e*e,this.ORDER)}add(e,n){return z(e+n,this.ORDER)}sub(e,n){return z(e-n,this.ORDER)}mul(e,n){return z(e*n,this.ORDER)}pow(e,n){return Gr(this,e,n)}div(e,n){return z(e*on(n,this.ORDER),this.ORDER)}sqrN(e){return e*e}addN(e,n){return e+n}subN(e,n){return e-n}mulN(e,n){return e*n}inv(e){return on(e,this.ORDER)}sqrt(e){let n=cn.get(this);return n||cn.set(this,n=Yr(this.ORDER)),n(this,e)}toBytes(e){return this.isLE?Mn(e,this.BYTES):Nn(e,this.BYTES)}fromBytes(e,n=!1){Re(e);const{_lengths:r,BYTES:o,isLE:s,ORDER:i,_mod:a}=this;if(r){if(e.length<1||!r.includes(e.length)||e.length>o)throw new Error("Field.fromBytes: expected "+r+" bytes, got "+e.length);const c=new Uint8Array(o);c.set(e,s?0:c.length-e.length),e=c}if(e.length!==o)throw new Error("Field.fromBytes: expected "+o+" bytes, got "+e.length);let l=s?Ge(e):Mr(e);if(a&&(l=z(l,i)),!n&&!this.isValid(l))throw new Error("invalid field element: outside of range 0..ORDER");return l}invertBatch(e){return Kn(this,e)}cmov(e,n,r){return Un(r,"condition"),r?n:e}}Object.freeze(Yn.prototype);function Zt(t,e={}){return new Yn(t,e)}const yt=BigInt(0),Ct=BigInt(1);function an(t,e){const n=e.negate();return t?n:e}function xt(t,e){const n=Kn(t.Fp,e.map(r=>r.Z));return e.map((r,o)=>t.fromAffine(r.toAffine(n[o])))}function Vn(t,e){if(!Number.isSafeInteger(t)||t<=0||t>e)throw new Error("invalid window size, expected [1.."+e+"], got W="+t)}function It(t,e){Vn(t,e);const n=Math.ceil(e/t)+1,r=2**(t-1),o=2**t,s=jr(t),i=BigInt(t);return{windows:n,windowSize:r,mask:s,maxNumber:o,shiftBy:i}}function ln(t,e,n){const{windowSize:r,mask:o,maxNumber:s,shiftBy:i}=n;let a=Number(t&o),l=t>>i;a>r&&(a-=s,l+=Ct);const c=e*r,d=c+Math.abs(a)-1,u=a===0,w=a<0,h=e%2!==0;return{nextN:l,offset:d,isZero:u,isNeg:w,isNegF:h,offsetF:c}}const St=new WeakMap,Xn=new WeakMap;function _t(t){return Xn.get(t)||1}function un(t){if(t!==yt)throw new Error("invalid wNAF")}class Qr{BASE;ZERO;Fn;bits;constructor(e,n){this.BASE=e.BASE,this.ZERO=e.ZERO,this.Fn=e.Fn,this.bits=n}_unsafeLadder(e,n,r=this.ZERO){let o=e;for(;n>yt;)n&Ct&&(r=r.add(o)),o=o.double(),n>>=Ct;return r}precomputeWindow(e,n){const{windows:r,windowSize:o}=It(n,this.bits),s=[];let i=e,a=i;for(let l=0;l<r;l++){a=i,s.push(a);for(let c=1;c<o;c++)a=a.add(i),s.push(a);i=a.double()}return s}wNAF(e,n,r){if(!this.Fn.isValid(r))throw new Error("invalid scalar");let o=this.ZERO,s=this.BASE;const i=It(e,this.bits);for(let a=0;a<i.windows;a++){const{nextN:l,offset:c,isZero:d,isNeg:u,isNegF:w,offsetF:h}=ln(r,a,i);r=l,d?s=s.add(an(w,n[h])):o=o.add(an(u,n[c]))}return un(r),{p:o,f:s}}wNAFUnsafe(e,n,r,o=this.ZERO){const s=It(e,this.bits);for(let i=0;i<s.windows&&r!==yt;i++){const{nextN:a,offset:l,isZero:c,isNeg:d}=ln(r,i,s);if(r=a,!c){const u=n[l];o=o.add(d?u.negate():u)}}return un(r),o}getPrecomputes(e,n,r){let o=St.get(n);return o||(o=this.precomputeWindow(n,e),e!==1&&(typeof r=="function"&&(o=r(o)),St.set(n,o))),o}cached(e,n,r){const o=_t(e);return this.wNAF(o,this.getPrecomputes(o,e,r),n)}unsafe(e,n,r,o){const s=_t(e);return s===1?this._unsafeLadder(e,n,o):this.wNAFUnsafe(s,this.getPrecomputes(s,e,r),n,o)}createCache(e,n){Vn(n,this.bits),Xn.set(e,n),St.delete(e)}hasCache(e){return _t(e)!==1}}function fn(t,e,n){if(e){if(e.ORDER!==t)throw new Error("Field.ORDER must match order: Fp == p, Fn == n");return Xr(e),e}else return Zt(t,{isLE:n})}function Jr(t,e,n={},r){if(r===void 0&&(r=t==="edwards"),!e||typeof e!="object")throw new Error(`expected valid ${t} CURVE object`);for(const l of["p","n","h"]){const c=e[l];if(!(typeof c=="bigint"&&c>yt))throw new Error(`CURVE.${l} must be positive bigint`)}const o=fn(e.p,n.Fp,r),s=fn(e.n,n.Fn,r),a=["Gx","Gy","a","d"];for(const l of a)if(!o.isValid(e[l]))throw new Error(`CURVE.${l} must be valid field element of CURVE.Fp`);return e=Object.freeze(Object.assign({},e)),{CURVE:e,Fp:o,Fn:s}}function eo(t,e){return function(r){const o=t(r);return{secretKey:o,publicKey:e(o)}}}const _e=BigInt(0),re=BigInt(1),Rt=BigInt(2),to=BigInt(8);function no(t,e,n,r){const o=t.sqr(n),s=t.sqr(r),i=t.add(t.mul(e.a,o),s),a=t.add(t.ONE,t.mul(e.d,t.mul(o,s)));return t.eql(i,a)}function ro(t,e={}){const n=e,r=Jr("edwards",t,n,n.FpFnLE),{Fp:o,Fn:s}=r;let i=r.CURVE;const{h:a}=i;Ht(n,{},{uvRatio:"function"});const l=Rt<<BigInt(s.BYTES*8)-re,c=I=>o.create(I),d=n.uvRatio===void 0?(I,p)=>{try{return{isValid:!0,value:o.sqrt(o.div(I,p))}}catch{return{isValid:!1,value:_e}}}:n.uvRatio;if(!no(o,i,i.Gx,i.Gy))throw new Error("bad curve params: generator point");function u(I,p,y=!1){const b=y?re:_e;return wt("coordinate "+I,p,b,l),p}function w(I){if(!(I instanceof h))throw new Error("EdwardsPoint expected")}class h{static BASE=new h(i.Gx,i.Gy,re,c(i.Gx*i.Gy));static ZERO=new h(_e,re,re,_e);static Fp=o;static Fn=s;X;Y;Z;T;constructor(p,y,b,B){this.X=u("x",p),this.Y=u("y",y),this.Z=u("z",b,!0),this.T=u("t",B),Object.freeze(this)}static CURVE(){return i}static fromAffine(p){if(p instanceof h)throw new Error("extended point not allowed");const{x:y,y:b}=p||{};return u("x",y),u("y",b),new h(y,b,re,c(y*b))}static fromBytes(p,y=!1){const b=o.BYTES,{a:B,d:k}=i;p=We(Re(p,b,"point")),Un(y,"zip215");const T=We(p),M=p[b-1];T[b-1]=M&-129;const _=Ge(T),q=y?l:o.ORDER;wt("point.y",_,_e,q);const O=c(_*_),C=c(O-re),D=c(k*O-B);let{isValid:Q,value:Z}=d(C,D);if(!Q)throw new Error("bad point: invalid y coordinate");const E=(Z&re)===re,v=(M&128)!==0;if(!y&&Z===_e&&v)throw new Error("bad point: x=0 and x_0=1");return v!==E&&(Z=c(-Z)),h.fromAffine({x:Z,y:_})}static fromHex(p,y=!1){return h.fromBytes(Ur(p),y)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}precompute(p=8,y=!0){return x.createCache(this,p),y||this.multiply(Rt),this}assertValidity(){const p=this,{a:y,d:b}=i;if(p.is0())throw new Error("bad point: ZERO");const{X:B,Y:k,Z:T,T:M}=p,_=c(B*B),q=c(k*k),O=c(T*T),C=c(O*O),D=c(_*y),Q=c(O*c(D+q)),Z=c(C+c(b*c(_*q)));if(Q!==Z)throw new Error("bad point: equation left != right (1)");const E=c(B*k),v=c(T*M);if(E!==v)throw new Error("bad point: equation left != right (2)")}equals(p){w(p);const{X:y,Y:b,Z:B}=this,{X:k,Y:T,Z:M}=p,_=c(y*M),q=c(k*B),O=c(b*M),C=c(T*B);return _===q&&O===C}is0(){return this.equals(h.ZERO)}negate(){return new h(c(-this.X),this.Y,this.Z,c(-this.T))}double(){const{a:p}=i,{X:y,Y:b,Z:B}=this,k=c(y*y),T=c(b*b),M=c(Rt*c(B*B)),_=c(p*k),q=y+b,O=c(c(q*q)-k-T),C=_+T,D=C-M,Q=_-T,Z=c(O*D),E=c(C*Q),v=c(O*Q),U=c(D*C);return new h(Z,E,U,v)}add(p){w(p);const{a:y,d:b}=i,{X:B,Y:k,Z:T,T:M}=this,{X:_,Y:q,Z:O,T:C}=p,D=c(B*_),Q=c(k*q),Z=c(M*b*C),E=c(T*O),v=c((B+k)*(_+q)-D-Q),U=E-Z,j=E+Z,Y=c(Q-y*D),G=c(v*U),P=c(j*Y),X=c(v*Y),te=c(U*j);return new h(G,P,te,X)}subtract(p){return w(p),this.add(p.negate())}multiply(p){if(!s.isValidNot0(p))throw new RangeError("invalid scalar: expected 1 <= sc < curve.n");const{p:y,f:b}=x.cached(this,p,B=>xt(h,B));return xt(h,[y,b])[0]}multiplyUnsafe(p){if(!s.isValid(p))throw new RangeError("invalid scalar: expected 0 <= sc < curve.n");return p===_e?h.ZERO:this.is0()||p===re?this:x.unsafe(this,p,y=>xt(h,y))}isSmallOrder(){return this.clearCofactor().is0()}isTorsionFree(){return x.unsafe(this,i.n).is0()}toAffine(p){const y=this;let b=p;const{X:B,Y:k,Z:T}=y,M=y.is0();b==null&&(b=M?to:o.inv(T));const _=c(B*b),q=c(k*b),O=o.mul(T,b);if(M)return{x:_e,y:re};if(O!==re)throw new Error("invZ was invalid");return{x:_,y:q}}clearCofactor(){return a===re?this:this.multiplyUnsafe(a)}toBytes(){const{x:p,y}=this.toAffine(),b=o.toBytes(y);return b[b.length-1]|=p&re?128:0,b}toHex(){return Cn(this.toBytes())}toString(){return`<Point ${this.is0()?"ZERO":this.toHex()}>`}}const x=new Qr(h,s.BITS);return s.BITS>=8&&h.BASE.precompute(8),Object.freeze(h.prototype),Object.freeze(h),h}class oo{static BASE;static ZERO;static Fp;static Fn;ep;constructor(e){this.ep=e}static fromBytes(e){rn()}static fromHex(e){rn()}get x(){return this.toAffine().x}get y(){return this.toAffine().y}clearCofactor(){return this}assertValidity(){this.ep.assertValidity()}toAffine(e){return this.ep.toAffine(e)}toHex(){return Cn(this.toBytes())}toString(){return this.toHex()}isTorsionFree(){return!0}isSmallOrder(){return!1}add(e){return this.assertSame(e),this.init(this.ep.add(e.ep))}subtract(e){return this.assertSame(e),this.init(this.ep.subtract(e.ep))}multiply(e){return this.init(this.ep.multiply(e))}multiplyUnsafe(e){return this.init(this.ep.multiplyUnsafe(e))}double(){return this.init(this.ep.double())}negate(){return this.init(this.ep.negate())}precompute(e,n){return this.ep.precompute(e,n),this}}const ze=BigInt(0),Ne=BigInt(1),rt=BigInt(2);function so(t){return Ht(t,{P:"bigint",type:"string",adjustScalarBytes:"function",powPminus2:"function"},{randomBytes:"function"}),Object.freeze({...t})}function io(t){const e=so(t),{P:n,type:r,adjustScalarBytes:o,powPminus2:s,randomBytes:i}=e,a=r==="x25519";if(!a&&r!=="x448")throw new Error("invalid type");const l=i===void 0?$r:i,c=a?255:448,d=a?32:56,u=BigInt(a?9:5),w=BigInt(a?121665:39081),h=a?rt**BigInt(254):rt**BigInt(447),x=a?BigInt(8)*rt**BigInt(251)-Ne:BigInt(4)*rt**BigInt(445)-Ne,I=h+x+Ne,p=E=>z(E,n),y=b(u);function b(E){return Mn(p(E),d)}function B(E){const v=We(Re(E,d,"uCoordinate"));return a&&(v[31]&=127),p(Ge(v))}function k(E){return Ge(o(We(Re(E,d,"scalar"))))}function T(E,v){const U=C(B(v),k(E));if(U===ze)throw new Error("invalid private or public key received");return b(U)}function M(E){return T(E,y)}const _=M,q=T;function O(E,v,U){const j=p(E*(v-U));return v=p(v-j),U=p(U+j),{x_2:v,x_3:U}}function C(E,v){wt("u",E,ze,n),wt("scalar",v,h,I);const U=v,j=E;let Y=Ne,G=ze,P=E,X=Ne,te=ze;for(let he=BigInt(c-1);he>=ze;he--){const Ee=U>>he&Ne;te^=Ee,{x_2:Y,x_3:P}=O(te,Y,P),{x_2:G,x_3:X}=O(te,G,X),te=Ee;const ge=Y+G,ve=p(ge*ge),xe=Y-G,A=p(xe*xe),F=ve-A,fe=P+X,Et=P-X,je=p(Et*ge),Ue=p(fe*xe),Oe=je+Ue,et=je-Ue;P=p(Oe*Oe),X=p(j*p(et*et)),Y=p(ve*A),G=p(F*(ve+p(w*F)))}({x_2:Y,x_3:P}=O(te,Y,P)),{x_2:G,x_3:X}=O(te,G,X);const Be=s(G);return p(Y*Be)}const D={secretKey:d,publicKey:d,seed:d},Q=E=>(E=E===void 0?l(d):E,Re(E,D.seed,"seed"),E),Z={randomSecretKey:Q};return Object.freeze(D),Object.freeze(Z),Object.freeze({keygen:eo(Q,_),getSharedSecret:q,getPublicKey:_,scalarMult:T,scalarMultBase:M,utils:Z,GuBytes:y.slice(),lengths:D})}const co=BigInt(0),Ve=BigInt(1),dn=BigInt(2),ao=BigInt(3),lo=BigInt(5),uo=BigInt(8),Fe=BigInt("0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffed"),Gn={p:Fe,n:BigInt("0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3ed"),h:uo,a:BigInt("0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec"),d:BigInt("0x52036cee2b6ffe738cc740797779e89800700a4d4141d8ab75eb4dca135978a3"),Gx:BigInt("0x216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a"),Gy:BigInt("0x6666666666666666666666666666666666666666666666666666666666666658")};function Wn(t){const e=BigInt(10),n=BigInt(20),r=BigInt(40),o=BigInt(80),s=Fe,a=t*t%s*t%s,l=le(a,dn,s)*a%s,c=le(l,Ve,s)*t%s,d=le(c,lo,s)*c%s,u=le(d,e,s)*d%s,w=le(u,n,s)*u%s,h=le(w,r,s)*w%s,x=le(h,o,s)*h%s,I=le(x,o,s)*h%s,p=le(I,e,s)*d%s;return{pow_p_5_8:le(p,dn,s)*t%s,b2:a}}function fo(t){return t[0]&=248,t[31]&=127,t[31]|=64,t}const Ut=BigInt("19681161376707505956807079304988542015446066515923890162744021073123829784752");function Qn(t,e){const n=Fe,r=z(e*e*e,n),o=z(r*r*e,n),s=Wn(t*o).pow_p_5_8;let i=z(t*r*s,n);const a=z(e*i*i,n),l=i,c=z(i*Ut,n),d=a===t,u=a===z(-t,n),w=a===z(-t*Ut,n);return d&&(i=l),(u||w)&&(i=c),Te(i,n)&&(i=z(-i,n)),{isValid:d||u,value:i}}const Pe=ro(Gn,{uvRatio:Qn}),qe=Pe.Fp,po=Pe.Fn,$t=(()=>{const t=Fe;return io({P:t,type:"x25519",powPminus2:e=>{const{pow_p_5_8:n,b2:r}=Wn(e);return z(le(n,ao,t)*r,t)},adjustScalarBytes:fo})})(),pn=Ut,ho=BigInt("54469307008909316920995813868745141605393597292927456921205312896311721017578"),hn=t=>Qn(Ve,t),go=BigInt("0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"),mo=t=>qe.create(Ge(t)&go);class ce extends oo{static BASE=new ce(Pe.BASE);static ZERO=new ce(Pe.ZERO);static Fp=qe;static Fn=po;constructor(e){super(e)}static fromAffine(e){return new ce(Pe.fromAffine(e))}assertSame(e){if(!(e instanceof ce))throw new Error("RistrettoPoint expected")}init(e){return new ce(e)}static fromBytes(e){be(e,32);const{a:n,d:r}=Gn,o=Fe,s=k=>qe.create(k),i=mo(e);if(!Pr(qe.toBytes(i),e)||Te(i,o))throw new Error("invalid ristretto255 encoding 1");const a=s(i*i),l=s(Ve+n*a),c=s(Ve-n*a),d=s(l*l),u=s(c*c),w=s(n*r*d-u),{isValid:h,value:x}=hn(s(w*u)),I=s(x*c),p=s(x*I*w);let y=s((i+i)*I);Te(y,o)&&(y=s(-y));const b=s(l*p),B=s(y*b);if(!h||Te(B,o)||b===co)throw new Error("invalid ristretto255 encoding 2");return new ce(new Pe(y,b,Ve,B))}static fromHex(e){return ce.fromBytes(jt(e))}toBytes(){let{X:e,Y:n,Z:r,T:o}=this.ep;const s=Fe,i=p=>qe.create(p),a=i(i(r+n)*i(r-n)),l=i(e*n),c=i(l*l),{value:d}=hn(i(a*c)),u=i(d*a),w=i(d*l),h=i(u*w*o);let x;if(Te(o*h,s)){let p=i(n*pn),y=i(e*pn);e=p,n=y,x=i(u*ho)}else x=w;Te(e*h,s)&&(n=i(-n));let I=i((r-n)*x);return Te(I,s)&&(I=i(-I)),qe.toBytes(I)}equals(e){this.assertSame(e);const{X:n,Y:r}=this.ep,{X:o,Y:s}=e.ep,i=c=>qe.create(c),a=i(n*s)===i(r*o),l=i(r*s)===i(n*o);return a||l}is0(){return this.equals(ce.ZERO)}}Object.freeze(ce.BASE);Object.freeze(ce.ZERO);Object.freeze(ce.prototype);Object.freeze(ce);class gn{oHash;iHash;blockLen;outputLen;canXOF=!1;finished=!1;destroyed=!1;constructor(e,n){if(Dt(e),be(n,void 0,"key"),this.iHash=e.create(),typeof this.iHash.update!="function")throw new Error("Expected instance of class which extends utils.Hash");this.blockLen=this.iHash.blockLen,this.outputLen=this.iHash.outputLen;const r=this.blockLen,o=new Uint8Array(r);o.set(n.length>r?e.create().update(n).digest():n);for(let s=0;s<o.length;s++)o[s]^=54;this.iHash.update(o),this.oHash=e.create();for(let s=0;s<o.length;s++)o[s]^=106;this.oHash.update(o),Xe(o)}update(e){return gt(this),this.iHash.update(e),this}digestInto(e){gt(this),Tn(e,this),this.finished=!0;const n=e.subarray(0,this.outputLen);this.iHash.digestInto(n),this.oHash.update(n),this.oHash.digestInto(n),this.destroy()}digest(){const e=new Uint8Array(this.oHash.outputLen);return this.digestInto(e),e}_cloneInto(e){e||=Object.create(Object.getPrototypeOf(this),{});const{oHash:n,iHash:r,finished:o,destroyed:s,blockLen:i,outputLen:a}=this;return e=e,e.finished=o,e.destroyed=s,e.blockLen=i,e.outputLen=a,e.oHash=n._cloneInto(e.oHash),e.iHash=r._cloneInto(e.iHash),e}clone(){return this._cloneInto()}destroy(){this.destroyed=!0,this.oHash.destroy(),this.iHash.destroy()}}const Jn=(()=>{const t=((e,n,r)=>new gn(e,n).update(r).digest());return t.create=(e,n)=>new gn(e,n),t})();function wo(t,e,n){return Dt(t),n===void 0&&(n=new Uint8Array(t.outputLen)),Jn(t,n,e)}const At=Uint8Array.of(0),mn=Uint8Array.of();function yo(t,e,n,r=32){Dt(t),De(r,"length"),be(e,void 0,"prk");const o=t.outputLen;if(e.length<o)throw new Error('"prk" must be at least HashLen octets');if(r>255*o)throw new Error("Length must be <= 255*HashLen");const s=Math.ceil(r/o);n===void 0?n=mn:be(n,void 0,"info");const i=new Uint8Array(s*o),a=Jn.create(t,e),l=a._cloneInto(),c=new Uint8Array(a.outputLen);for(let d=0;d<s;d++)At[0]=d+1,l.update(d===0?mn:c).update(n).update(At).digestInto(c),i.set(c,o*d),a._cloneInto(l);return a.destroy(),l.destroy(),Xe(c,At),i.slice(0,r)}const bo=(t,e,n,r,o)=>yo(t,wo(t,e,n),r,o);function Eo(t){return t instanceof Uint8Array||ArrayBuffer.isView(t)&&t.constructor.name==="Uint8Array"&&"BYTES_PER_ELEMENT"in t&&t.BYTES_PER_ELEMENT===1}function wn(t){if(typeof t!="number")throw new TypeError("number expected, got "+typeof t);if(!Number.isSafeInteger(t)||t<0)throw new RangeError("positive integer expected, got "+t)}function oe(t,e,n=""){const r=Eo(t),o=t?.length,s=e!==void 0;if(!r||s&&o!==e){const i=n&&`"${n}" `,a=s?` of length ${e}`:"",l=r?`length=${o}`:`type=${typeof t}`,c=i+"expected Uint8Array"+a+", got "+l;throw r?new RangeError(c):new TypeError(c)}return t}function yn(t,e=!0){if(t.destroyed)throw new Error("Hash instance has been destroyed");if(e&&t.finished)throw new Error("Hash#digest() has already been called")}function vo(t,e,n=!1){oe(t,void 0,"output");const r=e.outputLen;if(t.length<r)throw new RangeError("digestInto() expects output buffer of length at least "+r);if(n&&!Qe(t))throw new Error("invalid output, must be aligned")}function xo(t){return new Uint8Array(t.buffer,t.byteOffset,t.byteLength)}function Ce(t){return new Uint32Array(t.buffer,t.byteOffset,Math.floor(t.byteLength/4))}function Ae(...t){for(let e=0;e<t.length;e++)t[e].fill(0)}function bt(t){return new DataView(t.buffer,t.byteOffset,t.byteLength)}const Kt=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68,er=t=>t<<24&4278190080|t<<8&16711680|t>>>8&65280|t>>>24&255,K=Kt?t=>t:t=>er(t)>>>0,Io=t=>{for(let e=0;e<t.length;e++)t[e]=er(t[e]);return t},Yt=Kt?t=>t:Io;function So(t,e){if(t.length!==e.length)return!1;let n=0;for(let r=0;r<t.length;r++)n|=t[r]^e[r];return n===0}function _o(t,e,n){const r=e,o=n||(()=>[]),s=(a,l)=>r(l,...o(a)).update(a).digest(),i=r(new Uint8Array(t),...o(new Uint8Array(0)));return s.outputLen=i.outputLen,s.blockLen=i.blockLen,s.create=(a,...l)=>r(a,...l),s}const Ro=(t,e)=>{function n(r,...o){if(oe(r,void 0,"key"),t.nonceLength!==void 0){const d=o[0];oe(d,t.varSizeNonce?void 0:t.nonceLength,"nonce")}const s=t.tagLength;s&&o[1]!==void 0&&oe(o[1],void 0,"AAD");const i=e(r,...o),a=(d,u)=>{if(u!==void 0){if(d!==2)throw new Error("cipher output not supported");oe(u,void 0,"output")}};let l=!1;return{encrypt(d,u){if(l)throw new Error("cannot encrypt() twice with same key + nonce");return l=!0,oe(d),a(i.encrypt.length,u),i.encrypt(d,u)},decrypt(d,u){if(oe(d),s&&d.length<s)throw new Error('"ciphertext" expected length bigger than tagLength='+s);return a(i.decrypt.length,u),i.decrypt(d,u)}}}return Object.assign(n,t),n};function Ao(t,e,n=!0){if(e===void 0)return new Uint8Array(t);if(oe(e,void 0,"output"),e.length!==t)throw new Error('"output" expected Uint8Array of length '+t+", got: "+e.length);if(n&&!Qe(e))throw new Error("invalid output, must be aligned");return e}function Bo(t,e,n){wn(t),wn(e);const r=new Uint8Array(16),o=bt(r);return o.setBigUint64(0,BigInt(e),n),o.setBigUint64(8,BigInt(t),n),r}function Qe(t){return t.byteOffset%4===0}function Je(t){return Uint8Array.from(oe(t))}const Me=16,tr=new Uint8Array(16),Ze=Ce(tr),Oo=225,ko=(t,e,n,r)=>{const o=r&1;return{s3:n<<31|r>>>1,s2:e<<31|n>>>1,s1:t<<31|e>>>1,s0:t>>>1^Oo<<24&-(o&1)}},ot=t=>(t>>>0&255)<<24|(t>>>8&255)<<16|(t>>>16&255)<<8|t>>>24&255|0,To=t=>t>64*1024?8:t>1024?4:2;class qo{blockLen=Me;outputLen=Me;s0=0;s1=0;s2=0;s3=0;finished=!1;destroyed=!1;t;W;windowSize;constructor(e,n){oe(e,16,"key"),e=Je(e);const r=bt(e);let o=r.getUint32(0,!1),s=r.getUint32(4,!1),i=r.getUint32(8,!1),a=r.getUint32(12,!1);const l=[];for(let x=0;x<128;x++)l.push({s0:ot(o),s1:ot(s),s2:ot(i),s3:ot(a)}),{s0:o,s1:s,s2:i,s3:a}=ko(o,s,i,a);const c=To(n||1024);if(![1,2,4,8].includes(c))throw new Error("ghash: invalid window size, expected 2, 4 or 8");this.W=c;const u=128/c,w=this.windowSize=2**c,h=[];for(let x=0;x<u;x++)for(let I=0;I<w;I++){let p=0,y=0,b=0,B=0;for(let k=0;k<c;k++){if(!(I>>>c-k-1&1))continue;const{s0:M,s1:_,s2:q,s3:O}=l[c*x+k];p^=M,y^=_,b^=q,B^=O}h.push({s0:p,s1:y,s2:b,s3:B})}this.t=h}_updateBlock(e,n,r,o){e^=this.s0,n^=this.s1,r^=this.s2,o^=this.s3;const{W:s,t:i,windowSize:a}=this;let l=0,c=0,d=0,u=0;const w=(1<<s)-1;let h=0;for(const x of[e,n,r,o])for(let I=0;I<4;I++){const p=x>>>8*I&255;for(let y=8/s-1;y>=0;y--){const b=p>>>s*y&w,{s0:B,s1:k,s2:T,s3:M}=i[h*a+b];l^=B,c^=k,d^=T,u^=M,h+=1}}this.s0=l,this.s1=c,this.s2=d,this.s3=u}update(e){yn(this),oe(e),e=Je(e);const n=Ce(e),r=Math.floor(e.length/Me),o=e.length%Me;for(let s=0;s<r;s++)this._updateBlock(K(n[s*4+0]),K(n[s*4+1]),K(n[s*4+2]),K(n[s*4+3]));return o&&(tr.set(e.subarray(r*Me)),this._updateBlock(K(Ze[0]),K(Ze[1]),K(Ze[2]),K(Ze[3])),Ae(Ze)),this}destroy(){this.destroyed=!0;const{t:e}=this;for(const n of e)n.s0=0,n.s1=0,n.s2=0,n.s3=0}digestInto(e){yn(this),vo(e,this,!0),this.finished=!0;const{s0:n,s1:r,s2:o,s3:s}=this,i=Ce(e);i[0]=n,i[1]=r,i[2]=o,i[3]=s,Yt(i)}digest(){const e=new Uint8Array(Me);return this.digestInto(e),this.destroy(),e}}const bn=_o(16,(t,e)=>new qo(t,e),t=>[t.length]),Nt=16,Lo=4,st=new Uint8Array(Nt),Co=283;function Uo(t){if(![16,24,32].includes(t.length))throw new Error('"aes key" expected Uint8Array of length 16/24/32, got length='+t.length)}function Vt(t){return t<<1^Co&-(t>>7)}function En(t,e){let n=0;for(;e>0;e>>=1)n^=t&-(e&1),t=Vt(t);return n}const $o=(()=>{const t=new Uint8Array(256);for(let n=0,r=1;n<256;n++,r^=Vt(r))t[n]=r;const e=new Uint8Array(256);e[0]=99;for(let n=0;n<255;n++){let r=t[255-n];r|=r<<8,e[t[n]]=(r^r>>4^r>>5^r>>6^r>>7^99)&255}return Ae(t),e})(),No=t=>t<<24|t>>>8,Bt=t=>t<<8|t>>>24;function Mo(t,e){if(t.length!==256)throw new Error("Wrong sbox length");const n=new Uint32Array(256).map((c,d)=>e(t[d])),r=n.map(Bt),o=r.map(Bt),s=o.map(Bt),i=new Uint32Array(256*256),a=new Uint32Array(256*256),l=new Uint16Array(256*256);for(let c=0;c<256;c++)for(let d=0;d<256;d++){const u=c*256+d;i[u]=n[c]^r[d],a[u]=o[c]^s[d],l[u]=t[c]<<8|t[d]}return{sbox:t,sbox2:l,T0:n,T1:r,T2:o,T3:s,T01:i,T23:a}}const nr=Mo($o,t=>En(t,3)<<24|t<<16|t<<8|En(t,2)),Po=(()=>{const t=new Uint8Array(16);for(let e=0,n=1;e<16;e++,n=Vt(n))t[e]=n;return t})();function Do(t){oe(t);const e=t.length;Uo(t);const{sbox2:n}=nr,r=[];(!Kt||!Qe(t))&&r.push(t=Je(t));const o=Yt(Ce(t)),s=o.length,i=l=>Ke(n,l,l,l,l),a=new Uint32Array(e+28);a.set(o);for(let l=s;l<a.length;l++){let c=a[l-1];l%s===0?c=i(No(c))^Po[l/s-1]:s>6&&l%s===4&&(c=i(c)),a[l]=a[l-s]^c}return Ae(...r),a}function it(t,e,n,r,o,s){return t[n<<8&65280|r>>>8&255]^e[o>>>8&65280|s>>>24&255]}function Ke(t,e,n,r,o){return t[e&255|n&65280]|t[r>>>16&255|o>>>16&65280]<<16}function vn(t,e,n,r,o){const{sbox2:s,T01:i,T23:a}=nr;let l=0;e^=t[l++],n^=t[l++],r^=t[l++],o^=t[l++];const c=t.length/4-2;for(let x=0;x<c;x++){const I=t[l++]^it(i,a,e,n,r,o),p=t[l++]^it(i,a,n,r,o,e),y=t[l++]^it(i,a,r,o,e,n),b=t[l++]^it(i,a,o,e,n,r);e=I,n=p,r=y,o=b}const d=t[l++]^Ke(s,e,n,r,o),u=t[l++]^Ke(s,n,r,o,e),w=t[l++]^Ke(s,r,o,e,n),h=t[l++]^Ke(s,o,e,n,r);return{s0:d,s1:u,s2:w,s3:h}}function ct(t,e,n,r,o){oe(n,Nt,"nonce"),oe(r),o=Ao(r.length,o);const s=n,i=Ce(s),a=bt(s),l=Ce(r),c=Ce(o),d=e?0:12,u=r.length;let w=a.getUint32(d,e),{s0:h,s1:x,s2:I,s3:p}=vn(t,K(i[0]),K(i[1]),K(i[2]),K(i[3]));for(let b=0;b+4<=l.length;b+=4)c[b+0]=l[b+0]^K(h),c[b+1]=l[b+1]^K(x),c[b+2]=l[b+2]^K(I),c[b+3]=l[b+3]^K(p),w=w+1>>>0,a.setUint32(d,w,e),{s0:h,s1:x,s2:I,s3:p}=vn(t,K(i[0]),K(i[1]),K(i[2]),K(i[3]));const y=Nt*Math.floor(l.length/Lo);if(y<u){const b=new Uint32Array([h,x,I,p]);Yt(b);const B=xo(b);for(let k=y,T=0;k<u;k++,T++)o[k]=r[k]^B[T];Ae(b)}return o}function Fo(t,e,n,r,o){const s=o?o.length:0,i=t.create(n,r.length+s);o&&i.update(o);const a=Bo(8*r.length,8*s,e);i.update(r),i.update(a);const l=i.digest();return Ae(a),l}const xn=Ro({blockSize:16,nonceLength:12,tagLength:16,varSizeNonce:!0},function(e,n,r){if(n.length<8)throw new Error("aes/gcm: invalid nonce length");const o=16;function s(a,l,c){const d=Fo(bn,!1,a,c,r);for(let u=0;u<l.length;u++)d[u]^=l[u];return d}function i(){const a=Do(e),l=st.slice(),c=st.slice();if(ct(a,!1,c,c,l),n.length===12)c.set(n);else{const u=st.slice();bt(u).setBigUint64(8,BigInt(n.length*8),!1);const h=bn.create(l).update(n).update(u);h.digestInto(c),h.destroy()}const d=ct(a,!1,c,st);return{xk:a,authKey:l,counter:c,tagMask:d}}return{encrypt(a){const{xk:l,authKey:c,counter:d,tagMask:u}=i(),w=new Uint8Array(a.length+o),h=[l,c,d,u];Qe(a)||h.push(a=Je(a)),ct(l,!1,d,a,w.subarray(0,a.length));const x=s(c,u,w.subarray(0,w.length-o));return h.push(x),w.set(x,a.length),Ae(...h),w},decrypt(a){const{xk:l,authKey:c,counter:d,tagMask:u}=i(),w=[l,c,u,d];Qe(a)||w.push(a=Je(a));const h=a.subarray(0,-o),x=a.subarray(-o),I=s(c,u,h);if(w.push(I),!So(I,x))throw Ae(...w),new Error("aes/gcm: invalid ghash tag");const p=ct(l,!1,d,h);return Ae(...w),p}}}),rr="chainlesschain.remote-session.e2ee.v1",In="chainlesschain://remote-session/pair#",Ot=32,jo=new TextEncoder,or=new TextDecoder;function pt(t){return jo.encode(t)}function at(t){let e="";for(const n of t)e+=String.fromCharCode(n);return btoa(e).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function Ye(t){const e=String(t).replace(/-/g,"+").replace(/_/g,"/"),n=atob(e),r=new Uint8Array(n.length);for(let o=0;o<n.length;o+=1)r[o]=n.charCodeAt(o);return r}function Ho(t){const e=new Uint8Array(t);return globalThis.crypto.getRandomValues(e),e}function zo(){const t=$t.utils;return t.randomSecretKey?t.randomSecretKey():t.randomPrivateKey()}function Sn(t,e,n){return pt(`${rr}
|
|
2
|
+
${t}
|
|
3
|
+
${e}
|
|
4
|
+
${n}`)}function Zo(t,e=Date.now()){if(typeof t!="string"||!t.startsWith(In))throw new Error("Invalid Remote Session pairing URI");let n;try{n=JSON.parse(or.decode(Ye(t.slice(In.length))))}catch{throw new Error("Malformed Remote Session pairing payload")}if(n.v!==1||!n.relayUrl||!n.remoteSessionId||!n.hostPeerId||!n.hostPublicKey||!n.pairingToken)throw new Error("Incomplete Remote Session pairing payload");if(n.expiresAt&&n.expiresAt<=e)throw new Error("Remote Session pairing payload expired");let r;try{r=new URL(n.relayUrl).protocol}catch{r=null}if(r!=="ws:"&&r!=="wss:")throw new Error("Remote Session relay must use ws or wss");return n}class Ko{constructor(e,n){if(!e||!n)throw new Error("sessionId and localPeerId are required");this.sessionId=e,this.localPeerId=n,this.secretKey=zo(),this.publicKey=$t.getPublicKey(this.secretKey),this.key=null,this.sendSequence=0,this.receivedSequences=new Map}publicKeyBase64(){return at(this.publicKey)}pair(e,n){if(!e||!n)throw new Error("Incomplete peer key material");const r=Ye(e),o=r.length===Ot?r:r.slice(-Ot);if(o.length!==Ot)throw new Error("Invalid X25519 host public key");const s=$t.getSharedSecret(this.secretKey,o),i=tn(pt(n));this.key=bo(tn,s,i,pt(`${rr}:${this.sessionId}`),32)}encrypt(e){if(!this.key)throw new Error("Remote Session is not paired");const n=this.sendSequence+=1,r=Ho(12),o=xn(this.key,r,Sn(this.sessionId,this.localPeerId,n)).encrypt(pt(JSON.stringify(e)));return{v:1,sessionId:this.sessionId,senderId:this.localPeerId,sequence:n,nonce:at(r),ciphertext:at(o.slice(0,o.length-16)),tag:at(o.slice(o.length-16))}}decrypt(e){if(e?.v!==1||e.sessionId!==this.sessionId)throw new Error("Invalid encrypted Remote Session envelope");if(!this.key)throw new Error("Remote Session is not paired");const n=this.receivedSequences.get(e.senderId)||0;if(!Number.isSafeInteger(e.sequence)||e.sequence<=n)throw new Error("Remote Session replay or out-of-order envelope rejected");const r=new Uint8Array([...Ye(e.ciphertext),...Ye(e.tag)]),o=xn(this.key,Ye(e.nonce),Sn(this.sessionId,e.senderId,e.sequence)).decrypt(r);return this.receivedSequences.set(e.senderId,e.sequence),JSON.parse(or.decode(o))}}const sr="chainlesschain://remote-control/pair#";function Yo(t){const e=String(t).replace(/-/g,"+").replace(/_/g,"/"),n=e.padEnd(e.length+(4-e.length%4)%4,"="),r=atob(n),o=new Uint8Array(r.length);for(let s=0;s<r.length;s+=1)o[s]=r.charCodeAt(s);return new TextDecoder().decode(o)}function ir(t){return typeof t=="string"&&t.startsWith(sr)}function kt(t){const e=/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/.exec(t);if(!e)return!1;const[n,r]=[Number(e[1]),Number(e[2])];return[e[1],e[2],e[3],e[4]].some(o=>Number(o)>255)?!1:n===127||n===10||n===172&&r>=16&&r<=31||n===192&&r===168||n===169&&r===254}function Vo(t){const e=String(t||"").toLowerCase().replace(/^\[|\]$/g,"");if(!e)return!1;if(e==="localhost"||kt(e)||e==="::1")return!0;const n=/^::ffff:(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})$/.exec(e);if(n)return kt(n[1]);const r=/^::ffff:([0-9a-f]{1,4}):([0-9a-f]{1,4})$/.exec(e);if(r){const o=parseInt(r[1],16),s=parseInt(r[2],16);return kt(`${o>>8&255}.${o&255}.${s>>8&255}.${s&255}`)}return!!(/^fe[89ab]/.test(e)||/^f[cd]/.test(e))}function Xo(t){let e;try{e=new URL(String(t))}catch{throw new Error(`Invalid direct pairing endpoint: ${t}`)}if(e.protocol!=="ws:"&&e.protocol!=="wss:")throw new Error(`Direct pairing endpoint must be ws:// or wss:// (got ${e.protocol})`);if(e.protocol==="ws:"&&!Vo(e.hostname))throw new Error(`Refusing plaintext ws:// to non-private host "${e.hostname}" — direct pairing is LAN/loopback only; use wss:// for anything else`);return e}function Go(t,e=Date.now()){if(!ir(t))throw new Error("Not a remote-control pairing URI");let n;try{n=JSON.parse(Yo(t.slice(sr.length)))}catch{throw new Error("Malformed remote-control pairing payload")}if(n.v!==1||n.transport!=="direct")throw new Error(`Unsupported remote-control pairing payload (v=${n.v}, transport=${n.transport})`);if(!n.wsUrl||!n.remoteSessionId||!n.pairingToken)throw new Error("Pairing payload is missing wsUrl/session/token");if(n.expiresAt!=null&&n.expiresAt<=e)throw new Error("Pairing link has expired — generate a new one");return Xo(n.wsUrl),{wsUrl:n.wsUrl,serverToken:n.serverToken||null,remoteSessionId:n.remoteSessionId,agentSessionId:n.agentSessionId||null,pairingToken:n.pairingToken,scopes:Array.isArray(n.scopes)?n.scopes:null,expiresAt:n.expiresAt??null,durableMembership:n.durableMembership===!0}}const Wo="chainlesschain.remote-membership-authentication-challenge.v1\0",cr="cc-remote-membership-credential/v1",Qo="cc-remote-membership",Jo=1,lt="credentials",es="cc.remote-membership.ed25519.v1:",ut=Object.freeze({storageUnavailable:!0});function ar(t){let e="";for(const n of new Uint8Array(t))e+=String.fromCharCode(n);return btoa(e).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}function ts(t){return[...new Uint8Array(t)].map(e=>e.toString(16).padStart(2,"0")).join("")}function Mt(t){if(t===null||typeof t=="boolean"||typeof t=="string")return JSON.stringify(t);if(typeof t=="number"){if(!Number.isSafeInteger(t)||Object.is(t,-0))throw new Error("Remote membership challenge contains a non-canonical number");return JSON.stringify(t)}if(Array.isArray(t))return`[${t.map(e=>Mt(e)).join(",")}]`;if(!t||typeof t!="object")throw new Error("Remote membership challenge is not canonical JSON");return`{${Object.keys(t).sort().map(e=>`${JSON.stringify(e)}:${Mt(t[e])}`).join(",")}}`}function Tt(t){const e=typeof t=="string"?t.trim():"";if(!e||e.length>256||/[\u0000-\u001f\u007f]/.test(e))throw new Error("Remote membership session id is invalid");return e}function lr(t,{optional:e=!1}={}){if(e&&t==null)return null;const n=typeof t=="string"?t.trim():"";if(!n||n.length>256||/[\u0000-\u001f\u007f]/.test(n))throw new Error("Remote membership principal id is invalid");return n}function _n(t,e){try{e?.removeItem(`${es}${t}`)}catch{}}function ns(t=globalThis.indexedDB){if(!t||typeof t.open!="function")return null;let e=null;function n(){return e||(e=new Promise((o,s)=>{const i=t.open(Qo,Jo);i.onupgradeneeded=()=>{const a=i.result;a.objectStoreNames.contains(lt)||a.createObjectStore(lt,{keyPath:"sessionId"})},i.onsuccess=()=>o(i.result),i.onerror=()=>s(i.error||new Error("Remote membership database failed")),i.onblocked=()=>s(new Error("Remote membership database upgrade is blocked"))}).catch(o=>{throw e=null,o}),e)}async function r(o,s){const i=await n();return new Promise((a,l)=>{const c=i.transaction(lt,o),d=c.objectStore(lt);let u,w=!1;const h=s(d);h.onsuccess=()=>{u=h.result},h.onerror=x=>{if(h.error?.name==="ConstraintError"){w=!0,x.preventDefault(),x.stopPropagation();return}},c.oncomplete=()=>a(w?{duplicate:!0}:{result:u}),c.onerror=()=>l(c.error||h.error||new Error("Credential transaction failed")),c.onabort=()=>l(c.error||h.error||new Error("Credential transaction aborted"))})}return Object.freeze({async get(o){return(await r("readonly",s=>s.get(o))).result},async add(o){return(await r("readwrite",i=>i.add(o))).duplicate!==!0},async put(o){await r("readwrite",s=>s.put(o))},async delete(o){await r("readwrite",s=>s.delete(o))}})}function Pt(t,{type:e,usage:n,extractable:r}){if(!t||t.type!==e||t.algorithm?.name!=="Ed25519"||t.extractable!==r||!Array.isArray(t.usages)||t.usages.length!==1||t.usages[0]!==n)throw new Error("Remote membership credential record is invalid")}function ft(t,e){if(!t||typeof t!="object"||Array.isArray(t)||t.schema!==cr||t.sessionId!==e)throw new Error("Remote membership credential record is invalid");return Pt(t.publicKey,{type:"public",usage:"verify",extractable:!0}),Pt(t.privateKey,{type:"private",usage:"sign",extractable:!1}),lr(t.principalId,{optional:!0}),t}function rs({subtle:t=globalThis.crypto?.subtle,credentialStore:e=ns(),legacyStorage:n=(()=>{try{return globalThis.localStorage||null}catch{return null}})()}={}){if(!t)throw new Error("WebCrypto is required for durable pairing");const r=new Map,o=new Map;function s(u,w){const x=(o.get(u)||Promise.resolve()).then(w,w);return o.set(u,x),x.finally(()=>{o.get(u)===x&&o.delete(u)})}async function i(u){r.delete(u);try{await e?.delete(u)}catch{}}async function a(u){const w=r.get(u);if(w)try{return{record:ft(w,u),persistence:"memory"}}catch{r.delete(u)}if(!e)return null;let h;try{h=await e.get(u)}catch{return ut}if(!h)return null;try{return{record:ft(h,u),persistence:"indexeddb"}}catch{return await i(u),null}}async function l(u,w){const h=await t.exportKey("spki",u.publicKey),x=ar(h),I=`ed25519:${ts(await t.digest("SHA-256",h))}`;if(u.principalId&&u.principalId!==I)throw new Error("Remote membership principal binding changed");return Object.freeze({publicKey:x,privateKey:u.privateKey,principalId:u.principalId||null,credentialPrincipalId:I,persistence:w})}async function c(u,{memoryOnly:w=!1}={}){const h=await t.generateKey({name:"Ed25519"},!1,["sign","verify"]),x=ft({schema:cr,sessionId:u,publicKey:h.publicKey,privateKey:h.privateKey,principalId:null},u);if(e&&!w){let I;try{I=await e.add(x)}catch{return r.set(u,x),{record:x,persistence:"memory"}}if(I)return{record:x,persistence:"indexeddb"};const p=await a(u);if(p&&p!==ut)return p;throw new Error("Concurrent credential creation did not persist a key")}return r.set(u,x),{record:x,persistence:"memory"}}async function d(u){_n(u,n);const w=await a(u),h=w===ut?await c(u,{memoryOnly:!0}):w||await c(u);return l(h.record,h.persistence)}return Object.freeze({getOrCreate(u){const w=Tt(u);return s(w,()=>d(w))},rememberPrincipal(u,w){const h=Tt(u),x=lr(w);return s(h,async()=>{const I=await a(h);if(I===ut)throw new Error("Remote membership principal persistence is unavailable");const p=I||await c(h),y=await l(p.record,p.persistence);if(x!==y.credentialPrincipalId)throw new Error("Remote membership principal binding changed");if(p.record.principalId&&p.record.principalId!==x)throw new Error("Remote membership principal binding changed");if(p.record.principalId===x&&p.persistence==="indexeddb")return y;if(p.persistence!=="indexeddb"||!e)throw new Error("Remote membership principal could not be persisted before join");const b=ft({...p.record,principalId:x},h);try{await e.put(b)}catch(B){throw new Error("Remote membership principal could not be persisted before join",{cause:B})}return l(b,"indexeddb")})},forget(u){const w=Tt(u);return s(w,async()=>{_n(w,n),r.delete(w);try{await e?.delete(w)}catch{}})}})}let qt=null;function Xt(){return qt||(qt=rs()),qt}function os(t){return Xt().getOrCreate(t)}function ss(t,e){return Xt().rememberPrincipal(t,e)}function is(t){return Xt().forget(t)}async function Rn(t,e){const n=globalThis.crypto?.subtle;if(!n||!e)throw new Error("Remote membership signing credential is unavailable");Pt(e,{type:"private",usage:"sign",extractable:!1});const r=new TextEncoder,o=r.encode(Wo),s=r.encode(Mt(t)),i=new Uint8Array(o.length+s.length);return i.set(o,0),i.set(s,o.length),ar(await n.sign({name:"Ed25519"},e,i))}const An=1e3,Bn=3e4,On=20,cs=15e3,as=5e3,ls=2;let kn=0;function ht(){return globalThis.crypto?.randomUUID?globalThis.crypto.randomUUID():`${Date.now()}-${Math.random().toString(36).slice(2)}`}function us(){return`web-${ht()}`}const fs=wr("remoteSession",()=>{const t=ue("idle"),e=ue([]),n=ue(""),r=ue(null),o=ue(null),s=ue(null),i=ue([]),a=ue([]),l=new Map,c=new Set,d=[];let u=null,w=null,h=null,x=null,I=!1,p=!1,y=0,b=null,B=null,k=0,T=null,M=0,_=null,q=null,O=null,C=null,D=new Map,Q=0;function Z(){b&&(clearTimeout(b),b=null)}function E(){B&&(clearTimeout(B),B=null)}function v(f){const g=f?.payload&&typeof f.payload=="object"?f.payload:f;if(["permission.request","approval.requested","approval_request"].includes(f?.type)){const m=j(f);m&&!l.has(m)&&!c.has(m)&&!i.value.some(S=>S.requestId===m)&&(l.set(m,"pending"),i.value=[...i.value,{requestId:m,tool:f.tool||null,action:f.action||null,detail:f.detail||null,askedAt:f.askedAt||Date.now(),fingerprint:f.fingerprint||null,binding:f.binding||null,revision:f.revision??null,requestedPermissions:Y(f)}])}else if(["permission.resolved","approval.resolved","approval_resolved"].includes(f?.type)){const m=j(f);m&&(l.delete(m),G(m),U(m))}else if(["question_request","question.requested","question"].includes(f?.type)){const m=g?.requestId||g?.id||f?.id||null,S=g?.binding&&typeof g.binding=="object"&&!Array.isArray(g.binding)?g.binding:null;m&&S&&!a.value.some($=>$.requestId===m)&&(a.value=[...a.value,{requestId:m,question:g.question||g.prompt||"",options:Array.isArray(g.options)?g.options:[],multiSelect:g.multiSelect===!0,binding:S}])}else if(["question_resolved","question.resolved"].includes(f?.type)){const m=g?.requestId||g?.id||f?.id||null;m&&X(m)}kn+=1,e.value=[...e.value,{...f,_id:kn,_rxAt:Date.now()}].slice(-200)}function U(f){i.value=i.value.filter(g=>g.requestId!==f)}function j(f){return f?.requestId||f?.approvalId||f?.id||null}function Y(f){const g=f?.requested_permissions??f?.requestedPermissions;if(!Array.isArray(g)||g.length===0||g.length>64)return null;const m=[];for(const S of g){if(!S||typeof S!="object"||Array.isArray(S))return null;const $=S.capability,J=S.scope,me=S.expiresAt??S.expires_at??null;if(typeof $!="string"||$.length<1||$.length>128||typeof J!="string"||J.length<1||J.length>1024||me!==null&&typeof me!="string")return null;m.push({capability:$,scope:J,...me===null?{}:{expiresAt:me}})}return m}function G(f){for(c.has(f)||(c.add(f),d.push(f));d.length>1024;)c.delete(d.shift())}function P(){l.clear(),c.clear(),d.splice(0),i.value=[]}function X(f){a.value=a.value.filter(g=>g.requestId!==f)}function te(f){!f||!f.requestId||e.value.some(m=>["permission.resolved","approval.resolved","approval_resolved"].includes(m.type)&&j(m)===f.requestId)||c.has(f.requestId)||(l.set(f.requestId,"pending"),i.value.some(m=>m.requestId===f.requestId)||(i.value=[...i.value,f]))}function Be(){if(!h)return;I||(k=0);const f=new WebSocket(h.relayUrl);u=f,f.addEventListener("open",()=>{f===u&&f.send(JSON.stringify({type:"register",peerId:x,deviceType:"web",deviceInfo:{protocol:"remote-session.e2ee.v1"}}))}),f.addEventListener("message",g=>{f===u&&ge(g.data)}),f.addEventListener("close",()=>{f===u&&(E(),u=null,p?t.value="disconnected":he())}),f.addEventListener("error",()=>{f===u&&(n.value="Remote Session relay connection error")})}function he(){if(p||b)return;if(y>=On){t.value="disconnected",n.value="Remote Session 重连已放弃(中继长时间不可达)— 回到本页可自动重试";return}const f=Math.min(An*2**y,Bn);y+=1,t.value="reconnecting",b=setTimeout(()=>{b=null,p||Be()},f)}function Ee(){if(!(p||b)){if(o.value==="direct"){if(!q?.durableMembership||!C||_)return;y=0,n.value="",Ue(q,{resumeOnly:!0});return}o.value!=="relay"||!h||u||(y=0,n.value="",t.value="connecting",Be())}}function ge(f){try{let g=JSON.parse(typeof f=="string"?f:String(f));if(g.type==="offline-message"&&(g=g.originalMessage||{}),g.type==="registered"){I?t.value="connected":(t.value="pairing",xe());return}if(g.type!=="message")return;const m=g.payload;if(!m||m.type!=="remote-session.encrypted")return;const S=w.decrypt(m.envelope);S.type==="pair.accepted"?(E(),I=!0,k=0,y=0,t.value="connected"):S.type==="session.revoked"?(p=!0,I=!1,Z(),E(),u&&u.close(),u=null,t.value="revoked"):v(S)}catch(g){t.value="error",n.value=g?.message||"Remote Session protocol error"}}function ve(f,g){return!u||u.readyState!==WebSocket.OPEN||!h?!1:(u.send(JSON.stringify({type:"message",to:h.hostPeerId,payload:{type:f,...g}})),!0)}function xe(){const f={type:"pair.join",remoteSessionId:h.remoteSessionId,token:h.pairingToken,capabilities:["approval-binding-v1","approval-decision-v1"]};T?.token&&(f.pushToken=T.token,f.pushProvider=T.provider||"web");const g=ve("remote-session.pair",{mobilePeerId:x,mobilePublicKey:w.publicKeyBase64(),envelope:w.encrypt(f)});return E(),g?(B=setTimeout(()=>{if(B=null,!(I||p)){if(k>=ls){try{u?.close()}catch{}return}k+=1,xe()}},as),!0):!1}function A(f){if(!u||u.readyState!==WebSocket.OPEN||!I)return!1;const g={...f,commandId:f.commandId||ht(),seq:f.seq??++M};return ve("remote-session.encrypted",{envelope:w.encrypt(g)})}function F(f){for(const[,g]of D)clearTimeout(g.timer),g.reject(new Error(f));D=new Map}function fe(f,g={}){const m=_;if(!m||m.readyState!==WebSocket.OPEN)return Promise.reject(new Error("not connected"));const S=`web-rc-${++Q}-${ht()}`;return new Promise(($,J)=>{const me=setTimeout(()=>{D.delete(S),J(new Error(`request "${f}" timed out`))},cs);D.set(S,{resolve:$,reject:J,timer:me}),m.send(JSON.stringify({id:S,type:f,...g}))})}function Et(f){let g;try{g=JSON.parse(typeof f=="string"?f:String(f))}catch{return}const m=g.requestId&&D.has(g.requestId)?g.requestId:g.id&&D.has(g.id)?g.id:null;if(m){const S=D.get(m);if(D.delete(m),clearTimeout(S.timer),g.type==="error"){const $=new Error(g.message||g.payload?.message||"server error");typeof g.code=="string"&&g.code&&($.code=g.code),$.remoteResponse=!0,S.reject($)}else S.resolve(g);return}if(g.type==="remote-session-event"&&g.remoteSessionId===q?.remoteSessionId){v(g.event||{});return}if(g.type==="remote-session-revoked"&&g.remoteSessionId===q?.remoteSessionId){p=!0;const S=q.remoteSessionId;C=null,O=null,is(S),_&&_.close(),_=null,t.value="revoked"}}function je(){if(p||b||!q?.durableMembership||!C)return;if(y>=On){t.value="disconnected",n.value="Durable Remote Session reconnect attempts were exhausted; retry from this page.";return}const f=Math.min(An*2**y,Bn);y+=1,t.value="reconnecting",b=setTimeout(()=>{b=null,!p&&q&&Ue(q,{resumeOnly:!0})},f)}function Ue(f,{resumeOnly:g=!1}={}){q=f,r.value=f.remoteSessionId,o.value="direct",s.value=f.scopes,t.value=g?"reconnecting":"connecting";const m=new WebSocket(f.wsUrl);_=m,m.addEventListener("open",async()=>{if(m===_)try{if(t.value=g?"reconnecting":"pairing",f.serverToken){const $=await fe("auth",{token:f.serverToken});if(!$.success)throw new Error($.message||"authentication failed")}let S;if(f.durableMembership){O=O||await os(f.remoteSessionId),C=C||O.principalId||null;const $=N=>typeof N=="string"&&/^[1-9]\d*$/.test(N),J=(N,He,ke)=>{const tt=N.session?.sessionId||null,mr=N.member?.principalId||N.member?.clientId||null;if(tt!==f.remoteSessionId||mr!==O.credentialPrincipalId||!$(ke?.sessionEpoch)||!$(ke?.membershipEpoch)||N.session?.sessionEpoch!==ke.sessionEpoch||N.member?.membershipEpoch!==ke.membershipEpoch)throw new Error(`Durable Remote Session ${He} binding changed`);return N},me=async()=>{if(!C)throw new Error("Durable Remote Session principal binding is unavailable");const N=await fe("remote-session-resume-challenge",{remoteSessionId:f.remoteSessionId,principalId:C});if(N.challenge?.sessionId!==f.remoteSessionId||N.challenge?.principalId!==C||!$(N.challenge?.sessionEpoch)||!$(N.challenge?.membershipEpoch))throw new Error("Durable Remote Session resume challenge binding changed");const He=await Rn(N.challenge,O.privateKey);return J(await fe("remote-session-resume",{remoteSessionId:f.remoteSessionId,challengeId:N.challenge.challengeId,signature:He}),"resume",N.challenge)},Wt=async()=>{const N=await fe("remote-session-join-challenge",{remoteSessionId:f.remoteSessionId,token:f.pairingToken,credentialPublicKey:O.publicKey,capabilities:["approval-binding-v1","approval-decision-v1"]});if(N.challenge?.sessionId!==f.remoteSessionId||N.challenge?.principalId!==O.credentialPrincipalId||N.challenge?.credentialPublicKey!==O.publicKey||!$(N.challenge?.sessionEpoch)||!$(N.challenge?.membershipEpoch))throw new Error("Durable Remote Session join challenge binding changed");O=await ss(f.remoteSessionId,O.credentialPrincipalId),C=O.principalId;const He=await Rn(N.challenge,O.privateKey);try{return J(await fe("remote-session-join",{remoteSessionId:f.remoteSessionId,challengeId:N.challenge.challengeId,signature:He}),"join",N.challenge)}catch(ke){if(ke?.remoteResponse)throw ke;try{return await me()}catch(tt){throw tt.joinOutcomeUnknown=!0,tt}}};if(C)try{S=await me()}catch(N){if(g||N?.code!=="REMOTE_SESSION_MEMBERSHIP_NOT_ACTIVE")throw N;S=await Wt()}else{if(g)throw new Error("Durable Remote Session principal binding is unavailable");S=await Wt()}}else S=await fe("remote-session-join",{remoteSessionId:f.remoteSessionId,token:f.pairingToken});if(m!==_)return;s.value=S.member?.scopes||f.scopes,y=0,n.value="",t.value="connected"}catch(S){if(m!==_)return;n.value=S?.message||"Direct pairing failed",F(n.value),_=null;try{m.close()}catch{}!p&&(g||S?.joinOutcomeUnknown===!0)?je():t.value="error"}}),m.addEventListener("message",S=>{m===_&&Et(S.data)}),m.addEventListener("close",()=>{if(m===_){if(_=null,F("connection closed"),p){t.value!=="revoked"&&(t.value="disconnected");return}if(f.durableMembership&&C){je();return}["connected","connecting","pairing","reconnecting"].includes(t.value)&&(t.value="disconnected",n.value="直连会话已断开 — 配对码为一次性,请在主机端重新生成配对链接")}}),m.addEventListener("error",()=>{m===_&&(n.value="Remote control host connection error")})}function Oe(f){return fe("remote-session-publish",{remoteSessionId:q.remoteSessionId,commandId:ht(),seq:++M,event:f}).catch(g=>(n.value=g?.message||"Remote control send failed",null))}function et(f,g={}){Gt();try{if(n.value="",e.value=[],P(),p=!1,M=0,ir(f))return O=null,C=null,y=0,Ue(Go(f)),!0;const m=Zo(f);return T=g.pushCredentials||null,x=us(),w=new Ko(m.remoteSessionId,x),w.pair(m.hostPublicKey,m.pairingToken),h=m,r.value=m.remoteSessionId,o.value="relay",s.value=null,I=!1,k=0,y=0,t.value="connecting",Be(),!0}catch(m){return t.value="error",n.value=m?.message||"Invalid pairing link",!1}}function ur(f){const g=(f||"").trim();if(g){if(o.value==="direct"){_?Oe({type:"prompt",content:g}):n.value="Remote Session is not connected";return}A({type:"prompt",content:g})||(n.value="Remote Session is not connected")}}function fr(f,g){if(!f)return!1;const m=i.value.find(J=>J.requestId===f)||null;if(!m||l.get(f)!=="pending")return!1;const S=dr(m,g);if(!S)return n.value="This approval does not contain a reviewable persistent grant",!1;const $=S.kind.startsWith("accept");return l.set(f,"responding"),U(f),o.value==="direct"?_?(Oe({type:"approval.resolve",requestId:f,decision:S,answer:$,approved:$,fingerprint:m?.fingerprint||null,binding:m?.binding||null,revision:m?.revision??null}).then(J=>{J===null&&te(m)}),!0):(n.value="Remote Session is not connected",te(m),!1):A({type:"approval.resolve",requestId:f,decision:S,approved:$,fingerprint:m?.fingerprint||null,binding:m?.binding||null,revision:m?.revision??null})?!0:(n.value="Remote Session is not connected",te(m),!1)}function dr(f,g){return g===!0||g==="once"||g==="acceptOnce"?{kind:"acceptOnce"}:g===!1||g==="decline"?{kind:"decline"}:g==="turn"||g==="acceptForTurn"?f.requestedPermissions?.length?{kind:"acceptForTurn",permissions:f.requestedPermissions}:null:(g==="session"||g==="acceptForSession")&&f.requestedPermissions?.length?{kind:"acceptForSession",permissions:f.requestedPermissions}:null}function pr(f,g){if(!f)return;const m=a.value.find($=>$.requestId===f)||null;if(!m?.binding)return;X(f);const S={type:"question.answer",requestId:f,answer:g,binding:m.binding};if(o.value==="direct"){if(!_){n.value="Remote Session is not connected",a.value=[...a.value,m];return}Oe(S).then($=>{$===null&&!a.value.some(J=>J.requestId===f)&&(a.value=[...a.value,m])});return}A(S)||(n.value="Remote Session is not connected",a.value=[...a.value,m])}function hr(){const f=i.value.filter(m=>l.get(m.requestId)==="pending");for(const m of f)l.set(m.requestId,"interrupting"),U(m.requestId);const g=m=>{for(const S of f)l.get(S.requestId)==="interrupting"&&(m?(l.delete(S.requestId),G(S.requestId)):te(S));return m};return o.value==="direct"?_?(Oe({type:"interrupt"}).then(m=>g(m!==null)),!0):g(!1):g(A({type:"interrupt"}))}function gr(f,g="web"){if(T=f?{token:f,provider:g}:null,!I)return;const m={type:"push.register"};T?.token&&(m.pushToken=T.token,m.pushProvider=T.provider),A(m)}function Gt(){if(p=!0,I=!1,Z(),E(),u)try{u.close()}catch{}if(u=null,_)try{_.close()}catch{}_=null,q=null,O=null,C=null,F("disconnected"),P(),t.value!=="revoked"&&(t.value="disconnected")}return{status:t,events:e,error:n,remoteSessionId:r,transport:o,scopes:s,pendingApprovals:i,pendingQuestions:a,connect:et,sendPrompt:ur,approve:fr,answerQuestion:pr,interrupt:hr,updatePushCredentials:gr,resumeReconnect:Ee,disconnect:Gt}}),ds={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},ps={key:0,class:"page-sub"},hs={key:0,style:{"word-break":"break-all"}},gs={key:1,class:"page-sub"},ms={key:2,style:{"margin-top":"8px"},"data-testid":"approval-grants"},ws={key:0},Is={__name:"RemoteSession",setup(t){const e=fs();yr(()=>e.resumeReconnect());const{status:n,events:r,error:o,transport:s,pendingApprovals:i,pendingQuestions:a}=br(e),l=ue(""),c=ue(""),d=ue(!1),u=nt(()=>["connecting","pairing","connected","reconnecting"].includes(n.value)),w=nt(()=>({idle:"未连接",connecting:"连接中",pairing:"配对中",connected:"已连接",reconnecting:"重连中",disconnected:"已断开",revoked:"已被撤销",error:"错误"})[n.value]||n.value),h=nt(()=>n.value==="connected"?"green":["connecting","pairing","reconnecting"].includes(n.value)?"blue":["revoked","error"].includes(n.value)?"red":"default"),x=nt(()=>[...r.value].reverse());function I(E){return String(E?.type||"").includes("approval")}function p(E){const v=String(E?.type||""),U=b(E);return["permission.request","approval.requested","approval_request"].includes(v)&&U!==""&&i.value.some(j=>j.requestId===U)}function y(E){return E?.content||E?.payload?.content||E?.message||""}function b(E){return E?.requestId||E?.approvalId||E?.id||""}function B(){e.connect(l.value.trim())}function k(E){d.value=!1,E&&(l.value=E,e.connect(E))}function T(E){const v=typeof E=="string"?E:c.value;e.sendPrompt(v),c.value=""}function M(E,v){e.approve(b(E),v)}function _(E,v){e.approve(E.requestId,v)}function q(E){return String(E&&typeof E=="object"?E.label??E.value??"":E??"")}function O(E){return E&&typeof E=="object"&&"value"in E?E.value:q(E)}function C(E,v){let U=v;if(U===void 0){const j=E.options.map(q).filter(Boolean),Y=window.prompt(`${E.question||"Input required"}${j.length?`
|
|
5
|
+
Options: ${j.join(", ")}`:""}`);if(Y===null)return;U=E.multiSelect?Y.split(",").map(G=>G.trim()).filter(Boolean):Y}e.answerQuestion(E.requestId,U)}function D(){e.interrupt()}function Q(){e.disconnect()}function Z(){o.value=""}return(E,v)=>{const U=ie("a-tag"),j=ie("a-space"),Y=ie("a-alert"),G=ie("a-textarea"),P=ie("a-button"),X=ie("a-card"),te=ie("a-input-search"),Be=ie("a-spin"),he=ie("a-list-item-meta"),Ee=ie("a-list-item"),ge=ie("a-list"),ve=ie("a-badge"),xe=ie("a-empty");return H(),we("div",null,[$e("div",ds,[v[4]||(v[4]=$e("div",null,[$e("h2",{class:"page-title"},"远程会话"),$e("p",{class:"page-sub"}," 扫码或粘贴桌面端的配对链接,接管一个编码会话(观察 / 提示 / 审批 / 中断)——支持中继 E2EE 链接与局域网直连链接 ")],-1)),L(j,null,{default:R(()=>[ne(s)?(H(),se(U,{key:0,color:"purple"},{default:R(()=>[V(de(ne(s)==="direct"?"直连":"中继"),1)]),_:1})):ae("",!0),L(U,{color:h.value},{default:R(()=>[V(de(w.value),1)]),_:1},8,["color"])]),_:1})]),ne(o)?(H(),se(Y,{key:0,type:"error","show-icon":"",style:{"margin-bottom":"16px"},message:ne(o),closable:"",onClose:Z},null,8,["message"])):ae("",!0),u.value?(H(),se(X,{key:2,title:"会话控制",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"}},{extra:R(()=>[L(j,null,{default:R(()=>[L(P,{size:"small",onClick:D},{default:R(()=>[...v[8]||(v[8]=[V("中断",-1)])]),_:1}),L(P,{size:"small",danger:"",onClick:Q},{default:R(()=>[...v[9]||(v[9]=[V("断开",-1)])]),_:1})]),_:1})]),default:R(()=>[L(j,{direction:"vertical",style:{width:"100%"},size:8},{default:R(()=>[L(te,{value:c.value,"onUpdate:value":v[2]||(v[2]=A=>c.value=A),placeholder:"发送提示到远程会话…","enter-button":"发送",disabled:ne(n)!=="connected",onSearch:T},null,8,["value","disabled"]),ne(n)==="reconnecting"?(H(),se(Be,{key:0,size:"small"},{tip:R(()=>[...v[10]||(v[10]=[V("正在重连…",-1)])]),_:1})):ae("",!0)]),_:1})]),_:1})):(H(),se(X,{key:1,title:"连接远程会话",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"}},{default:R(()=>[L(j,{direction:"vertical",style:{width:"100%"},size:12},{default:R(()=>[L(G,{value:l.value,"onUpdate:value":v[0]||(v[0]=A=>l.value=A),rows:3,placeholder:"chainlesschain://remote-session/pair#…(中继)或 chainlesschain://remote-control/pair#…(局域网直连)","allow-clear":""},null,8,["value"]),L(j,null,{default:R(()=>[L(P,{type:"primary",disabled:!l.value.trim(),onClick:B},{icon:R(()=>[L(ne(xr))]),default:R(()=>[v[5]||(v[5]=V(" 连接 ",-1))]),_:1},8,["disabled"]),L(P,{onClick:v[1]||(v[1]=A=>d.value=!0)},{icon:R(()=>[L(ne(Ir))]),default:R(()=>[v[6]||(v[6]=V(" 扫码 ",-1))]),_:1})]),_:1}),v[7]||(v[7]=$e("p",{class:"page-sub",style:{margin:"0"}}," 链接为一次性配对码,敏感载荷仅在片段(#)中,不会发往服务器。 ",-1))]),_:1})]),_:1})),ne(a).length?(H(),se(X,{key:3,title:"Agent questions",style:{background:"var(--bg-card)","border-color":"var(--warning-color, #faad14)","margin-bottom":"16px"}},{default:R(()=>[L(ge,{size:"small","data-source":ne(a),"data-testid":"question-cards"},{renderItem:R(({item:A})=>[L(Ee,null,{actions:R(()=>[(H(!0),we(Qt,null,Jt(A.multiSelect?[]:A.options,F=>(H(),se(P,{key:q(F),size:"small",onClick:fe=>C(A,O(F))},{default:R(()=>[V(de(q(F)),1)]),_:2},1032,["onClick"]))),128)),A.multiSelect||!A.options.length?(H(),se(P,{key:0,type:"primary",size:"small",onClick:F=>C(A)},{default:R(()=>[...v[11]||(v[11]=[V(" Answer ",-1)])]),_:1},8,["onClick"])):ae("",!0)]),default:R(()=>[L(he,{description:A.question||"Input required"},null,8,["description"])]),_:2},1024)]),_:1},8,["data-source"])]),_:1})):ae("",!0),ne(i).length?(H(),se(X,{key:4,style:{background:"var(--bg-card)","border-color":"var(--warning-color, #faad14)","margin-bottom":"16px"}},{title:R(()=>[v[12]||(v[12]=V(" 待审批权限请求 ",-1)),L(ve,{count:ne(i).length,style:{"margin-left":"8px"}},null,8,["count"])]),default:R(()=>[L(ge,{size:"small","data-source":ne(i),"data-testid":"approval-cards"},{renderItem:R(({item:A})=>[L(Ee,null,{actions:R(()=>[L(P,{type:"primary",size:"small",onClick:F=>_(A,"once")},{default:R(()=>[...v[14]||(v[14]=[V("Allow once",-1)])]),_:1},8,["onClick"]),A.requestedPermissions?.length?(H(),se(P,{key:0,size:"small",onClick:F=>_(A,"turn")},{default:R(()=>[...v[15]||(v[15]=[V("Allow for turn",-1)])]),_:1},8,["onClick"])):ae("",!0),A.requestedPermissions?.length?(H(),se(P,{key:1,size:"small",onClick:F=>_(A,"session")},{default:R(()=>[...v[16]||(v[16]=[V("Allow for session",-1)])]),_:1},8,["onClick"])):ae("",!0),L(P,{size:"small",danger:"",onClick:F=>_(A,"decline")},{default:R(()=>[...v[17]||(v[17]=[V("Decline",-1)])]),_:1},8,["onClick"])]),default:R(()=>[L(he,null,{title:R(()=>[L(j,null,{default:R(()=>[L(U,{color:"orange"},{default:R(()=>[V(de(A.tool||"tool"),1)]),_:2},1024),A.action?(H(),we("span",ps,de(A.action),1)):ae("",!0)]),_:2},1024)]),description:R(()=>[A.detail?(H(),we("code",hs,de(A.detail),1)):(H(),we("span",gs,"(无详情)")),A.requestedPermissions?.length?(H(),we("div",ms,[v[13]||(v[13]=$e("div",{class:"page-sub"},"Review requested grants:",-1)),(H(!0),we(Qt,null,Jt(A.requestedPermissions,F=>(H(),we("code",{key:`${F.capability}:${F.scope}`,style:{display:"block","word-break":"break-all"}},[V(de(F.capability)+" — "+de(F.scope)+" ",1),F.expiresAt?(H(),we("span",ws," (until "+de(F.expiresAt)+")",1)):ae("",!0)]))),128))])):ae("",!0)]),_:2},1024)]),_:2},1024)]),_:1},8,["data-source"])]),_:1})):ae("",!0),L(X,{title:"会话事件",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:R(()=>[ne(r).length?(H(),se(ge,{key:1,size:"small","data-source":x.value},{renderItem:R(({item:A})=>[L(Ee,null,Er({default:R(()=>[L(he,{description:y(A)},{title:R(()=>[L(U,{color:I(A)?"orange":"blue"},{default:R(()=>[V(de(A.type||"event"),1)]),_:2},1032,["color"])]),_:2},1032,["description"])]),_:2},[p(A)?{name:"actions",fn:R(()=>[L(P,{type:"link",size:"small",onClick:F=>M(A,!0)},{default:R(()=>[...v[18]||(v[18]=[V("批准",-1)])]),_:1},8,["onClick"]),L(P,{type:"link",size:"small",danger:"",onClick:F=>M(A,!1)},{default:R(()=>[...v[19]||(v[19]=[V("拒绝",-1)])]),_:1},8,["onClick"])]),key:"0"}:void 0]),1024)]),_:1},8,["data-source"])):(H(),se(xe,{key:0,description:"尚无事件"}))]),_:1}),L(vr,{open:d.value,onScanned:k,onCancel:v[3]||(v[3]=A=>d.value=!1)},null,8,["open"])])}}};export{Is as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.page-title[data-v-9561b6cc]{margin:0;color:var(--text-primary);font-size:22px;font-weight:600}.page-sub[data-v-9561b6cc]{margin:4px 0 0;color:var(--text-secondary);font-size:13px}.reputation-tabs[data-v-9561b6cc] .ant-tabs-nav{margin-bottom:16px}.filter-bar[data-v-9561b6cc]{display:flex;align-items:center;gap:12px;margin-bottom:12px;flex-wrap:wrap}.rank-pill[data-v-9561b6cc]{display:inline-flex;align-items:center;justify-content:center;width:26px;height:26px;border-radius:50%;background:var(--bg-base);color:var(--text-secondary);font-weight:600;font-size:12px}.rank-pill.gold[data-v-9561b6cc]{background:linear-gradient(135deg,#faad14,#d48806);color:#fff}.rank-pill.silver[data-v-9561b6cc]{background:linear-gradient(135deg,#d9d9d9,#8c8c8c);color:#fff}.rank-pill.bronze[data-v-9561b6cc]{background:linear-gradient(135deg,#d4a373,#ad7d4a);color:#fff}.bd-row[data-v-9561b6cc]{display:flex;align-items:center;margin-bottom:8px}.bucket-row[data-v-9561b6cc]{display:flex;align-items:center;margin-bottom:6px}.bucket-label[data-v-9561b6cc]{min-width:100px;font-family:monospace;font-size:12px;color:var(--text-secondary)}.params-pre[data-v-9561b6cc]{margin:0;padding:8px 10px;background:var(--bg-base);border:1px solid var(--border-color);border-radius:4px;font-size:12px;color:var(--text-primary)}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{X as st,t as B,_ as it,b as ut,u as ct,E as pt,d as k}from"./index-3RqDry-K.js";import{R as dt,an as Ce,i as mt,al as De,au as ft,a1 as Re,L as yt,aa as vt,at as bt,aV as _t}from"./icons-DlxlFL4g.js";import gt from"./index-Vo7A4aiN.js";import{o as xt,M as m,R as _,P as u,u as n,c as t,N as o,Q as S,S as y,K as d,r as h,L as c,O as f,F as T,Y as L,Z as kt,_ as Fe,f as Ie,a as ye}from"./vendor-BXcBOG8b.js";import"./KeyCode-D63Tfrq7.js";import"./omit-DF7mU3yG.js";import"./pickAttrs-Cmt8liJP.js";import"./initDefaultProps-mdL0oeZa.js";import"./motion-ZgVCKcEX.js";import"./raf-Deuc0E8-.js";import"./index-ma-rJkfE.js";import"./index-CsnYp4qF.js";import"./isVisible-C7tPsqfj.js";import"./useState-Dlgl7fUg.js";import"./devWarning-CNIS3FrJ.js";import"./warning-Pq00owYb.js";import"./compact-item-Dn2ktVuj.js";import"./createContext-XTreuyqp.js";import"./Compact-DYs0a9k7.js";import"./_getTag-BVc6NQ_K.js";import"./styleChecker-DMybAFsA.js";import"./zoom-C8rAdf81.js";import"./ActionButton-nhMNWW_d.js";import"./vnode-DB3JBusp.js";const be=Object.freeze(["accuracy","fairness","resilience","convergence_speed"]),Te=Object.freeze(["none","exponential","linear","step"]),ht=Object.freeze(["z_score","iqr"]),$e=Object.freeze(["running","complete","applied","failed","cancelled"]),St=Object.freeze(["generic","task","review","vote"]);function z(s,e=0){return typeof s=="number"&&Number.isFinite(s)?s:e}function P(s){if(!s)return{noDb:!1,error:""};const e=st(s),i=/Database not available/i.test(e);return{noDb:i,error:i?"Database not available":""}}function zt(s,e=0){if(!s||typeof s!="object")return null;const i=s.did||"";return i?{key:i,did:i,score:z(s.score,0),observations:z(s.observations,0),decay:String(s.decay||"none"),weightTotal:z(s.weightTotal,0),_idx:e}:null}function Ee(s){const e=B(s);return Array.isArray(e)?e.map(zt).filter(Boolean):[]}function Le(s,e=0){if(!s||typeof s!="object")return null;const i=s.did||"";return i?{key:`${i}-${e}`,did:i,score:z(s.score,0),reason:String(s.reason||""),zScore:typeof s.zScore=="number"?s.zScore:null,lower:typeof s.lower=="number"?s.lower:null,upper:typeof s.upper=="number"?s.upper:null}:null}function jt(s){const e=B(s);if(!e||typeof e!="object"||Array.isArray(e))return{method:"",threshold:0,totalSamples:0,anomalies:[],summary:"",message:""};const i=Array.isArray(e.anomalies)?e.anomalies.map(Le).filter(Boolean):[];return{method:String(e.method||""),threshold:z(e.threshold,0),totalSamples:z(e.totalSamples,0),anomalies:i,summary:e.summary?String(e.summary):"",message:e.message?String(e.message):""}}function Me(s,e=0){if(!s||typeof s!="object")return null;const i=s.runId||"";return i?{key:i,runId:i,objective:String(s.objective||""),iterations:z(s.iterations,0),paramSpace:s.paramSpace??null,bestParams:s.bestParams??null,bestScore:z(s.bestScore,0),status:String(s.status||"complete").toLowerCase(),createdAt:s.createdAt??null,completedAt:s.completedAt??null,analytics:s.analytics??null,errorMessage:s.errorMessage??"",_idx:e}:null}function Ot(s){const e=B(s);return Array.isArray(e)?e.map(Me).filter(Boolean):[]}function wt(s){const e=B(s);return!e||typeof e!="object"||Array.isArray(e)?null:Me(e,0)}function At(s){const e=B(s);if(!e||typeof e!="object"||Array.isArray(e))return null;const i=e.reputationDistribution||{};return{analyticsId:String(e.analyticsId||""),runId:String(e.runId||""),reputationDistribution:{buckets:Array.isArray(i.buckets)?i.buckets.filter(v=>v&&typeof v=="object").map(v=>({label:String(v.label||""),count:z(v.count,0),min:typeof v.min=="number"?v.min:null,max:typeof v.max=="number"?v.max:null})):[],mean:typeof i.mean=="number"?i.mean:null,stdDev:typeof i.stdDev=="number"?i.stdDev:null},anomalies:e.anomalies&&typeof e.anomalies=="object"?{method:String(e.anomalies.method||""),totalSamples:z(e.anomalies.totalSamples,0),anomalies:Array.isArray(e.anomalies.anomalies)?e.anomalies.anomalies.map(Le).filter(Boolean):[],summary:e.anomalies.summary?String(e.anomalies.summary):"",message:e.anomalies.message?String(e.anomalies.message):""}:{method:"",totalSamples:0,anomalies:[],summary:"",message:""},recommendations:Array.isArray(e.recommendations)?e.recommendations.filter(v=>typeof v=="string"):[]}}const Ct={totalRuns:0,activeRuns:0,maxConcurrentOptimizations:0,byStatus:{},byObjective:{},observations:{totalObservations:0,totalDids:0},bestScoreEver:0};function Dt(s){const e=JSON.parse(JSON.stringify(Ct));for(const v of $e)e.byStatus[v]=0;for(const v of be)e.byObjective[v]=0;const i=B(s);if(!i||typeof i!="object"||Array.isArray(i))return e;if(e.totalRuns=z(i.totalRuns,0),e.activeRuns=z(i.activeRuns,0),e.maxConcurrentOptimizations=z(i.maxConcurrentOptimizations,0),e.bestScoreEver=z(i.bestScoreEver,0),i.byStatus&&typeof i.byStatus=="object")for(const[v,O]of Object.entries(i.byStatus))typeof O=="number"&&Number.isFinite(O)&&(e.byStatus[v]=O);if(i.byObjective&&typeof i.byObjective=="object")for(const[v,O]of Object.entries(i.byObjective))typeof O=="number"&&Number.isFinite(O)&&(e.byObjective[v]=O);return i.observations&&typeof i.observations=="object"&&(e.observations.totalObservations=z(i.observations.totalObservations,0),e.observations.totalDids=z(i.observations.totalDids,0)),e}function ve(s){if(s==null||s==="")return"—";const e=typeof s=="number"?new Date(s):new Date(String(s));return isNaN(e.getTime())?String(s):e.toLocaleString("zh-CN",{hour12:!1})}const Rt={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},Ft={class:"page-title"},It={class:"page-sub"},Tt={class:"filter-bar"},Et={style:{color:"var(--text-secondary)","font-size":"12px"}},$t={key:1,style:{color:"var(--text-primary)","font-family":"monospace","font-size":"12px"}},Lt={key:3,style:{color:"var(--text-secondary)"}},Mt={key:4,style:{color:"var(--text-secondary)","font-family":"monospace","font-size":"12px"}},Nt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},Ut={key:0,style:{color:"var(--text-primary)","font-family":"monospace","font-size":"12px"}},Pt={key:2,style:{color:"var(--text-secondary)"}},Bt={key:5,style:{color:"var(--text-secondary)","font-size":"11px"}},Vt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},qt={style:{"margin-left":"8px",color:"var(--text-muted)","font-size":"12px"}},Jt={style:{color:"var(--text-muted)","font-size":"11px","margin-top":"4px"}},Kt={style:{"margin-left":"8px",color:"var(--text-muted)","font-size":"12px"}},Wt={style:{"padding-top":"8px"}},Yt={style:{"margin-left":"8px",color:"var(--text-muted)","font-size":"12px"}},Gt={key:1},Ht={style:{"font-family":"monospace","font-size":"12px",color:"var(--text-primary)"}},Zt={style:{"margin-left":"8px",color:"var(--text-secondary)","font-size":"12px"}},Qt={key:0,style:{"margin-left":"8px",color:"var(--text-muted)","font-size":"11px"}},Xt={key:0,style:{"padding-top":"8px"}},ea={class:"params-pre"},ta={style:{color:"#ff4d4f"}},aa={key:0,style:{"margin-top":"16px"}},oa={style:{color:"var(--text-primary)","font-size":"13px",margin:"0 0 10px"}},na={class:"bucket-label"},ra={key:0,style:{"margin-top":"8px",color:"var(--text-secondary)","font-size":"12px"}},la={key:0,style:{"margin-left":"12px"}},sa={__name:"Reputation",setup(s){const{t:e}=ut(),i=ct(),v=pt.PRESENTED_IMAGE_SIMPLE,O=h(!1),ee=h(!1),te=h(!1),ae=h(!1),oe=h(!1),ne=h([]),_e=h([]),j=h({totalRuns:0,activeRuns:0,maxConcurrentOptimizations:0,byStatus:{},byObjective:{},observations:{totalObservations:0,totalDids:0},bestScoreEver:0}),q=h({noDb:!1,error:""}),ge=h("scores"),J=h("none"),K=h(!1),W=h(!1),re=h(!1),Y=h(!1),g=ye({did:"",score:.8,kind:"generic",weight:1}),M=ye({objective:"accuracy",iterations:50}),F=ye({method:"z_score",threshold:2.5,decay:"none"}),b=h(null),w=h(null),A=h(null),Ne=Ie(()=>[{title:e("reputation.scoreColumns.rank"),key:"rank",width:"60px"},{title:e("reputation.scoreColumns.did"),key:"did"},{title:e("reputation.scoreColumns.score"),key:"score",width:"220px"},{title:e("reputation.scoreColumns.observations"),key:"observations",width:"100px"},{title:e("reputation.scoreColumns.weightTotal"),key:"weightTotal",width:"100px"}]),Ue=Ie(()=>[{title:e("reputation.runColumns.runId"),key:"runId",width:"140px"},{title:e("reputation.runColumns.objective"),key:"objective",width:"140px"},{title:e("reputation.runColumns.iterations"),key:"iterations",width:"80px"},{title:e("reputation.runColumns.bestScore"),key:"bestScore",width:"110px"},{title:e("reputation.runColumns.status"),key:"status",width:"100px"},{title:e("reputation.runColumns.createdAt"),key:"createdAt",width:"160px"},{title:e("reputation.runColumns.action"),key:"action",width:"160px"}]);function xe(l){const r=`reputation.decay.${l}`,p=e(r);return p===r?l:p}function Pe(l){const r=`reputation.kind.${l}`,p=e(r);return p===r?l:p}function G(l){const r=`reputation.objective.${l}`,p=e(r);return p===r?l:p}function le(l){return{accuracy:"blue",fairness:"green",resilience:"purple",convergence_speed:"orange"}[l]||"default"}function Be(l){return{accuracy:"#1677ff",fairness:"#52c41a",resilience:"#722ed1",convergence_speed:"#fa8c16"}[l]||"#888"}function Ve(l){const r=`reputation.objectiveDesc.${l}`,p=e(r);return p===r?"":p}function se(l){const r=`reputation.status.${l}`,p=e(r);return p===r?l:p}function ie(l){return{running:"processing",complete:"blue",applied:"green",failed:"red",cancelled:"default"}[l]||"default"}function qe(l){return{running:"#1677ff",complete:"#13c2c2",applied:"#52c41a",failed:"#ff4d4f",cancelled:"#888"}[l]||"#888"}function Je(l){return l===0?"gold":l===1?"silver":l===2?"bronze":""}function ue(l){return l>=.8?"#52c41a":l>=.5?"#1677ff":l>=.3?"#faad14":"#ff4d4f"}function ke(l,r){return r?Math.round(l/r*100):0}function Ke(l){const r=w.value?.reputationDistribution.buckets.reduce((p,C)=>p+C.count,0)||0;return r?Math.round(l.count/r*100):0}function We(l){if(typeof l=="string")return l;try{return JSON.stringify(l,null,2)}catch{return String(l)}}async function V(){O.value=!0,q.value={noDb:!1,error:""};try{const[l,r,p]=await Promise.all([i.execute(`reputation list --decay ${J.value} --json`,1e4).catch(()=>({output:""})),i.execute("reputation runs --limit 50 --json",1e4).catch(()=>({output:""})),i.execute("reputation stats-v2 --json",8e3).catch(()=>({output:""}))]),C=[l,r,p].map(N=>P(N.output)).find(N=>N.noDb);C&&(q.value=C),ne.value=Ee(l.output),_e.value=Ot(r.output),j.value=Dt(p.output)}catch(l){k.error(e("reputation.messages.loadFailed",{err:l?.message||l}))}finally{O.value=!1}}async function Ye(){try{const{output:l}=await i.execute(`reputation list --decay ${J.value} --json`,1e4),r=P(l);if(r.noDb){q.value=r;return}ne.value=Ee(l)}catch(l){k.error(e("reputation.messages.loadScoresFailed",{err:l?.message||l}))}}async function Ge(){if(!g.did.trim()){k.warning(e("reputation.messages.didRequired"));return}if(g.score<0||g.score>1){k.warning(e("reputation.messages.scoreRange"));return}ee.value=!0;try{const l=[`reputation observe "${g.did.trim().replace(/"/g,'\\"')}"`,String(g.score),`-k ${g.kind}`,`-w ${g.weight}`,"--json"],{output:r}=await i.execute(l.join(" "),1e4);if(P(r).noDb){k.error(e("reputation.messages.needInit"));return}if(!/"did"/.test(r)){k.error(e("reputation.messages.observeFailed",{err:r.slice(0,120)}));return}k.success(e("reputation.messages.observeOk")),K.value=!1,Se(),await V()}catch(l){k.error(e("reputation.messages.observeFailed",{err:l?.message||l}))}finally{ee.value=!1}}async function He(){te.value=!0;try{const l=["reputation optimize",`-o ${M.objective}`,`-i ${M.iterations}`,"--json"],{output:r}=await i.execute(l.join(" "),6e4);if(P(r).noDb){k.error(e("reputation.messages.needInit"));return}const C=wt(r);if(!C){k.error(e("reputation.messages.optimizeFailed",{err:r.slice(0,120)}));return}W.value=!1,k.success(e("reputation.messages.optimizeOk",{score:C.bestScore.toFixed(4)})),await V(),b.value=C,Y.value=!0,await he()}catch(l){k.error(e("reputation.messages.optimizeFailed",{err:l?.message||l}))}finally{te.value=!1}}async function Ze(l){gt.confirm({title:e("reputation.applyConfirm.title"),content:e("reputation.applyConfirm.content",{runId:l.runId.slice(0,12)}),okText:e("reputation.applyConfirm.ok"),cancelText:e("reputation.applyConfirm.cancel"),onOk:async()=>{try{const{output:r}=await i.execute(`reputation apply ${l.runId}`,8e3);if(P(r).noDb){k.error(e("reputation.messages.needInit"));return}if(/Failed|Error/i.test(r)&&!/Applied/i.test(r)){k.error(e("reputation.messages.applyFailed",{err:r.slice(0,120)}));return}k.success(e("reputation.messages.applyOk")),await V()}catch(r){k.error(e("reputation.messages.applyFailed",{err:r?.message||r}))}}})}async function Qe(l){b.value=l,w.value=null,Y.value=!0,await he()}async function he(){if(b.value){oe.value=!0;try{const{output:l}=await i.execute(`reputation analytics ${b.value.runId} --json`,8e3);if(P(l).noDb)return;w.value=At(l)}catch{}finally{oe.value=!1}}}function Xe(){A.value=null,re.value=!0}async function et(){ae.value=!0;try{const l=["reputation anomalies",`-m ${F.method}`,`-t ${F.threshold}`,`-d ${F.decay}`,"--json"],{output:r}=await i.execute(l.join(" "),1e4);if(P(r).noDb){k.error(e("reputation.messages.needInit"));return}A.value=jt(r)}catch(l){k.error(e("reputation.messages.detectFailed",{err:l?.message||l}))}finally{ae.value=!1}}function Se(){g.did="",g.score=.8,g.kind="generic",g.weight=1}return xt(V),(l,r)=>{const p=d("a-button"),C=d("a-space"),N=d("a-alert"),E=d("a-statistic"),I=d("a-card"),D=d("a-col"),ce=d("a-row"),ze=d("a-radio-button"),je=d("a-radio-group"),H=d("a-progress"),Oe=d("a-table"),pe=d("a-tab-pane"),U=d("a-tag"),tt=d("a-tabs"),at=d("a-input"),R=d("a-form-item"),Z=d("a-input-number"),de=d("a-select-option"),me=d("a-select"),fe=d("a-form"),Q=d("a-modal"),ot=d("a-divider"),nt=d("a-empty"),we=d("a-list-item"),Ae=d("a-list"),$=d("a-descriptions-item"),rt=d("a-descriptions"),lt=d("a-spin");return c(),m("div",null,[_("div",Rt,[_("div",null,[_("h2",Ft,u(n(e)("reputation.title")),1),_("p",It,u(n(e)("reputation.subtitle")),1)]),t(C,null,{default:o(()=>[t(p,{loading:O.value,onClick:V},{icon:o(()=>[t(n(dt))]),default:o(()=>[f(" "+u(n(e)("reputation.refresh")),1)]),_:1},8,["loading"]),t(p,{onClick:Xe},{icon:o(()=>[t(n(Ce))]),default:o(()=>[f(" "+u(n(e)("reputation.actions.anomalies")),1)]),_:1}),t(p,{type:"primary",onClick:r[0]||(r[0]=a=>W.value=!0)},{icon:o(()=>[t(n(mt))]),default:o(()=>[f(" "+u(n(e)("reputation.actions.optimize")),1)]),_:1})]),_:1})]),q.value.noDb?(c(),S(N,{key:0,type:"info","show-icon":"",message:n(e)("reputation.noDb.message"),description:n(e)("reputation.noDb.description"),style:{"margin-bottom":"16px"}},null,8,["message","description"])):y("",!0),t(ce,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:o(()=>[t(D,{xs:12,sm:8,lg:5},{default:o(()=>[t(I,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[t(E,{title:n(e)("reputation.stats.trackedDids"),value:j.value.observations.totalDids,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:o(()=>[t(n(De))]),_:1},8,["title","value"])]),_:1})]),_:1}),t(D,{xs:12,sm:8,lg:5},{default:o(()=>[t(I,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[t(E,{title:n(e)("reputation.stats.totalObservations"),value:j.value.observations.totalObservations,"value-style":{color:"#722ed1",fontSize:"20px"}},{prefix:o(()=>[t(n(ft))]),_:1},8,["title","value"])]),_:1})]),_:1}),t(D,{xs:12,sm:8,lg:5},{default:o(()=>[t(I,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[t(E,{title:n(e)("reputation.stats.optimizationRuns"),value:j.value.totalRuns,"value-style":{color:"#13c2c2",fontSize:"20px"}},{prefix:o(()=>[t(n(Re))]),_:1},8,["title","value"])]),_:1})]),_:1}),t(D,{xs:12,sm:8,lg:5},{default:o(()=>[t(I,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[t(E,{title:n(e)("reputation.stats.active"),value:j.value.activeRuns,"value-style":{color:j.value.activeRuns>0?"#1677ff":"#888",fontSize:"20px"},suffix:`/ ${j.value.maxConcurrentOptimizations}`},{prefix:o(()=>[t(n(yt))]),_:1},8,["title","value","value-style","suffix"])]),_:1})]),_:1}),t(D,{xs:24,sm:8,lg:4},{default:o(()=>[t(I,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[t(E,{title:n(e)("reputation.stats.bestEver"),value:j.value.bestScoreEver,precision:3,"value-style":{color:"#52c41a",fontSize:"20px"}},{prefix:o(()=>[t(n(vt))]),_:1},8,["title","value"])]),_:1})]),_:1})]),_:1}),t(tt,{activeKey:ge.value,"onUpdate:activeKey":r[3]||(r[3]=a=>ge.value=a),class:"reputation-tabs"},{default:o(()=>[t(pe,{key:"scores",tab:n(e)("reputation.tabs.scores")},{default:o(()=>[_("div",Tt,[_("span",Et,u(n(e)("reputation.filter.decayLabel")),1),t(je,{value:J.value,"onUpdate:value":r[1]||(r[1]=a=>J.value=a),size:"small","button-style":"solid",onChange:Ye},{default:o(()=>[(c(!0),m(T,null,L(n(Te),a=>(c(),S(ze,{key:a,value:a},{default:o(()=>[f(u(xe(a)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),t(p,{size:"small",onClick:r[2]||(r[2]=a=>K.value=!0)},{icon:o(()=>[t(n(bt))]),default:o(()=>[f(" "+u(n(e)("reputation.filter.addObservation")),1)]),_:1})]),t(Oe,{columns:Ne.value,"data-source":ne.value,pagination:{pageSize:20,showTotal:a=>n(e)("reputation.totals.dids",{count:a})},size:"small",loading:O.value,style:{background:"var(--bg-card)"}},{bodyCell:o(({column:a,record:x,index:X})=>[a.key==="rank"?(c(),m("span",{key:0,class:kt(["rank-pill",Je(X)])},u(X+1),3)):y("",!0),a.key==="did"?(c(),m("span",$t,u(x.did),1)):y("",!0),a.key==="score"?(c(),S(H,{key:2,percent:Math.round(x.score*100),"stroke-color":ue(x.score),size:"small",format:()=>x.score.toFixed(4)},null,8,["percent","stroke-color","format"])):y("",!0),a.key==="observations"?(c(),m("span",Lt,u(x.observations),1)):y("",!0),a.key==="weightTotal"?(c(),m("span",Mt,u(x.weightTotal.toFixed(2)),1)):y("",!0)]),emptyText:o(()=>[_("div",Nt,[t(n(De),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),f(" "+u(n(e)("reputation.empty.scores")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),t(pe,{key:"runs",tab:n(e)("reputation.tabs.runs")},{default:o(()=>[t(Oe,{columns:Ue.value,"data-source":_e.value,pagination:{pageSize:20,showTotal:a=>n(e)("reputation.totals.rows",{count:a})},size:"small",loading:O.value,style:{background:"var(--bg-card)"}},{bodyCell:o(({column:a,record:x})=>[a.key==="runId"?(c(),m("span",Ut,u(x.runId.slice(0,12)),1)):y("",!0),a.key==="objective"?(c(),S(U,{key:1,color:le(x.objective),style:{"font-family":"monospace"}},{default:o(()=>[f(u(G(x.objective)),1)]),_:2},1032,["color"])):y("",!0),a.key==="iterations"?(c(),m("span",Pt,u(x.iterations),1)):y("",!0),a.key==="bestScore"?(c(),m("span",{key:3,style:Fe({color:ue(x.bestScore),fontWeight:500,fontFamily:"monospace"})},u(x.bestScore.toFixed(4)),5)):y("",!0),a.key==="status"?(c(),S(U,{key:4,color:ie(x.status)},{default:o(()=>[f(u(se(x.status)),1)]),_:2},1032,["color"])):y("",!0),a.key==="createdAt"?(c(),m("span",Bt,u(n(ve)(x.createdAt)),1)):y("",!0),a.key==="action"?(c(),m(T,{key:6},[t(p,{size:"small",type:"link",onClick:X=>Qe(x)},{default:o(()=>[f(u(n(e)("reputation.rowActions.analyze")),1)]),_:1},8,["onClick"]),x.status==="complete"?(c(),S(p,{key:0,size:"small",type:"link",style:{color:"#52c41a"},onClick:X=>Ze(x)},{default:o(()=>[f(u(n(e)("reputation.rowActions.apply")),1)]),_:1},8,["onClick"])):y("",!0)],64)):y("",!0)]),emptyText:o(()=>[_("div",Vt,[t(n(Re),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),f(" "+u(n(e)("reputation.empty.runs")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),t(pe,{key:"breakdown",tab:n(e)("reputation.tabs.breakdown")},{default:o(()=>[t(ce,{gutter:[16,16]},{default:o(()=>[t(D,{xs:24,lg:12},{default:o(()=>[t(I,{title:n(e)("reputation.breakdown.byStatus"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[(c(!0),m(T,null,L(n($e),a=>(c(),m("div",{key:a,class:"bd-row"},[t(U,{color:ie(a),style:{"min-width":"80px","text-align":"center"}},{default:o(()=>[f(u(se(a)),1)]),_:2},1032,["color"]),t(H,{percent:ke(j.value.byStatus[a]||0,j.value.totalRuns),"stroke-color":qe(a),format:()=>`${j.value.byStatus[a]||0}`,size:"small",style:{flex:"1","margin-left":"12px"}},null,8,["percent","stroke-color","format"])]))),128))]),_:1},8,["title"])]),_:1}),t(D,{xs:24,lg:12},{default:o(()=>[t(I,{title:n(e)("reputation.breakdown.byObjective"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[(c(!0),m(T,null,L(n(be),a=>(c(),m("div",{key:a,class:"bd-row"},[t(U,{color:le(a),style:{"min-width":"100px","text-align":"center","font-family":"monospace"}},{default:o(()=>[f(u(G(a)),1)]),_:2},1032,["color"]),t(H,{percent:ke(j.value.byObjective[a]||0,j.value.totalRuns),"stroke-color":Be(a),format:()=>`${j.value.byObjective[a]||0}`,size:"small",style:{flex:"1","margin-left":"12px"}},null,8,["percent","stroke-color","format"])]))),128))]),_:1},8,["title"])]),_:1})]),_:1})]),_:1},8,["tab"])]),_:1},8,["activeKey"]),t(Q,{open:K.value,"onUpdate:open":r[8]||(r[8]=a=>K.value=a),title:n(e)("reputation.observe.title"),"confirm-loading":ee.value,width:540,"ok-text":n(e)("reputation.observe.ok"),"cancel-text":n(e)("common.cancel"),onOk:Ge,onCancel:Se},{default:o(()=>[t(fe,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:o(()=>[t(R,{label:n(e)("reputation.observe.didLabel"),required:""},{default:o(()=>[t(at,{value:g.did,"onUpdate:value":r[4]||(r[4]=a=>g.did=a),placeholder:n(e)("reputation.observe.didPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),t(R,{label:n(e)("reputation.observe.scoreLabel"),required:""},{default:o(()=>[t(Z,{value:g.score,"onUpdate:value":r[5]||(r[5]=a=>g.score=a),min:0,max:1,step:.05,style:{width:"160px"}},null,8,["value"]),_("span",qt,u(n(e)("reputation.observe.scoreRange")),1)]),_:1},8,["label"]),t(R,{label:n(e)("reputation.observe.kindLabel")},{default:o(()=>[t(me,{value:g.kind,"onUpdate:value":r[6]||(r[6]=a=>g.kind=a)},{default:o(()=>[(c(!0),m(T,null,L(n(St),a=>(c(),S(de,{key:a,value:a},{default:o(()=>[f(u(Pe(a)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"]),t(R,{label:n(e)("reputation.observe.weightLabel")},{default:o(()=>[t(Z,{value:g.weight,"onUpdate:value":r[7]||(r[7]=a=>g.weight=a),min:.1,step:.1,style:{width:"120px"}},null,8,["value"])]),_:1},8,["label"])]),_:1})]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),t(Q,{open:W.value,"onUpdate:open":r[11]||(r[11]=a=>W.value=a),title:n(e)("reputation.optimize.title"),"confirm-loading":te.value,width:540,"ok-text":n(e)("reputation.optimize.ok"),"cancel-text":n(e)("common.cancel"),onOk:He},{default:o(()=>[t(fe,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:o(()=>[t(R,{label:n(e)("reputation.optimize.objectiveLabel"),required:""},{default:o(()=>[t(me,{value:M.objective,"onUpdate:value":r[9]||(r[9]=a=>M.objective=a)},{default:o(()=>[(c(!0),m(T,null,L(n(be),a=>(c(),S(de,{key:a,value:a},{default:o(()=>[f(u(G(a)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),_("div",Jt,u(Ve(M.objective)),1)]),_:1},8,["label"]),t(R,{label:n(e)("reputation.optimize.iterationsLabel")},{default:o(()=>[t(Z,{value:M.iterations,"onUpdate:value":r[10]||(r[10]=a=>M.iterations=a),min:1,max:1e3,step:10,style:{width:"160px"}},null,8,["value"]),_("span",Kt,u(n(e)("reputation.optimize.iterationsRange")),1)]),_:1},8,["label"])]),_:1}),t(N,{type:"info","show-icon":"",message:n(e)("reputation.optimize.syncMessage"),description:n(e)("reputation.optimize.syncDescription"),style:{"margin-top":"12px"}},null,8,["message","description"])]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),t(Q,{open:re.value,"onUpdate:open":r[15]||(r[15]=a=>re.value=a),title:n(e)("reputation.anomaly.title"),width:640,footer:null},{default:o(()=>[_("div",Wt,[t(fe,{"label-col":{span:5},"wrapper-col":{span:19}},{default:o(()=>[t(R,{label:n(e)("reputation.anomaly.methodLabel")},{default:o(()=>[t(je,{value:F.method,"onUpdate:value":r[12]||(r[12]=a=>F.method=a),"button-style":"solid"},{default:o(()=>[(c(!0),m(T,null,L(n(ht),a=>(c(),S(ze,{key:a,value:a},{default:o(()=>[f(u(a==="z_score"?n(e)("reputation.anomaly.zScoreLabel"):n(e)("reputation.anomaly.iqrLabel")),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"]),t(R,{label:n(e)("reputation.anomaly.thresholdLabel")},{default:o(()=>[t(Z,{value:F.threshold,"onUpdate:value":r[13]||(r[13]=a=>F.threshold=a),min:.5,step:.1,style:{width:"120px"}},null,8,["value"]),_("span",Yt,u(n(e)("reputation.anomaly.thresholdHint")),1)]),_:1},8,["label"]),t(R,{label:n(e)("reputation.anomaly.decayLabel")},{default:o(()=>[t(me,{value:F.decay,"onUpdate:value":r[14]||(r[14]=a=>F.decay=a),style:{width:"200px"}},{default:o(()=>[(c(!0),m(T,null,L(n(Te),a=>(c(),S(de,{key:a,value:a},{default:o(()=>[f(u(xe(a)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"]),t(R,{"wrapper-col":{offset:5,span:19}},{default:o(()=>[t(p,{type:"primary",loading:ae.value,onClick:et},{icon:o(()=>[t(n(Ce))]),default:o(()=>[f(" "+u(n(e)("reputation.anomaly.start")),1)]),_:1},8,["loading"])]),_:1})]),_:1}),t(ot),A.value?(c(),m("div",Gt,[t(ce,{gutter:12,style:{"margin-bottom":"12px"}},{default:o(()=>[t(D,{span:8},{default:o(()=>[t(E,{title:n(e)("reputation.anomaly.totalSamples"),value:A.value.totalSamples,"value-style":{fontSize:"16px"}},null,8,["title","value"])]),_:1}),t(D,{span:8},{default:o(()=>[t(E,{title:n(e)("reputation.anomaly.threshold"),value:A.value.threshold,precision:2,"value-style":{fontSize:"16px"}},null,8,["title","value"])]),_:1}),t(D,{span:8},{default:o(()=>[t(E,{title:n(e)("reputation.anomaly.anomalies"),value:A.value.anomalies.length,"value-style":{color:A.value.anomalies.length>0?"#ff4d4f":"#52c41a",fontSize:"16px"}},null,8,["title","value","value-style"])]),_:1})]),_:1}),A.value.message?(c(),S(N,{key:0,message:A.value.message,type:"warning","show-icon":"",style:{"margin-bottom":"12px"}},null,8,["message"])):y("",!0),A.value.anomalies.length?(c(),S(Ae,{key:1,size:"small","data-source":A.value.anomalies},{renderItem:o(({item:a})=>[t(we,null,{default:o(()=>[_("span",Ht,u(a.did),1),t(U,{color:"red",style:{"margin-left":"8px"}},{default:o(()=>[f(u(n(e)("reputation.anomaly.scoreTag",{score:a.score.toFixed(4)})),1)]),_:2},1024),_("span",Zt,u(a.reason),1),a.zScore!==null?(c(),m("span",Qt,u(n(e)("reputation.anomaly.zNote",{value:a.zScore.toFixed(2)})),1)):y("",!0)]),_:2},1024)]),_:1},8,["data-source"])):y("",!0)])):(c(),S(nt,{key:0,description:n(e)("reputation.anomaly.notDetected"),image:n(v)},null,8,["description","image"]))])]),_:1},8,["open","title"]),t(Q,{open:Y.value,"onUpdate:open":r[16]||(r[16]=a=>Y.value=a),title:n(e)("reputation.analytics.title",{runId:b.value?.runId?.slice(0,12)||""}),width:780,footer:null},{default:o(()=>[b.value?(c(),m("div",Xt,[t(rt,{column:2,size:"small",bordered:""},{default:o(()=>[t($,{label:n(e)("reputation.analytics.objective")},{default:o(()=>[t(U,{color:le(b.value.objective)},{default:o(()=>[f(u(G(b.value.objective)),1)]),_:1},8,["color"])]),_:1},8,["label"]),t($,{label:n(e)("reputation.analytics.status")},{default:o(()=>[t(U,{color:ie(b.value.status)},{default:o(()=>[f(u(se(b.value.status)),1)]),_:1},8,["color"])]),_:1},8,["label"]),t($,{label:n(e)("reputation.analytics.iterations")},{default:o(()=>[f(u(b.value.iterations),1)]),_:1},8,["label"]),t($,{label:n(e)("reputation.analytics.bestScore")},{default:o(()=>[_("span",{style:Fe({color:ue(b.value.bestScore),fontWeight:500,fontFamily:"monospace"})},u(b.value.bestScore.toFixed(4)),5)]),_:1},8,["label"]),t($,{label:n(e)("reputation.analytics.createdAt")},{default:o(()=>[f(u(n(ve)(b.value.createdAt)),1)]),_:1},8,["label"]),b.value.completedAt?(c(),S($,{key:0,label:n(e)("reputation.analytics.completedAt")},{default:o(()=>[f(u(n(ve)(b.value.completedAt)),1)]),_:1},8,["label"])):y("",!0),b.value.bestParams?(c(),S($,{key:1,label:n(e)("reputation.analytics.bestParams"),span:2},{default:o(()=>[_("pre",ea,u(We(b.value.bestParams)),1)]),_:1},8,["label"])):y("",!0),b.value.errorMessage?(c(),S($,{key:2,label:n(e)("reputation.analytics.errorMessage"),span:2},{default:o(()=>[_("span",ta,u(b.value.errorMessage),1)]),_:1},8,["label"])):y("",!0)]),_:1}),t(lt,{spinning:oe.value},{default:o(()=>[w.value?(c(),m("div",aa,[_("h4",oa,u(n(e)("reputation.analytics.distributionTitle")),1),t(I,{size:"small",style:{"margin-bottom":"12px"}},{default:o(()=>[(c(!0),m(T,null,L(w.value.reputationDistribution.buckets,a=>(c(),m("div",{key:a.label,class:"bucket-row"},[_("span",na,u(a.label),1),t(H,{percent:Ke(a),"stroke-color":a.count>0?"#1677ff":"#d9d9d9",format:()=>`${a.count}`,size:"small",style:{flex:"1","margin-left":"12px"}},null,8,["percent","stroke-color","format"])]))),128)),w.value.reputationDistribution.mean!==null?(c(),m("div",ra,[f(u(n(e)("reputation.analytics.mean",{value:w.value.reputationDistribution.mean.toFixed(4)}))+" ",1),w.value.reputationDistribution.stdDev!==null?(c(),m("span",la,u(n(e)("reputation.analytics.stdDev",{value:w.value.reputationDistribution.stdDev.toFixed(4)})),1)):y("",!0)])):y("",!0)]),_:1}),w.value.recommendations.length?(c(),S(I,{key:0,title:n(e)("reputation.analytics.recommendations"),size:"small"},{default:o(()=>[t(Ae,{size:"small","data-source":w.value.recommendations},{renderItem:o(({item:a})=>[t(we,null,{default:o(()=>[t(n(_t),{style:{color:"#faad14","margin-right":"8px"}}),f(" "+u(a),1)]),_:2},1024)]),_:1},8,["data-source"])]),_:1},8,["title"])):y("",!0)])):y("",!0)]),_:1},8,["spinning"])])):y("",!0)]),_:1},8,["open","title"])])}}},Fa=it(sa,[["__scopeId","data-v-9561b6cc"]]);export{Fa as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{q as z,f as S,h,a7 as f,i as N}from"./index-3RqDry-K.js";import{u as _,r as u}from"./responsiveObserve-CHw_f2d3.js";import{u as E}from"./useFlexGapSupport-_tbIIFMu.js";import{u as F,a as I}from"./index-CjHA_Q7s.js";import{d as M,o as T,e as V,c as q,r as $,f as o}from"./vendor-BXcBOG8b.js";const D=()=>({align:f([String,Object]),justify:f([String,Object]),prefixCls:String,gutter:f([Number,Array,Object],0),wrap:{type:Boolean,default:void 0}}),P=M({compatConfig:{MODE:3},name:"ARow",inheritAttrs:!1,props:D(),setup(s,G){let{slots:d,attrs:l}=G;const{prefixCls:n,direction:R}=z("row",s),[O,C]=F(n);let m;const v=_(),p=$({xs:!0,sm:!0,md:!0,lg:!0,xl:!0,xxl:!0}),y=$({xs:!1,sm:!1,md:!1,lg:!1,xl:!1,xxl:!1}),g=e=>o(()=>{if(typeof s[e]=="string")return s[e];if(typeof s[e]!="object")return"";for(let t=0;t<u.length;t++){const a=u[t];if(!y.value[a])continue;const r=s[e][a];if(r!==void 0)return r}return""}),b=g("align"),x=g("justify"),w=E();T(()=>{m=v.value.subscribe(e=>{y.value=e;const t=s.gutter||0;(!Array.isArray(t)&&typeof t=="object"||Array.isArray(t)&&(typeof t[0]=="object"||typeof t[1]=="object"))&&(p.value=e)})}),V(()=>{v.value.unsubscribe(m)});const A=o(()=>{const e=[void 0,void 0],{gutter:t=0}=s;return(Array.isArray(t)?t:[t,void 0]).forEach((r,j)=>{if(typeof r=="object")for(let i=0;i<u.length;i++){const c=u[i];if(p.value[c]&&r[c]!==void 0){e[j]=r[c];break}}else e[j]=r}),e});I({gutter:A,supportFlexGap:w,wrap:o(()=>s.wrap)});const k=o(()=>N(n.value,{[`${n.value}-no-wrap`]:s.wrap===!1,[`${n.value}-${x.value}`]:x.value,[`${n.value}-${b.value}`]:b.value,[`${n.value}-rtl`]:R.value==="rtl"},l.class,C.value)),B=o(()=>{const e=A.value,t={},a=e[0]!=null&&e[0]>0?`${e[0]/-2}px`:void 0,r=e[1]!=null&&e[1]>0?`${e[1]/-2}px`:void 0;return a&&(t.marginLeft=a,t.marginRight=a),w.value?t.rowGap=`${e[1]}px`:r&&(t.marginTop=r,t.marginBottom=r),t});return()=>{var e;return O(q("div",S(S({},l),{},{class:k.value,style:h(h({},B.value),l.style)}),[(e=d.default)===null||e===void 0?void 0:e.call(d)]))}}});export{P as A};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
[data-v-c99465d4] .rss-row:hover td{background:var(--bg-card-hover)!important;cursor:pointer}[data-v-c99465d4] .ant-card-head{border-color:var(--border-color)!important;color:var(--text-primary)!important}[data-v-c99465d4] .ant-select-selector{background:var(--bg-card)!important;border-color:var(--border-color)!important;color:var(--text-primary)!important}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import{o as ce,M as p,R as m,c as l,N as s,Q as x,u as _,O as y,K as u,r as g,L as r,F,Y as D,P as v,S as k,a1 as pe,f as me}from"./vendor-BXcBOG8b.js";import{_ as ye,u as fe,d as c,t as ve}from"./index-3RqDry-K.js";import{ad as M,at as _e,R as W,aC as H,aR as ge}from"./icons-DlxlFL4g.js";const xe={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},ke={key:0,style:{"text-align":"center",padding:"60px"}},he={style:{display:"flex","align-items":"center",gap:"6px",overflow:"hidden"}},we={style:{color:"#e0e0e0","font-size":"13px",overflow:"hidden","text-overflow":"ellipsis","white-space":"nowrap"}},be={style:{color:"var(--text-muted)","font-size":"11px","margin-bottom":"6px",overflow:"hidden","text-overflow":"ellipsis","white-space":"nowrap"}},Ce={style:{display:"flex","justify-content":"space-between",color:"var(--text-secondary)","font-size":"12px"}},Ae={key:2,style:{"text-align":"center",padding:"40px",color:"var(--text-muted)","margin-bottom":"24px"}},Fe={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"12px"}},ze={key:3,style:{"text-align":"center",padding:"60px"}},Re=["href"],Se={key:1,style:{color:"#e0e0e0","font-weight":"500"}},Ue={key:2,style:{color:"var(--text-secondary)","font-size":"12px"}},$e={key:1,style:{color:"var(--text-muted)","font-size":"12px"}},Ne={style:{padding:"8px 16px",color:"var(--text-secondary)","font-size":"13px","line-height":"1.8","max-height":"300px","overflow-y":"auto"}},Le={key:0,style:{"margin-bottom":"8px"}},Te=["innerHTML"],Oe={key:2,style:{color:"var(--text-muted)"}},je={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},De={__name:"RssFeed",setup(Me){const h=fe(),N=g(!1),z=g(!1),L=g(!1),T=g(!1),w=g([]),C=g([]),R=g(""),S=g(!1),U=g(""),O=g([]),J=me(()=>{const t=w.value.length,e=C.value.length,n=C.value.filter(d=>!d.read).length,o=w.value.filter(d=>d.lastUpdated).sort((d,$)=>new Date($.lastUpdated)-new Date(d.lastUpdated))[0],i=o?j(o.lastUpdated):"-";return[{label:"订阅源数",value:t,color:"#1677ff"},{label:"文章总数",value:e,color:"#52c41a"},{label:"未读文章",value:n,color:"#faad14"},{label:"最近刷新",value:i,color:"#13c2c2"}]}),q=[{title:"标题",key:"title",dataIndex:"title",ellipsis:!0},{title:"来源",key:"source",dataIndex:"source",width:"140px"},{title:"发布时间",key:"publishedAt",dataIndex:"publishedAt",width:"160px"},{title:"状态",key:"status",width:"80px"},{title:"操作",key:"actions",width:"100px"}];function j(t){if(!t)return"-";try{const e=new Date(t);return isNaN(e.getTime())?t:e.toLocaleString("zh-CN",{month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"})}catch{return t}}function I(t){return ve(t)}async function A(){N.value=!0;try{const{output:t}=await h.execute("rss list --json",2e4),e=I(t);Array.isArray(e)?w.value=e.map((n,o)=>({key:n.id||n.url||o,id:n.id||String(o),title:n.title||n.name||"",url:n.url||n.feedUrl||"",itemCount:n.itemCount??n.articleCount??n.count??0,lastUpdated:n.lastUpdated||n.updatedAt||n.lastRefresh||""})):w.value=Q(t)}catch(t){c.error("加载订阅源失败: "+t.message)}finally{N.value=!1}}function Q(t){const e=[],n=t.split(`
|
|
2
|
+
`);for(const o of n){const i=o.trim();if(!i||i.startsWith("─")||i.match(/^\d+ feed/i)||i.startsWith("RSS")||i.startsWith("No "))continue;const d=i.match(/^(\d+)\.\s+(.+?)(?:\s+[-–]\s+(.+))?$/);d?e.push({key:d[1],id:d[1],title:d[2].trim(),url:(d[3]||"").trim(),itemCount:0,lastUpdated:""}):i.length>5&&e.push({key:String(e.length),id:String(e.length),title:i.slice(0,80),url:"",itemCount:0,lastUpdated:""})}return e}async function b(){z.value=!0,O.value=[];try{let t="rss articles --limit 30 --json";R.value&&(t=`rss articles --feed ${R.value} --limit 30 --json`);const{output:e}=await h.execute(t,2e4),n=I(e);Array.isArray(n)?C.value=n.map((o,i)=>({key:o.id||String(i),id:o.id||String(i),title:o.title||"无标题",link:o.link||o.url||"",source:o.source||o.feedTitle||o.feedName||"",publishedAt:o.publishedAt||o.pubDate||o.date||"",read:!!o.read,summary:o.summary||o.description||"",content:o.content||""})):C.value=Y(e)}catch(t){c.error("加载文章失败: "+t.message)}finally{z.value=!1}}function Y(t){const e=[],n=t.split(`
|
|
3
|
+
`);for(const o of n){const i=o.trim();if(!i||i.startsWith("─")||i.match(/^\d+ article/i)||i.startsWith("No "))continue;const d=i.match(/^(\d+)\.\s+(.+?)(?:\s+[-–]\s+(.+))?$/);d&&e.push({key:d[1],id:d[1],title:d[2].trim(),link:"",source:(d[3]||"").trim(),publishedAt:"",read:!1,summary:"",content:""})}return e}async function G(){const t=U.value.trim();if(!t){c.warning("请输入订阅源地址");return}T.value=!0;try{const{output:e}=await h.execute(`rss add "${t}"`,3e4);e.includes("error")||e.includes("失败")||e.includes("Error")?c.error("添加失败: "+e.slice(0,120)):(c.success("订阅源已添加"),S.value=!1,U.value="",await A(),await b())}catch(e){c.error("添加失败: "+e.message)}finally{T.value=!1}}async function X(t){try{c.loading({content:`正在刷新 ${t.title||t.id}...`,key:"refreshFeed"}),await h.execute(`rss refresh ${t.id}`,3e4),c.success({content:"刷新完成",key:"refreshFeed"}),await A(),await b()}catch(e){c.error({content:"刷新失败: "+e.message,key:"refreshFeed"})}}async function Z(t){try{c.loading({content:`正在删除 ${t.title||t.id}...`,key:"removeFeed"});const{output:e}=await h.execute(`rss remove ${t.id}`,2e4);e.includes("error")||e.includes("失败")?c.error({content:"删除失败: "+e.slice(0,120),key:"removeFeed"}):(c.success({content:"已删除订阅源",key:"removeFeed"}),await A(),await b())}catch(e){c.error({content:"删除失败: "+e.message,key:"removeFeed"})}}async function ee(){L.value=!0;try{c.loading({content:"正在刷新所有订阅源...",key:"refreshAll"}),await h.execute("rss refresh-all",6e4),c.success({content:"全部刷新完成",key:"refreshAll"}),await A(),await b()}catch(t){c.error({content:"刷新失败: "+t.message,key:"refreshAll"})}finally{L.value=!1}}async function te(t){try{await h.execute(`rss mark-read ${t.id}`,1e4),t.read=!0,c.success("已标记已读")}catch(e){c.error("操作失败: "+e.message)}}function ae(t,e){O.value=t?[e.key]:[]}return ce(async()=>{await A(),await b()}),(t,e)=>{const n=u("a-button"),o=u("a-space"),i=u("a-statistic"),d=u("a-card"),$=u("a-col"),B=u("a-row"),E=u("a-spin"),P=u("a-menu-item"),se=u("a-menu"),le=u("a-dropdown"),V=u("a-select-option"),ne=u("a-select"),K=u("a-tag"),oe=u("a-table"),re=u("a-input"),ie=u("a-form-item"),de=u("a-form"),ue=u("a-modal");return r(),p("div",null,[m("div",xe,[e[6]||(e[6]=m("div",null,[m("h2",{class:"page-title"},"RSS 订阅"),m("p",{class:"page-sub"},"订阅源 / 文章阅读")],-1)),l(o,null,{default:s(()=>[l(n,{type:"primary",onClick:e[0]||(e[0]=a=>S.value=!0)},{icon:s(()=>[l(_(_e))]),default:s(()=>[e[4]||(e[4]=y(" 添加订阅 ",-1))]),_:1}),l(n,{ghost:"",loading:L.value,onClick:ee},{icon:s(()=>[l(_(W))]),default:s(()=>[e[5]||(e[5]=y(" 全部刷新 ",-1))]),_:1},8,["loading"])]),_:1})]),l(B,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:s(()=>[(r(!0),p(F,null,D(J.value,a=>(r(),x($,{xs:12,sm:6,key:a.label},{default:s(()=>[l(d,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"},size:"small"},{default:s(()=>[l(i,{title:a.label,value:a.value,"value-style":{color:a.color,fontSize:"20px"}},null,8,["title","value","value-style"])]),_:2},1024)]),_:2},1024))),128))]),_:1}),e[16]||(e[16]=m("h3",{style:{color:"var(--text-primary)","margin-bottom":"12px"}},"订阅源管理",-1)),N.value?(r(),p("div",ke,[l(E,{size:"large"})])):w.value.length>0?(r(),x(B,{key:1,gutter:[16,16],style:{"margin-bottom":"24px"}},{default:s(()=>[(r(!0),p(F,null,D(w.value,a=>(r(),x($,{xs:24,sm:12,md:8,lg:6,key:a.id||a.url},{default:s(()=>[l(d,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"},size:"small",hoverable:!0},{title:s(()=>[m("div",he,[l(_(M),{style:{color:"#1677ff","flex-shrink":"0"}}),m("span",we,v(a.title||"未命名订阅"),1)])]),extra:s(()=>[l(le,null,{overlay:s(()=>[l(se,null,{default:s(()=>[l(P,{onClick:f=>X(a)},{default:s(()=>[l(_(W)),e[8]||(e[8]=y(" 刷新 ",-1))]),_:1},8,["onClick"]),l(P,{onClick:f=>Z(a),danger:""},{default:s(()=>[l(_(ge)),e[9]||(e[9]=y(" 删除 ",-1))]),_:1},8,["onClick"])]),_:2},1024)]),default:s(()=>[l(n,{size:"small",type:"text",style:{color:"var(--text-muted)"}},{default:s(()=>[...e[7]||(e[7]=[y("...",-1)])]),_:1})]),_:2},1024)]),default:s(()=>[m("p",be,[l(_(H)),y(" "+v(a.url||"-"),1)]),m("div",Ce,[m("span",null,v(a.itemCount??"-")+" 篇文章",1),m("span",null,v(j(a.lastUpdated)),1)])]),_:2},1024)]),_:2},1024))),128))]),_:1})):(r(),p("div",Ae,[l(_(M),{style:{"font-size":"40px","margin-bottom":"12px",display:"block"}}),e[10]||(e[10]=y(' 暂无订阅源,点击"添加订阅"开始 ',-1))])),m("div",Fe,[e[12]||(e[12]=m("h3",{style:{color:"var(--text-primary)",margin:"0"}},"文章列表",-1)),l(o,null,{default:s(()=>[l(ne,{value:R.value,"onUpdate:value":e[1]||(e[1]=a=>R.value=a),style:{"min-width":"180px"},placeholder:"筛选订阅源","allow-clear":"",onChange:b},{default:s(()=>[l(V,{value:""},{default:s(()=>[...e[11]||(e[11]=[y("全部订阅",-1)])]),_:1}),(r(!0),p(F,null,D(w.value,a=>(r(),x(V,{key:a.id,value:a.id},{default:s(()=>[y(v(a.title||a.url),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),l(n,{loading:z.value,onClick:b},{icon:s(()=>[l(_(W))]),_:1},8,["loading"])]),_:1})]),z.value?(r(),p("div",ze,[l(E,{size:"large"})])):(r(),x(oe,{key:4,columns:q,"data-source":C.value,pagination:{pageSize:20,showTotal:a=>`共 ${a} 条`},size:"small",style:{background:"var(--bg-card)"},"row-class-name":()=>"rss-row",expandable:{expandedRowKeys:O.value,onExpand:ae}},{bodyCell:s(({column:a,record:f})=>[a.key==="title"?(r(),p(F,{key:0},[f.link?(r(),p("a",{key:0,href:f.link,target:"_blank",rel:"noopener noreferrer",style:{color:"#1677ff","font-weight":"500"}},[l(_(H),{style:{"margin-right":"4px"}}),y(v(f.title),1)],8,Re)):(r(),p("span",Se,v(f.title),1))],64)):k("",!0),a.key==="source"?(r(),x(K,{key:1,color:"blue",style:{"font-size":"10px"}},{default:s(()=>[y(v(f.source||"-"),1)]),_:2},1024)):k("",!0),a.key==="publishedAt"?(r(),p("span",Ue,v(j(f.publishedAt)),1)):k("",!0),a.key==="status"?(r(),x(K,{key:3,color:f.read?"default":"green"},{default:s(()=>[y(v(f.read?"已读":"未读"),1)]),_:2},1032,["color"])):k("",!0),a.key==="actions"?(r(),p(F,{key:4},[f.read?(r(),p("span",$e,"--")):(r(),x(n,{key:0,size:"small",type:"link",onClick:pe(We=>te(f),["stop"])},{default:s(()=>[...e[13]||(e[13]=[y(" 标记已读 ",-1)])]),_:1},8,["onClick"]))],64)):k("",!0)]),expandedRowRender:s(({record:a})=>[m("div",Ne,[a.summary?(r(),p("div",Le,[e[14]||(e[14]=m("strong",{style:{color:"var(--text-primary)"}},"摘要: ",-1)),y(v(a.summary),1)])):k("",!0),a.content?(r(),p("div",{key:1,innerHTML:a.content,style:{color:"var(--text-secondary)"}},null,8,Te)):k("",!0),!a.summary&&!a.content?(r(),p("div",Oe,"暂无内容预览")):k("",!0)])]),emptyText:s(()=>[m("div",je,[l(_(M),{style:{"font-size":"40px","margin-bottom":"12px",display:"block"}}),e[15]||(e[15]=y(" 暂无文章 ",-1))])]),_:1},8,["data-source","pagination","expandable"])),l(ue,{open:S.value,"onUpdate:open":e[3]||(e[3]=a=>S.value=a),title:"添加订阅源","confirm-loading":T.value,onOk:G,"ok-text":"添加","cancel-text":"取消"},{default:s(()=>[l(de,{"label-col":{span:4},"wrapper-col":{span:20},style:{"margin-top":"16px"}},{default:s(()=>[l(ie,{label:"URL",required:""},{default:s(()=>[l(re,{value:U.value,"onUpdate:value":e[2]||(e[2]=a=>U.value=a),placeholder:"输入 RSS 订阅源地址,如 https://example.com/feed.xml"},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"])])}}},Pe=ye(De,[["__scopeId","data-v-c99465d4"]]);export{Pe as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.page-title[data-v-25cf2b6f]{margin:0;color:var(--text-primary);font-size:22px;font-weight:600}.page-sub[data-v-25cf2b6f]{margin:4px 0 0;color:var(--text-secondary);font-size:13px}.search-tabs[data-v-25cf2b6f] .ant-tabs-nav{margin-bottom:16px}.filter-bar[data-v-25cf2b6f]{display:flex;align-items:center;gap:12px;margin-bottom:12px;flex-wrap:wrap}.recent-row[data-v-25cf2b6f]{display:flex;align-items:center;gap:6px;margin-top:12px;flex-wrap:wrap}.recent-label[data-v-25cf2b6f]{color:var(--text-secondary);font-size:12px}.recent-chip[data-v-25cf2b6f]{cursor:pointer;-webkit-user-select:none;user-select:none;font-size:12px}.recent-chip[data-v-25cf2b6f]:hover{opacity:.85}.tag-row[data-v-25cf2b6f]{margin:4px 0 12px;display:flex;align-items:center;gap:6px;flex-wrap:wrap}.tag-row-label[data-v-25cf2b6f]{color:var(--text-secondary);font-size:12px}.tag-chip[data-v-25cf2b6f]{cursor:pointer;-webkit-user-select:none;user-select:none;font-size:11px}.tag-count[data-v-25cf2b6f]{color:var(--text-muted);margin-left:4px}.result-row[data-v-25cf2b6f]{border-bottom:1px solid var(--border-color)}.result-title[data-v-25cf2b6f]{color:var(--text-primary);font-size:14px;font-weight:500}.result-snippet[data-v-25cf2b6f]{color:var(--text-secondary);font-size:12px;line-height:1.6;margin-top:6px;word-break:break-word}.result-snippet[data-v-25cf2b6f] mark{background:#faad1440;color:inherit;border-radius:2px;padding:0 2px}.score-block[data-v-25cf2b6f]{display:flex;align-items:center;justify-content:center}.note-content[data-v-25cf2b6f]{padding:12px;background:var(--bg-base);border:1px solid var(--border-color);border-radius:4px;font-size:13px;line-height:1.7;color:var(--text-primary);white-space:pre-wrap;max-height:480px;overflow:auto}.note-content[data-v-25cf2b6f] mark{background:#faad1440;color:inherit;border-radius:2px;padding:0 2px}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as b,o as Re,M as f,R as _,P as c,u as r,c as a,N as t,Q as S,S as C,K as d,L as i,O as g,a1 as Fe,F as z,Y as $,a as je,f as U}from"./vendor-BXcBOG8b.js";import{X as qe,t as re,_ as Ke,b as Pe,u as Be,E as Ue,d as I}from"./index-3RqDry-K.js";import{R as He,u as Qe,i as Je,t as fe,m as Ve,a$ as Ge,l as Xe,aa as Ye,au as We}from"./icons-DlxlFL4g.js";const Ze=Object.freeze(["bm25","vector","hybrid"]);function et(s,e=0){return typeof s=="number"&&Number.isFinite(s)?s:e}function tt(s){if(Array.isArray(s))return s.filter(e=>typeof e=="string");if(typeof s!="string")return[];try{const e=JSON.parse(s);if(Array.isArray(e))return e.filter(p=>typeof p=="string")}catch{}return[]}function ae(s){if(!s)return{noDb:!1,error:""};const e=qe(s),p=/Database not available/i.test(e);return{noDb:p,error:p?"Database not available":""}}function at(s,e=0){if(!s||typeof s!="object")return null;const p=s.id||"";return p?{key:p,id:p,score:et(s.score,0),title:String(s.title||""),category:String(s.category||"general"),createdAt:s.created_at??s.createdAt??"",snippet:String(s.snippet||""),_idx:e}:null}function ot(s){const e=re(s);return Array.isArray(e)?e.map(at).filter(Boolean):[]}function ge(s,e=0){if(!s||typeof s!="object")return null;const p=s.id||"";return p?{key:p,id:p,title:String(s.title||""),content:s.content??"",tags:tt(s.tags),category:String(s.category||"general"),createdAt:s.created_at??s.createdAt??"",updatedAt:s.updated_at??s.updatedAt??"",_idx:e}:null}function rt(s){const e=re(s);return Array.isArray(e)?e.map(ge).filter(Boolean):[]}function lt(s){const e=re(s);return!e||typeof e!="object"||Array.isArray(e)?null:ge(e,0)}function nt(s){if(!Array.isArray(s)||s.length===0)return{total:0,categories:[],tags:[]};const e=new Map,p=new Map;for(const m of s){e.set(m.category,(e.get(m.category)||0)+1);for(const v of m.tags)p.set(v,(p.get(v)||0)+1)}return{total:s.length,categories:[...e.entries()].map(([m,v])=>({name:m,count:v})).sort((m,v)=>v.count-m.count),tags:[...p.entries()].map(([m,v])=>({name:m,count:v})).sort((m,v)=>v.count-m.count)}}function H(s){if(s==null||s==="")return"—";const e=String(s),p=e.includes(" ")&&!e.includes("T")?e.replace(" ","T")+"Z":e,m=new Date(p);return isNaN(m.getTime())?e:m.toLocaleString("zh-CN",{hour12:!1})}const st={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},ct={class:"page-title"},it={class:"page-sub"},ut={key:0,class:"recent-row"},dt={class:"recent-label"},pt={class:"score-block"},ft={class:"result-title"},_t={style:{color:"var(--text-muted)","font-size":"11px","font-family":"monospace"}},gt={style:{"margin-left":"8px",color:"var(--text-secondary)","font-size":"11px"}},mt={key:0,class:"result-snippet"},yt=["innerHTML"],vt={class:"filter-bar"},ht={key:0,class:"tag-row"},bt={class:"tag-row-label"},xt={class:"tag-count"},kt={style:{color:"var(--text-primary)","font-weight":"500"}},St={style:{color:"var(--text-muted)","font-size":"11px","font-family":"monospace","margin-top":"2px"}},Ct={key:0,style:{color:"var(--text-muted)","font-size":"11px"}},At={key:3,style:{color:"var(--text-secondary)","font-size":"11px"}},zt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},Nt={key:0,style:{padding:"40px","text-align":"center"}},Tt={key:1,style:{"padding-top":"8px"}},wt={style:{"font-family":"monospace","font-size":"12px"}},Et={key:0,style:{color:"var(--text-muted)"}},Mt={style:{color:"var(--text-primary)","font-size":"13px",margin:"16px 0 8px"}},Dt={key:0,class:"note-content"},$t=["innerHTML"],oe="cc.web-panel.search.recent",_e=8,It={__name:"Search",setup(s){const{t:e}=Pe(),p=Be(),m=Ue.PRESENTED_IMAGE_SIMPLE,v=b(!1),Q=b(!1),J=b(!1),V=b(!1),K=b([]),N=b([]),O=b({noDb:!1,error:""}),x=je({query:"",mode:"hybrid",topK:10}),L=b(""),E=b(be()),G=b("results"),R=b(""),T=b(""),X=b(!1),h=b(null),M=U(()=>nt(K.value)),le=U(()=>N.value.length?Math.max(...N.value.map(l=>l.score)):0),me=U(()=>[{title:e("search.noteColumns.title"),key:"title"},{title:e("search.noteColumns.category"),key:"category",width:"120px"},{title:e("search.noteColumns.tags"),key:"tags",width:"240px"},{title:e("search.noteColumns.createdAt"),key:"createdAt",width:"180px"},{title:e("search.noteColumns.action"),key:"action",width:"180px"}]),ye=U(()=>{let l=K.value;if(R.value&&(l=l.filter(n=>n.category===R.value)),T.value.trim()){const n=T.value.trim().toLowerCase();l=l.filter(u=>u.tags.some(y=>y.toLowerCase().includes(n)))}return l});function ve(l){const n=`search.mode.${l}`,u=e(n);return u===n?l:u}function Y(l){const n=["blue","green","purple","orange","cyan","magenta","gold","volcano"];let u=0;for(let y=0;y<(l||"").length;y++)u=u*31+l.charCodeAt(y)>>>0;return n[u%n.length]}function ne(l){return l>=.7?"#52c41a":l>=.5?"#1677ff":l>=.3?"#faad14":"#ff4d4f"}function W(l){return String(l).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""")}function se(l,n){if(!n||!l)return W(l);const u=n.split(/\s+/).filter(Boolean);let y=W(l);for(const Z of u){const P=new RegExp(`(${Z.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")})`,"gi");y=y.replace(P,"<mark>$1</mark>")}return y}function he(l,n){return n?se(l,n):W(l)}function be(){try{const l=localStorage.getItem(oe);if(l){const n=JSON.parse(l);if(Array.isArray(n))return n.filter(u=>typeof u=="string").slice(0,_e)}}catch{}return[]}function xe(l){const n=l.trim();if(!n)return;const u=[n,...E.value.filter(y=>y!==n)];E.value=u.slice(0,_e);try{localStorage.setItem(oe,JSON.stringify(E.value))}catch{}}function ke(){E.value=[];try{localStorage.removeItem(oe)}catch{}}function Se(l){x.query=l,F()}async function ce(){v.value=!0,O.value={noDb:!1,error:""};try{const{output:l}=await p.execute("note list -n 500 --json",12e3).catch(()=>({output:""})),n=ae(l);if(n.noDb){O.value=n,K.value=[];return}K.value=rt(l)}catch(l){I.error(e("search.messages.loadIndexFailed",{err:l?.message||l}))}finally{v.value=!1}}async function F(){const l=x.query.trim();if(!l){I.warning(e("search.messages.queryRequired"));return}J.value=!0,O.value={noDb:!1,error:""};try{const n=[`search ${Ce(l)}`,`--mode ${x.mode}`,`--top-k ${x.topK||10}`,"--json"],{output:u}=await p.execute(n.join(" "),15e3),y=ae(u);if(y.noDb){O.value=y,N.value=[],V.value=!0,L.value=l;return}N.value=ot(u),L.value=l,V.value=!0,xe(l),G.value="results"}catch(n){I.error(e("search.messages.searchFailed",{err:n?.message||n}))}finally{J.value=!1}}function Ce(l){return`"${String(l).replace(/"/g,'\\"')}"`}function Ae(l){x.query=l.title,x.mode="vector",F()}async function ie(l){X.value=!0,Q.value=!0,h.value=null;try{const{output:n}=await p.execute(`note show ${l} --json`,8e3);if(ae(n).noDb){I.error(e("search.messages.needInit"));return}h.value=lt(n),h.value||I.error(e("search.messages.noteLoadFailed"))}catch(n){I.error(e("search.messages.loadFailed",{err:n?.message||n}))}finally{Q.value=!1}}return Re(ce),(l,n)=>{const u=d("a-button"),y=d("a-space"),Z=d("a-alert"),P=d("a-input"),A=d("a-col"),ee=d("a-radio-button"),ue=d("a-radio-group"),ze=d("a-input-number"),de=d("a-row"),Ne=d("a-form"),w=d("a-tag"),D=d("a-card"),j=d("a-statistic"),te=d("a-empty"),Te=d("a-progress"),we=d("a-list-item-meta"),Ee=d("a-list-item"),Me=d("a-list"),pe=d("a-tab-pane"),De=d("a-table"),$e=d("a-tabs"),Ie=d("a-spin"),q=d("a-descriptions-item"),Oe=d("a-descriptions"),Le=d("a-modal");return i(),f("div",null,[_("div",st,[_("div",null,[_("h2",ct,c(r(e)("search.title")),1),_("p",it,c(r(e)("search.subtitle")),1)]),a(y,null,{default:t(()=>[a(u,{loading:v.value,onClick:ce},{icon:t(()=>[a(r(He))]),default:t(()=>[g(" "+c(r(e)("search.refreshIndex")),1)]),_:1},8,["loading"])]),_:1})]),O.value.noDb?(i(),S(Z,{key:0,type:"info","show-icon":"",message:r(e)("search.noDb.message"),description:r(e)("search.noDb.description"),style:{"margin-bottom":"16px"}},null,8,["message","description"])):C("",!0),a(D,{size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"},"body-style":{padding:"14px 16px"}},{default:t(()=>[a(Ne,{layout:"vertical",model:x,onSubmit:Fe(F,["prevent"])},{default:t(()=>[a(de,{gutter:12},{default:t(()=>[a(A,{span:14},{default:t(()=>[a(P,{value:x.query,"onUpdate:value":n[0]||(n[0]=o=>x.query=o),size:"large",placeholder:r(e)("search.form.queryPlaceholder"),"allow-clear":"",onPressEnter:F},{prefix:t(()=>[a(r(Qe))]),_:1},8,["value","placeholder"])]),_:1}),a(A,{span:4},{default:t(()=>[a(ue,{value:x.mode,"onUpdate:value":n[1]||(n[1]=o=>x.mode=o),size:"large","button-style":"solid"},{default:t(()=>[(i(!0),f(z,null,$(r(Ze),o=>(i(),S(ee,{key:o,value:o},{default:t(()=>[g(c(ve(o)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1}),a(A,{span:3},{default:t(()=>[a(ze,{value:x.topK,"onUpdate:value":n[2]||(n[2]=o=>x.topK=o),min:1,max:50,placeholder:r(e)("search.form.topKPlaceholder"),size:"large",style:{width:"100%"}},null,8,["value","placeholder"])]),_:1}),a(A,{span:3},{default:t(()=>[a(u,{type:"primary",size:"large",loading:J.value,block:"",onClick:F},{icon:t(()=>[a(r(Je))]),default:t(()=>[g(" "+c(r(e)("search.form.submit")),1)]),_:1},8,["loading"])]),_:1})]),_:1})]),_:1},8,["model"]),E.value.length?(i(),f("div",ut,[_("span",dt,c(r(e)("search.recent.label")),1),(i(!0),f(z,null,$(E.value,o=>(i(),S(w,{key:o,color:"blue",class:"recent-chip",onClick:k=>Se(o)},{default:t(()=>[g(c(o),1)]),_:2},1032,["onClick"]))),128)),a(u,{size:"small",type:"link",danger:"",onClick:ke},{default:t(()=>[g(c(r(e)("search.recent.clear")),1)]),_:1})])):C("",!0)]),_:1}),a(de,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:t(()=>[a(A,{xs:12,sm:8,lg:5},{default:t(()=>[a(D,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[a(j,{title:r(e)("search.stats.indexedNotes"),value:M.value.total,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:t(()=>[a(r(fe))]),_:1},8,["title","value"])]),_:1})]),_:1}),a(A,{xs:12,sm:8,lg:5},{default:t(()=>[a(D,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[a(j,{title:r(e)("search.stats.categories"),value:M.value.categories.length,"value-style":{color:"#722ed1",fontSize:"20px"}},{prefix:t(()=>[a(r(Ve))]),_:1},8,["title","value"])]),_:1})]),_:1}),a(A,{xs:12,sm:8,lg:5},{default:t(()=>[a(D,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[a(j,{title:r(e)("search.stats.tags"),value:M.value.tags.length,"value-style":{color:"#13c2c2",fontSize:"20px"}},{prefix:t(()=>[a(r(Ge))]),_:1},8,["title","value"])]),_:1})]),_:1}),a(A,{xs:12,sm:8,lg:5},{default:t(()=>[a(D,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[a(j,{title:r(e)("search.stats.results"),value:N.value.length,"value-style":{color:N.value.length>0?"#52c41a":"#888",fontSize:"20px"}},{prefix:t(()=>[a(r(Xe))]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),a(A,{xs:24,sm:8,lg:4},{default:t(()=>[a(D,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[a(j,{title:r(e)("search.stats.topScore"),value:le.value,precision:3,"value-style":{color:ne(le.value),fontSize:"20px"}},{prefix:t(()=>[a(r(Ye))]),_:1},8,["title","value","value-style"])]),_:1})]),_:1})]),_:1}),a($e,{activeKey:G.value,"onUpdate:activeKey":n[5]||(n[5]=o=>G.value=o),class:"search-tabs"},{default:t(()=>[a(pe,{key:"results",tab:r(e)("search.tabs.results")},{default:t(()=>[V.value?N.value.length?(i(),S(Me,{key:2,"data-source":N.value,"item-layout":"vertical",size:"large"},{renderItem:t(({item:o})=>[a(Ee,{class:"result-row"},{actions:t(()=>[a(u,{type:"link",size:"small",onClick:k=>ie(o.id)},{icon:t(()=>[a(r(We))]),default:t(()=>[g(" "+c(r(e)("search.results.viewFull")),1)]),_:1},8,["onClick"])]),extra:t(()=>[_("div",pt,[a(Te,{type:"circle",percent:Math.round(Math.min(1,o.score)*100),"stroke-color":ne(o.score),format:()=>o.score.toFixed(3),width:60},null,8,["percent","stroke-color","format"])])]),default:t(()=>[a(we,null,{title:t(()=>[_("span",ft,c(o.title||r(e)("search.results.noTitle")),1),a(w,{color:Y(o.category),style:{"margin-left":"8px"}},{default:t(()=>[g(c(o.category),1)]),_:2},1032,["color"])]),description:t(()=>[_("span",_t,c(o.id.slice(0,16)),1),_("span",gt,c(r(H)(o.createdAt)),1)]),_:2},1024),o.snippet?(i(),f("div",mt,[_("span",{innerHTML:se(o.snippet,L.value)},null,8,yt)])):C("",!0)]),_:2},1024)]),_:1},8,["data-source"])):(i(),S(te,{key:1,description:r(e)("search.results.noMatch",{query:L.value}),image:r(m),style:{padding:"40px 0"}},null,8,["description","image"])):(i(),S(te,{key:0,description:r(e)("search.results.promptEmpty"),image:r(m),style:{padding:"40px 0"}},null,8,["description","image"]))]),_:1},8,["tab"]),a(pe,{key:"index",tab:r(e)("search.tabs.index")},{default:t(()=>[_("div",vt,[a(ue,{value:R.value,"onUpdate:value":n[3]||(n[3]=o=>R.value=o),size:"small","button-style":"solid"},{default:t(()=>[a(ee,{value:""},{default:t(()=>[g(c(r(e)("search.index.allCategories")),1)]),_:1}),(i(!0),f(z,null,$(M.value.categories.slice(0,6),o=>(i(),S(ee,{key:o.name,value:o.name},{default:t(()=>[g(c(o.name)+" ("+c(o.count)+") ",1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),a(P,{value:T.value,"onUpdate:value":n[4]||(n[4]=o=>T.value=o),placeholder:r(e)("search.index.tagFilterPlaceholder"),"allow-clear":"",size:"small",style:{"max-width":"180px"}},null,8,["value","placeholder"])]),M.value.tags.length?(i(),f("div",ht,[_("span",bt,c(r(e)("search.index.topTagsLabel")),1),(i(!0),f(z,null,$(M.value.tags.slice(0,12),o=>(i(),S(w,{key:o.name,color:T.value===o.name?"blue":"default",class:"tag-chip",onClick:k=>T.value=T.value===o.name?"":o.name},{default:t(()=>[g(c(o.name)+" ",1),_("span",xt,c(o.count),1)]),_:2},1032,["color","onClick"]))),128))])):C("",!0),a(De,{columns:me.value,"data-source":ye.value,pagination:{pageSize:20,showTotal:o=>r(e)("search.totals.rows",{count:o})},size:"small",loading:v.value,style:{background:"var(--bg-card)"}},{bodyCell:t(({column:o,record:k})=>[o.key==="title"?(i(),f(z,{key:0},[_("span",kt,c(k.title||r(e)("search.results.noTitle")),1),_("div",St,c(k.id.slice(0,16)),1)],64)):C("",!0),o.key==="category"?(i(),S(w,{key:1,color:Y(k.category)},{default:t(()=>[g(c(k.category),1)]),_:2},1032,["color"])):C("",!0),o.key==="tags"?(i(),f(z,{key:2},[(i(!0),f(z,null,$(k.tags.slice(0,4),B=>(i(),S(w,{key:B,color:"default",style:{"font-size":"11px"}},{default:t(()=>[g(c(B),1)]),_:2},1024))),128)),k.tags.length>4?(i(),f("span",Ct,"+"+c(k.tags.length-4),1)):C("",!0)],64)):C("",!0),o.key==="createdAt"?(i(),f("span",At,c(r(H)(k.createdAt)),1)):C("",!0),o.key==="action"?(i(),f(z,{key:4},[a(u,{size:"small",type:"link",onClick:B=>ie(k.id)},{default:t(()=>[g(c(r(e)("search.index.rowAction.view")),1)]),_:1},8,["onClick"]),a(u,{size:"small",type:"link",onClick:B=>Ae(k)},{default:t(()=>[g(c(r(e)("search.index.rowAction.similar")),1)]),_:1},8,["onClick"])],64)):C("",!0)]),emptyText:t(()=>[_("div",zt,[a(r(fe),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),g(" "+c(R.value||T.value?r(e)("search.empty.filtered"):r(e)("search.empty.noNotes")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"])]),_:1},8,["activeKey"]),a(Le,{open:X.value,"onUpdate:open":n[6]||(n[6]=o=>X.value=o),title:r(e)("search.note.title",{title:h.value?.title||""}),width:780,footer:null},{default:t(()=>[Q.value?(i(),f("div",Nt,[a(Ie)])):h.value?(i(),f("div",Tt,[a(Oe,{column:2,size:"small",bordered:""},{default:t(()=>[a(q,{label:r(e)("search.note.id"),span:2},{default:t(()=>[_("span",wt,c(h.value.id),1)]),_:1},8,["label"]),a(q,{label:r(e)("search.note.category")},{default:t(()=>[a(w,{color:Y(h.value.category)},{default:t(()=>[g(c(h.value.category),1)]),_:1},8,["color"])]),_:1},8,["label"]),a(q,{label:r(e)("search.note.tags")},{default:t(()=>[(i(!0),f(z,null,$(h.value.tags,o=>(i(),S(w,{key:o,color:"default"},{default:t(()=>[g(c(o),1)]),_:2},1024))),128)),h.value.tags.length?C("",!0):(i(),f("span",Et,"—"))]),_:1},8,["label"]),a(q,{label:r(e)("search.note.createdAt")},{default:t(()=>[g(c(r(H)(h.value.createdAt)),1)]),_:1},8,["label"]),a(q,{label:r(e)("search.note.updatedAt")},{default:t(()=>[g(c(r(H)(h.value.updatedAt)),1)]),_:1},8,["label"])]),_:1}),_("h4",Mt,c(r(e)("search.note.content")),1),h.value.content?(i(),f("div",Dt,[_("span",{innerHTML:he(h.value.content,L.value)},null,8,$t)])):(i(),S(te,{key:1,description:r(e)("search.note.emptyContent"),image:r(m)},null,8,["description","image"]))])):C("",!0)]),_:1},8,["open","title"])])}}},Ft=Ke(It,[["__scopeId","data-v-25cf2b6f"]]);export{Ft as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
[data-v-e07c8b3b] .sec-row:hover td{background:var(--bg-card-hover)!important}[data-v-e07c8b3b] .ant-tabs-tab{color:var(--text-secondary)!important}[data-v-e07c8b3b] .ant-tabs-tab-active .ant-tabs-tab-btn{color:#1677ff!important}[data-v-e07c8b3b] .ant-card-head{border-color:var(--border-color)!important;color:var(--text-primary)!important}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import{_ as me,b as ve,u as ge,d as k}from"./index-3RqDry-K.js";import{R as _e,at as be,O as he,K as xe,X,a9 as ke}from"./icons-DlxlFL4g.js";import{o as we,M as f,R,P as i,u as l,c as t,N as a,r as u,K as p,L as c,O as m,Q as O,S as g,F as Ce,Y as Ie,f as Z}from"./vendor-BXcBOG8b.js";const Re={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},Te={class:"page-title"},Le={class:"page-sub"},Oe={key:0,style:{"text-align":"center",padding:"60px"}},De={key:0,style:{color:"#e0e0e0","font-family":"monospace","font-size":"12px"}},ze={key:2,style:{color:"var(--text-secondary)","font-size":"12px"}},Ae={key:0,style:{"margin-top":"12px"}},Ne={style:{color:"var(--text-secondary)","margin-bottom":"6px"}},Se={style:{"white-space":"pre-wrap","word-break":"break-all",color:"#52c41a","font-size":"11px",background:"var(--bg-base)",padding:"12px","border-radius":"6px",border:"1px solid var(--border-color)"}},We={key:0,style:{"margin-top":"8px"}},Fe={style:{"white-space":"pre-wrap","word-break":"break-all",color:"var(--text-secondary)","font-size":"11px","margin-top":"8px",background:"var(--bg-base)",padding:"10px","border-radius":"6px",border:"1px solid var(--border-color)"}},Me={key:0,style:{"margin-top":"8px"}},Be={style:{"white-space":"pre-wrap","word-break":"break-all",color:"var(--text-secondary)","font-size":"11px","margin-top":"8px",background:"var(--bg-base)",padding:"10px","border-radius":"6px",border:"1px solid var(--border-color)"}},Pe={key:0,style:{"text-align":"center",padding:"60px"}},Ee={key:0,style:{color:"var(--text-secondary)","font-size":"12px","font-family":"monospace"}},Ke={key:1,style:{color:"#e0e0e0"}},Ue={key:2,style:{color:"var(--text-secondary)"}},Ve={key:4,style:{color:"var(--text-muted)","font-size":"12px"}},$e={__name:"Security",setup(je){const{t:e}=ve(),T=ge(),N=u("did"),M=u(!1);async function ee(){M.value=!0;try{N.value==="did"?await W():N.value==="audit"&&await H()}finally{M.value=!1}}function te(s){s==="did"&&K.value.length===0&&W(),s==="audit"&&F.value.length===0&&H()}const B=u(!1),P=u(!1),E=u(!1),K=u([]),U=u(!1),S=u(""),D=u(""),ae=Z(()=>[{title:e("security.didColumns.did"),key:"did",dataIndex:"did",ellipsis:!0},{title:e("security.didColumns.method"),key:"method",dataIndex:"method",width:"100px"},{title:e("security.didColumns.created"),key:"created",dataIndex:"created",width:"180px"},{title:e("security.didColumns.status"),key:"status",width:"80px"}]);async function W(){B.value=!0;try{const{output:s}=await T.execute("did list",15e3);K.value=se(s)}catch(s){k.error(e("security.messages.loadDidsFailed",{err:s.message}))}finally{B.value=!1}}function se(s){const o=[],_=s.split(`
|
|
2
|
+
`);for(const I of _){const n=I.trim();if(!n||n.startsWith("─")||n.startsWith("DID")||n.match(/^\d+ identit/i))continue;const d=n.match(/(did:\w+:\w+)/);if(d){const y=d[1],b=y.split(":")[1]||"key",x=/default|默认|\*/.test(n),h=n.match(/(\d{4}-\d{2}-\d{2}[\sT]?\d{2}:\d{2}(?::\d{2})?)/);o.push({key:y,did:y,method:b,created:h?h[1]:"-",isDefault:x})}}return o}async function le(){P.value=!0;try{const{output:s}=await T.execute("did create",2e4);s.includes("error")||s.includes("失败")?k.error(e("security.messages.didCreateFailed",{err:s.slice(0,120)})):(k.success(e("security.messages.didCreateOk")),await W())}catch(s){k.error(e("security.messages.didCreateFailed",{err:s.message}))}finally{P.value=!1}}async function oe(){if(!S.value.trim()){k.warning(e("security.messages.messageRequired"));return}E.value=!0,D.value="";try{const{output:s}=await T.execute(`did sign "${S.value.replace(/"/g,'\\"')}"`,15e3);D.value=s,!s.includes("error")&&!s.includes("失败")&&k.success(e("security.messages.signOk"))}catch(s){D.value=e("security.messages.signFailed",{err:s.message})}finally{E.value=!1}}const z=u(""),A=u(""),V=u(!1),$=u(!1),w=u(null),C=u(null);async function re(){if(z.value.trim()){V.value=!0,w.value=null;try{const{output:s,exitCode:o}=await T.execute(`encrypt file "${z.value.trim()}"`,3e4);w.value={success:o===0&&!s.includes("error")&&!s.includes("失败"),output:s||e("security.encrypt.encryptDefault")},w.value.success&&k.success(e("security.messages.encryptOk"))}catch(s){w.value={success:!1,output:e("security.messages.encryptFailed",{err:s.message})}}finally{V.value=!1}}}async function ie(){if(A.value.trim()){$.value=!0,C.value=null;try{const{output:s,exitCode:o}=await T.execute(`decrypt file "${A.value.trim()}"`,3e4);C.value={success:o===0&&!s.includes("error")&&!s.includes("失败"),output:s||e("security.encrypt.decryptDefault")},C.value.success&&k.success(e("security.messages.decryptOk"))}catch(s){C.value={success:!1,output:e("security.messages.decryptFailed",{err:s.message})}}finally{$.value=!1}}}const j=u(!1),F=u([]),Y=u([]),ne=Z(()=>[{title:e("security.auditColumns.time"),key:"time",dataIndex:"time",width:"180px"},{title:e("security.auditColumns.event"),key:"event",dataIndex:"event",width:"200px"},{title:e("security.auditColumns.user"),key:"user",dataIndex:"user",width:"120px"},{title:e("security.auditColumns.level"),key:"level",dataIndex:"level",width:"80px"},{title:e("security.auditColumns.detail"),key:"detail",dataIndex:"detail",ellipsis:!0}]);function ce(s){return{info:"blue",warn:"orange",warning:"orange",error:"red",critical:"red"}[(s||"").toLowerCase()]||"default"}async function H(){j.value=!0;try{const[s,o]=await Promise.all([T.execute("audit log",15e3),T.execute("audit stats",15e3)]);F.value=ue(s.output),Y.value=de(o.output)}catch(s){k.error(e("security.messages.loadAuditFailed",{err:s.message}))}finally{j.value=!1}}function ue(s){const o=[],_=s.split(`
|
|
3
|
+
`);for(const I of _){const n=I.trim();if(!n||n.startsWith("─")||n.startsWith("Audit")||n.startsWith("Recent"))continue;const d=n.split(/\s*[|│]\s*/);if(d.length>=3){o.push({key:o.length,time:d[0]||"-",event:d[1]||"-",user:d[2]||"-",level:d[3]||"info",detail:d.slice(4).join(" ")||""});continue}const y=n.match(/^(\d{4}-\d{2}-\d{2}[\sT]\d{2}:\d{2}(?::\d{2})?)\s+(.+)/);if(y){const b=y[2],x=b.match(/\b(INFO|WARN|WARNING|ERROR|CRITICAL)\b/i);o.push({key:o.length,time:y[1],event:b.replace(/\b(INFO|WARN|WARNING|ERROR|CRITICAL)\b/i,"").trim().slice(0,80),user:"-",level:x?x[1].toLowerCase():"info",detail:""})}else n.length>3&&!n.match(/^\d+ event/i)&&o.push({key:o.length,time:"-",event:n.slice(0,80),user:"-",level:"info",detail:""})}return o}function de(s){const o=[],_=s.split(`
|
|
4
|
+
`),I=["#1677ff","#52c41a","#faad14","#ff4d4f"];let n=0;for(const d of _){const y=d.trim();if(!y||y.startsWith("─")||y.startsWith("Audit"))continue;const b=y.match(/^(.+?)\s*[:=:]\s*(.+)$/);if(b){const x=b[1].trim(),h=b[2].trim(),L=h.match(/^(\d+)/);o.push({label:x,value:L?parseInt(L[1],10):h,color:I[n%I.length]}),n++}}return o.length===0&&o.push({label:e("security.audit.totalEvents"),value:F.value.length,color:"#1677ff"},{label:e("security.audit.statusLabel"),value:e("security.audit.ready"),color:"#52c41a"}),o}return we(()=>{W()}),(s,o)=>{const _=p("a-button"),I=p("a-space"),n=p("a-spin"),d=p("a-tag"),y=p("a-empty"),b=p("a-table"),x=p("a-input"),h=p("a-form-item"),L=p("a-form"),pe=p("a-modal"),q=p("a-tab-pane"),G=p("a-card"),Q=p("a-col"),J=p("a-row"),ye=p("a-statistic"),fe=p("a-tabs");return c(),f("div",null,[R("div",Re,[R("div",null,[R("h2",Te,i(l(e)("security.title")),1),R("p",Le,i(l(e)("security.subtitle")),1)]),t(_,{type:"primary",ghost:"",loading:M.value,onClick:ee},{icon:a(()=>[t(l(_e))]),default:a(()=>[m(" "+i(l(e)("security.refresh")),1)]),_:1},8,["loading"])]),t(fe,{activeKey:N.value,"onUpdate:activeKey":o[5]||(o[5]=r=>N.value=r),onChange:te},{default:a(()=>[t(q,{key:"did"},{tab:a(()=>[t(l(xe)),m(" "+i(l(e)("security.tabs.did")),1)]),default:a(()=>[t(I,{style:{"margin-bottom":"16px"}},{default:a(()=>[t(_,{type:"primary",loading:P.value,onClick:le},{icon:a(()=>[t(l(be))]),default:a(()=>[m(" "+i(l(e)("security.did.createButton")),1)]),_:1},8,["loading"]),t(_,{onClick:o[0]||(o[0]=r=>U.value=!0)},{icon:a(()=>[t(l(he))]),default:a(()=>[m(" "+i(l(e)("security.did.signButton")),1)]),_:1})]),_:1}),B.value?(c(),f("div",Oe,[t(n,{size:"large"})])):(c(),O(b,{key:1,columns:ae.value,"data-source":K.value,pagination:{pageSize:20,showTotal:r=>l(e)("security.totals.rows",{count:r})},size:"small",style:{background:"var(--bg-card)"},"row-class-name":()=>"sec-row"},{bodyCell:a(({column:r,record:v})=>[r.key==="did"?(c(),f("span",De,i(v.did),1)):g("",!0),r.key==="method"?(c(),O(d,{key:1,color:"blue"},{default:a(()=>[m(i(v.method),1)]),_:2},1024)):g("",!0),r.key==="created"?(c(),f("span",ze,i(v.created),1)):g("",!0),r.key==="status"?(c(),O(d,{key:3,color:v.isDefault?"green":"default"},{default:a(()=>[m(i(v.isDefault?l(e)("security.did.default"):l(e)("security.did.available")),1)]),_:2},1032,["color"])):g("",!0)]),emptyText:a(()=>[t(y,{description:l(e)("security.did.emptyText")},null,8,["description"])]),_:1},8,["columns","data-source","pagination"])),t(pe,{open:U.value,"onUpdate:open":o[2]||(o[2]=r=>U.value=r),title:l(e)("security.did.signTitle"),"confirm-loading":E.value,onOk:oe,"ok-text":l(e)("security.did.signOk"),"cancel-text":l(e)("common.cancel")},{default:a(()=>[t(L,{"label-col":{span:4},"wrapper-col":{span:20},style:{"margin-top":"16px"}},{default:a(()=>[t(h,{label:l(e)("security.did.messageLabel"),required:""},{default:a(()=>[t(x,{value:S.value,"onUpdate:value":o[1]||(o[1]=r=>S.value=r),placeholder:l(e)("security.did.messagePlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"])]),_:1}),D.value?(c(),f("div",Ae,[R("p",Ne,i(l(e)("security.did.signResultLabel")),1),R("pre",Se,i(D.value),1)])):g("",!0)]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"])]),_:1}),t(q,{key:"encrypt"},{tab:a(()=>[t(l(X)),m(" "+i(l(e)("security.tabs.encrypt")),1)]),default:a(()=>[t(J,{gutter:[24,24]},{default:a(()=>[t(Q,{xs:24,md:12},{default:a(()=>[t(G,{title:l(e)("security.encrypt.encryptCardTitle"),style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(L,{"label-col":{span:6},"wrapper-col":{span:18}},{default:a(()=>[t(h,{label:l(e)("security.encrypt.pathLabel")},{default:a(()=>[t(x,{value:z.value,"onUpdate:value":o[3]||(o[3]=r=>z.value=r),placeholder:l(e)("security.encrypt.encryptPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),t(h,{"wrapper-col":{offset:6,span:18}},{default:a(()=>[t(_,{type:"primary",loading:V.value,disabled:!z.value.trim(),onClick:re},{icon:a(()=>[t(l(X))]),default:a(()=>[m(" "+i(l(e)("security.encrypt.encryptButton")),1)]),_:1},8,["loading","disabled"])]),_:1})]),_:1}),w.value?(c(),f("div",We,[t(d,{color:w.value.success?"green":"red"},{default:a(()=>[m(i(w.value.success?l(e)("security.encrypt.successTag"):l(e)("security.encrypt.failureTag")),1)]),_:1},8,["color"]),R("pre",Fe,i(w.value.output),1)])):g("",!0)]),_:1},8,["title"])]),_:1}),t(Q,{xs:24,md:12},{default:a(()=>[t(G,{title:l(e)("security.encrypt.decryptCardTitle"),style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(L,{"label-col":{span:6},"wrapper-col":{span:18}},{default:a(()=>[t(h,{label:l(e)("security.encrypt.pathLabel")},{default:a(()=>[t(x,{value:A.value,"onUpdate:value":o[4]||(o[4]=r=>A.value=r),placeholder:l(e)("security.encrypt.decryptPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),t(h,{"wrapper-col":{offset:6,span:18}},{default:a(()=>[t(_,{type:"primary",loading:$.value,disabled:!A.value.trim(),onClick:ie},{icon:a(()=>[t(l(X))]),default:a(()=>[m(" "+i(l(e)("security.encrypt.decryptButton")),1)]),_:1},8,["loading","disabled"])]),_:1})]),_:1}),C.value?(c(),f("div",Me,[t(d,{color:C.value.success?"green":"red"},{default:a(()=>[m(i(C.value.success?l(e)("security.encrypt.successTag"):l(e)("security.encrypt.failureTag")),1)]),_:1},8,["color"]),R("pre",Be,i(C.value.output),1)])):g("",!0)]),_:1},8,["title"])]),_:1})]),_:1})]),_:1}),t(q,{key:"audit"},{tab:a(()=>[t(l(ke)),m(" "+i(l(e)("security.tabs.audit")),1)]),default:a(()=>[t(J,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:a(()=>[(c(!0),f(Ce,null,Ie(Y.value,r=>(c(),O(Q,{xs:12,sm:6,key:r.label},{default:a(()=>[t(G,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"},size:"small"},{default:a(()=>[t(ye,{title:r.label,value:r.value,"value-style":{color:r.color,fontSize:"20px"}},null,8,["title","value","value-style"])]),_:2},1024)]),_:2},1024))),128))]),_:1}),j.value?(c(),f("div",Pe,[t(n,{size:"large"})])):(c(),O(b,{key:1,columns:ne.value,"data-source":F.value,pagination:{pageSize:20,showTotal:r=>l(e)("security.totals.rows",{count:r})},size:"small",style:{background:"var(--bg-card)"},"row-class-name":()=>"sec-row"},{bodyCell:a(({column:r,record:v})=>[r.key==="time"?(c(),f("span",Ee,i(v.time),1)):g("",!0),r.key==="event"?(c(),f("span",Ke,i(v.event),1)):g("",!0),r.key==="user"?(c(),f("span",Ue,i(v.user),1)):g("",!0),r.key==="level"?(c(),O(d,{key:3,color:ce(v.level)},{default:a(()=>[m(i(v.level),1)]),_:2},1032,["color"])):g("",!0),r.key==="detail"?(c(),f("span",Ve,i(v.detail),1)):g("",!0)]),emptyText:a(()=>[t(y,{description:l(e)("security.audit.emptyText")},null,8,["description"])]),_:1},8,["columns","data-source","pagination"]))]),_:1})]),_:1},8,["activeKey"])])}}},Xe=me($e,[["__scopeId","data-v-e07c8b3b"]]);export{Xe as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
[data-v-13be6bfe] .port-active td{color:#52c41a!important}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{_ as K,u as Q}from"./index-3RqDry-K.js";import{R as Z,Z as q,o as $,ae as J,f as U,as as X,l as Y}from"./icons-DlxlFL4g.js";import{o as ee,M as d,R as m,c as e,N as t,r,K as n,L as s,O as b,u as c,P as u,S as g,Q as V,f as te}from"./vendor-BXcBOG8b.js";const oe={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},ae={key:0,style:{"margin-top":"6px",color:"var(--text-muted)","font-size":"11px"}},re={style:{"margin-top":"6px",color:"var(--text-muted)","font-size":"11px"}},le={key:0,style:{"margin-top":"6px",color:"var(--text-muted)","font-size":"11px",overflow:"hidden","text-overflow":"ellipsis","white-space":"nowrap"}},se={key:0,style:{"margin-top":"6px",color:"var(--text-muted)","font-size":"11px"}},ne={key:0,style:{"text-align":"center",padding:"30px"}},ce={key:1,style:{"font-family":"monospace",color:"#ccc"}},ie={key:0,style:{color:"var(--text-secondary)","font-size":"13px",padding:"8px 0"}},de={key:1,style:{color:"var(--text-muted)","font-size":"13px",padding:"8px 0"}},ue={key:0,style:{"margin-top":"16px"}},ve={style:{background:"var(--bg-base)",border:"1px solid var(--border-color)","border-radius":"6px",padding:"12px",color:"#aaa","font-size":"12px","max-height":"300px","overflow-y":"auto","white-space":"pre-wrap"}},pe={__name:"Services",setup(fe){const S=Q(),N=window.__CC_CONFIG__||{},x=r(!1),C=r(!1),y=r(""),W=r(""),z=r(!1),L=r(""),k=r(""),D=r(""),M=r(!1),h=r(""),w=r(""),B=r([]),R=te(()=>S.status==="connected"),E=[{title:"服务",dataIndex:"name",key:"name"},{title:"端口",dataIndex:"port",key:"port"},{title:"状态",key:"status"}];async function I(){x.value=!0;try{const{output:o}=await S.execute("status",15e3);W.value=o,F(o)}catch(o){console.error("status failed:",o)}finally{x.value=!1}}function F(o){z.value=o.includes("Desktop app running")||o.includes("Running");const a=o.match(/Edition:\s+(\S+)/i);a&&(L.value=a[1]);const v=o.match(/LLM:\s+(\S+)\s+\(([^)]+)\)/i);if(v)k.value=v[1],D.value=v[2];else{const l=o.match(/LLM:\s+(\S+)/i);l&&(k.value=l[1])}M.value=o.includes("Setup completed");const p=o.match(/Setup completed \(([^)]+)\)/i);if(p)try{h.value=new Date(p[1]).toLocaleDateString("zh-CN")}catch{h.value=""}o.includes("docker-compose.yml not found")?w.value="未找到 docker-compose.yml":o.includes("Docker Services")&&(w.value="已检测到 Docker 配置");const i=o.split(`
|
|
2
|
+
`).filter(l=>l.match(/[○●]\s+\w+:\s+\d+/));B.value=i.map(l=>{const f=l.match(/([○●])\s+(\w+):\s+(\d+)/);return f?{key:f[2],name:f[2],port:parseInt(f[3]),active:f[1]==="●"}:null}).filter(Boolean)}async function P(){C.value=!0,y.value="";try{const{output:o}=await S.execute("doctor",3e4);y.value=o}catch(o){y.value=`诊断失败: ${o.message}`}finally{C.value=!1}}return ee(I),(o,a)=>{const v=n("a-button"),p=n("a-statistic"),i=n("a-card"),l=n("a-col"),f=n("a-row"),T=n("a-tag"),j=n("a-spin"),A=n("a-badge"),G=n("a-table"),H=n("a-space");return s(),d("div",null,[m("div",oe,[a[3]||(a[3]=m("div",null,[m("h2",{class:"page-title"},"服务管理"),m("p",{class:"page-sub"},"ChainlessChain 运行状态与服务控制")],-1)),e(v,{type:"primary",ghost:"",loading:x.value,onClick:I},{icon:t(()=>[e(c(Z))]),default:t(()=>[a[2]||(a[2]=b(" 刷新 ",-1))]),_:1},8,["loading"])]),e(f,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:t(()=>[e(l,{xs:24,sm:12,lg:6},{default:t(()=>[e(i,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[e(p,{title:"应用状态",value:z.value?"运行中":"未运行","value-style":{color:z.value?"#52c41a":"#888",fontSize:"16px"}},{prefix:t(()=>[e(c(q))]),_:1},8,["value","value-style"]),L.value?(s(),d("div",ae,"版本: "+u(L.value),1)):g("",!0)]),_:1})]),_:1}),e(l,{xs:24,sm:12,lg:6},{default:t(()=>[e(i,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[e(p,{title:"WebSocket 服务",value:"运行中","value-style":{color:"#52c41a",fontSize:"16px"}},{prefix:t(()=>[e(c($))]),_:1}),m("div",re," 端口: "+u(c(N).wsPort||18800)+" · "+u(c(N).wsHost||"127.0.0.1"),1)]),_:1})]),_:1}),e(l,{xs:24,sm:12,lg:6},{default:t(()=>[e(i,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[e(p,{title:"LLM 提供商",value:k.value||"未配置","value-style":{color:k.value?"#1677ff":"#888",fontSize:"16px"}},{prefix:t(()=>[e(c(J))]),_:1},8,["value","value-style"]),D.value?(s(),d("div",le,u(D.value),1)):g("",!0)]),_:1})]),_:1}),e(l,{xs:24,sm:12,lg:6},{default:t(()=>[e(i,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[e(p,{title:"初始化",value:M.value?"已完成":"未完成","value-style":{color:M.value?"#52c41a":"#faad14",fontSize:"16px"}},{prefix:t(()=>[e(c(U))]),_:1},8,["value","value-style"]),h.value?(s(),d("div",se,u(h.value),1)):g("",!0)]),_:1})]),_:1})]),_:1}),e(i,{title:"端口状态",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"}},{extra:t(()=>[e(T,{color:R.value?"green":"red"},{default:t(()=>[b(" WS "+u(R.value?"已连接":"断开"),1)]),_:1},8,["color"])]),default:t(()=>[x.value?(s(),d("div",ne,[e(j)])):(s(),V(G,{key:1,columns:E,"data-source":B.value,pagination:!1,size:"small","row-class-name":_=>_.active?"port-active":""},{bodyCell:t(({column:_,record:O})=>[_.key==="status"?(s(),V(A,{key:0,status:O.active?"success":"default",text:O.active?"运行中":"未运行"},null,8,["status","text"])):g("",!0),_.key==="port"?(s(),d("span",ce,u(O.port),1)):g("",!0)]),_:1},8,["data-source","row-class-name"]))]),_:1}),e(i,{title:"Docker 服务",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"}},{default:t(()=>[w.value?(s(),d("div",ie,u(w.value),1)):(s(),d("div",de,"未检测到 Docker 服务"))]),_:1}),e(i,{title:"快速操作",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[e(H,{wrap:""},{default:t(()=>[e(v,{loading:C.value,onClick:P,style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:t(()=>[e(c(X))]),default:t(()=>[a[4]||(a[4]=b(" 环境诊断 ",-1))]),_:1},8,["loading"]),e(v,{onClick:a[0]||(a[0]=_=>o.$router.push("/logs")),style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:t(()=>[e(c(Y))]),default:t(()=>[a[5]||(a[5]=b(" 查看日志 ",-1))]),_:1}),e(v,{onClick:a[1]||(a[1]=_=>o.$router.push("/providers")),style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:t(()=>[e(c($))]),default:t(()=>[a[6]||(a[6]=b(" LLM 配置 ",-1))]),_:1})]),_:1}),y.value?(s(),d("div",ue,[a[7]||(a[7]=m("div",{style:{color:"var(--text-secondary)","font-size":"11px","margin-bottom":"6px"}},"诊断结果",-1)),m("pre",ve,u(y.value),1)])):g("",!0)]),_:1})])}}},ye=K(pe,[["__scopeId","data-v-13be6bfe"]]);export{ye as default};
|