chainlesschain 0.157.8 → 0.158.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-Dmur24hV.js → AIOps-9QEKGr43.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-BiXQ5MCX.js → ActionButton-BQElVBgD.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-BrBdBLPi.js → Analytics-DbZbFR_a.js} +2 -2
- package/src/assets/web-panel/assets/AppLayout-BbfBwVfE.js +1 -0
- package/src/assets/web-panel/assets/AppLayout-CKMl4NLf.css +1 -0
- package/src/assets/web-panel/assets/{Audit-DLYnWfX_.js → Audit-DzddAZVx.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-CKHLFZZS.js → Backup-D46qSgzQ.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-B7lryLAY.js → BaseInput-60t9IMEz.js} +1 -1
- package/src/assets/web-panel/assets/Chat-3Kj2JQP4.js +2 -0
- package/src/assets/web-panel/assets/{Checkbox-DAqCmQtS.js → Checkbox-Ba1Rf2Ea.js} +1 -1
- package/src/assets/web-panel/assets/Codegen-AVAcL7NA.css +1 -0
- package/src/assets/web-panel/assets/Codegen-WiYmL3oB.js +1 -0
- package/src/assets/web-panel/assets/{Col-BxNojt4A.js → Col-D2zhpSqE.js} +1 -1
- package/src/assets/web-panel/assets/{Community-BG7vSQg7.js → Community-DgqmUGwT.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-Bl_FTVcP.js → Compact-D_dbJDbi.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-CL6jUiTf.js → Compliance-BVcVb-e2.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-Q37C8zUh.js → Cowork-pgKzBNDo.js} +4 -4
- package/src/assets/web-panel/assets/{Cron-Kq3eJC0L.js → Cron-Cs5QaKTP.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-CvI5bEH8.js → Crosschain-pjWfIM8s.js} +1 -1
- package/src/assets/web-panel/assets/{DID-BD9PovRf.js → DID-DQtsjz3X.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-BXSj5-OS.js → Dashboard-sqj42zKx.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-BcEYFA4h.js → Dropdown-BM_ljd87.js} +1 -1
- package/src/assets/web-panel/assets/Federation-BftELHDw.css +1 -0
- package/src/assets/web-panel/assets/Federation-CId-3zn6.js +1 -0
- package/src/assets/web-panel/assets/{FormItemContext-C_8M0L9X.js → FormItemContext-CnzbixSE.js} +1 -1
- package/src/assets/web-panel/assets/{Git-DW9KmRrN.js → Git-B38QeOPF.js} +2 -2
- package/src/assets/web-panel/assets/{Governance--0gVd3YR.js → Governance-DrGkAjd1.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-CSuaikJO.js → Inference-BjkHB4sD.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-Bz8-Uh6r.js → KnowledgeGraph-Trs1XJFK.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-BMTqVPem.js → Logs-B39LUZs9.js} +2 -2
- package/src/assets/web-panel/assets/{Marketplace-CTZqO_RV.js → Marketplace-BnpOoITi.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-IN5l2BCN.js → McpTools-DbwkdBUE.js} +2 -2
- package/src/assets/web-panel/assets/{Memory-DEJ96vkh.js → Memory-BHXHpldt.js} +2 -2
- package/src/assets/web-panel/assets/NLProgramming-B3BALajs.js +1 -0
- package/src/assets/web-panel/assets/{Notes-DAP1s6Bg.js → Notes-u6lLTv0t.js} +2 -2
- package/src/assets/web-panel/assets/{Organization-CutzdziK.js → Organization-CQ1X722j.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-CFLJpWAb.js → Overflow-DHKu8e8g.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-H7hLODDc.js → P2P-BflX74Hm.js} +2 -2
- package/src/assets/web-panel/assets/{Permissions-B7UejC3D.js → Permissions-B2XrAUBW.js} +3 -3
- package/src/assets/web-panel/assets/Pipeline-C0K9-DnR.js +1 -0
- package/src/assets/web-panel/assets/Privacy-BKPoZngH.js +1 -0
- package/src/assets/web-panel/assets/{ProjectSettings-BiKBzbRF.js → ProjectSettings-C34C7hFt.js} +2 -2
- package/src/assets/web-panel/assets/{Projects-asWgm0Iz.js → Projects-DLvUzeIB.js} +2 -2
- package/src/assets/web-panel/assets/{Providers-C2eO_XrC.js → Providers-BFiMVWaM.js} +2 -2
- package/src/assets/web-panel/assets/{Recommend-CIZjeClx.js → Recommend-BmUhysGC.js} +1 -1
- package/src/assets/web-panel/assets/Reputation-BlfSvJww.js +1 -0
- package/src/assets/web-panel/assets/{Row-BBRGnkyd.js → Row-Dl74576S.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-B4jpCYCI.js → RssFeed-9_MkDUxZ.js} +3 -3
- package/src/assets/web-panel/assets/Search-BTk9rglb.css +1 -0
- package/src/assets/web-panel/assets/Search-CSRY_TYa.js +1 -0
- package/src/assets/web-panel/assets/{Security-D2BQD7tk.js → Security-DfDoKfkl.js} +4 -4
- package/src/assets/web-panel/assets/{Services-VasZTmqN.js → Services-7Blny0Jc.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-1joyz4wO.js → Skeleton-6CF_3QUY.js} +1 -1
- package/src/assets/web-panel/assets/Skills-DowQcRe1.js +1 -0
- package/src/assets/web-panel/assets/{Sla-DTbGerEL.js → Sla-B93c8j92.js} +1 -1
- package/src/assets/web-panel/assets/{Tasks-DI3oKTDz.js → Tasks-Db9TRjE7.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-C9Z_82IH.js → Templates-DJ_hvs5c.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-kLu9x3Ty.js → Tenant-BXS8s6vl.js} +1 -1
- package/src/assets/web-panel/assets/Tokens-CvmTVU7E.js +1 -0
- package/src/assets/web-panel/assets/Tokens-KvJRHQcl.css +1 -0
- package/src/assets/web-panel/assets/{Trigger-BIXZjkDZ.js → Trigger-BenSsaoN.js} +1 -1
- package/src/assets/web-panel/assets/Trust-BLI308Ik.css +1 -0
- package/src/assets/web-panel/assets/Trust-HMz40LfZ.js +1 -0
- package/src/assets/web-panel/assets/{VideoEditing-nIRTUjK_.js → VideoEditing-DEhH42sI.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-bO-fXxBx.js → Wallet-AGwfOdTM.js} +4 -4
- package/src/assets/web-panel/assets/{WebAuthn-uNwYx1Yn.js → WebAuthn-DK5tKWul.js} +4 -4
- package/src/assets/web-panel/assets/{WorkflowEditor-Bw6cIw_h.js → WorkflowEditor-vlujdL6I.js} +1 -1
- package/src/assets/web-panel/assets/{colors-WgDc41S9.js → colors-BiB5aDao.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-BI2RK_Ub.js → compact-item-CHderV9n.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-gy9ZhS49.js → createContext-DMZ-5dy2.js} +1 -1
- package/src/assets/web-panel/assets/{hasIn-BeuofWqK.js → hasIn-BKDBYP3s.js} +1 -1
- package/src/assets/web-panel/assets/icons-ukMaZ3tx.js +57 -0
- package/src/assets/web-panel/assets/{index-B1KhJnQM.js → index-7fxCGMoL.js} +1 -1
- package/src/assets/web-panel/assets/{index-CUV4Xqwc.js → index-7pqZqPD2.js} +1 -1
- package/src/assets/web-panel/assets/{index-BhwkejpN.js → index-A4RpHMOa.js} +1 -1
- package/src/assets/web-panel/assets/{index--V8HSAh9.js → index-AIdelwOe.js} +1 -1
- package/src/assets/web-panel/assets/index-B5oebI6W.js +1 -0
- package/src/assets/web-panel/assets/{index-BIlQFerH.js → index-B7fivpG2.js} +1 -1
- package/src/assets/web-panel/assets/{index-ChQfosO1.js → index-BBWUR4u4.js} +1 -1
- package/src/assets/web-panel/assets/{index-bpC7BiFY.js → index-BBk2e7vJ.js} +2 -2
- package/src/assets/web-panel/assets/{index-CCe5JJYI.js → index-BRRFK-im.js} +1 -1
- package/src/assets/web-panel/assets/{index-t8Iy1rHD.js → index-BVOI707f.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cwuee4M2.js → index-BadelvSE.js} +1 -1
- package/src/assets/web-panel/assets/{index-DLcTmwiN.js → index-BfKFNptm.js} +3 -3
- package/src/assets/web-panel/assets/{index-BSrnzqkD.js → index-BgDX-tzO.js} +1 -1
- package/src/assets/web-panel/assets/{index-CFjz2AoU.js → index-BjSojphX.js} +1 -1
- package/src/assets/web-panel/assets/{index-vwTt5gIV.js → index-BlXskar6.js} +1 -1
- package/src/assets/web-panel/assets/{index-D3LHutKn.js → index-BryAkWUJ.js} +1 -1
- package/src/assets/web-panel/assets/{index-Q7v4BZgp.js → index-C1p_dZw0.js} +3 -3
- package/src/assets/web-panel/assets/{index-BhSfMAk_.js → index-CBYNsy51.js} +1 -1
- package/src/assets/web-panel/assets/{index-IXyQceyp.js → index-CEpcKl17.js} +2 -2
- package/src/assets/web-panel/assets/{index-B_Jn0gUS.js → index-CUT3Nmzx.js} +1 -1
- package/src/assets/web-panel/assets/{index-Ct1YvTCX.js → index-CbpCY2ch.js} +2 -2
- package/src/assets/web-panel/assets/index-D3PGpBPm.js +1 -0
- package/src/assets/web-panel/assets/{index-CwzHos3n.js → index-D3lD9wgX.js} +1 -1
- package/src/assets/web-panel/assets/index-D5Beu9ZA.js +1 -0
- package/src/assets/web-panel/assets/{index-Dxy2NQqS.js → index-DRRzH4Ge.js} +1 -1
- package/src/assets/web-panel/assets/{index-BeI4fOXN.js → index-DRcTAUJA.js} +1 -1
- package/src/assets/web-panel/assets/{index-CndKqpaA.js → index-DZ8MjPLC.js} +1 -1
- package/src/assets/web-panel/assets/index-DfcXDy2A.js +36 -0
- package/src/assets/web-panel/assets/index-DtDFSCfE.js +12 -0
- package/src/assets/web-panel/assets/{index-BVg8Wf40.js → index-DvI8Xtzv.js} +1 -1
- package/src/assets/web-panel/assets/{index-pGLDMYoo.js → index-DvfAkHw8.js} +1 -1
- package/src/assets/web-panel/assets/{index-DhwwIcoT.js → index-DyXslU_B.js} +1 -1
- package/src/assets/web-panel/assets/{index-CBI2Y4Kj.js → index-MoLxDrkb.js} +2 -2
- package/src/assets/web-panel/assets/{index-D_bHyAnC.js → index-Ncxqj2UN.js} +1 -1
- package/src/assets/web-panel/assets/{index-t5BUMwJ1.js → index-YgC7QI1N.js} +1 -1
- package/src/assets/web-panel/assets/{index-BqUqxSm3.js → index-_sntSncx.js} +1 -1
- package/src/assets/web-panel/assets/{index-CBfv-ndK.js → index-uujjC_4g.js} +1 -1
- package/src/assets/web-panel/assets/index-yMt4C1Gh.js +1 -0
- package/src/assets/web-panel/assets/{initDefaultProps-C1zn_AKT.js → initDefaultProps-B2vQoQga.js} +1 -1
- package/src/assets/web-panel/assets/{motion-BflWvLDD.js → motion-D2eluOJu.js} +1 -1
- package/src/assets/web-panel/assets/{move-TfXJb-sS.js → move-CgcvSoZ7.js} +1 -1
- package/src/assets/web-panel/assets/{omit-COjrlUIA.js → omit-DvLh7wH1.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-1WCywewt.js → pickAttrs-BsseBclw.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-y75Pew0G.js → placementArrow-XLLtr9qD.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-BDt6Mlnb.js → responsiveObserve-ByCb5zZK.js} +1 -1
- package/src/assets/web-panel/assets/{slide-B1oHu6JW.js → slide-CeP5JCiZ.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-CO9QQaYQ.js → statusUtils-DMVoo96t.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-C2ONfKU2.js → styleChecker-Cz5mJgc8.js} +1 -1
- package/src/assets/web-panel/assets/{transition-atE2sWdv.js → transition-DSe9CgZe.js} +1 -1
- package/src/assets/web-panel/assets/{useConfigInject-DIKG5Y4I.js → useConfigInject-DCcT0grw.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-C0OopxrG.js → useFlexGapSupport-BZkoDuF3.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-Cryb4eNl.js → vnode-Dexy2NN9.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-zuDCIwwE.js → zoom-CDfM_sRk.js} +1 -1
- package/src/assets/web-panel/index.html +2 -2
- package/src/commands/nlprog.js +25 -15
- package/src/gateways/ws/ws-server.js +12 -1
- package/src/lib/web-ui-server.js +33 -0
- package/src/assets/web-panel/assets/AppLayout-DCrLKryi.css +0 -1
- package/src/assets/web-panel/assets/AppLayout-DGosvMBr.js +0 -1
- package/src/assets/web-panel/assets/Chat-Ga0oUawB.js +0 -2
- package/src/assets/web-panel/assets/NLProgramming-BMftRM4D.js +0 -1
- package/src/assets/web-panel/assets/Pipeline-DhmIDzq5.js +0 -1
- package/src/assets/web-panel/assets/Privacy-D98lbFiD.js +0 -1
- package/src/assets/web-panel/assets/Reputation-Dq21I6NZ.js +0 -1
- package/src/assets/web-panel/assets/Skills-BkTmE8SJ.js +0 -1
- package/src/assets/web-panel/assets/icons-E3MGhN6s.js +0 -57
- package/src/assets/web-panel/assets/index-B4FsQ2CI.js +0 -1
- package/src/assets/web-panel/assets/index-CK4CCFyw.js +0 -1
- package/src/assets/web-panel/assets/index-CapUO117.js +0 -12
- package/src/assets/web-panel/assets/index-CsESExuO.js +0 -1
- package/src/assets/web-panel/assets/index-DPaLf3-g.js +0 -36
- package/src/assets/web-panel/assets/index-TpCAHpWv.js +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{u as kt}from"./ws-Bv7YH0VB.js";import{s as bt}from"./community-parser-CO25nZFt.js";import{_ as xt}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{a as k}from"./index-BfKFNptm.js";import{Y as ht,ac as St,n as Ne,E as Fe,G as Re,Q as ge,aa as Ve,aw as At}from"./icons-ukMaZ3tx.js";import{E as Ct}from"./useConfigInject-DCcT0grw.js";import{l as zt,F as p,D as A,c as o,x as a,q as y,r as b,v as r,J as c,u as v,I as d,H as h,L as N,m as _,G as m,j as ue,a as Z}from"./vendor-BVetwVfk.js";import"./index-DfcXDy2A.js";import"./transition-DSe9CgZe.js";import"./Keyframes-C7fCrnlS.js";import"./Portal-CHsntPCQ.js";import"./index-U4Zd5IK6.js";function F(s){const n=bt(s);if(!n)return null;try{return JSON.parse(n)}catch{}const u=n.match(/\{[\s\S]*\}|\[[\s\S]*\]/);if(!u)return null;try{return JSON.parse(u[0])}catch{return null}}const be=Object.freeze(["tpm","tee","secure_element"]),Tt=Object.freeze(["valid","expired","failed","pending"]),He=Object.freeze(["iridium","starlink","beidou"]),wt=Object.freeze(["queued","sent","confirmed","failed"]),xe=Object.freeze(["yubikey","ledger","trezor","generic"]),Mt=Object.freeze(["fips_140_2","fips_140_3","cc_eal4"]);function $(s,n=0){return typeof s=="number"&&Number.isFinite(s)?s:n}function jt(s,n=0){if(!s||typeof s!="object")return null;const u=s.id||"";return u?{key:u,id:u,anchor:String(s.anchor||"").toLowerCase(),status:String(s.status||"pending").toLowerCase(),challenge:s.challenge??"",response:s.response??"",deviceFingerprint:s.device_fingerprint??s.deviceFingerprint??"",createdAt:s.created_at??s.createdAt??null,expiresAt:s.expires_at??s.expiresAt??null,_idx:n}:null}function $t(s){const n=F(s);return Array.isArray(n)?n.map(jt).filter(Boolean):[]}function It(s){const n=F(s);return!n||typeof n!="object"||Array.isArray(n)?{ok:!1,attestationId:null,status:"",response:"",reason:""}:{ok:!!n.attestationId,attestationId:n.attestationId?String(n.attestationId):null,status:String(n.status||""),response:String(n.response||""),reason:n.reason?String(n.reason):""}}function Et(s,n=0){if(!s||typeof s!="object")return null;const u=s.id||"";return u?{key:u,id:u,algorithm:String(s.algorithm||""),peer:s.peer??"",compatible:!!s.compatible,result:String(s.result||""),latencyMs:$(s.latency_ms??s.latencyMs,0),createdAt:s.created_at??s.createdAt??null,_idx:n}:null}function Ut(s){const n=F(s);return Array.isArray(n)?n.map(Et).filter(Boolean):[]}function Lt(s){const n=F(s);return!n||typeof n!="object"||Array.isArray(n)?{ok:!1,testId:null,compatible:!1,result:"",latencyMs:0,reason:""}:{ok:!!n.testId,testId:n.testId?String(n.testId):null,compatible:!!n.compatible,result:String(n.result||""),latencyMs:$(n.latencyMs,0),reason:n.reason?String(n.reason):""}}function Ot(s,n=0){if(!s||typeof s!="object")return null;const u=s.id||"";return u?{key:u,id:u,provider:String(s.provider||"").toLowerCase(),priority:$(s.priority,5),status:String(s.status||"queued").toLowerCase(),payload:String(s.payload||""),sentAt:s.sent_at??s.sentAt??null,confirmedAt:s.confirmed_at??s.confirmedAt??null,createdAt:s.created_at??s.createdAt??null,_idx:n}:null}function Nt(s){const n=F(s);return Array.isArray(n)?n.map(Ot).filter(Boolean):[]}function Ft(s,n=0){if(!s||typeof s!="object")return null;const u=s.id||"";return u?{key:u,id:u,vendor:String(s.vendor||"").toLowerCase(),model:s.model??"",serialNumber:s.serial_number??s.serialNumber??"",complianceLevel:s.compliance_level??s.complianceLevel??"",firmwareVersion:s.firmware_version??s.firmwareVersion??"",createdAt:s.created_at??s.createdAt??null,_idx:n}:null}function Rt(s){const n=F(s);return Array.isArray(n)?n.map(Ft).filter(Boolean):[]}function Vt(s){const n=F(s);return!n||typeof n!="object"||Array.isArray(n)?{ok:!1,signature:"",algorithm:"",reason:""}:{ok:!!n.signature,signature:n.signature?String(n.signature):"",algorithm:String(n.algorithm||""),reason:n.reason?String(n.reason):""}}function de(s){const n=F(s);if(!n||typeof n!="object"||Array.isArray(n))return{ok:!1,id:null,reason:""};const u=n.deviceId||n.messageId||n.attestationId||n.testId||null;return{ok:!!(u||n.removed||n.updated),id:u?String(u):null,reason:n.reason?String(n.reason):""}}const Ht={attestations:{total:0,valid:0,byAnchor:{}},interopTests:{total:0,compatible:0,avgLatencyMs:0},satellite:{total:0,queued:0,confirmed:0},hsm:{total:0,byVendor:{}}};function Pt(s){const n=JSON.parse(JSON.stringify(Ht));for(const C of be)n.attestations.byAnchor[C]=0;for(const C of xe)n.hsm.byVendor[C]=0;const u=F(s);if(!u||typeof u!="object"||Array.isArray(u))return n;if(u.attestations&&typeof u.attestations=="object"&&(n.attestations.total=$(u.attestations.total,0),n.attestations.valid=$(u.attestations.valid,0),u.attestations.byAnchor&&typeof u.attestations.byAnchor=="object"))for(const[C,x]of Object.entries(u.attestations.byAnchor))typeof x=="number"&&Number.isFinite(x)&&(n.attestations.byAnchor[C]=x);if(u.interopTests&&typeof u.interopTests=="object"&&(n.interopTests.total=$(u.interopTests.total,0),n.interopTests.compatible=$(u.interopTests.compatible,0),n.interopTests.avgLatencyMs=$(u.interopTests.avgLatencyMs,0)),u.satellite&&typeof u.satellite=="object"&&(n.satellite.total=$(u.satellite.total,0),n.satellite.queued=$(u.satellite.queued,0),n.satellite.confirmed=$(u.satellite.confirmed,0)),u.hsm&&typeof u.hsm=="object"&&(n.hsm.total=$(u.hsm.total,0),u.hsm.byVendor&&typeof u.hsm.byVendor=="object"))for(const[C,x]of Object.entries(u.hsm.byVendor))typeof x=="number"&&Number.isFinite(x)&&(n.hsm.byVendor[C]=x);return n}function ke(s){if(s==null||s==="")return"—";const n=typeof s=="number"?new Date(s):new Date(String(s));return isNaN(n.getTime())?String(s):n.toLocaleString("zh-CN",{hour12:!1})}const qt={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},Dt={class:"stat-sub"},Bt={class:"stat-sub"},Qt={class:"stat-sub"},Gt={class:"filter-bar"},Jt={key:0,style:{color:"var(--text-primary)","font-family":"monospace","font-size":"12px"}},Kt={key:0,style:{color:"var(--text-secondary)","font-family":"monospace","font-size":"11px"}},Yt={key:1,style:{color:"var(--text-muted)"}},Wt={key:0,style:{color:"var(--text-secondary)","font-family":"monospace","font-size":"11px"}},Xt={key:1,style:{color:"var(--text-muted)"}},Zt={key:5,style:{color:"var(--text-secondary)","font-size":"11px"}},ea={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},ta={key:0,style:{color:"var(--text-primary)","font-family":"monospace","font-size":"12px"}},aa={key:0,style:{color:"var(--text-secondary)","font-family":"monospace","font-size":"12px"}},oa={key:1,style:{color:"var(--text-muted)"}},la={key:0,style:{color:"var(--text-secondary)","font-family":"monospace","font-size":"11px"}},na={key:1,style:{color:"var(--text-muted)"}},sa={key:6,style:{color:"var(--text-secondary)","font-size":"11px"}},ra={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},ia={class:"filter-bar"},ua={key:0,style:{color:"var(--text-primary)","font-family":"monospace","font-size":"12px"}},da={key:4,style:{color:"var(--text-primary)","font-family":"monospace","font-size":"12px"}},pa={key:5,style:{color:"var(--text-secondary)","font-size":"11px"}},ca={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},fa={class:"filter-bar"},ma={key:0,style:{color:"var(--text-primary)","font-family":"monospace","font-size":"12px"}},ya={key:0,style:{color:"var(--text-primary)","font-family":"monospace","font-size":"12px"}},va={key:1,style:{color:"var(--text-muted)"}},_a={key:0,style:{color:"var(--text-secondary)","font-family":"monospace","font-size":"11px"}},ga={key:1,style:{color:"var(--text-muted)"}},ka={key:1,style:{color:"var(--text-muted)"}},ba={key:0,style:{color:"var(--text-secondary)","font-family":"monospace","font-size":"11px"}},xa={key:1,style:{color:"var(--text-muted)"}},ha={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},Sa={key:0,style:{"padding-top":"8px"}},Aa={style:{"margin-left":"8px"}},Ca={key:1},za={class:"sig-pre"},Ta={__name:"Trust",setup(s){const n=kt(),u=Ct.PRESENTED_IMAGE_SIMPLE,C=b(!1),x=b(!1),pe=b(!1),he=b([]),Se=b([]),Ae=b([]),ce=b([]),w=b({attestations:{total:0,valid:0,byAnchor:{}},interopTests:{total:0,compatible:0,avgLatencyMs:0},satellite:{total:0,queued:0,confirmed:0},hsm:{total:0,byVendor:{}}}),Ce=b("attestations"),P=b(""),q=b(""),D=b(""),B=b(""),Q=b(""),ee=b(!1),te=b(!1),ae=b(!1),oe=b(!1),fe=b(!1),T=Z({anchor:"tpm",challenge:"",fingerprint:""}),z=Z({algorithm:"ml_kem_768",peer:"",latency:50}),M=Z({provider:"iridium",priority:5,payload:""}),g=Z({vendor:"yubikey",model:"",serial:"",compliance:void 0,firmware:""}),I=Z({data:"",algorithm:""}),R=b(null),L=b(null),Pe=[{title:"ID",key:"id",width:"130px"},{title:"锚点",key:"anchor",width:"160px"},{title:"状态",key:"status",width:"110px"},{title:"指纹",key:"fingerprint",width:"180px"},{title:"响应",key:"response"},{title:"创建时间",key:"createdAt",width:"160px"}],qe=[{title:"ID",key:"id",width:"130px"},{title:"算法",key:"algorithm",width:"180px"},{title:"兼容",key:"compatible",width:"110px"},{title:"结果",key:"result",width:"110px"},{title:"延迟",key:"latencyMs",width:"100px"},{title:"对端",key:"peer",width:"150px"},{title:"创建时间",key:"createdAt",width:"160px"}],De=[{title:"ID",key:"id",width:"130px"},{title:"提供商",key:"provider",width:"110px"},{title:"优先级",key:"priority",width:"90px"},{title:"状态",key:"status",width:"110px"},{title:"负载",key:"payload"},{title:"创建时间",key:"createdAt",width:"160px"},{title:"操作",key:"action",width:"210px"}],Be=[{title:"ID",key:"id",width:"130px"},{title:"厂商",key:"vendor",width:"110px"},{title:"型号",key:"model",width:"140px"},{title:"序列号",key:"serialNumber",width:"180px"},{title:"合规等级",key:"complianceLevel",width:"140px"},{title:"固件",key:"firmwareVersion",width:"110px"},{title:"操作",key:"action",width:"160px"}],Qe=ue(()=>{let l=he.value;return P.value&&(l=l.filter(e=>e.anchor===P.value)),q.value&&(l=l.filter(e=>e.status===q.value)),l}),Ge=ue(()=>{let l=Ae.value;return D.value&&(l=l.filter(e=>e.provider===D.value)),B.value&&(l=l.filter(e=>e.status===B.value)),l}),Je=ue(()=>Q.value?ce.value.filter(l=>l.vendor===Q.value):ce.value),ze=ue(()=>w.value.attestations.total?w.value.attestations.valid/w.value.attestations.total*100:0);function me(l){return{tpm:"TPM",tee:"TEE",secure_element:"SE"}[l]||l}function Ke(l){return{tpm:"blue",tee:"purple",secure_element:"cyan"}[l]||"default"}function Te(l){return{valid:"有效",expired:"过期",failed:"失败",pending:"待处理"}[l]||l}function Ye(l){return{valid:"green",expired:"default",failed:"red",pending:"processing"}[l]||"default"}function we(l){return{queued:"排队中",sent:"已发送",confirmed:"已确认",failed:"失败"}[l]||l}function We(l){return{queued:"default",sent:"blue",confirmed:"green",failed:"red"}[l]||"default"}function Xe(l){return l>=8?"red":l>=6?"orange":l>=4?"gold":"default"}function Ze(l){return{iridium:"blue",starlink:"purple",beidou:"red"}[l]||"default"}function Me(l){return{yubikey:"green",ledger:"blue",trezor:"orange",generic:"default"}[l]||"default"}function et(l){return{fips_140_2:"cyan",fips_140_3:"blue",cc_eal4:"purple"}[l]||"default"}function tt(l){return l<=50?"green":l<=200?"blue":l<=1e3?"gold":"red"}function at(l){return l>=95?"#52c41a":l>=80?"#1677ff":l>=60?"#faad14":"#ff4d4f"}function ye(l,e){return l?l.length<=e?l:l.slice(0,e)+"…":""}function E(l){return`"${String(l).replace(/"/g,'\\"')}"`}async function V(){C.value=!0;try{const[l,e,f,O,_e]=await Promise.all([n.execute("trust attestations --limit 200 --json",1e4).catch(()=>({output:""})),n.execute("trust interop-tests --limit 200 --json",1e4).catch(()=>({output:""})),n.execute("trust sat-messages --limit 200 --json",1e4).catch(()=>({output:""})),n.execute("trust hsm-devices --limit 200 --json",1e4).catch(()=>({output:""})),n.execute("trust stats --json",8e3).catch(()=>({output:""}))]);he.value=$t(l.output),Se.value=Ut(e.output),Ae.value=Nt(f.output),ce.value=Rt(O.output),w.value=Pt(_e.output)}catch(l){k.error("加载数据失败: "+(l?.message||l))}finally{C.value=!1}}async function ot(){x.value=!0;try{const l=[`trust attest ${T.anchor}`];T.challenge.trim()&&l.push(`-c ${E(T.challenge.trim())}`),T.fingerprint.trim()&&l.push(`-f ${E(T.fingerprint.trim())}`),l.push("--json");const{output:e}=await n.execute(l.join(" "),1e4),f=It(e);if(!f.ok){k.error("证明失败: "+(f.reason||e.slice(0,120)));return}k.success(`证明已记录 [${f.status}]`),ee.value=!1,je(),await V()}catch(l){k.error("证明失败: "+(l?.message||l))}finally{x.value=!1}}async function lt(){if(!z.algorithm.trim()){k.warning("请填写算法");return}x.value=!0;try{const l=[`trust interop-test ${E(z.algorithm.trim())}`];z.peer.trim()&&l.push(`-p ${E(z.peer.trim())}`),z.latency>0&&l.push(`-l ${z.latency}`),l.push("--json");const{output:e}=await n.execute(l.join(" "),1e4),f=Lt(e);if(!f.ok){k.error("测试失败: "+(f.reason||e.slice(0,120)));return}k.success(`测试完成:${f.compatible?"兼容":"不兼容"} (${f.latencyMs}ms)`),te.value=!1,$e(),await V()}catch(l){k.error("测试失败: "+(l?.message||l))}finally{x.value=!1}}async function nt(){if(!M.payload.trim()){k.warning("请填写消息负载");return}x.value=!0;try{const l=[`trust sat-send ${E(M.payload.trim())}`,`-p ${M.provider}`,`-r ${M.priority}`,"--json"],{output:e}=await n.execute(l.join(" "),1e4),f=de(e);if(!f.ok){k.error("发送失败: "+(f.reason||e.slice(0,120)));return}k.success(`消息已入队:${f.id?.slice(0,8)}`),ae.value=!1,Ie(),await V()}catch(l){k.error("发送失败: "+(l?.message||l))}finally{x.value=!1}}async function ve(l,e){try{const{output:f}=await n.execute(`trust sat-status ${l.id} ${e} --json`,8e3),O=de(f);if(!O.ok){k.error("更新失败: "+(O.reason||f.slice(0,120)));return}k.success("状态已更新"),await V()}catch(f){k.error("更新失败: "+(f?.message||f))}}async function st(){x.value=!0;try{const l=[`trust hsm-register ${g.vendor}`];g.model.trim()&&l.push(`-m ${E(g.model.trim())}`),g.serial.trim()&&l.push(`-s ${E(g.serial.trim())}`),g.compliance&&l.push(`-c ${g.compliance}`),g.firmware.trim()&&l.push(`-f ${E(g.firmware.trim())}`),l.push("--json");const{output:e}=await n.execute(l.join(" "),1e4),f=de(e);if(!f.ok){k.error("注册失败: "+(f.reason||e.slice(0,120)));return}k.success(`HSM 已注册:${f.id?.slice(0,8)}`),oe.value=!1,Ee(),await V()}catch(l){k.error("注册失败: "+(l?.message||l))}finally{x.value=!1}}async function rt(l){try{const{output:e}=await n.execute(`trust hsm-remove ${l.id} --json`,8e3),f=de(e);if(!f.ok){k.error("移除失败: "+(f.reason||e.slice(0,120)));return}k.success("设备已移除"),await V()}catch(e){k.error("移除失败: "+(e?.message||e))}}function it(l){R.value=l,I.data="",I.algorithm="",L.value=null,fe.value=!0}async function ut(){if(!I.data.trim()){k.warning("请填写待签名数据");return}if(R.value){pe.value=!0,L.value=null;try{const l=[`trust hsm-sign ${R.value.id}`];l.push(`-d ${E(I.data)}`),I.algorithm.trim()&&l.push(`-a ${E(I.algorithm.trim())}`),l.push("--json");const{output:e}=await n.execute(l.join(" "),1e4);L.value=Vt(e),L.value.ok&&k.success("签名完成")}catch(l){k.error("签名失败: "+(l?.message||l))}finally{pe.value=!1}}}function je(){T.anchor="tpm",T.challenge="",T.fingerprint=""}function $e(){z.algorithm="ml_kem_768",z.peer="",z.latency=50}function Ie(){M.provider="iridium",M.priority=5,M.payload=""}function Ee(){g.vendor="yubikey",g.model="",g.serial="",g.compliance=void 0,g.firmware=""}return zt(V),(l,e)=>{const f=y("a-button"),O=y("a-menu-item"),_e=y("a-menu"),dt=y("a-dropdown"),pt=y("a-space"),G=y("a-statistic"),J=y("a-card"),K=y("a-col"),ct=y("a-row"),U=y("a-radio-button"),Y=y("a-radio-group"),j=y("a-tag"),le=y("a-table"),ne=y("a-tab-pane"),ft=y("a-popconfirm"),mt=y("a-tabs"),se=y("a-select-option"),re=y("a-select"),S=y("a-form-item"),H=y("a-input"),W=y("a-form"),X=y("a-modal"),Ue=y("a-input-number"),Le=y("a-textarea"),yt=y("a-divider"),vt=y("a-empty"),Oe=y("a-descriptions-item"),_t=y("a-descriptions"),gt=y("a-alert");return r(),p("div",null,[A("div",qt,[e[37]||(e[37]=A("div",null,[A("h2",{class:"page-title"},"信任与安全"),A("p",{class:"page-sub"},"TPM/TEE 证明 · PQC 互操作 · 卫星消息 · HSM 设备")],-1)),o(pt,null,{default:a(()=>[o(f,{loading:C.value,onClick:V},{icon:a(()=>[o(v(ht))]),default:a(()=>[e[31]||(e[31]=c(" 刷新 ",-1))]),_:1},8,["loading"]),o(dt,null,{overlay:a(()=>[o(_e,null,{default:a(()=>[o(O,{key:"attest",onClick:e[0]||(e[0]=t=>ee.value=!0)},{default:a(()=>[...e[33]||(e[33]=[c("证明请求",-1)])]),_:1}),o(O,{key:"interop",onClick:e[1]||(e[1]=t=>te.value=!0)},{default:a(()=>[...e[34]||(e[34]=[c("PQC 互操作",-1)])]),_:1}),o(O,{key:"sat",onClick:e[2]||(e[2]=t=>ae.value=!0)},{default:a(()=>[...e[35]||(e[35]=[c("卫星消息",-1)])]),_:1}),o(O,{key:"hsm",onClick:e[3]||(e[3]=t=>oe.value=!0)},{default:a(()=>[...e[36]||(e[36]=[c("注册 HSM",-1)])]),_:1})]),_:1})]),default:a(()=>[o(f,{type:"primary"},{icon:a(()=>[o(v(St))]),default:a(()=>[e[32]||(e[32]=c(" 新建 ▼ ",-1))]),_:1})]),_:1})]),_:1})]),o(ct,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:a(()=>[o(K,{xs:12,sm:8,lg:5},{default:a(()=>[o(J,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[o(G,{title:"证明记录",value:w.value.attestations.total,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:a(()=>[o(v(Ne))]),_:1},8,["value"]),A("div",Dt,d(w.value.attestations.valid)+" 个有效",1)]),_:1})]),_:1}),o(K,{xs:12,sm:8,lg:5},{default:a(()=>[o(J,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[o(G,{title:"PQC 测试",value:w.value.interopTests.total,"value-style":{color:"#722ed1",fontSize:"20px"}},{prefix:a(()=>[o(v(Fe))]),_:1},8,["value"]),A("div",Bt,d(w.value.interopTests.compatible)+" 兼容 · 均 "+d(w.value.interopTests.avgLatencyMs)+"ms",1)]),_:1})]),_:1}),o(K,{xs:12,sm:8,lg:5},{default:a(()=>[o(J,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[o(G,{title:"卫星消息",value:w.value.satellite.total,"value-style":{color:"#13c2c2",fontSize:"20px"}},{prefix:a(()=>[o(v(Re))]),_:1},8,["value"]),A("div",Qt,d(w.value.satellite.queued)+" 队列 · "+d(w.value.satellite.confirmed)+" 已确认",1)]),_:1})]),_:1}),o(K,{xs:12,sm:8,lg:5},{default:a(()=>[o(J,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[o(G,{title:"HSM 设备",value:w.value.hsm.total,"value-style":{color:"#faad14",fontSize:"20px"}},{prefix:a(()=>[o(v(ge))]),_:1},8,["value"])]),_:1})]),_:1}),o(K,{xs:24,sm:8,lg:4},{default:a(()=>[o(J,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[o(G,{title:"证明通过率",value:ze.value,suffix:"%",precision:0,"value-style":{color:at(ze.value),fontSize:"20px"}},{prefix:a(()=>[o(v(Ve))]),_:1},8,["value","value-style"])]),_:1})]),_:1})]),_:1}),o(mt,{activeKey:Ce.value,"onUpdate:activeKey":e[9]||(e[9]=t=>Ce.value=t),class:"trust-tabs"},{default:a(()=>[o(ne,{key:"attestations",tab:"信任根 · TPM/TEE"},{default:a(()=>[A("div",Gt,[o(Y,{value:P.value,"onUpdate:value":e[4]||(e[4]=t=>P.value=t),size:"small","button-style":"solid"},{default:a(()=>[o(U,{value:""},{default:a(()=>[...e[38]||(e[38]=[c("全部锚点",-1)])]),_:1}),(r(!0),p(h,null,N(v(be),t=>(r(),_(U,{key:t,value:t},{default:a(()=>[c(d(me(t)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),o(Y,{value:q.value,"onUpdate:value":e[5]||(e[5]=t=>q.value=t),size:"small"},{default:a(()=>[o(U,{value:""},{default:a(()=>[...e[39]||(e[39]=[c("全部状态",-1)])]),_:1}),(r(!0),p(h,null,N(v(Tt),t=>(r(),_(U,{key:t,value:t},{default:a(()=>[c(d(Te(t)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),o(le,{columns:Pe,"data-source":Qe.value,pagination:{pageSize:20,showTotal:t=>`共 ${t} 条`},size:"small",loading:C.value,style:{background:"var(--bg-card)"}},{bodyCell:a(({column:t,record:i})=>[t.key==="id"?(r(),p("span",Jt,d(i.id.slice(0,12)),1)):m("",!0),t.key==="anchor"?(r(),_(j,{key:1,color:Ke(i.anchor),style:{"font-family":"monospace"}},{default:a(()=>[c(d(me(i.anchor)),1)]),_:2},1032,["color"])):m("",!0),t.key==="status"?(r(),_(j,{key:2,color:Ye(i.status)},{default:a(()=>[c(d(Te(i.status)),1)]),_:2},1032,["color"])):m("",!0),t.key==="fingerprint"?(r(),p(h,{key:3},[i.deviceFingerprint?(r(),p("span",Kt,d(ye(i.deviceFingerprint,24)),1)):(r(),p("span",Yt,"—"))],64)):m("",!0),t.key==="response"?(r(),p(h,{key:4},[i.response?(r(),p("span",Wt,d(ye(i.response,24)),1)):(r(),p("span",Xt,"—"))],64)):m("",!0),t.key==="createdAt"?(r(),p("span",Zt,d(v(ke)(i.createdAt)),1)):m("",!0)]),emptyText:a(()=>[A("div",ea,[o(v(Ne),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),c(" "+d(P.value||q.value?"没有符合条件的证明":'暂无证明记录,点"证明请求"运行第一次'),1)])]),_:1},8,["data-source","pagination","loading"])]),_:1}),o(ne,{key:"interop",tab:"PQC 互操作"},{default:a(()=>[o(le,{columns:qe,"data-source":Se.value,pagination:{pageSize:20,showTotal:t=>`共 ${t} 条`},size:"small",loading:C.value,style:{background:"var(--bg-card)"}},{bodyCell:a(({column:t,record:i})=>[t.key==="id"?(r(),p("span",ta,d(i.id.slice(0,12)),1)):m("",!0),t.key==="algorithm"?(r(),_(j,{key:1,color:"purple",style:{"font-family":"monospace"}},{default:a(()=>[c(d(i.algorithm),1)]),_:2},1024)):m("",!0),t.key==="compatible"?(r(),_(j,{key:2,color:i.compatible?"green":"red"},{default:a(()=>[i.compatible?(r(),_(v(Ve),{key:0})):(r(),_(v(At),{key:1})),c(" "+d(i.compatible?"兼容":"不兼容"),1)]),_:2},1032,["color"])):m("",!0),t.key==="result"?(r(),p(h,{key:3},[i.result?(r(),p("span",aa,d(i.result),1)):(r(),p("span",oa,"—"))],64)):m("",!0),t.key==="latencyMs"?(r(),_(j,{key:4,color:tt(i.latencyMs)},{default:a(()=>[c(d(i.latencyMs)+"ms",1)]),_:2},1032,["color"])):m("",!0),t.key==="peer"?(r(),p(h,{key:5},[i.peer?(r(),p("span",la,d(i.peer),1)):(r(),p("span",na,"—"))],64)):m("",!0),t.key==="createdAt"?(r(),p("span",sa,d(v(ke)(i.createdAt)),1)):m("",!0)]),emptyText:a(()=>[A("div",ra,[o(v(Fe),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),e[40]||(e[40]=c(" 暂无 PQC 互操作测试 ",-1))])]),_:1},8,["data-source","pagination","loading"])]),_:1}),o(ne,{key:"satellite",tab:"卫星消息"},{default:a(()=>[A("div",ia,[o(Y,{value:D.value,"onUpdate:value":e[6]||(e[6]=t=>D.value=t),size:"small","button-style":"solid"},{default:a(()=>[o(U,{value:""},{default:a(()=>[...e[41]||(e[41]=[c("全部提供商",-1)])]),_:1}),(r(!0),p(h,null,N(v(He),t=>(r(),_(U,{key:t,value:t},{default:a(()=>[c(d(t),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),o(Y,{value:B.value,"onUpdate:value":e[7]||(e[7]=t=>B.value=t),size:"small"},{default:a(()=>[o(U,{value:""},{default:a(()=>[...e[42]||(e[42]=[c("全部状态",-1)])]),_:1}),(r(!0),p(h,null,N(v(wt),t=>(r(),_(U,{key:t,value:t},{default:a(()=>[c(d(we(t)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),o(le,{columns:De,"data-source":Ge.value,pagination:{pageSize:20,showTotal:t=>`共 ${t} 条`},size:"small",loading:C.value,style:{background:"var(--bg-card)"}},{bodyCell:a(({column:t,record:i})=>[t.key==="id"?(r(),p("span",ua,d(i.id.slice(0,12)),1)):m("",!0),t.key==="provider"?(r(),_(j,{key:1,color:Ze(i.provider),style:{"font-family":"monospace"}},{default:a(()=>[c(d(i.provider),1)]),_:2},1032,["color"])):m("",!0),t.key==="priority"?(r(),_(j,{key:2,color:Xe(i.priority)},{default:a(()=>[c("P"+d(i.priority),1)]),_:2},1032,["color"])):m("",!0),t.key==="status"?(r(),_(j,{key:3,color:We(i.status)},{default:a(()=>[c(d(we(i.status)),1)]),_:2},1032,["color"])):m("",!0),t.key==="payload"?(r(),p("span",da,d(ye(i.payload,60)),1)):m("",!0),t.key==="createdAt"?(r(),p("span",pa,d(v(ke)(i.createdAt)),1)):m("",!0),t.key==="action"?(r(),p(h,{key:6},[i.status==="queued"?(r(),_(f,{key:0,size:"small",type:"link",onClick:ie=>ve(i,"sent")},{default:a(()=>[...e[43]||(e[43]=[c("标记已发送",-1)])]),_:1},8,["onClick"])):m("",!0),i.status==="sent"?(r(),_(f,{key:1,size:"small",type:"link",style:{color:"#52c41a"},onClick:ie=>ve(i,"confirmed")},{default:a(()=>[...e[44]||(e[44]=[c("确认",-1)])]),_:1},8,["onClick"])):m("",!0),["queued","sent"].includes(i.status)?(r(),_(f,{key:2,size:"small",type:"link",danger:"",onClick:ie=>ve(i,"failed")},{default:a(()=>[...e[45]||(e[45]=[c("失败",-1)])]),_:1},8,["onClick"])):m("",!0)],64)):m("",!0)]),emptyText:a(()=>[A("div",ca,[o(v(Re),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),c(" "+d(D.value||B.value?"没有符合条件的消息":"暂无卫星消息"),1)])]),_:1},8,["data-source","pagination","loading"])]),_:1}),o(ne,{key:"hsm",tab:"HSM 设备"},{default:a(()=>[A("div",fa,[o(Y,{value:Q.value,"onUpdate:value":e[8]||(e[8]=t=>Q.value=t),size:"small","button-style":"solid"},{default:a(()=>[o(U,{value:""},{default:a(()=>[...e[46]||(e[46]=[c("全部厂商",-1)])]),_:1}),(r(!0),p(h,null,N(v(xe),t=>(r(),_(U,{key:t,value:t},{default:a(()=>[c(d(t),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),o(le,{columns:Be,"data-source":Je.value,pagination:{pageSize:20,showTotal:t=>`共 ${t} 个设备`},size:"small",loading:C.value,style:{background:"var(--bg-card)"}},{bodyCell:a(({column:t,record:i})=>[t.key==="id"?(r(),p("span",ma,d(i.id.slice(0,12)),1)):m("",!0),t.key==="vendor"?(r(),_(j,{key:1,color:Me(i.vendor),style:{"font-family":"monospace"}},{default:a(()=>[c(d(i.vendor),1)]),_:2},1032,["color"])):m("",!0),t.key==="model"?(r(),p(h,{key:2},[i.model?(r(),p("span",ya,d(i.model),1)):(r(),p("span",va,"—"))],64)):m("",!0),t.key==="serialNumber"?(r(),p(h,{key:3},[i.serialNumber?(r(),p("span",_a,d(i.serialNumber),1)):(r(),p("span",ga,"—"))],64)):m("",!0),t.key==="complianceLevel"?(r(),p(h,{key:4},[i.complianceLevel?(r(),_(j,{key:0,color:et(i.complianceLevel),style:{"font-family":"monospace","font-size":"11px"}},{default:a(()=>[c(d(i.complianceLevel),1)]),_:2},1032,["color"])):(r(),p("span",ka,"—"))],64)):m("",!0),t.key==="firmwareVersion"?(r(),p(h,{key:5},[i.firmwareVersion?(r(),p("span",ba,d(i.firmwareVersion),1)):(r(),p("span",xa,"—"))],64)):m("",!0),t.key==="action"?(r(),p(h,{key:6},[o(f,{size:"small",type:"link",onClick:ie=>it(i)},{default:a(()=>[...e[47]||(e[47]=[c("签名",-1)])]),_:1},8,["onClick"]),o(ft,{title:"移除该 HSM 设备?","ok-text":"移除","ok-type":"danger","cancel-text":"取消",onConfirm:ie=>rt(i)},{default:a(()=>[o(f,{size:"small",type:"link",danger:""},{default:a(()=>[...e[48]||(e[48]=[c("移除",-1)])]),_:1})]),_:1},8,["onConfirm"])],64)):m("",!0)]),emptyText:a(()=>[A("div",ha,[o(v(ge),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),c(" "+d(Q.value?"没有符合条件的设备":"暂无 HSM 设备"),1)])]),_:1},8,["data-source","pagination","loading"])]),_:1})]),_:1},8,["activeKey"]),o(X,{open:ee.value,"onUpdate:open":e[13]||(e[13]=t=>ee.value=t),title:"证明请求","confirm-loading":x.value,width:540,"ok-text":"提交","cancel-text":"取消",onOk:ot,onCancel:je},{default:a(()=>[o(W,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:a(()=>[o(S,{label:"信任锚点",required:""},{default:a(()=>[o(re,{value:T.anchor,"onUpdate:value":e[10]||(e[10]=t=>T.anchor=t)},{default:a(()=>[(r(!0),p(h,null,N(v(be),t=>(r(),_(se,{key:t,value:t},{default:a(()=>[c(d(me(t))+" ("+d(t)+")",1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1}),o(S,{label:"挑战值"},{default:a(()=>[o(H,{value:T.challenge,"onUpdate:value":e[11]||(e[11]=t=>T.challenge=t),placeholder:"可选 hex challenge"},null,8,["value"])]),_:1}),o(S,{label:"设备指纹"},{default:a(()=>[o(H,{value:T.fingerprint,"onUpdate:value":e[12]||(e[12]=t=>T.fingerprint=t),placeholder:"可选 device fingerprint"},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"]),o(X,{open:te.value,"onUpdate:open":e[17]||(e[17]=t=>te.value=t),title:"PQC 互操作测试","confirm-loading":x.value,width:540,"ok-text":"运行","cancel-text":"取消",onOk:lt,onCancel:$e},{default:a(()=>[o(W,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:a(()=>[o(S,{label:"算法",required:""},{default:a(()=>[o(H,{value:z.algorithm,"onUpdate:value":e[14]||(e[14]=t=>z.algorithm=t),placeholder:"例如 ml_kem_768 / ml_dsa_65 / slh_dsa_128s"},null,8,["value"])]),_:1}),o(S,{label:"对端"},{default:a(()=>[o(H,{value:z.peer,"onUpdate:value":e[15]||(e[15]=t=>z.peer=t),placeholder:"可选 peer ID"},null,8,["value"])]),_:1}),o(S,{label:"延迟 ms"},{default:a(()=>[o(Ue,{value:z.latency,"onUpdate:value":e[16]||(e[16]=t=>z.latency=t),min:0,style:{width:"160px"}},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"]),o(X,{open:ae.value,"onUpdate:open":e[21]||(e[21]=t=>ae.value=t),title:"发送卫星消息","confirm-loading":x.value,width:540,"ok-text":"发送","cancel-text":"取消",onOk:nt,onCancel:Ie},{default:a(()=>[o(W,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:a(()=>[o(S,{label:"提供商",required:""},{default:a(()=>[o(re,{value:M.provider,"onUpdate:value":e[18]||(e[18]=t=>M.provider=t)},{default:a(()=>[(r(!0),p(h,null,N(v(He),t=>(r(),_(se,{key:t,value:t},{default:a(()=>[c(d(t),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1}),o(S,{label:"优先级"},{default:a(()=>[o(Ue,{value:M.priority,"onUpdate:value":e[19]||(e[19]=t=>M.priority=t),min:1,max:10,style:{width:"120px"}},null,8,["value"]),e[49]||(e[49]=A("span",{style:{"margin-left":"8px",color:"var(--text-muted)","font-size":"12px"}},"1-10,默认 5",-1))]),_:1}),o(S,{label:"负载",required:""},{default:a(()=>[o(Le,{value:M.payload,"onUpdate:value":e[20]||(e[20]=t=>M.payload=t),placeholder:"消息内容(建议简短,卫星带宽受限)","auto-size":{minRows:2,maxRows:5}},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"]),o(X,{open:oe.value,"onUpdate:open":e[27]||(e[27]=t=>oe.value=t),title:"注册 HSM 设备","confirm-loading":x.value,width:560,"ok-text":"注册","cancel-text":"取消",onOk:st,onCancel:Ee},{default:a(()=>[o(W,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:a(()=>[o(S,{label:"厂商",required:""},{default:a(()=>[o(re,{value:g.vendor,"onUpdate:value":e[22]||(e[22]=t=>g.vendor=t)},{default:a(()=>[(r(!0),p(h,null,N(v(xe),t=>(r(),_(se,{key:t,value:t},{default:a(()=>[c(d(t),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1}),o(S,{label:"型号"},{default:a(()=>[o(H,{value:g.model,"onUpdate:value":e[23]||(e[23]=t=>g.model=t),placeholder:"例如 YK5 / Nano X"},null,8,["value"])]),_:1}),o(S,{label:"序列号"},{default:a(()=>[o(H,{value:g.serial,"onUpdate:value":e[24]||(e[24]=t=>g.serial=t),placeholder:"设备序列号"},null,8,["value"])]),_:1}),o(S,{label:"合规等级"},{default:a(()=>[o(re,{value:g.compliance,"onUpdate:value":e[25]||(e[25]=t=>g.compliance=t),"allow-clear":""},{default:a(()=>[(r(!0),p(h,null,N(v(Mt),t=>(r(),_(se,{key:t,value:t},{default:a(()=>[c(d(t),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1}),o(S,{label:"固件版本"},{default:a(()=>[o(H,{value:g.firmware,"onUpdate:value":e[26]||(e[26]=t=>g.firmware=t),placeholder:"可选"},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"]),o(X,{open:fe.value,"onUpdate:open":e[30]||(e[30]=t=>fe.value=t),title:`HSM 签名:${R.value?.id?.slice(0,12)||""}`,width:640,footer:null},{default:a(()=>[R.value?(r(),p("div",Sa,[o(W,{"label-col":{span:5},"wrapper-col":{span:19}},{default:a(()=>[o(S,{label:"设备"},{default:a(()=>[o(j,{color:Me(R.value.vendor),style:{"font-family":"monospace"}},{default:a(()=>[c(d(R.value.vendor),1)]),_:1},8,["color"]),A("span",Aa,d(R.value.model||"—"),1)]),_:1}),o(S,{label:"算法"},{default:a(()=>[o(H,{value:I.algorithm,"onUpdate:value":e[28]||(e[28]=t=>I.algorithm=t),placeholder:"可选,例如 ed25519 / ecdsa_p256"},null,8,["value"])]),_:1}),o(S,{label:"数据",required:""},{default:a(()=>[o(Le,{value:I.data,"onUpdate:value":e[29]||(e[29]=t=>I.data=t),placeholder:"待签名的数据","auto-size":{minRows:3,maxRows:8}},null,8,["value"])]),_:1}),o(S,{"wrapper-col":{offset:5,span:19}},{default:a(()=>[o(f,{type:"primary",loading:pe.value,onClick:ut},{icon:a(()=>[o(v(ge))]),default:a(()=>[e[50]||(e[50]=c(" 签名 ",-1))]),_:1},8,["loading"])]),_:1})]),_:1}),o(yt),L.value?(r(),p("div",Ca,[o(_t,{column:1,size:"small",bordered:""},{default:a(()=>[o(Oe,{label:"算法"},{default:a(()=>[o(j,{color:"purple",style:{"font-family":"monospace"}},{default:a(()=>[c(d(L.value.algorithm),1)]),_:1})]),_:1}),o(Oe,{label:"签名"},{default:a(()=>[A("pre",za,d(L.value.signature),1)]),_:1})]),_:1}),L.value.reason?(r(),_(gt,{key:0,type:"warning","show-icon":"",message:`签名失败: ${L.value.reason}`,style:{"margin-top":"12px"}},null,8,["message"])):m("",!0)])):(r(),_(vt,{key:0,description:"尚未签名",image:v(u)},null,8,["image"]))])):m("",!0)]),_:1},8,["open","title"])])}}},Va=xt(Ta,[["__scopeId","data-v-e1f48fb0"]]);export{Va as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{u as Z}from"./ws-Bv7YH0VB.js";import{_ as tt}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{
|
|
1
|
+
import{u as Z}from"./ws-Bv7YH0VB.js";import{_ as tt}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{Y as et}from"./icons-ukMaZ3tx.js";import{a as A}from"./index-BfKFNptm.js";import{l as at,F as d,D as r,c as a,x as s,r as m,q as c,v as i,J as _,u as ot,m as S,H as U,L as V,E as nt,I as p,G as x,N as st,a as lt,n as it}from"./vendor-BVetwVfk.js";import"./index-DfcXDy2A.js";import"./useConfigInject-DCcT0grw.js";import"./transition-DSe9CgZe.js";import"./Keyframes-C7fCrnlS.js";import"./Portal-CHsntPCQ.js";import"./index-U4Zd5IK6.js";const rt={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},ut={key:1,style:{color:"var(--text-muted)","text-align":"center",padding:"20px"}},dt={key:2},ct=["onClick"],pt={style:{"font-weight":"500","font-family":"monospace","font-size":"12px"}},vt={style:{color:"var(--text-muted)","font-size":"11px","word-break":"break-all"}},ft={style:{color:"var(--text-muted)","font-size":"11px"}},mt={style:{display:"flex",gap:"8px","margin-top":"12px"}},_t={key:0,style:{color:"var(--text-muted)","text-align":"center",padding:"20px"}},ht={key:1},gt={style:{display:"flex","align-items":"center",gap:"8px","margin-bottom":"4px"}},yt={style:{"font-weight":"500"}},bt={key:0,style:{color:"var(--text-muted)","font-size":"12px"}},xt={key:1,style:{color:"var(--text-muted)","font-size":"11px"}},kt={class:"timeline-container"},Pt=["title"],wt={class:"timeline-label"},Ct={style:{color:"var(--text-muted)","font-size":"11px","margin-top":"4px"}},zt={class:"event-type"},St={class:"event-detail"},Rt={style:{"text-align":"center"}},$t={style:{color:"var(--text-muted)","margin-bottom":"8px"}},Dt={__name:"VideoEditing",setup(Ut){const k=Z(),R=m([]),E=m(!1),P=m(null),v=m(!1),$=m([]),w=m([]),h=m(null),C=m(null),D=m(null);let L=null;const n=lt({videoPath:"",audioPath:"",existingSrt:"",instruction:"",fps:2,mainCharacter:"",outputPath:"./output.mp4"});at(()=>{M()});async function M(){E.value=!0;try{await k.waitConnected();const o=await k.sendRaw({type:"video.assets.list"});R.value=o.assets||[]}catch{R.value=[]}finally{E.value=!1}}function N(o,t){$.value=[],w.value=[],h.value=null,C.value=null,v.value=!0;const u=`video-${Date.now()}`;L=u;const y=k.onMessage(l=>{l.id===u&&(l.type==="stream.event"&&l.event&&F(l.event),l.type===`${o}.end`&&(v.value=!1,y(),l.ok?(l.shotPlan&&(h.value=l.shotPlan),l.outputPath&&(C.value=l.outputPath),l.assetDir&&M(),A.success("完成")):A.error(l.error?.message||"失败")))});k.sendRaw({type:o,id:u,...t}).catch(()=>{v.value=!1,y()})}function F(o){if($.value.push(o),o.type==="phase.start")w.value.push({phase:o.phase,pct:0,message:"",done:!1});else if(o.type==="phase.progress"){const t=w.value.find(u=>u.phase===o.phase);t&&(t.pct=o.pct,t.message=o.message||"")}else if(o.type==="phase.end"){const t=w.value.find(u=>u.phase===o.phase);t&&(t.pct=1,t.done=!0)}it(()=>{D.value&&(D.value.scrollTop=D.value.scrollHeight)})}function T(){N("video.edit",{videoPath:n.videoPath,audioPath:n.audioPath||void 0,instruction:n.instruction,outputPath:n.outputPath,existingSrt:n.existingSrt||void 0,fps:n.fps,mainCharacter:n.mainCharacter||void 0})}function I(){N("video.deconstruct",{videoPath:n.videoPath,audioPath:n.audioPath||void 0,existingSrt:n.existingSrt||void 0,fps:n.fps})}function q(){P.value&&N("video.plan",{assetDir:P.value.hash,instruction:n.instruction,mainCharacter:n.mainCharacter||void 0})}function H(){L&&k.sendRaw({type:"cancel",id:L}).catch(()=>{}),v.value=!1}function J(o){return o.done?"success":o.pct>0?"processing":"default"}function W(o){const t=(h.value?.sections||[]).reduce((y,l)=>y+(l.music_segment?.end||0)-(l.music_segment?.start||0),0),u=((o.music_segment?.end||0)-(o.music_segment?.start||0))/(t||1)*100;return Math.max(u,2)}function j(o){return o.phase?o.message||o.phase:o.tool?`${o.agent}.${o.tool}`:o.reason?o.reason:""}function G(o){navigator.clipboard?.writeText(o),A.success("已复制")}return(o,t)=>{const u=c("a-button"),y=c("a-spin"),l=c("a-card"),b=c("a-col"),z=c("a-input"),g=c("a-form-item"),O=c("a-textarea"),Y=c("a-input-number"),B=c("a-row"),K=c("a-form"),Q=c("a-badge"),X=c("a-progress");return i(),d("div",null,[r("div",rt,[t[9]||(t[9]=r("div",null,[r("h2",{class:"page-title"},"视频剪辑"),r("p",{class:"page-sub"},"长视频素材 + 音乐 → 节奏化蒙太奇(CutClaw 风格)")],-1)),a(u,{type:"primary",ghost:"",onClick:M},{icon:s(()=>[a(ot(et))]),default:s(()=>[t[8]||(t[8]=_(" 刷新资产 ",-1))]),_:1})]),a(B,{gutter:16},{default:s(()=>[a(b,{span:6},{default:s(()=>[a(l,{title:"素材库",size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:s(()=>[E.value?(i(),S(y,{key:0})):R.value.length===0?(i(),d("div",ut,[...t[10]||(t[10]=[_(" 暂无已解构素材",-1),r("br",null,null,-1),_("请先执行解构 ",-1)])])):(i(),d("div",dt,[(i(!0),d(U,null,V(R.value,e=>(i(),d("div",{key:e.hash,class:nt(["asset-item",{active:P.value?.hash===e.hash}]),onClick:f=>P.value=e},[r("div",pt,p(e.hash),1),r("div",vt,p(e.videoPath),1),r("div",ft,p(e.modifiedAt?.slice(0,10)),1)],10,ct))),128))]))]),_:1})]),_:1}),a(b,{span:10},{default:s(()=>[a(l,{title:"编辑工作台",size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:s(()=>[a(K,{layout:"vertical",style:{"max-width":"100%"}},{default:s(()=>[a(g,{label:"视频文件"},{default:s(()=>[a(z,{value:n.videoPath,"onUpdate:value":t[0]||(t[0]=e=>n.videoPath=e),placeholder:"/path/to/video.mp4"},null,8,["value"])]),_:1}),a(g,{label:"音乐文件"},{default:s(()=>[a(z,{value:n.audioPath,"onUpdate:value":t[1]||(t[1]=e=>n.audioPath=e),placeholder:"/path/to/bgm.mp3(可选)"},null,8,["value"])]),_:1}),a(g,{label:"字幕文件"},{default:s(()=>[a(z,{value:n.existingSrt,"onUpdate:value":t[2]||(t[2]=e=>n.existingSrt=e),placeholder:"/path/to/subtitle.srt(可选,跳过 ASR)"},null,8,["value"])]),_:1}),a(g,{label:"剪辑指令"},{default:s(()=>[a(O,{value:n.instruction,"onUpdate:value":t[3]||(t[3]=e=>n.instruction=e),rows:3,placeholder:"节奏感强的角色蒙太奇..."},null,8,["value"])]),_:1}),a(B,{gutter:12},{default:s(()=>[a(b,{span:8},{default:s(()=>[a(g,{label:"采样 FPS"},{default:s(()=>[a(Y,{value:n.fps,"onUpdate:value":t[4]||(t[4]=e=>n.fps=e),min:1,max:30,style:{width:"100%"}},null,8,["value"])]),_:1})]),_:1}),a(b,{span:8},{default:s(()=>[a(g,{label:"主角名"},{default:s(()=>[a(z,{value:n.mainCharacter,"onUpdate:value":t[5]||(t[5]=e=>n.mainCharacter=e),placeholder:"Joker"},null,8,["value"])]),_:1})]),_:1}),a(b,{span:8},{default:s(()=>[a(g,{label:"输出路径"},{default:s(()=>[a(z,{value:n.outputPath,"onUpdate:value":t[6]||(t[6]=e=>n.outputPath=e),placeholder:"./output.mp4"},null,8,["value"])]),_:1})]),_:1})]),_:1})]),_:1}),r("div",mt,[a(u,{type:"primary",loading:v.value,disabled:!n.videoPath,onClick:T},{default:s(()=>[...t[11]||(t[11]=[_(" 一键剪辑 ",-1)])]),_:1},8,["loading","disabled"]),a(u,{loading:v.value,disabled:!n.videoPath,onClick:I},{default:s(()=>[...t[12]||(t[12]=[_(" 仅解构 ",-1)])]),_:1},8,["loading","disabled"]),a(u,{loading:v.value,disabled:!P.value,onClick:q},{default:s(()=>[...t[13]||(t[13]=[_(" 生成计划 ",-1)])]),_:1},8,["loading","disabled"]),v.value?(i(),S(u,{key:0,danger:"",onClick:H},{default:s(()=>[...t[14]||(t[14]=[_(" 取消 ",-1)])]),_:1})):x("",!0)])]),_:1})]),_:1}),a(b,{span:8},{default:s(()=>[a(l,{title:"进度",size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"}},{default:s(()=>[!v.value&&$.value.length===0?(i(),d("div",_t," 等待开始... ")):(i(),d("div",ht,[(i(!0),d(U,null,V(w.value,(e,f)=>(i(),d("div",{key:f,style:{"margin-bottom":"12px"}},[r("div",gt,[a(Q,{status:J(e)},null,8,["status"]),r("span",yt,p(e.phase),1),e.pct!=null?(i(),d("span",bt,p(Math.round(e.pct*100))+"% ",1)):x("",!0)]),e.pct!=null?(i(),S(X,{key:0,percent:Math.round(e.pct*100),"show-info":!1,size:"small",status:e.done?"success":"active"},null,8,["percent","status"])):x("",!0),e.message?(i(),d("div",xt,p(e.message),1)):x("",!0)]))),128))]))]),_:1}),h.value?(i(),S(l,{key:0,title:"分镜时间轴",size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"}},{default:s(()=>[r("div",kt,[(i(!0),d(U,null,V(h.value.sections||[],(e,f)=>(i(),d("div",{key:f,class:"timeline-section",style:st({width:W(e)+"%"}),title:`Section ${e.section_idx}: ${e.shots?.length||0} shots`},[r("div",wt,p(e.music_segment?.label||f),1)],12,Pt))),128))]),r("div",Ct,p((h.value.sections||[]).length)+" 段 / "+p((h.value.sections||[]).reduce((e,f)=>e+(f.shots?.length||0),0))+" 镜头 ",1)]),_:1})):x("",!0),a(l,{title:"事件日志",size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:s(()=>[r("div",{class:"event-log",ref_key:"eventLogRef",ref:D},[(i(!0),d(U,null,V($.value.slice(-50),(e,f)=>(i(),d("div",{key:f,class:"event-item"},[r("span",zt,p(e.type),1),r("span",St,p(j(e)),1)]))),128))],512)]),_:1}),C.value?(i(),S(l,{key:1,title:"成片预览",size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-top":"16px"}},{default:s(()=>[r("div",Rt,[r("div",$t,p(C.value),1),a(u,{type:"primary",ghost:"",size:"small",onClick:t[7]||(t[7]=e=>G(C.value))},{default:s(()=>[...t[15]||(t[15]=[_("复制路径",-1)])]),_:1})])]),_:1})):x("",!0)]),_:1})]),_:1})])}}},Ht=tt(Dt,[["__scopeId","data-v-301515b7"]]);export{Ht as default};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{u as De}from"./ws-Bv7YH0VB.js";import{_ as Te}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{a as v}from"./index-
|
|
2
|
-
`);for(const i of a){const n=i.trim();if(!n||n.startsWith("─")||n.match(/^\d+ wallet/i))continue;const d=n.match(/(0x[a-fA-F0-9]{8,})/);if(d){const V=/default|默认|\*/.test(n),U=n.match(/name[:\s]+(\S+)/i);e.push({key:d[1],address:d[1],name:U?U[1]:"-",isDefault:V,balance:"-"})}}return e}async function me(){if(!S.value.trim()){v.warning("请输入钱包名称");return}G.value=!0;try{const{output:l}=await A.execute(`wallet create --name "${S.value.trim()}" --json`,2e4);l.includes("error")||l.includes("失败")?v.error("创建失败: "+l.slice(0,120)):(v.success("钱包已创建"),
|
|
3
|
-
`);for(const i of a){const n=i.trim();if(!n||n.startsWith("─")||n.match(/^\d+ asset/i))continue;const d=n.split(/\s*[|│]\s*/);d.length>=2&&e.push({key:e.length,name:d[0]||"-",type:d[1]||"-",description:d[2]||"",address:d[3]||"-"})}return e}async function ke(){if(!g.name.trim()){v.warning("请输入资产名称");return}
|
|
4
|
-
`);for(const i of a){const n=i.trim();if(!n||n.startsWith("─")||n.match(/^\d+ transaction/i))continue;const d=n.split(/\s*[|│]\s*/);d.length>=3&&e.push({key:e.length,time:d[0]||"-",type:d[1]||"-",amount:d[2]||"-",to:d[3]||"-"})}return e}return Se(()=>{W()}),(l,e)=>{const a=u("a-button"),i=u("a-statistic"),n=u("a-card"),d=u("a-col"),V=u("a-row"),U=u("a-space"),
|
|
1
|
+
import{u as De}from"./ws-Bv7YH0VB.js";import{_ as Te}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{a as v}from"./index-BfKFNptm.js";import{Y as K,v as P,s as $e,ac as re,a5 as ie}from"./icons-ukMaZ3tx.js";import{l as Se,F as _,D as x,c as t,x as s,r as f,q as u,v as r,J as m,u as b,m as C,I as y,G as k,H as We,j as Ue,a as de}from"./vendor-BVetwVfk.js";import"./index-DfcXDy2A.js";import"./useConfigInject-DCcT0grw.js";import"./transition-DSe9CgZe.js";import"./Keyframes-C7fCrnlS.js";import"./Portal-CHsntPCQ.js";import"./index-U4Zd5IK6.js";const Oe={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},je={key:0,style:{"text-align":"center",padding:"60px"}},qe={key:0,style:{color:"#e0e0e0","font-family":"monospace","font-size":"12px"}},Ne={key:1,style:{color:"var(--text-primary)"}},Fe={key:3,style:{color:"#52c41a","font-family":"monospace"}},Le={key:1,style:{color:"var(--text-muted)","font-size":"12px"}},Me={key:0,style:{"text-align":"center",padding:"60px"}},Be={key:0,style:{color:"#e0e0e0"}},He={key:2,style:{color:"var(--text-secondary)","font-size":"12px"}},Ve={key:3,style:{color:"var(--text-muted)","font-family":"monospace","font-size":"12px"}},Je={key:0,style:{"margin-top":"8px"}},Ke={style:{"white-space":"pre-wrap","word-break":"break-all",color:"var(--text-secondary)","font-size":"11px","margin-top":"8px",background:"var(--bg-base)",padding:"10px","border-radius":"6px",border:"1px solid var(--border-color)"}},Pe={key:0,style:{"text-align":"center",padding:"30px"}},Re={key:0,style:{color:"var(--text-secondary)","font-size":"12px","font-family":"monospace"}},Ee={key:2,style:{color:"#e0e0e0","font-family":"monospace"}},Ge={key:3,style:{color:"var(--text-muted)","font-family":"monospace","font-size":"11px"}},Ye={style:{"margin-top":"16px"}},Qe={style:{"font-family":"monospace",color:"#ccc"}},Xe={style:{"font-family":"monospace",color:"#ccc"}},Ze={style:{"font-family":"monospace",color:"#52c41a"}},et={__name:"Wallet",setup(tt){const A=De(),$=f("wallets"),R=f(!1);function E(l){try{return JSON.parse(l)}catch{return null}}async function ue(){R.value=!0;try{$.value==="wallets"?await W():$.value==="assets"?await L():$.value==="transfer"&&await H()}finally{R.value=!1}}function pe(l){l==="assets"&&I.value.length===0&&L(),l==="transfer"&&T.value.length===0&&H()}const j=f(!1),G=f(!1),Y=f(""),z=f([]),q=f(!1),S=f(""),ce=[{title:"地址",key:"address",dataIndex:"address",ellipsis:!0},{title:"名称",key:"name",dataIndex:"name",width:"150px"},{title:"默认",key:"isDefault",width:"80px"},{title:"余额",key:"balance",dataIndex:"balance",width:"120px"},{title:"操作",key:"action",width:"100px"}],ne=Ue(()=>{const l=z.value.find(a=>a.isDefault);if(!l||!l.address)return"未设置";const e=l.address;return e.length>16?e.slice(0,8)+"..."+e.slice(-6):e});async function W(){j.value=!0;try{const{output:l}=await A.execute("wallet list --json",15e3),e=E(l);e&&Array.isArray(e)?z.value=e.map((a,i)=>({key:a.address||a.id||i,address:a.address||a.id||"-",name:a.name||a.label||"-",isDefault:a.isDefault||a.default||!1,balance:a.balance??"-"})):e&&e.wallets&&Array.isArray(e.wallets)?z.value=e.wallets.map((a,i)=>({key:a.address||a.id||i,address:a.address||a.id||"-",name:a.name||a.label||"-",isDefault:a.isDefault||a.default||!1,balance:a.balance??"-"})):z.value=fe(l)}catch(l){v.error("加载钱包列表失败: "+l.message)}finally{j.value=!1}}function fe(l){const e=[],a=l.split(`
|
|
2
|
+
`);for(const i of a){const n=i.trim();if(!n||n.startsWith("─")||n.match(/^\d+ wallet/i))continue;const d=n.match(/(0x[a-fA-F0-9]{8,})/);if(d){const V=/default|默认|\*/.test(n),U=n.match(/name[:\s]+(\S+)/i);e.push({key:d[1],address:d[1],name:U?U[1]:"-",isDefault:V,balance:"-"})}}return e}async function me(){if(!S.value.trim()){v.warning("请输入钱包名称");return}G.value=!0;try{const{output:l}=await A.execute(`wallet create --name "${S.value.trim()}" --json`,2e4);l.includes("error")||l.includes("失败")?v.error("创建失败: "+l.slice(0,120)):(v.success("钱包已创建"),q.value=!1,S.value="",await W())}catch(l){v.error("创建失败: "+l.message)}finally{G.value=!1}}async function ye(l){Y.value=l;try{const{output:e}=await A.execute(`wallet set-default ${l}`,15e3);e.includes("error")||e.includes("失败")?v.error("设置失败: "+e.slice(0,120)):(v.success("已设为默认钱包"),await W())}catch(e){v.error("设置失败: "+e.message)}finally{Y.value=""}}const N=f(!1),Q=f(!1),I=f([]),F=f(!1),g=de({name:"",type:"token",description:""}),ve=[{title:"名称",key:"name",dataIndex:"name",width:"180px"},{title:"类型",key:"type",dataIndex:"type",width:"100px"},{title:"描述",key:"description",dataIndex:"description",ellipsis:!0},{title:"地址",key:"address",dataIndex:"address",ellipsis:!0}];function _e(l){return{token:"blue",nft:"purple",data:"cyan"}[(l||"").toLowerCase()]||"default"}async function L(){N.value=!0;try{const{output:l}=await A.execute("wallet assets --json",15e3),e=E(l);e&&Array.isArray(e)?I.value=e.map((a,i)=>({key:a.id||a.address||i,name:a.name||"-",type:a.type||"-",description:a.description||"",address:a.address||a.id||"-"})):e&&e.assets&&Array.isArray(e.assets)?I.value=e.assets.map((a,i)=>({key:a.id||a.address||i,name:a.name||"-",type:a.type||"-",description:a.description||"",address:a.address||a.id||"-"})):I.value=ge(l)}catch(l){v.error("加载资产列表失败: "+l.message)}finally{N.value=!1}}function ge(l){const e=[],a=l.split(`
|
|
3
|
+
`);for(const i of a){const n=i.trim();if(!n||n.startsWith("─")||n.match(/^\d+ asset/i))continue;const d=n.split(/\s*[|│]\s*/);d.length>=2&&e.push({key:e.length,name:d[0]||"-",type:d[1]||"-",description:d[2]||"",address:d[3]||"-"})}return e}async function ke(){if(!g.name.trim()){v.warning("请输入资产名称");return}Q.value=!0;try{let l=`wallet asset "${g.name.trim()}" --type ${g.type}`;g.description.trim()&&(l+=` --description "${g.description.trim().replace(/"/g,'\\"')}"`),l+=" --json";const{output:e}=await A.execute(l,2e4);e.includes("error")||e.includes("失败")?v.error("注册失败: "+e.slice(0,120)):(v.success("资产已注册"),F.value=!1,g.name="",g.type="token",g.description="",await L())}catch(l){v.error("注册失败: "+l.message)}finally{Q.value=!1}}const M=f(!1),B=f(!1),D=f(!1),w=f(null),T=f([]),c=de({assetId:"",toAddress:"",amount:null}),be=[{title:"时间",key:"time",dataIndex:"time",width:"150px"},{title:"类型",key:"type",dataIndex:"type",width:"80px"},{title:"数量",key:"amount",dataIndex:"amount",width:"100px"},{title:"目标",key:"to",dataIndex:"to",ellipsis:!0}];function xe(){if(!c.assetId.trim()||!c.toAddress.trim()||!c.amount){v.warning("请填写完整的转账信息");return}D.value=!0}async function we(){M.value=!0,w.value=null;try{const l=`wallet transfer ${c.assetId.trim()} ${c.toAddress.trim()} --amount ${c.amount}`,{output:e,exitCode:a}=await A.execute(l,3e4);w.value={success:a===0&&!e.includes("error")&&!e.includes("失败"),output:e||"转账已提交"},w.value.success?(v.success("转账成功"),D.value=!1,await H()):D.value=!1}catch(l){w.value={success:!1,output:"转账失败: "+l.message},D.value=!1}finally{M.value=!1}}async function H(){B.value=!0;try{const{output:l}=await A.execute("wallet history --limit 20 --json",15e3),e=E(l);e&&Array.isArray(e)?T.value=e.map((a,i)=>({key:a.id||a.hash||i,time:a.time||a.timestamp||a.createdAt||"-",type:a.type||a.direction||"-",amount:a.amount??"-",to:a.to||a.recipient||"-"})):e&&e.history&&Array.isArray(e.history)?T.value=e.history.map((a,i)=>({key:a.id||a.hash||i,time:a.time||a.timestamp||a.createdAt||"-",type:a.type||a.direction||"-",amount:a.amount??"-",to:a.to||a.recipient||"-"})):T.value=he(l)}catch(l){v.error("加载交易历史失败: "+l.message)}finally{B.value=!1}}function he(l){const e=[],a=l.split(`
|
|
4
|
+
`);for(const i of a){const n=i.trim();if(!n||n.startsWith("─")||n.match(/^\d+ transaction/i))continue;const d=n.split(/\s*[|│]\s*/);d.length>=3&&e.push({key:e.length,time:d[0]||"-",type:d[1]||"-",amount:d[2]||"-",to:d[3]||"-"})}return e}return Se(()=>{W()}),(l,e)=>{const a=u("a-button"),i=u("a-statistic"),n=u("a-card"),d=u("a-col"),V=u("a-row"),U=u("a-space"),X=u("a-spin"),J=u("a-tag"),Z=u("a-empty"),ee=u("a-table"),O=u("a-input"),h=u("a-form-item"),te=u("a-form"),ae=u("a-modal"),se=u("a-tab-pane"),le=u("a-select-option"),Ae=u("a-select"),Ce=u("a-input-number"),oe=u("a-descriptions-item"),ze=u("a-descriptions"),Ie=u("a-tabs");return r(),_("div",null,[x("div",Oe,[e[14]||(e[14]=x("div",null,[x("h2",{class:"page-title"},"钱包管理"),x("p",{class:"page-sub"},"资产 / 转账 / 历史")],-1)),t(a,{type:"primary",ghost:"",loading:R.value,onClick:ue},{icon:s(()=>[t(b(K))]),default:s(()=>[e[13]||(e[13]=m(" 刷新 ",-1))]),_:1},8,["loading"])]),t(V,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:s(()=>[t(d,{xs:24,sm:12,lg:6},{default:s(()=>[t(n,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:s(()=>[t(i,{title:"钱包数量",value:z.value.length,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:s(()=>[t(b(P))]),_:1},8,["value"])]),_:1})]),_:1}),t(d,{xs:24,sm:12,lg:6},{default:s(()=>[t(n,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:s(()=>[t(i,{title:"总资产数",value:I.value.length,"value-style":{color:"#52c41a",fontSize:"20px"}},null,8,["value"])]),_:1})]),_:1}),t(d,{xs:24,sm:12,lg:6},{default:s(()=>[t(n,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:s(()=>[t(i,{title:"默认钱包",value:ne.value,"value-style":{color:ne.value!=="未设置"?"#faad14":"#888",fontSize:"14px",fontFamily:"monospace"}},{prefix:s(()=>[t(b(P))]),_:1},8,["value","value-style"])]),_:1})]),_:1}),t(d,{xs:24,sm:12,lg:6},{default:s(()=>[t(n,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:s(()=>[t(i,{title:"总交易数",value:T.value.length,"value-style":{color:"#ff4d4f",fontSize:"20px"}},{prefix:s(()=>[t(b($e))]),_:1},8,["value"])]),_:1})]),_:1})]),_:1}),t(Ie,{activeKey:$.value,"onUpdate:activeKey":e[12]||(e[12]=o=>$.value=o),type:"card",onChange:pe},{default:s(()=>[t(se,{key:"wallets"},{tab:s(()=>[t(b(P)),e[15]||(e[15]=m(" 钱包列表 ",-1))]),default:s(()=>[t(U,{style:{"margin-bottom":"16px"}},{default:s(()=>[t(a,{type:"primary",loading:j.value,onClick:W},{icon:s(()=>[t(b(K))]),default:s(()=>[e[16]||(e[16]=m(" 刷新列表 ",-1))]),_:1},8,["loading"]),t(a,{onClick:e[0]||(e[0]=o=>q.value=!0)},{icon:s(()=>[t(b(re))]),default:s(()=>[e[17]||(e[17]=m(" 创建钱包 ",-1))]),_:1})]),_:1}),j.value?(r(),_("div",je,[t(X,{size:"large"})])):(r(),C(ee,{key:1,columns:ce,"data-source":z.value,pagination:{pageSize:20,showTotal:o=>`共 ${o} 条`},size:"small",style:{background:"var(--bg-card)"},"row-class-name":()=>"wallet-row"},{bodyCell:s(({column:o,record:p})=>[o.key==="address"?(r(),_("span",qe,y(p.address),1)):k("",!0),o.key==="name"?(r(),_("span",Ne,y(p.name||"-"),1)):k("",!0),o.key==="isDefault"?(r(),C(J,{key:2,color:p.isDefault?"green":"default"},{default:s(()=>[m(y(p.isDefault?"默认":"-"),1)]),_:2},1032,["color"])):k("",!0),o.key==="balance"?(r(),_("span",Fe,y(p.balance??"-"),1)):k("",!0),o.key==="action"?(r(),_(We,{key:4},[p.isDefault?(r(),_("span",Le,"当前默认")):(r(),C(a,{key:0,size:"small",type:"link",loading:Y.value===p.address,onClick:at=>ye(p.address)},{default:s(()=>[...e[18]||(e[18]=[m(" 设为默认 ",-1)])]),_:1},8,["loading","onClick"]))],64)):k("",!0)]),emptyText:s(()=>[t(Z,{description:"暂无钱包,点击「创建钱包」添加"})]),_:1},8,["data-source","pagination"])),t(ae,{open:q.value,"onUpdate:open":e[2]||(e[2]=o=>q.value=o),title:"创建钱包","confirm-loading":G.value,onOk:me,"ok-text":"创建","cancel-text":"取消"},{default:s(()=>[t(te,{"label-col":{span:6},"wrapper-col":{span:18},style:{"margin-top":"16px"}},{default:s(()=>[t(h,{label:"钱包名称",required:""},{default:s(()=>[t(O,{value:S.value,"onUpdate:value":e[1]||(e[1]=o=>S.value=o),placeholder:"请输入钱包名称"},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"])]),_:1}),t(se,{key:"assets"},{tab:s(()=>[t(b(P)),e[19]||(e[19]=m(" 资产管理 ",-1))]),default:s(()=>[t(U,{style:{"margin-bottom":"16px"}},{default:s(()=>[t(a,{type:"primary",loading:N.value,onClick:L},{icon:s(()=>[t(b(K))]),default:s(()=>[e[20]||(e[20]=m(" 刷新资产 ",-1))]),_:1},8,["loading"]),t(a,{onClick:e[3]||(e[3]=o=>F.value=!0)},{icon:s(()=>[t(b(re))]),default:s(()=>[e[21]||(e[21]=m(" 注册资产 ",-1))]),_:1})]),_:1}),N.value?(r(),_("div",Me,[t(X,{size:"large"})])):(r(),C(ee,{key:1,columns:ve,"data-source":I.value,pagination:{pageSize:20,showTotal:o=>`共 ${o} 条`},size:"small",style:{background:"var(--bg-card)"},"row-class-name":()=>"wallet-row"},{bodyCell:s(({column:o,record:p})=>[o.key==="name"?(r(),_("span",Be,y(p.name),1)):k("",!0),o.key==="type"?(r(),C(J,{key:1,color:_e(p.type)},{default:s(()=>[m(y(p.type),1)]),_:2},1032,["color"])):k("",!0),o.key==="description"?(r(),_("span",He,y(p.description||"-"),1)):k("",!0),o.key==="address"?(r(),_("span",Ve,y(p.address||"-"),1)):k("",!0)]),emptyText:s(()=>[t(Z,{description:"暂无资产,点击「注册资产」添加"})]),_:1},8,["data-source","pagination"])),t(ae,{open:F.value,"onUpdate:open":e[7]||(e[7]=o=>F.value=o),title:"注册资产","confirm-loading":Q.value,onOk:ke,"ok-text":"注册","cancel-text":"取消"},{default:s(()=>[t(te,{"label-col":{span:6},"wrapper-col":{span:18},style:{"margin-top":"16px"}},{default:s(()=>[t(h,{label:"资产名称",required:""},{default:s(()=>[t(O,{value:g.name,"onUpdate:value":e[4]||(e[4]=o=>g.name=o),placeholder:"请输入资产名称"},null,8,["value"])]),_:1}),t(h,{label:"资产类型",required:""},{default:s(()=>[t(Ae,{value:g.type,"onUpdate:value":e[5]||(e[5]=o=>g.type=o),placeholder:"请选择类型"},{default:s(()=>[t(le,{value:"token"},{default:s(()=>[...e[22]||(e[22]=[m("Token",-1)])]),_:1}),t(le,{value:"nft"},{default:s(()=>[...e[23]||(e[23]=[m("NFT",-1)])]),_:1}),t(le,{value:"data"},{default:s(()=>[...e[24]||(e[24]=[m("Data",-1)])]),_:1})]),_:1},8,["value"])]),_:1}),t(h,{label:"描述"},{default:s(()=>[t(O,{value:g.description,"onUpdate:value":e[6]||(e[6]=o=>g.description=o),placeholder:"资产描述(可选)"},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"])]),_:1}),t(se,{key:"transfer"},{tab:s(()=>[t(b(ie)),e[25]||(e[25]=m(" 转账 ",-1))]),default:s(()=>[t(V,{gutter:[24,24]},{default:s(()=>[t(d,{xs:24,md:12},{default:s(()=>[t(n,{title:"发起转账",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:s(()=>[t(te,{"label-col":{span:6},"wrapper-col":{span:18}},{default:s(()=>[t(h,{label:"资产 ID",required:""},{default:s(()=>[t(O,{value:c.assetId,"onUpdate:value":e[8]||(e[8]=o=>c.assetId=o),placeholder:"请输入资产 ID"},null,8,["value"])]),_:1}),t(h,{label:"目标地址",required:""},{default:s(()=>[t(O,{value:c.toAddress,"onUpdate:value":e[9]||(e[9]=o=>c.toAddress=o),placeholder:"请输入接收方地址"},null,8,["value"])]),_:1}),t(h,{label:"数量",required:""},{default:s(()=>[t(Ce,{value:c.amount,"onUpdate:value":e[10]||(e[10]=o=>c.amount=o),min:0,step:.01,placeholder:"转账数量",style:{width:"100%"}},null,8,["value"])]),_:1}),t(h,{"wrapper-col":{offset:6,span:18}},{default:s(()=>[t(a,{type:"primary",loading:M.value,disabled:!c.assetId.trim()||!c.toAddress.trim()||!c.amount,onClick:xe},{icon:s(()=>[t(b(ie))]),default:s(()=>[e[26]||(e[26]=m(" 确认转账 ",-1))]),_:1},8,["loading","disabled"])]),_:1})]),_:1}),w.value?(r(),_("div",Je,[t(J,{color:w.value.success?"green":"red"},{default:s(()=>[m(y(w.value.success?"成功":"失败"),1)]),_:1},8,["color"]),x("pre",Ke,y(w.value.output),1)])):k("",!0)]),_:1})]),_:1}),t(d,{xs:24,md:12},{default:s(()=>[t(n,{title:"交易历史",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{extra:s(()=>[t(a,{size:"small",loading:B.value,onClick:H},{icon:s(()=>[t(b(K))]),_:1},8,["loading"])]),default:s(()=>[B.value?(r(),_("div",Pe,[t(X)])):(r(),C(ee,{key:1,columns:be,"data-source":T.value,pagination:{pageSize:10,showTotal:o=>`共 ${o} 条`,size:"small"},size:"small","row-class-name":()=>"wallet-row"},{bodyCell:s(({column:o,record:p})=>[o.key==="time"?(r(),_("span",Re,y(p.time),1)):k("",!0),o.key==="type"?(r(),C(J,{key:1,color:p.type==="send"?"orange":"green"},{default:s(()=>[m(y(p.type),1)]),_:2},1032,["color"])):k("",!0),o.key==="amount"?(r(),_("span",Ee,y(p.amount),1)):k("",!0),o.key==="to"?(r(),_("span",Ge,y(p.to),1)):k("",!0)]),emptyText:s(()=>[t(Z,{description:"暂无交易记录"})]),_:1},8,["data-source","pagination"]))]),_:1})]),_:1})]),_:1}),t(ae,{open:D.value,"onUpdate:open":e[11]||(e[11]=o=>D.value=o),title:"确认转账","confirm-loading":M.value,onOk:we,"ok-text":"确认","cancel-text":"取消","ok-type":"primary"},{default:s(()=>[x("div",Ye,[e[27]||(e[27]=x("p",{style:{color:"var(--text-primary)"}},"请确认以下转账信息:",-1)),t(ze,{column:1,bordered:"",size:"small",style:{"margin-top":"12px"}},{default:s(()=>[t(oe,{label:"资产 ID"},{default:s(()=>[x("span",Qe,y(c.assetId),1)]),_:1}),t(oe,{label:"目标地址"},{default:s(()=>[x("span",Xe,y(c.toAddress),1)]),_:1}),t(oe,{label:"数量"},{default:s(()=>[x("span",Ze,y(c.amount),1)]),_:1})]),_:1})])]),_:1},8,["open","confirm-loading"])]),_:1})]),_:1},8,["activeKey"])])}}},mt=Te(et,[["__scopeId","data-v-01e6c0f1"]]);export{mt as default};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import{u as Ie}from"./ws-Bv7YH0VB.js";import{_ as Oe}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{a as u}from"./index-
|
|
1
|
+
import{u as Ie}from"./ws-Bv7YH0VB.js";import{_ as Oe}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{a as u}from"./index-BfKFNptm.js";import{Y as le,ac as Te,ap as ze,Q as oe,o as Le,L as ne}from"./icons-ukMaZ3tx.js";import{l as $e,F as y,D as g,c as a,x as l,r,q as s,v as i,J as c,u as k,m as I,I as m,G as h,H as j,L as se}from"./vendor-BVetwVfk.js";import"./index-DfcXDy2A.js";import"./useConfigInject-DCcT0grw.js";import"./transition-DSe9CgZe.js";import"./Keyframes-C7fCrnlS.js";import"./Portal-CHsntPCQ.js";import"./index-U4Zd5IK6.js";const De={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},Pe={key:0,style:{"text-align":"center",padding:"60px"}},Ne=["title"],We={key:1,style:{color:"var(--text-primary)"}},Re={key:3,style:{color:"var(--text-secondary)","font-size":"12px"}},je={key:4,style:{color:"var(--text-secondary)","font-size":"12px"}},Ke={key:0,style:{"text-align":"center",padding:"60px"}},Me={style:{color:"#e0e0e0","font-family":"monospace","font-size":"12px"}},qe={style:{color:"var(--text-secondary)","font-size":"12px"}},Be={style:{"margin-top":"16px"}},Ve={key:0,style:{"text-align":"center",padding:"60px"}},Fe={style:{display:"flex","align-items":"center",gap:"16px","margin-bottom":"16px"}},Je={key:0,style:{"margin-top":"16px"}},Ee={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)"}},Ye={key:0,style:{"margin-top":"16px"}},Ge={style:{background:"var(--bg-base)",padding:"16px","border-radius":"6px",border:"1px solid var(--border-color)"}},He={__name:"WebAuthn",setup(Qe){const x=Ie(),O=r("webauthn"),K=r(!1);async function re(){K.value=!0;try{O.value==="webauthn"?await P():O.value==="sso"?await E():O.value==="2fa"&&await ee()}finally{K.value=!1}}function ie(t){t==="sso"&&!V.value&&E(),t==="2fa"&&!G.value&&ee()}function T(t){try{return JSON.parse(t)}catch{return null}}function ue(t){return t?t.length<=16?t:t.slice(0,8)+"..."+t.slice(-8):"-"}const M=r(!1),q=r(!1),L=r([]),$=r(!1),D=r(""),de=[{title:"ID",key:"id",dataIndex:"id",width:"180px"},{title:"名称",key:"name",dataIndex:"name",width:"160px"},{title:"类型",key:"type",dataIndex:"type",width:"120px"},{title:"创建时间",key:"createdAt",dataIndex:"createdAt",width:"180px"},{title:"最后使用",key:"lastUsed",dataIndex:"lastUsed",width:"180px"},{title:"操作",key:"actions",width:"100px",fixed:"right"}];async function P(){M.value=!0;try{const{output:t}=await x.execute("webauthn list --json",15e3),e=T(t);e&&Array.isArray(e)?L.value=e.map((o,f)=>({key:o.id||f,id:o.id||"-",name:o.name||o.displayName||"-",type:o.type||"public-key",createdAt:o.createdAt||o.created||"-",lastUsed:o.lastUsed||o.lastAuthentication||"-"})):e&&e.credentials?L.value=e.credentials.map((o,f)=>({key:o.id||f,id:o.id||"-",name:o.name||o.displayName||"-",type:o.type||"public-key",createdAt:o.createdAt||o.created||"-",lastUsed:o.lastUsed||o.lastAuthentication||"-"})):L.value=ce(t)}catch(t){u.error("加载 WebAuthn 凭证失败: "+t.message)}finally{M.value=!1}}function ce(t){const e=[],o=t.split(`
|
|
2
2
|
`);for(const f of o){const b=f.trim();if(!b||b.startsWith("─")||b.startsWith("No "))continue;const d=b.split(/\s*[|│]\s*/);d.length>=2&&e.push({key:e.length,id:d[0]||"-",name:d[1]||"-",type:d[2]||"public-key",createdAt:d[3]||"-",lastUsed:d[4]||"-"})}return e}async function pe(){const t=D.value.trim();if(!t){u.warning("请输入凭证名称");return}q.value=!0;try{const e=t.replace(/"/g,'\\"'),{output:o}=await x.execute(`webauthn register --name "${e}" --json`,3e4);o.includes("error")||o.includes("失败")?u.error("注册失败: "+o.slice(0,120)):(u.success("WebAuthn 凭证已注册"),$.value=!1,D.value="",await P())}catch(e){u.error("注册失败: "+e.message)}finally{q.value=!1}}async function ve(t){try{const{output:e}=await x.execute(`webauthn delete "${t.id}"`,15e3);e.includes("error")||e.includes("失败")?u.error("删除失败: "+e.slice(0,120)):(u.success("凭证已删除"),await P())}catch(e){u.error("删除失败: "+e.message)}}const B=r(!1),V=r(!1),F=r(!1),N=r(!1),p=r({provider:"",clientId:"",redirectUrl:"",enabled:!1}),v=r({provider:void 0,clientId:"",clientSecret:"",issuerUrl:""}),J=r([]);async function E(){B.value=!0;try{const{output:t}=await x.execute("sso status --json",15e3),e=T(t);if(e)p.value={provider:e.provider||"",clientId:e.clientId||e.client_id||"",redirectUrl:e.redirectUrl||e.redirect_url||e.callbackUrl||"",enabled:e.enabled||e.active||!1};else{const o=t.split(`
|
|
3
|
-
`);for(const f of o){const b=f.trim().match(/^(.+?)\s*[:=:]\s*(.+)$/);if(b){const d=b[1].toLowerCase(),C=b[2].trim();d.includes("provider")?p.value.provider=C:d.includes("client")&&d.includes("id")?p.value.clientId=C:d.includes("redirect")||d.includes("callback")?p.value.redirectUrl=C:(d.includes("status")||d.includes("enabled"))&&(p.value.enabled=/true|enabled|active|已启用/i.test(C))}}}J.value=[{label:"提供商",value:p.value.provider||"未配置",color:p.value.provider?"#1677ff":"#999"},{label:"状态",value:p.value.enabled?"已启用":"未启用",color:p.value.enabled?"#52c41a":"#faad14"}],V.value=!0}catch{p.value={provider:"",clientId:"",redirectUrl:"",enabled:!1},J.value=[{label:"提供商",value:"未配置",color:"#999"},{label:"状态",value:"未启用",color:"#faad14"}],V.value=!0}finally{B.value=!1}}async function fe(){if(!v.value.provider){u.warning("请选择 SSO 提供商");return}if(!v.value.clientId.trim()){u.warning("请输入 Client ID");return}F.value=!0;try{const t=[`config set sso.provider ${v.value.provider}`,`config set sso.clientId ${v.value.clientId.trim()}`];v.value.clientSecret.trim()&&t.push(`config set sso.clientSecret ${v.value.clientSecret.trim()}`),v.value.issuerUrl.trim()&&t.push(`config set sso.issuerUrl ${v.value.issuerUrl.trim()}`);for(const e of t)await x.execute(e,1e4);u.success("SSO 配置已保存"),N.value=!1,await E()}catch(t){u.error("保存失败: "+t.message)}finally{F.value=!1}}const
|
|
4
|
-
OTP Auth URL: ${e.otpAuthUrl||e.uri||""}`:A.value=t,w.value=!0,u.success("TOTP 已启用")}}catch(t){u.error("启用失败: "+t.message)}finally{U.value=!1}}async function me(){U.value=!0,A.value="";try{const{output:t}=await x.execute("auth 2fa disable",15e3);t.includes("error")||t.includes("失败")?u.error("禁用失败: "+t.slice(0,120)):(w.value=!1,u.success("双因素认证已禁用"))}catch(t){u.error("禁用失败: "+t.message)}finally{U.value=!1}}async function be(){
|
|
5
|
-
`).map(f=>f.trim()).filter(f=>f&&/^[A-Za-z0-9-]{6,}$/.test(f));S.value=o.length>0?o:[t.trim()||"无法生成恢复码"]}S.value.length>0&&S.value[0]!=="无法生成恢复码"&&u.success("恢复码已生成")}catch(t){u.error("生成恢复码失败: "+t.message)}finally{
|
|
3
|
+
`);for(const f of o){const b=f.trim().match(/^(.+?)\s*[:=:]\s*(.+)$/);if(b){const d=b[1].toLowerCase(),C=b[2].trim();d.includes("provider")?p.value.provider=C:d.includes("client")&&d.includes("id")?p.value.clientId=C:d.includes("redirect")||d.includes("callback")?p.value.redirectUrl=C:(d.includes("status")||d.includes("enabled"))&&(p.value.enabled=/true|enabled|active|已启用/i.test(C))}}}J.value=[{label:"提供商",value:p.value.provider||"未配置",color:p.value.provider?"#1677ff":"#999"},{label:"状态",value:p.value.enabled?"已启用":"未启用",color:p.value.enabled?"#52c41a":"#faad14"}],V.value=!0}catch{p.value={provider:"",clientId:"",redirectUrl:"",enabled:!1},J.value=[{label:"提供商",value:"未配置",color:"#999"},{label:"状态",value:"未启用",color:"#faad14"}],V.value=!0}finally{B.value=!1}}async function fe(){if(!v.value.provider){u.warning("请选择 SSO 提供商");return}if(!v.value.clientId.trim()){u.warning("请输入 Client ID");return}F.value=!0;try{const t=[`config set sso.provider ${v.value.provider}`,`config set sso.clientId ${v.value.clientId.trim()}`];v.value.clientSecret.trim()&&t.push(`config set sso.clientSecret ${v.value.clientSecret.trim()}`),v.value.issuerUrl.trim()&&t.push(`config set sso.issuerUrl ${v.value.issuerUrl.trim()}`);for(const e of t)await x.execute(e,1e4);u.success("SSO 配置已保存"),N.value=!1,await E()}catch(t){u.error("保存失败: "+t.message)}finally{F.value=!1}}const Y=r(!1),G=r(!1),w=r(!1),U=r(!1),A=r(""),H=r(!1),S=r([]);async function ee(){Y.value=!0;try{const{output:t}=await x.execute("auth 2fa status --json",15e3),e=T(t);e?w.value=e.enabled||e.active||!1:w.value=/enabled|已启用|active/i.test(t),G.value=!0}catch{w.value=!1,G.value=!0}finally{Y.value=!1}}async function ye(){U.value=!0,A.value="";try{const{output:t}=await x.execute("auth 2fa enable --type totp --json",2e4);if(t.includes("error")||t.includes("失败"))u.error("启用失败: "+t.slice(0,120));else{const e=T(t);e&&e.secret?A.value=`TOTP Secret: ${e.secret}
|
|
4
|
+
OTP Auth URL: ${e.otpAuthUrl||e.uri||""}`:A.value=t,w.value=!0,u.success("TOTP 已启用")}}catch(t){u.error("启用失败: "+t.message)}finally{U.value=!1}}async function me(){U.value=!0,A.value="";try{const{output:t}=await x.execute("auth 2fa disable",15e3);t.includes("error")||t.includes("失败")?u.error("禁用失败: "+t.slice(0,120)):(w.value=!1,u.success("双因素认证已禁用"))}catch(t){u.error("禁用失败: "+t.message)}finally{U.value=!1}}async function be(){H.value=!0,S.value=[];try{const{output:t}=await x.execute("auth 2fa recovery-codes --json",15e3),e=T(t);if(e&&Array.isArray(e.codes))S.value=e.codes;else if(e&&Array.isArray(e))S.value=e;else{const o=t.split(`
|
|
5
|
+
`).map(f=>f.trim()).filter(f=>f&&/^[A-Za-z0-9-]{6,}$/.test(f));S.value=o.length>0?o:[t.trim()||"无法生成恢复码"]}S.value.length>0&&S.value[0]!=="无法生成恢复码"&&u.success("恢复码已生成")}catch(t){u.error("生成恢复码失败: "+t.message)}finally{H.value=!1}}return $e(()=>{P()}),(t,e)=>{const o=s("a-button"),f=s("a-space"),b=s("a-spin"),d=s("a-tag"),C=s("a-popconfirm"),ge=s("a-empty"),_e=s("a-table"),Q=s("a-input"),z=s("a-form-item"),te=s("a-form"),ae=s("a-modal"),Z=s("a-tab-pane"),xe=s("a-statistic"),W=s("a-card"),ke=s("a-col"),we=s("a-row"),R=s("a-descriptions-item"),Se=s("a-descriptions"),X=s("a-select-option"),he=s("a-select"),Ce=s("a-input-password"),Ue=s("a-alert"),Ae=s("a-tabs");return i(),y("div",null,[g("div",De,[e[11]||(e[11]=g("div",null,[g("h2",{class:"page-title"},"认证管理"),g("p",{class:"page-sub"},"WebAuthn / SSO / 双因素认证")],-1)),a(o,{type:"primary",ghost:"",loading:K.value,onClick:re},{icon:l(()=>[a(k(le))]),default:l(()=>[e[10]||(e[10]=c(" 刷新 ",-1))]),_:1},8,["loading"])]),a(Ae,{activeKey:O.value,"onUpdate:activeKey":e[9]||(e[9]=n=>O.value=n),type:"card",onChange:ie},{default:l(()=>[a(Z,{key:"webauthn"},{tab:l(()=>[a(k(oe)),e[12]||(e[12]=c(" WebAuthn ",-1))]),default:l(()=>[a(f,{style:{"margin-bottom":"16px"}},{default:l(()=>[a(o,{type:"primary",onClick:e[0]||(e[0]=n=>$.value=!0)},{icon:l(()=>[a(k(Te))]),default:l(()=>[e[13]||(e[13]=c(" 注册新凭证 ",-1))]),_:1})]),_:1}),M.value?(i(),y("div",Pe,[a(b,{size:"large"})])):(i(),I(_e,{key:1,columns:de,"data-source":L.value,pagination:{pageSize:20,showTotal:n=>`共 ${n} 条`},size:"small",style:{background:"var(--bg-card)"},"row-class-name":()=>"auth-row"},{bodyCell:l(({column:n,record:_})=>[n.key==="id"?(i(),y("span",{key:0,style:{color:"#e0e0e0","font-family":"monospace","font-size":"12px"},title:_.id},m(ue(_.id)),9,Ne)):h("",!0),n.key==="name"?(i(),y("span",We,m(_.name),1)):h("",!0),n.key==="type"?(i(),I(d,{key:2,color:"blue"},{default:l(()=>[c(m(_.type||"public-key"),1)]),_:2},1024)):h("",!0),n.key==="createdAt"?(i(),y("span",Re,m(_.createdAt||"-"),1)):h("",!0),n.key==="lastUsed"?(i(),y("span",je,m(_.lastUsed||"-"),1)):h("",!0),n.key==="actions"?(i(),I(C,{key:5,title:"确定要删除此凭证吗?","ok-text":"确定","cancel-text":"取消",onConfirm:Ze=>ve(_)},{default:l(()=>[a(o,{type:"link",danger:"",size:"small"},{icon:l(()=>[a(k(ze))]),default:l(()=>[e[14]||(e[14]=c(" 删除 ",-1))]),_:1})]),_:1},8,["onConfirm"])):h("",!0)]),emptyText:l(()=>[a(ge,{description:"暂无 WebAuthn 凭证,点击「注册新凭证」添加"})]),_:1},8,["data-source","pagination"])),a(ae,{open:$.value,"onUpdate:open":e[2]||(e[2]=n=>$.value=n),title:"注册 WebAuthn 凭证","confirm-loading":q.value,onOk:pe,"ok-text":"注册","cancel-text":"取消"},{default:l(()=>[a(te,{"label-col":{span:6},"wrapper-col":{span:18},style:{"margin-top":"16px"}},{default:l(()=>[a(z,{label:"凭证名称",required:""},{default:l(()=>[a(Q,{value:D.value,"onUpdate:value":e[1]||(e[1]=n=>D.value=n),placeholder:"例如:YubiKey-5, TouchID"},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"])]),_:1}),a(Z,{key:"sso"},{tab:l(()=>[a(k(Le)),e[15]||(e[15]=c(" SSO 配置 ",-1))]),default:l(()=>[B.value?(i(),y("div",Ke,[a(b,{size:"large"})])):(i(),y(j,{key:1},[a(we,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:l(()=>[(i(!0),y(j,null,se(J.value,n=>(i(),I(ke,{xs:12,sm:6,key:n.label},{default:l(()=>[a(W,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"},size:"small"},{default:l(()=>[a(xe,{title:n.label,value:n.value,"value-style":{color:n.color,fontSize:"20px"}},null,8,["title","value","value-style"])]),_:2},1024)]),_:2},1024))),128))]),_:1}),a(W,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"},title:"当前 SSO 配置"},{default:l(()=>[a(Se,{column:{xs:1,sm:2},bordered:"",size:"small",style:{background:"var(--bg-card)"}},{default:l(()=>[a(R,{label:"提供商"},{default:l(()=>[a(d,{color:p.value.provider?"blue":"default"},{default:l(()=>[c(m(p.value.provider||"未配置"),1)]),_:1},8,["color"])]),_:1}),a(R,{label:"Client ID"},{default:l(()=>[g("span",Me,m(p.value.clientId||"-"),1)]),_:1}),a(R,{label:"Redirect URL"},{default:l(()=>[g("span",qe,m(p.value.redirectUrl||"-"),1)]),_:1}),a(R,{label:"状态"},{default:l(()=>[a(d,{color:p.value.enabled?"green":"default"},{default:l(()=>[c(m(p.value.enabled?"已启用":"未启用"),1)]),_:1},8,["color"])]),_:1})]),_:1}),g("div",Be,[a(o,{type:"primary",onClick:e[3]||(e[3]=n=>N.value=!0)},{icon:l(()=>[a(k(oe))]),default:l(()=>[e[16]||(e[16]=c(" 配置 SSO ",-1))]),_:1})])]),_:1})],64)),a(ae,{open:N.value,"onUpdate:open":e[8]||(e[8]=n=>N.value=n),title:"配置 SSO","confirm-loading":F.value,onOk:fe,"ok-text":"保存","cancel-text":"取消",width:"520px"},{default:l(()=>[a(te,{"label-col":{span:6},"wrapper-col":{span:18},style:{"margin-top":"16px"}},{default:l(()=>[a(z,{label:"提供商",required:""},{default:l(()=>[a(he,{value:v.value.provider,"onUpdate:value":e[4]||(e[4]=n=>v.value.provider=n),placeholder:"选择 SSO 提供商"},{default:l(()=>[a(X,{value:"OIDC"},{default:l(()=>[...e[17]||(e[17]=[c("OIDC",-1)])]),_:1}),a(X,{value:"SAML"},{default:l(()=>[...e[18]||(e[18]=[c("SAML",-1)])]),_:1}),a(X,{value:"LDAP"},{default:l(()=>[...e[19]||(e[19]=[c("LDAP",-1)])]),_:1})]),_:1},8,["value"])]),_:1}),a(z,{label:"Client ID",required:""},{default:l(()=>[a(Q,{value:v.value.clientId,"onUpdate:value":e[5]||(e[5]=n=>v.value.clientId=n),placeholder:"输入 Client ID"},null,8,["value"])]),_:1}),a(z,{label:"Client Secret"},{default:l(()=>[a(Ce,{value:v.value.clientSecret,"onUpdate:value":e[6]||(e[6]=n=>v.value.clientSecret=n),placeholder:"输入 Client Secret"},null,8,["value"])]),_:1}),a(z,{label:"Issuer URL"},{default:l(()=>[a(Q,{value:v.value.issuerUrl,"onUpdate:value":e[7]||(e[7]=n=>v.value.issuerUrl=n),placeholder:"https://sso.example.com"},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"])]),_:1}),a(Z,{key:"2fa"},{tab:l(()=>[a(k(ne)),e[20]||(e[20]=c(" 双因素认证 ",-1))]),default:l(()=>[Y.value?(i(),y("div",Ve,[a(b,{size:"large"})])):(i(),y(j,{key:1},[a(W,{style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"},title:"TOTP 双因素认证"},{default:l(()=>[g("div",Fe,[e[21]||(e[21]=g("span",{style:{color:"var(--text-primary)","font-size":"14px"}},"状态:",-1)),a(d,{color:w.value?"green":"default",style:{"font-size":"13px"}},{default:l(()=>[c(m(w.value?"已启用":"未启用"),1)]),_:1},8,["color"])]),a(f,null,{default:l(()=>[w.value?(i(),I(C,{key:1,title:"确定要禁用双因素认证吗?这会降低账户安全性。","ok-text":"确定禁用","cancel-text":"取消",onConfirm:me},{default:l(()=>[a(o,{danger:"",loading:U.value},{default:l(()=>[...e[23]||(e[23]=[c(" 禁用 ",-1)])]),_:1},8,["loading"])]),_:1})):(i(),I(o,{key:0,type:"primary",loading:U.value,onClick:ye},{icon:l(()=>[a(k(ne))]),default:l(()=>[e[22]||(e[22]=c(" 启用 TOTP ",-1))]),_:1},8,["loading"]))]),_:1}),A.value?(i(),y("div",Je,[g("pre",Ee,m(A.value),1)])):h("",!0)]),_:1}),a(W,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"},title:"恢复码"},{default:l(()=>[e[25]||(e[25]=g("p",{style:{color:"var(--text-secondary)","margin-bottom":"12px"}}," 恢复码可在丢失 TOTP 设备时用于登录。请妥善保管。 ",-1)),a(o,{loading:H.value,onClick:be},{icon:l(()=>[a(k(le))]),default:l(()=>[e[24]||(e[24]=c(" 生成恢复码 ",-1))]),_:1},8,["loading"]),S.value.length>0?(i(),y("div",Ye,[a(Ue,{type:"warning","show-icon":"",style:{"margin-bottom":"12px"},message:"请立即保存这些恢复码,关闭后将无法再次查看。"}),g("div",Ge,[(i(!0),y(j,null,se(S.value,(n,_)=>(i(),y("div",{key:_,style:{"font-family":"monospace","font-size":"14px",color:"#e0e0e0",padding:"4px 0","letter-spacing":"2px"}},m(_+1)+". "+m(n),1))),128))])])):h("",!0)]),_:1})],64))]),_:1})]),_:1},8,["activeKey"])])}}},dt=Oe(He,[["__scopeId","data-v-a4bec262"]]);export{dt as default};
|
package/src/assets/web-panel/assets/{WorkflowEditor-Bw6cIw_h.js → WorkflowEditor-vlujdL6I.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{k as T,r as b,l as
|
|
1
|
+
import{k as T,r as b,l as Y,F as v,D as _,c as s,x as o,q as p,v as c,J as m,u as h,m as j,E as K,I as y,P as Q,H as V,L as D,G as N,j as X}from"./vendor-BVetwVfk.js";import{u as Z}from"./ws-Bv7YH0VB.js";import{_ as ee}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{ac as te,Y as ae}from"./icons-ukMaZ3tx.js";import{a as C}from"./index-BfKFNptm.js";import"./index-DfcXDy2A.js";import"./useConfigInject-DCcT0grw.js";import"./transition-DSe9CgZe.js";import"./Keyframes-C7fCrnlS.js";import"./Portal-CHsntPCQ.js";import"./index-U4Zd5IK6.js";const se=T("workflow",()=>{const f=Z(),l=b([]),t=b(null),x=b([]),w=b("idle"),R=b(!1),z=b(null);async function J(){R.value=!0,z.value=null;try{await f.waitConnected();const e=await f.sendRaw({type:"workflow-list"});return l.value=Array.isArray(e.workflows)?e.workflows:[],l.value}catch(e){throw z.value=e.message,e}finally{R.value=!1}}async function W(e){await f.waitConnected();const n=await f.sendRaw({type:"workflow-get",id:e});return t.value=n.workflow||null,t.value}async function A(e){await f.waitConnected();const n=await f.sendRaw({type:"workflow-save",workflow:e});if(n.saved){const u=l.value.findIndex(r=>r.id===e.id);u>=0?l.value.splice(u,1,e):l.value.push(e)}return n}async function B(e){await f.waitConnected();const n=await f.sendRaw({type:"workflow-remove",id:e});return n.removed&&(l.value=l.value.filter(u=>u.id!==e)),n}async function q(e,{onEvent:n}={}){await f.waitConnected(),x.value=[],w.value="running";const u=f.onMessage(r=>{!r||typeof r.type!="string"||r.type.startsWith("workflow:")&&(x.value.push(r),n&&n(r),r.type==="workflow:done"&&(w.value=r.status||"completed"))});try{return await f.sendRaw({type:"workflow-run",id:e},12e4)}catch(r){throw w.value="failed",z.value=r.message,r}finally{u()}}function M(e){const n=[];if(!e||typeof e!="object")return{valid:!1,errors:["workflow must be an object"]};if(e.id||n.push("id required"),e.name||n.push("name required"),!Array.isArray(e.steps)||e.steps.length===0)n.push("steps required");else{let g=function(i){$.set(i,E);for(const O of r.get(i)||[]){if(!r.has(O)){n.push(`unknown dependency: ${O}`);continue}const I=$.get(O);if(I===E){n.push(`cycle via ${i} -> ${O}`);return}I===L&&g(O)}$.set(i,S)};const u=new Set;for(const i of e.steps)i.id||n.push("step.id required"),u.has(i.id)&&n.push(`duplicate step id: ${i.id}`),u.add(i.id);const r=new Map;for(const i of e.steps)r.set(i.id,i.dependsOn||[]);const L=0,E=1,S=2,$=new Map([...r.keys()].map(i=>[i,L]));for(const i of r.keys())$.get(i)===L&&g(i)}return{valid:n.length===0,errors:n}}function d(e){return JSON.stringify(e,null,2)}return{workflows:l,current:t,runEvents:x,runStatus:w,loading:R,error:z,list:J,get:W,save:A,remove:B,run:q,validateLocal:M,exportJson:d}}),ne={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},oe={style:{flex:"1"}},le={style:{"font-weight":"500"}},re={style:{color:"#888","font-size":"12px"}},ie={style:{color:"#888","font-size":"12px"}},ue={key:0,style:{"margin-top":"12px",color:"#d32f2f"}},de={style:{color:"#1976d2"}},ce={key:0},pe={key:1},fe={key:2,style:{color:"#555"}},ve={__name:"WorkflowEditor",setup(f){const l=se(),t=b(null),x=b(!1),w=X(()=>t.value?l.validateLocal(t.value):null);Y(()=>l.list().catch(()=>{}));function R(){t.value={id:"",name:"",description:"",steps:[{id:"step1",message:"",dependsOn:[]}]}}async function z(d){try{const e=await l.get(d);e&&(t.value=JSON.parse(JSON.stringify(e)),t.value.steps||(t.value.steps=[]))}catch(e){C.error(`加载失败: ${e.message}`)}}function J(){t.value.steps||(t.value.steps=[]),t.value.steps.push({id:`step${t.value.steps.length+1}`,message:"",dependsOn:[]})}function W(d){t.value.steps.splice(d,1)}async function A(){const d=l.validateLocal(t.value);if(!d.valid){C.error(d.errors[0]);return}try{await l.save(t.value),C.success("保存成功")}catch(e){C.error(`保存失败: ${e.message}`)}}async function B(d){try{await l.remove(d),t.value?.id===d&&(t.value=null),C.success("已删除")}catch(e){C.error(`删除失败: ${e.message}`)}}async function q(){x.value=!0;try{await l.run(t.value.id),C.success(`运行完成:${l.runStatus}`)}catch(d){C.error(`运行失败: ${d.message}`)}finally{x.value=!1}}function M(){const d=l.exportJson(t.value),e=new Blob([d],{type:"application/json"}),n=URL.createObjectURL(e),u=document.createElement("a");u.href=n,u.download=`${t.value.id||"workflow"}.json`,u.click(),URL.revokeObjectURL(n)}return(d,e)=>{const n=p("a-button"),u=p("a-space"),r=p("a-empty"),L=p("a-list-item"),E=p("a-list"),S=p("a-card"),$=p("a-col"),g=p("a-input"),i=p("a-form-item"),O=p("a-divider"),I=p("a-select"),F=p("a-input-group"),G=p("a-textarea"),H=p("a-form"),P=p("a-row");return c(),v("div",null,[_("div",ne,[e[6]||(e[6]=_("div",null,[_("h2",{class:"page-title"},"工作流编辑器"),_("p",{class:"page-sub"},"创建、编辑、运行 Cowork 工作流(N1 — 初版:表单编辑,画布视图规划中)")],-1)),s(u,null,{default:o(()=>[s(n,{onClick:R,type:"primary"},{icon:o(()=>[s(h(te))]),default:o(()=>[e[4]||(e[4]=m(" 新建 ",-1))]),_:1}),s(n,{ghost:"",loading:h(l).loading,onClick:e[0]||(e[0]=a=>h(l).list())},{icon:o(()=>[s(h(ae))]),default:o(()=>[e[5]||(e[5]=m(" 刷新 ",-1))]),_:1},8,["loading"])]),_:1})]),s(P,{gutter:16},{default:o(()=>[s($,{span:8},{default:o(()=>[s(S,{title:"工作流列表",size:"small"},{default:o(()=>[h(l).workflows.length?(c(),j(E,{key:1,"data-source":h(l).workflows,size:"small"},{renderItem:o(({item:a})=>[s(L,{class:K({active:t.value?.id===a.id}),style:{cursor:"pointer"},onClick:U=>z(a.id)},{default:o(()=>[_("div",oe,[_("div",le,y(a.name||a.id),1),_("div",re,y((a.steps||[]).length)+" 步骤 ",1)]),s(n,{size:"small",danger:"",type:"text",onClick:Q(U=>B(a.id),["stop"])},{default:o(()=>[...e[7]||(e[7]=[m("删除",-1)])]),_:1},8,["onClick"])]),_:2},1032,["class","onClick"])]),_:1},8,["data-source"])):(c(),j(r,{key:0,description:"暂无工作流"}))]),_:1})]),_:1}),s($,{span:16},{default:o(()=>[t.value?(c(),j(S,{key:0,size:"small"},{title:o(()=>[m(" 编辑: "+y(t.value.name||t.value.id),1)]),extra:o(()=>[s(u,null,{default:o(()=>[s(n,{size:"small",onClick:M},{default:o(()=>[...e[8]||(e[8]=[m("导出 JSON",-1)])]),_:1}),s(n,{size:"small",loading:x.value,onClick:q,disabled:!t.value.id},{default:o(()=>[...e[9]||(e[9]=[m(" 运行 ",-1)])]),_:1},8,["loading","disabled"]),s(n,{size:"small",type:"primary",onClick:A},{default:o(()=>[...e[10]||(e[10]=[m("保存",-1)])]),_:1})]),_:1})]),default:o(()=>[s(H,{layout:"vertical",model:t.value},{default:o(()=>[s(i,{label:"ID (唯一标识)"},{default:o(()=>[s(g,{value:t.value.id,"onUpdate:value":e[1]||(e[1]=a=>t.value.id=a),placeholder:"my-workflow"},null,8,["value"])]),_:1}),s(i,{label:"名称"},{default:o(()=>[s(g,{value:t.value.name,"onUpdate:value":e[2]||(e[2]=a=>t.value.name=a),placeholder:"我的工作流"},null,8,["value"])]),_:1}),s(i,{label:"描述"},{default:o(()=>[s(g,{value:t.value.description,"onUpdate:value":e[3]||(e[3]=a=>t.value.description=a),placeholder:"(可选)"},null,8,["value"])]),_:1}),s(O,null,{default:o(()=>[...e[11]||(e[11]=[m("步骤",-1)])]),_:1}),(c(!0),v(V,null,D(t.value.steps,(a,U)=>(c(),v("div",{key:U,class:"step-card"},[s(u,{style:{width:"100%","margin-bottom":"8px"},direction:"vertical"},{default:o(()=>[s(F,{compact:""},{default:o(()=>[s(g,{value:a.id,"onUpdate:value":k=>a.id=k,placeholder:"step-id",style:{width:"30%"}},null,8,["value","onUpdate:value"]),s(I,{value:a.dependsOn,"onUpdate:value":k=>a.dependsOn=k,mode:"tags",placeholder:"dependsOn",style:{width:"70%"}},null,8,["value","onUpdate:value"])]),_:2},1024),s(G,{value:a.message,"onUpdate:value":k=>a.message=k,rows:2,placeholder:"任务 prompt(支持 \\${step.<id>.summary} 占位)"},null,8,["value","onUpdate:value"]),s(g,{value:a.when,"onUpdate:value":k=>a.when=k,placeholder:"when 条件(可选,如 step.s1.status === 'completed')"},null,8,["value","onUpdate:value"]),s(u,null,{default:o(()=>[s(n,{size:"small",danger:"",onClick:k=>W(U)},{default:o(()=>[...e[12]||(e[12]=[m("删除",-1)])]),_:1},8,["onClick"]),_("span",ie," step "+y(U+1)+" / "+y(t.value.steps.length),1)]),_:2},1024)]),_:2},1024)]))),128)),s(n,{block:"",onClick:J},{default:o(()=>[...e[13]||(e[13]=[m("+ 添加步骤",-1)])]),_:1})]),_:1},8,["model"]),w.value&&!w.value.valid?(c(),v("div",ue,[(c(!0),v(V,null,D(w.value.errors,a=>(c(),v("div",{key:a},"• "+y(a),1))),128))])):N("",!0)]),_:1})):(c(),j(S,{key:1,size:"small"},{default:o(()=>[s(r,{description:"从左侧选择工作流或新建一个"})]),_:1})),h(l).runEvents.length?(c(),j(S,{key:2,size:"small",title:"运行日志",style:{"margin-top":"12px"}},{default:o(()=>[(c(!0),v(V,null,D(h(l).runEvents,(a,U)=>(c(),v("div",{key:U,style:{"font-family":"monospace","font-size":"12px","margin-bottom":"4px"}},[_("span",de,y(a.type),1),a.stepId?(c(),v("span",ce," ["+y(a.stepId)+"]",1)):N("",!0),a.status?(c(),v("span",pe," → "+y(a.status),1)):N("",!0),a.summary?(c(),v("span",fe," — "+y(a.summary),1)):N("",!0)]))),128))]),_:1})):N("",!0)]),_:1})]),_:1})])}}},Oe=ee(ve,[["__scopeId","data-v-0d6dcf38"]]);export{Oe as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{_ as t}from"./index-
|
|
1
|
+
import{_ as t}from"./index-DfcXDy2A.js";const n=["blue","purple","cyan","green","magenta","pink","red","orange","yellow","volcano","geekblue","lime","gold"];function C(e,s){return n.reduce((o,r)=>{const u=e[`${r}-1`],l=e[`${r}-3`],i=e[`${r}-6`],a=e[`${r}-7`];return t(t({},o),s(r,{lightColor:u,lightBorderColor:l,darkColor:i,textColor:a}))},{})}const c=n.map(e=>`${e}-inverse`),g=["success","processing","error","default","warning"];function m(e){return(arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0)?[...c,...n].includes(e):n.includes(e)}function p(e){return g.includes(e)}export{n as P,p as a,C as g,m as i};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{_ as r}from"./index-
|
|
1
|
+
import{_ as r}from"./index-DfcXDy2A.js";function a(o,t,i){const{focusElCls:e,focus:n,borderElCls:s}=i,m=s?"> *":"",d=["hover",n?"focus":null,"active"].filter(Boolean).map(c=>`&:${c} ${m}`).join(",");return{[`&-item:not(${t}-last-item)`]:{marginInlineEnd:-o.lineWidth},"&-item":r(r({[d]:{zIndex:2}},e?{[`&${e}`]:{zIndex:2}}:{}),{[`&[disabled] ${m}`]:{zIndex:0}})}}function $(o,t,i){const{borderElCls:e}=i,n=e?`> ${e}`:"";return{[`&-item:not(${t}-first-item):not(${t}-last-item) ${n}`]:{borderRadius:0},[`&-item:not(${t}-last-item)${t}-first-item`]:{[`& ${n}, &${o}-sm ${n}, &${o}-lg ${n}`]:{borderStartEndRadius:0,borderEndEndRadius:0}},[`&-item:not(${t}-first-item)${t}-last-item`]:{[`& ${n}, &${o}-sm ${n}, &${o}-lg ${n}`]:{borderStartStartRadius:0,borderEndStartRadius:0}}}}function l(o){let t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{focus:!0};const{componentCls:i}=o,e=`${i}-compact`;return{[e]:r(r({},a(o,e,t)),$(i,e,t))}}export{l as g};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{_ as s}from"./index-
|
|
1
|
+
import{_ as s}from"./index-DfcXDy2A.js";import{i as c,f as a,a as i,p as u}from"./vendor-BVetwVfk.js";function x(o){const t=Symbol("contextKey");return{useProvide:(r,n)=>{const e=i({});return u(t,e),a(()=>{s(e,r,n||{})}),e},useInject:()=>c(t,o)||{}}}export{x as c};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{e as O,M as y,a as v,i as T}from"./Trigger-
|
|
1
|
+
import{e as O,M as y,a as v,i as T}from"./Trigger-BenSsaoN.js";import{a as s,S as f,l as x,d as w,m as C}from"./_getTag-CWA3v-Ds.js";import{i as c}from"./isSymbol-CsP9Ob42.js";function _(n,r){for(var e=-1,i=n==null?0:n.length,t=Array(i);++e<i;)t[e]=r(n[e],e,n);return t}var p=f?f.prototype:void 0,d=p?p.toString:void 0;function S(n){if(typeof n=="string")return n;if(s(n))return _(n,S)+"";if(c(n))return d?d.call(n):"";var r=n+"";return r=="0"&&1/n==-1/0?"-0":r}function I(n){return n}function E(n,r,e){switch(e.length){case 0:return n.call(r);case 1:return n.call(r,e[0]);case 2:return n.call(r,e[0],e[1]);case 3:return n.call(r,e[0],e[1],e[2])}return n.apply(r,e)}var M=800,A=16,N=Date.now;function R(n){var r=0,e=0;return function(){var i=N(),t=A-(i-e);if(e=i,t>0){if(++r>=M)return arguments[0]}else r=0;return n.apply(void 0,arguments)}}function z(n){return function(){return n}}var l=(function(){try{var n=x(Object,"defineProperty");return n({},"",{}),n}catch{}})(),$=l?function(n,r){return l(n,"toString",{configurable:!0,enumerable:!1,value:z(r),writable:!0})}:I,F=R($);function H(n,r,e){r=="__proto__"&&l?l(n,r,{configurable:!0,enumerable:!0,value:e,writable:!0}):n[r]=e}var V=Object.prototype,D=V.hasOwnProperty;function un(n,r,e){var i=n[r];(!(D.call(n,r)&&O(i,e))||e===void 0&&!(r in n))&&H(n,r,e)}var g=Math.max;function K(n,r,e){return r=g(r===void 0?n.length-1:r,0),function(){for(var i=arguments,t=-1,a=g(i.length-r,0),u=Array(a);++t<a;)u[t]=i[r+t];t=-1;for(var o=Array(r+1);++t<r;)o[t]=i[t];return o[r]=e(u),E(n,this,o)}}var U=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,X=/^\w*$/;function Z(n,r){if(s(n))return!1;var e=typeof n;return e=="number"||e=="symbol"||e=="boolean"||n==null||c(n)?!0:X.test(n)||!U.test(n)||r!=null&&n in Object(r)}var q="Expected a function";function h(n,r){if(typeof n!="function"||r!=null&&typeof r!="function")throw new TypeError(q);var e=function(){var i=arguments,t=r?r.apply(this,i):i[0],a=e.cache;if(a.has(t))return a.get(t);var u=n.apply(this,i);return e.cache=a.set(t,u)||a,u};return e.cache=new(h.Cache||y),e}h.Cache=y;var G=500;function L(n){var r=h(n,function(i){return e.size===G&&e.clear(),i}),e=r.cache;return r}var B=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,J=/\\(\\)?/g,Q=L(function(n){var r=[];return n.charCodeAt(0)===46&&r.push(""),n.replace(B,function(e,i,t,a){r.push(t?a.replace(J,"$1"):i||e)}),r});function W(n){return n==null?"":S(n)}function P(n,r){return s(n)?n:Z(n,r)?[n]:Q(W(n))}function b(n){if(typeof n=="string"||c(n))return n;var r=n+"";return r=="0"&&1/n==-1/0?"-0":r}function on(n,r){r=P(r,n);for(var e=0,i=r.length;n!=null&&e<i;)n=n[b(r[e++])];return e&&e==i?n:void 0}var m=f?f.isConcatSpreadable:void 0;function Y(n){return s(n)||w(n)||!!(m&&n&&n[m])}function k(n,r,e,i,t){var a=-1,u=n.length;for(e||(e=Y),t||(t=[]);++a<u;){var o=n[a];e(o)?v(t,o):t[t.length]=o}return t}function j(n){var r=n==null?0:n.length;return r?k(n):[]}function sn(n){return F(K(n,void 0,j),n+"")}function nn(n,r){return n!=null&&r in Object(n)}function rn(n,r,e){r=P(r,n);for(var i=-1,t=r.length,a=!1;++i<t;){var u=b(r[i]);if(!(a=n!=null&&e(n,u)))break;n=n[u]}return a||++i!=t?a:(t=n==null?0:n.length,!!t&&C(t)&&T(u,t)&&(s(n)||w(n)))}function fn(n,r){return n!=null&&rn(n,r,nn)}export{un as a,on as b,P as c,H as d,Z as e,sn as f,_ as g,fn as h,I as i,K as o,F as s,b as t};
|