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
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{I as i,J as I,U,R as s,Q as r,c as t,K as a,V as _,S as x,o as oe,b as ee,r as u,P as p,F as ne,a2 as ge}from"./vendor-Bn1JzzAn.js";import{_ as we,b as re,u as ie,d}from"./index-k7QsBwyo.js";import{u as de}from"./useShellMode-CgR0wCYM.js";import{aN as ke,aO as be,aP as Fe,f as je,a5 as Ce,a8 as xe,at as Oe,R as Se}from"./icons-DG5UD-6K.js";const Pe={__name:"Projects",setup(se,{expose:l}){l();const{t:te}=re(),e=ie(),{isEmbedded:J}=de();async function w(o,f,ye,ae=8e3){if(J){const Z=await e.sendRaw({...f,type:o},ae);if(!Z?.ok){const $=Z?.error;throw new Error(typeof $=="string"?$:$?.message||`${o} failed`)}return Z.result}return e.executeJson(ye,ae)}const B=u(!1),y=u([]),O=u(""),S=u(""),P=u(!1),v=u(null),h=u([]),k=u(!1),E=u(!1),L=u(!1),b=u({name:"",description:"",type:"document",rootPath:""}),z=[{title:"ID",key:"id",width:110},{title:"名称",key:"name"},{title:"类型",key:"project_type",width:120},{title:"状态",key:"status",width:100},{title:"同步",key:"sync_status",width:100},{title:"更新",key:"updated_at",width:160},{title:"操作",key:"actions",width:180,fixed:"right"}],V=ee(()=>{const o={active:0,draft:0,completed:0,archived:0};for(const f of y.value)o[f.status]!==void 0&&(o[f.status]+=1);return o}),W=ee(()=>y.value.filter(o=>!(O.value&&o.status!==O.value||S.value&&!o.name.toLowerCase().includes(S.value.toLowerCase()))));function g(o){switch(o){case"active":return"green";case"draft":return"default";case"completed":return"cyan";case"archived":return"gold";default:return"default"}}function H(o){switch(o){case"synced":return"green";case"pending":return"orange";case"conflict":return"red";case"error":return"red";default:return"default"}}function K(o){return!o&&o!==0?"-":new Date(typeof o=="number"?o:parseInt(o,10)).toLocaleString("zh-CN",{hour12:!1})}async function C(){B.value=!0;try{const o=await w("project.list",{limit:500},"project list --limit 500 --json",1e4);y.value=Array.isArray(o?.projects)?o.projects:Array.isArray(o)?o:[]}catch(o){d.error("加载失败: "+(o.message||o)),y.value=[]}finally{B.value=!1}}function Q(o){return{onClick:()=>M(o)}}async function M(o){v.value=o,P.value=!0,k.value=!0,h.value=[];try{const f=await w("project.listFiles",{projectId:o.id,limit:200},`project list-files ${o.id} --json`,8e3);h.value=Array.isArray(f?.files)?f.files:[]}catch{h.value=[]}finally{k.value=!1}}async function G(o){try{(await w("project.delete",{id:o.id},`project delete ${o.id} --json`,8e3))?.ok?(d.success(`已删除项目 '${o.name}'`),P.value=!1,await C()):d.error("删除失败")}catch(f){d.error(f.message||String(f))}}function X(){b.value={name:"",description:"",type:"document",rootPath:""},E.value=!0}async function T(){if(!b.value.name.trim()){d.warning("请输入项目名称");return}L.value=!0;try{const o=await w("project.init",{name:b.value.name.trim(),description:b.value.description||null,projectType:b.value.type,rootPath:b.value.rootPath||null},`project init "${b.value.name.trim()}" --type ${b.value.type} --json`,8e3);o?.id?(d.success(`已创建项目 '${o.name}'`),E.value=!1,await C()):d.error("创建失败")}catch(o){d.error(o.message||String(o))}finally{L.value=!1}}const F=u(!1),D=u(!1),j=u({path:"",content:""}),A=u(!1),m=u(!1),R=u({path:""}),n=u(!1),c=u(null),q=u(""),Y=u(!1);function ue(){j.value={path:"",content:""},F.value=!0}function ce(){R.value={path:""},A.value=!0}async function N(){if(v.value){k.value=!0;try{const o=await w("project.listFiles",{projectId:v.value.id,limit:200},`project list-files ${v.value.id} --json`,8e3);h.value=Array.isArray(o?.files)?o.files:[]}catch(o){d.error("刷新文件失败: "+(o.message||o))}finally{k.value=!1}}}async function fe(){if(!j.value.path.trim()){d.warning("请输入文件路径");return}if(v.value){D.value=!0;try{const o=await w("project.createFile",{projectId:v.value.id,filePath:j.value.path.trim(),content:j.value.content||""},`project create-file ${v.value.id} "${j.value.path.trim()}" --json`,8e3);o?.id?(d.success(`已创建文件 '${o.file_name}'`),F.value=!1,await N(),await C()):d.error("创建文件失败")}catch(o){d.error(o.message||String(o))}finally{D.value=!1}}}async function pe(){if(!R.value.path.trim()){d.warning("请输入文件夹路径");return}if(v.value){m.value=!0;try{const o=await w("project.createFolder",{projectId:v.value.id,folderPath:R.value.path.trim()},`project create-folder ${v.value.id} "${R.value.path.trim()}" --json`,8e3);o?.id?(d.success(`已创建文件夹 '${o.file_name}'`),A.value=!1,await N(),await C()):d.error("创建文件夹失败")}catch(o){d.error(o.message||String(o))}finally{m.value=!1}}}async function ve(o){try{(await w("project.deleteFile",{fileId:o.id},`project delete-file ${o.id} --json`,8e3))?.deleted?(d.success(`已删除 '${o.file_name}'`),await N(),await C()):d.error("删除失败")}catch(f){d.error(f.message||String(f))}}async function me(o){if(o.is_folder){d.info("文件夹无内容可编辑");return}try{const f=await w("project.getFile",{fileId:o.id},`project get-file ${o.id} --json`,8e3);c.value=o,q.value=f?.content||"",n.value=!0}catch(f){d.error("读取文件失败: "+(f.message||f))}}async function _e(){if(c.value){Y.value=!0;try{(await w("project.writeFile",{fileId:c.value.id,content:q.value},`project write-file ${c.value.id} --json`,8e3))?.id?(d.success("已保存"),n.value=!1,await N()):d.error("保存失败")}catch(o){d.error(o.message||String(o))}finally{Y.value=!1}}}oe(()=>{C()});const le={t:te,ws:e,isEmbedded:J,callProjectTopic:w,loading:B,projects:y,statusFilter:O,nameFilter:S,detailOpen:P,detail:v,files:h,filesLoading:k,createOpen:E,creating:L,newProject:b,columns:z,countByStatus:V,filteredProjects:W,statusColor:g,syncColor:H,formatTime:K,loadAll:C,onRowClick:Q,openDetail:M,onDelete:G,onShowCreate:X,onCreate:T,createFileOpen:F,creatingFile:D,newFile:j,createFolderOpen:A,creatingFolder:m,newFolder:R,editFileOpen:n,editingFile:c,editFileContent:q,savingFile:Y,openCreateFile:ue,openCreateFolder:ce,refreshFiles:N,onCreateFile:fe,onCreateFolder:pe,onDeleteFile:ve,openEditFile:me,onSaveFile:_e,ref:u,computed:ee,onMounted:oe,get ReloadOutlined(){return Se},get PlusOutlined(){return Oe},get FolderOutlined(){return xe},get FileTextOutlined(){return Ce},get CheckCircleOutlined(){return je},get CheckSquareOutlined(){return Fe},get FileAddOutlined(){return be},get FolderAddOutlined(){return ke},get message(){return d},get useI18n(){return re},get useWsStore(){return ie},get useShellMode(){return de}};return Object.defineProperty(le,"__isScriptSetup",{enumerable:!1,value:!0}),le}},ze={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},Ae={class:"page-title"},Ie={class:"page-sub"},Ue={class:"filter-bar",style:{"margin-bottom":"12px",display:"flex",gap:"12px","align-items":"center"}},he={key:0,style:{"font-size":"12px",color:"#888"}},De={key:0,style:{color:"#888","font-size":"12px"}},Re={key:0},Te={key:1,style:{color:"#888"}},Be=["onClick"],Ee={key:0,style:{color:"#888","font-size":"12px"}};function Le(se,l,te,e,J,w){const B=i("router-link"),y=i("a-button"),O=i("a-space"),S=i("a-statistic"),P=i("a-card"),v=i("a-col"),h=i("a-row"),k=i("a-radio-button"),E=i("a-radio-group"),L=i("a-input-search"),b=i("a-alert"),z=i("a-tag"),V=i("a-popconfirm"),W=i("a-table"),g=i("a-descriptions-item"),H=i("a-descriptions"),K=i("a-divider"),C=i("a-empty"),Q=i("a-list-item"),M=i("a-list"),G=i("a-spin"),X=i("a-drawer"),T=i("a-input"),F=i("a-form-item"),D=i("a-textarea"),j=i("a-form"),A=i("a-modal"),m=i("a-select-option"),R=i("a-select");return p(),I("div",null,[U("div",ze,[U("div",null,[U("h2",Ae,s(e.t("projects.title")),1),U("p",Ie,[l[17]||(l[17]=r("桌面 / CLI / 手机 三端共享同一份项目数据,Phase 3d sync 自动同步 (",-1)),t(B,{to:"/project-init"},{default:a(()=>[...l[16]||(l[16]=[r("项目初始化 / 环境设置",-1)])]),_:1}),l[18]||(l[18]=r(")",-1))])]),t(O,null,{default:a(()=>[t(y,{loading:e.loading,onClick:e.loadAll},{icon:a(()=>[t(e.ReloadOutlined)]),default:a(()=>[l[19]||(l[19]=r(" 刷新 ",-1))]),_:1},8,["loading"]),t(y,{type:"primary",onClick:e.onShowCreate},{icon:a(()=>[t(e.PlusOutlined)]),default:a(()=>[l[20]||(l[20]=r(" 新建项目 ",-1))]),_:1})]),_:1})]),_(" Stats "),t(h,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:a(()=>[t(v,{xs:12,sm:8,lg:6},{default:a(()=>[t(P,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(S,{title:"总项目",value:e.projects.length,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:a(()=>[t(e.FolderOutlined)]),_:1},8,["value"])]),_:1})]),_:1}),t(v,{xs:12,sm:8,lg:6},{default:a(()=>[t(P,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(S,{title:"活跃",value:e.countByStatus.active,"value-style":{color:"#52c41a",fontSize:"20px"}},{prefix:a(()=>[t(e.CheckCircleOutlined)]),_:1},8,["value"])]),_:1})]),_:1}),t(v,{xs:12,sm:8,lg:6},{default:a(()=>[t(P,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(S,{title:"草稿",value:e.countByStatus.draft,"value-style":{color:"#8c8c8c",fontSize:"20px"}},{prefix:a(()=>[t(e.FileTextOutlined)]),_:1},8,["value"])]),_:1})]),_:1}),t(v,{xs:12,sm:8,lg:6},{default:a(()=>[t(P,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(S,{title:"已完成",value:e.countByStatus.completed,"value-style":{color:"#13c2c2",fontSize:"20px"}},{prefix:a(()=>[t(e.CheckSquareOutlined)]),_:1},8,["value"])]),_:1})]),_:1})]),_:1}),_(" Filter "),U("div",Ue,[t(E,{value:e.statusFilter,"onUpdate:value":l[0]||(l[0]=n=>e.statusFilter=n),size:"small","button-style":"solid"},{default:a(()=>[t(k,{value:""},{default:a(()=>[...l[21]||(l[21]=[r("全部",-1)])]),_:1}),t(k,{value:"active"},{default:a(()=>[...l[22]||(l[22]=[r("活跃",-1)])]),_:1}),t(k,{value:"draft"},{default:a(()=>[...l[23]||(l[23]=[r("草稿",-1)])]),_:1}),t(k,{value:"completed"},{default:a(()=>[...l[24]||(l[24]=[r("已完成",-1)])]),_:1}),t(k,{value:"archived"},{default:a(()=>[...l[25]||(l[25]=[r("已归档",-1)])]),_:1})]),_:1},8,["value"]),t(L,{value:e.nameFilter,"onUpdate:value":l[1]||(l[1]=n=>e.nameFilter=n),placeholder:"按名称过滤",style:{"max-width":"260px"},"allow-clear":""},null,8,["value"])]),!e.projects.length&&!e.loading?(p(),x(b,{key:0,type:"info",message:"还没有项目",description:'运行 `cc project init <name>` 或点击右上角"新建项目"按钮创建。桌面 / CLI / 手机三端共享同一份数据。',"show-icon":"",style:{"margin-bottom":"16px"}})):_("v-if",!0),e.projects.length||e.loading?(p(),x(W,{key:1,columns:e.columns,"data-source":e.filteredProjects,loading:e.loading,pagination:{pageSize:20,showSizeChanger:!0},"row-key":"id","custom-row":e.onRowClick},{bodyCell:a(({column:n,record:c})=>[n.key==="id"?(p(),I("code",he,s(c.id.slice(0,8))+"…",1)):n.key==="name"?(p(),I(ne,{key:1},[U("strong",null,s(c.name),1),c.description?(p(),I("div",De,s(c.description),1)):_("v-if",!0)],64)):n.key==="project_type"?(p(),x(z,{key:2},{default:a(()=>[r(s(c.project_type),1)]),_:2},1024)):n.key==="status"?(p(),x(z,{key:3,color:e.statusColor(c.status)},{default:a(()=>[r(s(c.status),1)]),_:2},1032,["color"])):n.key==="sync_status"?(p(),x(z,{key:4,color:e.syncColor(c.sync_status)},{default:a(()=>[r(s(c.sync_status||"unknown"),1)]),_:2},1032,["color"])):n.key==="updated_at"?(p(),I(ne,{key:5},[r(s(e.formatTime(c.updated_at)),1)],64)):n.key==="actions"?(p(),x(O,{key:6,onClick:l[2]||(l[2]=ge(()=>{},["stop"]))},{default:a(()=>[t(y,{size:"small",onClick:q=>e.openDetail(c)},{default:a(()=>[...l[26]||(l[26]=[r("详情",-1)])]),_:1},8,["onClick"]),t(V,{title:`删除项目 '${c.name}' ?`,"ok-text":"删除","ok-type":"danger","cancel-text":"取消",onConfirm:q=>e.onDelete(c)},{default:a(()=>[t(y,{size:"small",danger:""},{default:a(()=>[...l[27]||(l[27]=[r("删除",-1)])]),_:1})]),_:1},8,["title","onConfirm"])]),_:2},1024)):_("v-if",!0)]),_:1},8,["data-source","loading"])):_("v-if",!0),_(" Detail drawer "),t(X,{open:e.detailOpen,"onUpdate:open":l[3]||(l[3]=n=>e.detailOpen=n),title:e.detail?.name||"项目详情",width:"640",placement:"right"},{default:a(()=>[e.detail?(p(),x(H,{key:0,column:1,bordered:"",size:"small"},{default:a(()=>[t(g,{label:"ID"},{default:a(()=>[U("code",null,s(e.detail.id),1)]),_:1}),t(g,{label:"名称"},{default:a(()=>[r(s(e.detail.name),1)]),_:1}),t(g,{label:"描述"},{default:a(()=>[r(s(e.detail.description||"-"),1)]),_:1}),t(g,{label:"类型"},{default:a(()=>[t(z,null,{default:a(()=>[r(s(e.detail.project_type),1)]),_:1})]),_:1}),t(g,{label:"状态"},{default:a(()=>[t(z,{color:e.statusColor(e.detail.status)},{default:a(()=>[r(s(e.detail.status),1)]),_:1},8,["color"])]),_:1}),t(g,{label:"同步状态"},{default:a(()=>[t(z,{color:e.syncColor(e.detail.sync_status)},{default:a(()=>[r(s(e.detail.sync_status||"unknown"),1)]),_:1},8,["color"])]),_:1}),t(g,{label:"用户"},{default:a(()=>[r(s(e.detail.user_id),1)]),_:1}),t(g,{label:"根路径"},{default:a(()=>[e.detail.root_path?(p(),I("code",Re,s(e.detail.root_path),1)):(p(),I("span",Te,"(无)"))]),_:1}),t(g,{label:"文件数"},{default:a(()=>[r(s(e.detail.file_count||0),1)]),_:1}),t(g,{label:"创建"},{default:a(()=>[r(s(e.formatTime(e.detail.created_at)),1)]),_:1}),t(g,{label:"更新"},{default:a(()=>[r(s(e.formatTime(e.detail.updated_at)),1)]),_:1})]),_:1})):_("v-if",!0),t(K,null,{default:a(()=>[...l[28]||(l[28]=[r("文件",-1)])]),_:1}),_(" Sub-phase 7.3 (2026-05-17): 文件 CRUD toolbar "),t(O,{style:{"margin-bottom":"12px"}},{default:a(()=>[t(y,{size:"small",type:"primary",disabled:!e.detail,onClick:e.openCreateFile},{default:a(()=>[t(e.FileAddOutlined),l[29]||(l[29]=r(" 新建文件 ",-1))]),_:1},8,["disabled"]),t(y,{size:"small",disabled:!e.detail,onClick:e.openCreateFolder},{default:a(()=>[t(e.FolderAddOutlined),l[30]||(l[30]=r(" 新建文件夹 ",-1))]),_:1},8,["disabled"])]),_:1}),t(G,{spinning:e.filesLoading},{default:a(()=>[!e.files.length&&!e.filesLoading?(p(),x(C,{key:0,description:"无文件 (点上方按钮新建)"})):(p(),x(M,{key:1,size:"small","data-source":e.files},{renderItem:a(({item:n})=>[t(Q,null,{extra:a(()=>[t(O,null,{default:a(()=>[n.file_size?(p(),I("span",Ee,s(n.file_size)+" B",1)):_("v-if",!0),t(V,{title:`删除 ${n.is_folder?"文件夹":"文件"} '${n.file_name}' ?`,"ok-text":"删除","ok-type":"danger","cancel-text":"取消",onConfirm:c=>e.onDeleteFile(n)},{default:a(()=>[t(y,{size:"small",danger:""},{default:a(()=>[...l[31]||(l[31]=[r("×",-1)])]),_:1})]),_:1},8,["title","onConfirm"])]),_:2},1024)]),default:a(()=>[U("span",{style:{cursor:"pointer"},onClick:c=>e.openEditFile(n)},s(n.is_folder?"📁":"📄")+" "+s(n.file_path),9,Be)]),_:2},1024)]),_:1},8,["data-source"]))]),_:1},8,["spinning"])]),_:1},8,["open","title"]),_(" Sub-phase 7.3: Create file modal "),t(A,{open:e.createFileOpen,"onUpdate:open":l[6]||(l[6]=n=>e.createFileOpen=n),title:"新建文件","confirm-loading":e.creatingFile,"ok-text":"创建","cancel-text":"取消",onOk:e.onCreateFile},{default:a(()=>[t(j,{layout:"vertical"},{default:a(()=>[t(F,{label:"文件路径(项目内)",required:""},{default:a(()=>[t(T,{value:e.newFile.path,"onUpdate:value":l[4]||(l[4]=n=>e.newFile.path=n),placeholder:"例如 README.md 或 src/main.kt"},null,8,["value"])]),_:1}),t(F,{label:"初始内容(可选)"},{default:a(()=>[t(D,{value:e.newFile.content,"onUpdate:value":l[5]||(l[5]=n=>e.newFile.content=n),rows:6,placeholder:"留空创建空文件"},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"]),_(" Sub-phase 7.3: Create folder modal "),t(A,{open:e.createFolderOpen,"onUpdate:open":l[8]||(l[8]=n=>e.createFolderOpen=n),title:"新建文件夹","confirm-loading":e.creatingFolder,"ok-text":"创建","cancel-text":"取消",onOk:e.onCreateFolder},{default:a(()=>[t(j,{layout:"vertical"},{default:a(()=>[t(F,{label:"文件夹路径(项目内)",required:""},{default:a(()=>[t(T,{value:e.newFolder.path,"onUpdate:value":l[7]||(l[7]=n=>e.newFolder.path=n),placeholder:"例如 src/utils"},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"]),_(" Sub-phase 7.3: Edit file content modal "),t(A,{open:e.editFileOpen,"onUpdate:open":l[10]||(l[10]=n=>e.editFileOpen=n),title:`编辑 ${e.editingFile?.file_name||""}`,"confirm-loading":e.savingFile,"ok-text":"保存","cancel-text":"取消",onOk:e.onSaveFile,width:"720"},{default:a(()=>[t(D,{value:e.editFileContent,"onUpdate:value":l[9]||(l[9]=n=>e.editFileContent=n),rows:18,"auto-size":{minRows:12,maxRows:24},style:{"font-family":"monospace"}},null,8,["value"])]),_:1},8,["open","title","confirm-loading"]),_(" Create modal "),t(A,{open:e.createOpen,"onUpdate:open":l[15]||(l[15]=n=>e.createOpen=n),title:"新建项目","confirm-loading":e.creating,"ok-text":"创建","cancel-text":"取消",onOk:e.onCreate},{default:a(()=>[t(j,{layout:"vertical"},{default:a(()=>[t(F,{label:"项目名称",required:""},{default:a(()=>[t(T,{value:e.newProject.name,"onUpdate:value":l[11]||(l[11]=n=>e.newProject.name=n),placeholder:"例如:旅行计划-上海"},null,8,["value"])]),_:1}),t(F,{label:"描述"},{default:a(()=>[t(D,{value:e.newProject.description,"onUpdate:value":l[12]||(l[12]=n=>e.newProject.description=n),rows:2},null,8,["value"])]),_:1}),t(F,{label:"类型"},{default:a(()=>[t(R,{value:e.newProject.type,"onUpdate:value":l[13]||(l[13]=n=>e.newProject.type=n)},{default:a(()=>[t(m,{value:"document"},{default:a(()=>[...l[32]||(l[32]=[r("文档 (document)",-1)])]),_:1}),t(m,{value:"data"},{default:a(()=>[...l[33]||(l[33]=[r("数据 (data)",-1)])]),_:1}),t(m,{value:"web"},{default:a(()=>[...l[34]||(l[34]=[r("Web",-1)])]),_:1}),t(m,{value:"app"},{default:a(()=>[...l[35]||(l[35]=[r("应用 (app)",-1)])]),_:1}),t(m,{value:"presentation"},{default:a(()=>[...l[36]||(l[36]=[r("演示文稿",-1)])]),_:1}),t(m,{value:"spreadsheet"},{default:a(()=>[...l[37]||(l[37]=[r("表格",-1)])]),_:1}),t(m,{value:"design"},{default:a(()=>[...l[38]||(l[38]=[r("设计",-1)])]),_:1}),t(m,{value:"code"},{default:a(()=>[...l[39]||(l[39]=[r("代码",-1)])]),_:1}),t(m,{value:"workflow"},{default:a(()=>[...l[40]||(l[40]=[r("工作流",-1)])]),_:1}),t(m,{value:"knowledge"},{default:a(()=>[...l[41]||(l[41]=[r("知识库",-1)])]),_:1})]),_:1},8,["value"])]),_:1}),t(F,{label:"根路径 (可选)"},{default:a(()=>[t(T,{value:e.newProject.rootPath,"onUpdate:value":l[14]||(l[14]=n=>e.newProject.rootPath=n),placeholder:"留空则仅元数据"},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"])])}const Je=we(Pe,[["render",Le],["__scopeId","data-v-019ac5aa"],["__file","/tmp/cc-web-panel-j3HnbJ/repo/packages/web-panel/src/views/Projects.vue"]]);export{Je as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.providers-grid[data-v-64155d06]{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:12px}.provider-card[data-v-64155d06]{border:1px solid var(--border-color)!important;transition:border-color .2s}.provider-card[data-v-64155d06]:hover{border-color:var(--text-muted)!important}.provider-card.active[data-v-64155d06]{border-color:#52c41a!important;background:#29a27014!important}.section-title[data-v-64155d06]{color:var(--text-primary, #ccc);font-size:16px;font-weight:500;margin:0}.config-card[data-v-64155d06]{border-radius:8px}.config-card[data-v-64155d06] .ant-card-body{padding:24px}.config-form[data-v-64155d06] .ant-form-item-label>label{color:var(--text-secondary, #aaa);font-size:13px}.config-form[data-v-64155d06] .ant-input,.config-form[data-v-64155d06] .ant-input-password input,.config-form[data-v-64155d06] .ant-input-number,.config-form[data-v-64155d06] .ant-select-selector{background:var(--bg-card-hover, #1a1a1a)!important;border-color:var(--border-color, #333)!important;color:var(--text-primary, #e0e0e0)!important}.config-form[data-v-64155d06] .ant-input::placeholder,.config-form[data-v-64155d06] .ant-input-password input::placeholder{color:var(--text-muted, #555)!important}.config-form[data-v-64155d06] .ant-input-number-input,.config-form[data-v-64155d06] .ant-select-selection-item{color:var(--text-primary, #e0e0e0)!important}.config-form[data-v-64155d06] .ant-select-arrow{color:var(--text-muted, #555)}.config-form[data-v-64155d06] .ant-slider-rail{background:var(--border-color, #333)}.config-form[data-v-64155d06] .ant-slider-track{background:#1890ff}.config-form[data-v-64155d06] .ant-slider-handle{border-color:#1890ff}.config-form[data-v-64155d06] .ant-input-password-icon{color:var(--text-muted, #555)}.config-grid[data-v-64155d06]{display:grid;grid-template-columns:repeat(2,1fr);gap:0 24px}@media(max-width:640px){.config-grid[data-v-64155d06]{grid-template-columns:1fr}}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{E as H,r as w,I as p,J as F,U as d,c as i,K as l,V as v,S as U,F as O,Z as N,o as A,a as I,P as g,Q as x,R as K,_ as q}from"./vendor-Bn1JzzAn.js";import{u as M,_ as W,d as _}from"./index-k7QsBwyo.js";import{a as D,b as J,c as j}from"./parsers-YNLm7sQ0.js";import{R as Q}from"./icons-DG5UD-6K.js";const B=H("providers",()=>{const k=w(!1),o=w(null),c=w([]),e=w([]),h=w(null);async function C(){const s=M();k.value=!0;try{const{output:f}=await s.execute("llm providers",15e3);c.value=D(f);const u=c.value.find(P=>P.active);u&&(h.value=u.name);const{output:b}=await s.execute("llm models",15e3);e.value=J(b)}catch(f){console.error("Failed to load providers:",f)}finally{k.value=!1}}async function y(s){await M().execute(`llm switch ${s}`,1e4),c.value.forEach(u=>u.active=u.name===s),h.value=s}async function t(s){const f=M();o.value=s;try{const{output:u,exitCode:b}=await f.execute("llm test",3e4),P=c.value.find(L=>L.name===s);return P&&(P.status=b===0?"ok":"error"),b===0}catch{const u=c.value.find(b=>b.name===s);return u&&(u.status="error"),!1}finally{o.value=null}}return{loading:k,testing:o,providers:c,localModels:e,activeProvider:h,loadProviders:C,switchProvider:y,testProvider:t}});async function E(k,o){if(!k||typeof k.sendRaw!="function")throw new Error("WebSocket configuration API is unavailable");if(typeof o!="string"||o.length===0)throw new Error("API Key cannot be empty");const c=await k.sendRaw({type:"config-set-secret",key:"llm.apiKey",value:o},15e3);if(c?.success!==!0)throw new Error(c?.message||"API Key save failed");return c}const Z={__name:"Providers",setup(k,{expose:o}){o();const c=B(),e=M(),h=w(!1),C=w(!1),y=w(!1),t=I({provider:void 0,model:"",apiKey:"",baseUrl:"",temperature:.7,maxTokens:4096});let s={};const f=["ollama","openai","anthropic","volcengine","deepseek","gemini","groq","mistral","custom","zhipu"],u={ollama:"Ollama(本地)",openai:"OpenAI",anthropic:"Anthropic",volcengine:"火山引擎(豆包)",deepseek:"DeepSeek",gemini:"Google Gemini",groq:"Groq",mistral:"Mistral",custom:"Custom(自定义)",zhipu:"智谱 AI"},b=f.map(n=>({value:n,label:u[n]||n}));async function P(n){try{await c.switchProvider(n),_.success(`已切换到 ${n}`)}catch(a){_.error(`切换失败: ${a.message}`)}}async function L(n){await c.testProvider(n)?_.success(`${n} 连接正常`):_.warning(`${n} 连接失败,请检查配置`)}async function z(){h.value=!0;try{const{output:n}=await e.execute("config list",15e3),a=j(n);a.provider&&(t.provider=a.provider),a.model&&(t.model=a.model),a.apiKey&&(t.apiKey=a.apiKey),a.baseUrl&&(t.baseUrl=a.baseUrl),a.temperature!==void 0&&(t.temperature=a.temperature),a.maxTokens!==void 0&&(t.maxTokens=a.maxTokens),s={provider:a.provider??"",model:a.model??"",apiKey:a.apiKey??"",baseUrl:a.baseUrl??"",temperature:a.temperature??t.temperature,maxTokens:a.maxTokens??t.maxTokens},_.success("配置已加载")}catch(n){_.error(`加载配置失败: ${n.message}`)}finally{h.value=!1}}async function R(){C.value=!0;const n=[],a=[];try{if(t.provider&&t.provider!==s.provider)try{await e.execute(`config set llm.provider ${t.provider}`,1e4),a.push("provider")}catch(m){n.push(`provider: ${m.message}`)}if(t.model&&t.model!==s.model)try{await e.execute(`config set llm.model ${t.model}`,1e4),a.push("model")}catch(m){n.push(`model: ${m.message}`)}if(t.apiKey&&t.apiKey!==s.apiKey)try{await E(e,t.apiKey),a.push("apiKey")}catch(m){n.push(`apiKey: ${m.message}`)}if(t.baseUrl!==void 0&&t.baseUrl!==s.baseUrl)try{await e.execute(`config set llm.baseUrl ${t.baseUrl}`,1e4),a.push("baseUrl")}catch(m){n.push(`baseUrl: ${m.message}`)}if(t.temperature!==s.temperature)try{await e.execute(`config set llm.temperature ${t.temperature}`,1e4),a.push("temperature")}catch(m){n.push(`temperature: ${m.message}`)}if(t.maxTokens!==s.maxTokens)try{await e.execute(`config set llm.maxTokens ${t.maxTokens}`,1e4),a.push("maxTokens")}catch(m){n.push(`maxTokens: ${m.message}`)}n.length>0?_.warning(`部分配置保存失败: ${n.join("; ")}`):a.length>0?(_.success(`已保存 ${a.length} 项配置`),s={...t},(a.includes("apiKey")||a.includes("provider")||a.includes("baseUrl")||a.includes("model"))&&(y.value=!0),a.includes("provider")&&c.loadProviders()):_.info("没有检测到配置变更")}catch(m){_.error(`保存配置失败: ${m.message}`)}finally{C.value=!1}}function S(){t.provider=s.provider||void 0,t.model=s.model||"",t.apiKey=s.apiKey||"",t.baseUrl=s.baseUrl||"",t.temperature=s.temperature??.7,t.maxTokens=s.maxTokens??4096}A(()=>{c.loadProviders(),z()});const T={providersStore:c,ws:e,configLoading:h,configSaving:C,showRestartHint:y,configForm:t,get loadedConfig(){return s},set loadedConfig(n){s=n},knownProviders:f,providerLabels:u,providerOptions:b,switchProvider:P,test:L,loadConfig:z,saveConfig:R,resetForm:S,onMounted:A,reactive:I,ref:w,get ReloadOutlined(){return Q},get message(){return _},get useProvidersStore(){return B},get useWsStore(){return M},get parseLlmConfigOutput(){return j},get saveLlmApiKey(){return E}};return Object.defineProperty(T,"__isScriptSetup",{enumerable:!1,value:!0}),T}},X={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},Y={key:1,style:{"text-align":"center",padding:"60px"}},$={class:"providers-grid"},ee={style:{display:"flex","align-items":"center",gap:"12px","margin-bottom":"12px"}},oe={style:{"font-size":"24px"}},te={style:{flex:"1"}},ae={style:{color:"#e0e0e0","font-weight":"500"}},re={style:{color:"var(--text-secondary)","font-size":"11px","font-family":"monospace"}},se={style:{display:"flex",gap:"8px","justify-content":"flex-end"}},ne={key:0,style:{"margin-top":"24px"}},ie={style:{color:"#ccc","font-family":"monospace","font-size":"13px"}},le={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"16px"}},de={class:"config-grid"},ce={style:{display:"flex","align-items":"center",gap:"12px"}},me={style:{display:"flex",gap:"12px","justify-content":"flex-end","margin-top":"16px"}};function pe(k,o,c,e,h,C){const y=p("a-button"),t=p("a-alert"),s=p("a-spin"),f=p("a-tag"),u=p("a-badge"),b=p("a-card"),P=p("a-list-item"),L=p("a-list"),z=p("a-divider"),R=p("a-select"),S=p("a-form-item"),T=p("a-input"),n=p("a-input-password"),a=p("a-slider"),m=p("a-input-number"),V=p("a-form");return g(),F("div",null,[d("div",X,[o[10]||(o[10]=d("div",null,[d("h2",{class:"page-title"},"LLM 配置"),d("p",{class:"page-sub"},"管理 AI 服务提供商")],-1)),i(y,{type:"primary",ghost:"",loading:e.providersStore.loading,onClick:o[0]||(o[0]=r=>e.providersStore.loadProviders())},{icon:l(()=>[i(e.ReloadOutlined)]),default:l(()=>[o[9]||(o[9]=x(" 刷新 ",-1))]),_:1},8,["loading"])]),v(" Active Provider Banner "),e.providersStore.activeProvider?(g(),U(t,{key:0,type:"success",style:{"margin-bottom":"20px",background:"rgba(41,162,112,.08)","border-color":"rgba(41,162,112,.3)"},"show-icon":""},{message:l(()=>[d("span",null,[o[11]||(o[11]=x("当前激活:",-1)),d("strong",null,K(e.providersStore.activeProvider),1)])]),_:1})):v("v-if",!0),v(" Loading "),e.providersStore.loading?(g(),F("div",Y,[i(s,{size:"large"}),o[12]||(o[12]=d("div",{style:{color:"var(--text-muted)","margin-top":"12px"}},"加载 LLM 信息中...",-1))])):(g(),F(O,{key:2},[v(" Providers Grid "),d("div",null,[d("div",$,[(g(!0),F(O,null,N(e.providersStore.providers,r=>(g(),U(b,{key:r.name,class:q(["provider-card",{active:r.active}]),style:{background:"var(--bg-card)"},size:"small"},{default:l(()=>[d("div",ee,[d("span",oe,K(r.icon),1),d("div",te,[d("div",ae,K(r.label),1),d("div",re,K(r.name),1)]),d("div",null,[r.active?(g(),U(f,{key:0,color:"green"},{default:l(()=>[...o[13]||(o[13]=[x("活跃",-1)])]),_:1})):r.status==="ok"?(g(),U(u,{key:1,status:"success",text:""})):r.status==="error"?(g(),U(u,{key:2,status:"error",text:""})):v("v-if",!0)])]),d("div",se,[i(y,{size:"small",style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"},loading:e.providersStore.testing===r.name,onClick:G=>e.test(r.name)},{default:l(()=>[...o[14]||(o[14]=[x(" 测试 ",-1)])]),_:1},8,["loading","onClick"]),r.active?(g(),U(f,{key:1,color:"green",style:{margin:"0","line-height":"24px"}},{default:l(()=>[...o[16]||(o[16]=[x("当前",-1)])]),_:1})):(g(),U(y,{key:0,size:"small",type:"primary",ghost:"",onClick:G=>e.switchProvider(r.name)},{default:l(()=>[...o[15]||(o[15]=[x(" 切换 ",-1)])]),_:1},8,["onClick"]))])]),_:2},1032,["class"]))),128))]),v(" Local Models (Ollama) "),e.providersStore.localModels.length?(g(),F("div",ne,[o[17]||(o[17]=d("h3",{style:{color:"#ccc","font-size":"15px","margin-bottom":"12px"}}," 本地模型(Ollama) ",-1)),i(L,{"data-source":e.providersStore.localModels,size:"small",style:{background:"var(--bg-card)","border-radius":"8px",border:"1px solid var(--border-color)"}},{renderItem:l(({item:r})=>[i(P,{style:{padding:"10px 16px","border-color":"#252525"}},{actions:l(()=>[i(f,{color:"cyan",style:{"font-size":"10px"}},{default:l(()=>[x(K(r.size||"local"),1)]),_:2},1024)]),default:l(()=>[d("span",ie,K(r.name),1)]),_:2},1024)]),_:1},8,["data-source"])])):v("v-if",!0),v(" LLM Parameter Settings "),i(z,{style:{"border-color":"var(--border-color)",margin:"32px 0 24px"}}),e.showRestartHint?(g(),U(t,{key:1,type:"warning","show-icon":"",closable:"",style:{"margin-bottom":"16px"},message:"配置已保存,但当前聊天会话仍在用旧 key",description:"桌面端的 LLM 会话只在新建会话时重读配置。请新建一个 Chat,或重启应用,新 key/Provider 才会生效。",onClose:o[1]||(o[1]=r=>e.showRestartHint=!1)})):v("v-if",!0),d("div",le,[o[19]||(o[19]=d("h3",{class:"section-title"},"LLM 参数设置",-1)),i(y,{size:"small",loading:e.configLoading,onClick:e.loadConfig,style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:l(()=>[i(e.ReloadOutlined)]),default:l(()=>[o[18]||(o[18]=x(" 加载配置 ",-1))]),_:1},8,["loading"])]),i(b,{class:"config-card",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:l(()=>[i(V,{model:e.configForm,layout:"vertical",class:"config-form"},{default:l(()=>[d("div",de,[v(" Provider "),i(S,{label:"Provider(提供商)"},{default:l(()=>[i(R,{value:e.configForm.provider,"onUpdate:value":o[2]||(o[2]=r=>e.configForm.provider=r),placeholder:"选择 LLM 提供商",options:e.providerOptions,style:{width:"100%"},disabled:e.configSaving},null,8,["value","options","disabled"])]),_:1}),v(" Model "),i(S,{label:"Model(模型名称)"},{default:l(()=>[i(T,{value:e.configForm.model,"onUpdate:value":o[3]||(o[3]=r=>e.configForm.model=r),placeholder:"例如 doubao-seed-1-6-251015","allow-clear":"",disabled:e.configSaving},null,8,["value","disabled"])]),_:1}),v(" API Key "),i(S,{label:"API Key"},{default:l(()=>[i(n,{value:e.configForm.apiKey,"onUpdate:value":o[4]||(o[4]=r=>e.configForm.apiKey=r),placeholder:"输入 API Key",disabled:e.configSaving},null,8,["value","disabled"])]),_:1}),v(" Base URL "),i(S,{label:"Base URL"},{default:l(()=>[i(T,{value:e.configForm.baseUrl,"onUpdate:value":o[5]||(o[5]=r=>e.configForm.baseUrl=r),placeholder:"例如 https://ark.cn-beijing.volces.com/api/v3","allow-clear":"",disabled:e.configSaving},null,8,["value","disabled"])]),_:1}),v(" Temperature "),i(S,{label:"Temperature(温度)"},{default:l(()=>[d("div",ce,[i(a,{value:e.configForm.temperature,"onUpdate:value":o[6]||(o[6]=r=>e.configForm.temperature=r),min:0,max:2,step:.1,style:{flex:"1"},disabled:e.configSaving},null,8,["value","disabled"]),i(m,{value:e.configForm.temperature,"onUpdate:value":o[7]||(o[7]=r=>e.configForm.temperature=r),min:0,max:2,step:.1,precision:1,style:{width:"80px"},disabled:e.configSaving},null,8,["value","disabled"])])]),_:1}),v(" Max Tokens "),i(S,{label:"Max Tokens(最大输出长度)"},{default:l(()=>[i(m,{value:e.configForm.maxTokens,"onUpdate:value":o[8]||(o[8]=r=>e.configForm.maxTokens=r),min:256,max:128e3,step:256,style:{width:"100%"},placeholder:"4096",disabled:e.configSaving},null,8,["value","disabled"])]),_:1})]),d("div",me,[i(y,{onClick:e.resetForm,disabled:e.configSaving,style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{default:l(()=>[...o[20]||(o[20]=[x(" 重置 ",-1)])]),_:1},8,["disabled"]),i(y,{type:"primary",loading:e.configSaving,onClick:e.saveConfig},{default:l(()=>[...o[21]||(o[21]=[x(" 保存配置 ",-1)])]),_:1},8,["loading"])])]),_:1},8,["model"])]),_:1})])],2112))])}const ye=W(Z,[["render",pe],["__scopeId","data-v-64155d06"],["__file","/tmp/cc-web-panel-j3HnbJ/repo/packages/web-panel/src/views/Providers.vue"]]);export{ye as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.scanner-wrap[data-v-8294c99d]{display:flex;flex-direction:column}.video-frame[data-v-8294c99d]{position:relative;width:100%;aspect-ratio:4 / 3;background:#000;border-radius:8px;overflow:hidden}.video-frame video[data-v-8294c99d]{width:100%;height:100%;object-fit:cover}.overlay[data-v-8294c99d]{position:absolute;inset:0;display:flex;align-items:flex-end;justify-content:center;pointer-events:none}.overlay .hint[data-v-8294c99d]{background:#0009;color:#fff;padding:6px 12px;border-radius:4px;font-size:12px;margin-bottom:16px}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{I as w,J as p,U as b,R as l,c as k,K as d,S,V as v,f as B,r as h,P as s,a1 as Q,a2 as T,Q as A}from"./vendor-Bn1JzzAn.js";import{u as K,_ as N,b as V}from"./index-k7QsBwyo.js";import{b as U,f as j,S as I,am as L}from"./icons-DG5UD-6K.js";function F(){const n=[];let t=null,f=!1,e=null;return{push(o){if(n.push(o),t){const a=t;t=null,a()}},finish(o){if(f=!0,e=o||null,t){const a=t;t=null,a()}},async*iterate(){for(;;){for(;n.length>0;)yield n.shift();if(f){if(e)throw e;return}await new Promise(o=>{t=o})}}}}function D(){const n=K();function t(e){if(!e||!Array.isArray(e.messages))throw new Error("messages array is required");const o=F(),a=new AbortController;e.signal&&(e.signal.aborted?a.abort(e.signal.reason):e.signal.addEventListener("abort",()=>a.abort(e.signal.reason),{once:!0}));const i=n.sendStream({type:"llm.chat",messages:e.messages,options:e.options||{}},{onChunk:r=>o.push(r),onStatus:e.onStatus,idleMs:e.idleMs??21e4,followServerTimeout:e.idleMs==null,signal:a.signal}).then(r=>(o.finish(null),r),r=>{throw o.finish(r),r});function c(){a.signal.aborted||a.abort(new Error("aborted"))}return{stream:o.iterate(),result:i,cancel:c}}async function f(e){const o=typeof e.onDelta=="function"?e.onDelta:()=>{},{stream:a,result:i}=t(e);try{for await(const c of a)o(c)}catch{}return i}return{chat:t,chatTo:f}}const J={__name:"QuickAsk",setup(n,{expose:t}){t();const f=D(),{t:e}=V(),o=h(""),a=h(""),i=h(""),c=h(!1),r=h(""),y=h(null),_=h("");let m=null;async function C(){if(!(c.value||!o.value.trim())){c.value=!0,i.value="",r.value="",y.value=null,_.value="";try{const g=[{role:"user",content:o.value}],z={},P=a.value.trim();P&&(z.model=P);const x=f.chat({messages:g,options:z,onStatus:u=>{u?.stage==="waiting"&&(_.value=e("quickAsk.waitingForProvider",{provider:u.provider||"",model:u.model||"",seconds:Math.ceil((u.timeoutMs||18e4)/1e3)}))}});m=x;try{for await(const u of x.stream)u?.content?i.value=u.content:u?.delta&&(i.value+=u.delta)}catch{}const q=await x.result;y.value={model:q?.model||null,tokens:q?.tokens??null},!i.value&&q?.message?.content&&(i.value=q.message.content)}catch(g){r.value=g?.message||String(g)}finally{c.value=!1,m=null}}}function O(){m?.cancel&&m.cancel()}function E(){i.value="",r.value="",y.value=null}B(O);const M={llm:f,t:e,prompt:o,model:a,answer:i,running:c,error:r,finalMeta:y,waitingStatus:_,get activeChat(){return m},set activeChat(g){m=g},run:C,cancel:O,reset:E,ref:h,onBeforeUnmount:B,get useI18n(){return V},get SendOutlined(){return L},get SyncOutlined(){return I},get CheckCircleOutlined(){return j},get CloseOutlined(){return U},get useLlmChat(){return D}};return Object.defineProperty(M,"__isScriptSetup",{enumerable:!1,value:!0}),M}},H={style:{"margin-bottom":"24px"}},R={class:"page-title"},W={class:"page-sub"},G={style:{display:"flex","justify-content":"space-between","align-items":"center","margin-top":"12px"}},X={style:{display:"flex",gap:"8px","align-items":"center",color:"var(--text-muted)","font-size":"11px"}},Y={key:0},Z={key:1},$={key:2},ee={key:0,style:{color:"#1677ff","font-size":"11px"}},ne={key:1,style:{color:"#52c41a","font-size":"11px"}},te={key:0,style:{margin:"0","white-space":"pre-wrap","font-family":"var(--font-body, system-ui)","font-size":"13px"}},oe={key:2,style:{background:"#2a1517",border:"1px solid #5c2426",padding:"8px","border-radius":"4px","margin-top":"8px"}},ae={style:{color:"#ff7875","font-size":"11px",margin:"0","white-space":"pre-wrap"}};function re(n,t,f,e,o,a){const i=w("a-textarea"),c=w("a-input"),r=w("a-button"),y=w("a-space"),_=w("a-card"),m=w("a-empty");return s(),p("div",null,[b("div",H,[b("h2",R,l(n.$t("quickAsk.title")),1),b("p",W,l(n.$t("quickAsk.subtitle")),1)]),k(_,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:d(()=>[k(i,{value:e.prompt,"onUpdate:value":t[0]||(t[0]=C=>e.prompt=C),rows:4,placeholder:n.$t("quickAsk.promptPlaceholder"),disabled:e.running,onKeydown:[Q(T(e.run,["ctrl","prevent"]),["enter"]),Q(T(e.run,["meta","prevent"]),["enter"])]},null,8,["value","placeholder","disabled","onKeydown"]),b("div",G,[b("div",X,[k(c,{value:e.model,"onUpdate:value":t[1]||(t[1]=C=>e.model=C),placeholder:n.$t("quickAsk.modelPlaceholder"),size:"small",style:{width:"200px"},disabled:e.running,"allow-clear":""},null,8,["value","placeholder","disabled"]),e.answer?(s(),p("span",Y,l(e.answer.length)+" "+l(n.$t("quickAsk.charsSuffix")),1)):v("v-if",!0),e.finalMeta?(s(),p("span",Z,"· "+l(e.finalMeta.tokens??0)+" "+l(n.$t("quickAsk.tokensSuffix")),1)):v("v-if",!0),e.finalMeta?.model?(s(),p("span",$,"· "+l(e.finalMeta.model),1)):v("v-if",!0)]),k(y,null,{default:d(()=>[e.answer||e.error?(s(),S(r,{key:0,disabled:e.running,onClick:e.reset},{default:d(()=>[A(l(n.$t("quickAsk.clear")),1)]),_:1},8,["disabled"])):v("v-if",!0),e.running?(s(),S(r,{key:1,danger:"",onClick:e.cancel},{icon:d(()=>[k(e.CloseOutlined)]),default:d(()=>[A(" "+l(n.$t("quickAsk.cancel")),1)]),_:1})):(s(),S(r,{key:2,type:"primary",disabled:!e.prompt.trim(),onClick:e.run},{icon:d(()=>[k(e.SendOutlined)]),default:d(()=>[A(" "+l(n.$t("quickAsk.send")),1)]),_:1},8,["disabled"]))]),_:1})])]),_:1}),e.answer||e.running||e.error?(s(),S(_,{key:0,title:n.$t("quickAsk.answerCardTitle"),style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-top":"16px"}},{extra:d(()=>[e.running?(s(),p("span",ee,[k(e.SyncOutlined,{spin:!0}),A(" "+l(n.$t("quickAsk.streaming")),1)])):e.finalMeta?(s(),p("span",ne,[k(e.CheckCircleOutlined),A(" "+l(n.$t("quickAsk.done")),1)])):v("v-if",!0)]),default:d(()=>[e.answer?(s(),p("pre",te,l(e.answer),1)):e.running?(s(),S(m,{key:1,description:e.waitingStatus||n.$t("quickAsk.waitingFirstToken")},null,8,["description"])):v("v-if",!0),e.error?(s(),p("div",oe,[b("pre",ae,l(e.error),1)])):v("v-if",!0)]),_:1},8,["title"])):v("v-if",!0)])}const ce=N(J,[["render",re],["__file","/tmp/cc-web-panel-j3HnbJ/repo/packages/web-panel/src/views/QuickAsk.vue"]]);export{ce as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{I as y,J as _,U as b,R as i,c as n,K as r,V as u,o as ce,a as de,b as K,r as h,P as d,Q as p,S as k,F as A,Z as Q,$ as Pe}from"./vendor-Bn1JzzAn.js";import{t as W,_ as Ae,b as me,u as ue,E as fe,d as g}from"./index-k7QsBwyo.js";import{p as Ue,aW as ze,aB as Re,aU as Ee,aX as Me,l as je,al as Ne,aQ as Je,R as De}from"./icons-DG5UD-6K.js";const Le=Object.freeze(["note","post","article","document"]),Be=Object.freeze(["pending","viewed","dismissed"]);function T(l,a=0){return typeof l=="number"&&Number.isFinite(l)?l:a}function pe(l){if(!l||typeof l!="object"||Array.isArray(l))return{};const a={};for(const[t,e]of Object.entries(l))typeof e=="number"&&Number.isFinite(e)&&(a[t]=e);return a}function We(l,a=0){if(!l||typeof l!="object")return null;const t=l.user_id??l.userId??"";if(!t)return null;const e=l.topics&&typeof l.topics=="object"&&!Array.isArray(l.topics)?pe(l.topics):{},z=l.interaction_weights??l.interactionWeights,M=z&&typeof z=="object"&&!Array.isArray(z)?pe(z):{};return{key:t,id:String(l.id||""),userId:t,topics:e,topicCount:Object.keys(e).length,interactionWeights:M,decayFactor:T(l.decay_factor??l.decayFactor,.9),lastUpdated:l.last_updated??l.lastUpdated??null,updateCount:T(l.update_count??l.updateCount,0),_idx:a}}function ye(l){const a=W(l);return Array.isArray(a)?a.map(We).filter(Boolean):[]}function Ye(l,a=0){if(!l||typeof l!="object")return null;const t=l.id||"";return t?{key:t,id:t,userId:l.user_id??l.userId??"",contentId:l.content_id??l.contentId??"",contentType:String(l.content_type??l.contentType??"note").toLowerCase(),title:String(l.title||""),score:T(l.score,0),reason:String(l.reason||""),source:String(l.source||"heuristic"),status:String(l.status||"pending").toLowerCase(),feedback:l.feedback??null,createdAt:l.created_at??l.createdAt??null,viewedAt:l.viewed_at??l.viewedAt??null,_idx:a}:null}function ge(l){const a=W(l);return Array.isArray(a)?a.map(Ye).filter(Boolean):[]}const Ge={total:0,pending:0,viewed:0,dismissed:0,feedbackCount:0,feedbackRate:0,avgScore:0};function _e(l){const a={...Ge},t=W(l);return!t||typeof t!="object"||Array.isArray(t)||(a.total=T(t.total,0),a.pending=T(t.pending,0),a.viewed=T(t.viewed,0),a.dismissed=T(t.dismissed,0),a.feedbackCount=T(t.feedbackCount,0),a.feedbackRate=T(t.feedbackRate,0),a.avgScore=T(t.avgScore,0)),a}function ve(l){const a=W(l);return Array.isArray(a)?a.filter(t=>t&&typeof t=="object"&&typeof t.topic=="string").map((t,e)=>({key:`${t.topic}-${e}`,topic:t.topic,weight:T(t.weight,0)})):[]}function ke(l){const a=W(l);return Array.isArray(a)?a.filter(t=>t&&typeof t=="object"&&typeof t.topic=="string"&&typeof t.action=="string").map((t,e)=>({key:`${t.topic}-${e}`,topic:t.topic,action:t.action,amount:T(t.amount,0)})):[]}function E(l){const a=W(l);return!a||typeof a!="object"||Array.isArray(a)?{ok:!1,reason:"",profileId:null,topicCount:null}:{ok:!!(a.updated||a.deleted||a.marked||a.dismissed||a.recorded||a.applied||a.profileId),reason:a.reason?String(a.reason):"",profileId:a.profileId?String(a.profileId):null,topicCount:typeof a.topicCount=="number"?a.topicCount:null}}function Ve(l){if(l==null||l==="")return"—";const a=typeof l=="number"?new Date(l):new Date(String(l));return isNaN(a.getTime())?String(l):a.toLocaleString("zh-CN",{hour12:!1})}const Ke={__name:"Recommend",setup(l,{expose:a}){a();const{t}=me(),e=ue(),z=fe.PRESENTED_IMAGE_SIMPLE,M=h(!1),w=h(!1),Y=h(!1),j=h([]),S=h([]),O=h({total:0,pending:0,viewed:0,dismissed:0,feedbackCount:0,feedbackRate:0,avgScore:0}),I=h([]),F=h([]),v=h(null),U=h("recs"),N=h(""),P=h(""),J=h(!1),D=h(!1),x=de({userId:"",topicsJson:"",weightsJson:""}),q=h(null),H=K(()=>j.value.map(o=>({value:o.userId,label:`${o.userId} (${t("recommend.userBar.topicSuffix",{count:o.topicCount})})`}))),X=K(()=>[{title:t("recommend.recColumns.title"),key:"title"},{title:t("recommend.recColumns.contentType"),key:"contentType",width:"110px"},{title:t("recommend.recColumns.score"),key:"score",width:"180px"},{title:t("recommend.recColumns.reason"),key:"reason",width:"220px"},{title:t("recommend.recColumns.status"),key:"status",width:"100px"},{title:t("recommend.recColumns.feedback"),key:"feedback",width:"90px"},{title:t("recommend.recColumns.action"),key:"action",width:"210px"}]),G=K(()=>[{title:t("recommend.profileColumns.userId"),key:"userId"},{title:t("recommend.profileColumns.topicCount"),key:"topicCount",width:"110px"},{title:t("recommend.profileColumns.decayFactor"),key:"decayFactor",width:"110px"},{title:t("recommend.profileColumns.updateCount"),key:"updateCount",width:"110px"},{title:t("recommend.profileColumns.lastUpdated"),key:"lastUpdated",width:"180px"},{title:t("recommend.profileColumns.action"),key:"action",width:"200px"}]),ee=K(()=>{let o=S.value;return N.value&&(o=o.filter(c=>c.status===N.value)),P.value&&(o=o.filter(c=>c.contentType===P.value)),o});function te(o){const c=`recommend.type.${o}`,f=t(c);return f===c?o:f}function oe(o){return{note:"blue",post:"green",article:"purple",document:"orange"}[o]||"default"}function re(o){return{note:"#1677ff",post:"#52c41a",article:"#722ed1",document:"#fa8c16"}[o]||"#888"}function V(o){const c=`recommend.status.${o}`,f=t(c);return f===c?o:f}function Z(o){return{pending:"processing",viewed:"green",dismissed:"default"}[o]||"default"}function ne(o){const c=`recommend.feedbackLabel.${o}`,f=t(c);return f===c?o:f}function $(o){return{like:"green",dislike:"red",later:"gold"}[o]||"default"}function R(o){return o>=.7?"#52c41a":o>=.4?"#1677ff":o>=.2?"#faad14":"#ff4d4f"}function ae(o){return o>=.7?"#52c41a":o>=.4?"#1677ff":o>=.2?"#faad14":"#888"}function s(o){try{return JSON.stringify(o,null,2)}catch{return String(o)}}async function m(){M.value=!0;try{const{output:o}=await e.execute("recommend profiles --json",1e4).catch(()=>({output:""}));j.value=ye(o),v.value&&!j.value.find(c=>c.userId===v.value)&&(v.value=null),v.value&&await C()}catch(o){g.error(t("recommend.messages.loadProfilesFailed",{err:o?.message||o}))}finally{M.value=!1}}async function C(){if(!v.value){S.value=[],O.value={total:0,pending:0,viewed:0,dismissed:0,feedbackCount:0,feedbackRate:0,avgScore:0},I.value=[];return}w.value=!0;try{const o=L(v.value),[c,f,B]=await Promise.all([e.execute(`recommend list ${o} --limit 200 --json`,1e4).catch(()=>({output:""})),e.execute(`recommend stats ${o} --json`,8e3).catch(()=>({output:""})),e.execute(`recommend top-interests ${o} --limit 30 --json`,8e3).catch(()=>({output:""}))]);S.value=ge(c.output),O.value=_e(f.output),I.value=ve(B.output)}catch(o){g.error(t("recommend.messages.loadUserFailed",{err:o?.message||o}))}finally{w.value=!1}}function L(o){return`"${String(o).replace(/"/g,'\\"')}"`}function be(){F.value=[],C()}function xe(o){v.value=o,U.value="recs",C()}async function he(){if(!x.userId.trim()){g.warning(t("recommend.messages.userIdRequired"));return}if(x.topicsJson.trim())try{JSON.parse(x.topicsJson)}catch{g.warning(t("recommend.messages.topicsJsonInvalid"));return}if(x.weightsJson.trim())try{JSON.parse(x.weightsJson)}catch{g.warning(t("recommend.messages.weightsJsonInvalid"));return}Y.value=!0;try{const o=[`recommend create-profile ${L(x.userId.trim())}`];x.topicsJson.trim()&&o.push(`-t ${se(x.topicsJson.trim())}`),x.weightsJson.trim()&&o.push(`-w ${se(x.weightsJson.trim())}`),o.push("--json");const{output:c}=await e.execute(o.join(" "),1e4),f=E(c);if(!f.ok){g.error(t("recommend.messages.createFailed",{err:f.reason||c.slice(0,120)}));return}g.success(t("recommend.messages.createOk",{id:f.profileId?.slice(0,8)||""})),J.value=!1;const B=x.userId.trim();le(),await m(),v.value=B,await C()}catch(o){g.error(t("recommend.messages.createFailed",{err:o?.message||o}))}finally{Y.value=!1}}function se(o){return`'${String(o).replace(/'/g,"'\\''")}'`}async function Ce(){if(v.value)try{const{output:o}=await e.execute(`recommend decay ${L(v.value)} --json`,8e3),c=E(o);if(!c.ok){g.error(t("recommend.messages.decayFailed",{err:c.reason||o.slice(0,120)}));return}g.success(c.topicCount!==null?t("recommend.messages.decayOkTopics",{count:c.topicCount}):t("recommend.messages.decayOk")),await m()}catch(o){g.error(t("recommend.messages.decayFailed",{err:o?.message||o}))}}async function we(){if(v.value)try{const{output:o}=await e.execute(`recommend suggest ${L(v.value)} --json`,8e3);F.value=ke(o),U.value="interests",F.value.length?g.success(t("recommend.messages.suggestFound",{count:F.value.length})):g.info(t("recommend.messages.suggestNone"))}catch(o){g.error(t("recommend.messages.loadSuggestFailed",{err:o?.message||o}))}}async function Se(o){try{const{output:c}=await e.execute(`recommend delete-profile ${L(o.userId)} --json`,8e3),f=E(c);if(!f.ok){g.error(t("recommend.messages.deleteFailed",{err:f.reason||c.slice(0,120)}));return}g.success(t("recommend.messages.deleteOk")),v.value===o.userId&&(v.value=null),await m()}catch(c){g.error(t("recommend.messages.deleteFailed",{err:c?.message||c}))}}function Ie(o){q.value=o,D.value=!0}async function Te(o){try{const{output:c}=await e.execute(`recommend view ${o.id} --json`,8e3),f=E(c);if(!f.ok){g.error(t("recommend.messages.viewFailed",{err:f.reason||c.slice(0,120)}));return}g.success(t("recommend.messages.viewOk")),await C()}catch(c){g.error(t("recommend.messages.viewFailed",{err:c?.message||c}))}}async function Oe(o,c){try{const{output:f}=await e.execute(`recommend feedback ${o.id} ${c} --json`,8e3),B=E(f);if(!B.ok){g.error(t("recommend.messages.feedbackFailed",{err:B.reason||f.slice(0,120)}));return}g.success(t("recommend.messages.feedbackOk")),await C()}catch(f){g.error(t("recommend.messages.feedbackFailed",{err:f?.message||f}))}}async function Fe(o){try{const{output:c}=await e.execute(`recommend dismiss ${o.id} --json`,8e3),f=E(c);if(!f.ok){g.error(t("recommend.messages.dismissFailed",{err:f.reason||c.slice(0,120)}));return}g.success(t("recommend.messages.dismissOk")),await C()}catch(c){g.error(t("recommend.messages.dismissFailed",{err:c?.message||c}))}}function le(){x.userId="",x.topicsJson="",x.weightsJson=""}ce(m);const ie={t,ws:e,EMPTY_IMG:z,loading:M,loadingRecs:w,creating:Y,profiles:j,recs:S,userStats:O,topInterests:I,suggestions:F,selectedUser:v,activeTab:U,statusFilter:N,typeFilter:P,showCreateProfileModal:J,showDetailsModal:D,createForm:x,currentProfile:q,userOptions:H,recColumns:X,profileColumns:G,filteredRecs:ee,typeLabel:te,typeColor:oe,typeBarColor:re,statusLabel:V,statusColor:Z,feedbackLabel:ne,feedbackColor:$,scoreColor:R,weightColor:ae,formatJson:s,loadAll:m,loadUserData:C,encodeArg:L,onUserChange:be,selectAndSwitch:xe,submitCreateProfile:he,shellQuote:se,applyDecay:Ce,loadSuggestions:we,deleteProfile:Se,viewProfileDetails:Ie,markViewed:Te,provideFeedback:Oe,dismissRec:Fe,resetCreateForm:le,ref:h,computed:K,onMounted:ce,reactive:de,get useI18n(){return me},get ReloadOutlined(){return De},get UserAddOutlined(){return Je},get UserOutlined(){return Ne},get FireOutlined(){return je},get EyeInvisibleOutlined(){return Me},get LikeOutlined(){return Ee},get StarOutlined(){return Re},get FieldTimeOutlined(){return ze},get BulbOutlined(){return Ue},get message(){return g},get Empty(){return fe},get useWsStore(){return ue},get parseProfiles(){return ye},get parseRecommendations(){return ge},get parseUserStats(){return _e},get parseTopInterests(){return ve},get parseSuggestions(){return ke},get parseActionResult(){return E},get formatRecommendTime(){return Ve},get CONTENT_TYPE_IDS(){return Le},get RECOMMENDATION_STATUSES(){return Be}};return Object.defineProperty(ie,"__isScriptSetup",{enumerable:!1,value:!0}),ie}},Qe={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},qe={class:"page-title"},He={class:"page-sub"},Xe={style:{display:"flex","align-items":"center",gap:"12px","flex-wrap":"wrap"}},Ze={style:{color:"var(--text-secondary)","font-size":"12px"}},$e={class:"type-name"},et={class:"filter-bar"},tt={style:{color:"var(--text-primary)","font-weight":"500"}},ot={style:{color:"var(--text-muted)","font-size":"11px","margin-top":"2px"}},rt={key:3,style:{color:"var(--text-secondary)","font-size":"12px"}},nt={key:1,style:{color:"var(--text-muted)"}},at={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},st={key:0,style:{color:"var(--text-primary)","font-family":"monospace","font-weight":"500"}},lt={key:2,style:{color:"var(--text-secondary)","font-family":"monospace","font-size":"12px"}},it={key:3,style:{color:"var(--text-secondary)"}},ct={key:4,style:{color:"var(--text-secondary)","font-size":"11px"}},dt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},mt={key:1},ut={class:"interest-topic"},ft={style:{"margin-left":"8px","font-family":"monospace",color:"var(--text-primary)"}},pt={style:{"margin-left":"auto",color:"var(--text-secondary)","font-size":"12px"}},yt={key:0,style:{"padding-top":"8px"}},gt={style:{"font-family":"monospace","font-size":"12px"}},_t={style:{color:"var(--text-primary)","font-size":"13px",margin:"16px 0 8px"}},vt={key:1},kt={class:"interest-topic"},bt={key:2,style:{color:"var(--text-primary)","font-size":"13px",margin:"16px 0 8px"}},xt={key:3,class:"weights-pre"};function ht(l,a,t,e,z,M){const w=y("a-button"),Y=y("a-space"),j=y("a-select"),S=y("a-card"),O=y("a-statistic"),I=y("a-col"),F=y("a-row"),v=y("a-tag"),U=y("a-radio-button"),N=y("a-radio-group"),P=y("a-empty"),J=y("a-progress"),D=y("a-menu-item"),x=y("a-menu"),q=y("a-dropdown"),H=y("a-popconfirm"),X=y("a-table"),G=y("a-tab-pane"),ee=y("a-list-item"),te=y("a-list"),oe=y("a-tabs"),re=y("a-input"),V=y("a-form-item"),Z=y("a-textarea"),ne=y("a-form"),$=y("a-modal"),R=y("a-descriptions-item"),ae=y("a-descriptions");return d(),_("div",null,[b("div",Qe,[b("div",null,[b("h2",qe,i(e.t("recommend.title")),1),b("p",He,i(e.t("recommend.subtitle")),1)]),n(Y,null,{default:r(()=>[n(w,{loading:e.loading,onClick:e.loadAll},{icon:r(()=>[n(e.ReloadOutlined)]),default:r(()=>[p(" "+i(e.t("recommend.refresh")),1)]),_:1},8,["loading"]),n(w,{type:"primary",onClick:a[0]||(a[0]=s=>e.showCreateProfileModal=!0)},{icon:r(()=>[n(e.UserAddOutlined)]),default:r(()=>[p(" "+i(e.t("recommend.createProfile")),1)]),_:1})]),_:1})]),u(" User selector "),n(S,{size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"},"body-style":{padding:"10px 16px"}},{default:r(()=>[b("div",Xe,[b("span",Ze,i(e.t("recommend.userBar.currentUser")),1),n(j,{value:e.selectedUser,"onUpdate:value":a[1]||(a[1]=s=>e.selectedUser=s),options:e.userOptions,placeholder:e.t("recommend.userBar.selectPlaceholder"),style:{"min-width":"280px"},"allow-clear":"","show-search":"",onChange:e.onUserChange},null,8,["value","options","placeholder"]),e.selectedUser?(d(),k(w,{key:0,size:"small",onClick:e.applyDecay},{icon:r(()=>[n(e.FieldTimeOutlined)]),default:r(()=>[p(" "+i(e.t("recommend.userBar.applyDecay")),1)]),_:1})):u("v-if",!0),e.selectedUser?(d(),k(w,{key:1,size:"small",onClick:e.loadSuggestions},{icon:r(()=>[n(e.BulbOutlined)]),default:r(()=>[p(" "+i(e.t("recommend.userBar.suggest")),1)]),_:1})):u("v-if",!0)])]),_:1}),u(" Stat cards "),n(F,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:r(()=>[n(I,{xs:12,sm:8,lg:5},{default:r(()=>[n(S,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[n(O,{title:e.t("recommend.stats.profiles"),value:e.profiles.length,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:r(()=>[n(e.UserOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),n(I,{xs:12,sm:8,lg:5},{default:r(()=>[n(S,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[n(O,{title:e.t("recommend.stats.totalRecs"),value:e.userStats.total,"value-style":{color:"#722ed1",fontSize:"20px"}},{prefix:r(()=>[n(e.FireOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),n(I,{xs:12,sm:8,lg:5},{default:r(()=>[n(S,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[n(O,{title:e.t("recommend.stats.pending"),value:e.userStats.pending,"value-style":{color:e.userStats.pending>0?"#faad14":"#888",fontSize:"20px"}},{prefix:r(()=>[n(e.EyeInvisibleOutlined)]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),n(I,{xs:12,sm:8,lg:5},{default:r(()=>[n(S,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[n(O,{title:e.t("recommend.stats.feedbackRate"),value:e.userStats.feedbackRate*100,suffix:"%",precision:1,"value-style":{color:"#13c2c2",fontSize:"20px"}},{prefix:r(()=>[n(e.LikeOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),n(I,{xs:24,sm:8,lg:4},{default:r(()=>[n(S,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[n(O,{title:e.t("recommend.stats.avgScore"),value:e.userStats.avgScore,precision:3,"value-style":{color:e.scoreColor(e.userStats.avgScore),fontSize:"20px"}},{prefix:r(()=>[n(e.StarOutlined)]),_:1},8,["title","value","value-style"])]),_:1})]),_:1})]),_:1}),u(" Content type catalogue "),n(S,{title:e.t("recommend.typeCatalogue"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"},"body-style":{padding:"12px 16px"}},{default:r(()=>[n(F,{gutter:[12,12]},{default:r(()=>[(d(!0),_(A,null,Q(e.CONTENT_TYPE_IDS,s=>(d(),k(I,{key:s,xs:12,sm:6},{default:r(()=>[b("div",{class:"type-pill",style:Pe({borderLeftColor:e.typeBarColor(s)})},[n(v,{color:e.typeColor(s),style:{"font-family":"monospace"}},{default:r(()=>[p(i(s),1)]),_:2},1032,["color"]),b("div",$e,i(e.typeLabel(s)),1)],4)]),_:2},1024))),128))]),_:1})]),_:1},8,["title"]),u(" Tabs "),n(oe,{activeKey:e.activeTab,"onUpdate:activeKey":a[4]||(a[4]=s=>e.activeTab=s),class:"recommend-tabs"},{default:r(()=>[u(" ── Recommendations tab ────────────────────────────────── "),n(G,{key:"recs",tab:e.t("recommend.tabs.recs")},{default:r(()=>[b("div",et,[n(N,{value:e.statusFilter,"onUpdate:value":a[2]||(a[2]=s=>e.statusFilter=s),size:"small","button-style":"solid"},{default:r(()=>[n(U,{value:""},{default:r(()=>[p(i(e.t("recommend.filter.allStatuses")),1)]),_:1}),(d(!0),_(A,null,Q(e.RECOMMENDATION_STATUSES,s=>(d(),k(U,{key:s,value:s},{default:r(()=>[p(i(e.statusLabel(s)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),n(N,{value:e.typeFilter,"onUpdate:value":a[3]||(a[3]=s=>e.typeFilter=s),size:"small"},{default:r(()=>[n(U,{value:""},{default:r(()=>[p(i(e.t("recommend.filter.allTypes")),1)]),_:1}),(d(!0),_(A,null,Q(e.CONTENT_TYPE_IDS,s=>(d(),k(U,{key:s,value:s},{default:r(()=>[p(i(e.typeLabel(s)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),e.selectedUser?(d(),k(X,{key:1,columns:e.recColumns,"data-source":e.filteredRecs,pagination:{pageSize:20,showTotal:s=>e.t("recommend.totals.rows",{count:s})},size:"small",loading:e.loadingRecs,style:{background:"var(--bg-card)"}},{bodyCell:r(({column:s,record:m})=>[s.key==="title"?(d(),_(A,{key:0},[b("span",tt,i(m.title||e.t("recommend.noTitle")),1),b("div",ot,i(m.contentId),1)],64)):u("v-if",!0),s.key==="contentType"?(d(),k(v,{key:1,color:e.typeColor(m.contentType),style:{"font-family":"monospace"}},{default:r(()=>[p(i(m.contentType),1)]),_:2},1032,["color"])):u("v-if",!0),s.key==="score"?(d(),k(J,{key:2,percent:Math.round(m.score*100),"stroke-color":e.scoreColor(m.score),size:"small",format:()=>m.score.toFixed(3)},null,8,["percent","stroke-color","format"])):u("v-if",!0),s.key==="reason"?(d(),_("span",rt,i(m.reason),1)):u("v-if",!0),s.key==="status"?(d(),k(v,{key:4,color:e.statusColor(m.status)},{default:r(()=>[p(i(e.statusLabel(m.status)),1)]),_:2},1032,["color"])):u("v-if",!0),s.key==="feedback"?(d(),_(A,{key:5},[m.feedback?(d(),k(v,{key:0,color:e.feedbackColor(m.feedback)},{default:r(()=>[p(i(e.feedbackLabel(m.feedback)),1)]),_:2},1032,["color"])):(d(),_("span",nt,"—"))],64)):u("v-if",!0),s.key==="action"?(d(),_(A,{key:6},[m.status==="pending"?(d(),k(w,{key:0,size:"small",type:"link",onClick:C=>e.markViewed(m)},{default:r(()=>[p(i(e.t("recommend.rowActions.view")),1)]),_:1},8,["onClick"])):u("v-if",!0),m.status!=="dismissed"?(d(),k(q,{key:1},{overlay:r(()=>[n(x,{onClick:({key:C})=>e.provideFeedback(m,C)},{default:r(()=>[n(D,{key:"like",style:{color:"#52c41a"}},{default:r(()=>[p(i(e.t("recommend.feedbackMenu.like")),1)]),_:1}),n(D,{key:"dislike",style:{color:"#ff4d4f"}},{default:r(()=>[p(i(e.t("recommend.feedbackMenu.dislike")),1)]),_:1}),n(D,{key:"later"},{default:r(()=>[p(i(e.t("recommend.feedbackMenu.later")),1)]),_:1})]),_:1},8,["onClick"])]),default:r(()=>[n(w,{size:"small",type:"link"},{default:r(()=>[p(i(e.t("recommend.feedbackDropdown")),1)]),_:1})]),_:2},1024)):u("v-if",!0),m.status!=="dismissed"?(d(),k(H,{key:2,title:e.t("recommend.rowActions.dismissConfirmTitle"),"ok-text":e.t("recommend.rowActions.dismissOk"),"cancel-text":e.t("common.cancel"),onConfirm:C=>e.dismissRec(m)},{default:r(()=>[n(w,{size:"small",type:"link",danger:""},{default:r(()=>[p(i(e.t("recommend.rowActions.dismiss")),1)]),_:1})]),_:1},8,["title","ok-text","cancel-text","onConfirm"])):u("v-if",!0)],64)):u("v-if",!0)]),emptyText:r(()=>[b("div",at,[n(e.FireOutlined,{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),p(" "+i(e.statusFilter||e.typeFilter?e.t("recommend.empty.filtered"):e.t("recommend.empty.noRecsHint")),1)])]),_:1},8,["columns","data-source","pagination","loading"])):(d(),k(P,{key:0,description:e.t("recommend.empty.selectUser"),image:e.EMPTY_IMG,style:{padding:"40px 0"}},null,8,["description","image"]))]),_:1},8,["tab"]),u(" ── Profiles tab ───────────────────────────────────────── "),n(G,{key:"profiles",tab:e.t("recommend.tabs.profiles")},{default:r(()=>[n(X,{columns:e.profileColumns,"data-source":e.profiles,pagination:{pageSize:20,showTotal:s=>e.t("recommend.totals.profiles",{count:s})},size:"small",loading:e.loading,style:{background:"var(--bg-card)"}},{bodyCell:r(({column:s,record:m})=>[s.key==="userId"?(d(),_("span",st,i(m.userId),1)):u("v-if",!0),s.key==="topicCount"?(d(),k(v,{key:1,color:"blue"},{default:r(()=>[p(i(e.t("recommend.topicTagSuffix",{count:m.topicCount})),1)]),_:2},1024)):u("v-if",!0),s.key==="decayFactor"?(d(),_("span",lt,i(m.decayFactor.toFixed(2)),1)):u("v-if",!0),s.key==="updateCount"?(d(),_("span",it,i(m.updateCount),1)):u("v-if",!0),s.key==="lastUpdated"?(d(),_("span",ct,i(e.formatRecommendTime(m.lastUpdated)),1)):u("v-if",!0),s.key==="action"?(d(),_(A,{key:5},[n(w,{size:"small",type:"link",onClick:C=>e.viewProfileDetails(m)},{default:r(()=>[p(i(e.t("recommend.rowActions.details")),1)]),_:1},8,["onClick"]),n(w,{size:"small",type:"link",onClick:C=>e.selectAndSwitch(m.userId)},{default:r(()=>[p(i(e.t("recommend.rowActions.switch")),1)]),_:1},8,["onClick"]),n(H,{title:e.t("recommend.rowActions.deleteConfirmTitle"),"ok-text":e.t("recommend.rowActions.deleteOk"),"cancel-text":e.t("common.cancel"),onConfirm:C=>e.deleteProfile(m)},{default:r(()=>[n(w,{size:"small",type:"link",danger:""},{default:r(()=>[p(i(e.t("recommend.rowActions.delete")),1)]),_:1})]),_:1},8,["title","ok-text","cancel-text","onConfirm"])],64)):u("v-if",!0)]),emptyText:r(()=>[b("div",dt,[n(e.UserOutlined,{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),p(" "+i(e.t("recommend.empty.noProfiles")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),u(" ── Top interests tab ──────────────────────────────────── "),n(G,{key:"interests",tab:e.t("recommend.tabs.interests")},{default:r(()=>[e.selectedUser?(d(),k(F,{key:1,gutter:[16,16]},{default:r(()=>[n(I,{xs:24,lg:14},{default:r(()=>[n(S,{title:e.t("recommend.interest.topicWeights"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[e.topInterests.length?(d(),_("div",mt,[(d(!0),_(A,null,Q(e.topInterests,s=>(d(),_("div",{key:s.key,class:"interest-row"},[b("span",ut,i(s.topic),1),n(J,{percent:Math.round(s.weight*100),"stroke-color":e.weightColor(s.weight),format:()=>s.weight.toFixed(3),size:"small",style:{flex:"1","margin-left":"12px"}},null,8,["percent","stroke-color","format"])]))),128))])):(d(),k(P,{key:0,description:e.t("recommend.empty.noInterests"),image:e.EMPTY_IMG},null,8,["description","image"]))]),_:1},8,["title"])]),_:1}),n(I,{xs:24,lg:10},{default:r(()=>[n(S,{title:e.t("recommend.interest.feedbackSuggest"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[e.suggestions.length?(d(),k(te,{key:1,size:"small","data-source":e.suggestions},{renderItem:r(({item:s})=>[n(ee,null,{default:r(()=>[n(v,{color:s.action==="boost"?"green":"orange"},{default:r(()=>[p(i(s.action==="boost"?e.t("recommend.interest.boost"):e.t("recommend.interest.lower")),1)]),_:2},1032,["color"]),b("span",ft,i(s.topic),1),b("span",pt,"±"+i(s.amount),1)]),_:2},1024)]),_:1},8,["data-source"])):(d(),k(P,{key:0,description:e.t("recommend.empty.noSuggestions"),image:e.EMPTY_IMG},null,8,["description","image"]))]),_:1},8,["title"])]),_:1})]),_:1})):(d(),k(P,{key:0,description:e.t("recommend.empty.selectUser"),image:e.EMPTY_IMG,style:{padding:"40px 0"}},null,8,["description","image"]))]),_:1},8,["tab"])]),_:1},8,["activeKey"]),u(" ── Create profile modal ───────────────────────────────── "),n($,{open:e.showCreateProfileModal,"onUpdate:open":a[8]||(a[8]=s=>e.showCreateProfileModal=s),title:e.t("recommend.create.title"),"confirm-loading":e.creating,width:560,"ok-text":e.t("recommend.create.ok"),"cancel-text":e.t("common.cancel"),onOk:e.submitCreateProfile,onCancel:e.resetCreateForm},{default:r(()=>[n(ne,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:r(()=>[n(V,{label:e.t("recommend.create.userIdLabel"),required:""},{default:r(()=>[n(re,{value:e.createForm.userId,"onUpdate:value":a[5]||(a[5]=s=>e.createForm.userId=s),placeholder:e.t("recommend.create.userIdPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),n(V,{label:e.t("recommend.create.topicsLabel")},{default:r(()=>[n(Z,{value:e.createForm.topicsJson,"onUpdate:value":a[6]||(a[6]=s=>e.createForm.topicsJson=s),placeholder:e.t("recommend.create.topicsPlaceholder"),"auto-size":{minRows:2,maxRows:5}},null,8,["value","placeholder"])]),_:1},8,["label"]),n(V,{label:e.t("recommend.create.weightsLabel")},{default:r(()=>[n(Z,{value:e.createForm.weightsJson,"onUpdate:value":a[7]||(a[7]=s=>e.createForm.weightsJson=s),placeholder:e.t("recommend.create.weightsPlaceholder"),"auto-size":{minRows:2,maxRows:5}},null,8,["value","placeholder"])]),_:1},8,["label"])]),_:1})]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),u(" ── Profile details modal ──────────────────────────────── "),n($,{open:e.showDetailsModal,"onUpdate:open":a[9]||(a[9]=s=>e.showDetailsModal=s),title:e.t("recommend.details.title",{userId:e.currentProfile?.userId||""}),width:680,footer:null},{default:r(()=>[e.currentProfile?(d(),_("div",yt,[n(ae,{column:2,size:"small",bordered:""},{default:r(()=>[n(R,{label:e.t("recommend.details.id"),span:2},{default:r(()=>[b("span",gt,i(e.currentProfile.id),1)]),_:1},8,["label"]),n(R,{label:e.t("recommend.details.topicCount")},{default:r(()=>[p(i(e.currentProfile.topicCount),1)]),_:1},8,["label"]),n(R,{label:e.t("recommend.details.decayFactor")},{default:r(()=>[p(i(e.currentProfile.decayFactor.toFixed(2)),1)]),_:1},8,["label"]),n(R,{label:e.t("recommend.details.updateCount")},{default:r(()=>[p(i(e.currentProfile.updateCount),1)]),_:1},8,["label"]),n(R,{label:e.t("recommend.details.lastUpdated")},{default:r(()=>[p(i(e.formatRecommendTime(e.currentProfile.lastUpdated)),1)]),_:1},8,["label"])]),_:1}),b("h4",_t,i(e.t("recommend.details.topicWeights")),1),Object.keys(e.currentProfile.topics).length?(d(),_("div",vt,[(d(!0),_(A,null,Q(e.currentProfile.topics,(s,m)=>(d(),_("div",{key:m,class:"interest-row"},[b("span",kt,i(m),1),n(J,{percent:Math.round(s*100),"stroke-color":e.weightColor(s),format:()=>s.toFixed(3),size:"small",style:{flex:"1","margin-left":"12px"}},null,8,["percent","stroke-color","format"])]))),128))])):(d(),k(P,{key:0,description:e.t("recommend.empty.noTopics"),image:e.EMPTY_IMG},null,8,["description","image"])),Object.keys(e.currentProfile.interactionWeights).length?(d(),_("h4",bt,i(e.t("recommend.details.interactionWeights")),1)):u("v-if",!0),Object.keys(e.currentProfile.interactionWeights).length?(d(),_("pre",xt,i(e.formatJson(e.currentProfile.interactionWeights)),1)):u("v-if",!0)])):u("v-if",!0)]),_:1},8,["open","title"])])}const It=Ae(Ke,[["render",ht],["__scopeId","data-v-9cfd9dba"],["__file","/tmp/cc-web-panel-j3HnbJ/repo/packages/web-panel/src/views/Recommend.vue"]]);export{It as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.page-title[data-v-9cfd9dba]{margin:0;color:var(--text-primary);font-size:22px;font-weight:600}.page-sub[data-v-9cfd9dba]{margin:4px 0 0;color:var(--text-secondary);font-size:13px}.recommend-tabs[data-v-9cfd9dba] .ant-tabs-nav{margin-bottom:16px}.filter-bar[data-v-9cfd9dba]{display:flex;align-items:center;gap:12px;margin-bottom:12px;flex-wrap:wrap}.type-pill[data-v-9cfd9dba]{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-9cfd9dba]{color:var(--text-primary);font-size:13px}.interest-row[data-v-9cfd9dba]{display:flex;align-items:center;margin-bottom:8px}.interest-topic[data-v-9cfd9dba]{min-width:100px;font-family:monospace;font-size:12px;color:var(--text-primary)}.weights-pre[data-v-9cfd9dba]{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)}
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import{E as br,r as se,I as ne,J as de,U as Te,c as q,K as A,S as re,V as ie,o as Wt,a8 as Qt,b as He,P as D,Q as Z,R as ae,F as Jt,Z as en,a5 as Er}from"./vendor-Bn1JzzAn.js";import{Q as vr}from"./QrScannerModal-er_HkLCI.js";import{_ as xr}from"./index-k7QsBwyo.js";import{ax as Sr,aC as Ir}from"./icons-DG5UD-6K.js";import"./markdown-DUKxbhE4.js";function _r(t){return t instanceof Uint8Array||ArrayBuffer.isView(t)&&t.constructor.name==="Uint8Array"&&"BYTES_PER_ELEMENT"in t&&t.BYTES_PER_ELEMENT===1}function Ue(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 he(t,e,n=""){const r=_r(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(Ue(t.outputLen),Ue(t.blockLen),t.outputLen<1)throw new Error('"outputLen" must be >= 1');if(t.blockLen<1)throw new Error('"blockLen" must be >= 1')}function ht(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 Ln(t,e){he(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 Ve(...t){for(let e=0;e<t.length;e++)t[e].fill(0)}function Et(t){return new DataView(t.buffer,t.byteOffset,t.byteLength)}function le(t,e){return t<<32-e|t>>>e}const Cn=typeof Uint8Array.from([]).toHex=="function"&&typeof Uint8Array.fromHex=="function",Rr=Array.from({length:256},(t,e)=>e.toString(16).padStart(2,"0"));function Ft(t){if(he(t),Cn)return t.toHex();let e="";for(let n=0;n<t.length;n++)e+=Rr[t[n]];return e}const pe={_0:48,_9:57,A:65,F:70,a:97,f:102};function tn(t){if(t>=pe._0&&t<=pe._9)return t-pe._0;if(t>=pe.A&&t<=pe.F)return t-(pe.A-10);if(t>=pe.a&&t<=pe.f)return t-(pe.a-10)}function jt(t){if(typeof t!="string")throw new TypeError("hex string expected, got "+typeof t);if(Cn)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=tn(t.charCodeAt(s)),a=tn(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 Ar(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 Br(t=32){Ue(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 Or=t=>({oid:Uint8Array.from([6,9,96,134,72,1,101,3,4,2,t])});function kr(t,e,n){return t&e^~t&n}function Tr(t,e,n){return t&e^t&n^e&n}class qr{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=Et(this.buffer)}update(e){ht(this),he(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=Et(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){ht(this),Ln(e,this),this.finished=!0;const{buffer:n,view:r,blockLen:o,isLE:s}=this;let{pos:i}=this;n[i++]=128,Ve(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=Et(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 me=Uint32Array.from([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),Lr=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]),we=new Uint32Array(64);class Cr extends qr{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)we[u]=e.getUint32(n,!1);for(let u=16;u<64;u++){const m=we[u-15],h=we[u-2],v=le(m,7)^le(m,18)^m>>>3,x=le(h,17)^le(h,19)^h>>>10;we[u]=x+we[u-7]+v+we[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 m=le(a,6)^le(a,11)^le(a,25),h=d+m+kr(a,l,c)+Lr[u]+we[u]|0,x=(le(r,2)^le(r,13)^le(r,22))+Tr(r,o,s)|0;d=c,c=l,l=a,a=i+h|0,i=s,s=o,o=r,r=h+x|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(){Ve(we)}destroy(){this.destroyed=!0,this.set(0,0,0,0,0,0,0,0),Ve(this.buffer)}}class Ur extends Cr{A=me[0]|0;B=me[1]|0;C=me[2]|0;D=me[3]|0;E=me[4]|0;F=me[5]|0;G=me[6]|0;H=me[7]|0;constructor(){super(32)}}const nn=Ar(()=>new Ur,Or(1));const be=(t,e,n)=>he(t,e,n),Un=Ue,Nn=Ft,Nr=t=>jt(t),Pr=t=>Br(t),gt=BigInt(0),qt=BigInt(1);function Pn(t,e=""){if(typeof t!="boolean"){const n=e&&`"${e}" `;throw new TypeError(n+"expected boolean, got type="+typeof t)}return t}function Mr(t){if(typeof t=="bigint"){if(!ft(t))throw new RangeError("positive bigint expected, got "+t)}else Un(t);return t}function rn(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 Mn(t){if(typeof t!="string")throw new TypeError("hex string expected, got "+typeof t);return t===""?gt:BigInt("0x"+t)}function Dr(t){return Mn(Ft(t))}function Xe(t){return Mn(Ft(Ge(he(t)).reverse()))}function Dn(t,e){if(Ue(e),e===0)throw new RangeError("zero length");t=Mr(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 Fn(t,e){return Dn(t,e).reverse()}function Fr(t,e){if(t=be(t),e=be(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 Ge(t){return Uint8Array.from(be(t))}const ft=t=>typeof t=="bigint"&><=t;function jr(t,e,n){return ft(t)&&ft(e)&&ft(n)&&e<=t&&t<n}function mt(t,e,n,r){if(!jr(e,n,r))throw new RangeError("expected valid "+t+": "+n+" <= n < "+r+", got "+e)}function Hr(t){if(t<gt)throw new Error("expected non-negative bigint, got "+t);let e;for(e=0;t>gt;t>>=qt,e+=1);return e}const $r=t=>(qt<<BigInt(t))-qt;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 on=()=>{throw new Error("not implemented")};const W=BigInt(0),Y=BigInt(1),_e=BigInt(2),jn=BigInt(3),Hn=BigInt(4),$n=BigInt(5),zr=BigInt(7),zn=BigInt(8),Zr=BigInt(9),Zn=BigInt(16);function j(t,e){if(e<=W)throw new Error("mod: expected positive modulus, got "+e);const n=t%e;return n>=W?n:e+n}function ce(t,e,n){if(e<W)throw new Error("pow2: expected non-negative exponent, got "+e);let r=t;for(;e-- >W;)r*=r,r%=n;return r}function sn(t,e){if(t===W)throw new Error("invert: expected non-zero number");if(e<=W)throw new Error("invert: expected positive modulus, got "+e);let n=j(t,e),r=e,o=W,s=Y;for(;n!==W;){const a=r/n,l=r-n*a,c=o-s*a;r=n,n=l,o=s,s=c}if(r!==Y)throw new Error("invert: does not exist");return j(o,e)}function $t(t,e,n){const r=t;if(!r.eql(r.sqr(e),n))throw new Error("Cannot find square root")}function Kn(t,e){const n=t,r=(n.ORDER+Y)/Hn,o=n.pow(e,r);return $t(n,o,e),o}function Kr(t,e){const n=t,r=(n.ORDER-$n)/zn,o=n.mul(e,_e),s=n.pow(o,r),i=n.mul(e,s),a=n.mul(n.mul(i,_e),s),l=n.mul(i,n.sub(a,n.ONE));return $t(n,l,e),l}function Yr(t){const e=zt(t),n=Yn(t),r=n(e,e.neg(e.ONE)),o=n(e,r),s=n(e,e.neg(r)),i=(t+zr)/Zn;return((a,l)=>{const c=a;let d=c.pow(l,i),u=c.mul(d,r);const m=c.mul(d,o),h=c.mul(d,s),v=c.eql(c.sqr(u),l),x=c.eql(c.sqr(m),l);d=c.cmov(d,u,v),u=c.cmov(h,m,x);const p=c.eql(c.sqr(u),l),y=c.cmov(d,u,p);return $t(c,y,l),y})}function Yn(t){if(t<jn)throw new Error("sqrt is not defined for small field");let e=t-Y,n=0;for(;e%_e===W;)e/=_e,n++;let r=_e;const o=zt(t);for(;cn(o,r)===1;)if(r++>1e3)throw new Error("Cannot find square root: probably non-prime P");if(n===1)return Kn;let s=o.pow(r,e);const i=(e+Y)/_e;return function(l,c){const d=l;if(d.is0(c))return c;if(cn(d,c)!==1)throw new Error("Cannot find square root");let u=n,m=d.mul(d.ONE,s),h=d.pow(c,e),v=d.pow(c,i);for(;!d.eql(h,d.ONE);){if(d.is0(h))return d.ZERO;let x=1,p=d.sqr(h);for(;!d.eql(p,d.ONE);)if(x++,p=d.sqr(p),x===u)throw new Error("Cannot find square root");const y=Y<<BigInt(u-x-1),b=d.pow(m,y);u=x,m=d.sqr(b),h=d.mul(h,m),v=d.mul(v,b)}return v}}function Vr(t){return t%Hn===jn?Kn:t%zn===$n?Kr:t%Zn===Zr?Yr(t):Yn(t)}const Se=(t,e)=>(j(t,e)&Y)===Y,Xr=["create","isValid","is0","neg","inv","sqrt","sqr","eql","add","sub","mul","pow","div","addN","subN","mulN","sqrN"];function Gr(t){const e={ORDER:"bigint",BYTES:"number",BITS:"number"},n=Xr.reduce((r,o)=>(r[o]="function",r),e);if(Ht(t,n),rn(t.BYTES,"BYTES"),rn(t.BITS,"BITS"),t.BYTES<1||t.BITS<1)throw new Error("invalid field: expected BYTES/BITS > 0");if(t.ORDER<=Y)throw new Error("invalid field: expected ORDER > 1, got "+t.ORDER);return t}function Wr(t,e,n){const r=t;if(n<W)throw new Error("invalid exponent, negatives unsupported");if(n===W)return r.ONE;if(n===Y)return e;let o=r.ONE,s=e;for(;n>W;)n&Y&&(o=r.mul(o,s)),s=r.sqr(s),n>>=Y;return o}function Vn(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 cn(t,e){const n=t,r=(n.ORDER-Y)/_e,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 Qr(t,e){if(e!==void 0&&Un(e),t<=W)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=Hr(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 an=new WeakMap;class Xn{ORDER;BITS;BYTES;isLE;ZERO=W;ONE=Y;_lengths;_mod;constructor(e,n={}){if(e<=Y)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}=Qr(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 j(e,this.ORDER)}isValid(e){if(typeof e!="bigint")throw new TypeError("invalid field element: expected bigint, got "+typeof e);return W<=e&&e<this.ORDER}is0(e){return e===W}isValidNot0(e){return!this.is0(e)&&this.isValid(e)}isOdd(e){return(e&Y)===Y}neg(e){return j(-e,this.ORDER)}eql(e,n){return e===n}sqr(e){return j(e*e,this.ORDER)}add(e,n){return j(e+n,this.ORDER)}sub(e,n){return j(e-n,this.ORDER)}mul(e,n){return j(e*n,this.ORDER)}pow(e,n){return Wr(this,e,n)}div(e,n){return j(e*sn(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 sn(e,this.ORDER)}sqrt(e){let n=an.get(this);return n||an.set(this,n=Vr(this.ORDER)),n(this,e)}toBytes(e){return this.isLE?Fn(e,this.BYTES):Dn(e,this.BYTES)}fromBytes(e,n=!1){be(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?Xe(e):Dr(e);if(a&&(l=j(l,i)),!n&&!this.isValid(l))throw new Error("invalid field element: outside of range 0..ORDER");return l}invertBatch(e){return Vn(this,e)}cmov(e,n,r){return Pn(r,"condition"),r?n:e}}Object.freeze(Xn.prototype);function zt(t,e={}){return new Xn(t,e)}const wt=BigInt(0),Lt=BigInt(1);function ln(t,e){const n=e.negate();return t?n:e}function vt(t,e){const n=Vn(t.Fp,e.map(r=>r.Z));return e.map((r,o)=>t.fromAffine(r.toAffine(n[o])))}function Gn(t,e){if(!Number.isSafeInteger(t)||t<=0||t>e)throw new Error("invalid window size, expected [1.."+e+"], got W="+t)}function xt(t,e){Gn(t,e);const n=Math.ceil(e/t)+1,r=2**(t-1),o=2**t,s=$r(t),i=BigInt(t);return{windows:n,windowSize:r,mask:s,maxNumber:o,shiftBy:i}}function un(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+=Lt);const c=e*r,d=c+Math.abs(a)-1,u=a===0,m=a<0,h=e%2!==0;return{nextN:l,offset:d,isZero:u,isNeg:m,isNegF:h,offsetF:c}}const St=new WeakMap,Wn=new WeakMap;function It(t){return Wn.get(t)||1}function fn(t){if(t!==wt)throw new Error("invalid wNAF")}class Jr{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>wt;)n&Lt&&(r=r.add(o)),o=o.double(),n>>=Lt;return r}precomputeWindow(e,n){const{windows:r,windowSize:o}=xt(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=xt(e,this.bits);for(let a=0;a<i.windows;a++){const{nextN:l,offset:c,isZero:d,isNeg:u,isNegF:m,offsetF:h}=un(r,a,i);r=l,d?s=s.add(ln(m,n[h])):o=o.add(ln(u,n[c]))}return fn(r),{p:o,f:s}}wNAFUnsafe(e,n,r,o=this.ZERO){const s=xt(e,this.bits);for(let i=0;i<s.windows&&r!==wt;i++){const{nextN:a,offset:l,isZero:c,isNeg:d}=un(r,i,s);if(r=a,!c){const u=n[l];o=o.add(d?u.negate():u)}}return fn(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=It(e);return this.wNAF(o,this.getPrecomputes(o,e,r),n)}unsafe(e,n,r,o){const s=It(e);return s===1?this._unsafeLadder(e,n,o):this.wNAFUnsafe(s,this.getPrecomputes(s,e,r),n,o)}createCache(e,n){Gn(n,this.bits),Wn.set(e,n),St.delete(e)}hasCache(e){return It(e)!==1}}function dn(t,e,n){if(e){if(e.ORDER!==t)throw new Error("Field.ORDER must match order: Fp == p, Fn == n");return Gr(e),e}else return zt(t,{isLE:n})}function eo(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>wt))throw new Error(`CURVE.${l} must be positive bigint`)}const o=dn(e.p,n.Fp,r),s=dn(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 to(t,e){return function(r){const o=t(r);return{secretKey:o,publicKey:e(o)}}}const ye=BigInt(0),J=BigInt(1),_t=BigInt(2),no=BigInt(8);function ro(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 oo(t,e={}){const n=e,r=eo("edwards",t,n,n.FpFnLE),{Fp:o,Fn:s}=r;let i=r.CURVE;const{h:a}=i;Ht(n,{},{uvRatio:"function"});const l=_t<<BigInt(s.BYTES*8)-J,c=x=>o.create(x),d=n.uvRatio===void 0?(x,p)=>{try{return{isValid:!0,value:o.sqrt(o.div(x,p))}}catch{return{isValid:!1,value:ye}}}:n.uvRatio;if(!ro(o,i,i.Gx,i.Gy))throw new Error("bad curve params: generator point");function u(x,p,y=!1){const b=y?J:ye;return mt("coordinate "+x,p,b,l),p}function m(x){if(!(x instanceof h))throw new Error("EdwardsPoint expected")}class h{static BASE=new h(i.Gx,i.Gy,J,c(i.Gx*i.Gy));static ZERO=new h(ye,J,J,ye);static Fp=o;static Fn=s;X;Y;Z;T;constructor(p,y,b,E){this.X=u("x",p),this.Y=u("y",y),this.Z=u("z",b,!0),this.T=u("t",E),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,J,c(y*b))}static fromBytes(p,y=!1){const b=o.BYTES,{a:E,d:I}=i;p=Ge(be(p,b,"point")),Pn(y,"zip215");const k=Ge(p),P=p[b-1];k[b-1]=P&-129;const R=Xe(k),T=y?l:o.ORDER;mt("point.y",R,ye,T);const B=c(R*R),C=c(B-J),M=c(I*B-E);let{isValid:V,value:H}=d(C,M);if(!V)throw new Error("bad point: invalid y coordinate");const O=(H&J)===J,N=(P&128)!==0;if(!y&&H===ye&&N)throw new Error("bad point: x=0 and x_0=1");return N!==O&&(H=c(-H)),h.fromAffine({x:H,y:R})}static fromHex(p,y=!1){return h.fromBytes(Nr(p),y)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}precompute(p=8,y=!0){return v.createCache(this,p),y||this.multiply(_t),this}assertValidity(){const p=this,{a:y,d:b}=i;if(p.is0())throw new Error("bad point: ZERO");const{X:E,Y:I,Z:k,T:P}=p,R=c(E*E),T=c(I*I),B=c(k*k),C=c(B*B),M=c(R*y),V=c(B*c(M+T)),H=c(C+c(b*c(R*T)));if(V!==H)throw new Error("bad point: equation left != right (1)");const O=c(E*I),N=c(k*P);if(O!==N)throw new Error("bad point: equation left != right (2)")}equals(p){m(p);const{X:y,Y:b,Z:E}=this,{X:I,Y:k,Z:P}=p,R=c(y*P),T=c(I*E),B=c(b*P),C=c(k*E);return R===T&&B===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:E}=this,I=c(y*y),k=c(b*b),P=c(_t*c(E*E)),R=c(p*I),T=y+b,B=c(c(T*T)-I-k),C=R+k,M=C-P,V=R-k,H=c(B*M),O=c(C*V),N=c(B*V),S=c(M*C);return new h(H,O,S,N)}add(p){m(p);const{a:y,d:b}=i,{X:E,Y:I,Z:k,T:P}=this,{X:R,Y:T,Z:B,T:C}=p,M=c(E*R),V=c(I*T),H=c(P*b*C),O=c(k*B),N=c((E+I)*(R+T)-M-V),S=O-H,F=O+H,$=c(V-y*M),K=c(N*S),X=c(F*$),Q=c(N*$),te=c(S*F);return new h(K,X,te,Q)}subtract(p){return m(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}=v.cached(this,p,E=>vt(h,E));return vt(h,[y,b])[0]}multiplyUnsafe(p){if(!s.isValid(p))throw new RangeError("invalid scalar: expected 0 <= sc < curve.n");return p===ye?h.ZERO:this.is0()||p===J?this:v.unsafe(this,p,y=>vt(h,y))}isSmallOrder(){return this.clearCofactor().is0()}isTorsionFree(){return v.unsafe(this,i.n).is0()}toAffine(p){const y=this;let b=p;const{X:E,Y:I,Z:k}=y,P=y.is0();b==null&&(b=P?no:o.inv(k));const R=c(E*b),T=c(I*b),B=o.mul(k,b);if(P)return{x:ye,y:J};if(B!==J)throw new Error("invZ was invalid");return{x:R,y:T}}clearCofactor(){return a===J?this:this.multiplyUnsafe(a)}toBytes(){const{x:p,y}=this.toAffine(),b=o.toBytes(y);return b[b.length-1]|=p&J?128:0,b}toHex(){return Nn(this.toBytes())}toString(){return`<Point ${this.is0()?"ZERO":this.toHex()}>`}}const v=new Jr(h,s.BITS);return s.BITS>=8&&h.BASE.precompute(8),Object.freeze(h.prototype),Object.freeze(h),h}class so{static BASE;static ZERO;static Fp;static Fn;ep;constructor(e){this.ep=e}static fromBytes(e){on()}static fromHex(e){on()}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 Nn(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 $e=BigInt(0),qe=BigInt(1),nt=BigInt(2);function io(t){return Ht(t,{P:"bigint",type:"string",adjustScalarBytes:"function",powPminus2:"function"},{randomBytes:"function"}),Object.freeze({...t})}function co(t){const e=io(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?Pr:i,c=a?255:448,d=a?32:56,u=BigInt(a?9:5),m=BigInt(a?121665:39081),h=a?nt**BigInt(254):nt**BigInt(447),v=a?BigInt(8)*nt**BigInt(251)-qe:BigInt(4)*nt**BigInt(445)-qe,x=h+v+qe,p=O=>j(O,n),y=b(u);function b(O){return Fn(p(O),d)}function E(O){const N=Ge(be(O,d,"uCoordinate"));return a&&(N[31]&=127),p(Xe(N))}function I(O){return Xe(o(Ge(be(O,d,"scalar"))))}function k(O,N){const S=C(E(N),I(O));if(S===$e)throw new Error("invalid private or public key received");return b(S)}function P(O){return k(O,y)}const R=P,T=k;function B(O,N,S){const F=p(O*(N-S));return N=p(N-F),S=p(S+F),{x_2:N,x_3:S}}function C(O,N){mt("u",O,$e,n),mt("scalar",N,h,x);const S=N,F=O;let $=qe,K=$e,X=O,Q=qe,te=$e;for(let Me=BigInt(c-1);Me>=$e;Me--){const Je=S>>Me&qe;te^=Je,{x_2:$,x_3:X}=B(te,$,X),{x_2:K,x_3:Q}=B(te,K,Q),te=Je;const De=$+K,Ae=p(De*De),Be=$-K,ge=p(Be*Be),Oe=Ae-ge,ue=X+Q,bt=X-Q,Fe=p(bt*De),ke=p(ue*Be),ve=Fe+ke,et=Fe-ke;X=p(ve*ve),Q=p(F*p(et*et)),$=p(Ae*ge),K=p(Oe*(Ae+p(m*Oe)))}({x_2:$,x_3:X}=B(te,$,X)),{x_2:K,x_3:Q}=B(te,K,Q);const Pe=s(K);return p($*Pe)}const M={secretKey:d,publicKey:d,seed:d},V=O=>(O=O===void 0?l(d):O,be(O,M.seed,"seed"),O),H={randomSecretKey:V};return Object.freeze(M),Object.freeze(H),Object.freeze({keygen:to(V,R),getSharedSecret:T,getPublicKey:R,scalarMult:k,scalarMultBase:P,utils:H,GuBytes:y.slice(),lengths:M})}const ao=BigInt(0),Ye=BigInt(1),pn=BigInt(2),lo=BigInt(3),uo=BigInt(5),fo=BigInt(8),Ne=BigInt("0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffed"),Qn={p:Ne,n:BigInt("0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3ed"),h:fo,a:BigInt("0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec"),d:BigInt("0x52036cee2b6ffe738cc740797779e89800700a4d4141d8ab75eb4dca135978a3"),Gx:BigInt("0x216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a"),Gy:BigInt("0x6666666666666666666666666666666666666666666666666666666666666658")};function Jn(t){const e=BigInt(10),n=BigInt(20),r=BigInt(40),o=BigInt(80),s=Ne,a=t*t%s*t%s,l=ce(a,pn,s)*a%s,c=ce(l,Ye,s)*t%s,d=ce(c,uo,s)*c%s,u=ce(d,e,s)*d%s,m=ce(u,n,s)*u%s,h=ce(m,r,s)*m%s,v=ce(h,o,s)*h%s,x=ce(v,o,s)*h%s,p=ce(x,e,s)*d%s;return{pow_p_5_8:ce(p,pn,s)*t%s,b2:a}}function po(t){return t[0]&=248,t[31]&=127,t[31]|=64,t}const Ct=BigInt("19681161376707505956807079304988542015446066515923890162744021073123829784752");function er(t,e){const n=Ne,r=j(e*e*e,n),o=j(r*r*e,n),s=Jn(t*o).pow_p_5_8;let i=j(t*r*s,n);const a=j(e*i*i,n),l=i,c=j(i*Ct,n),d=a===t,u=a===j(-t,n),m=a===j(-t*Ct,n);return d&&(i=l),(u||m)&&(i=c),Se(i,n)&&(i=j(-i,n)),{isValid:d||u,value:i}}const Ce=oo(Qn,{uvRatio:er}),Ie=Ce.Fp,ho=Ce.Fn,Ut=(()=>{const t=Ne;return co({P:t,type:"x25519",powPminus2:e=>{const{pow_p_5_8:n,b2:r}=Jn(e);return j(ce(n,lo,t)*r,t)},adjustScalarBytes:po})})(),hn=Ct,go=BigInt("54469307008909316920995813868745141605393597292927456921205312896311721017578"),gn=t=>er(Ye,t),mo=BigInt("0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"),wo=t=>Ie.create(Xe(t)&mo);class oe extends so{static BASE=new oe(Ce.BASE);static ZERO=new oe(Ce.ZERO);static Fp=Ie;static Fn=ho;constructor(e){super(e)}static fromAffine(e){return new oe(Ce.fromAffine(e))}assertSame(e){if(!(e instanceof oe))throw new Error("RistrettoPoint expected")}init(e){return new oe(e)}static fromBytes(e){he(e,32);const{a:n,d:r}=Qn,o=Ne,s=I=>Ie.create(I),i=wo(e);if(!Fr(Ie.toBytes(i),e)||Se(i,o))throw new Error("invalid ristretto255 encoding 1");const a=s(i*i),l=s(Ye+n*a),c=s(Ye-n*a),d=s(l*l),u=s(c*c),m=s(n*r*d-u),{isValid:h,value:v}=gn(s(m*u)),x=s(v*c),p=s(v*x*m);let y=s((i+i)*x);Se(y,o)&&(y=s(-y));const b=s(l*p),E=s(y*b);if(!h||Se(E,o)||b===ao)throw new Error("invalid ristretto255 encoding 2");return new oe(new Ce(y,b,Ye,E))}static fromHex(e){return oe.fromBytes(jt(e))}toBytes(){let{X:e,Y:n,Z:r,T:o}=this.ep;const s=Ne,i=p=>Ie.create(p),a=i(i(r+n)*i(r-n)),l=i(e*n),c=i(l*l),{value:d}=gn(i(a*c)),u=i(d*a),m=i(d*l),h=i(u*m*o);let v;if(Se(o*h,s)){let p=i(n*hn),y=i(e*hn);e=p,n=y,v=i(u*go)}else v=m;Se(e*h,s)&&(n=i(-n));let x=i((r-n)*v);return Se(x,s)&&(x=i(-x)),Ie.toBytes(x)}equals(e){this.assertSame(e);const{X:n,Y:r}=this.ep,{X:o,Y:s}=e.ep,i=c=>Ie.create(c),a=i(n*s)===i(r*o),l=i(r*s)===i(n*o);return a||l}is0(){return this.equals(oe.ZERO)}}Object.freeze(oe.BASE);Object.freeze(oe.ZERO);Object.freeze(oe.prototype);Object.freeze(oe);class mn{oHash;iHash;blockLen;outputLen;canXOF=!1;finished=!1;destroyed=!1;constructor(e,n){if(Dt(e),he(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),Ve(o)}update(e){return ht(this),this.iHash.update(e),this}digestInto(e){ht(this),Ln(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 tr=(()=>{const t=((e,n,r)=>new mn(e,n).update(r).digest());return t.create=(e,n)=>new mn(e,n),t})();function yo(t,e,n){return Dt(t),n===void 0&&(n=new Uint8Array(t.outputLen)),tr(t,n,e)}const Rt=Uint8Array.of(0),wn=Uint8Array.of();function bo(t,e,n,r=32){Dt(t),Ue(r,"length"),he(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=wn:he(n,void 0,"info");const i=new Uint8Array(s*o),a=tr.create(t,e),l=a._cloneInto(),c=new Uint8Array(a.outputLen);for(let d=0;d<s;d++)Rt[0]=d+1,l.update(d===0?wn:c).update(n).update(Rt).digestInto(c),i.set(c,o*d),a._cloneInto(l);return a.destroy(),l.destroy(),Ve(c,Rt),i.slice(0,r)}const Eo=(t,e,n,r,o)=>bo(t,yo(t,e,n),r,o);function vo(t){return t instanceof Uint8Array||ArrayBuffer.isView(t)&&t.constructor.name==="Uint8Array"&&"BYTES_PER_ELEMENT"in t&&t.BYTES_PER_ELEMENT===1}function yn(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 ee(t,e,n=""){const r=vo(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 bn(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 xo(t,e,n=!1){ee(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&&!We(t))throw new Error("invalid output, must be aligned")}function So(t){return new Uint8Array(t.buffer,t.byteOffset,t.byteLength)}function Re(t){return new Uint32Array(t.buffer,t.byteOffset,Math.floor(t.byteLength/4))}function Ee(...t){for(let e=0;e<t.length;e++)t[e].fill(0)}function yt(t){return new DataView(t.buffer,t.byteOffset,t.byteLength)}const Zt=new Uint8Array(new Uint32Array([287454020]).buffer)[0]===68,nr=t=>t<<24&4278190080|t<<8&16711680|t>>>8&65280|t>>>24&255,z=Zt?t=>t:t=>nr(t)>>>0,Io=t=>{for(let e=0;e<t.length;e++)t[e]=nr(t[e]);return t},Kt=Zt?t=>t:Io;function _o(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 Ro(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 Ao=(t,e)=>{function n(r,...o){if(ee(r,void 0,"key"),t.nonceLength!==void 0){const d=o[0];ee(d,t.varSizeNonce?void 0:t.nonceLength,"nonce")}const s=t.tagLength;s&&o[1]!==void 0&&ee(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");ee(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,ee(d),a(i.encrypt.length,u),i.encrypt(d,u)},decrypt(d,u){if(ee(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 Bo(t,e,n=!0){if(e===void 0)return new Uint8Array(t);if(ee(e,void 0,"output"),e.length!==t)throw new Error('"output" expected Uint8Array of length '+t+", got: "+e.length);if(n&&!We(e))throw new Error("invalid output, must be aligned");return e}function Oo(t,e,n){yn(t),yn(e);const r=new Uint8Array(16),o=yt(r);return o.setBigUint64(0,BigInt(e),n),o.setBigUint64(8,BigInt(t),n),r}function We(t){return t.byteOffset%4===0}function Qe(t){return Uint8Array.from(ee(t))}const Le=16,rr=new Uint8Array(16),ze=Re(rr),ko=225,To=(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^ko<<24&-(o&1)}},rt=t=>(t>>>0&255)<<24|(t>>>8&255)<<16|(t>>>16&255)<<8|t>>>24&255|0,qo=t=>t>64*1024?8:t>1024?4:2;class Lo{blockLen=Le;outputLen=Le;s0=0;s1=0;s2=0;s3=0;finished=!1;destroyed=!1;t;W;windowSize;constructor(e,n){ee(e,16,"key"),e=Qe(e);const r=yt(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 v=0;v<128;v++)l.push({s0:rt(o),s1:rt(s),s2:rt(i),s3:rt(a)}),{s0:o,s1:s,s2:i,s3:a}=To(o,s,i,a);const c=qo(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,m=this.windowSize=2**c,h=[];for(let v=0;v<u;v++)for(let x=0;x<m;x++){let p=0,y=0,b=0,E=0;for(let I=0;I<c;I++){if(!(x>>>c-I-1&1))continue;const{s0:P,s1:R,s2:T,s3:B}=l[c*v+I];p^=P,y^=R,b^=T,E^=B}h.push({s0:p,s1:y,s2:b,s3:E})}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 m=(1<<s)-1;let h=0;for(const v of[e,n,r,o])for(let x=0;x<4;x++){const p=v>>>8*x&255;for(let y=8/s-1;y>=0;y--){const b=p>>>s*y&m,{s0:E,s1:I,s2:k,s3:P}=i[h*a+b];l^=E,c^=I,d^=k,u^=P,h+=1}}this.s0=l,this.s1=c,this.s2=d,this.s3=u}update(e){bn(this),ee(e),e=Qe(e);const n=Re(e),r=Math.floor(e.length/Le),o=e.length%Le;for(let s=0;s<r;s++)this._updateBlock(z(n[s*4+0]),z(n[s*4+1]),z(n[s*4+2]),z(n[s*4+3]));return o&&(rr.set(e.subarray(r*Le)),this._updateBlock(z(ze[0]),z(ze[1]),z(ze[2]),z(ze[3])),Ee(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){bn(this),xo(e,this,!0),this.finished=!0;const{s0:n,s1:r,s2:o,s3:s}=this,i=Re(e);i[0]=n,i[1]=r,i[2]=o,i[3]=s,Kt(i)}digest(){const e=new Uint8Array(Le);return this.digestInto(e),this.destroy(),e}}const En=Ro(16,(t,e)=>new Lo(t,e),t=>[t.length]),Nt=16,Co=4,ot=new Uint8Array(Nt),Uo=283;function No(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 Yt(t){return t<<1^Uo&-(t>>7)}function vn(t,e){let n=0;for(;e>0;e>>=1)n^=t&-(e&1),t=Yt(t);return n}const Po=(()=>{const t=new Uint8Array(256);for(let n=0,r=1;n<256;n++,r^=Yt(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 Ee(t),e})(),Mo=t=>t<<24|t>>>8,At=t=>t<<8|t>>>24;function Do(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(At),o=r.map(At),s=o.map(At),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 or=Do(Po,t=>vn(t,3)<<24|t<<16|t<<8|vn(t,2)),Fo=(()=>{const t=new Uint8Array(16);for(let e=0,n=1;e<16;e++,n=Yt(n))t[e]=n;return t})();function jo(t){ee(t);const e=t.length;No(t);const{sbox2:n}=or,r=[];(!Zt||!We(t))&&r.push(t=Qe(t));const o=Kt(Re(t)),s=o.length,i=l=>Ze(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(Mo(c))^Fo[l/s-1]:s>6&&l%s===4&&(c=i(c)),a[l]=a[l-s]^c}return Ee(...r),a}function st(t,e,n,r,o,s){return t[n<<8&65280|r>>>8&255]^e[o>>>8&65280|s>>>24&255]}function Ze(t,e,n,r,o){return t[e&255|n&65280]|t[r>>>16&255|o>>>16&65280]<<16}function xn(t,e,n,r,o){const{sbox2:s,T01:i,T23:a}=or;let l=0;e^=t[l++],n^=t[l++],r^=t[l++],o^=t[l++];const c=t.length/4-2;for(let v=0;v<c;v++){const x=t[l++]^st(i,a,e,n,r,o),p=t[l++]^st(i,a,n,r,o,e),y=t[l++]^st(i,a,r,o,e,n),b=t[l++]^st(i,a,o,e,n,r);e=x,n=p,r=y,o=b}const d=t[l++]^Ze(s,e,n,r,o),u=t[l++]^Ze(s,n,r,o,e),m=t[l++]^Ze(s,r,o,e,n),h=t[l++]^Ze(s,o,e,n,r);return{s0:d,s1:u,s2:m,s3:h}}function it(t,e,n,r,o){ee(n,Nt,"nonce"),ee(r),o=Bo(r.length,o);const s=n,i=Re(s),a=yt(s),l=Re(r),c=Re(o),d=e?0:12,u=r.length;let m=a.getUint32(d,e),{s0:h,s1:v,s2:x,s3:p}=xn(t,z(i[0]),z(i[1]),z(i[2]),z(i[3]));for(let b=0;b+4<=l.length;b+=4)c[b+0]=l[b+0]^z(h),c[b+1]=l[b+1]^z(v),c[b+2]=l[b+2]^z(x),c[b+3]=l[b+3]^z(p),m=m+1>>>0,a.setUint32(d,m,e),{s0:h,s1:v,s2:x,s3:p}=xn(t,z(i[0]),z(i[1]),z(i[2]),z(i[3]));const y=Nt*Math.floor(l.length/Co);if(y<u){const b=new Uint32Array([h,v,x,p]);Kt(b);const E=So(b);for(let I=y,k=0;I<u;I++,k++)o[I]=r[I]^E[k];Ee(b)}return o}function Ho(t,e,n,r,o){const s=o?o.length:0,i=t.create(n,r.length+s);o&&i.update(o);const a=Oo(8*r.length,8*s,e);i.update(r),i.update(a);const l=i.digest();return Ee(a),l}const Sn=Ao({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=Ho(En,!1,a,c,r);for(let u=0;u<l.length;u++)d[u]^=l[u];return d}function i(){const a=jo(e),l=ot.slice(),c=ot.slice();if(it(a,!1,c,c,l),n.length===12)c.set(n);else{const u=ot.slice();yt(u).setBigUint64(8,BigInt(n.length*8),!1);const h=En.create(l).update(n).update(u);h.digestInto(c),h.destroy()}const d=it(a,!1,c,ot);return{xk:a,authKey:l,counter:c,tagMask:d}}return{encrypt(a){const{xk:l,authKey:c,counter:d,tagMask:u}=i(),m=new Uint8Array(a.length+o),h=[l,c,d,u];We(a)||h.push(a=Qe(a)),it(l,!1,d,a,m.subarray(0,a.length));const v=s(c,u,m.subarray(0,m.length-o));return h.push(v),m.set(v,a.length),Ee(...h),m},decrypt(a){const{xk:l,authKey:c,counter:d,tagMask:u}=i(),m=[l,c,u,d];We(a)||m.push(a=Qe(a));const h=a.subarray(0,-o),v=a.subarray(-o),x=s(c,u,h);if(m.push(x),!_o(x,v))throw Ee(...m),new Error("aes/gcm: invalid ghash tag");const p=it(l,!1,d,h);return Ee(...m),p}}}),sr="chainlesschain.remote-session.e2ee.v1",In="chainlesschain://remote-session/pair#",Bt=32,$o=new TextEncoder,ir=new TextDecoder;function dt(t){return $o.encode(t)}function ct(t){let e="";for(const n of t)e+=String.fromCharCode(n);return btoa(e).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function Ke(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 zo(t){const e=new Uint8Array(t);return globalThis.crypto.getRandomValues(e),e}function Zo(){const t=Ut.utils;return t.randomSecretKey?t.randomSecretKey():t.randomPrivateKey()}function _n(t,e,n){return dt(`${sr}
|
|
2
|
-
${t}
|
|
3
|
-
${e}
|
|
4
|
-
${n}`)}function Ko(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(ir.decode(Ke(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 Yo{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=Ut.getPublicKey(this.secretKey),this.key=null,this.sendSequence=0,this.receivedSequences=new Map}publicKeyBase64(){return ct(this.publicKey)}pair(e,n){if(!e||!n)throw new Error("Incomplete peer key material");const r=Ke(e),o=r.length===Bt?r:r.slice(-Bt);if(o.length!==Bt)throw new Error("Invalid X25519 host public key");const s=Ut.getSharedSecret(this.secretKey,o),i=nn(dt(n));this.key=Eo(nn,s,i,dt(`${sr}:${this.sessionId}`),32)}encrypt(e){if(!this.key)throw new Error("Remote Session is not paired");const n=this.sendSequence+=1,r=zo(12),o=Sn(this.key,r,_n(this.sessionId,this.localPeerId,n)).encrypt(dt(JSON.stringify(e)));return{v:1,sessionId:this.sessionId,senderId:this.localPeerId,sequence:n,nonce:ct(r),ciphertext:ct(o.slice(0,o.length-16)),tag:ct(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([...Ke(e.ciphertext),...Ke(e.tag)]),o=Sn(this.key,Ke(e.nonce),_n(this.sessionId,e.senderId,e.sequence)).decrypt(r);return this.receivedSequences.set(e.senderId,e.sequence),JSON.parse(ir.decode(o))}}const cr="chainlesschain://remote-control/pair#";function Vo(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 ar(t){return typeof t=="string"&&t.startsWith(cr)}function Ot(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 Xo(t){const e=String(t||"").toLowerCase().replace(/^\[|\]$/g,"");if(!e)return!1;if(e==="localhost"||Ot(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 Ot(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 Ot(`${o>>8&255}.${o&255}.${s>>8&255}.${s&255}`)}return!!(/^fe[89ab]/.test(e)||/^f[cd]/.test(e))}function Go(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:"&&!Xo(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 Wo(t,e=Date.now()){if(!ar(t))throw new Error("Not a remote-control pairing URI");let n;try{n=JSON.parse(Vo(t.slice(cr.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 Go(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 Qo="chainlesschain.remote-membership-authentication-challenge.v1\0",lr="cc-remote-membership-credential/v1",Jo="cc-remote-membership",es=1,at="credentials",ts="cc.remote-membership.ed25519.v1:",lt=Object.freeze({storageUnavailable:!0});function ur(t){let e="";for(const n of new Uint8Array(t))e+=String.fromCharCode(n);return btoa(e).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}function ns(t){return[...new Uint8Array(t)].map(e=>e.toString(16).padStart(2,"0")).join("")}function Pt(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=>Pt(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)}:${Pt(t[e])}`).join(",")}}`}function kt(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 fr(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 Rn(t,e){try{e?.removeItem(`${ts}${t}`)}catch{}}function rs(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(Jo,es);i.onupgradeneeded=()=>{const a=i.result;a.objectStoreNames.contains(at)||a.createObjectStore(at,{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(at,o),d=c.objectStore(at);let u,m=!1;const h=s(d);h.onsuccess=()=>{u=h.result},h.onerror=v=>{if(h.error?.name==="ConstraintError"){m=!0,v.preventDefault(),v.stopPropagation();return}},c.oncomplete=()=>a(m?{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 Mt(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 ut(t,e){if(!t||typeof t!="object"||Array.isArray(t)||t.schema!==lr||t.sessionId!==e)throw new Error("Remote membership credential record is invalid");return Mt(t.publicKey,{type:"public",usage:"verify",extractable:!0}),Mt(t.privateKey,{type:"private",usage:"sign",extractable:!1}),fr(t.principalId,{optional:!0}),t}function os({subtle:t=globalThis.crypto?.subtle,credentialStore:e=rs(),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,m){const v=(o.get(u)||Promise.resolve()).then(m,m);return o.set(u,v),v.finally(()=>{o.get(u)===v&&o.delete(u)})}async function i(u){r.delete(u);try{await e?.delete(u)}catch{}}async function a(u){const m=r.get(u);if(m)try{return{record:ut(m,u),persistence:"memory"}}catch{r.delete(u)}if(!e)return null;let h;try{h=await e.get(u)}catch{return lt}if(!h)return null;try{return{record:ut(h,u),persistence:"indexeddb"}}catch{return await i(u),null}}async function l(u,m){const h=await t.exportKey("spki",u.publicKey),v=ur(h),x=`ed25519:${ns(await t.digest("SHA-256",h))}`;if(u.principalId&&u.principalId!==x)throw new Error("Remote membership principal binding changed");return Object.freeze({publicKey:v,privateKey:u.privateKey,principalId:u.principalId||null,credentialPrincipalId:x,persistence:m})}async function c(u,{memoryOnly:m=!1}={}){const h=await t.generateKey({name:"Ed25519"},!1,["sign","verify"]),v=ut({schema:lr,sessionId:u,publicKey:h.publicKey,privateKey:h.privateKey,principalId:null},u);if(e&&!m){let x;try{x=await e.add(v)}catch{return r.set(u,v),{record:v,persistence:"memory"}}if(x)return{record:v,persistence:"indexeddb"};const p=await a(u);if(p&&p!==lt)return p;throw new Error("Concurrent credential creation did not persist a key")}return r.set(u,v),{record:v,persistence:"memory"}}async function d(u){Rn(u,n);const m=await a(u),h=m===lt?await c(u,{memoryOnly:!0}):m||await c(u);return l(h.record,h.persistence)}return Object.freeze({getOrCreate(u){const m=kt(u);return s(m,()=>d(m))},rememberPrincipal(u,m){const h=kt(u),v=fr(m);return s(h,async()=>{const x=await a(h);if(x===lt)throw new Error("Remote membership principal persistence is unavailable");const p=x||await c(h),y=await l(p.record,p.persistence);if(v!==y.credentialPrincipalId)throw new Error("Remote membership principal binding changed");if(p.record.principalId&&p.record.principalId!==v)throw new Error("Remote membership principal binding changed");if(p.record.principalId===v&&p.persistence==="indexeddb")return y;if(p.persistence!=="indexeddb"||!e)throw new Error("Remote membership principal could not be persisted before join");const b=ut({...p.record,principalId:v},h);try{await e.put(b)}catch(E){throw new Error("Remote membership principal could not be persisted before join",{cause:E})}return l(b,"indexeddb")})},forget(u){const m=kt(u);return s(m,async()=>{Rn(m,n),r.delete(m);try{await e?.delete(m)}catch{}})}})}let Tt=null;function Vt(){return Tt||(Tt=os()),Tt}function ss(t){return Vt().getOrCreate(t)}function is(t,e){return Vt().rememberPrincipal(t,e)}function cs(t){return Vt().forget(t)}async function An(t,e){const n=globalThis.crypto?.subtle;if(!n||!e)throw new Error("Remote membership signing credential is unavailable");Mt(e,{type:"private",usage:"sign",extractable:!1});const r=new TextEncoder,o=r.encode(Qo),s=r.encode(Pt(t)),i=new Uint8Array(o.length+s.length);return i.set(o,0),i.set(s,o.length),ur(await n.sign({name:"Ed25519"},e,i))}const Bn=1e3,On=3e4,kn=20,as=15e3,ls=5e3,us=2;let Tn=0;function pt(){return globalThis.crypto?.randomUUID?globalThis.crypto.randomUUID():`${Date.now()}-${Math.random().toString(36).slice(2)}`}function fs(){return`web-${pt()}`}const qn=br("remoteSession",()=>{const t=se("idle"),e=se([]),n=se(""),r=se(null),o=se(null),s=se(null),i=se([]),a=se([]),l=new Map,c=new Set,d=[];let u=null,m=null,h=null,v=null,x=!1,p=!1,y=0,b=null,E=null,I=0,k=null,P=0,R=null,T=null,B=null,C=null,M=new Map,V=0;function H(){b&&(clearTimeout(b),b=null)}function O(){E&&(clearTimeout(E),E=null)}function N(f){const g=f?.payload&&typeof f.payload=="object"?f.payload:f;if(["permission.request","approval.requested","approval_request"].includes(f?.type)){const w=F(f);w&&!l.has(w)&&!c.has(w)&&!i.value.some(_=>_.requestId===w)&&(l.set(w,"pending"),i.value=[...i.value,{requestId:w,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:$(f)}])}else if(["permission.resolved","approval.resolved","approval_resolved"].includes(f?.type)){const w=F(f);w&&(l.delete(w),K(w),S(w))}else if(["question_request","question.requested","question"].includes(f?.type)){const w=g?.requestId||g?.id||f?.id||null,_=g?.binding&&typeof g.binding=="object"&&!Array.isArray(g.binding)?g.binding:null;w&&_&&!a.value.some(L=>L.requestId===w)&&(a.value=[...a.value,{requestId:w,question:g.question||g.prompt||"",options:Array.isArray(g.options)?g.options:[],multiSelect:g.multiSelect===!0,binding:_}])}else if(["question_resolved","question.resolved"].includes(f?.type)){const w=g?.requestId||g?.id||f?.id||null;w&&Q(w)}Tn+=1,e.value=[...e.value,{...f,_id:Tn,_rxAt:Date.now()}].slice(-200)}function S(f){i.value=i.value.filter(g=>g.requestId!==f)}function F(f){return f?.requestId||f?.approvalId||f?.id||null}function $(f){const g=f?.requested_permissions??f?.requestedPermissions;if(!Array.isArray(g)||g.length===0||g.length>64)return null;const w=[];for(const _ of g){if(!_||typeof _!="object"||Array.isArray(_))return null;const L=_.capability,G=_.scope,fe=_.expiresAt??_.expires_at??null;if(typeof L!="string"||L.length<1||L.length>128||typeof G!="string"||G.length<1||G.length>1024||fe!==null&&typeof fe!="string")return null;w.push({capability:L,scope:G,...fe===null?{}:{expiresAt:fe}})}return w}function K(f){for(c.has(f)||(c.add(f),d.push(f));d.length>1024;)c.delete(d.shift())}function X(){l.clear(),c.clear(),d.splice(0),i.value=[]}function Q(f){a.value=a.value.filter(g=>g.requestId!==f)}function te(f){!f||!f.requestId||e.value.some(w=>["permission.resolved","approval.resolved","approval_resolved"].includes(w.type)&&F(w)===f.requestId)||c.has(f.requestId)||(l.set(f.requestId,"pending"),i.value.some(w=>w.requestId===f.requestId)||(i.value=[...i.value,f]))}function Pe(){if(!h)return;x||(I=0);const f=new WebSocket(h.relayUrl);u=f,f.addEventListener("open",()=>{f===u&&f.send(JSON.stringify({type:"register",peerId:v,deviceType:"web",deviceInfo:{protocol:"remote-session.e2ee.v1"}}))}),f.addEventListener("message",g=>{f===u&&De(g.data)}),f.addEventListener("close",()=>{f===u&&(O(),u=null,p?t.value="disconnected":Me())}),f.addEventListener("error",()=>{f===u&&(n.value="Remote Session relay connection error")})}function Me(){if(p||b)return;if(y>=kn){t.value="disconnected",n.value="Remote Session 重连已放弃(中继长时间不可达)— 回到本页可自动重试";return}const f=Math.min(Bn*2**y,On);y+=1,t.value="reconnecting",b=setTimeout(()=>{b=null,p||Pe()},f)}function Je(){if(!(p||b)){if(o.value==="direct"){if(!T?.durableMembership||!C||R)return;y=0,n.value="",ke(T,{resumeOnly:!0});return}o.value!=="relay"||!h||u||(y=0,n.value="",t.value="connecting",Pe())}}function De(f){try{let g=JSON.parse(typeof f=="string"?f:String(f));if(g.type==="offline-message"&&(g=g.originalMessage||{}),g.type==="registered"){x?t.value="connected":(t.value="pairing",Be());return}if(g.type!=="message")return;const w=g.payload;if(!w||w.type!=="remote-session.encrypted")return;const _=m.decrypt(w.envelope);_.type==="pair.accepted"?(O(),x=!0,I=0,y=0,t.value="connected"):_.type==="session.revoked"?(p=!0,x=!1,H(),O(),u&&u.close(),u=null,t.value="revoked"):N(_)}catch(g){t.value="error",n.value=g?.message||"Remote Session protocol error"}}function Ae(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 Be(){const f={type:"pair.join",remoteSessionId:h.remoteSessionId,token:h.pairingToken,capabilities:["approval-binding-v1","approval-decision-v1"]};k?.token&&(f.pushToken=k.token,f.pushProvider=k.provider||"web");const g=Ae("remote-session.pair",{mobilePeerId:v,mobilePublicKey:m.publicKeyBase64(),envelope:m.encrypt(f)});return O(),g?(E=setTimeout(()=>{if(E=null,!(x||p)){if(I>=us){try{u?.close()}catch{}return}I+=1,Be()}},ls),!0):!1}function ge(f){if(!u||u.readyState!==WebSocket.OPEN||!x)return!1;const g={...f,commandId:f.commandId||pt(),seq:f.seq??++P};return Ae("remote-session.encrypted",{envelope:m.encrypt(g)})}function Oe(f){for(const[,g]of M)clearTimeout(g.timer),g.reject(new Error(f));M=new Map}function ue(f,g={}){const w=R;if(!w||w.readyState!==WebSocket.OPEN)return Promise.reject(new Error("not connected"));const _=`web-rc-${++V}-${pt()}`;return new Promise((L,G)=>{const fe=setTimeout(()=>{M.delete(_),G(new Error(`request "${f}" timed out`))},as);M.set(_,{resolve:L,reject:G,timer:fe}),w.send(JSON.stringify({id:_,type:f,...g}))})}function bt(f){let g;try{g=JSON.parse(typeof f=="string"?f:String(f))}catch{return}const w=g.requestId&&M.has(g.requestId)?g.requestId:g.id&&M.has(g.id)?g.id:null;if(w){const _=M.get(w);if(M.delete(w),clearTimeout(_.timer),g.type==="error"){const L=new Error(g.message||g.payload?.message||"server error");typeof g.code=="string"&&g.code&&(L.code=g.code),L.remoteResponse=!0,_.reject(L)}else _.resolve(g);return}if(g.type==="remote-session-event"&&g.remoteSessionId===T?.remoteSessionId){N(g.event||{});return}if(g.type==="remote-session-revoked"&&g.remoteSessionId===T?.remoteSessionId){p=!0;const _=T.remoteSessionId;C=null,B=null,cs(_),R&&R.close(),R=null,t.value="revoked"}}function Fe(){if(p||b||!T?.durableMembership||!C)return;if(y>=kn){t.value="disconnected",n.value="Durable Remote Session reconnect attempts were exhausted; retry from this page.";return}const f=Math.min(Bn*2**y,On);y+=1,t.value="reconnecting",b=setTimeout(()=>{b=null,!p&&T&&ke(T,{resumeOnly:!0})},f)}function ke(f,{resumeOnly:g=!1}={}){T=f,r.value=f.remoteSessionId,o.value="direct",s.value=f.scopes,t.value=g?"reconnecting":"connecting";const w=new WebSocket(f.wsUrl);R=w,w.addEventListener("open",async()=>{if(w===R)try{if(t.value=g?"reconnecting":"pairing",f.serverToken){const L=await ue("auth",{token:f.serverToken});if(!L.success)throw new Error(L.message||"authentication failed")}let _;if(f.durableMembership){B=B||await ss(f.remoteSessionId),C=C||B.principalId||null;const L=U=>typeof U=="string"&&/^[1-9]\d*$/.test(U),G=(U,je,xe)=>{const tt=U.session?.sessionId||null,yr=U.member?.principalId||U.member?.clientId||null;if(tt!==f.remoteSessionId||yr!==B.credentialPrincipalId||!L(xe?.sessionEpoch)||!L(xe?.membershipEpoch)||U.session?.sessionEpoch!==xe.sessionEpoch||U.member?.membershipEpoch!==xe.membershipEpoch)throw new Error(`Durable Remote Session ${je} binding changed`);return U},fe=async()=>{if(!C)throw new Error("Durable Remote Session principal binding is unavailable");const U=await ue("remote-session-resume-challenge",{remoteSessionId:f.remoteSessionId,principalId:C});if(U.challenge?.sessionId!==f.remoteSessionId||U.challenge?.principalId!==C||!L(U.challenge?.sessionEpoch)||!L(U.challenge?.membershipEpoch))throw new Error("Durable Remote Session resume challenge binding changed");const je=await An(U.challenge,B.privateKey);return G(await ue("remote-session-resume",{remoteSessionId:f.remoteSessionId,challengeId:U.challenge.challengeId,signature:je}),"resume",U.challenge)},Gt=async()=>{const U=await ue("remote-session-join-challenge",{remoteSessionId:f.remoteSessionId,token:f.pairingToken,credentialPublicKey:B.publicKey,capabilities:["approval-binding-v1","approval-decision-v1"]});if(U.challenge?.sessionId!==f.remoteSessionId||U.challenge?.principalId!==B.credentialPrincipalId||U.challenge?.credentialPublicKey!==B.publicKey||!L(U.challenge?.sessionEpoch)||!L(U.challenge?.membershipEpoch))throw new Error("Durable Remote Session join challenge binding changed");B=await is(f.remoteSessionId,B.credentialPrincipalId),C=B.principalId;const je=await An(U.challenge,B.privateKey);try{return G(await ue("remote-session-join",{remoteSessionId:f.remoteSessionId,challengeId:U.challenge.challengeId,signature:je}),"join",U.challenge)}catch(xe){if(xe?.remoteResponse)throw xe;try{return await fe()}catch(tt){throw tt.joinOutcomeUnknown=!0,tt}}};if(C)try{_=await fe()}catch(U){if(g||U?.code!=="REMOTE_SESSION_MEMBERSHIP_NOT_ACTIVE")throw U;_=await Gt()}else{if(g)throw new Error("Durable Remote Session principal binding is unavailable");_=await Gt()}}else _=await ue("remote-session-join",{remoteSessionId:f.remoteSessionId,token:f.pairingToken});if(w!==R)return;s.value=_.member?.scopes||f.scopes,y=0,n.value="",t.value="connected"}catch(_){if(w!==R)return;n.value=_?.message||"Direct pairing failed",Oe(n.value),R=null;try{w.close()}catch{}!p&&(g||_?.joinOutcomeUnknown===!0)?Fe():t.value="error"}}),w.addEventListener("message",_=>{w===R&&bt(_.data)}),w.addEventListener("close",()=>{if(w===R){if(R=null,Oe("connection closed"),p){t.value!=="revoked"&&(t.value="disconnected");return}if(f.durableMembership&&C){Fe();return}["connected","connecting","pairing","reconnecting"].includes(t.value)&&(t.value="disconnected",n.value="直连会话已断开 — 配对码为一次性,请在主机端重新生成配对链接")}}),w.addEventListener("error",()=>{w===R&&(n.value="Remote control host connection error")})}function ve(f){return ue("remote-session-publish",{remoteSessionId:T.remoteSessionId,commandId:pt(),seq:++P,event:f}).catch(g=>(n.value=g?.message||"Remote control send failed",null))}function et(f,g={}){Xt();try{if(n.value="",e.value=[],X(),p=!1,P=0,ar(f))return B=null,C=null,y=0,ke(Wo(f)),!0;const w=Ko(f);return k=g.pushCredentials||null,v=fs(),m=new Yo(w.remoteSessionId,v),m.pair(w.hostPublicKey,w.pairingToken),h=w,r.value=w.remoteSessionId,o.value="relay",s.value=null,x=!1,I=0,y=0,t.value="connecting",Pe(),!0}catch(w){return t.value="error",n.value=w?.message||"Invalid pairing link",!1}}function dr(f){const g=(f||"").trim();if(g){if(o.value==="direct"){R?ve({type:"prompt",content:g}):n.value="Remote Session is not connected";return}ge({type:"prompt",content:g})||(n.value="Remote Session is not connected")}}function pr(f,g){if(!f)return!1;const w=i.value.find(G=>G.requestId===f)||null;if(!w||l.get(f)!=="pending")return!1;const _=hr(w,g);if(!_)return n.value="This approval does not contain a reviewable persistent grant",!1;const L=_.kind.startsWith("accept");return l.set(f,"responding"),S(f),o.value==="direct"?R?(ve({type:"approval.resolve",requestId:f,decision:_,answer:L,approved:L,fingerprint:w?.fingerprint||null,binding:w?.binding||null,revision:w?.revision??null}).then(G=>{G===null&&te(w)}),!0):(n.value="Remote Session is not connected",te(w),!1):ge({type:"approval.resolve",requestId:f,decision:_,approved:L,fingerprint:w?.fingerprint||null,binding:w?.binding||null,revision:w?.revision??null})?!0:(n.value="Remote Session is not connected",te(w),!1)}function hr(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 gr(f,g){if(!f)return;const w=a.value.find(L=>L.requestId===f)||null;if(!w?.binding)return;Q(f);const _={type:"question.answer",requestId:f,answer:g,binding:w.binding};if(o.value==="direct"){if(!R){n.value="Remote Session is not connected",a.value=[...a.value,w];return}ve(_).then(L=>{L===null&&!a.value.some(G=>G.requestId===f)&&(a.value=[...a.value,w])});return}ge(_)||(n.value="Remote Session is not connected",a.value=[...a.value,w])}function mr(){const f=i.value.filter(w=>l.get(w.requestId)==="pending");for(const w of f)l.set(w.requestId,"interrupting"),S(w.requestId);const g=w=>{for(const _ of f)l.get(_.requestId)==="interrupting"&&(w?(l.delete(_.requestId),K(_.requestId)):te(_));return w};return o.value==="direct"?R?(ve({type:"interrupt"}).then(w=>g(w!==null)),!0):g(!1):g(ge({type:"interrupt"}))}function wr(f,g="web"){if(k=f?{token:f,provider:g}:null,!x)return;const w={type:"push.register"};k?.token&&(w.pushToken=k.token,w.pushProvider=k.provider),ge(w)}function Xt(){if(p=!0,x=!1,H(),O(),u)try{u.close()}catch{}if(u=null,R)try{R.close()}catch{}R=null,T=null,B=null,C=null,Oe("disconnected"),X(),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:dr,approve:pr,answerQuestion:gr,interrupt:mr,updatePushCredentials:wr,resumeReconnect:Je,disconnect:Xt}}),ds={__name:"RemoteSession",setup(t,{expose:e}){e();const n=qn();Wt(()=>n.resumeReconnect());const{status:r,events:o,error:s,transport:i,pendingApprovals:a,pendingQuestions:l}=Qt(n),c=se(""),d=se(""),u=se(!1),m=He(()=>["connecting","pairing","connected","reconnecting"].includes(r.value)),h=He(()=>({idle:"未连接",connecting:"连接中",pairing:"配对中",connected:"已连接",reconnecting:"重连中",disconnected:"已断开",revoked:"已被撤销",error:"错误"})[r.value]||r.value),v=He(()=>r.value==="connected"?"green":["connecting","pairing","reconnecting"].includes(r.value)?"blue":["revoked","error"].includes(r.value)?"red":"default"),x=He(()=>[...o.value].reverse());function p(S){return String(S?.type||"").includes("approval")}function y(S){const F=String(S?.type||""),$=E(S);return["permission.request","approval.requested","approval_request"].includes(F)&&$!==""&&a.value.some(K=>K.requestId===$)}function b(S){return S?.content||S?.payload?.content||S?.message||""}function E(S){return S?.requestId||S?.approvalId||S?.id||""}function I(){n.connect(c.value.trim())}function k(S){u.value=!1,S&&(c.value=S,n.connect(S))}function P(S){const F=typeof S=="string"?S:d.value;n.sendPrompt(F),d.value=""}function R(S,F){n.approve(E(S),F)}function T(S,F){n.approve(S.requestId,F)}function B(S){return String(S&&typeof S=="object"?S.label??S.value??"":S??"")}function C(S){return S&&typeof S=="object"&&"value"in S?S.value:B(S)}function M(S,F){let $=F;if($===void 0){const K=S.options.map(B).filter(Boolean),X=window.prompt(`${S.question||"Input required"}${K.length?`
|
|
5
|
-
Options: ${K.join(", ")}`:""}`);if(X===null)return;$=S.multiSelect?X.split(",").map(Q=>Q.trim()).filter(Boolean):X}n.answerQuestion(S.requestId,$)}function V(){n.interrupt()}function H(){n.disconnect()}function O(){s.value=""}const N={store:n,status:r,events:o,error:s,transport:i,pendingApprovals:a,pendingQuestions:l,pairingLink:c,promptText:d,scannerOpen:u,isActive:m,statusLabel:h,statusColor:v,orderedEvents:x,isApproval:p,isPendingApproval:y,eventBody:b,requestIdOf:E,connect:I,onScanned:k,send:P,respond:R,respondPermission:T,optionLabel:B,optionValue:C,answerQuestion:M,interrupt:V,disconnect:H,clearError:O,computed:He,onMounted:Wt,ref:se,get storeToRefs(){return Qt},get LinkOutlined(){return Ir},get ScanOutlined(){return Sr},QrScannerModal:vr,get useRemoteSessionStore(){return qn}};return Object.defineProperty(N,"__isScriptSetup",{enumerable:!1,value:!0}),N}},ps={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},hs={key:0,class:"page-sub"},gs={key:0,style:{"word-break":"break-all"}},ms={key:1,class:"page-sub"},ws={key:2,style:{"margin-top":"8px"},"data-testid":"approval-grants"},ys={key:0};function bs(t,e,n,r,o,s){const i=ne("a-tag"),a=ne("a-space"),l=ne("a-alert"),c=ne("a-textarea"),d=ne("a-button"),u=ne("a-card"),m=ne("a-input-search"),h=ne("a-spin"),v=ne("a-list-item-meta"),x=ne("a-list-item"),p=ne("a-list"),y=ne("a-badge"),b=ne("a-empty");return D(),de("div",null,[Te("div",ps,[e[4]||(e[4]=Te("div",null,[Te("h2",{class:"page-title"},"远程会话"),Te("p",{class:"page-sub"}," 扫码或粘贴桌面端的配对链接,接管一个编码会话(观察 / 提示 / 审批 / 中断)——支持中继 E2EE 链接与局域网直连链接 ")],-1)),q(a,null,{default:A(()=>[r.transport?(D(),re(i,{key:0,color:"purple"},{default:A(()=>[Z(ae(r.transport==="direct"?"直连":"中继"),1)]),_:1})):ie("v-if",!0),q(i,{color:r.statusColor},{default:A(()=>[Z(ae(r.statusLabel),1)]),_:1},8,["color"])]),_:1})]),r.error?(D(),re(l,{key:0,type:"error","show-icon":"",style:{"margin-bottom":"16px"},message:r.error,closable:"",onClose:r.clearError},null,8,["message"])):ie("v-if",!0),r.isActive?(D(),re(u,{key:2,title:"会话控制",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"}},{extra:A(()=>[q(a,null,{default:A(()=>[q(d,{size:"small",onClick:r.interrupt},{default:A(()=>[...e[8]||(e[8]=[Z("中断",-1)])]),_:1}),q(d,{size:"small",danger:"",onClick:r.disconnect},{default:A(()=>[...e[9]||(e[9]=[Z("断开",-1)])]),_:1})]),_:1})]),default:A(()=>[q(a,{direction:"vertical",style:{width:"100%"},size:8},{default:A(()=>[q(m,{value:r.promptText,"onUpdate:value":e[2]||(e[2]=E=>r.promptText=E),placeholder:"发送提示到远程会话…","enter-button":"发送",disabled:r.status!=="connected",onSearch:r.send},null,8,["value","disabled"]),r.status==="reconnecting"?(D(),re(h,{key:0,size:"small"},{tip:A(()=>[...e[10]||(e[10]=[Z("正在重连…",-1)])]),_:1})):ie("v-if",!0)]),_:1})]),_:1})):(D(),re(u,{key:1,title:"连接远程会话",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"}},{default:A(()=>[q(a,{direction:"vertical",style:{width:"100%"},size:12},{default:A(()=>[q(c,{value:r.pairingLink,"onUpdate:value":e[0]||(e[0]=E=>r.pairingLink=E),rows:3,placeholder:"chainlesschain://remote-session/pair#…(中继)或 chainlesschain://remote-control/pair#…(局域网直连)","allow-clear":""},null,8,["value"]),q(a,null,{default:A(()=>[q(d,{type:"primary",disabled:!r.pairingLink.trim(),onClick:r.connect},{icon:A(()=>[q(r.LinkOutlined)]),default:A(()=>[e[5]||(e[5]=Z(" 连接 ",-1))]),_:1},8,["disabled"]),q(d,{onClick:e[1]||(e[1]=E=>r.scannerOpen=!0)},{icon:A(()=>[q(r.ScanOutlined)]),default:A(()=>[e[6]||(e[6]=Z(" 扫码 ",-1))]),_:1})]),_:1}),e[7]||(e[7]=Te("p",{class:"page-sub",style:{margin:"0"}}," 链接为一次性配对码,敏感载荷仅在片段(#)中,不会发往服务器。 ",-1))]),_:1})]),_:1})),r.pendingQuestions.length?(D(),re(u,{key:3,title:"Agent questions",style:{background:"var(--bg-card)","border-color":"var(--warning-color, #faad14)","margin-bottom":"16px"}},{default:A(()=>[q(p,{size:"small","data-source":r.pendingQuestions,"data-testid":"question-cards"},{renderItem:A(({item:E})=>[q(x,null,{actions:A(()=>[(D(!0),de(Jt,null,en(E.multiSelect?[]:E.options,I=>(D(),re(d,{key:r.optionLabel(I),size:"small",onClick:k=>r.answerQuestion(E,r.optionValue(I))},{default:A(()=>[Z(ae(r.optionLabel(I)),1)]),_:2},1032,["onClick"]))),128)),E.multiSelect||!E.options.length?(D(),re(d,{key:0,type:"primary",size:"small",onClick:I=>r.answerQuestion(E)},{default:A(()=>[...e[11]||(e[11]=[Z(" Answer ",-1)])]),_:1},8,["onClick"])):ie("v-if",!0)]),default:A(()=>[q(v,{description:E.question||"Input required"},null,8,["description"])]),_:2},1024)]),_:1},8,["data-source"])]),_:1})):ie("v-if",!0),r.pendingApprovals.length?(D(),re(u,{key:4,style:{background:"var(--bg-card)","border-color":"var(--warning-color, #faad14)","margin-bottom":"16px"}},{title:A(()=>[e[12]||(e[12]=Z(" 待审批权限请求 ",-1)),q(y,{count:r.pendingApprovals.length,style:{"margin-left":"8px"}},null,8,["count"])]),default:A(()=>[q(p,{size:"small","data-source":r.pendingApprovals,"data-testid":"approval-cards"},{renderItem:A(({item:E})=>[q(x,null,{actions:A(()=>[q(d,{type:"primary",size:"small",onClick:I=>r.respondPermission(E,"once")},{default:A(()=>[...e[14]||(e[14]=[Z("Allow once",-1)])]),_:1},8,["onClick"]),E.requestedPermissions?.length?(D(),re(d,{key:0,size:"small",onClick:I=>r.respondPermission(E,"turn")},{default:A(()=>[...e[15]||(e[15]=[Z("Allow for turn",-1)])]),_:1},8,["onClick"])):ie("v-if",!0),E.requestedPermissions?.length?(D(),re(d,{key:1,size:"small",onClick:I=>r.respondPermission(E,"session")},{default:A(()=>[...e[16]||(e[16]=[Z("Allow for session",-1)])]),_:1},8,["onClick"])):ie("v-if",!0),q(d,{size:"small",danger:"",onClick:I=>r.respondPermission(E,"decline")},{default:A(()=>[...e[17]||(e[17]=[Z("Decline",-1)])]),_:1},8,["onClick"])]),default:A(()=>[q(v,null,{title:A(()=>[q(a,null,{default:A(()=>[q(i,{color:"orange"},{default:A(()=>[Z(ae(E.tool||"tool"),1)]),_:2},1024),E.action?(D(),de("span",hs,ae(E.action),1)):ie("v-if",!0)]),_:2},1024)]),description:A(()=>[E.detail?(D(),de("code",gs,ae(E.detail),1)):(D(),de("span",ms,"(无详情)")),E.requestedPermissions?.length?(D(),de("div",ws,[e[13]||(e[13]=Te("div",{class:"page-sub"},"Review requested grants:",-1)),(D(!0),de(Jt,null,en(E.requestedPermissions,I=>(D(),de("code",{key:`${I.capability}:${I.scope}`,style:{display:"block","word-break":"break-all"}},[Z(ae(I.capability)+" — "+ae(I.scope)+" ",1),I.expiresAt?(D(),de("span",ys," (until "+ae(I.expiresAt)+")",1)):ie("v-if",!0)]))),128))])):ie("v-if",!0)]),_:2},1024)]),_:2},1024)]),_:1},8,["data-source"])]),_:1})):ie("v-if",!0),q(u,{title:"会话事件",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:A(()=>[r.events.length?(D(),re(p,{key:1,size:"small","data-source":r.orderedEvents},{renderItem:A(({item:E})=>[q(x,null,Er({default:A(()=>[q(v,{description:r.eventBody(E)},{title:A(()=>[q(i,{color:r.isApproval(E)?"orange":"blue"},{default:A(()=>[Z(ae(E.type||"event"),1)]),_:2},1032,["color"])]),_:2},1032,["description"])]),_:2},[r.isPendingApproval(E)?{name:"actions",fn:A(()=>[q(d,{type:"link",size:"small",onClick:I=>r.respond(E,!0)},{default:A(()=>[...e[18]||(e[18]=[Z("批准",-1)])]),_:1},8,["onClick"]),q(d,{type:"link",size:"small",danger:"",onClick:I=>r.respond(E,!1)},{default:A(()=>[...e[19]||(e[19]=[Z("拒绝",-1)])]),_:1},8,["onClick"])]),key:"0"}:void 0]),1024)]),_:1},8,["data-source"])):(D(),re(b,{key:0,description:"尚无事件"}))]),_:1}),q(r.QrScannerModal,{open:r.scannerOpen,onScanned:r.onScanned,onCancel:e[3]||(e[3]=E=>r.scannerOpen=!1)},null,8,["open"])])}const _s=xr(ds,[["render",bs],["__file","/tmp/cc-web-panel-j3HnbJ/repo/packages/web-panel/src/views/RemoteSession.vue"]]);export{_s as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{I as m,J as p,U as v,R as s,c as o,K as n,V as d,S as x,o as me,b as se,a as te,r as _,P as u,Q as f,F,Z as L,_ as Ue,$ as pe}from"./vendor-Bn1JzzAn.js";import{Y as Pe,t as K,_ as Be,b as fe,u as ye,E as be,d as g}from"./index-k7QsBwyo.js";import ve from"./index-111hR8WZ.js";import{aV as Ve,m as Je,L as Ye,r as We,au as Ke,al as qe,a0 as He,an as Ze,at as Ge,R as Qe}from"./icons-DG5UD-6K.js";import"./KeyCode-D63Tfrq7.js";import"./omit-VRKL8iSO.js";import"./pickAttrs-DZfWsOe0.js";import"./initDefaultProps-FI8D7E2x.js";import"./motion-B1hpJYSD.js";import"./raf-Deuc0E8-.js";import"./index-CLQjdKmE.js";import"./index-CDlHvQtw.js";import"./isVisible-C7tPsqfj.js";import"./useState-CnxtbLoC.js";import"./devWarning-B4_IVU_n.js";import"./compact-item-C3tFHnhu.js";import"./createContext-B8rTvO61.js";import"./Compact-5GigOmb8.js";import"./_getTag-DnrRH4E6.js";import"./styleChecker-4CEwz9Zd.js";import"./zoom-DM1y_KKP.js";import"./ActionButton-Dzv1ReHF.js";import"./vnode-ejVeFJ0x.js";const Se=Object.freeze(["accuracy","fairness","resilience","convergence_speed"]),Xe=Object.freeze(["none","exponential","linear","step"]),$e=Object.freeze(["z_score","iqr"]),Oe=Object.freeze(["running","complete","applied","failed","cancelled"]),et=Object.freeze(["generic","task","review","vote"]);function k(l,t=0){return typeof l=="number"&&Number.isFinite(l)?l:t}function N(l){if(!l)return{noDb:!1,error:""};const t=Pe(l),r=/Database not available/i.test(t);return{noDb:r,error:r?"Database not available":""}}function tt(l,t=0){if(!l||typeof l!="object")return null;const r=l.did||"";return r?{key:r,did:r,score:k(l.score,0),observations:k(l.observations,0),decay:String(l.decay||"none"),weightTotal:k(l.weightTotal,0),_idx:t}:null}function ce(l){const t=K(l);return Array.isArray(t)?t.map(tt).filter(Boolean):[]}function ze(l,t=0){if(!l||typeof l!="object")return null;const r=l.did||"";return r?{key:`${r}-${t}`,did:r,score:k(l.score,0),reason:String(l.reason||""),zScore:typeof l.zScore=="number"?l.zScore:null,lower:typeof l.lower=="number"?l.lower:null,upper:typeof l.upper=="number"?l.upper:null}:null}function _e(l){const t=K(l);if(!t||typeof t!="object"||Array.isArray(t))return{method:"",threshold:0,totalSamples:0,anomalies:[],summary:"",message:""};const r=Array.isArray(t.anomalies)?t.anomalies.map(ze).filter(Boolean):[];return{method:String(t.method||""),threshold:k(t.threshold,0),totalSamples:k(t.totalSamples,0),anomalies:r,summary:t.summary?String(t.summary):"",message:t.message?String(t.message):""}}function Ae(l,t=0){if(!l||typeof l!="object")return null;const r=l.runId||"";return r?{key:r,runId:r,objective:String(l.objective||""),iterations:k(l.iterations,0),paramSpace:l.paramSpace??null,bestParams:l.bestParams??null,bestScore:k(l.bestScore,0),status:String(l.status||"complete").toLowerCase(),createdAt:l.createdAt??null,completedAt:l.completedAt??null,analytics:l.analytics??null,errorMessage:l.errorMessage??"",_idx:t}:null}function ge(l){const t=K(l);return Array.isArray(t)?t.map(Ae).filter(Boolean):[]}function xe(l){const t=K(l);return!t||typeof t!="object"||Array.isArray(t)?null:Ae(t,0)}function ke(l){const t=K(l);if(!t||typeof t!="object"||Array.isArray(t))return null;const r=t.reputationDistribution||{};return{analyticsId:String(t.analyticsId||""),runId:String(t.runId||""),reputationDistribution:{buckets:Array.isArray(r.buckets)?r.buckets.filter(e=>e&&typeof e=="object").map(e=>({label:String(e.label||""),count:k(e.count,0),min:typeof e.min=="number"?e.min:null,max:typeof e.max=="number"?e.max:null})):[],mean:typeof r.mean=="number"?r.mean:null,stdDev:typeof r.stdDev=="number"?r.stdDev:null},anomalies:t.anomalies&&typeof t.anomalies=="object"?{method:String(t.anomalies.method||""),totalSamples:k(t.anomalies.totalSamples,0),anomalies:Array.isArray(t.anomalies.anomalies)?t.anomalies.anomalies.map(ze).filter(Boolean):[],summary:t.anomalies.summary?String(t.anomalies.summary):"",message:t.anomalies.message?String(t.anomalies.message):""}:{method:"",totalSamples:0,anomalies:[],summary:"",message:""},recommendations:Array.isArray(t.recommendations)?t.recommendations.filter(e=>typeof e=="string"):[]}}const ot={totalRuns:0,activeRuns:0,maxConcurrentOptimizations:0,byStatus:{},byObjective:{},observations:{totalObservations:0,totalDids:0},bestScoreEver:0};function he(l){const t=JSON.parse(JSON.stringify(ot));for(const e of Oe)t.byStatus[e]=0;for(const e of Se)t.byObjective[e]=0;const r=K(l);if(!r||typeof r!="object"||Array.isArray(r))return t;if(t.totalRuns=k(r.totalRuns,0),t.activeRuns=k(r.activeRuns,0),t.maxConcurrentOptimizations=k(r.maxConcurrentOptimizations,0),t.bestScoreEver=k(r.bestScoreEver,0),r.byStatus&&typeof r.byStatus=="object")for(const[e,w]of Object.entries(r.byStatus))typeof w=="number"&&Number.isFinite(w)&&(t.byStatus[e]=w);if(r.byObjective&&typeof r.byObjective=="object")for(const[e,w]of Object.entries(r.byObjective))typeof w=="number"&&Number.isFinite(w)&&(t.byObjective[e]=w);return r.observations&&typeof r.observations=="object"&&(t.observations.totalObservations=k(r.observations.totalObservations,0),t.observations.totalDids=k(r.observations.totalDids,0)),t}function at(l){if(l==null||l==="")return"—";const t=typeof l=="number"?new Date(l):new Date(String(l));return isNaN(t.getTime())?String(l):t.toLocaleString("zh-CN",{hour12:!1})}const nt={__name:"Reputation",setup(l,{expose:t}){t();const{t:r}=fe(),e=ye(),w=be.PRESENTED_IMAGE_SIMPLE,Q=_(!1),R=_(!1),q=_(!1),U=_(!1),A=_(!1),O=_([]),z=_([]),V=_({totalRuns:0,activeRuns:0,maxConcurrentOptimizations:0,byStatus:{},byObjective:{},observations:{totalObservations:0,totalDids:0},bestScoreEver:0}),P=_({noDb:!1,error:""}),X=_("scores"),E=_("none"),H=_(!1),J=_(!1),j=_(!1),Z=_(!1),h=te({did:"",score:.8,kind:"generic",weight:1}),S=te({objective:"accuracy",iterations:50}),T=te({method:"z_score",threshold:2.5,decay:"none"}),D=_(null),I=_(null),B=_(null),Y=se(()=>[{title:r("reputation.scoreColumns.rank"),key:"rank",width:"60px"},{title:r("reputation.scoreColumns.did"),key:"did"},{title:r("reputation.scoreColumns.score"),key:"score",width:"220px"},{title:r("reputation.scoreColumns.observations"),key:"observations",width:"100px"},{title:r("reputation.scoreColumns.weightTotal"),key:"weightTotal",width:"100px"}]),oe=se(()=>[{title:r("reputation.runColumns.runId"),key:"runId",width:"140px"},{title:r("reputation.runColumns.objective"),key:"objective",width:"140px"},{title:r("reputation.runColumns.iterations"),key:"iterations",width:"80px"},{title:r("reputation.runColumns.bestScore"),key:"bestScore",width:"110px"},{title:r("reputation.runColumns.status"),key:"status",width:"100px"},{title:r("reputation.runColumns.createdAt"),key:"createdAt",width:"160px"},{title:r("reputation.runColumns.action"),key:"action",width:"160px"}]);function ae(i){const c=`reputation.decay.${i}`,y=r(c);return y===c?i:y}function $(i){const c=`reputation.kind.${i}`,y=r(c);return y===c?i:y}function ee(i){const c=`reputation.objective.${i}`,y=r(c);return y===c?i:y}function C(i){return{accuracy:"blue",fairness:"green",resilience:"purple",convergence_speed:"orange"}[i]||"default"}function ne(i){return{accuracy:"#1677ff",fairness:"#52c41a",resilience:"#722ed1",convergence_speed:"#fa8c16"}[i]||"#888"}function re(i){const c=`reputation.objectiveDesc.${i}`,y=r(c);return y===c?"":y}function a(i){const c=`reputation.status.${i}`,y=r(c);return y===c?i:y}function b(i){return{running:"processing",complete:"blue",applied:"green",failed:"red",cancelled:"default"}[i]||"default"}function W(i){return{running:"#1677ff",complete:"#13c2c2",applied:"#52c41a",failed:"#ff4d4f",cancelled:"#888"}[i]||"#888"}function Re(i){return i===0?"gold":i===1?"silver":i===2?"bronze":""}function we(i){return i>=.8?"#52c41a":i>=.5?"#1677ff":i>=.3?"#faad14":"#ff4d4f"}function je(i,c){return c?Math.round(i/c*100):0}function Ce(i){const c=I.value?.reputationDistribution.buckets.reduce((y,M)=>y+M.count,0)||0;return c?Math.round(i.count/c*100):0}function Te(i){if(typeof i=="string")return i;try{return JSON.stringify(i,null,2)}catch{return String(i)}}async function G(){Q.value=!0,P.value={noDb:!1,error:""};try{const[i,c,y]=await Promise.all([e.execute(`reputation list --decay ${E.value} --json`,1e4).catch(()=>({output:""})),e.execute("reputation runs --limit 50 --json",1e4).catch(()=>({output:""})),e.execute("reputation stats-v2 --json",8e3).catch(()=>({output:""}))]),M=[i,c,y].map(le=>N(le.output)).find(le=>le.noDb);M&&(P.value=M),O.value=ce(i.output),z.value=ge(c.output),V.value=he(y.output)}catch(i){g.error(r("reputation.messages.loadFailed",{err:i?.message||i}))}finally{Q.value=!1}}async function De(){try{const{output:i}=await e.execute(`reputation list --decay ${E.value} --json`,1e4),c=N(i);if(c.noDb){P.value=c;return}O.value=ce(i)}catch(i){g.error(r("reputation.messages.loadScoresFailed",{err:i?.message||i}))}}async function Fe(){if(!h.did.trim()){g.warning(r("reputation.messages.didRequired"));return}if(h.score<0||h.score>1){g.warning(r("reputation.messages.scoreRange"));return}R.value=!0;try{const i=[`reputation observe "${h.did.trim().replace(/"/g,'\\"')}"`,String(h.score),`-k ${h.kind}`,`-w ${h.weight}`,"--json"],{output:c}=await e.execute(i.join(" "),1e4);if(N(c).noDb){g.error(r("reputation.messages.needInit"));return}if(!/"did"/.test(c)){g.error(r("reputation.messages.observeFailed",{err:c.slice(0,120)}));return}g.success(r("reputation.messages.observeOk")),H.value=!1,ue(),await G()}catch(i){g.error(r("reputation.messages.observeFailed",{err:i?.message||i}))}finally{R.value=!1}}async function Ee(){q.value=!0;try{const i=["reputation optimize",`-o ${S.objective}`,`-i ${S.iterations}`,"--json"],{output:c}=await e.execute(i.join(" "),6e4);if(N(c).noDb){g.error(r("reputation.messages.needInit"));return}const M=xe(c);if(!M){g.error(r("reputation.messages.optimizeFailed",{err:c.slice(0,120)}));return}J.value=!1,g.success(r("reputation.messages.optimizeOk",{score:M.bestScore.toFixed(4)})),await G(),D.value=M,Z.value=!0,await ie()}catch(i){g.error(r("reputation.messages.optimizeFailed",{err:i?.message||i}))}finally{q.value=!1}}async function Ie(i){ve.confirm({title:r("reputation.applyConfirm.title"),content:r("reputation.applyConfirm.content",{runId:i.runId.slice(0,12)}),okText:r("reputation.applyConfirm.ok"),cancelText:r("reputation.applyConfirm.cancel"),onOk:async()=>{try{const{output:c}=await e.execute(`reputation apply ${i.runId}`,8e3);if(N(c).noDb){g.error(r("reputation.messages.needInit"));return}if(/Failed|Error/i.test(c)&&!/Applied/i.test(c)){g.error(r("reputation.messages.applyFailed",{err:c.slice(0,120)}));return}g.success(r("reputation.messages.applyOk")),await G()}catch(c){g.error(r("reputation.messages.applyFailed",{err:c?.message||c}))}}})}async function Me(i){D.value=i,I.value=null,Z.value=!0,await ie()}async function ie(){if(D.value){A.value=!0;try{const{output:i}=await e.execute(`reputation analytics ${D.value.runId} --json`,8e3);if(N(i).noDb)return;I.value=ke(i)}catch{}finally{A.value=!1}}}function Le(){B.value=null,j.value=!0}async function Ne(){U.value=!0;try{const i=["reputation anomalies",`-m ${T.method}`,`-t ${T.threshold}`,`-d ${T.decay}`,"--json"],{output:c}=await e.execute(i.join(" "),1e4);if(N(c).noDb){g.error(r("reputation.messages.needInit"));return}B.value=_e(c)}catch(i){g.error(r("reputation.messages.detectFailed",{err:i?.message||i}))}finally{U.value=!1}}function ue(){h.did="",h.score=.8,h.kind="generic",h.weight=1}me(G);const de={t:r,ws:e,EMPTY_IMG:w,loading:Q,observing:R,optimizing:q,detectingAnomalies:U,loadingAnalytics:A,scores:O,runs:z,stats:V,errorState:P,activeTab:X,decayFilter:E,showObserveModal:H,showOptimizeModal:J,showAnomaliesModal:j,showAnalyticsModal:Z,observeForm:h,optimizeForm:S,anomalyForm:T,currentRun:D,currentAnalytics:I,anomalyResult:B,scoreColumns:Y,runColumns:oe,decayLabel:ae,kindLabel:$,objectiveLabel:ee,objectiveColor:C,objectiveBarColor:ne,objectiveDesc:re,statusLabel:a,statusColor:b,statusBarColor:W,rankClass:Re,scoreColor:we,pctOfTotal:je,bucketPct:Ce,formatParams:Te,loadAll:G,loadScores:De,submitObservation:Fe,submitOptimization:Ee,applyRun:Ie,viewRunAnalytics:Me,loadAnalyticsForCurrentRun:ie,openAnomaliesModal:Le,runAnomalyDetection:Ne,resetObserveForm:ue,ref:_,onMounted:me,reactive:te,computed:se,get useI18n(){return fe},get ReloadOutlined(){return Qe},get PlusOutlined(){return Ge},get WarningOutlined(){return Ze},get ThunderboltOutlined(){return He},get UserOutlined(){return qe},get EyeOutlined(){return Ke},get ExperimentOutlined(){return We},get LoadingOutlined(){return Ye},get TrophyOutlined(){return Je},get ArrowRightOutlined(){return Ve},get message(){return g},get Modal(){return ve},get Empty(){return be},get useWsStore(){return ye},get parseScores(){return ce},get parseAnomalies(){return _e},get parseRun(){return xe},get parseRuns(){return ge},get parseAnalytics(){return ke},get parseStatsV2(){return he},get detectReputationError(){return N},get formatReputationTime(){return at},get OPTIMIZATION_OBJECTIVES(){return Se},get DECAY_MODELS(){return Xe},get ANOMALY_METHODS(){return $e},get RUN_STATUSES(){return Oe},get OBSERVATION_KINDS(){return et}};return Object.defineProperty(de,"__isScriptSetup",{enumerable:!1,value:!0}),de}},rt={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},it={class:"page-title"},lt={class:"page-sub"},st={class:"filter-bar"},ct={style:{color:"var(--text-secondary)","font-size":"12px"}},ut={key:1,style:{color:"var(--text-primary)","font-family":"monospace","font-size":"12px"}},dt={key:3,style:{color:"var(--text-secondary)"}},mt={key:4,style:{color:"var(--text-secondary)","font-family":"monospace","font-size":"12px"}},pt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},ft={key:0,style:{color:"var(--text-primary)","font-family":"monospace","font-size":"12px"}},yt={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"}},_t={style:{"margin-left":"8px",color:"var(--text-muted)","font-size":"12px"}},gt={style:{color:"var(--text-muted)","font-size":"11px","margin-top":"4px"}},xt={style:{"margin-left":"8px",color:"var(--text-muted)","font-size":"12px"}},kt={style:{"padding-top":"8px"}},ht={style:{"margin-left":"8px",color:"var(--text-muted)","font-size":"12px"}},St={key:1},Ot={style:{"font-family":"monospace","font-size":"12px",color:"var(--text-primary)"}},zt={style:{"margin-left":"8px",color:"var(--text-secondary)","font-size":"12px"}},At={key:0,style:{"margin-left":"8px",color:"var(--text-muted)","font-size":"11px"}},Rt={key:0,style:{"padding-top":"8px"}},wt={class:"params-pre"},jt={style:{color:"#ff4d4f"}},Ct={key:0,style:{"margin-top":"16px"}},Tt={style:{color:"var(--text-primary)","font-size":"13px",margin:"0 0 10px"}},Dt={class:"bucket-label"},Ft={key:0,style:{"margin-top":"8px",color:"var(--text-secondary)","font-size":"12px"}},Et={key:0,style:{"margin-left":"12px"}};function It(l,t,r,e,w,Q){const R=m("a-button"),q=m("a-space"),U=m("a-alert"),A=m("a-statistic"),O=m("a-card"),z=m("a-col"),V=m("a-row"),P=m("a-radio-button"),X=m("a-radio-group"),E=m("a-progress"),H=m("a-table"),J=m("a-tab-pane"),j=m("a-tag"),Z=m("a-tabs"),h=m("a-input"),S=m("a-form-item"),T=m("a-input-number"),D=m("a-select-option"),I=m("a-select"),B=m("a-form"),Y=m("a-modal"),oe=m("a-divider"),ae=m("a-empty"),$=m("a-list-item"),ee=m("a-list"),C=m("a-descriptions-item"),ne=m("a-descriptions"),re=m("a-spin");return u(),p("div",null,[v("div",rt,[v("div",null,[v("h2",it,s(e.t("reputation.title")),1),v("p",lt,s(e.t("reputation.subtitle")),1)]),o(q,null,{default:n(()=>[o(R,{loading:e.loading,onClick:e.loadAll},{icon:n(()=>[o(e.ReloadOutlined)]),default:n(()=>[f(" "+s(e.t("reputation.refresh")),1)]),_:1},8,["loading"]),o(R,{onClick:e.openAnomaliesModal},{icon:n(()=>[o(e.WarningOutlined)]),default:n(()=>[f(" "+s(e.t("reputation.actions.anomalies")),1)]),_:1}),o(R,{type:"primary",onClick:t[0]||(t[0]=a=>e.showOptimizeModal=!0)},{icon:n(()=>[o(e.ThunderboltOutlined)]),default:n(()=>[f(" "+s(e.t("reputation.actions.optimize")),1)]),_:1})]),_:1})]),d(" noDb banner "),e.errorState.noDb?(u(),x(U,{key:0,type:"info","show-icon":"",message:e.t("reputation.noDb.message"),description:e.t("reputation.noDb.description"),style:{"margin-bottom":"16px"}},null,8,["message","description"])):d("v-if",!0),d(" Stat cards "),o(V,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:n(()=>[o(z,{xs:12,sm:8,lg:5},{default:n(()=>[o(O,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[o(A,{title:e.t("reputation.stats.trackedDids"),value:e.stats.observations.totalDids,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:n(()=>[o(e.UserOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),o(z,{xs:12,sm:8,lg:5},{default:n(()=>[o(O,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[o(A,{title:e.t("reputation.stats.totalObservations"),value:e.stats.observations.totalObservations,"value-style":{color:"#722ed1",fontSize:"20px"}},{prefix:n(()=>[o(e.EyeOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),o(z,{xs:12,sm:8,lg:5},{default:n(()=>[o(O,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[o(A,{title:e.t("reputation.stats.optimizationRuns"),value:e.stats.totalRuns,"value-style":{color:"#13c2c2",fontSize:"20px"}},{prefix:n(()=>[o(e.ExperimentOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),o(z,{xs:12,sm:8,lg:5},{default:n(()=>[o(O,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[o(A,{title:e.t("reputation.stats.active"),value:e.stats.activeRuns,"value-style":{color:e.stats.activeRuns>0?"#1677ff":"#888",fontSize:"20px"},suffix:`/ ${e.stats.maxConcurrentOptimizations}`},{prefix:n(()=>[o(e.LoadingOutlined)]),_:1},8,["title","value","value-style","suffix"])]),_:1})]),_:1}),o(z,{xs:24,sm:8,lg:4},{default:n(()=>[o(O,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[o(A,{title:e.t("reputation.stats.bestEver"),value:e.stats.bestScoreEver,precision:3,"value-style":{color:"#52c41a",fontSize:"20px"}},{prefix:n(()=>[o(e.TrophyOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1})]),_:1}),d(" Tabs "),o(Z,{activeKey:e.activeTab,"onUpdate:activeKey":t[3]||(t[3]=a=>e.activeTab=a),class:"reputation-tabs"},{default:n(()=>[d(" ── Scores tab ──────────────────────────────────────────── "),o(J,{key:"scores",tab:e.t("reputation.tabs.scores")},{default:n(()=>[v("div",st,[v("span",ct,s(e.t("reputation.filter.decayLabel")),1),o(X,{value:e.decayFilter,"onUpdate:value":t[1]||(t[1]=a=>e.decayFilter=a),size:"small","button-style":"solid",onChange:e.loadScores},{default:n(()=>[(u(!0),p(F,null,L(e.DECAY_MODELS,a=>(u(),x(P,{key:a,value:a},{default:n(()=>[f(s(e.decayLabel(a)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),o(R,{size:"small",onClick:t[2]||(t[2]=a=>e.showObserveModal=!0)},{icon:n(()=>[o(e.PlusOutlined)]),default:n(()=>[f(" "+s(e.t("reputation.filter.addObservation")),1)]),_:1})]),o(H,{columns:e.scoreColumns,"data-source":e.scores,pagination:{pageSize:20,showTotal:a=>e.t("reputation.totals.dids",{count:a})},size:"small",loading:e.loading,style:{background:"var(--bg-card)"}},{bodyCell:n(({column:a,record:b,index:W})=>[a.key==="rank"?(u(),p("span",{key:0,class:Ue(["rank-pill",e.rankClass(W)])},s(W+1),3)):d("v-if",!0),a.key==="did"?(u(),p("span",ut,s(b.did),1)):d("v-if",!0),a.key==="score"?(u(),x(E,{key:2,percent:Math.round(b.score*100),"stroke-color":e.scoreColor(b.score),size:"small",format:()=>b.score.toFixed(4)},null,8,["percent","stroke-color","format"])):d("v-if",!0),a.key==="observations"?(u(),p("span",dt,s(b.observations),1)):d("v-if",!0),a.key==="weightTotal"?(u(),p("span",mt,s(b.weightTotal.toFixed(2)),1)):d("v-if",!0)]),emptyText:n(()=>[v("div",pt,[o(e.UserOutlined,{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),f(" "+s(e.t("reputation.empty.scores")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),d(" ── Runs tab ────────────────────────────────────────────── "),o(J,{key:"runs",tab:e.t("reputation.tabs.runs")},{default:n(()=>[o(H,{columns:e.runColumns,"data-source":e.runs,pagination:{pageSize:20,showTotal:a=>e.t("reputation.totals.rows",{count:a})},size:"small",loading:e.loading,style:{background:"var(--bg-card)"}},{bodyCell:n(({column:a,record:b})=>[a.key==="runId"?(u(),p("span",ft,s(b.runId.slice(0,12)),1)):d("v-if",!0),a.key==="objective"?(u(),x(j,{key:1,color:e.objectiveColor(b.objective),style:{"font-family":"monospace"}},{default:n(()=>[f(s(e.objectiveLabel(b.objective)),1)]),_:2},1032,["color"])):d("v-if",!0),a.key==="iterations"?(u(),p("span",yt,s(b.iterations),1)):d("v-if",!0),a.key==="bestScore"?(u(),p("span",{key:3,style:pe({color:e.scoreColor(b.bestScore),fontWeight:500,fontFamily:"monospace"})},s(b.bestScore.toFixed(4)),5)):d("v-if",!0),a.key==="status"?(u(),x(j,{key:4,color:e.statusColor(b.status)},{default:n(()=>[f(s(e.statusLabel(b.status)),1)]),_:2},1032,["color"])):d("v-if",!0),a.key==="createdAt"?(u(),p("span",bt,s(e.formatReputationTime(b.createdAt)),1)):d("v-if",!0),a.key==="action"?(u(),p(F,{key:6},[o(R,{size:"small",type:"link",onClick:W=>e.viewRunAnalytics(b)},{default:n(()=>[f(s(e.t("reputation.rowActions.analyze")),1)]),_:1},8,["onClick"]),b.status==="complete"?(u(),x(R,{key:0,size:"small",type:"link",style:{color:"#52c41a"},onClick:W=>e.applyRun(b)},{default:n(()=>[f(s(e.t("reputation.rowActions.apply")),1)]),_:1},8,["onClick"])):d("v-if",!0)],64)):d("v-if",!0)]),emptyText:n(()=>[v("div",vt,[o(e.ExperimentOutlined,{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),f(" "+s(e.t("reputation.empty.runs")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),d(" ── Breakdown tab ───────────────────────────────────────── "),o(J,{key:"breakdown",tab:e.t("reputation.tabs.breakdown")},{default:n(()=>[o(V,{gutter:[16,16]},{default:n(()=>[o(z,{xs:24,lg:12},{default:n(()=>[o(O,{title:e.t("reputation.breakdown.byStatus"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[(u(!0),p(F,null,L(e.RUN_STATUSES,a=>(u(),p("div",{key:a,class:"bd-row"},[o(j,{color:e.statusColor(a),style:{"min-width":"80px","text-align":"center"}},{default:n(()=>[f(s(e.statusLabel(a)),1)]),_:2},1032,["color"]),o(E,{percent:e.pctOfTotal(e.stats.byStatus[a]||0,e.stats.totalRuns),"stroke-color":e.statusBarColor(a),format:()=>`${e.stats.byStatus[a]||0}`,size:"small",style:{flex:"1","margin-left":"12px"}},null,8,["percent","stroke-color","format"])]))),128))]),_:1},8,["title"])]),_:1}),o(z,{xs:24,lg:12},{default:n(()=>[o(O,{title:e.t("reputation.breakdown.byObjective"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[(u(!0),p(F,null,L(e.OPTIMIZATION_OBJECTIVES,a=>(u(),p("div",{key:a,class:"bd-row"},[o(j,{color:e.objectiveColor(a),style:{"min-width":"100px","text-align":"center","font-family":"monospace"}},{default:n(()=>[f(s(e.objectiveLabel(a)),1)]),_:2},1032,["color"]),o(E,{percent:e.pctOfTotal(e.stats.byObjective[a]||0,e.stats.totalRuns),"stroke-color":e.objectiveBarColor(a),format:()=>`${e.stats.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"]),d(" ── Add observation modal ──────────────────────────────── "),o(Y,{open:e.showObserveModal,"onUpdate:open":t[8]||(t[8]=a=>e.showObserveModal=a),title:e.t("reputation.observe.title"),"confirm-loading":e.observing,width:540,"ok-text":e.t("reputation.observe.ok"),"cancel-text":e.t("common.cancel"),onOk:e.submitObservation,onCancel:e.resetObserveForm},{default:n(()=>[o(B,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:n(()=>[o(S,{label:e.t("reputation.observe.didLabel"),required:""},{default:n(()=>[o(h,{value:e.observeForm.did,"onUpdate:value":t[4]||(t[4]=a=>e.observeForm.did=a),placeholder:e.t("reputation.observe.didPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),o(S,{label:e.t("reputation.observe.scoreLabel"),required:""},{default:n(()=>[o(T,{value:e.observeForm.score,"onUpdate:value":t[5]||(t[5]=a=>e.observeForm.score=a),min:0,max:1,step:.05,style:{width:"160px"}},null,8,["value"]),v("span",_t,s(e.t("reputation.observe.scoreRange")),1)]),_:1},8,["label"]),o(S,{label:e.t("reputation.observe.kindLabel")},{default:n(()=>[o(I,{value:e.observeForm.kind,"onUpdate:value":t[6]||(t[6]=a=>e.observeForm.kind=a)},{default:n(()=>[(u(!0),p(F,null,L(e.OBSERVATION_KINDS,a=>(u(),x(D,{key:a,value:a},{default:n(()=>[f(s(e.kindLabel(a)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"]),o(S,{label:e.t("reputation.observe.weightLabel")},{default:n(()=>[o(T,{value:e.observeForm.weight,"onUpdate:value":t[7]||(t[7]=a=>e.observeForm.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"]),d(" ── Optimize modal ─────────────────────────────────────── "),o(Y,{open:e.showOptimizeModal,"onUpdate:open":t[11]||(t[11]=a=>e.showOptimizeModal=a),title:e.t("reputation.optimize.title"),"confirm-loading":e.optimizing,width:540,"ok-text":e.t("reputation.optimize.ok"),"cancel-text":e.t("common.cancel"),onOk:e.submitOptimization},{default:n(()=>[o(B,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:n(()=>[o(S,{label:e.t("reputation.optimize.objectiveLabel"),required:""},{default:n(()=>[o(I,{value:e.optimizeForm.objective,"onUpdate:value":t[9]||(t[9]=a=>e.optimizeForm.objective=a)},{default:n(()=>[(u(!0),p(F,null,L(e.OPTIMIZATION_OBJECTIVES,a=>(u(),x(D,{key:a,value:a},{default:n(()=>[f(s(e.objectiveLabel(a)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),v("div",gt,s(e.objectiveDesc(e.optimizeForm.objective)),1)]),_:1},8,["label"]),o(S,{label:e.t("reputation.optimize.iterationsLabel")},{default:n(()=>[o(T,{value:e.optimizeForm.iterations,"onUpdate:value":t[10]||(t[10]=a=>e.optimizeForm.iterations=a),min:1,max:1e3,step:10,style:{width:"160px"}},null,8,["value"]),v("span",xt,s(e.t("reputation.optimize.iterationsRange")),1)]),_:1},8,["label"])]),_:1}),o(U,{type:"info","show-icon":"",message:e.t("reputation.optimize.syncMessage"),description:e.t("reputation.optimize.syncDescription"),style:{"margin-top":"12px"}},null,8,["message","description"])]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),d(" ── Anomaly detection modal ────────────────────────────── "),o(Y,{open:e.showAnomaliesModal,"onUpdate:open":t[15]||(t[15]=a=>e.showAnomaliesModal=a),title:e.t("reputation.anomaly.title"),width:640,footer:null},{default:n(()=>[v("div",kt,[o(B,{"label-col":{span:5},"wrapper-col":{span:19}},{default:n(()=>[o(S,{label:e.t("reputation.anomaly.methodLabel")},{default:n(()=>[o(X,{value:e.anomalyForm.method,"onUpdate:value":t[12]||(t[12]=a=>e.anomalyForm.method=a),"button-style":"solid"},{default:n(()=>[(u(!0),p(F,null,L(e.ANOMALY_METHODS,a=>(u(),x(P,{key:a,value:a},{default:n(()=>[f(s(a==="z_score"?e.t("reputation.anomaly.zScoreLabel"):e.t("reputation.anomaly.iqrLabel")),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"]),o(S,{label:e.t("reputation.anomaly.thresholdLabel")},{default:n(()=>[o(T,{value:e.anomalyForm.threshold,"onUpdate:value":t[13]||(t[13]=a=>e.anomalyForm.threshold=a),min:.5,step:.1,style:{width:"120px"}},null,8,["value"]),v("span",ht,s(e.t("reputation.anomaly.thresholdHint")),1)]),_:1},8,["label"]),o(S,{label:e.t("reputation.anomaly.decayLabel")},{default:n(()=>[o(I,{value:e.anomalyForm.decay,"onUpdate:value":t[14]||(t[14]=a=>e.anomalyForm.decay=a),style:{width:"200px"}},{default:n(()=>[(u(!0),p(F,null,L(e.DECAY_MODELS,a=>(u(),x(D,{key:a,value:a},{default:n(()=>[f(s(e.decayLabel(a)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"]),o(S,{"wrapper-col":{offset:5,span:19}},{default:n(()=>[o(R,{type:"primary",loading:e.detectingAnomalies,onClick:e.runAnomalyDetection},{icon:n(()=>[o(e.WarningOutlined)]),default:n(()=>[f(" "+s(e.t("reputation.anomaly.start")),1)]),_:1},8,["loading"])]),_:1})]),_:1}),o(oe),e.anomalyResult?(u(),p("div",St,[o(V,{gutter:12,style:{"margin-bottom":"12px"}},{default:n(()=>[o(z,{span:8},{default:n(()=>[o(A,{title:e.t("reputation.anomaly.totalSamples"),value:e.anomalyResult.totalSamples,"value-style":{fontSize:"16px"}},null,8,["title","value"])]),_:1}),o(z,{span:8},{default:n(()=>[o(A,{title:e.t("reputation.anomaly.threshold"),value:e.anomalyResult.threshold,precision:2,"value-style":{fontSize:"16px"}},null,8,["title","value"])]),_:1}),o(z,{span:8},{default:n(()=>[o(A,{title:e.t("reputation.anomaly.anomalies"),value:e.anomalyResult.anomalies.length,"value-style":{color:e.anomalyResult.anomalies.length>0?"#ff4d4f":"#52c41a",fontSize:"16px"}},null,8,["title","value","value-style"])]),_:1})]),_:1}),e.anomalyResult.message?(u(),x(U,{key:0,message:e.anomalyResult.message,type:"warning","show-icon":"",style:{"margin-bottom":"12px"}},null,8,["message"])):d("v-if",!0),e.anomalyResult.anomalies.length?(u(),x(ee,{key:1,size:"small","data-source":e.anomalyResult.anomalies},{renderItem:n(({item:a})=>[o($,null,{default:n(()=>[v("span",Ot,s(a.did),1),o(j,{color:"red",style:{"margin-left":"8px"}},{default:n(()=>[f(s(e.t("reputation.anomaly.scoreTag",{score:a.score.toFixed(4)})),1)]),_:2},1024),v("span",zt,s(a.reason),1),a.zScore!==null?(u(),p("span",At,s(e.t("reputation.anomaly.zNote",{value:a.zScore.toFixed(2)})),1)):d("v-if",!0)]),_:2},1024)]),_:1},8,["data-source"])):d("v-if",!0)])):(u(),x(ae,{key:0,description:e.t("reputation.anomaly.notDetected"),image:e.EMPTY_IMG},null,8,["description","image"]))])]),_:1},8,["open","title"]),d(" ── Run analytics / details modal ──────────────────────── "),o(Y,{open:e.showAnalyticsModal,"onUpdate:open":t[16]||(t[16]=a=>e.showAnalyticsModal=a),title:e.t("reputation.analytics.title",{runId:e.currentRun?.runId?.slice(0,12)||""}),width:780,footer:null},{default:n(()=>[e.currentRun?(u(),p("div",Rt,[o(ne,{column:2,size:"small",bordered:""},{default:n(()=>[o(C,{label:e.t("reputation.analytics.objective")},{default:n(()=>[o(j,{color:e.objectiveColor(e.currentRun.objective)},{default:n(()=>[f(s(e.objectiveLabel(e.currentRun.objective)),1)]),_:1},8,["color"])]),_:1},8,["label"]),o(C,{label:e.t("reputation.analytics.status")},{default:n(()=>[o(j,{color:e.statusColor(e.currentRun.status)},{default:n(()=>[f(s(e.statusLabel(e.currentRun.status)),1)]),_:1},8,["color"])]),_:1},8,["label"]),o(C,{label:e.t("reputation.analytics.iterations")},{default:n(()=>[f(s(e.currentRun.iterations),1)]),_:1},8,["label"]),o(C,{label:e.t("reputation.analytics.bestScore")},{default:n(()=>[v("span",{style:pe({color:e.scoreColor(e.currentRun.bestScore),fontWeight:500,fontFamily:"monospace"})},s(e.currentRun.bestScore.toFixed(4)),5)]),_:1},8,["label"]),o(C,{label:e.t("reputation.analytics.createdAt")},{default:n(()=>[f(s(e.formatReputationTime(e.currentRun.createdAt)),1)]),_:1},8,["label"]),e.currentRun.completedAt?(u(),x(C,{key:0,label:e.t("reputation.analytics.completedAt")},{default:n(()=>[f(s(e.formatReputationTime(e.currentRun.completedAt)),1)]),_:1},8,["label"])):d("v-if",!0),e.currentRun.bestParams?(u(),x(C,{key:1,label:e.t("reputation.analytics.bestParams"),span:2},{default:n(()=>[v("pre",wt,s(e.formatParams(e.currentRun.bestParams)),1)]),_:1},8,["label"])):d("v-if",!0),e.currentRun.errorMessage?(u(),x(C,{key:2,label:e.t("reputation.analytics.errorMessage"),span:2},{default:n(()=>[v("span",jt,s(e.currentRun.errorMessage),1)]),_:1},8,["label"])):d("v-if",!0)]),_:1}),o(re,{spinning:e.loadingAnalytics},{default:n(()=>[e.currentAnalytics?(u(),p("div",Ct,[v("h4",Tt,s(e.t("reputation.analytics.distributionTitle")),1),o(O,{size:"small",style:{"margin-bottom":"12px"}},{default:n(()=>[(u(!0),p(F,null,L(e.currentAnalytics.reputationDistribution.buckets,a=>(u(),p("div",{key:a.label,class:"bucket-row"},[v("span",Dt,s(a.label),1),o(E,{percent:e.bucketPct(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)),e.currentAnalytics.reputationDistribution.mean!==null?(u(),p("div",Ft,[f(s(e.t("reputation.analytics.mean",{value:e.currentAnalytics.reputationDistribution.mean.toFixed(4)}))+" ",1),e.currentAnalytics.reputationDistribution.stdDev!==null?(u(),p("span",Et,s(e.t("reputation.analytics.stdDev",{value:e.currentAnalytics.reputationDistribution.stdDev.toFixed(4)})),1)):d("v-if",!0)])):d("v-if",!0)]),_:1}),e.currentAnalytics.recommendations.length?(u(),x(O,{key:0,title:e.t("reputation.analytics.recommendations"),size:"small"},{default:n(()=>[o(ee,{size:"small","data-source":e.currentAnalytics.recommendations},{renderItem:n(({item:a})=>[o($,null,{default:n(()=>[o(e.ArrowRightOutlined,{style:{color:"#faad14","margin-right":"8px"}}),f(" "+s(a),1)]),_:2},1024)]),_:1},8,["data-source"])]),_:1},8,["title"])):d("v-if",!0)])):d("v-if",!0)]),_:1},8,["spinning"])])):d("v-if",!0)]),_:1},8,["open","title"])])}const ro=Be(nt,[["render",It],["__scopeId","data-v-c4829a4e"],["__file","/tmp/cc-web-panel-j3HnbJ/repo/packages/web-panel/src/views/Reputation.vue"]]);export{ro as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.page-title[data-v-c4829a4e]{margin:0;color:var(--text-primary);font-size:22px;font-weight:600}.page-sub[data-v-c4829a4e]{margin:4px 0 0;color:var(--text-secondary);font-size:13px}.reputation-tabs[data-v-c4829a4e] .ant-tabs-nav{margin-bottom:16px}.filter-bar[data-v-c4829a4e]{display:flex;align-items:center;gap:12px;margin-bottom:12px;flex-wrap:wrap}.rank-pill[data-v-c4829a4e]{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-c4829a4e]{background:linear-gradient(135deg,#faad14,#d48806);color:#fff}.rank-pill.silver[data-v-c4829a4e]{background:linear-gradient(135deg,#d9d9d9,#8c8c8c);color:#fff}.rank-pill.bronze[data-v-c4829a4e]{background:linear-gradient(135deg,#d4a373,#ad7d4a);color:#fff}.bd-row[data-v-c4829a4e]{display:flex;align-items:center;margin-bottom:8px}.bucket-row[data-v-c4829a4e]{display:flex;align-items:center;margin-bottom:6px}.bucket-label[data-v-c4829a4e]{min-width:100px;font-family:monospace;font-size:12px;color:var(--text-secondary)}.params-pre[data-v-c4829a4e]{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)}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{q as z,f as S,h,a6 as f,i as N}from"./index-k7QsBwyo.js";import{d as _,o as E,f as F,b as o,c as I,r as $}from"./vendor-Bn1JzzAn.js";import{u as M,r as u}from"./responsiveObserve-BLB6SsSw.js";import{u as T}from"./useFlexGapSupport-BClv53kR.js";import{b as V,c as q}from"./index-X6e0cGRU.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=_({compatConfig:{MODE:3},name:"ARow",inheritAttrs:!1,props:D(),setup(s,G){let{slots:d,attrs:l}=G;const{prefixCls:a,direction:R}=z("row",s),[O,C]=V(a);let m;const v=M(),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 n=u[t];if(!y.value[n])continue;const r=s[e][n];if(r!==void 0)return r}return""}),b=g("align"),x=g("justify"),w=T();E(()=>{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)})}),F(()=>{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});q({gutter:A,supportFlexGap:w,wrap:o(()=>s.wrap)});const k=o(()=>N(a.value,{[`${a.value}-no-wrap`]:s.wrap===!1,[`${a.value}-${x.value}`]:x.value,[`${a.value}-${b.value}`]:b.value,[`${a.value}-rtl`]:R.value==="rtl"},l.class,C.value)),B=o(()=>{const e=A.value,t={},n=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 n&&(t.marginLeft=n,t.marginRight=n),w.value?t.rowGap=`${e[1]}px`:r&&(t.marginTop=r,t.marginBottom=r),t});return()=>{var e;return O(I("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};
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import{I as m,J as y,U as f,c as s,K as o,V as v,S as R,Q as g,o as q,b as Q,r as x,P as i,F as N,Z as B,R as k,a2 as $}from"./vendor-Bn1JzzAn.js";import{_ as ee,u as Z,d as u,t as G}from"./index-k7QsBwyo.js";import{aC as te,aR as ne,R as le,at as ae,z as oe}from"./icons-DG5UD-6K.js";const se={__name:"RssFeed",setup(X,{expose:a}){a();const h=Z(),e=x(!1),M=x(!1),j=x(!1),w=x(!1),b=x([]),C=x([]),S=x(""),L=x(!1),O=x(""),z=x([]),D=Q(()=>{const n=b.value.length,l=C.value.length,d=C.value.filter(p=>!p.read).length,r=b.value.filter(p=>p.lastUpdated).sort((p,Y)=>new Date(Y.lastUpdated)-new Date(p.lastUpdated))[0],c=r?I(r.lastUpdated):"-";return[{label:"订阅源数",value:n,color:"#1677ff"},{label:"文章总数",value:l,color:"#52c41a"},{label:"未读文章",value:d,color:"#faad14"},{label:"最近刷新",value:c,color:"#13c2c2"}]}),W=[{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 I(n){if(!n)return"-";try{const l=new Date(n);return isNaN(l.getTime())?n:l.toLocaleString("zh-CN",{month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"})}catch{return n}}function U(n){return G(n)}async function A(){e.value=!0;try{const{output:n}=await h.execute("rss list --json",2e4),l=U(n);Array.isArray(l)?b.value=l.map((d,r)=>({key:d.id||d.url||r,id:d.id||String(r),title:d.title||d.name||"",url:d.url||d.feedUrl||"",itemCount:d.itemCount??d.articleCount??d.count??0,lastUpdated:d.lastUpdated||d.updatedAt||d.lastRefresh||""})):b.value=T(n)}catch(n){u.error("加载订阅源失败: "+n.message)}finally{e.value=!1}}function T(n){const l=[],d=n.split(`
|
|
2
|
-
`);for(const r of d){const c=r.trim();if(!c||c.startsWith("─")||c.match(/^\d+ feed/i)||c.startsWith("RSS")||c.startsWith("No "))continue;const p=c.match(/^(\d+)\.\s+(.+?)(?:\s+[-–]\s+(.+))?$/);p?l.push({key:p[1],id:p[1],title:p[2].trim(),url:(p[3]||"").trim(),itemCount:0,lastUpdated:""}):c.length>5&&l.push({key:String(l.length),id:String(l.length),title:c.slice(0,80),url:"",itemCount:0,lastUpdated:""})}return l}async function F(){M.value=!0,z.value=[];try{let n="rss articles --limit 30 --json";S.value&&(n=`rss articles --feed ${S.value} --limit 30 --json`);const{output:l}=await h.execute(n,2e4),d=U(l);Array.isArray(d)?C.value=d.map((r,c)=>({key:r.id||String(c),id:r.id||String(c),title:r.title||"无标题",link:r.link||r.url||"",source:r.source||r.feedTitle||r.feedName||"",publishedAt:r.publishedAt||r.pubDate||r.date||"",read:!!r.read,summary:r.summary||r.description||"",content:r.content||""})):C.value=P(l)}catch(n){u.error("加载文章失败: "+n.message)}finally{M.value=!1}}function P(n){const l=[],d=n.split(`
|
|
3
|
-
`);for(const r of d){const c=r.trim();if(!c||c.startsWith("─")||c.match(/^\d+ article/i)||c.startsWith("No "))continue;const p=c.match(/^(\d+)\.\s+(.+?)(?:\s+[-–]\s+(.+))?$/);p&&l.push({key:p[1],id:p[1],title:p[2].trim(),link:"",source:(p[3]||"").trim(),publishedAt:"",read:!1,summary:"",content:""})}return l}async function E(){const n=O.value.trim();if(!n){u.warning("请输入订阅源地址");return}w.value=!0;try{const{output:l}=await h.execute(`rss add "${n}"`,3e4);l.includes("error")||l.includes("失败")||l.includes("Error")?u.error("添加失败: "+l.slice(0,120)):(u.success("订阅源已添加"),L.value=!1,O.value="",await A(),await F())}catch(l){u.error("添加失败: "+l.message)}finally{w.value=!1}}async function J(n){try{u.loading({content:`正在刷新 ${n.title||n.id}...`,key:"refreshFeed"}),await h.execute(`rss refresh ${n.id}`,3e4),u.success({content:"刷新完成",key:"refreshFeed"}),await A(),await F()}catch(l){u.error({content:"刷新失败: "+l.message,key:"refreshFeed"})}}async function V(n){try{u.loading({content:`正在删除 ${n.title||n.id}...`,key:"removeFeed"});const{output:l}=await h.execute(`rss remove ${n.id}`,2e4);l.includes("error")||l.includes("失败")?u.error({content:"删除失败: "+l.slice(0,120),key:"removeFeed"}):(u.success({content:"已删除订阅源",key:"removeFeed"}),await A(),await F())}catch(l){u.error({content:"删除失败: "+l.message,key:"removeFeed"})}}async function t(){j.value=!0;try{u.loading({content:"正在刷新所有订阅源...",key:"refreshAll"}),await h.execute("rss refresh-all",6e4),u.success({content:"全部刷新完成",key:"refreshAll"}),await A(),await F()}catch(n){u.error({content:"刷新失败: "+n.message,key:"refreshAll"})}finally{j.value=!1}}async function _(n){try{await h.execute(`rss mark-read ${n.id}`,1e4),n.read=!0,u.success("已标记已读")}catch(l){u.error("操作失败: "+l.message)}}function K(n,l){z.value=n?[l.key]:[]}q(async()=>{await A(),await F()});const H={ws:h,feedsLoading:e,articlesLoading:M,refreshingAll:j,adding:w,feeds:b,articles:C,selectedFeedId:S,showAddModal:L,newFeedUrl:O,expandedKeys:z,statsCards:D,articleColumns:W,formatTime:I,safeParseJson:U,loadFeeds:A,parseFeedListText:T,loadArticles:F,parseArticlesText:P,addFeed:E,refreshFeed:J,removeFeed:V,refreshAllFeeds:t,markRead:_,onExpandArticle:K,ref:x,computed:Q,onMounted:q,get ReadOutlined(){return oe},get PlusOutlined(){return ae},get ReloadOutlined(){return le},get DeleteOutlined(){return ne},get LinkOutlined(){return te},get message(){return u},get useWsStore(){return Z},get tryParseJson(){return G}};return Object.defineProperty(H,"__isScriptSetup",{enumerable:!1,value:!0}),H}},re={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},ie={key:0,style:{"text-align":"center",padding:"60px"}},de={style:{display:"flex","align-items":"center",gap:"6px",overflow:"hidden"}},ce={style:{color:"#e0e0e0","font-size":"13px",overflow:"hidden","text-overflow":"ellipsis","white-space":"nowrap"}},ue={style:{color:"var(--text-muted)","font-size":"11px","margin-bottom":"6px",overflow:"hidden","text-overflow":"ellipsis","white-space":"nowrap"}},me={style:{display:"flex","justify-content":"space-between",color:"var(--text-secondary)","font-size":"12px"}},pe={key:2,style:{"text-align":"center",padding:"40px",color:"var(--text-muted)","margin-bottom":"24px"}},ye={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"12px"}},fe={key:3,style:{"text-align":"center",padding:"60px"}},ge=["href"],_e={key:1,style:{color:"#e0e0e0","font-weight":"500"}},ve={key:2,style:{color:"var(--text-secondary)","font-size":"12px"}},xe={key:1,style:{color:"var(--text-muted)","font-size":"12px"}},ke={style:{padding:"8px 16px",color:"var(--text-secondary)","font-size":"13px","line-height":"1.8","max-height":"300px","overflow-y":"auto"}},he={key:0,style:{"margin-bottom":"8px"}},we=["innerHTML"],be={key:2,style:{color:"var(--text-muted)"}},Ae={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}};function Fe(X,a,h,e,M,j){const w=m("a-button"),b=m("a-space"),C=m("a-statistic"),S=m("a-card"),L=m("a-col"),O=m("a-row"),z=m("a-spin"),D=m("a-menu-item"),W=m("a-menu"),I=m("a-dropdown"),U=m("a-select-option"),A=m("a-select"),T=m("a-tag"),F=m("a-table"),P=m("a-input"),E=m("a-form-item"),J=m("a-form"),V=m("a-modal");return i(),y("div",null,[f("div",re,[a[6]||(a[6]=f("div",null,[f("h2",{class:"page-title"},"RSS 订阅"),f("p",{class:"page-sub"},"订阅源 / 文章阅读")],-1)),s(b,null,{default:o(()=>[s(w,{type:"primary",onClick:a[0]||(a[0]=t=>e.showAddModal=!0)},{icon:o(()=>[s(e.PlusOutlined)]),default:o(()=>[a[4]||(a[4]=g(" 添加订阅 ",-1))]),_:1}),s(w,{ghost:"",loading:e.refreshingAll,onClick:e.refreshAllFeeds},{icon:o(()=>[s(e.ReloadOutlined)]),default:o(()=>[a[5]||(a[5]=g(" 全部刷新 ",-1))]),_:1},8,["loading"])]),_:1})]),v(" Stats Cards "),s(O,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:o(()=>[(i(!0),y(N,null,B(e.statsCards,t=>(i(),R(L,{xs:12,sm:6,key:t.label},{default:o(()=>[s(S,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"},size:"small"},{default:o(()=>[s(C,{title:t.label,value:t.value,"value-style":{color:t.color,fontSize:"20px"}},null,8,["title","value","value-style"])]),_:2},1024)]),_:2},1024))),128))]),_:1}),v(" Section 1: Feed Sources "),a[16]||(a[16]=f("h3",{style:{color:"var(--text-primary)","margin-bottom":"12px"}},"订阅源管理",-1)),e.feedsLoading?(i(),y("div",ie,[s(z,{size:"large"})])):e.feeds.length>0?(i(),R(O,{key:1,gutter:[16,16],style:{"margin-bottom":"24px"}},{default:o(()=>[(i(!0),y(N,null,B(e.feeds,t=>(i(),R(L,{xs:24,sm:12,md:8,lg:6,key:t.id||t.url},{default:o(()=>[s(S,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"},size:"small",hoverable:!0},{title:o(()=>[f("div",de,[s(e.ReadOutlined,{style:{color:"#1677ff","flex-shrink":"0"}}),f("span",ce,k(t.title||"未命名订阅"),1)])]),extra:o(()=>[s(I,null,{overlay:o(()=>[s(W,null,{default:o(()=>[s(D,{onClick:_=>e.refreshFeed(t)},{default:o(()=>[s(e.ReloadOutlined),a[8]||(a[8]=g(" 刷新 ",-1))]),_:1},8,["onClick"]),s(D,{onClick:_=>e.removeFeed(t),danger:""},{default:o(()=>[s(e.DeleteOutlined),a[9]||(a[9]=g(" 删除 ",-1))]),_:1},8,["onClick"])]),_:2},1024)]),default:o(()=>[s(w,{size:"small",type:"text",style:{color:"var(--text-muted)"}},{default:o(()=>[...a[7]||(a[7]=[g("...",-1)])]),_:1})]),_:2},1024)]),default:o(()=>[f("p",ue,[s(e.LinkOutlined),g(" "+k(t.url||"-"),1)]),f("div",me,[f("span",null,k(t.itemCount??"-")+" 篇文章",1),f("span",null,k(e.formatTime(t.lastUpdated)),1)])]),_:2},1024)]),_:2},1024))),128))]),_:1})):(i(),y("div",pe,[s(e.ReadOutlined,{style:{"font-size":"40px","margin-bottom":"12px",display:"block"}}),a[10]||(a[10]=g(' 暂无订阅源,点击"添加订阅"开始 ',-1))])),v(" Section 2: Articles "),f("div",ye,[a[12]||(a[12]=f("h3",{style:{color:"var(--text-primary)",margin:"0"}},"文章列表",-1)),s(b,null,{default:o(()=>[s(A,{value:e.selectedFeedId,"onUpdate:value":a[1]||(a[1]=t=>e.selectedFeedId=t),style:{"min-width":"180px"},placeholder:"筛选订阅源","allow-clear":"",onChange:e.loadArticles},{default:o(()=>[s(U,{value:""},{default:o(()=>[...a[11]||(a[11]=[g("全部订阅",-1)])]),_:1}),(i(!0),y(N,null,B(e.feeds,t=>(i(),R(U,{key:t.id,value:t.id},{default:o(()=>[g(k(t.title||t.url),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),s(w,{loading:e.articlesLoading,onClick:e.loadArticles},{icon:o(()=>[s(e.ReloadOutlined)]),_:1},8,["loading"])]),_:1})]),e.articlesLoading?(i(),y("div",fe,[s(z,{size:"large"})])):(i(),R(F,{key:4,columns:e.articleColumns,"data-source":e.articles,pagination:{pageSize:20,showTotal:t=>`共 ${t} 条`},size:"small",style:{background:"var(--bg-card)"},"row-class-name":()=>"rss-row",expandable:{expandedRowKeys:e.expandedKeys,onExpand:e.onExpandArticle}},{bodyCell:o(({column:t,record:_})=>[t.key==="title"?(i(),y(N,{key:0},[_.link?(i(),y("a",{key:0,href:_.link,target:"_blank",rel:"noopener noreferrer",style:{color:"#1677ff","font-weight":"500"}},[s(e.LinkOutlined,{style:{"margin-right":"4px"}}),g(k(_.title),1)],8,ge)):(i(),y("span",_e,k(_.title),1))],64)):v("v-if",!0),t.key==="source"?(i(),R(T,{key:1,color:"blue",style:{"font-size":"10px"}},{default:o(()=>[g(k(_.source||"-"),1)]),_:2},1024)):v("v-if",!0),t.key==="publishedAt"?(i(),y("span",ve,k(e.formatTime(_.publishedAt)),1)):v("v-if",!0),t.key==="status"?(i(),R(T,{key:3,color:_.read?"default":"green"},{default:o(()=>[g(k(_.read?"已读":"未读"),1)]),_:2},1032,["color"])):v("v-if",!0),t.key==="actions"?(i(),y(N,{key:4},[_.read?(i(),y("span",xe,"--")):(i(),R(w,{key:0,size:"small",type:"link",onClick:$(K=>e.markRead(_),["stop"])},{default:o(()=>[...a[13]||(a[13]=[g(" 标记已读 ",-1)])]),_:1},8,["onClick"]))],64)):v("v-if",!0)]),expandedRowRender:o(({record:t})=>[f("div",ke,[t.summary?(i(),y("div",he,[a[14]||(a[14]=f("strong",{style:{color:"var(--text-primary)"}},"摘要: ",-1)),g(k(t.summary),1)])):v("v-if",!0),t.content?(i(),y("div",{key:1,innerHTML:t.content,style:{color:"var(--text-secondary)"}},null,8,we)):v("v-if",!0),!t.summary&&!t.content?(i(),y("div",be,"暂无内容预览")):v("v-if",!0)])]),emptyText:o(()=>[f("div",Ae,[s(e.ReadOutlined,{style:{"font-size":"40px","margin-bottom":"12px",display:"block"}}),a[15]||(a[15]=g(" 暂无文章 ",-1))])]),_:1},8,["data-source","pagination","expandable"])),v(" Add Feed Modal "),s(V,{open:e.showAddModal,"onUpdate:open":a[3]||(a[3]=t=>e.showAddModal=t),title:"添加订阅源","confirm-loading":e.adding,onOk:e.addFeed,"ok-text":"添加","cancel-text":"取消"},{default:o(()=>[s(J,{"label-col":{span:4},"wrapper-col":{span:20},style:{"margin-top":"16px"}},{default:o(()=>[s(E,{label:"URL",required:""},{default:o(()=>[s(P,{value:e.newFeedUrl,"onUpdate:value":a[2]||(a[2]=t=>e.newFeedUrl=t),placeholder:"输入 RSS 订阅源地址,如 https://example.com/feed.xml"},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"])])}const Oe=ee(se,[["render",Fe],["__scopeId","data-v-59e72a50"],["__file","/tmp/cc-web-panel-j3HnbJ/repo/packages/web-panel/src/views/RssFeed.vue"]]);export{Oe as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
[data-v-59e72a50] .rss-row:hover td{background:var(--bg-card-hover)!important;cursor:pointer}[data-v-59e72a50] .ant-card-head{border-color:var(--border-color)!important;color:var(--text-primary)!important}[data-v-59e72a50] .ant-select-selector{background:var(--bg-card)!important;border-color:var(--border-color)!important;color:var(--text-primary)!important}
|