chainlesschain 0.157.9 → 0.159.0
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/bin/chainlesschain.js +0 -0
- package/package.json +1 -1
- package/src/assets/web-panel/.build-hash +1 -1
- package/src/assets/web-panel/assets/{AIOps-C4XQxptM.js → AIOps-ztGJppiG.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-CvKbykKA.js → ActionButton-DCuat-R-.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-DFMAWKUR.js → Analytics-m_EtU-RR.js} +2 -2
- package/src/assets/web-panel/assets/AppLayout-8HizVjee.css +1 -0
- package/src/assets/web-panel/assets/AppLayout-Crz8jbEC.js +1 -0
- package/src/assets/web-panel/assets/Audit-CNLWjMXN.js +1 -0
- package/src/assets/web-panel/assets/Audit-kU7vbN-D.css +1 -0
- package/src/assets/web-panel/assets/Backup-CggaSq9O.js +1 -0
- package/src/assets/web-panel/assets/Backup-DxLiJzmk.css +1 -0
- package/src/assets/web-panel/assets/{BaseInput-CvAa9Hm_.js → BaseInput-BssiYvl6.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-3Kj2JQP4.js → Chat-tuVfpQUO.js} +1 -1
- package/src/assets/web-panel/assets/{Checkbox-YsCNWg9S.js → Checkbox-BUUkXdQg.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-DDiVk21N.js → Codegen-CHu-7YGr.js} +1 -1
- package/src/assets/web-panel/assets/{Col-Dpb7Eik4.js → Col-2IaMFwmX.js} +1 -1
- package/src/assets/web-panel/assets/{Community-Bglv8oIv.js → Community-CYL7Fvjq.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-DC8UsEAe.js → Compact-5yRVELhA.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-DzVghx7L.js → Compliance-CKuIDJHK.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-pgKzBNDo.js → Cowork-CFkkMMDK.js} +4 -4
- package/src/assets/web-panel/assets/{Cron-I81HiCa1.js → Cron-DIfkI7vf.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-48CdkgQf.js → Crosschain-BkjY-lst.js} +1 -1
- package/src/assets/web-panel/assets/{DID-CVYxjLQn.js → DID-ChzRkgNy.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-sqj42zKx.js → Dashboard-DKrbXVNn.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-DBfZJHBI.js → Dropdown-BYGoxH1z.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-BT-pF1wN.js → Federation-B8QX-IaA.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-B-sn9E_W.js → FormItemContext-Be6TSNxz.js} +1 -1
- package/src/assets/web-panel/assets/{Git-DTh2i-Qk.js → Git-BBnGgbBR.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-D788Lws6.js → Governance-CxUHZMsp.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-CnFa6Se9.js → Inference-BlnOG71q.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-DHaMxawn.js → KnowledgeGraph-vkVq38kC.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-B39LUZs9.js → Logs-Bxx7WARH.js} +2 -2
- package/src/assets/web-panel/assets/{Marketplace-BdOCF2RA.js → Marketplace-Bh8ExT9_.js} +1 -1
- package/src/assets/web-panel/assets/McpTools-CTQrNVAQ.css +1 -0
- package/src/assets/web-panel/assets/McpTools-Djj_a3ko.js +5 -0
- package/src/assets/web-panel/assets/{Memory-Vl_lYCs2.js → Memory-DlgNgAov.js} +2 -2
- package/src/assets/web-panel/assets/NLProgramming-BN3jaoen.js +1 -0
- package/src/assets/web-panel/assets/Notes-DKkPfXlY.css +1 -0
- package/src/assets/web-panel/assets/Notes-De7mIkkV.js +7 -0
- package/src/assets/web-panel/assets/{Organization-Cxhhw4aD.js → Organization-B-98mdK2.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-L_28D41_.js → Overflow-G0I8IlY3.js} +1 -1
- package/src/assets/web-panel/assets/{OverrideContext-DEW2m7K6.js → OverrideContext-GHsJf9ok.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-BflX74Hm.js → P2P-DIUgHZ1z.js} +2 -2
- package/src/assets/web-panel/assets/{Permissions-ByLhEAbz.js → Permissions-B8XycCVk.js} +4 -4
- package/src/assets/web-panel/assets/{Pipeline-CnZJNdgt.js → Pipeline-cUpETlXS.js} +1 -1
- package/src/assets/web-panel/assets/Portal-SsPhn64D.js +1 -0
- package/src/assets/web-panel/assets/Privacy-B6J89UBw.js +1 -0
- package/src/assets/web-panel/assets/{ProjectSettings-N0r_mtec.js → ProjectSettings-2Ftw0zt_.js} +2 -2
- package/src/assets/web-panel/assets/{Projects-DLvUzeIB.js → Projects-CcOdFpgr.js} +2 -2
- package/src/assets/web-panel/assets/{Providers-B2A35VhD.js → Providers-D0r2qSf-.js} +2 -2
- package/src/assets/web-panel/assets/QuickAsk-CwsPpfkq.js +1 -0
- package/src/assets/web-panel/assets/{Recommend-DYb61WNp.js → Recommend-BYEDetJm.js} +1 -1
- package/src/assets/web-panel/assets/{Reputation-C9BfnI0z.js → Reputation-Bli4hBGH.js} +1 -1
- package/src/assets/web-panel/assets/{Row-CpPHVi7H.js → Row-DTW9_BYi.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-CbqJDErh.js → RssFeed-kwj_himl.js} +3 -3
- package/src/assets/web-panel/assets/{Search-C0gd765-.js → Search-DymcqASO.js} +1 -1
- package/src/assets/web-panel/assets/{Security-DsYWAhpE.js → Security-Bh3yvyNN.js} +3 -3
- package/src/assets/web-panel/assets/{Services-7Blny0Jc.js → Services-O4UZaYur.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-TzxE-JJt.js → Skeleton-B82oQZTz.js} +1 -1
- package/src/assets/web-panel/assets/Skills-BfkrC05g.js +1 -0
- package/src/assets/web-panel/assets/{Sla-mftEtvGn.js → Sla-DEs5XCIf.js} +1 -1
- package/src/assets/web-panel/assets/SpeechSettings-BWMhb10j.js +1 -0
- package/src/assets/web-panel/assets/SpeechSettings-CiKvsIyV.css +1 -0
- package/src/assets/web-panel/assets/{Tasks-Db9TRjE7.js → Tasks-CIBUb9M1.js} +1 -1
- package/src/assets/web-panel/assets/Templates-DAkzr0xS.css +1 -0
- package/src/assets/web-panel/assets/Templates-iqSuJY-O.js +1 -0
- package/src/assets/web-panel/assets/{Tenant-BB-LLJMZ.js → Tenant-CLqZjkVq.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-DHOkHNur.js → Tokens-Bwz8aQtK.js} +1 -1
- package/src/assets/web-panel/assets/Trigger-CxnChVoS.js +1 -0
- package/src/assets/web-panel/assets/{Trust-BpC4gDis.js → Trust-Bp23lyZl.js} +1 -1
- package/src/assets/web-panel/assets/UkeySign-_VAMquoh.js +1 -0
- package/src/assets/web-panel/assets/{VideoEditing-CeDFfKrq.js → VideoEditing-Bxqwg4zW.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-CcNCVaor.js → Wallet-Cvht6Yrh.js} +4 -4
- package/src/assets/web-panel/assets/{WebAuthn-BbIPA6Ca.js → WebAuthn-DD4EomJu.js} +4 -4
- package/src/assets/web-panel/assets/WorkflowEditor-CEKNTS5G.css +1 -0
- package/src/assets/web-panel/assets/WorkflowEditor-CJy5e0fl.js +1 -0
- package/src/assets/web-panel/assets/{chat-CVn-r3oV.js → chat-DY27mJje.js} +1 -1
- package/src/assets/web-panel/assets/{collapseMotion-D3P4mRvK.js → collapseMotion-CyadT_6x.js} +1 -1
- package/src/assets/web-panel/assets/{colors-2MPUdPu2.js → colors-B7fDvuJc.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-B4vcKR0x.js → compact-item-DgthOVXi.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-Div8Cl0F.js → createContext-Blw2vgkG.js} +1 -1
- package/src/assets/web-panel/assets/{hasIn-9c9xldOR.js → hasIn-BfL1HJZl.js} +1 -1
- package/src/assets/web-panel/assets/{icons-ukMaZ3tx.js → icons-CJACPYXu.js} +4 -4
- package/src/assets/web-panel/assets/{index-D1JeOKve.js → index-00RNC3ZQ.js} +2 -2
- package/src/assets/web-panel/assets/{index-DJAPu9VF.js → index-B9B9Zbf3.js} +1 -1
- package/src/assets/web-panel/assets/index-BAsMNMbh.js +1 -0
- package/src/assets/web-panel/assets/{index-BbqCdQXU.js → index-BB5y5Y0z.js} +3 -3
- package/src/assets/web-panel/assets/{index-CtM3tjRj.js → index-BHnaIQEm.js} +1 -1
- package/src/assets/web-panel/assets/index-BVjDIZQ4.js +1 -0
- package/src/assets/web-panel/assets/index-BZeRnzuY.js +55 -0
- package/src/assets/web-panel/assets/{index-OhUZFfxQ.js → index-BZfoAtZC.js} +1 -1
- package/src/assets/web-panel/assets/index-Bl2nXm2J.js +13 -0
- package/src/assets/web-panel/assets/{index-COJ-mQYg.js → index-BsleJWGy.js} +2 -2
- package/src/assets/web-panel/assets/{index-BuVNDnn8.js → index-BuEOhTAw.js} +5 -5
- package/src/assets/web-panel/assets/{index-BfoYep3e.js → index-Bw1dwHWm.js} +1 -1
- package/src/assets/web-panel/assets/{index-BCfVA9mJ.js → index-Bw_UV2ez.js} +1 -1
- package/src/assets/web-panel/assets/index-C8GYpC65.js +1 -0
- package/src/assets/web-panel/assets/{index-CVYrm1az.js → index-CBHlKa-J.js} +1 -1
- package/src/assets/web-panel/assets/{index-IzAqu_OK.js → index-CL-7KCFI.js} +2 -2
- package/src/assets/web-panel/assets/{index-BntG0RJO.js → index-CiN4NEAa.js} +1 -1
- package/src/assets/web-panel/assets/{index-B4hcllQg.js → index-CqjUUbil.js} +1 -1
- package/src/assets/web-panel/assets/{index-D-0g6tCK.js → index-Cqtt1N0F.js} +1 -1
- package/src/assets/web-panel/assets/index-D1QP9Ue1.js +1 -0
- package/src/assets/web-panel/assets/index-D6BUjL6I.js +1 -0
- package/src/assets/web-panel/assets/{index-C1GXp5YD.js → index-DN7ywgBJ.js} +1 -1
- package/src/assets/web-panel/assets/index-DasW8LIs.js +1 -0
- package/src/assets/web-panel/assets/{index-C-CTCrAH.js → index-Dd9McFt_.js} +1 -1
- package/src/assets/web-panel/assets/{index-COdKVelL.js → index-DdzLEdL6.js} +1 -1
- package/src/assets/web-panel/assets/index-DhML6F3z.js +1 -0
- package/src/assets/web-panel/assets/{index-DogHNcyC.js → index-DjN0nHiV.js} +1 -1
- package/src/assets/web-panel/assets/{index-ZW72ov7W.js → index-DjhWpiZW.js} +1 -1
- package/src/assets/web-panel/assets/{index-B65KFSc3.js → index-DouFuKIR.js} +1 -1
- package/src/assets/web-panel/assets/{index--tOLU2ID.js → index-DyRzaN4b.js} +1 -1
- package/src/assets/web-panel/assets/{index-B58J4NxK.js → index-DzWwjWYN.js} +1 -1
- package/src/assets/web-panel/assets/index-Dza_w3kG.js +1 -0
- package/src/assets/web-panel/assets/{index-dV8k_pMc.js → index-Q4qgOtOe.js} +1 -1
- package/src/assets/web-panel/assets/index-Vit9TJBu.js +36 -0
- package/src/assets/web-panel/assets/{index-3KbT-bG7.js → index-lkJllVbJ.js} +3 -3
- package/src/assets/web-panel/assets/{index-Ca3iTiXs.js → index-uMWaXVtR.js} +2 -2
- package/src/assets/web-panel/assets/{index-BjGOthNv.js → index-uwh_ikIt.js} +1 -1
- package/src/assets/web-panel/assets/{index-D0GALIQZ.js → index-x8iHfZRd.js} +3 -3
- package/src/assets/web-panel/assets/{initDefaultProps--L8bzddm.js → initDefaultProps-BeWIEzBr.js} +1 -1
- package/src/assets/web-panel/assets/{motion-BR7NF0vx.js → motion-CIQOKmi6.js} +3 -3
- package/src/assets/web-panel/assets/{move-BpyQMRtF.js → move-ZgRPlBji.js} +1 -1
- package/src/assets/web-panel/assets/{omit-RkKN6uqw.js → omit-BS0H_YEP.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-Bk8_mKGY.js → pickAttrs-BOGgGau8.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-CBAaXBxj.js → placementArrow--c5TQkDQ.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-BzrPInK7.js → responsiveObserve-CrHOX7jp.js} +1 -1
- package/src/assets/web-panel/assets/{slide-CXFBsLyp.js → slide-Dd2mJUD0.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-6TeOuUzQ.js → statusUtils-5QFvAofV.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-CQt4HHRm.js → styleChecker-CiDrXnbi.js} +1 -1
- package/src/assets/web-panel/assets/{transition-CGYDOK3N.js → transition-CVd2ueaJ.js} +1 -1
- package/src/assets/web-panel/assets/{useConfigInject-BKqJUQaF.js → useConfigInject-DIkkDpt1.js} +2 -2
- package/src/assets/web-panel/assets/useFlexGapSupport-rrtj6f1h.js +1 -0
- package/src/assets/web-panel/assets/useFs-CK8VYPus.js +1 -0
- package/src/assets/web-panel/assets/{useMergedState-DbHXwBgv.js → useMergedState-CLY-UHry.js} +1 -1
- package/src/assets/web-panel/assets/{useRefs-DRyTVik7.js → useRefs-HzOoMkZk.js} +1 -1
- package/src/assets/web-panel/assets/useShellMode-CgR0wCYM.js +1 -0
- package/src/assets/web-panel/assets/{useState-DoAhV80c.js → useState-yWVBuz1S.js} +1 -1
- package/src/assets/web-panel/assets/{vendor-BVetwVfk.js → vendor-D0Qjn73K.js} +1 -1
- package/src/assets/web-panel/assets/vnode-xRp-KMjS.js +1 -0
- package/src/assets/web-panel/assets/ws-4ur1fGsk.js +1 -0
- package/src/assets/web-panel/assets/{zoom-BNV3xYvt.js → zoom-CrI_kdTW.js} +1 -1
- package/src/assets/web-panel/index.html +3 -3
- package/src/commands/nlprog.js +25 -15
- package/src/gateways/ws/ws-server.js +12 -1
- package/src/gateways/ws/ws-session-gateway.js +12 -1
- package/src/lib/listen-with-port-fallback.js +103 -0
- package/src/lib/web-ui-server.js +33 -0
- package/src/runtime/agent-runtime.js +80 -18
- package/src/assets/web-panel/assets/AppLayout-BkNdtTbn.js +0 -1
- package/src/assets/web-panel/assets/AppLayout-CKMl4NLf.css +0 -1
- package/src/assets/web-panel/assets/Audit-Bw7KSJD_.js +0 -1
- package/src/assets/web-panel/assets/Audit-L4_ApS01.css +0 -1
- package/src/assets/web-panel/assets/Backup-D46qSgzQ.js +0 -1
- package/src/assets/web-panel/assets/Backup-fZqtfC1m.css +0 -1
- package/src/assets/web-panel/assets/McpTools-CyhSLDwf.css +0 -1
- package/src/assets/web-panel/assets/McpTools-DbwkdBUE.js +0 -4
- package/src/assets/web-panel/assets/NLProgramming-CgD2H0Pc.js +0 -1
- package/src/assets/web-panel/assets/Notes-BG69sJKi.css +0 -1
- package/src/assets/web-panel/assets/Notes-BvC5_V2H.js +0 -2
- package/src/assets/web-panel/assets/Portal-CHsntPCQ.js +0 -1
- package/src/assets/web-panel/assets/Privacy-BJIajCGG.js +0 -1
- package/src/assets/web-panel/assets/Skills-DfaRaffm.js +0 -1
- package/src/assets/web-panel/assets/Templates-DOY_oZnm.css +0 -1
- package/src/assets/web-panel/assets/Templates-DgonVRQJ.js +0 -1
- package/src/assets/web-panel/assets/Trigger-BV4JPD3z.js +0 -1
- package/src/assets/web-panel/assets/WorkflowEditor-D5bX6woe.css +0 -1
- package/src/assets/web-panel/assets/WorkflowEditor-DxkitXpf.js +0 -1
- package/src/assets/web-panel/assets/index-BcnQrVVZ.js +0 -1
- package/src/assets/web-panel/assets/index-BzBaZFuT.js +0 -1
- package/src/assets/web-panel/assets/index-CDoxJ9Cl.js +0 -1
- package/src/assets/web-panel/assets/index-CIE6ht2b.js +0 -1
- package/src/assets/web-panel/assets/index-CIWKlZ1X.js +0 -13
- package/src/assets/web-panel/assets/index-D--EKCHy.js +0 -1
- package/src/assets/web-panel/assets/index-DIe3dY84.js +0 -1
- package/src/assets/web-panel/assets/index-DdHPswKn.js +0 -1
- package/src/assets/web-panel/assets/index-DgWftysw.js +0 -1
- package/src/assets/web-panel/assets/index-Dk3ZySO2.js +0 -55
- package/src/assets/web-panel/assets/index-ZZ_4A9um.js +0 -36
- package/src/assets/web-panel/assets/useFlexGapSupport--RuYYIc6.js +0 -1
- package/src/assets/web-panel/assets/vnode-I9keNa_U.js +0 -1
- package/src/assets/web-panel/assets/ws-Bv7YH0VB.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{u as lt}from"./ws-Bv7YH0VB.js";import{s as Ee}from"./community-parser-CO25nZFt.js";import{_ as st}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{a as x}from"./index-BbqCdQXU.js";import{Y as it,aD as Ae,m as ut,aE as we,aF as ct,E as Ce,a2 as pt,J as dt,ac as mt,ax as ft}from"./icons-ukMaZ3tx.js";import vt from"./index-D0GALIQZ.js";import{E as yt}from"./useConfigInject-BKqJUQaF.js";import{l as bt,F as p,D as b,c as e,x as a,m as S,G as f,q as c,r as k,v as i,J as d,u as v,H as E,L as N,I as u,E as _t,N as Re,a as fe}from"./vendor-BVetwVfk.js";import"./index-ZZ_4A9um.js";import"./transition-CGYDOK3N.js";import"./Keyframes-C7fCrnlS.js";import"./Portal-CHsntPCQ.js";import"./index-U4Zd5IK6.js";import"./KeyCode-D63Tfrq7.js";import"./omit-RkKN6uqw.js";import"./pickAttrs-Bk8_mKGY.js";import"./initDefaultProps--L8bzddm.js";import"./motion-BR7NF0vx.js";import"./raf-Deuc0E8-.js";import"./index-DIe3dY84.js";import"./index-C-CTCrAH.js";import"./isVisible-C7tPsqfj.js";import"./useState-DoAhV80c.js";import"./devWarning-CNIS3FrJ.js";import"./warning-Pq00owYb.js";import"./compact-item-B4vcKR0x.js";import"./createContext-Div8Cl0F.js";import"./Compact-DC8UsEAe.js";import"./_getTag-CWA3v-Ds.js";import"./styleChecker-CQt4HHRm.js";import"./zoom-BNV3xYvt.js";import"./ActionButton-CvKbykKA.js";import"./vnode-I9keNa_U.js";function P(l){const n=Ee(l);if(!n)return null;try{return JSON.parse(n)}catch{}const s=n.match(/\{[\s\S]*\}|\[[\s\S]*\]/);if(!s)return null;try{return JSON.parse(s[0])}catch{return null}}const ye=Object.freeze(["accuracy","fairness","resilience","convergence_speed"]),Ie=Object.freeze(["none","exponential","linear","step"]),gt=Object.freeze(["z_score","iqr"]),$e=Object.freeze(["running","complete","applied","failed","cancelled"]),xt=Object.freeze(["generic","task","review","vote"]);function h(l,n=0){return typeof l=="number"&&Number.isFinite(l)?l:n}function B(l){if(!l)return{noDb:!1,error:""};const n=Ee(l),s=/Database not available/i.test(n);return{noDb:s,error:s?"Database not available":""}}function kt(l,n=0){if(!l||typeof l!="object")return null;const s=l.did||"";return s?{key:s,did:s,score:h(l.score,0),observations:h(l.observations,0),decay:String(l.decay||"none"),weightTotal:h(l.weightTotal,0),_idx:n}:null}function Te(l){const n=P(l);return Array.isArray(n)?n.map(kt).filter(Boolean):[]}function Fe(l,n=0){if(!l||typeof l!="object")return null;const s=l.did||"";return s?{key:`${s}-${n}`,did:s,score:h(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 St(l){const n=P(l);if(!n||typeof n!="object"||Array.isArray(n))return{method:"",threshold:0,totalSamples:0,anomalies:[],summary:"",message:""};const s=Array.isArray(n.anomalies)?n.anomalies.map(Fe).filter(Boolean):[];return{method:String(n.method||""),threshold:h(n.threshold,0),totalSamples:h(n.totalSamples,0),anomalies:s,summary:n.summary?String(n.summary):"",message:n.message?String(n.message):""}}function Ne(l,n=0){if(!l||typeof l!="object")return null;const s=l.runId||"";return s?{key:s,runId:s,objective:String(l.objective||""),iterations:h(l.iterations,0),paramSpace:l.paramSpace??null,bestParams:l.bestParams??null,bestScore:h(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:n}:null}function zt(l){const n=P(l);return Array.isArray(n)?n.map(Ne).filter(Boolean):[]}function ht(l){const n=P(l);return!n||typeof n!="object"||Array.isArray(n)?null:Ne(n,0)}function Dt(l){const n=P(l);if(!n||typeof n!="object"||Array.isArray(n))return null;const s=n.reputationDistribution||{};return{analyticsId:String(n.analyticsId||""),runId:String(n.runId||""),reputationDistribution:{buckets:Array.isArray(s.buckets)?s.buckets.filter(m=>m&&typeof m=="object").map(m=>({label:String(m.label||""),count:h(m.count,0),min:typeof m.min=="number"?m.min:null,max:typeof m.max=="number"?m.max:null})):[],mean:typeof s.mean=="number"?s.mean:null,stdDev:typeof s.stdDev=="number"?s.stdDev:null},anomalies:n.anomalies&&typeof n.anomalies=="object"?{method:String(n.anomalies.method||""),totalSamples:h(n.anomalies.totalSamples,0),anomalies:Array.isArray(n.anomalies.anomalies)?n.anomalies.anomalies.map(Fe).filter(Boolean):[],summary:n.anomalies.summary?String(n.anomalies.summary):"",message:n.anomalies.message?String(n.anomalies.message):""}:{method:"",totalSamples:0,anomalies:[],summary:"",message:""},recommendations:Array.isArray(n.recommendations)?n.recommendations.filter(m=>typeof m=="string"):[]}}const Ot={totalRuns:0,activeRuns:0,maxConcurrentOptimizations:0,byStatus:{},byObjective:{},observations:{totalObservations:0,totalDids:0},bestScoreEver:0};function jt(l){const n=JSON.parse(JSON.stringify(Ot));for(const m of $e)n.byStatus[m]=0;for(const m of ye)n.byObjective[m]=0;const s=P(l);if(!s||typeof s!="object"||Array.isArray(s))return n;if(n.totalRuns=h(s.totalRuns,0),n.activeRuns=h(s.activeRuns,0),n.maxConcurrentOptimizations=h(s.maxConcurrentOptimizations,0),n.bestScoreEver=h(s.bestScoreEver,0),s.byStatus&&typeof s.byStatus=="object")for(const[m,O]of Object.entries(s.byStatus))typeof O=="number"&&Number.isFinite(O)&&(n.byStatus[m]=O);if(s.byObjective&&typeof s.byObjective=="object")for(const[m,O]of Object.entries(s.byObjective))typeof O=="number"&&Number.isFinite(O)&&(n.byObjective[m]=O);return s.observations&&typeof s.observations=="object"&&(n.observations.totalObservations=h(s.observations.totalObservations,0),n.observations.totalDids=h(s.observations.totalDids,0)),n}function ve(l){if(l==null||l==="")return"—";const n=typeof l=="number"?new Date(l):new Date(String(l));return isNaN(n.getTime())?String(l):n.toLocaleString("zh-CN",{hour12:!1})}const At={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},wt={class:"filter-bar"},Ct={key:1,style:{color:"var(--text-primary)","font-family":"monospace","font-size":"12px"}},Rt={key:3,style:{color:"var(--text-secondary)"}},It={key:4,style:{color:"var(--text-secondary)","font-family":"monospace","font-size":"12px"}},Tt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},Et={key:0,style:{color:"var(--text-primary)","font-family":"monospace","font-size":"12px"}},$t={key:2,style:{color:"var(--text-secondary)"}},Ft={key:5,style:{color:"var(--text-secondary)","font-size":"11px"}},Nt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},Mt={style:{color:"var(--text-muted)","font-size":"11px","margin-top":"4px"}},Ut={style:{"padding-top":"8px"}},Lt={key:1},Bt={style:{"font-family":"monospace","font-size":"12px",color:"var(--text-primary)"}},Pt={style:{"margin-left":"8px",color:"var(--text-secondary)","font-size":"12px"}},Jt={key:0,style:{"margin-left":"8px",color:"var(--text-muted)","font-size":"11px"}},Vt={key:0,style:{"padding-top":"8px"}},qt={class:"params-pre"},Kt={style:{color:"#ff4d4f"}},Wt={key:0,style:{"margin-top":"16px"}},Yt={class:"bucket-label"},Gt={key:0,style:{"margin-top":"8px",color:"var(--text-secondary)","font-size":"12px"}},Ht={key:0,style:{"margin-left":"12px"}},Zt={__name:"Reputation",setup(l){const n=lt(),s=yt.PRESENTED_IMAGE_SIMPLE,m=k(!1),O=k(!1),ee=k(!1),te=k(!1),oe=k(!1),ae=k([]),be=k([]),D=k({totalRuns:0,activeRuns:0,maxConcurrentOptimizations:0,byStatus:{},byObjective:{},observations:{totalObservations:0,totalDids:0},bestScoreEver:0}),V=k({noDb:!1,error:""}),_e=k("scores"),q=k("none"),K=k(!1),W=k(!1),ne=k(!1),Y=k(!1),_=fe({did:"",score:.8,kind:"generic",weight:1}),M=fe({objective:"accuracy",iterations:50}),I=fe({method:"z_score",threshold:2.5,decay:"none"}),y=k(null),j=k(null),A=k(null),Me=[{title:"排名",key:"rank",width:"60px"},{title:"DID",key:"did"},{title:"声誉分数",key:"score",width:"220px"},{title:"观察数",key:"observations",width:"100px"},{title:"权重和",key:"weightTotal",width:"100px"}],Ue=[{title:"Run ID",key:"runId",width:"140px"},{title:"目标",key:"objective",width:"140px"},{title:"迭代",key:"iterations",width:"80px"},{title:"最佳分数",key:"bestScore",width:"110px"},{title:"状态",key:"status",width:"100px"},{title:"创建时间",key:"createdAt",width:"160px"},{title:"操作",key:"action",width:"160px"}];function ge(r){return{none:"无",exponential:"指数",linear:"线性",step:"步进"}[r]||r}function Le(r){return{generic:"通用",task:"任务",review:"评审",vote:"投票"}[r]||r}function G(r){return{accuracy:"准确性",fairness:"公平性",resilience:"抗扰动",convergence_speed:"收敛速度"}[r]||r}function re(r){return{accuracy:"blue",fairness:"green",resilience:"purple",convergence_speed:"orange"}[r]||"default"}function Be(r){return{accuracy:"#1677ff",fairness:"#52c41a",resilience:"#722ed1",convergence_speed:"#fa8c16"}[r]||"#888"}function Pe(r){return{accuracy:"最大化对真实声誉的拟合",fairness:"降低衰减强度,平等对待各 DID",resilience:"提高对异常值的容忍度",convergence_speed:"尽量少迭代获得稳定结果"}[r]||""}function le(r){return{running:"运行中",complete:"已完成",applied:"已应用",failed:"失败",cancelled:"已取消"}[r]||r}function se(r){return{running:"processing",complete:"blue",applied:"green",failed:"red",cancelled:"default"}[r]||"default"}function Je(r){return{running:"#1677ff",complete:"#13c2c2",applied:"#52c41a",failed:"#ff4d4f",cancelled:"#888"}[r]||"#888"}function Ve(r){return r===0?"gold":r===1?"silver":r===2?"bronze":""}function ie(r){return r>=.8?"#52c41a":r>=.5?"#1677ff":r>=.3?"#faad14":"#ff4d4f"}function xe(r,o){return o?Math.round(r/o*100):0}function qe(r){const o=j.value?.reputationDistribution.buckets.reduce((z,w)=>z+w.count,0)||0;return o?Math.round(r.count/o*100):0}function Ke(r){if(typeof r=="string")return r;try{return JSON.stringify(r,null,2)}catch{return String(r)}}async function J(){m.value=!0,V.value={noDb:!1,error:""};try{const[r,o,z]=await Promise.all([n.execute(`reputation list --decay ${q.value} --json`,1e4).catch(()=>({output:""})),n.execute("reputation runs --limit 50 --json",1e4).catch(()=>({output:""})),n.execute("reputation stats-v2 --json",8e3).catch(()=>({output:""}))]),w=[r,o,z].map(U=>B(U.output)).find(U=>U.noDb);w&&(V.value=w),ae.value=Te(r.output),be.value=zt(o.output),D.value=jt(z.output)}catch(r){x.error("加载声誉数据失败: "+(r?.message||r))}finally{m.value=!1}}async function We(){try{const{output:r}=await n.execute(`reputation list --decay ${q.value} --json`,1e4),o=B(r);if(o.noDb){V.value=o;return}ae.value=Te(r)}catch(r){x.error("加载评分失败: "+(r?.message||r))}}async function Ye(){if(!_.did.trim()){x.warning("请填写 DID");return}if(_.score<0||_.score>1){x.warning("评分必须在 0 ~ 1 之间");return}O.value=!0;try{const r=[`reputation observe "${_.did.trim().replace(/"/g,'\\"')}"`,String(_.score),`-k ${_.kind}`,`-w ${_.weight}`,"--json"],{output:o}=await n.execute(r.join(" "),1e4);if(B(o).noDb){x.error("需要先 cc init 初始化项目");return}if(!/"did"/.test(o)){x.error("记录失败: "+o.slice(0,120));return}x.success("观察已记录"),K.value=!1,Se(),await J()}catch(r){x.error("记录失败: "+(r?.message||r))}finally{O.value=!1}}async function Ge(){ee.value=!0;try{const r=["reputation optimize",`-o ${M.objective}`,`-i ${M.iterations}`,"--json"],{output:o}=await n.execute(r.join(" "),6e4);if(B(o).noDb){x.error("需要先 cc init 初始化项目");return}const w=ht(o);if(!w){x.error("优化失败: "+o.slice(0,120));return}W.value=!1,x.success(`优化完成,最佳分数 ${w.bestScore.toFixed(4)}`),await J(),y.value=w,Y.value=!0,await ke()}catch(r){x.error("优化失败: "+(r?.message||r))}finally{ee.value=!1}}async function He(r){vt.confirm({title:"应用本次优化结果?",content:`Run ${r.runId.slice(0,12)} 的最佳参数将被标记为已应用。`,okText:"应用",cancelText:"取消",onOk:async()=>{try{const{output:o}=await n.execute(`reputation apply ${r.runId}`,8e3);if(B(o).noDb){x.error("需要先 cc init 初始化项目");return}if(/Failed|Error/i.test(o)&&!/Applied/i.test(o)){x.error("应用失败: "+o.slice(0,120));return}x.success("已应用"),await J()}catch(o){x.error("应用失败: "+(o?.message||o))}}})}async function Ze(r){y.value=r,j.value=null,Y.value=!0,await ke()}async function ke(){if(y.value){oe.value=!0;try{const{output:r}=await n.execute(`reputation analytics ${y.value.runId} --json`,8e3);if(B(r).noDb)return;j.value=Dt(r)}catch{}finally{oe.value=!1}}}function Qe(){A.value=null,ne.value=!0}async function Xe(){te.value=!0;try{const r=["reputation anomalies",`-m ${I.method}`,`-t ${I.threshold}`,`-d ${I.decay}`,"--json"],{output:o}=await n.execute(r.join(" "),1e4);if(B(o).noDb){x.error("需要先 cc init 初始化项目");return}A.value=St(o)}catch(r){x.error("检测失败: "+(r?.message||r))}finally{te.value=!1}}function Se(){_.did="",_.score=.8,_.kind="generic",_.weight=1}return bt(J),(r,o)=>{const z=c("a-button"),w=c("a-space"),U=c("a-alert"),$=c("a-statistic"),T=c("a-card"),C=c("a-col"),ue=c("a-row"),ze=c("a-radio-button"),he=c("a-radio-group"),H=c("a-progress"),De=c("a-table"),ce=c("a-tab-pane"),L=c("a-tag"),et=c("a-tabs"),tt=c("a-input"),R=c("a-form-item"),Z=c("a-input-number"),pe=c("a-select-option"),de=c("a-select"),me=c("a-form"),Q=c("a-modal"),ot=c("a-divider"),at=c("a-empty"),Oe=c("a-list-item"),je=c("a-list"),F=c("a-descriptions-item"),nt=c("a-descriptions"),rt=c("a-spin");return i(),p("div",null,[b("div",At,[o[20]||(o[20]=b("div",null,[b("h2",{class:"page-title"},"声誉优化"),b("p",{class:"page-sub"},"观察记录 · 衰减模型 · 异常检测 · 贝叶斯参数优化")],-1)),e(w,null,{default:a(()=>[e(z,{loading:m.value,onClick:J},{icon:a(()=>[e(v(it))]),default:a(()=>[o[17]||(o[17]=d(" 刷新 ",-1))]),_:1},8,["loading"]),e(z,{onClick:Qe},{icon:a(()=>[e(v(Ae))]),default:a(()=>[o[18]||(o[18]=d(" 异常检测 ",-1))]),_:1}),e(z,{type:"primary",onClick:o[0]||(o[0]=t=>W.value=!0)},{icon:a(()=>[e(v(ut))]),default:a(()=>[o[19]||(o[19]=d(" 启动优化 ",-1))]),_:1})]),_:1})]),V.value.noDb?(i(),S(U,{key:0,type:"info","show-icon":"",message:"该模块需要项目级数据库",description:"`cc reputation ...` 命令仅在 chainlesschain 项目目录下可用。请先运行 `cc init` 初始化项目,或在已初始化的目录启动 `cc serve`。",style:{"margin-bottom":"16px"}})):f("",!0),e(ue,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:a(()=>[e(C,{xs:12,sm:8,lg:5},{default:a(()=>[e(T,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[e($,{title:"跟踪 DID",value:D.value.observations.totalDids,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:a(()=>[e(v(we))]),_:1},8,["value"])]),_:1})]),_:1}),e(C,{xs:12,sm:8,lg:5},{default:a(()=>[e(T,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[e($,{title:"观察总数",value:D.value.observations.totalObservations,"value-style":{color:"#722ed1",fontSize:"20px"}},{prefix:a(()=>[e(v(ct))]),_:1},8,["value"])]),_:1})]),_:1}),e(C,{xs:12,sm:8,lg:5},{default:a(()=>[e(T,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[e($,{title:"优化运行",value:D.value.totalRuns,"value-style":{color:"#13c2c2",fontSize:"20px"}},{prefix:a(()=>[e(v(Ce))]),_:1},8,["value"])]),_:1})]),_:1}),e(C,{xs:12,sm:8,lg:5},{default:a(()=>[e(T,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[e($,{title:"进行中",value:D.value.activeRuns,"value-style":{color:D.value.activeRuns>0?"#1677ff":"#888",fontSize:"20px"},suffix:`/ ${D.value.maxConcurrentOptimizations}`},{prefix:a(()=>[e(v(pt))]),_:1},8,["value","value-style","suffix"])]),_:1})]),_:1}),e(C,{xs:24,sm:8,lg:4},{default:a(()=>[e(T,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[e($,{title:"历史最佳",value:D.value.bestScoreEver,precision:3,"value-style":{color:"#52c41a",fontSize:"20px"}},{prefix:a(()=>[e(v(dt))]),_:1},8,["value"])]),_:1})]),_:1})]),_:1}),e(et,{activeKey:_e.value,"onUpdate:activeKey":o[3]||(o[3]=t=>_e.value=t),class:"reputation-tabs"},{default:a(()=>[e(ce,{key:"scores",tab:"评分排行"},{default:a(()=>[b("div",wt,[o[22]||(o[22]=b("span",{style:{color:"var(--text-secondary)","font-size":"12px"}},"衰减模型:",-1)),e(he,{value:q.value,"onUpdate:value":o[1]||(o[1]=t=>q.value=t),size:"small","button-style":"solid",onChange:We},{default:a(()=>[(i(!0),p(E,null,N(v(Ie),t=>(i(),S(ze,{key:t,value:t},{default:a(()=>[d(u(ge(t)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),e(z,{size:"small",onClick:o[2]||(o[2]=t=>K.value=!0)},{icon:a(()=>[e(v(mt))]),default:a(()=>[o[21]||(o[21]=d(" 添加观察 ",-1))]),_:1})]),e(De,{columns:Me,"data-source":ae.value,pagination:{pageSize:20,showTotal:t=>`共 ${t} 个 DID`},size:"small",loading:m.value,style:{background:"var(--bg-card)"}},{bodyCell:a(({column:t,record:g,index:X})=>[t.key==="rank"?(i(),p("span",{key:0,class:_t(["rank-pill",Ve(X)])},u(X+1),3)):f("",!0),t.key==="did"?(i(),p("span",Ct,u(g.did),1)):f("",!0),t.key==="score"?(i(),S(H,{key:2,percent:Math.round(g.score*100),"stroke-color":ie(g.score),size:"small",format:()=>g.score.toFixed(4)},null,8,["percent","stroke-color","format"])):f("",!0),t.key==="observations"?(i(),p("span",Rt,u(g.observations),1)):f("",!0),t.key==="weightTotal"?(i(),p("span",It,u(g.weightTotal.toFixed(2)),1)):f("",!0)]),emptyText:a(()=>[b("div",Tt,[e(v(we),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),o[23]||(o[23]=d(' 暂无声誉数据,点"添加观察"记录第一条 ',-1))])]),_:1},8,["data-source","pagination","loading"])]),_:1}),e(ce,{key:"runs",tab:"优化运行"},{default:a(()=>[e(De,{columns:Ue,"data-source":be.value,pagination:{pageSize:20,showTotal:t=>`共 ${t} 条`},size:"small",loading:m.value,style:{background:"var(--bg-card)"}},{bodyCell:a(({column:t,record:g})=>[t.key==="runId"?(i(),p("span",Et,u(g.runId.slice(0,12)),1)):f("",!0),t.key==="objective"?(i(),S(L,{key:1,color:re(g.objective),style:{"font-family":"monospace"}},{default:a(()=>[d(u(G(g.objective)),1)]),_:2},1032,["color"])):f("",!0),t.key==="iterations"?(i(),p("span",$t,u(g.iterations),1)):f("",!0),t.key==="bestScore"?(i(),p("span",{key:3,style:Re({color:ie(g.bestScore),fontWeight:500,fontFamily:"monospace"})},u(g.bestScore.toFixed(4)),5)):f("",!0),t.key==="status"?(i(),S(L,{key:4,color:se(g.status)},{default:a(()=>[d(u(le(g.status)),1)]),_:2},1032,["color"])):f("",!0),t.key==="createdAt"?(i(),p("span",Ft,u(v(ve)(g.createdAt)),1)):f("",!0),t.key==="action"?(i(),p(E,{key:6},[e(z,{size:"small",type:"link",onClick:X=>Ze(g)},{default:a(()=>[...o[24]||(o[24]=[d("分析",-1)])]),_:1},8,["onClick"]),g.status==="complete"?(i(),S(z,{key:0,size:"small",type:"link",style:{color:"#52c41a"},onClick:X=>He(g)},{default:a(()=>[...o[25]||(o[25]=[d("应用",-1)])]),_:1},8,["onClick"])):f("",!0)],64)):f("",!0)]),emptyText:a(()=>[b("div",Nt,[e(v(Ce),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),o[26]||(o[26]=d(' 暂无优化运行,点"启动优化"开始第一次 ',-1))])]),_:1},8,["data-source","pagination","loading"])]),_:1}),e(ce,{key:"breakdown",tab:"分布统计"},{default:a(()=>[e(ue,{gutter:[16,16]},{default:a(()=>[e(C,{xs:24,lg:12},{default:a(()=>[e(T,{title:"按状态",size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[(i(!0),p(E,null,N(v($e),t=>(i(),p("div",{key:t,class:"bd-row"},[e(L,{color:se(t),style:{"min-width":"80px","text-align":"center"}},{default:a(()=>[d(u(le(t)),1)]),_:2},1032,["color"]),e(H,{percent:xe(D.value.byStatus[t]||0,D.value.totalRuns),"stroke-color":Je(t),format:()=>`${D.value.byStatus[t]||0}`,size:"small",style:{flex:"1","margin-left":"12px"}},null,8,["percent","stroke-color","format"])]))),128))]),_:1})]),_:1}),e(C,{xs:24,lg:12},{default:a(()=>[e(T,{title:"按目标",size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[(i(!0),p(E,null,N(v(ye),t=>(i(),p("div",{key:t,class:"bd-row"},[e(L,{color:re(t),style:{"min-width":"100px","text-align":"center","font-family":"monospace"}},{default:a(()=>[d(u(G(t)),1)]),_:2},1032,["color"]),e(H,{percent:xe(D.value.byObjective[t]||0,D.value.totalRuns),"stroke-color":Be(t),format:()=>`${D.value.byObjective[t]||0}`,size:"small",style:{flex:"1","margin-left":"12px"}},null,8,["percent","stroke-color","format"])]))),128))]),_:1})]),_:1})]),_:1})]),_:1})]),_:1},8,["activeKey"]),e(Q,{open:K.value,"onUpdate:open":o[8]||(o[8]=t=>K.value=t),title:"添加观察记录","confirm-loading":O.value,width:540,"ok-text":"记录","cancel-text":"取消",onOk:Ye,onCancel:Se},{default:a(()=>[e(me,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:a(()=>[e(R,{label:"DID",required:""},{default:a(()=>[e(tt,{value:_.did,"onUpdate:value":o[4]||(o[4]=t=>_.did=t),placeholder:"did:key:..."},null,8,["value"])]),_:1}),e(R,{label:"评分",required:""},{default:a(()=>[e(Z,{value:_.score,"onUpdate:value":o[5]||(o[5]=t=>_.score=t),min:0,max:1,step:.05,style:{width:"160px"}},null,8,["value"]),o[27]||(o[27]=b("span",{style:{"margin-left":"8px",color:"var(--text-muted)","font-size":"12px"}},"范围 0.0 ~ 1.0",-1))]),_:1}),e(R,{label:"种类"},{default:a(()=>[e(de,{value:_.kind,"onUpdate:value":o[6]||(o[6]=t=>_.kind=t)},{default:a(()=>[(i(!0),p(E,null,N(v(xt),t=>(i(),S(pe,{key:t,value:t},{default:a(()=>[d(u(Le(t)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1}),e(R,{label:"权重"},{default:a(()=>[e(Z,{value:_.weight,"onUpdate:value":o[7]||(o[7]=t=>_.weight=t),min:.1,step:.1,style:{width:"120px"}},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"]),e(Q,{open:W.value,"onUpdate:open":o[11]||(o[11]=t=>W.value=t),title:"启动优化","confirm-loading":ee.value,width:540,"ok-text":"启动","cancel-text":"取消",onOk:Ge},{default:a(()=>[e(me,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:a(()=>[e(R,{label:"目标",required:""},{default:a(()=>[e(de,{value:M.objective,"onUpdate:value":o[9]||(o[9]=t=>M.objective=t)},{default:a(()=>[(i(!0),p(E,null,N(v(ye),t=>(i(),S(pe,{key:t,value:t},{default:a(()=>[d(u(G(t)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),b("div",Mt,u(Pe(M.objective)),1)]),_:1}),e(R,{label:"迭代次数"},{default:a(()=>[e(Z,{value:M.iterations,"onUpdate:value":o[10]||(o[10]=t=>M.iterations=t),min:1,max:1e3,step:10,style:{width:"160px"}},null,8,["value"]),o[28]||(o[28]=b("span",{style:{"margin-left":"8px",color:"var(--text-muted)","font-size":"12px"}},"范围 1 ~ 1000,默认 50",-1))]),_:1})]),_:1}),e(U,{type:"info","show-icon":"",message:"同步执行",description:"优化将运行所有迭代后立即返回最佳参数与建议(CLI lib 内置启发式 Bayesian 模拟)。",style:{"margin-top":"12px"}})]),_:1},8,["open","confirm-loading"]),e(Q,{open:ne.value,"onUpdate:open":o[15]||(o[15]=t=>ne.value=t),title:"异常评分检测",width:640,footer:null},{default:a(()=>[b("div",Ut,[e(me,{"label-col":{span:5},"wrapper-col":{span:19}},{default:a(()=>[e(R,{label:"检测方法"},{default:a(()=>[e(he,{value:I.method,"onUpdate:value":o[12]||(o[12]=t=>I.method=t),"button-style":"solid"},{default:a(()=>[(i(!0),p(E,null,N(v(gt),t=>(i(),S(ze,{key:t,value:t},{default:a(()=>[d(u(t==="z_score"?"Z 分数 (3σ)":"IQR (1.5×)"),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1}),e(R,{label:"阈值"},{default:a(()=>[e(Z,{value:I.threshold,"onUpdate:value":o[13]||(o[13]=t=>I.threshold=t),min:.5,step:.1,style:{width:"120px"}},null,8,["value"]),o[29]||(o[29]=b("span",{style:{"margin-left":"8px",color:"var(--text-muted)","font-size":"12px"}},"默认 z_score=2.5 / iqr=1.5",-1))]),_:1}),e(R,{label:"衰减模型"},{default:a(()=>[e(de,{value:I.decay,"onUpdate:value":o[14]||(o[14]=t=>I.decay=t),style:{width:"200px"}},{default:a(()=>[(i(!0),p(E,null,N(v(Ie),t=>(i(),S(pe,{key:t,value:t},{default:a(()=>[d(u(ge(t)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1}),e(R,{"wrapper-col":{offset:5,span:19}},{default:a(()=>[e(z,{type:"primary",loading:te.value,onClick:Xe},{icon:a(()=>[e(v(Ae))]),default:a(()=>[o[30]||(o[30]=d(" 开始检测 ",-1))]),_:1},8,["loading"])]),_:1})]),_:1}),e(ot),A.value?(i(),p("div",Lt,[e(ue,{gutter:12,style:{"margin-bottom":"12px"}},{default:a(()=>[e(C,{span:8},{default:a(()=>[e($,{title:"样本数",value:A.value.totalSamples,"value-style":{fontSize:"16px"}},null,8,["value"])]),_:1}),e(C,{span:8},{default:a(()=>[e($,{title:"阈值",value:A.value.threshold,precision:2,"value-style":{fontSize:"16px"}},null,8,["value"])]),_:1}),e(C,{span:8},{default:a(()=>[e($,{title:"异常数",value:A.value.anomalies.length,"value-style":{color:A.value.anomalies.length>0?"#ff4d4f":"#52c41a",fontSize:"16px"}},null,8,["value","value-style"])]),_:1})]),_:1}),A.value.message?(i(),S(U,{key:0,message:A.value.message,type:"warning","show-icon":"",style:{"margin-bottom":"12px"}},null,8,["message"])):f("",!0),A.value.anomalies.length?(i(),S(je,{key:1,size:"small","data-source":A.value.anomalies},{renderItem:a(({item:t})=>[e(Oe,null,{default:a(()=>[b("span",Bt,u(t.did),1),e(L,{color:"red",style:{"margin-left":"8px"}},{default:a(()=>[d("score: "+u(t.score.toFixed(4)),1)]),_:2},1024),b("span",Pt,u(t.reason),1),t.zScore!==null?(i(),p("span",Jt,"z="+u(t.zScore.toFixed(2)),1)):f("",!0)]),_:2},1024)]),_:1},8,["data-source"])):f("",!0)])):(i(),S(at,{key:0,description:"尚未检测",image:v(s)},null,8,["image"]))])]),_:1},8,["open"]),e(Q,{open:Y.value,"onUpdate:open":o[16]||(o[16]=t=>Y.value=t),title:`运行详情:${y.value?.runId?.slice(0,12)||""}`,width:780,footer:null},{default:a(()=>[y.value?(i(),p("div",Vt,[e(nt,{column:2,size:"small",bordered:""},{default:a(()=>[e(F,{label:"目标"},{default:a(()=>[e(L,{color:re(y.value.objective)},{default:a(()=>[d(u(G(y.value.objective)),1)]),_:1},8,["color"])]),_:1}),e(F,{label:"状态"},{default:a(()=>[e(L,{color:se(y.value.status)},{default:a(()=>[d(u(le(y.value.status)),1)]),_:1},8,["color"])]),_:1}),e(F,{label:"迭代次数"},{default:a(()=>[d(u(y.value.iterations),1)]),_:1}),e(F,{label:"最佳分数"},{default:a(()=>[b("span",{style:Re({color:ie(y.value.bestScore),fontWeight:500,fontFamily:"monospace"})},u(y.value.bestScore.toFixed(4)),5)]),_:1}),e(F,{label:"创建时间"},{default:a(()=>[d(u(v(ve)(y.value.createdAt)),1)]),_:1}),y.value.completedAt?(i(),S(F,{key:0,label:"完成时间"},{default:a(()=>[d(u(v(ve)(y.value.completedAt)),1)]),_:1})):f("",!0),y.value.bestParams?(i(),S(F,{key:1,label:"最佳参数",span:2},{default:a(()=>[b("pre",qt,u(Ke(y.value.bestParams)),1)]),_:1})):f("",!0),y.value.errorMessage?(i(),S(F,{key:2,label:"错误信息",span:2},{default:a(()=>[b("span",Kt,u(y.value.errorMessage),1)]),_:1})):f("",!0)]),_:1}),e(rt,{spinning:oe.value},{default:a(()=>[j.value?(i(),p("div",Wt,[o[31]||(o[31]=b("h4",{style:{color:"var(--text-primary)","font-size":"13px",margin:"0 0 10px"}},"声誉分布",-1)),e(T,{size:"small",style:{"margin-bottom":"12px"}},{default:a(()=>[(i(!0),p(E,null,N(j.value.reputationDistribution.buckets,t=>(i(),p("div",{key:t.label,class:"bucket-row"},[b("span",Yt,u(t.label),1),e(H,{percent:qe(t),"stroke-color":t.count>0?"#1677ff":"#d9d9d9",format:()=>`${t.count}`,size:"small",style:{flex:"1","margin-left":"12px"}},null,8,["percent","stroke-color","format"])]))),128)),j.value.reputationDistribution.mean!==null?(i(),p("div",Gt,[d(" 平均: "+u(j.value.reputationDistribution.mean.toFixed(4))+" ",1),j.value.reputationDistribution.stdDev!==null?(i(),p("span",Ht," 标准差: "+u(j.value.reputationDistribution.stdDev.toFixed(4)),1)):f("",!0)])):f("",!0)]),_:1}),j.value.recommendations.length?(i(),S(T,{key:0,title:"建议",size:"small"},{default:a(()=>[e(je,{size:"small","data-source":j.value.recommendations},{renderItem:a(({item:t})=>[e(Oe,null,{default:a(()=>[e(v(ft),{style:{color:"#faad14","margin-right":"8px"}}),d(" "+u(t),1)]),_:2},1024)]),_:1},8,["data-source"])]),_:1})):f("",!0)])):f("",!0)]),_:1},8,["spinning"])])):f("",!0)]),_:1},8,["open","title"])])}}},Io=st(Zt,[["__scopeId","data-v-ac9b3af6"]]);export{Io as default};
|
|
1
|
+
import{u as lt}from"./ws-4ur1fGsk.js";import{s as Ee}from"./community-parser-CO25nZFt.js";import{_ as st}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{a as x}from"./index-BB5y5Y0z.js";import{_ as it,aa as Ae,a as ut,aG as we,ai as ct,E as Ce,a3 as pt,O as dt,ah as mt,aF as ft}from"./icons-CJACPYXu.js";import vt from"./index-x8iHfZRd.js";import{E as yt}from"./useConfigInject-DIkkDpt1.js";import{l as bt,F as p,D as b,c as e,x as a,m as S,G as f,q as c,r as k,v as i,J as d,u as v,H as E,L as N,I as u,E as _t,N as Re,a as fe}from"./vendor-D0Qjn73K.js";import"./index-Vit9TJBu.js";import"./transition-CVd2ueaJ.js";import"./Keyframes-C7fCrnlS.js";import"./Portal-SsPhn64D.js";import"./index-U4Zd5IK6.js";import"./KeyCode-D63Tfrq7.js";import"./omit-BS0H_YEP.js";import"./pickAttrs-BOGgGau8.js";import"./initDefaultProps-BeWIEzBr.js";import"./motion-CIQOKmi6.js";import"./raf-Deuc0E8-.js";import"./index-DhML6F3z.js";import"./index-Dd9McFt_.js";import"./isVisible-C7tPsqfj.js";import"./useState-yWVBuz1S.js";import"./devWarning-CNIS3FrJ.js";import"./warning-Pq00owYb.js";import"./compact-item-DgthOVXi.js";import"./createContext-Blw2vgkG.js";import"./Compact-5yRVELhA.js";import"./_getTag-CWA3v-Ds.js";import"./styleChecker-CiDrXnbi.js";import"./zoom-CrI_kdTW.js";import"./ActionButton-DCuat-R-.js";import"./vnode-xRp-KMjS.js";function P(l){const n=Ee(l);if(!n)return null;try{return JSON.parse(n)}catch{}const s=n.match(/\{[\s\S]*\}|\[[\s\S]*\]/);if(!s)return null;try{return JSON.parse(s[0])}catch{return null}}const ye=Object.freeze(["accuracy","fairness","resilience","convergence_speed"]),Ie=Object.freeze(["none","exponential","linear","step"]),gt=Object.freeze(["z_score","iqr"]),$e=Object.freeze(["running","complete","applied","failed","cancelled"]),xt=Object.freeze(["generic","task","review","vote"]);function h(l,n=0){return typeof l=="number"&&Number.isFinite(l)?l:n}function B(l){if(!l)return{noDb:!1,error:""};const n=Ee(l),s=/Database not available/i.test(n);return{noDb:s,error:s?"Database not available":""}}function kt(l,n=0){if(!l||typeof l!="object")return null;const s=l.did||"";return s?{key:s,did:s,score:h(l.score,0),observations:h(l.observations,0),decay:String(l.decay||"none"),weightTotal:h(l.weightTotal,0),_idx:n}:null}function Te(l){const n=P(l);return Array.isArray(n)?n.map(kt).filter(Boolean):[]}function Fe(l,n=0){if(!l||typeof l!="object")return null;const s=l.did||"";return s?{key:`${s}-${n}`,did:s,score:h(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 St(l){const n=P(l);if(!n||typeof n!="object"||Array.isArray(n))return{method:"",threshold:0,totalSamples:0,anomalies:[],summary:"",message:""};const s=Array.isArray(n.anomalies)?n.anomalies.map(Fe).filter(Boolean):[];return{method:String(n.method||""),threshold:h(n.threshold,0),totalSamples:h(n.totalSamples,0),anomalies:s,summary:n.summary?String(n.summary):"",message:n.message?String(n.message):""}}function Ne(l,n=0){if(!l||typeof l!="object")return null;const s=l.runId||"";return s?{key:s,runId:s,objective:String(l.objective||""),iterations:h(l.iterations,0),paramSpace:l.paramSpace??null,bestParams:l.bestParams??null,bestScore:h(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:n}:null}function zt(l){const n=P(l);return Array.isArray(n)?n.map(Ne).filter(Boolean):[]}function ht(l){const n=P(l);return!n||typeof n!="object"||Array.isArray(n)?null:Ne(n,0)}function Ot(l){const n=P(l);if(!n||typeof n!="object"||Array.isArray(n))return null;const s=n.reputationDistribution||{};return{analyticsId:String(n.analyticsId||""),runId:String(n.runId||""),reputationDistribution:{buckets:Array.isArray(s.buckets)?s.buckets.filter(m=>m&&typeof m=="object").map(m=>({label:String(m.label||""),count:h(m.count,0),min:typeof m.min=="number"?m.min:null,max:typeof m.max=="number"?m.max:null})):[],mean:typeof s.mean=="number"?s.mean:null,stdDev:typeof s.stdDev=="number"?s.stdDev:null},anomalies:n.anomalies&&typeof n.anomalies=="object"?{method:String(n.anomalies.method||""),totalSamples:h(n.anomalies.totalSamples,0),anomalies:Array.isArray(n.anomalies.anomalies)?n.anomalies.anomalies.map(Fe).filter(Boolean):[],summary:n.anomalies.summary?String(n.anomalies.summary):"",message:n.anomalies.message?String(n.anomalies.message):""}:{method:"",totalSamples:0,anomalies:[],summary:"",message:""},recommendations:Array.isArray(n.recommendations)?n.recommendations.filter(m=>typeof m=="string"):[]}}const jt={totalRuns:0,activeRuns:0,maxConcurrentOptimizations:0,byStatus:{},byObjective:{},observations:{totalObservations:0,totalDids:0},bestScoreEver:0};function Dt(l){const n=JSON.parse(JSON.stringify(jt));for(const m of $e)n.byStatus[m]=0;for(const m of ye)n.byObjective[m]=0;const s=P(l);if(!s||typeof s!="object"||Array.isArray(s))return n;if(n.totalRuns=h(s.totalRuns,0),n.activeRuns=h(s.activeRuns,0),n.maxConcurrentOptimizations=h(s.maxConcurrentOptimizations,0),n.bestScoreEver=h(s.bestScoreEver,0),s.byStatus&&typeof s.byStatus=="object")for(const[m,j]of Object.entries(s.byStatus))typeof j=="number"&&Number.isFinite(j)&&(n.byStatus[m]=j);if(s.byObjective&&typeof s.byObjective=="object")for(const[m,j]of Object.entries(s.byObjective))typeof j=="number"&&Number.isFinite(j)&&(n.byObjective[m]=j);return s.observations&&typeof s.observations=="object"&&(n.observations.totalObservations=h(s.observations.totalObservations,0),n.observations.totalDids=h(s.observations.totalDids,0)),n}function ve(l){if(l==null||l==="")return"—";const n=typeof l=="number"?new Date(l):new Date(String(l));return isNaN(n.getTime())?String(l):n.toLocaleString("zh-CN",{hour12:!1})}const At={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},wt={class:"filter-bar"},Ct={key:1,style:{color:"var(--text-primary)","font-family":"monospace","font-size":"12px"}},Rt={key:3,style:{color:"var(--text-secondary)"}},It={key:4,style:{color:"var(--text-secondary)","font-family":"monospace","font-size":"12px"}},Tt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},Et={key:0,style:{color:"var(--text-primary)","font-family":"monospace","font-size":"12px"}},$t={key:2,style:{color:"var(--text-secondary)"}},Ft={key:5,style:{color:"var(--text-secondary)","font-size":"11px"}},Nt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},Mt={style:{color:"var(--text-muted)","font-size":"11px","margin-top":"4px"}},Ut={style:{"padding-top":"8px"}},Lt={key:1},Bt={style:{"font-family":"monospace","font-size":"12px",color:"var(--text-primary)"}},Pt={style:{"margin-left":"8px",color:"var(--text-secondary)","font-size":"12px"}},Jt={key:0,style:{"margin-left":"8px",color:"var(--text-muted)","font-size":"11px"}},Vt={key:0,style:{"padding-top":"8px"}},qt={class:"params-pre"},Gt={style:{color:"#ff4d4f"}},Kt={key:0,style:{"margin-top":"16px"}},Wt={class:"bucket-label"},Yt={key:0,style:{"margin-top":"8px",color:"var(--text-secondary)","font-size":"12px"}},Ht={key:0,style:{"margin-left":"12px"}},Zt={__name:"Reputation",setup(l){const n=lt(),s=yt.PRESENTED_IMAGE_SIMPLE,m=k(!1),j=k(!1),ee=k(!1),te=k(!1),oe=k(!1),ae=k([]),be=k([]),O=k({totalRuns:0,activeRuns:0,maxConcurrentOptimizations:0,byStatus:{},byObjective:{},observations:{totalObservations:0,totalDids:0},bestScoreEver:0}),V=k({noDb:!1,error:""}),_e=k("scores"),q=k("none"),G=k(!1),K=k(!1),ne=k(!1),W=k(!1),_=fe({did:"",score:.8,kind:"generic",weight:1}),M=fe({objective:"accuracy",iterations:50}),I=fe({method:"z_score",threshold:2.5,decay:"none"}),y=k(null),D=k(null),A=k(null),Me=[{title:"排名",key:"rank",width:"60px"},{title:"DID",key:"did"},{title:"声誉分数",key:"score",width:"220px"},{title:"观察数",key:"observations",width:"100px"},{title:"权重和",key:"weightTotal",width:"100px"}],Ue=[{title:"Run ID",key:"runId",width:"140px"},{title:"目标",key:"objective",width:"140px"},{title:"迭代",key:"iterations",width:"80px"},{title:"最佳分数",key:"bestScore",width:"110px"},{title:"状态",key:"status",width:"100px"},{title:"创建时间",key:"createdAt",width:"160px"},{title:"操作",key:"action",width:"160px"}];function ge(r){return{none:"无",exponential:"指数",linear:"线性",step:"步进"}[r]||r}function Le(r){return{generic:"通用",task:"任务",review:"评审",vote:"投票"}[r]||r}function Y(r){return{accuracy:"准确性",fairness:"公平性",resilience:"抗扰动",convergence_speed:"收敛速度"}[r]||r}function re(r){return{accuracy:"blue",fairness:"green",resilience:"purple",convergence_speed:"orange"}[r]||"default"}function Be(r){return{accuracy:"#1677ff",fairness:"#52c41a",resilience:"#722ed1",convergence_speed:"#fa8c16"}[r]||"#888"}function Pe(r){return{accuracy:"最大化对真实声誉的拟合",fairness:"降低衰减强度,平等对待各 DID",resilience:"提高对异常值的容忍度",convergence_speed:"尽量少迭代获得稳定结果"}[r]||""}function le(r){return{running:"运行中",complete:"已完成",applied:"已应用",failed:"失败",cancelled:"已取消"}[r]||r}function se(r){return{running:"processing",complete:"blue",applied:"green",failed:"red",cancelled:"default"}[r]||"default"}function Je(r){return{running:"#1677ff",complete:"#13c2c2",applied:"#52c41a",failed:"#ff4d4f",cancelled:"#888"}[r]||"#888"}function Ve(r){return r===0?"gold":r===1?"silver":r===2?"bronze":""}function ie(r){return r>=.8?"#52c41a":r>=.5?"#1677ff":r>=.3?"#faad14":"#ff4d4f"}function xe(r,o){return o?Math.round(r/o*100):0}function qe(r){const o=D.value?.reputationDistribution.buckets.reduce((z,w)=>z+w.count,0)||0;return o?Math.round(r.count/o*100):0}function Ge(r){if(typeof r=="string")return r;try{return JSON.stringify(r,null,2)}catch{return String(r)}}async function J(){m.value=!0,V.value={noDb:!1,error:""};try{const[r,o,z]=await Promise.all([n.execute(`reputation list --decay ${q.value} --json`,1e4).catch(()=>({output:""})),n.execute("reputation runs --limit 50 --json",1e4).catch(()=>({output:""})),n.execute("reputation stats-v2 --json",8e3).catch(()=>({output:""}))]),w=[r,o,z].map(U=>B(U.output)).find(U=>U.noDb);w&&(V.value=w),ae.value=Te(r.output),be.value=zt(o.output),O.value=Dt(z.output)}catch(r){x.error("加载声誉数据失败: "+(r?.message||r))}finally{m.value=!1}}async function Ke(){try{const{output:r}=await n.execute(`reputation list --decay ${q.value} --json`,1e4),o=B(r);if(o.noDb){V.value=o;return}ae.value=Te(r)}catch(r){x.error("加载评分失败: "+(r?.message||r))}}async function We(){if(!_.did.trim()){x.warning("请填写 DID");return}if(_.score<0||_.score>1){x.warning("评分必须在 0 ~ 1 之间");return}j.value=!0;try{const r=[`reputation observe "${_.did.trim().replace(/"/g,'\\"')}"`,String(_.score),`-k ${_.kind}`,`-w ${_.weight}`,"--json"],{output:o}=await n.execute(r.join(" "),1e4);if(B(o).noDb){x.error("需要先 cc init 初始化项目");return}if(!/"did"/.test(o)){x.error("记录失败: "+o.slice(0,120));return}x.success("观察已记录"),G.value=!1,Se(),await J()}catch(r){x.error("记录失败: "+(r?.message||r))}finally{j.value=!1}}async function Ye(){ee.value=!0;try{const r=["reputation optimize",`-o ${M.objective}`,`-i ${M.iterations}`,"--json"],{output:o}=await n.execute(r.join(" "),6e4);if(B(o).noDb){x.error("需要先 cc init 初始化项目");return}const w=ht(o);if(!w){x.error("优化失败: "+o.slice(0,120));return}K.value=!1,x.success(`优化完成,最佳分数 ${w.bestScore.toFixed(4)}`),await J(),y.value=w,W.value=!0,await ke()}catch(r){x.error("优化失败: "+(r?.message||r))}finally{ee.value=!1}}async function He(r){vt.confirm({title:"应用本次优化结果?",content:`Run ${r.runId.slice(0,12)} 的最佳参数将被标记为已应用。`,okText:"应用",cancelText:"取消",onOk:async()=>{try{const{output:o}=await n.execute(`reputation apply ${r.runId}`,8e3);if(B(o).noDb){x.error("需要先 cc init 初始化项目");return}if(/Failed|Error/i.test(o)&&!/Applied/i.test(o)){x.error("应用失败: "+o.slice(0,120));return}x.success("已应用"),await J()}catch(o){x.error("应用失败: "+(o?.message||o))}}})}async function Ze(r){y.value=r,D.value=null,W.value=!0,await ke()}async function ke(){if(y.value){oe.value=!0;try{const{output:r}=await n.execute(`reputation analytics ${y.value.runId} --json`,8e3);if(B(r).noDb)return;D.value=Ot(r)}catch{}finally{oe.value=!1}}}function Qe(){A.value=null,ne.value=!0}async function Xe(){te.value=!0;try{const r=["reputation anomalies",`-m ${I.method}`,`-t ${I.threshold}`,`-d ${I.decay}`,"--json"],{output:o}=await n.execute(r.join(" "),1e4);if(B(o).noDb){x.error("需要先 cc init 初始化项目");return}A.value=St(o)}catch(r){x.error("检测失败: "+(r?.message||r))}finally{te.value=!1}}function Se(){_.did="",_.score=.8,_.kind="generic",_.weight=1}return bt(J),(r,o)=>{const z=c("a-button"),w=c("a-space"),U=c("a-alert"),$=c("a-statistic"),T=c("a-card"),C=c("a-col"),ue=c("a-row"),ze=c("a-radio-button"),he=c("a-radio-group"),H=c("a-progress"),Oe=c("a-table"),ce=c("a-tab-pane"),L=c("a-tag"),et=c("a-tabs"),tt=c("a-input"),R=c("a-form-item"),Z=c("a-input-number"),pe=c("a-select-option"),de=c("a-select"),me=c("a-form"),Q=c("a-modal"),ot=c("a-divider"),at=c("a-empty"),je=c("a-list-item"),De=c("a-list"),F=c("a-descriptions-item"),nt=c("a-descriptions"),rt=c("a-spin");return i(),p("div",null,[b("div",At,[o[20]||(o[20]=b("div",null,[b("h2",{class:"page-title"},"声誉优化"),b("p",{class:"page-sub"},"观察记录 · 衰减模型 · 异常检测 · 贝叶斯参数优化")],-1)),e(w,null,{default:a(()=>[e(z,{loading:m.value,onClick:J},{icon:a(()=>[e(v(it))]),default:a(()=>[o[17]||(o[17]=d(" 刷新 ",-1))]),_:1},8,["loading"]),e(z,{onClick:Qe},{icon:a(()=>[e(v(Ae))]),default:a(()=>[o[18]||(o[18]=d(" 异常检测 ",-1))]),_:1}),e(z,{type:"primary",onClick:o[0]||(o[0]=t=>K.value=!0)},{icon:a(()=>[e(v(ut))]),default:a(()=>[o[19]||(o[19]=d(" 启动优化 ",-1))]),_:1})]),_:1})]),V.value.noDb?(i(),S(U,{key:0,type:"info","show-icon":"",message:"该模块需要项目级数据库",description:"`cc reputation ...` 命令仅在 chainlesschain 项目目录下可用。请先运行 `cc init` 初始化项目,或在已初始化的目录启动 `cc serve`。",style:{"margin-bottom":"16px"}})):f("",!0),e(ue,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:a(()=>[e(C,{xs:12,sm:8,lg:5},{default:a(()=>[e(T,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[e($,{title:"跟踪 DID",value:O.value.observations.totalDids,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:a(()=>[e(v(we))]),_:1},8,["value"])]),_:1})]),_:1}),e(C,{xs:12,sm:8,lg:5},{default:a(()=>[e(T,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[e($,{title:"观察总数",value:O.value.observations.totalObservations,"value-style":{color:"#722ed1",fontSize:"20px"}},{prefix:a(()=>[e(v(ct))]),_:1},8,["value"])]),_:1})]),_:1}),e(C,{xs:12,sm:8,lg:5},{default:a(()=>[e(T,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[e($,{title:"优化运行",value:O.value.totalRuns,"value-style":{color:"#13c2c2",fontSize:"20px"}},{prefix:a(()=>[e(v(Ce))]),_:1},8,["value"])]),_:1})]),_:1}),e(C,{xs:12,sm:8,lg:5},{default:a(()=>[e(T,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[e($,{title:"进行中",value:O.value.activeRuns,"value-style":{color:O.value.activeRuns>0?"#1677ff":"#888",fontSize:"20px"},suffix:`/ ${O.value.maxConcurrentOptimizations}`},{prefix:a(()=>[e(v(pt))]),_:1},8,["value","value-style","suffix"])]),_:1})]),_:1}),e(C,{xs:24,sm:8,lg:4},{default:a(()=>[e(T,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[e($,{title:"历史最佳",value:O.value.bestScoreEver,precision:3,"value-style":{color:"#52c41a",fontSize:"20px"}},{prefix:a(()=>[e(v(dt))]),_:1},8,["value"])]),_:1})]),_:1})]),_:1}),e(et,{activeKey:_e.value,"onUpdate:activeKey":o[3]||(o[3]=t=>_e.value=t),class:"reputation-tabs"},{default:a(()=>[e(ce,{key:"scores",tab:"评分排行"},{default:a(()=>[b("div",wt,[o[22]||(o[22]=b("span",{style:{color:"var(--text-secondary)","font-size":"12px"}},"衰减模型:",-1)),e(he,{value:q.value,"onUpdate:value":o[1]||(o[1]=t=>q.value=t),size:"small","button-style":"solid",onChange:Ke},{default:a(()=>[(i(!0),p(E,null,N(v(Ie),t=>(i(),S(ze,{key:t,value:t},{default:a(()=>[d(u(ge(t)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),e(z,{size:"small",onClick:o[2]||(o[2]=t=>G.value=!0)},{icon:a(()=>[e(v(mt))]),default:a(()=>[o[21]||(o[21]=d(" 添加观察 ",-1))]),_:1})]),e(Oe,{columns:Me,"data-source":ae.value,pagination:{pageSize:20,showTotal:t=>`共 ${t} 个 DID`},size:"small",loading:m.value,style:{background:"var(--bg-card)"}},{bodyCell:a(({column:t,record:g,index:X})=>[t.key==="rank"?(i(),p("span",{key:0,class:_t(["rank-pill",Ve(X)])},u(X+1),3)):f("",!0),t.key==="did"?(i(),p("span",Ct,u(g.did),1)):f("",!0),t.key==="score"?(i(),S(H,{key:2,percent:Math.round(g.score*100),"stroke-color":ie(g.score),size:"small",format:()=>g.score.toFixed(4)},null,8,["percent","stroke-color","format"])):f("",!0),t.key==="observations"?(i(),p("span",Rt,u(g.observations),1)):f("",!0),t.key==="weightTotal"?(i(),p("span",It,u(g.weightTotal.toFixed(2)),1)):f("",!0)]),emptyText:a(()=>[b("div",Tt,[e(v(we),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),o[23]||(o[23]=d(' 暂无声誉数据,点"添加观察"记录第一条 ',-1))])]),_:1},8,["data-source","pagination","loading"])]),_:1}),e(ce,{key:"runs",tab:"优化运行"},{default:a(()=>[e(Oe,{columns:Ue,"data-source":be.value,pagination:{pageSize:20,showTotal:t=>`共 ${t} 条`},size:"small",loading:m.value,style:{background:"var(--bg-card)"}},{bodyCell:a(({column:t,record:g})=>[t.key==="runId"?(i(),p("span",Et,u(g.runId.slice(0,12)),1)):f("",!0),t.key==="objective"?(i(),S(L,{key:1,color:re(g.objective),style:{"font-family":"monospace"}},{default:a(()=>[d(u(Y(g.objective)),1)]),_:2},1032,["color"])):f("",!0),t.key==="iterations"?(i(),p("span",$t,u(g.iterations),1)):f("",!0),t.key==="bestScore"?(i(),p("span",{key:3,style:Re({color:ie(g.bestScore),fontWeight:500,fontFamily:"monospace"})},u(g.bestScore.toFixed(4)),5)):f("",!0),t.key==="status"?(i(),S(L,{key:4,color:se(g.status)},{default:a(()=>[d(u(le(g.status)),1)]),_:2},1032,["color"])):f("",!0),t.key==="createdAt"?(i(),p("span",Ft,u(v(ve)(g.createdAt)),1)):f("",!0),t.key==="action"?(i(),p(E,{key:6},[e(z,{size:"small",type:"link",onClick:X=>Ze(g)},{default:a(()=>[...o[24]||(o[24]=[d("分析",-1)])]),_:1},8,["onClick"]),g.status==="complete"?(i(),S(z,{key:0,size:"small",type:"link",style:{color:"#52c41a"},onClick:X=>He(g)},{default:a(()=>[...o[25]||(o[25]=[d("应用",-1)])]),_:1},8,["onClick"])):f("",!0)],64)):f("",!0)]),emptyText:a(()=>[b("div",Nt,[e(v(Ce),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),o[26]||(o[26]=d(' 暂无优化运行,点"启动优化"开始第一次 ',-1))])]),_:1},8,["data-source","pagination","loading"])]),_:1}),e(ce,{key:"breakdown",tab:"分布统计"},{default:a(()=>[e(ue,{gutter:[16,16]},{default:a(()=>[e(C,{xs:24,lg:12},{default:a(()=>[e(T,{title:"按状态",size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[(i(!0),p(E,null,N(v($e),t=>(i(),p("div",{key:t,class:"bd-row"},[e(L,{color:se(t),style:{"min-width":"80px","text-align":"center"}},{default:a(()=>[d(u(le(t)),1)]),_:2},1032,["color"]),e(H,{percent:xe(O.value.byStatus[t]||0,O.value.totalRuns),"stroke-color":Je(t),format:()=>`${O.value.byStatus[t]||0}`,size:"small",style:{flex:"1","margin-left":"12px"}},null,8,["percent","stroke-color","format"])]))),128))]),_:1})]),_:1}),e(C,{xs:24,lg:12},{default:a(()=>[e(T,{title:"按目标",size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[(i(!0),p(E,null,N(v(ye),t=>(i(),p("div",{key:t,class:"bd-row"},[e(L,{color:re(t),style:{"min-width":"100px","text-align":"center","font-family":"monospace"}},{default:a(()=>[d(u(Y(t)),1)]),_:2},1032,["color"]),e(H,{percent:xe(O.value.byObjective[t]||0,O.value.totalRuns),"stroke-color":Be(t),format:()=>`${O.value.byObjective[t]||0}`,size:"small",style:{flex:"1","margin-left":"12px"}},null,8,["percent","stroke-color","format"])]))),128))]),_:1})]),_:1})]),_:1})]),_:1})]),_:1},8,["activeKey"]),e(Q,{open:G.value,"onUpdate:open":o[8]||(o[8]=t=>G.value=t),title:"添加观察记录","confirm-loading":j.value,width:540,"ok-text":"记录","cancel-text":"取消",onOk:We,onCancel:Se},{default:a(()=>[e(me,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:a(()=>[e(R,{label:"DID",required:""},{default:a(()=>[e(tt,{value:_.did,"onUpdate:value":o[4]||(o[4]=t=>_.did=t),placeholder:"did:key:..."},null,8,["value"])]),_:1}),e(R,{label:"评分",required:""},{default:a(()=>[e(Z,{value:_.score,"onUpdate:value":o[5]||(o[5]=t=>_.score=t),min:0,max:1,step:.05,style:{width:"160px"}},null,8,["value"]),o[27]||(o[27]=b("span",{style:{"margin-left":"8px",color:"var(--text-muted)","font-size":"12px"}},"范围 0.0 ~ 1.0",-1))]),_:1}),e(R,{label:"种类"},{default:a(()=>[e(de,{value:_.kind,"onUpdate:value":o[6]||(o[6]=t=>_.kind=t)},{default:a(()=>[(i(!0),p(E,null,N(v(xt),t=>(i(),S(pe,{key:t,value:t},{default:a(()=>[d(u(Le(t)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1}),e(R,{label:"权重"},{default:a(()=>[e(Z,{value:_.weight,"onUpdate:value":o[7]||(o[7]=t=>_.weight=t),min:.1,step:.1,style:{width:"120px"}},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"]),e(Q,{open:K.value,"onUpdate:open":o[11]||(o[11]=t=>K.value=t),title:"启动优化","confirm-loading":ee.value,width:540,"ok-text":"启动","cancel-text":"取消",onOk:Ye},{default:a(()=>[e(me,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:a(()=>[e(R,{label:"目标",required:""},{default:a(()=>[e(de,{value:M.objective,"onUpdate:value":o[9]||(o[9]=t=>M.objective=t)},{default:a(()=>[(i(!0),p(E,null,N(v(ye),t=>(i(),S(pe,{key:t,value:t},{default:a(()=>[d(u(Y(t)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),b("div",Mt,u(Pe(M.objective)),1)]),_:1}),e(R,{label:"迭代次数"},{default:a(()=>[e(Z,{value:M.iterations,"onUpdate:value":o[10]||(o[10]=t=>M.iterations=t),min:1,max:1e3,step:10,style:{width:"160px"}},null,8,["value"]),o[28]||(o[28]=b("span",{style:{"margin-left":"8px",color:"var(--text-muted)","font-size":"12px"}},"范围 1 ~ 1000,默认 50",-1))]),_:1})]),_:1}),e(U,{type:"info","show-icon":"",message:"同步执行",description:"优化将运行所有迭代后立即返回最佳参数与建议(CLI lib 内置启发式 Bayesian 模拟)。",style:{"margin-top":"12px"}})]),_:1},8,["open","confirm-loading"]),e(Q,{open:ne.value,"onUpdate:open":o[15]||(o[15]=t=>ne.value=t),title:"异常评分检测",width:640,footer:null},{default:a(()=>[b("div",Ut,[e(me,{"label-col":{span:5},"wrapper-col":{span:19}},{default:a(()=>[e(R,{label:"检测方法"},{default:a(()=>[e(he,{value:I.method,"onUpdate:value":o[12]||(o[12]=t=>I.method=t),"button-style":"solid"},{default:a(()=>[(i(!0),p(E,null,N(v(gt),t=>(i(),S(ze,{key:t,value:t},{default:a(()=>[d(u(t==="z_score"?"Z 分数 (3σ)":"IQR (1.5×)"),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1}),e(R,{label:"阈值"},{default:a(()=>[e(Z,{value:I.threshold,"onUpdate:value":o[13]||(o[13]=t=>I.threshold=t),min:.5,step:.1,style:{width:"120px"}},null,8,["value"]),o[29]||(o[29]=b("span",{style:{"margin-left":"8px",color:"var(--text-muted)","font-size":"12px"}},"默认 z_score=2.5 / iqr=1.5",-1))]),_:1}),e(R,{label:"衰减模型"},{default:a(()=>[e(de,{value:I.decay,"onUpdate:value":o[14]||(o[14]=t=>I.decay=t),style:{width:"200px"}},{default:a(()=>[(i(!0),p(E,null,N(v(Ie),t=>(i(),S(pe,{key:t,value:t},{default:a(()=>[d(u(ge(t)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1}),e(R,{"wrapper-col":{offset:5,span:19}},{default:a(()=>[e(z,{type:"primary",loading:te.value,onClick:Xe},{icon:a(()=>[e(v(Ae))]),default:a(()=>[o[30]||(o[30]=d(" 开始检测 ",-1))]),_:1},8,["loading"])]),_:1})]),_:1}),e(ot),A.value?(i(),p("div",Lt,[e(ue,{gutter:12,style:{"margin-bottom":"12px"}},{default:a(()=>[e(C,{span:8},{default:a(()=>[e($,{title:"样本数",value:A.value.totalSamples,"value-style":{fontSize:"16px"}},null,8,["value"])]),_:1}),e(C,{span:8},{default:a(()=>[e($,{title:"阈值",value:A.value.threshold,precision:2,"value-style":{fontSize:"16px"}},null,8,["value"])]),_:1}),e(C,{span:8},{default:a(()=>[e($,{title:"异常数",value:A.value.anomalies.length,"value-style":{color:A.value.anomalies.length>0?"#ff4d4f":"#52c41a",fontSize:"16px"}},null,8,["value","value-style"])]),_:1})]),_:1}),A.value.message?(i(),S(U,{key:0,message:A.value.message,type:"warning","show-icon":"",style:{"margin-bottom":"12px"}},null,8,["message"])):f("",!0),A.value.anomalies.length?(i(),S(De,{key:1,size:"small","data-source":A.value.anomalies},{renderItem:a(({item:t})=>[e(je,null,{default:a(()=>[b("span",Bt,u(t.did),1),e(L,{color:"red",style:{"margin-left":"8px"}},{default:a(()=>[d("score: "+u(t.score.toFixed(4)),1)]),_:2},1024),b("span",Pt,u(t.reason),1),t.zScore!==null?(i(),p("span",Jt,"z="+u(t.zScore.toFixed(2)),1)):f("",!0)]),_:2},1024)]),_:1},8,["data-source"])):f("",!0)])):(i(),S(at,{key:0,description:"尚未检测",image:v(s)},null,8,["image"]))])]),_:1},8,["open"]),e(Q,{open:W.value,"onUpdate:open":o[16]||(o[16]=t=>W.value=t),title:`运行详情:${y.value?.runId?.slice(0,12)||""}`,width:780,footer:null},{default:a(()=>[y.value?(i(),p("div",Vt,[e(nt,{column:2,size:"small",bordered:""},{default:a(()=>[e(F,{label:"目标"},{default:a(()=>[e(L,{color:re(y.value.objective)},{default:a(()=>[d(u(Y(y.value.objective)),1)]),_:1},8,["color"])]),_:1}),e(F,{label:"状态"},{default:a(()=>[e(L,{color:se(y.value.status)},{default:a(()=>[d(u(le(y.value.status)),1)]),_:1},8,["color"])]),_:1}),e(F,{label:"迭代次数"},{default:a(()=>[d(u(y.value.iterations),1)]),_:1}),e(F,{label:"最佳分数"},{default:a(()=>[b("span",{style:Re({color:ie(y.value.bestScore),fontWeight:500,fontFamily:"monospace"})},u(y.value.bestScore.toFixed(4)),5)]),_:1}),e(F,{label:"创建时间"},{default:a(()=>[d(u(v(ve)(y.value.createdAt)),1)]),_:1}),y.value.completedAt?(i(),S(F,{key:0,label:"完成时间"},{default:a(()=>[d(u(v(ve)(y.value.completedAt)),1)]),_:1})):f("",!0),y.value.bestParams?(i(),S(F,{key:1,label:"最佳参数",span:2},{default:a(()=>[b("pre",qt,u(Ge(y.value.bestParams)),1)]),_:1})):f("",!0),y.value.errorMessage?(i(),S(F,{key:2,label:"错误信息",span:2},{default:a(()=>[b("span",Gt,u(y.value.errorMessage),1)]),_:1})):f("",!0)]),_:1}),e(rt,{spinning:oe.value},{default:a(()=>[D.value?(i(),p("div",Kt,[o[31]||(o[31]=b("h4",{style:{color:"var(--text-primary)","font-size":"13px",margin:"0 0 10px"}},"声誉分布",-1)),e(T,{size:"small",style:{"margin-bottom":"12px"}},{default:a(()=>[(i(!0),p(E,null,N(D.value.reputationDistribution.buckets,t=>(i(),p("div",{key:t.label,class:"bucket-row"},[b("span",Wt,u(t.label),1),e(H,{percent:qe(t),"stroke-color":t.count>0?"#1677ff":"#d9d9d9",format:()=>`${t.count}`,size:"small",style:{flex:"1","margin-left":"12px"}},null,8,["percent","stroke-color","format"])]))),128)),D.value.reputationDistribution.mean!==null?(i(),p("div",Yt,[d(" 平均: "+u(D.value.reputationDistribution.mean.toFixed(4))+" ",1),D.value.reputationDistribution.stdDev!==null?(i(),p("span",Ht," 标准差: "+u(D.value.reputationDistribution.stdDev.toFixed(4)),1)):f("",!0)])):f("",!0)]),_:1}),D.value.recommendations.length?(i(),S(T,{key:0,title:"建议",size:"small"},{default:a(()=>[e(De,{size:"small","data-source":D.value.recommendations},{renderItem:a(({item:t})=>[e(je,null,{default:a(()=>[e(v(ft),{style:{color:"#faad14","margin-right":"8px"}}),d(" "+u(t),1)]),_:2},1024)]),_:1},8,["data-source"])]),_:1})):f("",!0)])):f("",!0)]),_:1},8,["spinning"])])):f("",!0)]),_:1},8,["open","title"])])}}},Io=st(Zt,[["__scopeId","data-v-ac9b3af6"]]);export{Io as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{d as z,_ as S,c as B}from"./useConfigInject-DIkkDpt1.js";import{_ as $,z as f}from"./index-Vit9TJBu.js";import{u as N,r as u}from"./responsiveObserve-CrHOX7jp.js";import{u as E}from"./useFlexGapSupport-rrtj6f1h.js";import{b as F,c as I}from"./index-Cqtt1N0F.js";import{d as M,l as T,o as V,c as D,r as h,j as o}from"./vendor-D0Qjn73K.js";const J=()=>({align:f([String,Object]),justify:f([String,Object]),prefixCls:String,gutter:f([Number,Array,Object],0),wrap:{type:Boolean,default:void 0}}),Q=M({compatConfig:{MODE:3},name:"ARow",inheritAttrs:!1,props:J(),setup(s,G){let{slots:d,attrs:l}=G;const{prefixCls:a,direction:R}=z("row",s),[O,C]=F(a);let m;const v=N(),p=h({xs:!0,sm:!0,md:!0,lg:!0,xl:!0,xxl:!0}),y=h({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=E();T(()=>{m=v.value.subscribe(e=>{y.value=e;const t=s.gutter||0;(!Array.isArray(t)&&typeof t=="object"||Array.isArray(t)&&(typeof t[0]=="object"||typeof t[1]=="object"))&&(p.value=e)})}),V(()=>{v.value.unsubscribe(m)});const j=o(()=>{const e=[void 0,void 0],{gutter:t=0}=s;return(Array.isArray(t)?t:[t,void 0]).forEach((r,A)=>{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[A]=r[c];break}}else e[A]=r}),e});I({gutter:j,supportFlexGap:w,wrap:o(()=>s.wrap)});const _=o(()=>B(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)),k=o(()=>{const e=j.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(D("div",S(S({},l),{},{class:_.value,style:$($({},k.value),l.style)}),[(e=d.default)===null||e===void 0?void 0:e.call(d)]))}}});export{Q as A};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{l as ce,F as p,D as m,c as s,x as l,m as x,u as _,J as y,q as d,r as g,v as r,H as F,L as
|
|
2
|
-
`);for(const n of o){const i=n.trim();if(!i||i.startsWith("─")||i.match(/^\d+ feed/i)||i.startsWith("RSS")||i.startsWith("No "))continue;const u=i.match(/^(\d+)\.\s+(.+?)(?:\s+[-–]\s+(.+))?$/);u?e.push({key:u[1],id:u[1],title:u[2].trim(),url:(u[3]||"").trim(),itemCount:0,lastUpdated:""}):i.length>5&&e.push({key:String(e.length),id:String(e.length),title:i.slice(0,80),url:"",itemCount:0,lastUpdated:""})}return e}async function b(){z.value=!0,j.value=[];try{let t="rss articles --limit 30 --json";S.value&&(t=`rss articles --feed ${S.value} --limit 30 --json`);const{output:e}=await h.execute(t,2e4),o=W(e);Array.isArray(o)?C.value=o.map((n,i)=>({key:n.id||String(i),id:n.id||String(i),title:n.title||"无标题",link:n.link||n.url||"",source:n.source||n.feedTitle||n.feedName||"",publishedAt:n.publishedAt||n.pubDate||n.date||"",read:!!n.read,summary:n.summary||n.description||"",content:n.content||""})):C.value=
|
|
3
|
-
`);for(const n of o){const i=n.trim();if(!i||i.startsWith("─")||i.match(/^\d+ article/i)||i.startsWith("No "))continue;const u=i.match(/^(\d+)\.\s+(.+?)(?:\s+[-–]\s+(.+))?$/);u&&e.push({key:u[1],id:u[1],title:u[2].trim(),link:"",source:(u[3]||"").trim(),publishedAt:"",read:!1,summary:"",content:""})}return e}async function Q(){const t=U.value.trim();if(!t){c.warning("请输入订阅源地址");return}T.value=!0;try{const{output:e}=await h.execute(`rss add "${t}"`,3e4);e.includes("error")||e.includes("失败")||e.includes("Error")?c.error("添加失败: "+e.slice(0,120)):(c.success("订阅源已添加"),R.value=!1,U.value="",await A(),await b())}catch(e){c.error("添加失败: "+e.message)}finally{T.value=!1}}async function
|
|
1
|
+
import{l as ce,F as p,D as m,c as s,x as l,m as x,u as _,J as y,q as d,r as g,v as r,H as F,L as O,I as v,G as k,P as pe,j as me}from"./vendor-D0Qjn73K.js";import{u as ye}from"./ws-4ur1fGsk.js";import{_ as fe}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{X as I,ah as ve,_ as M,al as P,au as _e}from"./icons-CJACPYXu.js";import{a as c}from"./index-BB5y5Y0z.js";import"./index-Vit9TJBu.js";import"./useConfigInject-DIkkDpt1.js";import"./transition-CVd2ueaJ.js";import"./Keyframes-C7fCrnlS.js";import"./Portal-SsPhn64D.js";import"./index-U4Zd5IK6.js";const ge={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},xe={key:0,style:{"text-align":"center",padding:"60px"}},ke={style:{display:"flex","align-items":"center",gap:"6px",overflow:"hidden"}},he={style:{color:"#e0e0e0","font-size":"13px",overflow:"hidden","text-overflow":"ellipsis","white-space":"nowrap"}},we={style:{color:"var(--text-muted)","font-size":"11px","margin-bottom":"6px",overflow:"hidden","text-overflow":"ellipsis","white-space":"nowrap"}},be={style:{display:"flex","justify-content":"space-between",color:"var(--text-secondary)","font-size":"12px"}},Ce={key:2,style:{"text-align":"center",padding:"40px",color:"var(--text-muted)","margin-bottom":"24px"}},Ae={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"12px"}},Fe={key:3,style:{"text-align":"center",padding:"60px"}},ze=["href"],Se={key:1,style:{color:"#e0e0e0","font-weight":"500"}},Re={key:2,style:{color:"var(--text-secondary)","font-size":"12px"}},Ue={key:1,style:{color:"var(--text-muted)","font-size":"12px"}},$e={style:{padding:"8px 16px",color:"var(--text-secondary)","font-size":"13px","line-height":"1.8","max-height":"300px","overflow-y":"auto"}},Ne={key:0,style:{"margin-bottom":"8px"}},Le=["innerHTML"],Te={key:2,style:{color:"var(--text-muted)"}},je={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},De={__name:"RssFeed",setup(Oe){const h=ye(),N=g(!1),z=g(!1),L=g(!1),T=g(!1),w=g([]),C=g([]),S=g(""),R=g(!1),U=g(""),j=g([]),q=me(()=>{const t=w.value.length,e=C.value.length,o=C.value.filter(u=>!u.read).length,n=w.value.filter(u=>u.lastUpdated).sort((u,$)=>new Date($.lastUpdated)-new Date(u.lastUpdated))[0],i=n?D(n.lastUpdated):"-";return[{label:"订阅源数",value:t,color:"#1677ff"},{label:"文章总数",value:e,color:"#52c41a"},{label:"未读文章",value:o,color:"#faad14"},{label:"最近刷新",value:i,color:"#13c2c2"}]}),K=[{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 D(t){if(!t)return"-";try{const e=new Date(t);return isNaN(e.getTime())?t:e.toLocaleString("zh-CN",{month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"})}catch{return t}}function W(t){try{const e=t.match(/(\[[\s\S]*\]|\{[\s\S]*\})/);if(e)return JSON.parse(e[1])}catch{}return null}async function A(){N.value=!0;try{const{output:t}=await h.execute("rss list --json",2e4),e=W(t);Array.isArray(e)?w.value=e.map((o,n)=>({key:o.id||o.url||n,id:o.id||String(n),title:o.title||o.name||"",url:o.url||o.feedUrl||"",itemCount:o.itemCount??o.articleCount??o.count??0,lastUpdated:o.lastUpdated||o.updatedAt||o.lastRefresh||""})):w.value=G(t)}catch(t){c.error("加载订阅源失败: "+t.message)}finally{N.value=!1}}function G(t){const e=[],o=t.split(`
|
|
2
|
+
`);for(const n of o){const i=n.trim();if(!i||i.startsWith("─")||i.match(/^\d+ feed/i)||i.startsWith("RSS")||i.startsWith("No "))continue;const u=i.match(/^(\d+)\.\s+(.+?)(?:\s+[-–]\s+(.+))?$/);u?e.push({key:u[1],id:u[1],title:u[2].trim(),url:(u[3]||"").trim(),itemCount:0,lastUpdated:""}):i.length>5&&e.push({key:String(e.length),id:String(e.length),title:i.slice(0,80),url:"",itemCount:0,lastUpdated:""})}return e}async function b(){z.value=!0,j.value=[];try{let t="rss articles --limit 30 --json";S.value&&(t=`rss articles --feed ${S.value} --limit 30 --json`);const{output:e}=await h.execute(t,2e4),o=W(e);Array.isArray(o)?C.value=o.map((n,i)=>({key:n.id||String(i),id:n.id||String(i),title:n.title||"无标题",link:n.link||n.url||"",source:n.source||n.feedTitle||n.feedName||"",publishedAt:n.publishedAt||n.pubDate||n.date||"",read:!!n.read,summary:n.summary||n.description||"",content:n.content||""})):C.value=X(e)}catch(t){c.error("加载文章失败: "+t.message)}finally{z.value=!1}}function X(t){const e=[],o=t.split(`
|
|
3
|
+
`);for(const n of o){const i=n.trim();if(!i||i.startsWith("─")||i.match(/^\d+ article/i)||i.startsWith("No "))continue;const u=i.match(/^(\d+)\.\s+(.+?)(?:\s+[-–]\s+(.+))?$/);u&&e.push({key:u[1],id:u[1],title:u[2].trim(),link:"",source:(u[3]||"").trim(),publishedAt:"",read:!1,summary:"",content:""})}return e}async function Q(){const t=U.value.trim();if(!t){c.warning("请输入订阅源地址");return}T.value=!0;try{const{output:e}=await h.execute(`rss add "${t}"`,3e4);e.includes("error")||e.includes("失败")||e.includes("Error")?c.error("添加失败: "+e.slice(0,120)):(c.success("订阅源已添加"),R.value=!1,U.value="",await A(),await b())}catch(e){c.error("添加失败: "+e.message)}finally{T.value=!1}}async function Y(t){try{c.loading({content:`正在刷新 ${t.title||t.id}...`,key:"refreshFeed"}),await h.execute(`rss refresh ${t.id}`,3e4),c.success({content:"刷新完成",key:"refreshFeed"}),await A(),await b()}catch(e){c.error({content:"刷新失败: "+e.message,key:"refreshFeed"})}}async function Z(t){try{c.loading({content:`正在删除 ${t.title||t.id}...`,key:"removeFeed"});const{output:e}=await h.execute(`rss remove ${t.id}`,2e4);e.includes("error")||e.includes("失败")?c.error({content:"删除失败: "+e.slice(0,120),key:"removeFeed"}):(c.success({content:"已删除订阅源",key:"removeFeed"}),await A(),await b())}catch(e){c.error({content:"删除失败: "+e.message,key:"removeFeed"})}}async function ee(){L.value=!0;try{c.loading({content:"正在刷新所有订阅源...",key:"refreshAll"}),await h.execute("rss refresh-all",6e4),c.success({content:"全部刷新完成",key:"refreshAll"}),await A(),await b()}catch(t){c.error({content:"刷新失败: "+t.message,key:"refreshAll"})}finally{L.value=!1}}async function te(t){try{await h.execute(`rss mark-read ${t.id}`,1e4),t.read=!0,c.success("已标记已读")}catch(e){c.error("操作失败: "+e.message)}}function ae(t,e){j.value=t?[e.key]:[]}return ce(async()=>{await A(),await b()}),(t,e)=>{const o=d("a-button"),n=d("a-space"),i=d("a-statistic"),u=d("a-card"),$=d("a-col"),B=d("a-row"),E=d("a-spin"),V=d("a-menu-item"),le=d("a-menu"),se=d("a-dropdown"),H=d("a-select-option"),oe=d("a-select"),J=d("a-tag"),ne=d("a-table"),re=d("a-input"),ie=d("a-form-item"),ue=d("a-form"),de=d("a-modal");return r(),p("div",null,[m("div",ge,[e[6]||(e[6]=m("div",null,[m("h2",{class:"page-title"},"RSS 订阅"),m("p",{class:"page-sub"},"订阅源 / 文章阅读")],-1)),s(n,null,{default:l(()=>[s(o,{type:"primary",onClick:e[0]||(e[0]=a=>R.value=!0)},{icon:l(()=>[s(_(ve))]),default:l(()=>[e[4]||(e[4]=y(" 添加订阅 ",-1))]),_:1}),s(o,{ghost:"",loading:L.value,onClick:ee},{icon:l(()=>[s(_(M))]),default:l(()=>[e[5]||(e[5]=y(" 全部刷新 ",-1))]),_:1},8,["loading"])]),_:1})]),s(B,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:l(()=>[(r(!0),p(F,null,O(q.value,a=>(r(),x($,{xs:12,sm:6,key:a.label},{default:l(()=>[s(u,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"},size:"small"},{default:l(()=>[s(i,{title:a.label,value:a.value,"value-style":{color:a.color,fontSize:"20px"}},null,8,["title","value","value-style"])]),_:2},1024)]),_:2},1024))),128))]),_:1}),e[16]||(e[16]=m("h3",{style:{color:"var(--text-primary)","margin-bottom":"12px"}},"订阅源管理",-1)),N.value?(r(),p("div",xe,[s(E,{size:"large"})])):w.value.length>0?(r(),x(B,{key:1,gutter:[16,16],style:{"margin-bottom":"24px"}},{default:l(()=>[(r(!0),p(F,null,O(w.value,a=>(r(),x($,{xs:24,sm:12,md:8,lg:6,key:a.id||a.url},{default:l(()=>[s(u,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"},size:"small",hoverable:!0},{title:l(()=>[m("div",ke,[s(_(I),{style:{color:"#1677ff","flex-shrink":"0"}}),m("span",he,v(a.title||"未命名订阅"),1)])]),extra:l(()=>[s(se,null,{overlay:l(()=>[s(le,null,{default:l(()=>[s(V,{onClick:f=>Y(a)},{default:l(()=>[s(_(M)),e[8]||(e[8]=y(" 刷新 ",-1))]),_:1},8,["onClick"]),s(V,{onClick:f=>Z(a),danger:""},{default:l(()=>[s(_(_e)),e[9]||(e[9]=y(" 删除 ",-1))]),_:1},8,["onClick"])]),_:2},1024)]),default:l(()=>[s(o,{size:"small",type:"text",style:{color:"var(--text-muted)"}},{default:l(()=>[...e[7]||(e[7]=[y("...",-1)])]),_:1})]),_:2},1024)]),default:l(()=>[m("p",we,[s(_(P)),y(" "+v(a.url||"-"),1)]),m("div",be,[m("span",null,v(a.itemCount??"-")+" 篇文章",1),m("span",null,v(D(a.lastUpdated)),1)])]),_:2},1024)]),_:2},1024))),128))]),_:1})):(r(),p("div",Ce,[s(_(I),{style:{"font-size":"40px","margin-bottom":"12px",display:"block"}}),e[10]||(e[10]=y(' 暂无订阅源,点击"添加订阅"开始 ',-1))])),m("div",Ae,[e[12]||(e[12]=m("h3",{style:{color:"var(--text-primary)",margin:"0"}},"文章列表",-1)),s(n,null,{default:l(()=>[s(oe,{value:S.value,"onUpdate:value":e[1]||(e[1]=a=>S.value=a),style:{"min-width":"180px"},placeholder:"筛选订阅源","allow-clear":"",onChange:b},{default:l(()=>[s(H,{value:""},{default:l(()=>[...e[11]||(e[11]=[y("全部订阅",-1)])]),_:1}),(r(!0),p(F,null,O(w.value,a=>(r(),x(H,{key:a.id,value:a.id},{default:l(()=>[y(v(a.title||a.url),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),s(o,{loading:z.value,onClick:b},{icon:l(()=>[s(_(M))]),_:1},8,["loading"])]),_:1})]),z.value?(r(),p("div",Fe,[s(E,{size:"large"})])):(r(),x(ne,{key:4,columns:K,"data-source":C.value,pagination:{pageSize:20,showTotal:a=>`共 ${a} 条`},size:"small",style:{background:"var(--bg-card)"},"row-class-name":()=>"rss-row",expandable:{expandedRowKeys:j.value,onExpand:ae}},{bodyCell:l(({column:a,record:f})=>[a.key==="title"?(r(),p(F,{key:0},[f.link?(r(),p("a",{key:0,href:f.link,target:"_blank",rel:"noopener noreferrer",style:{color:"#1677ff","font-weight":"500"}},[s(_(P),{style:{"margin-right":"4px"}}),y(v(f.title),1)],8,ze)):(r(),p("span",Se,v(f.title),1))],64)):k("",!0),a.key==="source"?(r(),x(J,{key:1,color:"blue",style:{"font-size":"10px"}},{default:l(()=>[y(v(f.source||"-"),1)]),_:2},1024)):k("",!0),a.key==="publishedAt"?(r(),p("span",Re,v(D(f.publishedAt)),1)):k("",!0),a.key==="status"?(r(),x(J,{key:3,color:f.read?"default":"green"},{default:l(()=>[y(v(f.read?"已读":"未读"),1)]),_:2},1032,["color"])):k("",!0),a.key==="actions"?(r(),p(F,{key:4},[f.read?(r(),p("span",Ue,"--")):(r(),x(o,{key:0,size:"small",type:"link",onClick:pe(Ie=>te(f),["stop"])},{default:l(()=>[...e[13]||(e[13]=[y(" 标记已读 ",-1)])]),_:1},8,["onClick"]))],64)):k("",!0)]),expandedRowRender:l(({record:a})=>[m("div",$e,[a.summary?(r(),p("div",Ne,[e[14]||(e[14]=m("strong",{style:{color:"var(--text-primary)"}},"摘要: ",-1)),y(v(a.summary),1)])):k("",!0),a.content?(r(),p("div",{key:1,innerHTML:a.content,style:{color:"var(--text-secondary)"}},null,8,Le)):k("",!0),!a.summary&&!a.content?(r(),p("div",Te,"暂无内容预览")):k("",!0)])]),emptyText:l(()=>[m("div",je,[s(_(I),{style:{"font-size":"40px","margin-bottom":"12px",display:"block"}}),e[15]||(e[15]=y(" 暂无文章 ",-1))])]),_:1},8,["data-source","pagination","expandable"])),s(de,{open:R.value,"onUpdate:open":e[3]||(e[3]=a=>R.value=a),title:"添加订阅源","confirm-loading":T.value,onOk:Q,"ok-text":"添加","cancel-text":"取消"},{default:l(()=>[s(ue,{"label-col":{span:4},"wrapper-col":{span:20},style:{"margin-top":"16px"}},{default:l(()=>[s(ie,{label:"URL",required:""},{default:l(()=>[s(re,{value:U.value,"onUpdate:value":e[2]||(e[2]=a=>U.value=a),placeholder:"输入 RSS 订阅源地址,如 https://example.com/feed.xml"},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"])])}}},Xe=fe(De,[["__scopeId","data-v-66093b20"]]);export{Xe as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as x,l as Le,F as f,D as g,c as a,x as t,m as S,G as z,q as u,v as s,J as v,u as m,P as je,H as C,L as $,I as d,a as Be,j as ee}from"./vendor-BVetwVfk.js";import{u as Fe}from"./ws-Bv7YH0VB.js";import{s as ge}from"./community-parser-CO25nZFt.js";import{_ as Ke}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{a as O}from"./index-BbqCdQXU.js";import{Y as Je,S as He,m as Ue,f as pe,b as qe,aK as Pe,a as Ge,J as Qe,aF as Ve}from"./icons-ukMaZ3tx.js";import{E as Ye}from"./useConfigInject-BKqJUQaF.js";import"./index-ZZ_4A9um.js";import"./transition-CGYDOK3N.js";import"./Keyframes-C7fCrnlS.js";import"./Portal-CHsntPCQ.js";import"./index-U4Zd5IK6.js";function oe(l){const r=ge(l);if(!r)return null;try{return JSON.parse(r)}catch{}const i=r.match(/\{[\s\S]*\}|\[[\s\S]*\]/);if(!i)return null;try{return JSON.parse(i[0])}catch{return null}}const We=Object.freeze(["bm25","vector","hybrid"]);function Xe(l,r=0){return typeof l=="number"&&Number.isFinite(l)?l:r}function Ze(l){if(Array.isArray(l))return l.filter(r=>typeof r=="string");if(typeof l!="string")return[];try{const r=JSON.parse(l);if(Array.isArray(r))return r.filter(i=>typeof i=="string")}catch{}return[]}function te(l){if(!l)return{noDb:!1,error:""};const r=ge(l),i=/Database not available/i.test(r);return{noDb:i,error:i?"Database not available":""}}function et(l,r=0){if(!l||typeof l!="object")return null;const i=l.id||"";return i?{key:i,id:i,score:Xe(l.score,0),title:String(l.title||""),category:String(l.category||"general"),createdAt:l.created_at??l.createdAt??"",snippet:String(l.snippet||""),_idx:r}:null}function tt(l){const r=oe(l);return Array.isArray(r)?r.map(et).filter(Boolean):[]}function ve(l,r=0){if(!l||typeof l!="object")return null;const i=l.id||"";return i?{key:i,id:i,title:String(l.title||""),content:l.content??"",tags:Ze(l.tags),category:String(l.category||"general"),createdAt:l.created_at??l.createdAt??"",updatedAt:l.updated_at??l.updatedAt??"",_idx:r}:null}function at(l){const r=oe(l);return Array.isArray(r)?r.map(ve).filter(Boolean):[]}function ot(l){const r=oe(l);return!r||typeof r!="object"||Array.isArray(r)?null:ve(r,0)}function nt(l){if(!Array.isArray(l)||l.length===0)return{total:0,categories:[],tags:[]};const r=new Map,i=new Map;for(const p of l){r.set(p.category,(r.get(p.category)||0)+1);for(const _ of p.tags)i.set(_,(i.get(_)||0)+1)}return{total:l.length,categories:[...r.entries()].map(([p,_])=>({name:p,count:_})).sort((p,_)=>_.count-p.count),tags:[...i.entries()].map(([p,_])=>({name:p,count:_})).sort((p,_)=>_.count-p.count)}}function U(l){if(l==null||l==="")return"—";const r=String(l),i=r.includes(" ")&&!r.includes("T")?r.replace(" ","T")+"Z":r,p=new Date(i);return isNaN(p.getTime())?r:p.toLocaleString("zh-CN",{hour12:!1})}const lt={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},rt={key:0,class:"recent-row"},st={class:"score-block"},it={class:"result-title"},ut={style:{color:"var(--text-muted)","font-size":"11px","font-family":"monospace"}},ct={style:{"margin-left":"8px",color:"var(--text-secondary)","font-size":"11px"}},dt={key:0,class:"result-snippet"},pt=["innerHTML"],ft={class:"filter-bar"},gt={key:0,class:"tag-row"},vt={class:"tag-count"},mt={style:{color:"var(--text-primary)","font-weight":"500"}},yt={style:{color:"var(--text-muted)","font-size":"11px","font-family":"monospace","margin-top":"2px"}},_t={key:0,style:{color:"var(--text-muted)","font-size":"11px"}},bt={key:3,style:{color:"var(--text-secondary)","font-size":"11px"}},xt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},kt={key:0,style:{padding:"40px","text-align":"center"}},ht={key:1,style:{"padding-top":"8px"}},St={style:{"font-family":"monospace","font-size":"12px"}},zt={key:0,style:{color:"var(--text-muted)"}},At={key:0,class:"note-content"},Ct=["innerHTML"],ae="cc.web-panel.search.recent",fe=8,Nt={__name:"Search",setup(l){const r=Fe(),i=Ye.PRESENTED_IMAGE_SIMPLE,p=x(!1),_=x(!1),q=x(!1),P=x(!1),K=x([]),N=x([]),R=x({noDb:!1,error:""}),k=Be({query:"",mode:"hybrid",topK:10}),I=x(""),M=x(xe()),G=x("results"),L=x(""),T=x(""),Q=x(!1),b=x(null),w=ee(()=>nt(K.value)),ne=ee(()=>N.value.length?Math.max(...N.value.map(n=>n.score)):0),me=[{title:"标题",key:"title"},{title:"分类",key:"category",width:"120px"},{title:"标签",key:"tags",width:"240px"},{title:"创建时间",key:"createdAt",width:"180px"},{title:"操作",key:"action",width:"180px"}],ye=ee(()=>{let n=K.value;if(L.value&&(n=n.filter(e=>e.category===L.value)),T.value.trim()){const e=T.value.trim().toLowerCase();n=n.filter(c=>c.tags.some(y=>y.toLowerCase().includes(e)))}return n});function _e(n){return{bm25:"BM25",vector:"向量",hybrid:"混合"}[n]||n}function V(n){const e=["blue","green","purple","orange","cyan","magenta","gold","volcano"];let c=0;for(let y=0;y<(n||"").length;y++)c=c*31+n.charCodeAt(y)>>>0;return e[c%e.length]}function le(n){return n>=.7?"#52c41a":n>=.5?"#1677ff":n>=.3?"#faad14":"#ff4d4f"}function Y(n){return String(n).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""")}function re(n,e){if(!e||!n)return Y(n);const c=e.split(/\s+/).filter(Boolean);let y=Y(n);for(const W of c){const J=new RegExp(`(${W.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")})`,"gi");y=y.replace(J,"<mark>$1</mark>")}return y}function be(n,e){return e?re(n,e):Y(n)}function xe(){try{const n=localStorage.getItem(ae);if(n){const e=JSON.parse(n);if(Array.isArray(e))return e.filter(c=>typeof c=="string").slice(0,fe)}}catch{}return[]}function ke(n){const e=n.trim();if(!e)return;const c=[e,...M.value.filter(y=>y!==e)];M.value=c.slice(0,fe);try{localStorage.setItem(ae,JSON.stringify(M.value))}catch{}}function he(){M.value=[];try{localStorage.removeItem(ae)}catch{}}function Se(n){k.query=n,j()}async function se(){p.value=!0,R.value={noDb:!1,error:""};try{const{output:n}=await r.execute("note list -n 500 --json",12e3).catch(()=>({output:""})),e=te(n);if(e.noDb){R.value=e,K.value=[];return}K.value=at(n)}catch(n){O.error("加载索引失败: "+(n?.message||n))}finally{p.value=!1}}async function j(){const n=k.query.trim();if(!n){O.warning("请输入查询");return}q.value=!0,R.value={noDb:!1,error:""};try{const e=[`search ${ze(n)}`,`--mode ${k.mode}`,`--top-k ${k.topK||10}`,"--json"],{output:c}=await r.execute(e.join(" "),15e3),y=te(c);if(y.noDb){R.value=y,N.value=[],P.value=!0,I.value=n;return}N.value=tt(c),I.value=n,P.value=!0,ke(n),G.value="results"}catch(e){O.error("搜索失败: "+(e?.message||e))}finally{q.value=!1}}function ze(n){return`"${String(n).replace(/"/g,'\\"')}"`}function Ae(n){k.query=n.title,k.mode="vector",j()}async function ie(n){Q.value=!0,_.value=!0,b.value=null;try{const{output:e}=await r.execute(`note show ${n} --json`,8e3);if(te(e).noDb){O.error("需要先 cc init 初始化项目");return}b.value=ot(e),b.value||O.error("笔记加载失败")}catch(e){O.error("加载失败: "+(e?.message||e))}finally{_.value=!1}}return Le(se),(n,e)=>{const c=u("a-button"),y=u("a-space"),W=u("a-alert"),J=u("a-input"),A=u("a-col"),X=u("a-radio-button"),ue=u("a-radio-group"),Ce=u("a-input-number"),ce=u("a-row"),Ne=u("a-form"),E=u("a-tag"),D=u("a-card"),B=u("a-statistic"),Z=u("a-empty"),Te=u("a-progress"),Ee=u("a-list-item-meta"),Me=u("a-list-item"),we=u("a-list"),de=u("a-tab-pane"),De=u("a-table"),$e=u("a-tabs"),Oe=u("a-spin"),F=u("a-descriptions-item"),Re=u("a-descriptions"),Ie=u("a-modal");return s(),f("div",null,[g("div",lt,[e[8]||(e[8]=g("div",null,[g("h2",{class:"page-title"},"RAG 搜索"),g("p",{class:"page-sub"},"BM25 · 向量检索 · 混合 RRF 融合")],-1)),a(y,null,{default:t(()=>[a(c,{loading:p.value,onClick:se},{icon:t(()=>[a(m(Je))]),default:t(()=>[e[7]||(e[7]=v(" 刷新索引 ",-1))]),_:1},8,["loading"])]),_:1})]),R.value.noDb?(s(),S(W,{key:0,type:"info","show-icon":"",message:"该模块需要项目级数据库",description:"`cc search` 命令仅在 chainlesschain 项目目录下可用。请先运行 `cc init` 初始化项目,或在已初始化的目录启动 `cc serve`。",style:{"margin-bottom":"16px"}})):z("",!0),a(D,{size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"},"body-style":{padding:"14px 16px"}},{default:t(()=>[a(Ne,{layout:"vertical",model:k,onSubmit:je(j,["prevent"])},{default:t(()=>[a(ce,{gutter:12},{default:t(()=>[a(A,{span:14},{default:t(()=>[a(J,{value:k.query,"onUpdate:value":e[0]||(e[0]=o=>k.query=o),size:"large",placeholder:"输入查询,例如:vue 防抖组件、AES 加密原理...","allow-clear":"",onPressEnter:j},{prefix:t(()=>[a(m(He))]),_:1},8,["value"])]),_:1}),a(A,{span:4},{default:t(()=>[a(ue,{value:k.mode,"onUpdate:value":e[1]||(e[1]=o=>k.mode=o),size:"large","button-style":"solid"},{default:t(()=>[(s(!0),f(C,null,$(m(We),o=>(s(),S(X,{key:o,value:o},{default:t(()=>[v(d(_e(o)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1}),a(A,{span:3},{default:t(()=>[a(Ce,{value:k.topK,"onUpdate:value":e[2]||(e[2]=o=>k.topK=o),min:1,max:50,placeholder:"topK",size:"large",style:{width:"100%"}},null,8,["value"])]),_:1}),a(A,{span:3},{default:t(()=>[a(c,{type:"primary",size:"large",loading:q.value,block:"",onClick:j},{icon:t(()=>[a(m(Ue))]),default:t(()=>[e[9]||(e[9]=v(" 搜索 ",-1))]),_:1},8,["loading"])]),_:1})]),_:1})]),_:1},8,["model"]),M.value.length?(s(),f("div",rt,[e[11]||(e[11]=g("span",{class:"recent-label"},"最近:",-1)),(s(!0),f(C,null,$(M.value,o=>(s(),S(E,{key:o,color:"blue",class:"recent-chip",onClick:h=>Se(o)},{default:t(()=>[v(d(o),1)]),_:2},1032,["onClick"]))),128)),a(c,{size:"small",type:"link",danger:"",onClick:he},{default:t(()=>[...e[10]||(e[10]=[v("清空",-1)])]),_:1})])):z("",!0)]),_:1}),a(ce,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:t(()=>[a(A,{xs:12,sm:8,lg:5},{default:t(()=>[a(D,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[a(B,{title:"索引笔记",value:w.value.total,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:t(()=>[a(m(pe))]),_:1},8,["value"])]),_:1})]),_:1}),a(A,{xs:12,sm:8,lg:5},{default:t(()=>[a(D,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[a(B,{title:"分类数",value:w.value.categories.length,"value-style":{color:"#722ed1",fontSize:"20px"}},{prefix:t(()=>[a(m(qe))]),_:1},8,["value"])]),_:1})]),_:1}),a(A,{xs:12,sm:8,lg:5},{default:t(()=>[a(D,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[a(B,{title:"标签数",value:w.value.tags.length,"value-style":{color:"#13c2c2",fontSize:"20px"}},{prefix:t(()=>[a(m(Pe))]),_:1},8,["value"])]),_:1})]),_:1}),a(A,{xs:12,sm:8,lg:5},{default:t(()=>[a(D,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[a(B,{title:"结果数",value:N.value.length,"value-style":{color:N.value.length>0?"#52c41a":"#888",fontSize:"20px"}},{prefix:t(()=>[a(m(Ge))]),_:1},8,["value","value-style"])]),_:1})]),_:1}),a(A,{xs:24,sm:8,lg:4},{default:t(()=>[a(D,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[a(B,{title:"最高分",value:ne.value,precision:3,"value-style":{color:le(ne.value),fontSize:"20px"}},{prefix:t(()=>[a(m(Qe))]),_:1},8,["value","value-style"])]),_:1})]),_:1})]),_:1}),a($e,{activeKey:G.value,"onUpdate:activeKey":e[5]||(e[5]=o=>G.value=o),class:"search-tabs"},{default:t(()=>[a(de,{key:"results",tab:"搜索结果"},{default:t(()=>[P.value?N.value.length?(s(),S(we,{key:2,"data-source":N.value,"item-layout":"vertical",size:"large"},{renderItem:t(({item:o})=>[a(Me,{class:"result-row"},{actions:t(()=>[a(c,{type:"link",size:"small",onClick:h=>ie(o.id)},{icon:t(()=>[a(m(Ve))]),default:t(()=>[e[12]||(e[12]=v(" 查看完整 ",-1))]),_:1},8,["onClick"])]),extra:t(()=>[g("div",st,[a(Te,{type:"circle",percent:Math.round(Math.min(1,o.score)*100),"stroke-color":le(o.score),format:()=>o.score.toFixed(3),width:60},null,8,["percent","stroke-color","format"])])]),default:t(()=>[a(Ee,null,{title:t(()=>[g("span",it,d(o.title||"(无标题)"),1),a(E,{color:V(o.category),style:{"margin-left":"8px"}},{default:t(()=>[v(d(o.category),1)]),_:2},1032,["color"])]),description:t(()=>[g("span",ut,d(o.id.slice(0,16)),1),g("span",ct,d(m(U)(o.createdAt)),1)]),_:2},1024),o.snippet?(s(),f("div",dt,[g("span",{innerHTML:re(o.snippet,I.value)},null,8,pt)])):z("",!0)]),_:2},1024)]),_:1},8,["data-source"])):(s(),S(Z,{key:1,description:`没有找到与 "${I.value}" 匹配的笔记`,image:m(i),style:{padding:"40px 0"}},null,8,["description","image"])):(s(),S(Z,{key:0,description:"输入查询后开始搜索",image:m(i),style:{padding:"40px 0"}},null,8,["image"]))]),_:1}),a(de,{key:"index",tab:"索引浏览"},{default:t(()=>[g("div",ft,[a(ue,{value:L.value,"onUpdate:value":e[3]||(e[3]=o=>L.value=o),size:"small","button-style":"solid"},{default:t(()=>[a(X,{value:""},{default:t(()=>[...e[13]||(e[13]=[v("全部分类",-1)])]),_:1}),(s(!0),f(C,null,$(w.value.categories.slice(0,6),o=>(s(),S(X,{key:o.name,value:o.name},{default:t(()=>[v(d(o.name)+" ("+d(o.count)+") ",1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),a(J,{value:T.value,"onUpdate:value":e[4]||(e[4]=o=>T.value=o),placeholder:"按标签筛选...","allow-clear":"",size:"small",style:{"max-width":"180px"}},null,8,["value"])]),w.value.tags.length?(s(),f("div",gt,[e[14]||(e[14]=g("span",{class:"tag-row-label"},"高频标签:",-1)),(s(!0),f(C,null,$(w.value.tags.slice(0,12),o=>(s(),S(E,{key:o.name,color:T.value===o.name?"blue":"default",class:"tag-chip",onClick:h=>T.value=T.value===o.name?"":o.name},{default:t(()=>[v(d(o.name)+" ",1),g("span",vt,d(o.count),1)]),_:2},1032,["color","onClick"]))),128))])):z("",!0),a(De,{columns:me,"data-source":ye.value,pagination:{pageSize:20,showTotal:o=>`共 ${o} 条`},size:"small",loading:p.value,style:{background:"var(--bg-card)"}},{bodyCell:t(({column:o,record:h})=>[o.key==="title"?(s(),f(C,{key:0},[g("span",mt,d(h.title||"(无标题)"),1),g("div",yt,d(h.id.slice(0,16)),1)],64)):z("",!0),o.key==="category"?(s(),S(E,{key:1,color:V(h.category)},{default:t(()=>[v(d(h.category),1)]),_:2},1032,["color"])):z("",!0),o.key==="tags"?(s(),f(C,{key:2},[(s(!0),f(C,null,$(h.tags.slice(0,4),H=>(s(),S(E,{key:H,color:"default",style:{"font-size":"11px"}},{default:t(()=>[v(d(H),1)]),_:2},1024))),128)),h.tags.length>4?(s(),f("span",_t,"+"+d(h.tags.length-4),1)):z("",!0)],64)):z("",!0),o.key==="createdAt"?(s(),f("span",bt,d(m(U)(h.createdAt)),1)):z("",!0),o.key==="action"?(s(),f(C,{key:4},[a(c,{size:"small",type:"link",onClick:H=>ie(h.id)},{default:t(()=>[...e[15]||(e[15]=[v("查看",-1)])]),_:1},8,["onClick"]),a(c,{size:"small",type:"link",onClick:H=>Ae(h)},{default:t(()=>[...e[16]||(e[16]=[v("相似搜索",-1)])]),_:1},8,["onClick"])],64)):z("",!0)]),emptyText:t(()=>[g("div",xt,[a(m(pe),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),v(" "+d(L.value||T.value?"没有符合条件的笔记":"暂无笔记"),1)])]),_:1},8,["data-source","pagination","loading"])]),_:1})]),_:1},8,["activeKey"]),a(Ie,{open:Q.value,"onUpdate:open":e[6]||(e[6]=o=>Q.value=o),title:`笔记详情:${b.value?.title||""}`,width:780,footer:null},{default:t(()=>[_.value?(s(),f("div",kt,[a(Oe)])):b.value?(s(),f("div",ht,[a(Re,{column:2,size:"small",bordered:""},{default:t(()=>[a(F,{label:"ID",span:2},{default:t(()=>[g("span",St,d(b.value.id),1)]),_:1}),a(F,{label:"分类"},{default:t(()=>[a(E,{color:V(b.value.category)},{default:t(()=>[v(d(b.value.category),1)]),_:1},8,["color"])]),_:1}),a(F,{label:"标签"},{default:t(()=>[(s(!0),f(C,null,$(b.value.tags,o=>(s(),S(E,{key:o,color:"default"},{default:t(()=>[v(d(o),1)]),_:2},1024))),128)),b.value.tags.length?z("",!0):(s(),f("span",zt,"—"))]),_:1}),a(F,{label:"创建时间"},{default:t(()=>[v(d(m(U)(b.value.createdAt)),1)]),_:1}),a(F,{label:"更新时间"},{default:t(()=>[v(d(m(U)(b.value.updatedAt)),1)]),_:1})]),_:1}),e[17]||(e[17]=g("h4",{style:{color:"var(--text-primary)","font-size":"13px",margin:"16px 0 8px"}},"正文",-1)),b.value.content?(s(),f("div",At,[g("span",{innerHTML:be(b.value.content,I.value)},null,8,Ct)])):(s(),S(Z,{key:1,description:"笔记内容为空",image:m(i)},null,8,["image"]))])):z("",!0)]),_:1},8,["open","title"])])}}},Ft=Ke(Nt,[["__scopeId","data-v-9f6d66ad"]]);export{Ft as default};
|
|
1
|
+
import{r as x,l as Le,F as f,D as g,c as a,x as t,m as S,G as z,q as u,v as s,J as v,u as m,P as je,H as C,L as O,I as d,a as Be,j as ee}from"./vendor-D0Qjn73K.js";import{u as Fe}from"./ws-4ur1fGsk.js";import{s as ge}from"./community-parser-CO25nZFt.js";import{_ as Ke}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{a as $}from"./index-BB5y5Y0z.js";import{_ as He,i as Je,a as Ue,h as pe,c as qe,aL as Pe,b as Ge,O as Qe,ai as Ve}from"./icons-CJACPYXu.js";import{E as We}from"./useConfigInject-DIkkDpt1.js";import"./index-Vit9TJBu.js";import"./transition-CVd2ueaJ.js";import"./Keyframes-C7fCrnlS.js";import"./Portal-SsPhn64D.js";import"./index-U4Zd5IK6.js";function oe(l){const r=ge(l);if(!r)return null;try{return JSON.parse(r)}catch{}const i=r.match(/\{[\s\S]*\}|\[[\s\S]*\]/);if(!i)return null;try{return JSON.parse(i[0])}catch{return null}}const Xe=Object.freeze(["bm25","vector","hybrid"]);function Ye(l,r=0){return typeof l=="number"&&Number.isFinite(l)?l:r}function Ze(l){if(Array.isArray(l))return l.filter(r=>typeof r=="string");if(typeof l!="string")return[];try{const r=JSON.parse(l);if(Array.isArray(r))return r.filter(i=>typeof i=="string")}catch{}return[]}function te(l){if(!l)return{noDb:!1,error:""};const r=ge(l),i=/Database not available/i.test(r);return{noDb:i,error:i?"Database not available":""}}function et(l,r=0){if(!l||typeof l!="object")return null;const i=l.id||"";return i?{key:i,id:i,score:Ye(l.score,0),title:String(l.title||""),category:String(l.category||"general"),createdAt:l.created_at??l.createdAt??"",snippet:String(l.snippet||""),_idx:r}:null}function tt(l){const r=oe(l);return Array.isArray(r)?r.map(et).filter(Boolean):[]}function ve(l,r=0){if(!l||typeof l!="object")return null;const i=l.id||"";return i?{key:i,id:i,title:String(l.title||""),content:l.content??"",tags:Ze(l.tags),category:String(l.category||"general"),createdAt:l.created_at??l.createdAt??"",updatedAt:l.updated_at??l.updatedAt??"",_idx:r}:null}function at(l){const r=oe(l);return Array.isArray(r)?r.map(ve).filter(Boolean):[]}function ot(l){const r=oe(l);return!r||typeof r!="object"||Array.isArray(r)?null:ve(r,0)}function nt(l){if(!Array.isArray(l)||l.length===0)return{total:0,categories:[],tags:[]};const r=new Map,i=new Map;for(const p of l){r.set(p.category,(r.get(p.category)||0)+1);for(const _ of p.tags)i.set(_,(i.get(_)||0)+1)}return{total:l.length,categories:[...r.entries()].map(([p,_])=>({name:p,count:_})).sort((p,_)=>_.count-p.count),tags:[...i.entries()].map(([p,_])=>({name:p,count:_})).sort((p,_)=>_.count-p.count)}}function U(l){if(l==null||l==="")return"—";const r=String(l),i=r.includes(" ")&&!r.includes("T")?r.replace(" ","T")+"Z":r,p=new Date(i);return isNaN(p.getTime())?r:p.toLocaleString("zh-CN",{hour12:!1})}const lt={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},rt={key:0,class:"recent-row"},st={class:"score-block"},it={class:"result-title"},ut={style:{color:"var(--text-muted)","font-size":"11px","font-family":"monospace"}},ct={style:{"margin-left":"8px",color:"var(--text-secondary)","font-size":"11px"}},dt={key:0,class:"result-snippet"},pt=["innerHTML"],ft={class:"filter-bar"},gt={key:0,class:"tag-row"},vt={class:"tag-count"},mt={style:{color:"var(--text-primary)","font-weight":"500"}},yt={style:{color:"var(--text-muted)","font-size":"11px","font-family":"monospace","margin-top":"2px"}},_t={key:0,style:{color:"var(--text-muted)","font-size":"11px"}},bt={key:3,style:{color:"var(--text-secondary)","font-size":"11px"}},xt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},kt={key:0,style:{padding:"40px","text-align":"center"}},ht={key:1,style:{"padding-top":"8px"}},St={style:{"font-family":"monospace","font-size":"12px"}},zt={key:0,style:{color:"var(--text-muted)"}},At={key:0,class:"note-content"},Ct=["innerHTML"],ae="cc.web-panel.search.recent",fe=8,Nt={__name:"Search",setup(l){const r=Fe(),i=We.PRESENTED_IMAGE_SIMPLE,p=x(!1),_=x(!1),q=x(!1),P=x(!1),K=x([]),N=x([]),R=x({noDb:!1,error:""}),k=Be({query:"",mode:"hybrid",topK:10}),I=x(""),M=x(xe()),G=x("results"),L=x(""),T=x(""),Q=x(!1),b=x(null),w=ee(()=>nt(K.value)),ne=ee(()=>N.value.length?Math.max(...N.value.map(n=>n.score)):0),me=[{title:"标题",key:"title"},{title:"分类",key:"category",width:"120px"},{title:"标签",key:"tags",width:"240px"},{title:"创建时间",key:"createdAt",width:"180px"},{title:"操作",key:"action",width:"180px"}],ye=ee(()=>{let n=K.value;if(L.value&&(n=n.filter(e=>e.category===L.value)),T.value.trim()){const e=T.value.trim().toLowerCase();n=n.filter(c=>c.tags.some(y=>y.toLowerCase().includes(e)))}return n});function _e(n){return{bm25:"BM25",vector:"向量",hybrid:"混合"}[n]||n}function V(n){const e=["blue","green","purple","orange","cyan","magenta","gold","volcano"];let c=0;for(let y=0;y<(n||"").length;y++)c=c*31+n.charCodeAt(y)>>>0;return e[c%e.length]}function le(n){return n>=.7?"#52c41a":n>=.5?"#1677ff":n>=.3?"#faad14":"#ff4d4f"}function W(n){return String(n).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""")}function re(n,e){if(!e||!n)return W(n);const c=e.split(/\s+/).filter(Boolean);let y=W(n);for(const X of c){const H=new RegExp(`(${X.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")})`,"gi");y=y.replace(H,"<mark>$1</mark>")}return y}function be(n,e){return e?re(n,e):W(n)}function xe(){try{const n=localStorage.getItem(ae);if(n){const e=JSON.parse(n);if(Array.isArray(e))return e.filter(c=>typeof c=="string").slice(0,fe)}}catch{}return[]}function ke(n){const e=n.trim();if(!e)return;const c=[e,...M.value.filter(y=>y!==e)];M.value=c.slice(0,fe);try{localStorage.setItem(ae,JSON.stringify(M.value))}catch{}}function he(){M.value=[];try{localStorage.removeItem(ae)}catch{}}function Se(n){k.query=n,j()}async function se(){p.value=!0,R.value={noDb:!1,error:""};try{const{output:n}=await r.execute("note list -n 500 --json",12e3).catch(()=>({output:""})),e=te(n);if(e.noDb){R.value=e,K.value=[];return}K.value=at(n)}catch(n){$.error("加载索引失败: "+(n?.message||n))}finally{p.value=!1}}async function j(){const n=k.query.trim();if(!n){$.warning("请输入查询");return}q.value=!0,R.value={noDb:!1,error:""};try{const e=[`search ${ze(n)}`,`--mode ${k.mode}`,`--top-k ${k.topK||10}`,"--json"],{output:c}=await r.execute(e.join(" "),15e3),y=te(c);if(y.noDb){R.value=y,N.value=[],P.value=!0,I.value=n;return}N.value=tt(c),I.value=n,P.value=!0,ke(n),G.value="results"}catch(e){$.error("搜索失败: "+(e?.message||e))}finally{q.value=!1}}function ze(n){return`"${String(n).replace(/"/g,'\\"')}"`}function Ae(n){k.query=n.title,k.mode="vector",j()}async function ie(n){Q.value=!0,_.value=!0,b.value=null;try{const{output:e}=await r.execute(`note show ${n} --json`,8e3);if(te(e).noDb){$.error("需要先 cc init 初始化项目");return}b.value=ot(e),b.value||$.error("笔记加载失败")}catch(e){$.error("加载失败: "+(e?.message||e))}finally{_.value=!1}}return Le(se),(n,e)=>{const c=u("a-button"),y=u("a-space"),X=u("a-alert"),H=u("a-input"),A=u("a-col"),Y=u("a-radio-button"),ue=u("a-radio-group"),Ce=u("a-input-number"),ce=u("a-row"),Ne=u("a-form"),E=u("a-tag"),D=u("a-card"),B=u("a-statistic"),Z=u("a-empty"),Te=u("a-progress"),Ee=u("a-list-item-meta"),Me=u("a-list-item"),we=u("a-list"),de=u("a-tab-pane"),De=u("a-table"),Oe=u("a-tabs"),$e=u("a-spin"),F=u("a-descriptions-item"),Re=u("a-descriptions"),Ie=u("a-modal");return s(),f("div",null,[g("div",lt,[e[8]||(e[8]=g("div",null,[g("h2",{class:"page-title"},"RAG 搜索"),g("p",{class:"page-sub"},"BM25 · 向量检索 · 混合 RRF 融合")],-1)),a(y,null,{default:t(()=>[a(c,{loading:p.value,onClick:se},{icon:t(()=>[a(m(He))]),default:t(()=>[e[7]||(e[7]=v(" 刷新索引 ",-1))]),_:1},8,["loading"])]),_:1})]),R.value.noDb?(s(),S(X,{key:0,type:"info","show-icon":"",message:"该模块需要项目级数据库",description:"`cc search` 命令仅在 chainlesschain 项目目录下可用。请先运行 `cc init` 初始化项目,或在已初始化的目录启动 `cc serve`。",style:{"margin-bottom":"16px"}})):z("",!0),a(D,{size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"},"body-style":{padding:"14px 16px"}},{default:t(()=>[a(Ne,{layout:"vertical",model:k,onSubmit:je(j,["prevent"])},{default:t(()=>[a(ce,{gutter:12},{default:t(()=>[a(A,{span:14},{default:t(()=>[a(H,{value:k.query,"onUpdate:value":e[0]||(e[0]=o=>k.query=o),size:"large",placeholder:"输入查询,例如:vue 防抖组件、AES 加密原理...","allow-clear":"",onPressEnter:j},{prefix:t(()=>[a(m(Je))]),_:1},8,["value"])]),_:1}),a(A,{span:4},{default:t(()=>[a(ue,{value:k.mode,"onUpdate:value":e[1]||(e[1]=o=>k.mode=o),size:"large","button-style":"solid"},{default:t(()=>[(s(!0),f(C,null,O(m(Xe),o=>(s(),S(Y,{key:o,value:o},{default:t(()=>[v(d(_e(o)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1}),a(A,{span:3},{default:t(()=>[a(Ce,{value:k.topK,"onUpdate:value":e[2]||(e[2]=o=>k.topK=o),min:1,max:50,placeholder:"topK",size:"large",style:{width:"100%"}},null,8,["value"])]),_:1}),a(A,{span:3},{default:t(()=>[a(c,{type:"primary",size:"large",loading:q.value,block:"",onClick:j},{icon:t(()=>[a(m(Ue))]),default:t(()=>[e[9]||(e[9]=v(" 搜索 ",-1))]),_:1},8,["loading"])]),_:1})]),_:1})]),_:1},8,["model"]),M.value.length?(s(),f("div",rt,[e[11]||(e[11]=g("span",{class:"recent-label"},"最近:",-1)),(s(!0),f(C,null,O(M.value,o=>(s(),S(E,{key:o,color:"blue",class:"recent-chip",onClick:h=>Se(o)},{default:t(()=>[v(d(o),1)]),_:2},1032,["onClick"]))),128)),a(c,{size:"small",type:"link",danger:"",onClick:he},{default:t(()=>[...e[10]||(e[10]=[v("清空",-1)])]),_:1})])):z("",!0)]),_:1}),a(ce,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:t(()=>[a(A,{xs:12,sm:8,lg:5},{default:t(()=>[a(D,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[a(B,{title:"索引笔记",value:w.value.total,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:t(()=>[a(m(pe))]),_:1},8,["value"])]),_:1})]),_:1}),a(A,{xs:12,sm:8,lg:5},{default:t(()=>[a(D,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[a(B,{title:"分类数",value:w.value.categories.length,"value-style":{color:"#722ed1",fontSize:"20px"}},{prefix:t(()=>[a(m(qe))]),_:1},8,["value"])]),_:1})]),_:1}),a(A,{xs:12,sm:8,lg:5},{default:t(()=>[a(D,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[a(B,{title:"标签数",value:w.value.tags.length,"value-style":{color:"#13c2c2",fontSize:"20px"}},{prefix:t(()=>[a(m(Pe))]),_:1},8,["value"])]),_:1})]),_:1}),a(A,{xs:12,sm:8,lg:5},{default:t(()=>[a(D,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[a(B,{title:"结果数",value:N.value.length,"value-style":{color:N.value.length>0?"#52c41a":"#888",fontSize:"20px"}},{prefix:t(()=>[a(m(Ge))]),_:1},8,["value","value-style"])]),_:1})]),_:1}),a(A,{xs:24,sm:8,lg:4},{default:t(()=>[a(D,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[a(B,{title:"最高分",value:ne.value,precision:3,"value-style":{color:le(ne.value),fontSize:"20px"}},{prefix:t(()=>[a(m(Qe))]),_:1},8,["value","value-style"])]),_:1})]),_:1})]),_:1}),a(Oe,{activeKey:G.value,"onUpdate:activeKey":e[5]||(e[5]=o=>G.value=o),class:"search-tabs"},{default:t(()=>[a(de,{key:"results",tab:"搜索结果"},{default:t(()=>[P.value?N.value.length?(s(),S(we,{key:2,"data-source":N.value,"item-layout":"vertical",size:"large"},{renderItem:t(({item:o})=>[a(Me,{class:"result-row"},{actions:t(()=>[a(c,{type:"link",size:"small",onClick:h=>ie(o.id)},{icon:t(()=>[a(m(Ve))]),default:t(()=>[e[12]||(e[12]=v(" 查看完整 ",-1))]),_:1},8,["onClick"])]),extra:t(()=>[g("div",st,[a(Te,{type:"circle",percent:Math.round(Math.min(1,o.score)*100),"stroke-color":le(o.score),format:()=>o.score.toFixed(3),width:60},null,8,["percent","stroke-color","format"])])]),default:t(()=>[a(Ee,null,{title:t(()=>[g("span",it,d(o.title||"(无标题)"),1),a(E,{color:V(o.category),style:{"margin-left":"8px"}},{default:t(()=>[v(d(o.category),1)]),_:2},1032,["color"])]),description:t(()=>[g("span",ut,d(o.id.slice(0,16)),1),g("span",ct,d(m(U)(o.createdAt)),1)]),_:2},1024),o.snippet?(s(),f("div",dt,[g("span",{innerHTML:re(o.snippet,I.value)},null,8,pt)])):z("",!0)]),_:2},1024)]),_:1},8,["data-source"])):(s(),S(Z,{key:1,description:`没有找到与 "${I.value}" 匹配的笔记`,image:m(i),style:{padding:"40px 0"}},null,8,["description","image"])):(s(),S(Z,{key:0,description:"输入查询后开始搜索",image:m(i),style:{padding:"40px 0"}},null,8,["image"]))]),_:1}),a(de,{key:"index",tab:"索引浏览"},{default:t(()=>[g("div",ft,[a(ue,{value:L.value,"onUpdate:value":e[3]||(e[3]=o=>L.value=o),size:"small","button-style":"solid"},{default:t(()=>[a(Y,{value:""},{default:t(()=>[...e[13]||(e[13]=[v("全部分类",-1)])]),_:1}),(s(!0),f(C,null,O(w.value.categories.slice(0,6),o=>(s(),S(Y,{key:o.name,value:o.name},{default:t(()=>[v(d(o.name)+" ("+d(o.count)+") ",1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),a(H,{value:T.value,"onUpdate:value":e[4]||(e[4]=o=>T.value=o),placeholder:"按标签筛选...","allow-clear":"",size:"small",style:{"max-width":"180px"}},null,8,["value"])]),w.value.tags.length?(s(),f("div",gt,[e[14]||(e[14]=g("span",{class:"tag-row-label"},"高频标签:",-1)),(s(!0),f(C,null,O(w.value.tags.slice(0,12),o=>(s(),S(E,{key:o.name,color:T.value===o.name?"blue":"default",class:"tag-chip",onClick:h=>T.value=T.value===o.name?"":o.name},{default:t(()=>[v(d(o.name)+" ",1),g("span",vt,d(o.count),1)]),_:2},1032,["color","onClick"]))),128))])):z("",!0),a(De,{columns:me,"data-source":ye.value,pagination:{pageSize:20,showTotal:o=>`共 ${o} 条`},size:"small",loading:p.value,style:{background:"var(--bg-card)"}},{bodyCell:t(({column:o,record:h})=>[o.key==="title"?(s(),f(C,{key:0},[g("span",mt,d(h.title||"(无标题)"),1),g("div",yt,d(h.id.slice(0,16)),1)],64)):z("",!0),o.key==="category"?(s(),S(E,{key:1,color:V(h.category)},{default:t(()=>[v(d(h.category),1)]),_:2},1032,["color"])):z("",!0),o.key==="tags"?(s(),f(C,{key:2},[(s(!0),f(C,null,O(h.tags.slice(0,4),J=>(s(),S(E,{key:J,color:"default",style:{"font-size":"11px"}},{default:t(()=>[v(d(J),1)]),_:2},1024))),128)),h.tags.length>4?(s(),f("span",_t,"+"+d(h.tags.length-4),1)):z("",!0)],64)):z("",!0),o.key==="createdAt"?(s(),f("span",bt,d(m(U)(h.createdAt)),1)):z("",!0),o.key==="action"?(s(),f(C,{key:4},[a(c,{size:"small",type:"link",onClick:J=>ie(h.id)},{default:t(()=>[...e[15]||(e[15]=[v("查看",-1)])]),_:1},8,["onClick"]),a(c,{size:"small",type:"link",onClick:J=>Ae(h)},{default:t(()=>[...e[16]||(e[16]=[v("相似搜索",-1)])]),_:1},8,["onClick"])],64)):z("",!0)]),emptyText:t(()=>[g("div",xt,[a(m(pe),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),v(" "+d(L.value||T.value?"没有符合条件的笔记":"暂无笔记"),1)])]),_:1},8,["data-source","pagination","loading"])]),_:1})]),_:1},8,["activeKey"]),a(Ie,{open:Q.value,"onUpdate:open":e[6]||(e[6]=o=>Q.value=o),title:`笔记详情:${b.value?.title||""}`,width:780,footer:null},{default:t(()=>[_.value?(s(),f("div",kt,[a($e)])):b.value?(s(),f("div",ht,[a(Re,{column:2,size:"small",bordered:""},{default:t(()=>[a(F,{label:"ID",span:2},{default:t(()=>[g("span",St,d(b.value.id),1)]),_:1}),a(F,{label:"分类"},{default:t(()=>[a(E,{color:V(b.value.category)},{default:t(()=>[v(d(b.value.category),1)]),_:1},8,["color"])]),_:1}),a(F,{label:"标签"},{default:t(()=>[(s(!0),f(C,null,O(b.value.tags,o=>(s(),S(E,{key:o,color:"default"},{default:t(()=>[v(d(o),1)]),_:2},1024))),128)),b.value.tags.length?z("",!0):(s(),f("span",zt,"—"))]),_:1}),a(F,{label:"创建时间"},{default:t(()=>[v(d(m(U)(b.value.createdAt)),1)]),_:1}),a(F,{label:"更新时间"},{default:t(()=>[v(d(m(U)(b.value.updatedAt)),1)]),_:1})]),_:1}),e[17]||(e[17]=g("h4",{style:{color:"var(--text-primary)","font-size":"13px",margin:"16px 0 8px"}},"正文",-1)),b.value.content?(s(),f("div",At,[g("span",{innerHTML:be(b.value.content,I.value)},null,8,Ct)])):(s(),S(Z,{key:1,description:"笔记内容为空",image:m(i)},null,8,["image"]))])):z("",!0)]),_:1},8,["open","title"])])}}},Ft=Ke(Nt,[["__scopeId","data-v-9f6d66ad"]]);export{Ft as default};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{u as fe}from"./ws-
|
|
2
|
-
`);for(const w of y){const s=w.trim();if(!s||s.startsWith("─")||s.startsWith("DID")||s.match(/^\d+ identit/i))continue;const i=s.match(/(did:\w+:\w+)/);if(i){const d=i[1],g=d.split(":")[1]||"key",b=/default|默认|\*/.test(s),_=s.match(/(\d{4}-\d{2}-\d{2}[\sT]?\d{2}:\d{2}(?::\d{2})?)/);e.push({key:d,did:d,method:g,created:_?_[1]:"-",isDefault:b})}}return e}async function ae(){E.value=!0;try{const{output:l}=await C.execute("did create",2e4);l.includes("error")||l.includes("失败")?x.error("创建失败: "+l.slice(0,120)):(x.success("DID 身份已创建"),await O())}catch(l){x.error("创建失败: "+l.message)}finally{E.value=!1}}async function le(){if(!W.value.trim()){x.warning("请输入消息");return}
|
|
1
|
+
import{u as fe}from"./ws-4ur1fGsk.js";import{_ as ve}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{a as x}from"./index-BB5y5Y0z.js";import{_ as me,ah as ye,K as ge,o as _e,L as J,J as be}from"./icons-CJACPYXu.js";import{l as xe,F as p,D as I,c as t,x as a,r,q as u,v as n,J as f,u as D,m as z,I as c,G as m,H as ke,L as he}from"./vendor-D0Qjn73K.js";import"./index-Vit9TJBu.js";import"./useConfigInject-DIkkDpt1.js";import"./transition-CVd2ueaJ.js";import"./Keyframes-C7fCrnlS.js";import"./Portal-SsPhn64D.js";import"./index-U4Zd5IK6.js";const we={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},Ie={key:0,style:{"text-align":"center",padding:"60px"}},De={key:0,style:{color:"#e0e0e0","font-family":"monospace","font-size":"12px"}},Ce={key:2,style:{color:"var(--text-secondary)","font-size":"12px"}},Re={key:0,style:{"margin-top":"12px"}},ze={style:{"white-space":"pre-wrap","word-break":"break-all",color:"#52c41a","font-size":"11px",background:"var(--bg-base)",padding:"12px","border-radius":"6px",border:"1px solid var(--border-color)"}},Le={key:0,style:{"margin-top":"8px"}},Te={style:{"white-space":"pre-wrap","word-break":"break-all",color:"var(--text-secondary)","font-size":"11px","margin-top":"8px",background:"var(--bg-base)",padding:"10px","border-radius":"6px",border:"1px solid var(--border-color)"}},Ae={key:0,style:{"margin-top":"8px"}},Ne={style:{"white-space":"pre-wrap","word-break":"break-all",color:"var(--text-secondary)","font-size":"11px","margin-top":"8px",background:"var(--bg-base)",padding:"10px","border-radius":"6px",border:"1px solid var(--border-color)"}},We={key:0,style:{"text-align":"center",padding:"60px"}},Oe={key:0,style:{color:"var(--text-secondary)","font-size":"12px","font-family":"monospace"}},Se={key:1,style:{color:"#e0e0e0"}},Me={key:2,style:{color:"var(--text-secondary)"}},$e={key:4,style:{color:"var(--text-muted)","font-size":"12px"}},Ee={__name:"Security",setup(Ke){const C=fe(),N=r("did"),M=r(!1);async function Y(){M.value=!0;try{N.value==="did"?await O():N.value==="audit"&&await Q()}finally{M.value=!1}}function Z(l){l==="did"&&U.value.length===0&&O(),l==="audit"&&S.value.length===0&&Q()}const $=r(!1),E=r(!1),K=r(!1),U=r([]),V=r(!1),W=r(""),L=r(""),ee=[{title:"DID",key:"did",dataIndex:"did",ellipsis:!0},{title:"方法",key:"method",dataIndex:"method",width:"100px"},{title:"创建时间",key:"created",dataIndex:"created",width:"180px"},{title:"状态",key:"status",width:"80px"}];async function O(){$.value=!0;try{const{output:l}=await C.execute("did list",15e3);U.value=te(l)}catch(l){x.error("加载 DID 列表失败: "+l.message)}finally{$.value=!1}}function te(l){const e=[],y=l.split(`
|
|
2
|
+
`);for(const w of y){const s=w.trim();if(!s||s.startsWith("─")||s.startsWith("DID")||s.match(/^\d+ identit/i))continue;const i=s.match(/(did:\w+:\w+)/);if(i){const d=i[1],g=d.split(":")[1]||"key",b=/default|默认|\*/.test(s),_=s.match(/(\d{4}-\d{2}-\d{2}[\sT]?\d{2}:\d{2}(?::\d{2})?)/);e.push({key:d,did:d,method:g,created:_?_[1]:"-",isDefault:b})}}return e}async function ae(){E.value=!0;try{const{output:l}=await C.execute("did create",2e4);l.includes("error")||l.includes("失败")?x.error("创建失败: "+l.slice(0,120)):(x.success("DID 身份已创建"),await O())}catch(l){x.error("创建失败: "+l.message)}finally{E.value=!1}}async function le(){if(!W.value.trim()){x.warning("请输入消息");return}K.value=!0,L.value="";try{const{output:l}=await C.execute(`did sign "${W.value.replace(/"/g,'\\"')}"`,15e3);L.value=l,!l.includes("error")&&!l.includes("失败")&&x.success("签名成功")}catch(l){L.value="签名失败: "+l.message}finally{K.value=!1}}const T=r(""),A=r(""),B=r(!1),F=r(!1),k=r(null),h=r(null);async function oe(){if(T.value.trim()){B.value=!0,k.value=null;try{const{output:l,exitCode:e}=await C.execute(`encrypt file "${T.value.trim()}"`,3e4);k.value={success:e===0&&!l.includes("error")&&!l.includes("失败"),output:l||"加密完成"},k.value.success&&x.success("文件加密成功")}catch(l){k.value={success:!1,output:"加密失败: "+l.message}}finally{B.value=!1}}}async function se(){if(A.value.trim()){F.value=!0,h.value=null;try{const{output:l,exitCode:e}=await C.execute(`decrypt file "${A.value.trim()}"`,3e4);h.value={success:e===0&&!l.includes("error")&&!l.includes("失败"),output:l||"解密完成"},h.value.success&&x.success("文件解密成功")}catch(l){h.value={success:!1,output:"解密失败: "+l.message}}finally{F.value=!1}}}const P=r(!1),S=r([]),H=r([]),ne=[{title:"时间",key:"time",dataIndex:"time",width:"180px"},{title:"事件",key:"event",dataIndex:"event",width:"200px"},{title:"用户",key:"user",dataIndex:"user",width:"120px"},{title:"级别",key:"level",dataIndex:"level",width:"80px"},{title:"详情",key:"detail",dataIndex:"detail",ellipsis:!0}];function re(l){return{info:"blue",warn:"orange",warning:"orange",error:"red",critical:"red"}[(l||"").toLowerCase()]||"default"}async function Q(){P.value=!0;try{const[l,e]=await Promise.all([C.execute("audit log",15e3),C.execute("audit stats",15e3)]);S.value=ie(l.output),H.value=ue(e.output)}catch(l){x.error("加载审计日志失败: "+l.message)}finally{P.value=!1}}function ie(l){const e=[],y=l.split(`
|
|
3
3
|
`);for(const w of y){const s=w.trim();if(!s||s.startsWith("─")||s.startsWith("Audit")||s.startsWith("Recent"))continue;const i=s.split(/\s*[|│]\s*/);if(i.length>=3){e.push({key:e.length,time:i[0]||"-",event:i[1]||"-",user:i[2]||"-",level:i[3]||"info",detail:i.slice(4).join(" ")||""});continue}const d=s.match(/^(\d{4}-\d{2}-\d{2}[\sT]\d{2}:\d{2}(?::\d{2})?)\s+(.+)/);if(d){const g=d[2],b=g.match(/\b(INFO|WARN|WARNING|ERROR|CRITICAL)\b/i);e.push({key:e.length,time:d[1],event:g.replace(/\b(INFO|WARN|WARNING|ERROR|CRITICAL)\b/i,"").trim().slice(0,80),user:"-",level:b?b[1].toLowerCase():"info",detail:""})}else s.length>3&&!s.match(/^\d+ event/i)&&e.push({key:e.length,time:"-",event:s.slice(0,80),user:"-",level:"info",detail:""})}return e}function ue(l){const e=[],y=l.split(`
|
|
4
|
-
`),w=["#1677ff","#52c41a","#faad14","#ff4d4f"];let s=0;for(const i of y){const d=i.trim();if(!d||d.startsWith("─")||d.startsWith("Audit"))continue;const g=d.match(/^(.+?)\s*[:=:]\s*(.+)$/);if(g){const b=g[1].trim(),_=g[2].trim(),R=_.match(/^(\d+)/);e.push({label:b,value:R?parseInt(R[1],10):_,color:w[s%w.length]}),s++}}return e.length===0&&e.push({label:"总事件数",value:S.value.length,color:"#1677ff"},{label:"状态",value:"就绪",color:"#52c41a"}),e}return xe(()=>{O()}),(l,e)=>{const y=u("a-button"),w=u("a-space"),s=u("a-spin"),i=u("a-tag"),d=u("a-empty"),g=u("a-table"),b=u("a-input"),_=u("a-form-item"),R=u("a-form"),de=u("a-modal"),G=u("a-tab-pane"),j=u("a-card"),q=u("a-col"),
|
|
4
|
+
`),w=["#1677ff","#52c41a","#faad14","#ff4d4f"];let s=0;for(const i of y){const d=i.trim();if(!d||d.startsWith("─")||d.startsWith("Audit"))continue;const g=d.match(/^(.+?)\s*[:=:]\s*(.+)$/);if(g){const b=g[1].trim(),_=g[2].trim(),R=_.match(/^(\d+)/);e.push({label:b,value:R?parseInt(R[1],10):_,color:w[s%w.length]}),s++}}return e.length===0&&e.push({label:"总事件数",value:S.value.length,color:"#1677ff"},{label:"状态",value:"就绪",color:"#52c41a"}),e}return xe(()=>{O()}),(l,e)=>{const y=u("a-button"),w=u("a-space"),s=u("a-spin"),i=u("a-tag"),d=u("a-empty"),g=u("a-table"),b=u("a-input"),_=u("a-form-item"),R=u("a-form"),de=u("a-modal"),G=u("a-tab-pane"),j=u("a-card"),q=u("a-col"),X=u("a-row"),ce=u("a-statistic"),pe=u("a-tabs");return n(),p("div",null,[I("div",we,[e[7]||(e[7]=I("div",null,[I("h2",{class:"page-title"},"安全中心"),I("p",{class:"page-sub"},"DID 身份 / 加密 / 审计")],-1)),t(y,{type:"primary",ghost:"",loading:M.value,onClick:Y},{icon:a(()=>[t(D(me))]),default:a(()=>[e[6]||(e[6]=f(" 刷新 ",-1))]),_:1},8,["loading"])]),t(pe,{activeKey:N.value,"onUpdate:activeKey":e[5]||(e[5]=o=>N.value=o),onChange:Z},{default:a(()=>[t(G,{key:"did"},{tab:a(()=>[t(D(_e)),e[8]||(e[8]=f(" DID 身份 ",-1))]),default:a(()=>[t(w,{style:{"margin-bottom":"16px"}},{default:a(()=>[t(y,{type:"primary",loading:E.value,onClick:ae},{icon:a(()=>[t(D(ye))]),default:a(()=>[e[9]||(e[9]=f(" 创建身份 ",-1))]),_:1},8,["loading"]),t(y,{onClick:e[0]||(e[0]=o=>V.value=!0)},{icon:a(()=>[t(D(ge))]),default:a(()=>[e[10]||(e[10]=f(" 签名消息 ",-1))]),_:1})]),_:1}),$.value?(n(),p("div",Ie,[t(s,{size:"large"})])):(n(),z(g,{key:1,columns:ee,"data-source":U.value,pagination:{pageSize:20,showTotal:o=>`共 ${o} 条`},size:"small",style:{background:"var(--bg-card)"},"row-class-name":()=>"sec-row"},{bodyCell:a(({column:o,record:v})=>[o.key==="did"?(n(),p("span",De,c(v.did),1)):m("",!0),o.key==="method"?(n(),z(i,{key:1,color:"blue"},{default:a(()=>[f(c(v.method),1)]),_:2},1024)):m("",!0),o.key==="created"?(n(),p("span",Ce,c(v.created),1)):m("",!0),o.key==="status"?(n(),z(i,{key:3,color:v.isDefault?"green":"default"},{default:a(()=>[f(c(v.isDefault?"默认":"可用"),1)]),_:2},1032,["color"])):m("",!0)]),emptyText:a(()=>[t(d,{description:"暂无 DID 身份,点击「创建身份」添加"})]),_:1},8,["data-source","pagination"])),t(de,{open:V.value,"onUpdate:open":e[2]||(e[2]=o=>V.value=o),title:"DID 签名","confirm-loading":K.value,onOk:le,"ok-text":"签名","cancel-text":"取消"},{default:a(()=>[t(R,{"label-col":{span:4},"wrapper-col":{span:20},style:{"margin-top":"16px"}},{default:a(()=>[t(_,{label:"消息",required:""},{default:a(()=>[t(b,{value:W.value,"onUpdate:value":e[1]||(e[1]=o=>W.value=o),placeholder:"请输入要签名的消息"},null,8,["value"])]),_:1})]),_:1}),L.value?(n(),p("div",Re,[e[11]||(e[11]=I("p",{style:{color:"var(--text-secondary)","margin-bottom":"6px"}},"签名结果:",-1)),I("pre",ze,c(L.value),1)])):m("",!0)]),_:1},8,["open","confirm-loading"])]),_:1}),t(G,{key:"encrypt"},{tab:a(()=>[t(D(J)),e[12]||(e[12]=f(" 文件加密 ",-1))]),default:a(()=>[t(X,{gutter:[24,24]},{default:a(()=>[t(q,{xs:24,md:12},{default:a(()=>[t(j,{title:"加密文件",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(R,{"label-col":{span:6},"wrapper-col":{span:18}},{default:a(()=>[t(_,{label:"文件路径"},{default:a(()=>[t(b,{value:T.value,"onUpdate:value":e[3]||(e[3]=o=>T.value=o),placeholder:"输入文件路径,如 /path/to/file.txt"},null,8,["value"])]),_:1}),t(_,{"wrapper-col":{offset:6,span:18}},{default:a(()=>[t(y,{type:"primary",loading:B.value,disabled:!T.value.trim(),onClick:oe},{icon:a(()=>[t(D(J))]),default:a(()=>[e[13]||(e[13]=f(" 加密 ",-1))]),_:1},8,["loading","disabled"])]),_:1})]),_:1}),k.value?(n(),p("div",Le,[t(i,{color:k.value.success?"green":"red"},{default:a(()=>[f(c(k.value.success?"成功":"失败"),1)]),_:1},8,["color"]),I("pre",Te,c(k.value.output),1)])):m("",!0)]),_:1})]),_:1}),t(q,{xs:24,md:12},{default:a(()=>[t(j,{title:"解密文件",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(R,{"label-col":{span:6},"wrapper-col":{span:18}},{default:a(()=>[t(_,{label:"文件路径"},{default:a(()=>[t(b,{value:A.value,"onUpdate:value":e[4]||(e[4]=o=>A.value=o),placeholder:"输入加密文件路径,如 /path/to/file.txt.enc"},null,8,["value"])]),_:1}),t(_,{"wrapper-col":{offset:6,span:18}},{default:a(()=>[t(y,{type:"primary",loading:F.value,disabled:!A.value.trim(),onClick:se},{icon:a(()=>[t(D(J))]),default:a(()=>[e[14]||(e[14]=f(" 解密 ",-1))]),_:1},8,["loading","disabled"])]),_:1})]),_:1}),h.value?(n(),p("div",Ae,[t(i,{color:h.value.success?"green":"red"},{default:a(()=>[f(c(h.value.success?"成功":"失败"),1)]),_:1},8,["color"]),I("pre",Ne,c(h.value.output),1)])):m("",!0)]),_:1})]),_:1})]),_:1})]),_:1}),t(G,{key:"audit"},{tab:a(()=>[t(D(be)),e[15]||(e[15]=f(" 审计日志 ",-1))]),default:a(()=>[t(X,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:a(()=>[(n(!0),p(ke,null,he(H.value,o=>(n(),z(q,{xs:12,sm:6,key:o.label},{default:a(()=>[t(j,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"},size:"small"},{default:a(()=>[t(ce,{title:o.label,value:o.value,"value-style":{color:o.color,fontSize:"20px"}},null,8,["title","value","value-style"])]),_:2},1024)]),_:2},1024))),128))]),_:1}),P.value?(n(),p("div",We,[t(s,{size:"large"})])):(n(),z(g,{key:1,columns:ne,"data-source":S.value,pagination:{pageSize:20,showTotal:o=>`共 ${o} 条`},size:"small",style:{background:"var(--bg-card)"},"row-class-name":()=>"sec-row"},{bodyCell:a(({column:o,record:v})=>[o.key==="time"?(n(),p("span",Oe,c(v.time),1)):m("",!0),o.key==="event"?(n(),p("span",Se,c(v.event),1)):m("",!0),o.key==="user"?(n(),p("span",Me,c(v.user),1)):m("",!0),o.key==="level"?(n(),z(i,{key:3,color:re(v.level)},{default:a(()=>[f(c(v.level),1)]),_:2},1032,["color"])):m("",!0),o.key==="detail"?(n(),p("span",$e,c(v.detail),1)):m("",!0)]),emptyText:a(()=>[t(d,{description:"暂无审计日志"})]),_:1},8,["data-source","pagination"]))]),_:1})]),_:1},8,["activeKey"])])}}},Xe=ve(Ee,[["__scopeId","data-v-d730836a"]]);export{Xe as default};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{u as J}from"./ws-
|
|
2
|
-
`).filter(l=>l.match(/[○●]\s+\w+:\s+\d+/));I.value=i.map(l=>{const f=l.match(/([○●])\s+(\w+):\s+(\d+)/);return f?{key:f[2],name:f[2],port:parseInt(f[3]),active:f[1]==="●"}:null}).filter(Boolean)}async function E(){C.value=!0,b.value="";try{const{output:o}=await S.execute("doctor",3e4);b.value=o}catch(o){b.value=`诊断失败: ${o.message}`}finally{C.value=!1}}return ee($),(o,a)=>{const v=n("a-button"),p=n("a-statistic"),i=n("a-card"),l=n("a-col"),f=n("a-row"),G=n("a-tag"),T=n("a-spin"),q=n("a-badge"),A=n("a-table"),H=n("a-space");return s(),d("div",null,[m("div",oe,[a[3]||(a[3]=m("div",null,[m("h2",{class:"page-title"},"服务管理"),m("p",{class:"page-sub"},"ChainlessChain 运行状态与服务控制")],-1)),e(v,{type:"primary",ghost:"",loading:x.value,onClick:$},{icon:t(()=>[e(c(
|
|
1
|
+
import{u as J}from"./ws-4ur1fGsk.js";import{_ as P}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{_ as Z,Z as K,d as R,$ as Q,a9 as U,ag as X,b as Y}from"./icons-CJACPYXu.js";import{l as ee,F as d,D as m,c as e,x as t,r,q as n,v as s,J as y,u as c,I as u,G as g,m as V,j as te}from"./vendor-D0Qjn73K.js";const oe={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},ae={key:0,style:{"margin-top":"6px",color:"var(--text-muted)","font-size":"11px"}},re={style:{"margin-top":"6px",color:"var(--text-muted)","font-size":"11px"}},le={key:0,style:{"margin-top":"6px",color:"var(--text-muted)","font-size":"11px",overflow:"hidden","text-overflow":"ellipsis","white-space":"nowrap"}},se={key:0,style:{"margin-top":"6px",color:"var(--text-muted)","font-size":"11px"}},ne={key:0,style:{"text-align":"center",padding:"30px"}},ce={key:1,style:{"font-family":"monospace",color:"#ccc"}},ie={key:0,style:{color:"var(--text-secondary)","font-size":"13px",padding:"8px 0"}},de={key:1,style:{color:"var(--text-muted)","font-size":"13px",padding:"8px 0"}},ue={key:0,style:{"margin-top":"16px"}},ve={style:{background:"var(--bg-base)",border:"1px solid var(--border-color)","border-radius":"6px",padding:"12px",color:"#aaa","font-size":"12px","max-height":"300px","overflow-y":"auto","white-space":"pre-wrap"}},pe={__name:"Services",setup(fe){const S=J(),B=window.__CC_CONFIG__||{},x=r(!1),C=r(!1),b=r(""),F=r(""),z=r(!1),D=r(""),k=r(""),L=r(""),M=r(!1),h=r(""),w=r(""),I=r([]),N=te(()=>S.status==="connected"),W=[{title:"服务",dataIndex:"name",key:"name"},{title:"端口",dataIndex:"port",key:"port"},{title:"状态",key:"status"}];async function $(){x.value=!0;try{const{output:o}=await S.execute("status",15e3);F.value=o,j(o)}catch(o){console.error("status failed:",o)}finally{x.value=!1}}function j(o){z.value=o.includes("Desktop app running")||o.includes("Running");const a=o.match(/Edition:\s+(\S+)/i);a&&(D.value=a[1]);const v=o.match(/LLM:\s+(\S+)\s+\(([^)]+)\)/i);if(v)k.value=v[1],L.value=v[2];else{const l=o.match(/LLM:\s+(\S+)/i);l&&(k.value=l[1])}M.value=o.includes("Setup completed");const p=o.match(/Setup completed \(([^)]+)\)/i);if(p)try{h.value=new Date(p[1]).toLocaleDateString("zh-CN")}catch{h.value=""}o.includes("docker-compose.yml not found")?w.value="未找到 docker-compose.yml":o.includes("Docker Services")&&(w.value="已检测到 Docker 配置");const i=o.split(`
|
|
2
|
+
`).filter(l=>l.match(/[○●]\s+\w+:\s+\d+/));I.value=i.map(l=>{const f=l.match(/([○●])\s+(\w+):\s+(\d+)/);return f?{key:f[2],name:f[2],port:parseInt(f[3]),active:f[1]==="●"}:null}).filter(Boolean)}async function E(){C.value=!0,b.value="";try{const{output:o}=await S.execute("doctor",3e4);b.value=o}catch(o){b.value=`诊断失败: ${o.message}`}finally{C.value=!1}}return ee($),(o,a)=>{const v=n("a-button"),p=n("a-statistic"),i=n("a-card"),l=n("a-col"),f=n("a-row"),G=n("a-tag"),T=n("a-spin"),q=n("a-badge"),A=n("a-table"),H=n("a-space");return s(),d("div",null,[m("div",oe,[a[3]||(a[3]=m("div",null,[m("h2",{class:"page-title"},"服务管理"),m("p",{class:"page-sub"},"ChainlessChain 运行状态与服务控制")],-1)),e(v,{type:"primary",ghost:"",loading:x.value,onClick:$},{icon:t(()=>[e(c(Z))]),default:t(()=>[a[2]||(a[2]=y(" 刷新 ",-1))]),_:1},8,["loading"])]),e(f,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:t(()=>[e(l,{xs:24,sm:12,lg:6},{default:t(()=>[e(i,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[e(p,{title:"应用状态",value:z.value?"运行中":"未运行","value-style":{color:z.value?"#52c41a":"#888",fontSize:"16px"}},{prefix:t(()=>[e(c(K))]),_:1},8,["value","value-style"]),D.value?(s(),d("div",ae,"版本: "+u(D.value),1)):g("",!0)]),_:1})]),_:1}),e(l,{xs:24,sm:12,lg:6},{default:t(()=>[e(i,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[e(p,{title:"WebSocket 服务",value:"运行中","value-style":{color:"#52c41a",fontSize:"16px"}},{prefix:t(()=>[e(c(R))]),_:1}),m("div",re," 端口: "+u(c(B).wsPort||18800)+" · "+u(c(B).wsHost||"127.0.0.1"),1)]),_:1})]),_:1}),e(l,{xs:24,sm:12,lg:6},{default:t(()=>[e(i,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[e(p,{title:"LLM 提供商",value:k.value||"未配置","value-style":{color:k.value?"#1677ff":"#888",fontSize:"16px"}},{prefix:t(()=>[e(c(Q))]),_:1},8,["value","value-style"]),L.value?(s(),d("div",le,u(L.value),1)):g("",!0)]),_:1})]),_:1}),e(l,{xs:24,sm:12,lg:6},{default:t(()=>[e(i,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[e(p,{title:"初始化",value:M.value?"已完成":"未完成","value-style":{color:M.value?"#52c41a":"#faad14",fontSize:"16px"}},{prefix:t(()=>[e(c(U))]),_:1},8,["value","value-style"]),h.value?(s(),d("div",se,u(h.value),1)):g("",!0)]),_:1})]),_:1})]),_:1}),e(i,{title:"端口状态",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"}},{extra:t(()=>[e(G,{color:N.value?"green":"red"},{default:t(()=>[y(" WS "+u(N.value?"已连接":"断开"),1)]),_:1},8,["color"])]),default:t(()=>[x.value?(s(),d("div",ne,[e(T)])):(s(),V(A,{key:1,columns:W,"data-source":I.value,pagination:!1,size:"small","row-class-name":_=>_.active?"port-active":""},{bodyCell:t(({column:_,record:O})=>[_.key==="status"?(s(),V(q,{key:0,status:O.active?"success":"default",text:O.active?"运行中":"未运行"},null,8,["status","text"])):g("",!0),_.key==="port"?(s(),d("span",ce,u(O.port),1)):g("",!0)]),_:1},8,["data-source","row-class-name"]))]),_:1}),e(i,{title:"Docker 服务",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"}},{default:t(()=>[w.value?(s(),d("div",ie,u(w.value),1)):(s(),d("div",de,"未检测到 Docker 服务"))]),_:1}),e(i,{title:"快速操作",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[e(H,{wrap:""},{default:t(()=>[e(v,{loading:C.value,onClick:E,style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:t(()=>[e(c(X))]),default:t(()=>[a[4]||(a[4]=y(" 环境诊断 ",-1))]),_:1},8,["loading"]),e(v,{onClick:a[0]||(a[0]=_=>o.$router.push("/logs")),style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:t(()=>[e(c(Y))]),default:t(()=>[a[5]||(a[5]=y(" 查看日志 ",-1))]),_:1}),e(v,{onClick:a[1]||(a[1]=_=>o.$router.push("/providers")),style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:t(()=>[e(c(R))]),default:t(()=>[a[6]||(a[6]=y(" LLM 配置 ",-1))]),_:1})]),_:1}),b.value?(s(),d("div",ue,[a[7]||(a[7]=m("div",{style:{color:"var(--text-secondary)","font-size":"11px","margin-bottom":"6px"}},"诊断结果",-1)),m("pre",ve,u(b.value),1)])):g("",!0)]),_:1})])}}},ye=P(pe,[["__scopeId","data-v-13be6bfe"]]);export{ye as default};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{_ as o}from"./index-
|
|
1
|
+
import{_ as o}from"./index-Vit9TJBu.js";import{c as C,g as N,m as D,d as G}from"./useConfigInject-DIkkDpt1.js";import{i as W}from"./initDefaultProps-BeWIEzBr.js";import{d as I,c}from"./vendor-D0Qjn73K.js";import{K as j}from"./Keyframes-C7fCrnlS.js";const z=()=>({prefixCls:String,width:{type:[Number,String]}}),O=I({compatConfig:{MODE:3},name:"SkeletonTitle",props:z(),setup(e){return()=>{const{prefixCls:t,width:n}=e,r=typeof n=="number"?`${n}px`:n;return c("h3",{class:t,style:{width:r}},null)}}}),X=()=>({prefixCls:String,width:{type:[Number,String,Array]},rows:Number}),_=I({compatConfig:{MODE:3},name:"SkeletonParagraph",props:X(),setup(e){const t=n=>{const{width:r,rows:l=2}=e;if(Array.isArray(r))return r[n];if(l-1===n)return r};return()=>{const{prefixCls:n,rows:r}=e,l=[...Array(r)].map((i,a)=>{const d=t(a);return c("li",{key:a,style:{width:typeof d=="number"?`${d}px`:d}},null)});return c("ul",{class:n},[l])}}}),se=()=>({prefixCls:String,size:[String,Number],shape:String,active:{type:Boolean,default:void 0}}),L=e=>{const{prefixCls:t,size:n,shape:r}=e,l=C({[`${t}-lg`]:n==="large",[`${t}-sm`]:n==="small"}),i=C({[`${t}-circle`]:r==="circle",[`${t}-square`]:r==="square",[`${t}-round`]:r==="round"}),a=typeof n=="number"?{width:`${n}px`,height:`${n}px`,lineHeight:`${n}px`}:{};return c("span",{class:C(t,l,i),style:a},null)};L.displayName="SkeletonElement";const q=new j("ant-skeleton-loading",{"0%":{transform:"translateX(-37.5%)"},"100%":{transform:"translateX(37.5%)"}}),v=e=>({height:e,lineHeight:`${e}px`}),$=e=>o({width:e},v(e)),F=e=>({position:"relative",zIndex:0,overflow:"hidden",background:"transparent","&::after":{position:"absolute",top:0,insetInlineEnd:"-150%",bottom:0,insetInlineStart:"-150%",background:e.skeletonLoadingBackground,animationName:q,animationDuration:e.skeletonLoadingMotionDuration,animationTimingFunction:"ease",animationIterationCount:"infinite",content:'""'}}),P=e=>o({width:e*5,minWidth:e*5},v(e)),K=e=>{const{skeletonAvatarCls:t,color:n,controlHeight:r,controlHeightLG:l,controlHeightSM:i}=e;return{[`${t}`]:o({display:"inline-block",verticalAlign:"top",background:n},$(r)),[`${t}${t}-circle`]:{borderRadius:"50%"},[`${t}${t}-lg`]:o({},$(l)),[`${t}${t}-sm`]:o({},$(i))}},V=e=>{const{controlHeight:t,borderRadiusSM:n,skeletonInputCls:r,controlHeightLG:l,controlHeightSM:i,color:a}=e;return{[`${r}`]:o({display:"inline-block",verticalAlign:"top",background:a,borderRadius:n},P(t)),[`${r}-lg`]:o({},P(l)),[`${r}-sm`]:o({},P(i))}},M=e=>o({width:e},v(e)),J=e=>{const{skeletonImageCls:t,imageSizeBase:n,color:r,borderRadiusSM:l}=e;return{[`${t}`]:o(o({display:"flex",alignItems:"center",justifyContent:"center",verticalAlign:"top",background:r,borderRadius:l},M(n*2)),{[`${t}-path`]:{fill:"#bfbfbf"},[`${t}-svg`]:o(o({},M(n)),{maxWidth:n*4,maxHeight:n*4}),[`${t}-svg${t}-svg-circle`]:{borderRadius:"50%"}}),[`${t}${t}-circle`]:{borderRadius:"50%"}}},x=(e,t,n)=>{const{skeletonButtonCls:r}=e;return{[`${n}${r}-circle`]:{width:t,minWidth:t,borderRadius:"50%"},[`${n}${r}-round`]:{borderRadius:t}}},E=e=>o({width:e*2,minWidth:e*2},v(e)),Q=e=>{const{borderRadiusSM:t,skeletonButtonCls:n,controlHeight:r,controlHeightLG:l,controlHeightSM:i,color:a}=e;return o(o(o(o(o({[`${n}`]:o({display:"inline-block",verticalAlign:"top",background:a,borderRadius:t,width:r*2,minWidth:r*2},E(r))},x(e,r,n)),{[`${n}-lg`]:o({},E(l))}),x(e,l,`${n}-lg`)),{[`${n}-sm`]:o({},E(i))}),x(e,i,`${n}-sm`))},U=e=>{const{componentCls:t,skeletonAvatarCls:n,skeletonTitleCls:r,skeletonParagraphCls:l,skeletonButtonCls:i,skeletonInputCls:a,skeletonImageCls:d,controlHeight:y,controlHeightLG:f,controlHeightSM:p,color:g,padding:w,marginSM:B,borderRadius:s,skeletonTitleHeight:h,skeletonBlockRadius:u,skeletonParagraphLineHeight:m,controlHeightXS:k,skeletonParagraphMarginTop:S}=e;return{[`${t}`]:{display:"table",width:"100%",[`${t}-header`]:{display:"table-cell",paddingInlineEnd:w,verticalAlign:"top",[`${n}`]:o({display:"inline-block",verticalAlign:"top",background:g},$(y)),[`${n}-circle`]:{borderRadius:"50%"},[`${n}-lg`]:o({},$(f)),[`${n}-sm`]:o({},$(p))},[`${t}-content`]:{display:"table-cell",width:"100%",verticalAlign:"top",[`${r}`]:{width:"100%",height:h,background:g,borderRadius:u,[`+ ${l}`]:{marginBlockStart:p}},[`${l}`]:{padding:0,"> li":{width:"100%",height:m,listStyle:"none",background:g,borderRadius:u,"+ li":{marginBlockStart:k}}},[`${l}> li:last-child:not(:first-child):not(:nth-child(2))`]:{width:"61%"}},[`&-round ${t}-content`]:{[`${r}, ${l} > li`]:{borderRadius:s}}},[`${t}-with-avatar ${t}-content`]:{[`${r}`]:{marginBlockStart:B,[`+ ${l}`]:{marginBlockStart:S}}},[`${t}${t}-element`]:o(o(o(o({display:"inline-block",width:"auto"},Q(e)),K(e)),V(e)),J(e)),[`${t}${t}-block`]:{width:"100%",[`${i}`]:{width:"100%"},[`${a}`]:{width:"100%"}},[`${t}${t}-active`]:{[`
|
|
2
2
|
${r},
|
|
3
3
|
${l} > li,
|
|
4
4
|
${n},
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{k as j,r as v,j as h,l as O,F as f,D as i,I as y,u as n,c as r,x as d,H as C,L,q as p,B as E,v as c,J as g,m as M}from"./vendor-D0Qjn73K.js";import{u as F}from"./ws-4ur1fGsk.js";import{u as N}from"./useShellMode-CgR0wCYM.js";import{p as Q}from"./parsers-DftYMnlk.js";import{u as R}from"./chat-DY27mJje.js";import{_ as V}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{c as $,_ as D,af as T}from"./icons-CJACPYXu.js";const U=j("skills",()=>{const _=v(!1),t=v([]),u=v(""),m=v("all"),x=h(()=>{const a=new Set(["all"]);return t.value.forEach(o=>{o.category&&a.add(o.category),o.executionMode&&a.add(o.executionMode)}),[...a]}),k=h(()=>{let a=t.value;if(m.value!=="all"&&(a=a.filter(o=>o.category===m.value||o.executionMode===m.value)),u.value){const o=u.value.toLowerCase();a=a.filter(l=>l.name?.toLowerCase().includes(o)||l.description?.toLowerCase().includes(o)||l.title?.toLowerCase().includes(o))}return a});async function b(){const a=F();_.value=!0;try{if(N().isEmbedded){const e=await a.sendRaw({type:"skill.list"},2e4);e?.ok&&Array.isArray(e.result?.skills)?t.value=e.result.skills:(console.error("skill.list custom topic failed:",e?.error),t.value=[]);return}const{output:o}=await a.execute("skill list",2e4),l=Q(o);t.value=l}catch(o){console.error("Failed to load skills:",o)}finally{_.value=!1}}return{loading:_,allSkills:t,searchQuery:u,selectedCategory:m,categories:x,filteredSkills:k,loadSkills:b}}),H={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},J={class:"page-sub"},P={style:{display:"flex",gap:"12px","margin-bottom":"20px","flex-wrap":"wrap"}},W={key:0,style:{"text-align":"center",padding:"60px"}},G={key:1,class:"skills-grid"},K={style:{display:"flex","justify-content":"space-between","align-items":"flex-start"}},X={style:{flex:"1","min-width":"0"}},Y={style:{"font-weight":"500",color:"#e0e0e0","font-size":"14px","margin-bottom":"4px","font-family":"monospace"}},Z={style:{color:"var(--text-secondary)","font-size":"12px","line-height":"1.5"}},ee={style:{"margin-left":"12px","flex-shrink":"0"}},te={style:{"margin-top":"10px",display:"flex","justify-content":"flex-end"}},le={key:2,style:{"text-align":"center",padding:"60px",color:"var(--text-muted)"}},oe={__name:"Skills",setup(_){const t=U(),u=R(),m=E(),x=h(()=>t.categories.filter(l=>l!=="all").slice(0,6));function k(l){return{"built-in":"内置","cli-direct":"CLI",agent:"Agent","llm-query":"LLM",hybrid:"混合",workspace:"工作区",marketplace:"市场"}[l]||l}function b(l){return{"cli-direct":"CLI",agent:"Agent","llm-query":"LLM",hybrid:"混合","built-in":"内置"}[l]||l||"未知"}function a(l){return{"cli-direct":"cyan",agent:"purple","llm-query":"blue",hybrid:"orange","built-in":"green"}[l]||"default"}async function o(l){await u.createSession("agent"),m.push("/chat"),setTimeout(()=>{u.currentSessionId&&u.sendMessage(u.currentSessionId,`/skill run ${l}`)},300)}return O(()=>{t.allSkills.length||t.loadSkills()}),(l,e)=>{const S=p("a-button"),z=p("a-input-search"),w=p("a-radio-button"),I=p("a-radio-group"),q=p("a-spin"),A=p("a-tag"),B=p("a-card");return c(),f("div",null,[i("div",H,[i("div",null,[e[3]||(e[3]=i("h2",{class:"page-title"},"技能管理",-1)),i("p",J,y(n(t).allSkills.length)+" 个可用技能",1)]),r(S,{type:"primary",ghost:"",loading:n(t).loading,onClick:e[0]||(e[0]=s=>n(t).loadSkills())},{icon:d(()=>[r(n(D))]),default:d(()=>[e[4]||(e[4]=g(" 刷新 ",-1))]),_:1},8,["loading"])]),i("div",P,[r(z,{value:n(t).searchQuery,"onUpdate:value":e[1]||(e[1]=s=>n(t).searchQuery=s),placeholder:"搜索技能名称或描述...",style:{width:"300px"},"allow-clear":""},null,8,["value"]),r(I,{value:n(t).selectedCategory,"onUpdate:value":e[2]||(e[2]=s=>n(t).selectedCategory=s),"button-style":"solid"},{default:d(()=>[r(w,{value:"all"},{default:d(()=>[...e[5]||(e[5]=[g("全部",-1)])]),_:1}),(c(!0),f(C,null,L(x.value,s=>(c(),M(w,{key:s,value:s},{default:d(()=>[g(y(k(s)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),n(t).loading?(c(),f("div",W,[r(q,{size:"large"}),e[6]||(e[6]=i("div",{style:{color:"var(--text-muted)","margin-top":"12px"}},"加载技能中...",-1))])):n(t).filteredSkills.length?(c(),f("div",G,[(c(!0),f(C,null,L(n(t).filteredSkills,s=>(c(),M(B,{key:s.name,class:"skill-card",size:"small",hoverable:"",style:{background:"var(--bg-card)","border-color":"var(--border-color)",cursor:"default"}},{default:d(()=>[i("div",K,[i("div",X,[i("div",Y,y(s.name),1),i("div",Z,y(s.description||"暂无描述"),1)]),i("div",ee,[r(A,{color:a(s.executionMode),style:{"font-size":"10px"}},{default:d(()=>[g(y(b(s.executionMode)),1)]),_:2},1032,["color"])])]),i("div",te,[r(S,{size:"small",type:"primary",ghost:"",onClick:se=>o(s.name)},{icon:d(()=>[r(n(T))]),default:d(()=>[e[7]||(e[7]=g(" 运行 ",-1))]),_:1},8,["onClick"])])]),_:2},1024))),128))])):(c(),f("div",le,[r(n($),{style:{"font-size":"48px","margin-bottom":"16px",display:"block"}}),i("div",null,y(n(t).allSkills.length?"没有匹配的技能":"点击刷新加载技能列表"),1)]))])}}},pe=V(oe,[["__scopeId","data-v-a1cd8dd9"]]);export{pe as default};
|