chainlesschain 0.158.0 → 0.159.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (179) hide show
  1. package/package.json +1 -1
  2. package/src/assets/web-panel/.build-hash +1 -1
  3. package/src/assets/web-panel/assets/{AIOps-9QEKGr43.js → AIOps-ztGJppiG.js} +1 -1
  4. package/src/assets/web-panel/assets/{ActionButton-BQElVBgD.js → ActionButton-DCuat-R-.js} +1 -1
  5. package/src/assets/web-panel/assets/{Analytics-DbZbFR_a.js → Analytics-m_EtU-RR.js} +2 -2
  6. package/src/assets/web-panel/assets/AppLayout-8HizVjee.css +1 -0
  7. package/src/assets/web-panel/assets/AppLayout-Crz8jbEC.js +1 -0
  8. package/src/assets/web-panel/assets/Audit-CNLWjMXN.js +1 -0
  9. package/src/assets/web-panel/assets/Audit-kU7vbN-D.css +1 -0
  10. package/src/assets/web-panel/assets/Backup-CggaSq9O.js +1 -0
  11. package/src/assets/web-panel/assets/Backup-DxLiJzmk.css +1 -0
  12. package/src/assets/web-panel/assets/{BaseInput-60t9IMEz.js → BaseInput-BssiYvl6.js} +1 -1
  13. package/src/assets/web-panel/assets/{Chat-3Kj2JQP4.js → Chat-tuVfpQUO.js} +1 -1
  14. package/src/assets/web-panel/assets/{Checkbox-Ba1Rf2Ea.js → Checkbox-BUUkXdQg.js} +1 -1
  15. package/src/assets/web-panel/assets/{Codegen-WiYmL3oB.js → Codegen-CHu-7YGr.js} +1 -1
  16. package/src/assets/web-panel/assets/{Col-D2zhpSqE.js → Col-2IaMFwmX.js} +1 -1
  17. package/src/assets/web-panel/assets/{Community-DgqmUGwT.js → Community-CYL7Fvjq.js} +1 -1
  18. package/src/assets/web-panel/assets/{Compact-D_dbJDbi.js → Compact-5yRVELhA.js} +1 -1
  19. package/src/assets/web-panel/assets/{Compliance-BVcVb-e2.js → Compliance-CKuIDJHK.js} +1 -1
  20. package/src/assets/web-panel/assets/{Cowork-pgKzBNDo.js → Cowork-CFkkMMDK.js} +4 -4
  21. package/src/assets/web-panel/assets/{Cron-Cs5QaKTP.js → Cron-DIfkI7vf.js} +2 -2
  22. package/src/assets/web-panel/assets/{Crosschain-pjWfIM8s.js → Crosschain-BkjY-lst.js} +1 -1
  23. package/src/assets/web-panel/assets/{DID-DQtsjz3X.js → DID-ChzRkgNy.js} +2 -2
  24. package/src/assets/web-panel/assets/{Dashboard-sqj42zKx.js → Dashboard-DKrbXVNn.js} +2 -2
  25. package/src/assets/web-panel/assets/{Dropdown-BM_ljd87.js → Dropdown-BYGoxH1z.js} +1 -1
  26. package/src/assets/web-panel/assets/{Federation-CId-3zn6.js → Federation-B8QX-IaA.js} +1 -1
  27. package/src/assets/web-panel/assets/{FormItemContext-CnzbixSE.js → FormItemContext-Be6TSNxz.js} +1 -1
  28. package/src/assets/web-panel/assets/{Git-B38QeOPF.js → Git-BBnGgbBR.js} +2 -2
  29. package/src/assets/web-panel/assets/{Governance-DrGkAjd1.js → Governance-CxUHZMsp.js} +1 -1
  30. package/src/assets/web-panel/assets/{Inference-BjkHB4sD.js → Inference-BlnOG71q.js} +1 -1
  31. package/src/assets/web-panel/assets/{KnowledgeGraph-Trs1XJFK.js → KnowledgeGraph-vkVq38kC.js} +1 -1
  32. package/src/assets/web-panel/assets/{Logs-B39LUZs9.js → Logs-Bxx7WARH.js} +2 -2
  33. package/src/assets/web-panel/assets/{Marketplace-BnpOoITi.js → Marketplace-Bh8ExT9_.js} +1 -1
  34. package/src/assets/web-panel/assets/McpTools-CTQrNVAQ.css +1 -0
  35. package/src/assets/web-panel/assets/McpTools-Djj_a3ko.js +5 -0
  36. package/src/assets/web-panel/assets/{Memory-BHXHpldt.js → Memory-DlgNgAov.js} +2 -2
  37. package/src/assets/web-panel/assets/{NLProgramming-B3BALajs.js → NLProgramming-BN3jaoen.js} +1 -1
  38. package/src/assets/web-panel/assets/Notes-DKkPfXlY.css +1 -0
  39. package/src/assets/web-panel/assets/Notes-De7mIkkV.js +7 -0
  40. package/src/assets/web-panel/assets/{Organization-CQ1X722j.js → Organization-B-98mdK2.js} +4 -4
  41. package/src/assets/web-panel/assets/{Overflow-DHKu8e8g.js → Overflow-G0I8IlY3.js} +1 -1
  42. package/src/assets/web-panel/assets/{OverrideContext-DEW2m7K6.js → OverrideContext-GHsJf9ok.js} +1 -1
  43. package/src/assets/web-panel/assets/{P2P-BflX74Hm.js → P2P-DIUgHZ1z.js} +2 -2
  44. package/src/assets/web-panel/assets/{Permissions-B2XrAUBW.js → Permissions-B8XycCVk.js} +4 -4
  45. package/src/assets/web-panel/assets/{Pipeline-C0K9-DnR.js → Pipeline-cUpETlXS.js} +1 -1
  46. package/src/assets/web-panel/assets/Portal-SsPhn64D.js +1 -0
  47. package/src/assets/web-panel/assets/Privacy-B6J89UBw.js +1 -0
  48. package/src/assets/web-panel/assets/{ProjectSettings-C34C7hFt.js → ProjectSettings-2Ftw0zt_.js} +2 -2
  49. package/src/assets/web-panel/assets/{Projects-DLvUzeIB.js → Projects-CcOdFpgr.js} +2 -2
  50. package/src/assets/web-panel/assets/{Providers-BFiMVWaM.js → Providers-D0r2qSf-.js} +2 -2
  51. package/src/assets/web-panel/assets/QuickAsk-CwsPpfkq.js +1 -0
  52. package/src/assets/web-panel/assets/{Recommend-BmUhysGC.js → Recommend-BYEDetJm.js} +1 -1
  53. package/src/assets/web-panel/assets/{Reputation-BlfSvJww.js → Reputation-Bli4hBGH.js} +1 -1
  54. package/src/assets/web-panel/assets/{Row-Dl74576S.js → Row-DTW9_BYi.js} +1 -1
  55. package/src/assets/web-panel/assets/{RssFeed-9_MkDUxZ.js → RssFeed-kwj_himl.js} +3 -3
  56. package/src/assets/web-panel/assets/{Search-CSRY_TYa.js → Search-DymcqASO.js} +1 -1
  57. package/src/assets/web-panel/assets/{Security-DfDoKfkl.js → Security-Bh3yvyNN.js} +3 -3
  58. package/src/assets/web-panel/assets/{Services-7Blny0Jc.js → Services-O4UZaYur.js} +2 -2
  59. package/src/assets/web-panel/assets/{Skeleton-6CF_3QUY.js → Skeleton-B82oQZTz.js} +1 -1
  60. package/src/assets/web-panel/assets/Skills-BfkrC05g.js +1 -0
  61. package/src/assets/web-panel/assets/{Sla-B93c8j92.js → Sla-DEs5XCIf.js} +1 -1
  62. package/src/assets/web-panel/assets/SpeechSettings-BWMhb10j.js +1 -0
  63. package/src/assets/web-panel/assets/SpeechSettings-CiKvsIyV.css +1 -0
  64. package/src/assets/web-panel/assets/{Tasks-Db9TRjE7.js → Tasks-CIBUb9M1.js} +1 -1
  65. package/src/assets/web-panel/assets/Templates-DAkzr0xS.css +1 -0
  66. package/src/assets/web-panel/assets/Templates-iqSuJY-O.js +1 -0
  67. package/src/assets/web-panel/assets/{Tenant-BXS8s6vl.js → Tenant-CLqZjkVq.js} +1 -1
  68. package/src/assets/web-panel/assets/{Tokens-CvmTVU7E.js → Tokens-Bwz8aQtK.js} +1 -1
  69. package/src/assets/web-panel/assets/Trigger-CxnChVoS.js +1 -0
  70. package/src/assets/web-panel/assets/{Trust-HMz40LfZ.js → Trust-Bp23lyZl.js} +1 -1
  71. package/src/assets/web-panel/assets/UkeySign-_VAMquoh.js +1 -0
  72. package/src/assets/web-panel/assets/{VideoEditing-DEhH42sI.js → VideoEditing-Bxqwg4zW.js} +1 -1
  73. package/src/assets/web-panel/assets/{Wallet-AGwfOdTM.js → Wallet-Cvht6Yrh.js} +4 -4
  74. package/src/assets/web-panel/assets/{WebAuthn-DK5tKWul.js → WebAuthn-DD4EomJu.js} +4 -4
  75. package/src/assets/web-panel/assets/WorkflowEditor-CEKNTS5G.css +1 -0
  76. package/src/assets/web-panel/assets/WorkflowEditor-CJy5e0fl.js +1 -0
  77. package/src/assets/web-panel/assets/{chat-CVn-r3oV.js → chat-DY27mJje.js} +1 -1
  78. package/src/assets/web-panel/assets/{collapseMotion-D3P4mRvK.js → collapseMotion-CyadT_6x.js} +1 -1
  79. package/src/assets/web-panel/assets/{colors-BiB5aDao.js → colors-B7fDvuJc.js} +1 -1
  80. package/src/assets/web-panel/assets/{compact-item-CHderV9n.js → compact-item-DgthOVXi.js} +1 -1
  81. package/src/assets/web-panel/assets/{createContext-DMZ-5dy2.js → createContext-Blw2vgkG.js} +1 -1
  82. package/src/assets/web-panel/assets/{hasIn-BKDBYP3s.js → hasIn-BfL1HJZl.js} +1 -1
  83. package/src/assets/web-panel/assets/{icons-ukMaZ3tx.js → icons-CJACPYXu.js} +4 -4
  84. package/src/assets/web-panel/assets/{index-DvI8Xtzv.js → index-00RNC3ZQ.js} +2 -2
  85. package/src/assets/web-panel/assets/{index-BlXskar6.js → index-B9B9Zbf3.js} +1 -1
  86. package/src/assets/web-panel/assets/index-BAsMNMbh.js +1 -0
  87. package/src/assets/web-panel/assets/{index-BfKFNptm.js → index-BB5y5Y0z.js} +3 -3
  88. package/src/assets/web-panel/assets/{index-CBYNsy51.js → index-BHnaIQEm.js} +1 -1
  89. package/src/assets/web-panel/assets/index-BVjDIZQ4.js +1 -0
  90. package/src/assets/web-panel/assets/index-BZeRnzuY.js +55 -0
  91. package/src/assets/web-panel/assets/{index-BgDX-tzO.js → index-BZfoAtZC.js} +1 -1
  92. package/src/assets/web-panel/assets/index-Bl2nXm2J.js +13 -0
  93. package/src/assets/web-panel/assets/{index-B7fivpG2.js → index-BsleJWGy.js} +2 -2
  94. package/src/assets/web-panel/assets/{index-7fxCGMoL.js → index-BuEOhTAw.js} +5 -5
  95. package/src/assets/web-panel/assets/{index-BRRFK-im.js → index-Bw1dwHWm.js} +1 -1
  96. package/src/assets/web-panel/assets/{index-BBk2e7vJ.js → index-Bw_UV2ez.js} +1 -1
  97. package/src/assets/web-panel/assets/index-C8GYpC65.js +1 -0
  98. package/src/assets/web-panel/assets/{index-BVOI707f.js → index-CBHlKa-J.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-CEpcKl17.js → index-CL-7KCFI.js} +2 -2
  100. package/src/assets/web-panel/assets/{index-BBWUR4u4.js → index-CiN4NEAa.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-DtDFSCfE.js → index-CqjUUbil.js} +1 -1
  102. package/src/assets/web-panel/assets/{index-DvfAkHw8.js → index-Cqtt1N0F.js} +1 -1
  103. package/src/assets/web-panel/assets/index-D1QP9Ue1.js +1 -0
  104. package/src/assets/web-panel/assets/index-D6BUjL6I.js +1 -0
  105. package/src/assets/web-panel/assets/{index-BadelvSE.js → index-DN7ywgBJ.js} +1 -1
  106. package/src/assets/web-panel/assets/index-DasW8LIs.js +1 -0
  107. package/src/assets/web-panel/assets/{index-D3lD9wgX.js → index-Dd9McFt_.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-DZ8MjPLC.js → index-DdzLEdL6.js} +1 -1
  109. package/src/assets/web-panel/assets/index-DhML6F3z.js +1 -0
  110. package/src/assets/web-panel/assets/{index-Ncxqj2UN.js → index-DjN0nHiV.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-7pqZqPD2.js → index-DjhWpiZW.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-BryAkWUJ.js → index-DouFuKIR.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-CUT3Nmzx.js → index-DyRzaN4b.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-BjSojphX.js → index-DzWwjWYN.js} +1 -1
  115. package/src/assets/web-panel/assets/index-Dza_w3kG.js +1 -0
  116. package/src/assets/web-panel/assets/{index-AIdelwOe.js → index-Q4qgOtOe.js} +1 -1
  117. package/src/assets/web-panel/assets/index-Vit9TJBu.js +36 -0
  118. package/src/assets/web-panel/assets/{index-_sntSncx.js → index-lkJllVbJ.js} +3 -3
  119. package/src/assets/web-panel/assets/{index-CbpCY2ch.js → index-uMWaXVtR.js} +2 -2
  120. package/src/assets/web-panel/assets/{index-uujjC_4g.js → index-uwh_ikIt.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-C1p_dZw0.js → index-x8iHfZRd.js} +3 -3
  122. package/src/assets/web-panel/assets/{initDefaultProps-B2vQoQga.js → initDefaultProps-BeWIEzBr.js} +1 -1
  123. package/src/assets/web-panel/assets/{motion-D2eluOJu.js → motion-CIQOKmi6.js} +3 -3
  124. package/src/assets/web-panel/assets/{move-CgcvSoZ7.js → move-ZgRPlBji.js} +1 -1
  125. package/src/assets/web-panel/assets/{omit-DvLh7wH1.js → omit-BS0H_YEP.js} +1 -1
  126. package/src/assets/web-panel/assets/{pickAttrs-BsseBclw.js → pickAttrs-BOGgGau8.js} +1 -1
  127. package/src/assets/web-panel/assets/{placementArrow-XLLtr9qD.js → placementArrow--c5TQkDQ.js} +1 -1
  128. package/src/assets/web-panel/assets/{responsiveObserve-ByCb5zZK.js → responsiveObserve-CrHOX7jp.js} +1 -1
  129. package/src/assets/web-panel/assets/{slide-CeP5JCiZ.js → slide-Dd2mJUD0.js} +1 -1
  130. package/src/assets/web-panel/assets/{statusUtils-DMVoo96t.js → statusUtils-5QFvAofV.js} +1 -1
  131. package/src/assets/web-panel/assets/{styleChecker-Cz5mJgc8.js → styleChecker-CiDrXnbi.js} +1 -1
  132. package/src/assets/web-panel/assets/{transition-DSe9CgZe.js → transition-CVd2ueaJ.js} +1 -1
  133. package/src/assets/web-panel/assets/{useConfigInject-DCcT0grw.js → useConfigInject-DIkkDpt1.js} +2 -2
  134. package/src/assets/web-panel/assets/useFlexGapSupport-rrtj6f1h.js +1 -0
  135. package/src/assets/web-panel/assets/useFs-CK8VYPus.js +1 -0
  136. package/src/assets/web-panel/assets/{useMergedState-DbHXwBgv.js → useMergedState-CLY-UHry.js} +1 -1
  137. package/src/assets/web-panel/assets/{useRefs-DRyTVik7.js → useRefs-HzOoMkZk.js} +1 -1
  138. package/src/assets/web-panel/assets/useShellMode-CgR0wCYM.js +1 -0
  139. package/src/assets/web-panel/assets/{useState-DoAhV80c.js → useState-yWVBuz1S.js} +1 -1
  140. package/src/assets/web-panel/assets/{vendor-BVetwVfk.js → vendor-D0Qjn73K.js} +1 -1
  141. package/src/assets/web-panel/assets/vnode-xRp-KMjS.js +1 -0
  142. package/src/assets/web-panel/assets/ws-4ur1fGsk.js +1 -0
  143. package/src/assets/web-panel/assets/{zoom-CDfM_sRk.js → zoom-CrI_kdTW.js} +1 -1
  144. package/src/assets/web-panel/index.html +3 -3
  145. package/src/gateways/ws/ws-session-gateway.js +12 -1
  146. package/src/lib/listen-with-port-fallback.js +103 -0
  147. package/src/runtime/agent-runtime.js +80 -18
  148. package/src/assets/web-panel/assets/AppLayout-BbfBwVfE.js +0 -1
  149. package/src/assets/web-panel/assets/AppLayout-CKMl4NLf.css +0 -1
  150. package/src/assets/web-panel/assets/Audit-DzddAZVx.js +0 -1
  151. package/src/assets/web-panel/assets/Audit-L4_ApS01.css +0 -1
  152. package/src/assets/web-panel/assets/Backup-D46qSgzQ.js +0 -1
  153. package/src/assets/web-panel/assets/Backup-fZqtfC1m.css +0 -1
  154. package/src/assets/web-panel/assets/McpTools-CyhSLDwf.css +0 -1
  155. package/src/assets/web-panel/assets/McpTools-DbwkdBUE.js +0 -4
  156. package/src/assets/web-panel/assets/Notes-BG69sJKi.css +0 -1
  157. package/src/assets/web-panel/assets/Notes-u6lLTv0t.js +0 -2
  158. package/src/assets/web-panel/assets/Portal-CHsntPCQ.js +0 -1
  159. package/src/assets/web-panel/assets/Privacy-BKPoZngH.js +0 -1
  160. package/src/assets/web-panel/assets/Skills-DowQcRe1.js +0 -1
  161. package/src/assets/web-panel/assets/Templates-DJ_hvs5c.js +0 -1
  162. package/src/assets/web-panel/assets/Templates-DOY_oZnm.css +0 -1
  163. package/src/assets/web-panel/assets/Trigger-BenSsaoN.js +0 -1
  164. package/src/assets/web-panel/assets/WorkflowEditor-D5bX6woe.css +0 -1
  165. package/src/assets/web-panel/assets/WorkflowEditor-vlujdL6I.js +0 -1
  166. package/src/assets/web-panel/assets/index-A4RpHMOa.js +0 -1
  167. package/src/assets/web-panel/assets/index-B5oebI6W.js +0 -1
  168. package/src/assets/web-panel/assets/index-D3PGpBPm.js +0 -1
  169. package/src/assets/web-panel/assets/index-D5Beu9ZA.js +0 -1
  170. package/src/assets/web-panel/assets/index-DRRzH4Ge.js +0 -13
  171. package/src/assets/web-panel/assets/index-DRcTAUJA.js +0 -1
  172. package/src/assets/web-panel/assets/index-DfcXDy2A.js +0 -36
  173. package/src/assets/web-panel/assets/index-DyXslU_B.js +0 -1
  174. package/src/assets/web-panel/assets/index-MoLxDrkb.js +0 -55
  175. package/src/assets/web-panel/assets/index-YgC7QI1N.js +0 -1
  176. package/src/assets/web-panel/assets/index-yMt4C1Gh.js +0 -1
  177. package/src/assets/web-panel/assets/useFlexGapSupport-BZkoDuF3.js +0 -1
  178. package/src/assets/web-panel/assets/vnode-Dexy2NN9.js +0 -1
  179. package/src/assets/web-panel/assets/ws-Bv7YH0VB.js +0 -1
@@ -1 +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
+ import{u as kt}from"./ws-4ur1fGsk.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-BB5y5Y0z.js";import{_ as ht,ah as St,o as Ne,E as Fe,G as Re,K as ge,a9 as Ve,ab as At}from"./icons-CJACPYXu.js";import{E as Ct}from"./useConfigInject-DIkkDpt1.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-D0Qjn73K.js";import"./index-Vit9TJBu.js";import"./transition-CVd2ueaJ.js";import"./Keyframes-C7fCrnlS.js";import"./Portal-SsPhn64D.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};
@@ -0,0 +1 @@
1
+ import{u as q}from"./ws-4ur1fGsk.js";import{u as A}from"./useShellMode-CgR0wCYM.js";import{a8 as F,a7 as H,o as G,a9 as I,aa as J,ab as R}from"./icons-CJACPYXu.js";import{F as g,D as n,J as l,c as r,x as o,m as d,G as c,q as y,j as T,r as b,v as t,I as u,u as x,H as P,L as Q}from"./vendor-D0Qjn73K.js";function X(){const z=q();async function S(_,s={}){if(typeof _!="string"||_.length===0)throw new Error("data is required");const p=typeof s.onStage=="function"?s.onStage:()=>{};return z.sendStream({type:"ukey.sign",data:_},{onChunk:i=>{i&&typeof i.stage=="string"&&p(i.stage)},idleMs:s.idleMs??6e4,signal:s.signal})}return{sign:S}}const Y={style:{"margin-bottom":"24px"}},Z={class:"page-sub"},$={style:{"margin-bottom":"12px"}},ee={style:{display:"flex","justify-content":"space-between","align-items":"center"}},te={style:{display:"flex",gap:"8px","align-items":"center",color:"var(--text-muted)","font-size":"11px"}},oe={key:0},ae={key:1,style:{color:"#1677ff"}},ne={key:0},se={style:{"margin-bottom":"12px"}},le={style:{color:"var(--text-muted)","font-size":"11px","margin-bottom":"4px"}},re={style:{background:"var(--bg-card-hover)",padding:"8px","border-radius":"4px","font-size":"11px","word-break":"break-all","white-space":"pre-wrap",margin:"0"}},ie={key:1},ue={style:{color:"var(--text-muted)","font-size":"12px"}},de={style:{"font-size":"11px",color:"#999","margin-top":"4px","font-family":"monospace"}},ce={key:2,style:{background:"#2a1517",border:"1px solid #5c2426",padding:"8px","border-radius":"4px"}},pe={style:{color:"#ff7875","font-size":"11px",margin:"0","white-space":"pre-wrap"}},ve={key:3,style:{"margin-top":"16px"}},me={style:{color:"var(--text-muted)","font-size":"10px","margin-left":"4px"}},be={__name:"UkeySign",setup(z){const S=X(),_=T(()=>A().isEmbedded),s=b(""),p=b(!1),i=b(""),k=b([]),a=b(null),v=b("");let w=null;function E(m){return{pre_check:"检查驱动 / 设备状态",signing:"正在与硬件通信,等待用户确认..."}[m]||m}function B(m){return{driver_not_initialized:"驱动未初始化",device_locked:"设备已锁定",no_result:"无结果"}[m]||m||"失败"}async function U(){if(p.value||!s.value.trim())return;p.value=!0,a.value=null,v.value="",i.value="",k.value=[];const m=Date.now();w=new AbortController;try{const e=await S.sign(s.value,{onStage:f=>{i.value=f,k.value.push({stage:f,t:Date.now()-m})},signal:w.signal});a.value=e}catch(e){v.value=e?.message||String(e)}finally{p.value=!1,i.value="",w=null}}function D(){w&&w.abort(new Error("aborted"))}function L(){a.value=null,v.value="",k.value=[],i.value=""}return(m,e)=>{const f=y("a-tag"),M=y("a-alert"),N=y("a-textarea"),h=y("a-button"),V=y("a-space"),O=y("a-card"),K=y("a-timeline-item"),W=y("a-timeline");return t(),g("div",null,[n("div",Y,[e[3]||(e[3]=n("h2",{class:"page-title"},"U-Key 签名",-1)),n("p",Z,[e[2]||(e[2]=l(" 硬件签名 demo — 走 ukey.sign WS topic,仅常规签名(非高危操作)。 ",-1)),r(f,{color:"orange",style:{"margin-left":"8px","font-size":"10px"}},{default:o(()=>[...e[1]||(e[1]=[l("仅桌面 web-shell",-1)])]),_:1})])]),_.value?c("",!0):(t(),d(M,{key:0,type:"warning","show-icon":"",message:"此页面仅在桌面 web-shell 模式下可用",description:"ukey.sign 由 Electron 主进程的 UKeyManager 提供 — 浏览器模式无法访问硬件。请使用桌面应用打开。",style:{"margin-bottom":"16px"}})),r(O,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[n("div",$,[e[4]||(e[4]=n("div",{style:{color:"var(--text-muted)","font-size":"11px","margin-bottom":"4px"}},"待签名数据",-1)),r(N,{value:s.value,"onUpdate:value":e[0]||(e[0]=C=>s.value=C),rows:4,placeholder:"任意字符串(建议是已哈希的摘要,最多 64 KiB)",disabled:p.value||!_.value},null,8,["value","disabled"])]),n("div",ee,[n("div",te,[s.value?(t(),g("span",oe,u(s.value.length)+" 字符",1)):c("",!0),i.value?(t(),g("span",ae,[r(x(F),{spin:!0}),l(" "+u(E(i.value)),1)])):c("",!0)]),r(V,null,{default:o(()=>[a.value||v.value?(t(),d(h,{key:0,disabled:p.value,onClick:L},{default:o(()=>[...e[5]||(e[5]=[l("清空",-1)])]),_:1},8,["disabled"])):c("",!0),p.value?(t(),d(h,{key:1,danger:"",onClick:D},{icon:o(()=>[r(x(H))]),default:o(()=>[e[6]||(e[6]=l(" 取消 ",-1))]),_:1})):(t(),d(h,{key:2,type:"primary",disabled:!s.value.trim()||!_.value,onClick:U},{icon:o(()=>[r(x(G))]),default:o(()=>[e[7]||(e[7]=l(" 签名 ",-1))]),_:1},8,["disabled"]))]),_:1})])]),_:1}),a.value||v.value?(t(),d(O,{key:1,title:"结果",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-top":"16px"}},{extra:o(()=>[a.value?.success?(t(),d(f,{key:0,color:"green"},{default:o(()=>[r(x(I)),e[8]||(e[8]=l(" 签名成功 ",-1))]),_:1})):a.value&&!a.value.success?(t(),d(f,{key:1,color:"orange"},{default:o(()=>[r(x(J)),l(" "+u(B(a.value.reason)),1)]),_:1})):v.value?(t(),d(f,{key:2,color:"red"},{default:o(()=>[r(x(R)),e[9]||(e[9]=l(" 协议错误 ",-1))]),_:1})):c("",!0)]),default:o(()=>[a.value?.success?(t(),g("div",ne,[n("div",se,[n("div",le,"签名("+u(a.value.algorithm||"unknown")+")",1),n("pre",re,u(a.value.signature),1)])])):a.value?(t(),g("div",ie,[n("div",ue,u(a.value.message||"签名未完成"),1),n("div",de," reason: "+u(a.value.reason||"unknown"),1)])):c("",!0),v.value?(t(),g("div",ce,[n("pre",pe,u(v.value),1)])):c("",!0),k.value.length?(t(),g("div",ve,[e[11]||(e[11]=n("div",{style:{color:"var(--text-muted)","font-size":"11px","margin-bottom":"4px"}},"阶段时间线",-1)),r(W,null,{default:o(()=>[(t(!0),g(P,null,Q(k.value,(C,j)=>(t(),d(K,{key:j},{color:o(()=>[...e[10]||(e[10]=[l("blue",-1)])]),default:o(()=>[l(" "+u(E(C.stage))+" ",1),n("span",me,u(C.t)+"ms",1)]),_:2},1024))),128))]),_:1})])):c("",!0)]),_:1})):c("",!0)])}}};export{be as default};
@@ -1 +1 @@
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
+ import{u as Z}from"./ws-4ur1fGsk.js";import{_ as tt}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{_ as et}from"./icons-CJACPYXu.js";import{a as A}from"./index-BB5y5Y0z.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-D0Qjn73K.js";import"./index-Vit9TJBu.js";import"./useConfigInject-DIkkDpt1.js";import"./transition-CVd2ueaJ.js";import"./Keyframes-C7fCrnlS.js";import"./Portal-SsPhn64D.js";import"./index-U4Zd5IK6.js";const 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"),K=c("a-input-number"),B=c("a-row"),Q=c("a-form"),X=c("a-badge"),Y=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(Q,{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(K,{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(X,{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(Y,{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-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
+ import{u as De}from"./ws-4ur1fGsk.js";import{_ as Te}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{a as v}from"./index-BB5y5Y0z.js";import{_ as K,w as P,t as $e,ah as re,a6 as ie}from"./icons-CJACPYXu.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-D0Qjn73K.js";import"./index-Vit9TJBu.js";import"./useConfigInject-DIkkDpt1.js";import"./transition-CVd2ueaJ.js";import"./Keyframes-C7fCrnlS.js";import"./Portal-SsPhn64D.js";import"./index-U4Zd5IK6.js";const 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"}},Qe={style:{"margin-top":"16px"}},Xe={style:{"font-family":"monospace",color:"#ccc"}},Ye={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),Q=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){Q.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{Q.value=""}}const N=f(!1),X=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}X.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{X.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"),Y=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(Y,{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:Q.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(Y,{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":X.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(Y)])):(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",Qe,[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",Xe,y(c.assetId),1)]),_:1}),t(oe,{label:"目标地址"},{default:s(()=>[x("span",Ye,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-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(`
1
+ import{u as Ie}from"./ws-4ur1fGsk.js";import{_ as Oe}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{a as u}from"./index-BB5y5Y0z.js";import{_ as le,ah as Te,au as ze,K as oe,p as Le,L as ne}from"./icons-CJACPYXu.js";import{l as $e,F as y,D as _,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-D0Qjn73K.js";import"./index-Vit9TJBu.js";import"./useConfigInject-DIkkDpt1.js";import"./transition-CVd2ueaJ.js";import"./Keyframes-C7fCrnlS.js";import"./Portal-SsPhn64D.js";import"./index-U4Zd5IK6.js";const 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)"}},Ge={key:0,style:{"margin-top":"16px"}},He={style:{background:"var(--bg-base)",padding:"16px","border-radius":"6px",border:"1px solid var(--border-color)"}},Ye={__name:"WebAuthn",setup(Ze){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"&&!H.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 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};
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 G=r(!1),H=r(!1),w=r(!1),U=r(!1),A=r(""),Y=r(!1),S=r([]);async function ee(){G.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),H.value=!0}catch{w.value=!1,H.value=!0}finally{G.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(){Y.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{Y.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"),_e=s("a-empty"),ge=s("a-table"),Z=s("a-input"),z=s("a-form-item"),te=s("a-form"),ae=s("a-modal"),Q=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,[_("div",De,[e[11]||(e[11]=_("div",null,[_("h2",{class:"page-title"},"认证管理"),_("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(Q,{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(ge,{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:g})=>[n.key==="id"?(i(),y("span",{key:0,style:{color:"#e0e0e0","font-family":"monospace","font-size":"12px"},title:g.id},m(ue(g.id)),9,Ne)):h("",!0),n.key==="name"?(i(),y("span",We,m(g.name),1)):h("",!0),n.key==="type"?(i(),I(d,{key:2,color:"blue"},{default:l(()=>[c(m(g.type||"public-key"),1)]),_:2},1024)):h("",!0),n.key==="createdAt"?(i(),y("span",Re,m(g.createdAt||"-"),1)):h("",!0),n.key==="lastUsed"?(i(),y("span",je,m(g.lastUsed||"-"),1)):h("",!0),n.key==="actions"?(i(),I(C,{key:5,title:"确定要删除此凭证吗?","ok-text":"确定","cancel-text":"取消",onConfirm:Qe=>ve(g)},{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(_e,{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(Z,{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(Q,{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(()=>[_("span",Me,m(p.value.clientId||"-"),1)]),_:1}),a(R,{label:"Redirect URL"},{default:l(()=>[_("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}),_("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(Z,{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(Z,{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(Q,{key:"2fa"},{tab:l(()=>[a(k(ne)),e[20]||(e[20]=c(" 双因素认证 ",-1))]),default:l(()=>[G.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(()=>[_("div",Fe,[e[21]||(e[21]=_("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,[_("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]=_("p",{style:{color:"var(--text-secondary)","margin-bottom":"12px"}}," 恢复码可在丢失 TOTP 设备时用于登录。请妥善保管。 ",-1)),a(o,{loading:Y.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",Ge,[a(Ue,{type:"warning","show-icon":"",style:{"margin-bottom":"12px"},message:"请立即保存这些恢复码,关闭后将无法再次查看。"}),_("div",He,[(i(!0),y(j,null,se(S.value,(n,g)=>(i(),y("div",{key:g,style:{"font-family":"monospace","font-size":"14px",color:"#e0e0e0",padding:"4px 0","letter-spacing":"2px"}},m(g+1)+". "+m(n),1))),128))])])):h("",!0)]),_:1})],64))]),_:1})]),_:1},8,["activeKey"])])}}},dt=Oe(Ye,[["__scopeId","data-v-a4bec262"]]);export{dt as default};
@@ -0,0 +1 @@
1
+ .step-card[data-v-fbaffac8]{background:#fafafa;border:1px solid #eee;border-radius:4px;padding:12px;margin-bottom:12px}.active[data-v-fbaffac8]{background:#e3f2fd}.page-title[data-v-fbaffac8]{margin:0;font-size:20px}.page-sub[data-v-fbaffac8]{margin:4px 0 0;color:#888;font-size:13px}
@@ -0,0 +1 @@
1
+ import{k as K,r as x,l as Y,F as f,D as g,c as n,x as o,q as c,v as d,J as v,u as C,m as J,E as Q,I as m,P as X,H as V,L as D,G as N,j as Z}from"./vendor-D0Qjn73K.js";import{u as ee}from"./ws-4ur1fGsk.js";import{u as te}from"./useFs-CK8VYPus.js";import{_ as ae}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{ah as se,_ as ne}from"./icons-CJACPYXu.js";import{a as y}from"./index-BB5y5Y0z.js";import"./useShellMode-CgR0wCYM.js";import"./index-Vit9TJBu.js";import"./useConfigInject-DIkkDpt1.js";import"./transition-CVd2ueaJ.js";import"./Keyframes-C7fCrnlS.js";import"./Portal-SsPhn64D.js";import"./index-U4Zd5IK6.js";const oe=K("workflow",()=>{const p=ee(),l=x([]),a=x(null),b=x([]),k=x("idle"),S=x(!1),z=x(null);async function E(){S.value=!0,z.value=null;try{await p.waitConnected();const t=await p.sendRaw({type:"workflow-list"});return l.value=Array.isArray(t.workflows)?t.workflows:[],l.value}catch(t){throw z.value=t.message,t}finally{S.value=!1}}async function R(t){await p.waitConnected();const e=await p.sendRaw({type:"workflow-get",id:t});return a.value=e.workflow||null,a.value}async function A(t){await p.waitConnected();const e=await p.sendRaw({type:"workflow-save",workflow:t});if(e.saved){const u=l.value.findIndex(r=>r.id===t.id);u>=0?l.value.splice(u,1,t):l.value.push(t)}return e}async function L(t){await p.waitConnected();const e=await p.sendRaw({type:"workflow-remove",id:t});return e.removed&&(l.value=l.value.filter(u=>u.id!==t)),e}async function j(t,{onEvent:e}={}){await p.waitConnected(),b.value=[],k.value="running";const u=p.onMessage(r=>{!r||typeof r.type!="string"||r.type.startsWith("workflow:")&&(b.value.push(r),e&&e(r),r.type==="workflow:done"&&(k.value=r.status||"completed"))});try{return await p.sendRaw({type:"workflow-run",id:t},12e4)}catch(r){throw k.value="failed",z.value=r.message,r}finally{u()}}function q(t){const e=[];if(!t||typeof t!="object")return{valid:!1,errors:["workflow must be an object"]};if(t.id||e.push("id required"),t.name||e.push("name required"),!Array.isArray(t.steps)||t.steps.length===0)e.push("steps required");else{let U=function(i){_.set(i,I);for(const w of r.get(i)||[]){if(!r.has(w)){e.push(`unknown dependency: ${w}`);continue}const W=_.get(w);if(W===I){e.push(`cycle via ${i} -> ${w}`);return}W===O&&U(w)}_.set(i,M)};const u=new Set;for(const i of t.steps)i.id||e.push("step.id required"),u.has(i.id)&&e.push(`duplicate step id: ${i.id}`),u.add(i.id);const r=new Map;for(const i of t.steps)r.set(i.id,i.dependsOn||[]);const O=0,I=1,M=2,_=new Map([...r.keys()].map(i=>[i,O]));for(const i of r.keys())_.get(i)===O&&U(i)}return{valid:e.length===0,errors:e}}function B(t){return JSON.stringify(t,null,2)}return{workflows:l,current:a,runEvents:b,runStatus:k,loading:S,error:z,list:E,get:R,save:A,remove:L,run:j,validateLocal:q,exportJson:B}}),le={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},re={style:{flex:"1"}},ie={style:{"font-weight":"500"}},ue={style:{color:"#888","font-size":"12px"}},de={style:{color:"#888","font-size":"12px"}},ce={key:0,style:{"margin-top":"12px",color:"#d32f2f"}},pe={style:{color:"#1976d2"}},fe={key:0},ve={key:1},me={key:2,style:{color:"#555"}},ye={__name:"WorkflowEditor",setup(p){const l=oe(),a=x(null),b=x(!1),k=Z(()=>a.value?l.validateLocal(a.value):null);Y(()=>l.list().catch(()=>{}));function S(){a.value={id:"",name:"",description:"",steps:[{id:"step1",message:"",dependsOn:[]}]}}async function z(t){try{const e=await l.get(t);e&&(a.value=JSON.parse(JSON.stringify(e)),a.value.steps||(a.value.steps=[]))}catch(e){y.error(`加载失败: ${e.message}`)}}function E(){a.value.steps||(a.value.steps=[]),a.value.steps.push({id:`step${a.value.steps.length+1}`,message:"",dependsOn:[]})}function R(t){a.value.steps.splice(t,1)}async function A(){const t=l.validateLocal(a.value);if(!t.valid){y.error(t.errors[0]);return}try{await l.save(a.value),y.success("保存成功")}catch(e){y.error(`保存失败: ${e.message}`)}}async function L(t){try{await l.remove(t),a.value?.id===t&&(a.value=null),y.success("已删除")}catch(e){y.error(`删除失败: ${e.message}`)}}async function j(){b.value=!0;try{await l.run(a.value.id),y.success(`运行完成:${l.runStatus}`)}catch(t){y.error(`运行失败: ${t.message}`)}finally{b.value=!1}}const q=te();async function B(){try{const t=await q.saveJson(JSON.parse(l.exportJson(a.value)),{defaultPath:`${a.value.id||"workflow"}.json`});if(t.canceled)return;t.path&&y.success(`已保存到 ${t.path}`)}catch(t){y.error(`导出失败: ${t.message}`)}}return(t,e)=>{const u=c("a-button"),r=c("a-space"),O=c("a-empty"),I=c("a-list-item"),M=c("a-list"),_=c("a-card"),U=c("a-col"),i=c("a-input"),w=c("a-form-item"),W=c("a-divider"),F=c("a-select"),P=c("a-input-group"),G=c("a-textarea"),H=c("a-form"),T=c("a-row");return d(),f("div",null,[g("div",le,[e[6]||(e[6]=g("div",null,[g("h2",{class:"page-title"},"工作流编辑器"),g("p",{class:"page-sub"},"创建、编辑、运行 Cowork 工作流(N1 — 初版:表单编辑,画布视图规划中)")],-1)),n(r,null,{default:o(()=>[n(u,{onClick:S,type:"primary"},{icon:o(()=>[n(C(se))]),default:o(()=>[e[4]||(e[4]=v(" 新建 ",-1))]),_:1}),n(u,{ghost:"",loading:C(l).loading,onClick:e[0]||(e[0]=s=>C(l).list())},{icon:o(()=>[n(C(ne))]),default:o(()=>[e[5]||(e[5]=v(" 刷新 ",-1))]),_:1},8,["loading"])]),_:1})]),n(T,{gutter:16},{default:o(()=>[n(U,{span:8},{default:o(()=>[n(_,{title:"工作流列表",size:"small"},{default:o(()=>[C(l).workflows.length?(d(),J(M,{key:1,"data-source":C(l).workflows,size:"small"},{renderItem:o(({item:s})=>[n(I,{class:Q({active:a.value?.id===s.id}),style:{cursor:"pointer"},onClick:$=>z(s.id)},{default:o(()=>[g("div",re,[g("div",ie,m(s.name||s.id),1),g("div",ue,m((s.steps||[]).length)+" 步骤 ",1)]),n(u,{size:"small",danger:"",type:"text",onClick:X($=>L(s.id),["stop"])},{default:o(()=>[...e[7]||(e[7]=[v("删除",-1)])]),_:1},8,["onClick"])]),_:2},1032,["class","onClick"])]),_:1},8,["data-source"])):(d(),J(O,{key:0,description:"暂无工作流"}))]),_:1})]),_:1}),n(U,{span:16},{default:o(()=>[a.value?(d(),J(_,{key:0,size:"small"},{title:o(()=>[v(" 编辑: "+m(a.value.name||a.value.id),1)]),extra:o(()=>[n(r,null,{default:o(()=>[n(u,{size:"small",onClick:B},{default:o(()=>[...e[8]||(e[8]=[v("导出 JSON",-1)])]),_:1}),n(u,{size:"small",loading:b.value,onClick:j,disabled:!a.value.id},{default:o(()=>[...e[9]||(e[9]=[v(" 运行 ",-1)])]),_:1},8,["loading","disabled"]),n(u,{size:"small",type:"primary",onClick:A},{default:o(()=>[...e[10]||(e[10]=[v("保存",-1)])]),_:1})]),_:1})]),default:o(()=>[n(H,{layout:"vertical",model:a.value},{default:o(()=>[n(w,{label:"ID (唯一标识)"},{default:o(()=>[n(i,{value:a.value.id,"onUpdate:value":e[1]||(e[1]=s=>a.value.id=s),placeholder:"my-workflow"},null,8,["value"])]),_:1}),n(w,{label:"名称"},{default:o(()=>[n(i,{value:a.value.name,"onUpdate:value":e[2]||(e[2]=s=>a.value.name=s),placeholder:"我的工作流"},null,8,["value"])]),_:1}),n(w,{label:"描述"},{default:o(()=>[n(i,{value:a.value.description,"onUpdate:value":e[3]||(e[3]=s=>a.value.description=s),placeholder:"(可选)"},null,8,["value"])]),_:1}),n(W,null,{default:o(()=>[...e[11]||(e[11]=[v("步骤",-1)])]),_:1}),(d(!0),f(V,null,D(a.value.steps,(s,$)=>(d(),f("div",{key:$,class:"step-card"},[n(r,{style:{width:"100%","margin-bottom":"8px"},direction:"vertical"},{default:o(()=>[n(P,{compact:""},{default:o(()=>[n(i,{value:s.id,"onUpdate:value":h=>s.id=h,placeholder:"step-id",style:{width:"30%"}},null,8,["value","onUpdate:value"]),n(F,{value:s.dependsOn,"onUpdate:value":h=>s.dependsOn=h,mode:"tags",placeholder:"dependsOn",style:{width:"70%"}},null,8,["value","onUpdate:value"])]),_:2},1024),n(G,{value:s.message,"onUpdate:value":h=>s.message=h,rows:2,placeholder:"任务 prompt(支持 \\${step.<id>.summary} 占位)"},null,8,["value","onUpdate:value"]),n(i,{value:s.when,"onUpdate:value":h=>s.when=h,placeholder:"when 条件(可选,如 step.s1.status === 'completed')"},null,8,["value","onUpdate:value"]),n(r,null,{default:o(()=>[n(u,{size:"small",danger:"",onClick:h=>R($)},{default:o(()=>[...e[12]||(e[12]=[v("删除",-1)])]),_:1},8,["onClick"]),g("span",de," step "+m($+1)+" / "+m(a.value.steps.length),1)]),_:2},1024)]),_:2},1024)]))),128)),n(u,{block:"",onClick:E},{default:o(()=>[...e[13]||(e[13]=[v("+ 添加步骤",-1)])]),_:1})]),_:1},8,["model"]),k.value&&!k.value.valid?(d(),f("div",ce,[(d(!0),f(V,null,D(k.value.errors,s=>(d(),f("div",{key:s},"• "+m(s),1))),128))])):N("",!0)]),_:1})):(d(),J(_,{key:1,size:"small"},{default:o(()=>[n(O,{description:"从左侧选择工作流或新建一个"})]),_:1})),C(l).runEvents.length?(d(),J(_,{key:2,size:"small",title:"运行日志",style:{"margin-top":"12px"}},{default:o(()=>[(d(!0),f(V,null,D(C(l).runEvents,(s,$)=>(d(),f("div",{key:$,style:{"font-family":"monospace","font-size":"12px","margin-bottom":"4px"}},[g("span",pe,m(s.type),1),s.stepId?(d(),f("span",fe," ["+m(s.stepId)+"]",1)):N("",!0),s.status?(d(),f("span",ve," → "+m(s.status),1)):N("",!0),s.summary?(d(),f("span",me," — "+m(s.summary),1)):N("",!0)]))),128))]),_:1})):N("",!0)]),_:1})]),_:1})])}}},Je=ae(ye,[["__scopeId","data-v-fbaffac8"]]);export{Je as default};
@@ -1 +1 @@
1
- import{k as N,r as D,a as y,j as U}from"./vendor-BVetwVfk.js";import{u as m}from"./ws-Bv7YH0VB.js";const T="新对话",q="新 Agent",B={"assistant.delta":"response-token","assistant.final":"response-complete","assistant.message":"response-complete","tool.call.started":"tool-executing","tool.call.completed":"tool-result","tool.call.failed":"tool-result","slot.filling":"question","approval.requested":"question",error:"error"},F=N("chat",()=>{const i=D([]),h=D(null),u=y({}),a=y({}),d=y({}),f=y({});let A=null;const C=new Set;function g(t){return u[t]||(u[t]=[]),u[t]}function E(t){return!!(t&&f[t])}function p(t,e){t&&(f[t]=!!e)}function w(t){if(!t?.id)return;const e=i.value.find(o=>o.id===t.id);if(e){Object.assign(e,t);return}i.value.unshift(t)}function S(t,e=m()){u[t]||(u[t]=[]),a[t]||(a[t]={content:"",active:!1}),f[t]==null&&(f[t]=!1),!C.has(t)&&(C.add(t),e.onSession(t,o=>L(t,o)))}function v(t=m()){A||(A=t.onRuntimeEvent(e=>{const o=e.payload||{},s=o.record||{};if(e.type==="session:start"){const n=o.sessionType||s.type||"chat";p(o.sessionId,!1),w({id:o.sessionId,type:n,provider:s.provider||null,model:s.model||null,projectRoot:s.projectRoot||null,status:s.status||"created",title:n==="chat"?T:q,createdAt:Date.now(),messageCount:s.messageCount??0})}else if(e.type==="session:resume"){const n=o.sessionId;if(!n)return;Array.isArray(o.history)&&(u[n]=o.history.map(l=>({role:l.role,content:l.content,timestamp:l.timestamp||Date.now()}))),a[n]||(a[n]={content:"",active:!1}),f[n]==null&&(f[n]=!1),w({id:n,type:s.type||null,provider:s.provider||null,model:s.model||null,projectRoot:s.projectRoot||null,status:s.status||"resumed",messageCount:s.messageCount??(Array.isArray(o.history)?o.history.length:0)})}else if(e.type==="session:end"){const n=o.sessionId;i.value=i.value.filter(l=>l.id!==n),delete f[n],h.value===n&&(h.value=i.value[0]?.id||null)}}))}async function k(){const t=m();v(t),i.value=await t.listSessions(),i.value.forEach(e=>{S(e.id,t)})}async function _(t="chat",e={}){const o=m();v(o);const s=await o.createSession(t,null,e);return w({id:s,type:t,title:t==="chat"?T:q,createdAt:Date.now(),messageCount:0}),p(s,!1),S(s,o),h.value=s,s}function L(t,e){const o=g(t),s=B[e.type]||e.type,n=e.payload||{};if(s==="response-token"){a[t]||(a[t]={content:"",active:!0});const l=e.token||n.token||n.delta||n.content||"";a[t].content+=l,a[t].active=!0,p(t,!0)}else if(s==="response-complete"){const l=e.content||n.content||a[t]?.content||"";o.push({role:"assistant",content:l,timestamp:Date.now()}),a[t]&&(a[t].content="",a[t].active=!1);const r=i.value.find(c=>c.id===t);if(r&&(r.title===T||r.title===q)){const c=o.find(x=>x.role==="user");c&&(r.title=c.content.slice(0,30))}r&&(r.messageCount=o.filter(c=>c.role!=="tool").length),p(t,!1)}else if(s==="tool-executing")o.push({role:"tool",tool:e.tool||n.tool||n.toolName||"unknown",input:e.input||n.input||n.args||null,status:"running",timestamp:Date.now()}),p(t,!0);else if(s==="tool-result"){const l=e.tool||n.tool||n.toolName||"unknown",r=[...o].reverse().find(c=>c.role==="tool"&&c.tool===l);r&&(r.result=e.result||n.result||n.output||null,r.status="done")}else if(s==="question")d[t]={requestId:e.requestId||n.requestId||e.id,question:e.question||n.question||n.message||"",choices:e.choices||n.choices||n.options||[]},p(t,!1);else if(s==="error"){const l=e.message||n.message||"Unknown error";o.push({role:"assistant",content:`Error: ${l}`,timestamp:Date.now()}),p(t,!1),a[t]&&(a[t].active=!1)}}async function R(t,e){const o=m();v(o),g(t).push({role:"user",content:e,timestamp:Date.now()}),a[t]||(a[t]={content:"",active:!1}),a[t].active=!0,p(t,!0),o.sendSessionMessage(t,e)}function j(t,e){const o=m(),s=d[t];s&&(o.answerQuestion(t,s.requestId,e),delete d[t])}async function M(t){const e=m();if(v(e),h.value=t,S(t,e),!u[t]||u[t].length===0)try{await e.resumeSession(t)}catch{}}const b=U(()=>E(h.value));return{sessions:i,currentSessionId:h,messages:u,streaming:a,pendingQuestion:d,loadingBySession:f,isLoading:b,getIsLoading:E,loadSessions:k,createSession:_,sendMessage:R,answerQuestion:j,switchSession:M,getMessages:g}});export{F as u};
1
+ import{k as N,r as D,a as y,j as U}from"./vendor-D0Qjn73K.js";import{u as m}from"./ws-4ur1fGsk.js";const T="新对话",q="新 Agent",B={"assistant.delta":"response-token","assistant.final":"response-complete","assistant.message":"response-complete","tool.call.started":"tool-executing","tool.call.completed":"tool-result","tool.call.failed":"tool-result","slot.filling":"question","approval.requested":"question",error:"error"},F=N("chat",()=>{const i=D([]),h=D(null),u=y({}),a=y({}),d=y({}),f=y({});let A=null;const C=new Set;function g(t){return u[t]||(u[t]=[]),u[t]}function E(t){return!!(t&&f[t])}function p(t,e){t&&(f[t]=!!e)}function w(t){if(!t?.id)return;const e=i.value.find(o=>o.id===t.id);if(e){Object.assign(e,t);return}i.value.unshift(t)}function S(t,e=m()){u[t]||(u[t]=[]),a[t]||(a[t]={content:"",active:!1}),f[t]==null&&(f[t]=!1),!C.has(t)&&(C.add(t),e.onSession(t,o=>L(t,o)))}function v(t=m()){A||(A=t.onRuntimeEvent(e=>{const o=e.payload||{},s=o.record||{};if(e.type==="session:start"){const n=o.sessionType||s.type||"chat";p(o.sessionId,!1),w({id:o.sessionId,type:n,provider:s.provider||null,model:s.model||null,projectRoot:s.projectRoot||null,status:s.status||"created",title:n==="chat"?T:q,createdAt:Date.now(),messageCount:s.messageCount??0})}else if(e.type==="session:resume"){const n=o.sessionId;if(!n)return;Array.isArray(o.history)&&(u[n]=o.history.map(l=>({role:l.role,content:l.content,timestamp:l.timestamp||Date.now()}))),a[n]||(a[n]={content:"",active:!1}),f[n]==null&&(f[n]=!1),w({id:n,type:s.type||null,provider:s.provider||null,model:s.model||null,projectRoot:s.projectRoot||null,status:s.status||"resumed",messageCount:s.messageCount??(Array.isArray(o.history)?o.history.length:0)})}else if(e.type==="session:end"){const n=o.sessionId;i.value=i.value.filter(l=>l.id!==n),delete f[n],h.value===n&&(h.value=i.value[0]?.id||null)}}))}async function k(){const t=m();v(t),i.value=await t.listSessions(),i.value.forEach(e=>{S(e.id,t)})}async function _(t="chat",e={}){const o=m();v(o);const s=await o.createSession(t,null,e);return w({id:s,type:t,title:t==="chat"?T:q,createdAt:Date.now(),messageCount:0}),p(s,!1),S(s,o),h.value=s,s}function L(t,e){const o=g(t),s=B[e.type]||e.type,n=e.payload||{};if(s==="response-token"){a[t]||(a[t]={content:"",active:!0});const l=e.token||n.token||n.delta||n.content||"";a[t].content+=l,a[t].active=!0,p(t,!0)}else if(s==="response-complete"){const l=e.content||n.content||a[t]?.content||"";o.push({role:"assistant",content:l,timestamp:Date.now()}),a[t]&&(a[t].content="",a[t].active=!1);const r=i.value.find(c=>c.id===t);if(r&&(r.title===T||r.title===q)){const c=o.find(x=>x.role==="user");c&&(r.title=c.content.slice(0,30))}r&&(r.messageCount=o.filter(c=>c.role!=="tool").length),p(t,!1)}else if(s==="tool-executing")o.push({role:"tool",tool:e.tool||n.tool||n.toolName||"unknown",input:e.input||n.input||n.args||null,status:"running",timestamp:Date.now()}),p(t,!0);else if(s==="tool-result"){const l=e.tool||n.tool||n.toolName||"unknown",r=[...o].reverse().find(c=>c.role==="tool"&&c.tool===l);r&&(r.result=e.result||n.result||n.output||null,r.status="done")}else if(s==="question")d[t]={requestId:e.requestId||n.requestId||e.id,question:e.question||n.question||n.message||"",choices:e.choices||n.choices||n.options||[]},p(t,!1);else if(s==="error"){const l=e.message||n.message||"Unknown error";o.push({role:"assistant",content:`Error: ${l}`,timestamp:Date.now()}),p(t,!1),a[t]&&(a[t].active=!1)}}async function R(t,e){const o=m();v(o),g(t).push({role:"user",content:e,timestamp:Date.now()}),a[t]||(a[t]={content:"",active:!1}),a[t].active=!0,p(t,!0),o.sendSessionMessage(t,e)}function j(t,e){const o=m(),s=d[t];s&&(o.answerQuestion(t,s.requestId,e),delete d[t])}async function M(t){const e=m();if(v(e),h.value=t,S(t,e),!u[t]||u[t].length===0)try{await e.resumeSession(t)}catch{}}const b=U(()=>E(h.value));return{sessions:i,currentSessionId:h,messages:u,streaming:a,pendingQuestion:d,loadingBySession:f,isLoading:b,getIsLoading:E,loadSessions:k,createSession:_,sendMessage:R,answerQuestion:j,switchSession:M,getMessages:g}});export{F as u};
@@ -1,3 +1,3 @@
1
- import{n}from"./vendor-BVetwVfk.js";const r=t=>({[t.componentCls]:{[`${t.antCls}-motion-collapse-legacy`]:{overflow:"hidden","&-active":{transition:`height ${t.motionDurationMid} ${t.motionEaseInOut},
1
+ import{n}from"./vendor-D0Qjn73K.js";const r=t=>({[t.componentCls]:{[`${t.antCls}-motion-collapse-legacy`]:{overflow:"hidden","&-active":{transition:`height ${t.motionDurationMid} ${t.motionEaseInOut},
2
2
  opacity ${t.motionDurationMid} ${t.motionEaseInOut} !important`}},[`${t.antCls}-motion-collapse`]:{overflow:"hidden",transition:`height ${t.motionDurationMid} ${t.motionEaseInOut},
3
3
  opacity ${t.motionDurationMid} ${t.motionEaseInOut} !important`}}});function e(t,i){return t.classList?t.classList.contains(i):` ${t.className} `.indexOf(` ${i} `)>-1}function a(t,i){t.classList?t.classList.add(i):e(t,i)||(t.className=`${t.className} ${i}`)}function l(t,i){if(t.classList)t.classList.remove(i);else if(e(t,i)){const s=t.className;t.className=` ${s} `.replace(` ${i} `," ")}}const c=function(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"ant-motion-collapse",i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0;return{name:t,appear:i,css:!0,onBeforeEnter:s=>{s.style.height="0px",s.style.opacity="0",a(s,t)},onEnter:s=>{n(()=>{s.style.height=`${s.scrollHeight}px`,s.style.opacity="1"})},onAfterEnter:s=>{s&&(l(s,t),s.style.height=null,s.style.opacity=null)},onBeforeLeave:s=>{a(s,t),s.style.height=`${s.offsetHeight}px`,s.style.opacity=null},onLeave:s=>{setTimeout(()=>{s.style.height="0px",s.style.opacity="0"})},onAfterLeave:s=>{s&&(l(s,t),s.style&&(s.style.height=null,s.style.opacity=null))}}};export{a,c,r as g,l as r};
@@ -1 +1 @@
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
+ import{_ as t}from"./index-Vit9TJBu.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-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
+ import{_ as r}from"./index-Vit9TJBu.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};