chainlesschain 0.162.8 → 0.162.11

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 (145) hide show
  1. package/bin/chainlesschain.js +0 -0
  2. package/package.json +1 -1
  3. package/src/assets/web-panel/assets/{AIOps-aMUJYSpU.js → AIOps-ebtJGjAG.js} +1 -1
  4. package/src/assets/web-panel/assets/{ActionButton-OR0lRZdD.js → ActionButton-CypkRN-G.js} +1 -1
  5. package/src/assets/web-panel/assets/{Analytics-BfMp4CEg.js → Analytics-B2JMlIng.js} +1 -1
  6. package/src/assets/web-panel/assets/{AppLayout-DsCuOVxT.js → AppLayout-B8QQ4pk7.js} +2 -2
  7. package/src/assets/web-panel/assets/{Audit-_AgBKCnk.js → Audit-BoYaAyFa.js} +1 -1
  8. package/src/assets/web-panel/assets/{Backup-DuMKrzQE.js → Backup-BfackGZ5.js} +1 -1
  9. package/src/assets/web-panel/assets/{BaseInput-6If50B9h.js → BaseInput-C06FUpDz.js} +1 -1
  10. package/src/assets/web-panel/assets/{Chat-LKExaE9D.js → Chat-BWxMkBYZ.js} +1 -1
  11. package/src/assets/web-panel/assets/{Checkbox-lAve8IZ7.js → Checkbox-XJMvS3PV.js} +1 -1
  12. package/src/assets/web-panel/assets/{Codegen-BGRrXyxs.js → Codegen-CzR462RK.js} +1 -1
  13. package/src/assets/web-panel/assets/{Col-B8xEKq-w.js → Col-BQHpLNCA.js} +1 -1
  14. package/src/assets/web-panel/assets/{Community-CHHfDSp6.js → Community-BWRRbJYd.js} +1 -1
  15. package/src/assets/web-panel/assets/{Compact-C2lhX-05.js → Compact-BunoKIy9.js} +1 -1
  16. package/src/assets/web-panel/assets/{Compliance-DfVk77IC.js → Compliance-CtJfZctm.js} +1 -1
  17. package/src/assets/web-panel/assets/{Cowork-BQhdnULG.js → Cowork-ER5-_bod.js} +1 -1
  18. package/src/assets/web-panel/assets/{Cron-D97i0_EI.js → Cron-C80jYBw1.js} +1 -1
  19. package/src/assets/web-panel/assets/{Crosschain-Cve_HQ-5.js → Crosschain-fEMlCNsL.js} +1 -1
  20. package/src/assets/web-panel/assets/{DID-B7BoWEdP.js → DID-BZpctKmU.js} +1 -1
  21. package/src/assets/web-panel/assets/{Dashboard-DF2CkjR8.js → Dashboard-RQhZmLi4.js} +2 -2
  22. package/src/assets/web-panel/assets/{Dropdown-D4Z1jwWu.js → Dropdown-CrpwS84l.js} +1 -1
  23. package/src/assets/web-panel/assets/{Federation-DwvTsJFa.js → Federation-BEQyZtdR.js} +1 -1
  24. package/src/assets/web-panel/assets/{FormItemContext-BDiTma_8.js → FormItemContext-DCwvl6Vh.js} +1 -1
  25. package/src/assets/web-panel/assets/{Git-B8EfEU-1.js → Git-6FihOxMK.js} +1 -1
  26. package/src/assets/web-panel/assets/{Governance-bQA7Tept.js → Governance-DlBLHSlJ.js} +1 -1
  27. package/src/assets/web-panel/assets/{Inference-D34fMYbV.js → Inference-DdSokzV0.js} +1 -1
  28. package/src/assets/web-panel/assets/{KnowledgeGraph-B_8bBmGM.js → KnowledgeGraph-bg8GBHMr.js} +1 -1
  29. package/src/assets/web-panel/assets/{Logs-CwJhYTVt.js → Logs-DdFYdLQ-.js} +1 -1
  30. package/src/assets/web-panel/assets/{Marketplace-BD3uuzww.js → Marketplace-DjnlAeYF.js} +1 -1
  31. package/src/assets/web-panel/assets/{McpTools-D_Zwvily.js → McpTools-Czs41YUh.js} +1 -1
  32. package/src/assets/web-panel/assets/{Memory-jVF57XHl.js → Memory-CX0b3c8D.js} +1 -1
  33. package/src/assets/web-panel/assets/{MobileBridge-ClAtqJaU.js → MobileBridge-BoFGb9Mm.js} +1 -1
  34. package/src/assets/web-panel/assets/{MobileProjects-B19KSA4P.js → MobileProjects-B8qQ9H-0.js} +1 -1
  35. package/src/assets/web-panel/assets/{Mtc-DxajYtbq.js → Mtc-CRF1NLae.js} +1 -1
  36. package/src/assets/web-panel/assets/{MtcAudit-DlKwbPGL.js → MtcAudit-CdCm70cJ.js} +1 -1
  37. package/src/assets/web-panel/assets/{Multisig-DuBQn3FV.js → Multisig-yoZlpq2Y.js} +1 -1
  38. package/src/assets/web-panel/assets/{NLProgramming-oRBlzbNU.js → NLProgramming-hFCgqDxJ.js} +1 -1
  39. package/src/assets/web-panel/assets/{Notes-HOvoKAEz.js → Notes-DC8pnxs-.js} +1 -1
  40. package/src/assets/web-panel/assets/{NotificationSettings-bArFAv3j.js → NotificationSettings-DDVg5Nc8.js} +1 -1
  41. package/src/assets/web-panel/assets/{Organization-B4s1Rn39.js → Organization-0YCtAFMS.js} +1 -1
  42. package/src/assets/web-panel/assets/{Overflow-C2_V35KO.js → Overflow-DhPLoAdz.js} +1 -1
  43. package/src/assets/web-panel/assets/{P2P-BZ3EQxna.js → P2P-BWpuJhkD.js} +1 -1
  44. package/src/assets/web-panel/assets/{Permissions-Bo5AXf7h.js → Permissions-B4IrizO9.js} +1 -1
  45. package/src/assets/web-panel/assets/{PersonalDataHub-Gw18y83j.js → PersonalDataHub-ZbziiUr6.js} +1 -1
  46. package/src/assets/web-panel/assets/{Pipeline-_733qEBF.js → Pipeline-M65jR6sq.js} +1 -1
  47. package/src/assets/web-panel/assets/{Privacy-BLYBBxeR.js → Privacy-BeO8zLup.js} +1 -1
  48. package/src/assets/web-panel/assets/{ProjectInit-C8cQg8oo.js → ProjectInit-Ck_ZjrVZ.js} +1 -1
  49. package/src/assets/web-panel/assets/{ProjectSettings-Bahm9oQJ.js → ProjectSettings-ijn-97s0.js} +1 -1
  50. package/src/assets/web-panel/assets/{Projects-BsqCBs7g.js → Projects-BsNBemeh.js} +1 -1
  51. package/src/assets/web-panel/assets/{Providers-BRJ9jKvG.js → Providers-CI7UxKVO.js} +1 -1
  52. package/src/assets/web-panel/assets/{QuickAsk-B5eH5ufy.js → QuickAsk-dE2M1KOB.js} +1 -1
  53. package/src/assets/web-panel/assets/{Recommend-D4rYVV0L.js → Recommend-B30EgbKS.js} +1 -1
  54. package/src/assets/web-panel/assets/{Reputation-h1wjkVly.js → Reputation-CV6n7wMx.js} +1 -1
  55. package/src/assets/web-panel/assets/{Row-DuvWW403.js → Row-DSaoTjlN.js} +1 -1
  56. package/src/assets/web-panel/assets/{RssFeed-B-NY4txM.js → RssFeed-_NgBmHaC.js} +1 -1
  57. package/src/assets/web-panel/assets/{Search-CLjqgYPf.js → Search-B341ooTV.js} +1 -1
  58. package/src/assets/web-panel/assets/{Security-_KySjOq5.js → Security-CqCQD8hf.js} +1 -1
  59. package/src/assets/web-panel/assets/{Services-CN9GmECL.js → Services-Cju_95rB.js} +1 -1
  60. package/src/assets/web-panel/assets/{Skeleton-Bcu8eqiJ.js → Skeleton-kh_uW22l.js} +1 -1
  61. package/src/assets/web-panel/assets/{Skills-3oeFeeEN.js → Skills-BVRPgciI.js} +1 -1
  62. package/src/assets/web-panel/assets/{Sla-CGTcZtVL.js → Sla-y-vKFYkI.js} +1 -1
  63. package/src/assets/web-panel/assets/{SpeechSettings-BCXs-HN2.js → SpeechSettings-BXJm9zyo.js} +1 -1
  64. package/src/assets/web-panel/assets/{SyncSettings-FGSbecSU.js → SyncSettings-BmHZR-Kv.js} +1 -1
  65. package/src/assets/web-panel/assets/{Tasks-_12fFaUS.js → Tasks-C7zmYW9f.js} +1 -1
  66. package/src/assets/web-panel/assets/{Templates-BhfiSNuq.js → Templates-DVEG7FdA.js} +1 -1
  67. package/src/assets/web-panel/assets/{Tenant-Bk08XHaK.js → Tenant-CpvjzPCo.js} +1 -1
  68. package/src/assets/web-panel/assets/{Terminal-BN4P8zso.js → Terminal-D_Wpp2iE.js} +1 -1
  69. package/src/assets/web-panel/assets/{Tokens-C1FHxUfU.js → Tokens-QBrjdNqi.js} +1 -1
  70. package/src/assets/web-panel/assets/{Trigger-DKmcgMsg.js → Trigger-BhR_VEvQ.js} +1 -1
  71. package/src/assets/web-panel/assets/{Trust-gSo8e3sa.js → Trust-C0xhM2lC.js} +1 -1
  72. package/src/assets/web-panel/assets/{UkeySign-DxdzNrTS.js → UkeySign-BnyP-W3-.js} +1 -1
  73. package/src/assets/web-panel/assets/{VideoEditing-CZ_IqAw_.js → VideoEditing-C5Y8MyEK.js} +1 -1
  74. package/src/assets/web-panel/assets/{Wallet-ztJldhlc.js → Wallet-DzCPCQNF.js} +1 -1
  75. package/src/assets/web-panel/assets/{WebAuthn-IWR5yaHJ.js → WebAuthn-6X5bLtHU.js} +1 -1
  76. package/src/assets/web-panel/assets/{WorkflowEditor-BC7bHrH9.js → WorkflowEditor-ekS27G9f.js} +1 -1
  77. package/src/assets/web-panel/assets/{chat-bWCVi480.js → chat-BikodUwh.js} +1 -1
  78. package/src/assets/web-panel/assets/{colors-tk9UcMJh.js → colors-8yIg5K7E.js} +1 -1
  79. package/src/assets/web-panel/assets/{compact-item-DvrBqRW0.js → compact-item-MLWo5-GY.js} +1 -1
  80. package/src/assets/web-panel/assets/{createContext-Dh48yEoJ.js → createContext-nir7ccDv.js} +1 -1
  81. package/src/assets/web-panel/assets/{hasIn-DhFZqw2W.js → hasIn-DxUIHW2P.js} +1 -1
  82. package/src/assets/web-panel/assets/{index-Z1-a86y7.js → index-4SFekeAy.js} +1 -1
  83. package/src/assets/web-panel/assets/{index-BdM_h28f.js → index-78olN7S9.js} +1 -1
  84. package/src/assets/web-panel/assets/{index-C1q29SZg.js → index-8qrwsaKy.js} +1 -1
  85. package/src/assets/web-panel/assets/{index-DVMUHzwr.js → index-9Y0IyfeM.js} +1 -1
  86. package/src/assets/web-panel/assets/{index-R68d0WjD.js → index-BSIaRmzU.js} +1 -1
  87. package/src/assets/web-panel/assets/{index-uvwXPlKL.js → index-BURKtxBq.js} +1 -1
  88. package/src/assets/web-panel/assets/{index-BBn2bAO4.js → index-BcyG-9vV.js} +1 -1
  89. package/src/assets/web-panel/assets/index-BeA3spHc.js +1 -0
  90. package/src/assets/web-panel/assets/{index-DCeSV2ph.js → index-BgHPrMXP.js} +1 -1
  91. package/src/assets/web-panel/assets/{index-CCiWpUyi.js → index-BgQtoOHc.js} +1 -1
  92. package/src/assets/web-panel/assets/{index-C-T0Izic.js → index-BkMtxzcM.js} +1 -1
  93. package/src/assets/web-panel/assets/{index-B1Km9jHJ.js → index-Bn5VWKW1.js} +1 -1
  94. package/src/assets/web-panel/assets/{index-B5sCqkrI.js → index-Bpa9senE.js} +1 -1
  95. package/src/assets/web-panel/assets/{index-C2LSgP0_.js → index-C-UB9bYd.js} +1 -1
  96. package/src/assets/web-panel/assets/{index-JcMiXnz7.js → index-CCGf6IJj.js} +1 -1
  97. package/src/assets/web-panel/assets/{index-C8NvrPso.js → index-C_W1kVtY.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-Ci_43YbF.js → index-C_Xi08tu.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-BMhrHykJ.js → index-CeX-HLIi.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-OGb7oHqA.js → index-CfeuuE7v.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-Dja_xcjz.js → index-CkSN2Ki_.js} +1 -1
  102. package/src/assets/web-panel/assets/{index-DyzV-4bw.js → index-Cp-YnzHN.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-BQg3zkF3.js → index-DDmc4cig.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-BfZhEeCu.js → index-DLiexKJ2.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-DTbb54GX.js → index-DOIryna2.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-BqCbH37-.js → index-DSjWvxVr.js} +3 -3
  107. package/src/assets/web-panel/assets/{index-PbHsGeoK.js → index-DVLJ1iGu.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-CH7lkYCZ.js → index-DkIon-Gv.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-CDVk418O.js → index-Dl-O2OkQ.js} +1 -1
  110. package/src/assets/web-panel/assets/index-DoLRjAoc.js +1 -0
  111. package/src/assets/web-panel/assets/{index-g_WPIICs.js → index-Dx5xZmzt.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-DI382M6n.js → index-S8mYImvf.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-BgKxsNPN.js → index-SUYLhwZI.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-CE7s9aDu.js → index-TB5vrA0Z.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-DmyUdBoW.js → index-dgZZAsxo.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-DeWB6vZV.js → index-h05fIj9Q.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-CugbuyeG.js → index-hu-wjfWv.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-C5Q_AIon.js → index-q3Lr2UzW.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-CGmfKi-O.js → index-vVrIg9Jk.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-ORgr-yOQ.js → index-yfNusVbo.js} +1 -1
  121. package/src/assets/web-panel/assets/{initDefaultProps-lrtHMmWq.js → initDefaultProps-xUjF_bq0.js} +1 -1
  122. package/src/assets/web-panel/assets/{motion-Dna0fLLD.js → motion-B019-Q6h.js} +1 -1
  123. package/src/assets/web-panel/assets/{move-B77ZnXvW.js → move-D2XYj_gA.js} +1 -1
  124. package/src/assets/web-panel/assets/{omit-CLI0u4xr.js → omit-AIzzlguv.js} +1 -1
  125. package/src/assets/web-panel/assets/{pickAttrs-CsvVxvao.js → pickAttrs-CRkEQaLs.js} +1 -1
  126. package/src/assets/web-panel/assets/{placementArrow-gCZvBkZg.js → placementArrow-s4kAStH6.js} +1 -1
  127. package/src/assets/web-panel/assets/{responsiveObserve-B4d5HJeN.js → responsiveObserve-BCsWrTkb.js} +1 -1
  128. package/src/assets/web-panel/assets/{slide-DmExRlkt.js → slide-B_Hggtvv.js} +1 -1
  129. package/src/assets/web-panel/assets/{statusUtils-BkcOP5ZQ.js → statusUtils-DnNf15VW.js} +1 -1
  130. package/src/assets/web-panel/assets/{styleChecker-tL2BFwwe.js → styleChecker-CSQdy9SQ.js} +1 -1
  131. package/src/assets/web-panel/assets/{useFlexGapSupport-C-aUgESq.js → useFlexGapSupport-Bt-T27Pf.js} +1 -1
  132. package/src/assets/web-panel/assets/{useFs-KT2jItx2.js → useFs-D78PlgeG.js} +1 -1
  133. package/src/assets/web-panel/assets/{vnode-DJz8D0zb.js → vnode-BTMmpsWu.js} +1 -1
  134. package/src/assets/web-panel/assets/{zoom-BqXtO25S.js → zoom-CwOTbvKc.js} +1 -1
  135. package/src/assets/web-panel/index.html +1 -1
  136. package/src/commands/init.js +10 -0
  137. package/src/commands/notification.js +260 -0
  138. package/src/commands/pack.js +319 -0
  139. package/src/commands/persona.js +160 -1
  140. package/src/gateways/ws/personal-data-hub-protocol.js +63 -1
  141. package/src/index.js +2 -0
  142. package/src/lib/packer/pkg-config-generator.js +111 -5
  143. package/src/runtime/agent-core.js +26 -2
  144. package/src/assets/web-panel/assets/index-Btv3yJqH.js +0 -1
  145. package/src/assets/web-panel/assets/index-D6Nx0oIG.js +0 -1
@@ -1,2 +1,2 @@
1
- import{_ as ve,b as ye,u as me}from"./index-BqCbH37-.js";import{R as fe,M as _e,ak as te,ar as ge,p as B}from"./icons-CLQTHa5-.js";import{o as be,M as v,R as d,P as l,u as t,c as a,N as n,r,K as p,L as i,O as y,Q as w,S as m,F as ae,Y as xe,f as he}from"./vendor-M5lGV-wr.js";const ke={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},we={class:"page-title"},Se={class:"page-sub"},Pe={key:0,style:{"text-align":"center",padding:"30px"}},Ce={key:2,style:{"font-family":"monospace",color:"var(--text-muted)","font-size":"12px"}},Le={key:3,style:{"margin-top":"12px",color:"#ff4d4f","font-size":"12px"}},ze={key:0,style:{"text-align":"center",padding:"30px"}},Oe={key:0,style:{"margin-top":"16px"}},Me={style:{color:"var(--text-secondary)","font-size":"11px","margin-bottom":"6px"}},Be={style:{background:"var(--bg-base)",border:"1px solid var(--border-color)","border-radius":"6px",padding:"12px",color:"#aaa","font-size":"12px","max-height":"200px","overflow-y":"auto","white-space":"pre-wrap"}},Fe={key:2,style:{"margin-top":"12px",color:"#ff4d4f","font-size":"12px"}},Te={style:{"margin-bottom":"12px",color:"var(--text-secondary)"}},$e={key:0,style:{"margin-top":"12px"}},Ne={style:{background:"var(--bg-base)",border:"1px solid var(--border-color)","border-radius":"6px",padding:"12px",color:"#aaa","font-size":"12px","white-space":"pre-wrap"}},De={style:{"margin-bottom":"8px",color:"var(--text-secondary)"}},Ee={style:{"margin-bottom":"8px",color:"var(--text-secondary)"}},Re={key:0,style:{"margin-top":"12px"}},Ue={style:{background:"var(--bg-base)",border:"1px solid var(--border-color)","border-radius":"6px",padding:"12px",color:"#aaa","font-size":"12px","white-space":"pre-wrap"}},Ve={__name:"P2P",setup(Ie){const{t:e}=ye(),x=me(),F=r(!1),T=r(""),S=r([]),oe=he(()=>[{title:e("p2p.peerColumns.name"),key:"name"},{title:e("p2p.peerColumns.id"),key:"id"},{title:e("p2p.peerColumns.status"),key:"status"},{title:e("p2p.peerColumns.action"),key:"action",width:100}]);async function q(){F.value=!0,T.value="";try{const{output:o}=await x.execute("p2p peers",15e3);S.value=ne(o)}catch(o){T.value=e("p2p.messages.loadPeersFailed",{err:o.message})}finally{F.value=!1}}function ne(o){if(!o||o.includes("No peers")||o.includes("no peers"))return[];const c=o.split(`
1
+ import{_ as ve,b as ye,u as me}from"./index-DSjWvxVr.js";import{R as fe,M as _e,ak as te,ar as ge,p as B}from"./icons-CLQTHa5-.js";import{o as be,M as v,R as d,P as l,u as t,c as a,N as n,r,K as p,L as i,O as y,Q as w,S as m,F as ae,Y as xe,f as he}from"./vendor-M5lGV-wr.js";const ke={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},we={class:"page-title"},Se={class:"page-sub"},Pe={key:0,style:{"text-align":"center",padding:"30px"}},Ce={key:2,style:{"font-family":"monospace",color:"var(--text-muted)","font-size":"12px"}},Le={key:3,style:{"margin-top":"12px",color:"#ff4d4f","font-size":"12px"}},ze={key:0,style:{"text-align":"center",padding:"30px"}},Oe={key:0,style:{"margin-top":"16px"}},Me={style:{color:"var(--text-secondary)","font-size":"11px","margin-bottom":"6px"}},Be={style:{background:"var(--bg-base)",border:"1px solid var(--border-color)","border-radius":"6px",padding:"12px",color:"#aaa","font-size":"12px","max-height":"200px","overflow-y":"auto","white-space":"pre-wrap"}},Fe={key:2,style:{"margin-top":"12px",color:"#ff4d4f","font-size":"12px"}},Te={style:{"margin-bottom":"12px",color:"var(--text-secondary)"}},$e={key:0,style:{"margin-top":"12px"}},Ne={style:{background:"var(--bg-base)",border:"1px solid var(--border-color)","border-radius":"6px",padding:"12px",color:"#aaa","font-size":"12px","white-space":"pre-wrap"}},De={style:{"margin-bottom":"8px",color:"var(--text-secondary)"}},Ee={style:{"margin-bottom":"8px",color:"var(--text-secondary)"}},Re={key:0,style:{"margin-top":"12px"}},Ue={style:{background:"var(--bg-base)",border:"1px solid var(--border-color)","border-radius":"6px",padding:"12px",color:"#aaa","font-size":"12px","white-space":"pre-wrap"}},Ve={__name:"P2P",setup(Ie){const{t:e}=ye(),x=me(),F=r(!1),T=r(""),S=r([]),oe=he(()=>[{title:e("p2p.peerColumns.name"),key:"name"},{title:e("p2p.peerColumns.id"),key:"id"},{title:e("p2p.peerColumns.status"),key:"status"},{title:e("p2p.peerColumns.action"),key:"action",width:100}]);async function q(){F.value=!0,T.value="";try{const{output:o}=await x.execute("p2p peers",15e3);S.value=ne(o)}catch(o){T.value=e("p2p.messages.loadPeersFailed",{err:o.message})}finally{F.value=!1}}function ne(o){if(!o||o.includes("No peers")||o.includes("no peers"))return[];const c=o.split(`
2
2
  `).filter(_=>_.trim()),u=[];for(const _ of c){const b=_.match(/^\s*(\S+)\s+(.+?)\s+(connected|online|offline|disconnected)\s*$/i);if(b){u.push({id:b[1],name:b[2].trim(),connected:/connected|online/i.test(b[3])});continue}const k=_.match(/^\s*((?:12D3|Qm)\S{10,})\s*(.*)$/);if(k){const O=k[2].trim();u.push({id:k[1],name:O||k[1].slice(0,12),connected:/connected|online/i.test(O)})}}return u}const E=r(!1),R=r(!1),$=r(""),P=r("");async function G(){if($.value.trim()){R.value=!0,P.value="";try{const{output:o}=await x.execute(`p2p pair "${$.value.trim()}"`,3e4);P.value=o,await q()}catch(o){P.value=e("p2p.messages.pairFailed",{err:o.message})}finally{R.value=!1}}}const N=r(!1),U=r(!1),C=r(void 0),L=r(""),h=r("");function le(o){C.value=o.id,L.value="",h.value="",N.value=!0}async function H(){if(!(!C.value||!L.value.trim())){U.value=!0,h.value="";try{const{output:o}=await x.execute(`p2p send ${C.value} "${L.value.trim()}"`,15e3);h.value=o||e("p2p.send.messageDefault")}catch(o){h.value=e("p2p.messages.sendFailed",{err:o.message})}finally{U.value=!1}}}const V=r(!1),D=r(""),z=r(!1),I=r(""),Q=r(0),J=r(""),f=r(""),j=r(!1),A=r(!1);async function K(){V.value=!0,D.value="";try{const{output:o}=await x.execute("sync status",15e3);se(o)}catch(o){D.value=e("p2p.messages.loadSyncFailed",{err:o.message})}finally{V.value=!1}}function se(o){if(!o){I.value=e("p2p.sync.unknown");return}z.value=/synced|online|up.to.date/i.test(o),I.value=z.value?e("p2p.sync.synced"):e("p2p.sync.notSynced");const c=o.match(/pending[:\s]+(\d+)/i);Q.value=c?parseInt(c[1]):0;const u=o.match(/last[:\s]+(.+)/i);u&&(J.value=u[1].trim())}async function re(){j.value=!0,f.value="";try{const{output:o}=await x.execute("sync push",3e4);f.value=o||e("p2p.sync.pushDefault"),await K()}catch(o){f.value=e("p2p.messages.pushFailed",{err:o.message})}finally{j.value=!1}}async function ce(){A.value=!0,f.value="";try{const{output:o}=await x.execute("sync pull",3e4);f.value=o||e("p2p.sync.pullDefault"),await K()}catch(o){f.value=e("p2p.messages.pullFailed",{err:o.message})}finally{A.value=!1}}async function X(){await Promise.all([q(),K()])}return be(X),(o,c)=>{const u=p("a-button"),_=p("a-space"),b=p("a-spin"),k=p("a-empty"),O=p("a-tag"),ie=p("a-table"),M=p("a-card"),W=p("a-statistic"),Y=p("a-col"),pe=p("a-row"),Z=p("a-input"),ee=p("a-modal"),ue=p("a-select-option"),de=p("a-select");return i(),v("div",null,[d("div",ke,[d("div",null,[d("h2",we,l(t(e)("p2p.title")),1),d("p",Se,l(t(e)("p2p.subtitle")),1)]),a(u,{type:"primary",ghost:"",loading:F.value,onClick:X},{icon:n(()=>[a(t(fe))]),default:n(()=>[y(" "+l(t(e)("p2p.refresh")),1)]),_:1},8,["loading"])]),a(M,{title:t(e)("p2p.peers.cardTitle"),style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"}},{extra:n(()=>[a(_,null,{default:n(()=>[a(u,{size:"small",onClick:c[0]||(c[0]=s=>E.value=!0),style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:n(()=>[a(t(ge))]),default:n(()=>[y(" "+l(t(e)("p2p.peers.pairButton")),1)]),_:1}),a(u,{size:"small",onClick:c[1]||(c[1]=s=>N.value=!0),disabled:S.value.length===0,style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:n(()=>[a(t(te))]),default:n(()=>[y(" "+l(t(e)("p2p.peers.sendButton")),1)]),_:1},8,["disabled"])]),_:1})]),default:n(()=>[F.value?(i(),v("div",Pe,[a(b)])):S.value.length===0?(i(),w(k,{key:1,description:t(e)("p2p.peers.emptyText")},null,8,["description"])):(i(),w(ie,{key:2,columns:oe.value,"data-source":S.value,pagination:!1,size:"small","row-key":"id"},{bodyCell:n(({column:s,record:g})=>[s.key==="status"?(i(),w(O,{key:0,color:g.connected?"green":"default"},{default:n(()=>[y(l(g.connected?t(e)("p2p.peers.online"):t(e)("p2p.peers.offline")),1)]),_:2},1032,["color"])):m("",!0),s.key==="name"?(i(),w(_,{key:1},{default:n(()=>[a(t(_e),{style:{color:"var(--text-muted)"}}),d("span",null,l(g.name||g.id),1)]),_:2},1024)):m("",!0),s.key==="id"?(i(),v("span",Ce,l(g.id.length>16?g.id.slice(0,16)+"...":g.id),1)):m("",!0),s.key==="action"?(i(),w(u,{key:3,size:"small",type:"link",onClick:Qe=>le(g)},{default:n(()=>[a(t(te)),y(" "+l(t(e)("p2p.peers.rowSend")),1)]),_:1},8,["onClick"])):m("",!0)]),_:1},8,["columns","data-source"])),T.value?(i(),v("div",Le,l(T.value),1)):m("",!0)]),_:1},8,["title"]),a(M,{title:t(e)("p2p.sync.cardTitle"),style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{extra:n(()=>[a(O,{color:z.value?"green":"default"},{default:n(()=>[y(l(z.value?t(e)("p2p.sync.synced"):t(e)("p2p.sync.notSynced")),1)]),_:1},8,["color"])]),default:n(()=>[V.value?(i(),v("div",ze,[a(b)])):(i(),v(ae,{key:1},[a(pe,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:n(()=>[a(Y,{xs:24,sm:8},{default:n(()=>[a(M,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[a(W,{title:t(e)("p2p.sync.statusLabel"),value:I.value,"value-style":{color:z.value?"#52c41a":"#888",fontSize:"16px"}},{prefix:n(()=>[a(t(B))]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),a(Y,{xs:24,sm:8},{default:n(()=>[a(M,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[a(W,{title:t(e)("p2p.sync.pendingLabel"),value:Q.value,"value-style":{color:Q.value>0?"#faad14":"#52c41a",fontSize:"16px"}},{prefix:n(()=>[a(t(B))]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),a(Y,{xs:24,sm:8},{default:n(()=>[a(M,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[a(W,{title:t(e)("p2p.sync.lastSyncLabel"),value:J.value||t(e)("p2p.sync.noLastSync"),"value-style":{color:"var(--text-secondary)",fontSize:"16px"}},{prefix:n(()=>[a(t(B))]),_:1},8,["title","value"])]),_:1})]),_:1})]),_:1}),a(_,null,{default:n(()=>[a(u,{loading:j.value,onClick:re,style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:n(()=>[a(t(B))]),default:n(()=>[y(" "+l(t(e)("p2p.sync.pushButton")),1)]),_:1},8,["loading"]),a(u,{loading:A.value,onClick:ce,style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:n(()=>[a(t(B))]),default:n(()=>[y(" "+l(t(e)("p2p.sync.pullButton")),1)]),_:1},8,["loading"])]),_:1}),f.value?(i(),v("div",Oe,[d("div",Me,l(t(e)("p2p.sync.outputLabel")),1),d("pre",Be,l(f.value),1)])):m("",!0)],64)),D.value?(i(),v("div",Fe,l(D.value),1)):m("",!0)]),_:1},8,["title"]),a(ee,{open:E.value,"onUpdate:open":c[3]||(c[3]=s=>E.value=s),title:t(e)("p2p.pair.title"),"confirm-loading":R.value,onOk:G,"ok-text":t(e)("p2p.pair.ok"),"cancel-text":t(e)("common.cancel")},{default:n(()=>[d("div",Te,l(t(e)("p2p.pair.intro")),1),a(Z,{value:$.value,"onUpdate:value":c[2]||(c[2]=s=>$.value=s),placeholder:t(e)("p2p.pair.placeholder"),onPressEnter:G},null,8,["value","placeholder"]),P.value?(i(),v("div",$e,[d("pre",Ne,l(P.value),1)])):m("",!0)]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),a(ee,{open:N.value,"onUpdate:open":c[6]||(c[6]=s=>N.value=s),title:t(e)("p2p.send.title"),"confirm-loading":U.value,onOk:H,"ok-text":t(e)("p2p.send.ok"),"cancel-text":t(e)("common.cancel")},{default:n(()=>[d("div",De,l(t(e)("p2p.send.targetLabel")),1),a(de,{value:C.value,"onUpdate:value":c[4]||(c[4]=s=>C.value=s),style:{width:"100%","margin-bottom":"16px"},placeholder:t(e)("p2p.send.targetPlaceholder")},{default:n(()=>[(i(!0),v(ae,null,xe(S.value,s=>(i(),w(ue,{key:s.id,value:s.id},{default:n(()=>[y(l(s.name||s.id),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value","placeholder"]),d("div",Ee,l(t(e)("p2p.send.messageLabel")),1),a(Z,{value:L.value,"onUpdate:value":c[5]||(c[5]=s=>L.value=s),placeholder:t(e)("p2p.send.messagePlaceholder"),onPressEnter:H},null,8,["value","placeholder"]),h.value?(i(),v("div",Re,[d("pre",Ue,l(h.value),1)])):m("",!0)]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"])])}}},We=ve(Ve,[["__scopeId","data-v-832d025d"]]);export{We as default};
@@ -1,4 +1,4 @@
1
- import{_ as ue,u as ce,d as J}from"./index-BqCbH37-.js";import{R as de,V as pe,f as G,a7 as me}from"./icons-CLQTHa5-.js";import{o as fe,M as d,R as j,c as l,N as s,r as v,K as u,L as i,O as h,u as I,Q as b,P as _,S as g,F as L,Y as $}from"./vendor-M5lGV-wr.js";const ye={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},ve={key:0,style:{"text-align":"center",padding:"60px"}},_e={key:0,style:{color:"#e0e0e0","font-weight":"500"}},ge={key:1,style:{color:"var(--text-secondary)"}},he={key:0,style:{"margin-top":"16px"}},ke={key:0,style:{"text-align":"center",padding:"60px"}},xe={key:0,style:{color:"var(--text-secondary)","font-size":"12px","font-family":"monospace"}},be={key:1,style:{color:"#e0e0e0"}},we={key:2,style:{color:"var(--text-secondary)"}},Ce={key:4,style:{color:"var(--text-muted)","font-size":"12px"}},Ie={__name:"Permissions",setup(Re){const R=ce(),O=v("roles"),z=v(!1);async function q(){z.value=!0;try{O.value==="roles"?await P():O.value==="audit"&&await E()}finally{z.value=!1}}function Q(t){t==="roles"&&W.value.length===0&&P(),t==="audit"&&A.value.length===0&&E()}const S=v(!1),W=v([]),Y=[{title:"角色名",key:"name",dataIndex:"name",width:"160px"},{title:"描述",key:"description",dataIndex:"description",width:"240px"},{title:"权限",key:"permissions",dataIndex:"permissions"},{title:"用户数",key:"userCount",dataIndex:"userCount",width:"100px"}];async function P(){S.value=!0;try{const{output:t}=await R.execute("auth roles --json",15e3);W.value=K(t,H)}catch(t){J.error("加载角色列表失败: "+t.message)}finally{S.value=!1}}function H(t){const e=[],o=t.split(`
1
+ import{_ as ue,u as ce,d as J}from"./index-DSjWvxVr.js";import{R as de,V as pe,f as G,a7 as me}from"./icons-CLQTHa5-.js";import{o as fe,M as d,R as j,c as l,N as s,r as v,K as u,L as i,O as h,u as I,Q as b,P as _,S as g,F as L,Y as $}from"./vendor-M5lGV-wr.js";const ye={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},ve={key:0,style:{"text-align":"center",padding:"60px"}},_e={key:0,style:{color:"#e0e0e0","font-weight":"500"}},ge={key:1,style:{color:"var(--text-secondary)"}},he={key:0,style:{"margin-top":"16px"}},ke={key:0,style:{"text-align":"center",padding:"60px"}},xe={key:0,style:{color:"var(--text-secondary)","font-size":"12px","font-family":"monospace"}},be={key:1,style:{color:"#e0e0e0"}},we={key:2,style:{color:"var(--text-secondary)"}},Ce={key:4,style:{color:"var(--text-muted)","font-size":"12px"}},Ie={__name:"Permissions",setup(Re){const R=ce(),O=v("roles"),z=v(!1);async function q(){z.value=!0;try{O.value==="roles"?await P():O.value==="audit"&&await E()}finally{z.value=!1}}function Q(t){t==="roles"&&W.value.length===0&&P(),t==="audit"&&A.value.length===0&&E()}const S=v(!1),W=v([]),Y=[{title:"角色名",key:"name",dataIndex:"name",width:"160px"},{title:"描述",key:"description",dataIndex:"description",width:"240px"},{title:"权限",key:"permissions",dataIndex:"permissions"},{title:"用户数",key:"userCount",dataIndex:"userCount",width:"100px"}];async function P(){S.value=!0;try{const{output:t}=await R.execute("auth roles --json",15e3);W.value=K(t,H)}catch(t){J.error("加载角色列表失败: "+t.message)}finally{S.value=!1}}function H(t){const e=[],o=t.split(`
2
2
  `);for(const p of o){const n=p.trim();if(!n||n.startsWith("─")||n.match(/^Role/i))continue;const r=n.split(/\s*[|│]\s*/);r.length>=2?e.push({key:e.length,name:r[0]||"-",description:r[1]||"",permissions:r[2]?r[2].split(/[,;\s]+/).filter(Boolean):[],userCount:r[3]&&parseInt(r[3],10)||0}):n.length>2&&e.push({key:e.length,name:n.slice(0,60),description:"",permissions:[],userCount:0})}return e}const C=v(""),w=v(""),M=v(!1),k=v(null),X=["note:read","note:write","admin:*","skill:execute"];async function Z(){if(!(!C.value.trim()||!w.value.trim())){M.value=!0,k.value=null;try{const t=`auth check ${C.value.trim()} "${w.value.trim()}"`,{output:e}=await R.execute(t,15e3),o=e.toLowerCase(),p=o.includes("allow")||o.includes("granted")||o.includes("true")||o.includes("yes"),n=o.includes("denied")||o.includes("reject")||o.includes("false")||o.includes("no permission");k.value={allowed:p&&!n,detail:e.trim()||(p?"用户拥有该权限":"用户没有该权限")}}catch(t){k.value={allowed:!1,detail:"检查失败: "+t.message}}finally{M.value=!1}}}const V=v(!1),A=v([]),B=v([]),ee=[{title:"时间",key:"timestamp",dataIndex:"timestamp",width:"180px"},{title:"事件",key:"event",dataIndex:"event",width:"200px"},{title:"用户",key:"user",dataIndex:"user",width:"120px"},{title:"级别",key:"level",dataIndex:"level",width:"80px"},{title:"详情",key:"detail",dataIndex:"detail",ellipsis:!0}];function te(t){return{info:"blue",warn:"orange",warning:"orange",error:"red",critical:"red"}[(t||"").toLowerCase()]||"default"}async function E(){V.value=!0;try{const[t,e]=await Promise.all([R.execute("audit log --json",15e3),R.execute("audit stats --json",15e3)]);A.value=K(t.output,ae),B.value=se(e.output)}catch(t){J.error("加载审计日志失败: "+t.message)}finally{V.value=!1}}function ae(t){const e=[],o=t.split(`
3
3
  `);for(const p of o){const n=p.trim();if(!n||n.startsWith("─")||n.startsWith("Audit")||n.startsWith("Recent"))continue;const r=n.split(/\s*[|│]\s*/);if(r.length>=3){e.push({key:e.length,timestamp:r[0]||"-",event:r[1]||"-",user:r[2]||"-",level:r[3]||"info",detail:r.slice(4).join(" ")||""});continue}const y=n.match(/^(\d{4}-\d{2}-\d{2}[\sT]\d{2}:\d{2}(?::\d{2})?)\s+(.+)/);if(y){const m=y[2],f=m.match(/\b(INFO|WARN|WARNING|ERROR|CRITICAL)\b/i);e.push({key:e.length,timestamp:y[1],event:m.replace(/\b(INFO|WARN|WARNING|ERROR|CRITICAL)\b/i,"").trim().slice(0,80),user:"-",level:f?f[1].toLowerCase():"info",detail:""})}else n.length>3&&!n.match(/^\d+ event/i)&&e.push({key:e.length,timestamp:"-",event:n.slice(0,80),user:"-",level:"info",detail:""})}return e}function se(t){const e=F(t);if(e&&typeof e=="object"&&!Array.isArray(e)){const y=["#1677ff","#52c41a","#faad14","#ff4d4f"];return Object.entries(e).slice(0,4).map(([m,f],x)=>({label:m,value:typeof f=="number"?f:String(f),color:y[x%y.length]}))}const o=[],p=t.split(`
4
4
  `),n=["#1677ff","#52c41a","#faad14","#ff4d4f"];let r=0;for(const y of p){const m=y.trim();if(!m||m.startsWith("─")||m.startsWith("Audit"))continue;const f=m.match(/^(.+?)\s*[:=]\s*(.+)$/);if(f){const x=f[1].trim(),N=f[2].trim(),T=N.match(/^(\d+)/);o.push({label:x,value:T?parseInt(T[1],10):N,color:n[r%n.length]}),r++}}return o.length===0&&o.push({label:"总事件数",value:A.value.length,color:"#1677ff"},{label:"状态",value:"就绪",color:"#52c41a"}),o}function F(t){try{const e=t.indexOf("[")!==-1?t.indexOf("["):t.indexOf("{");if(e===-1)return null;const o=t.lastIndexOf("]")!==-1?t.lastIndexOf("]")+1:t.lastIndexOf("}")+1;return JSON.parse(t.slice(e,o))}catch{return null}}function K(t,e){const o=F(t);return Array.isArray(o)?o.map((p,n)=>({key:n,...p})):e(t)}return fe(()=>{P()}),(t,e)=>{const o=u("a-button"),p=u("a-spin"),n=u("a-tag"),r=u("a-empty"),y=u("a-table"),m=u("a-tab-pane"),f=u("a-input"),x=u("a-form-item"),N=u("a-space"),T=u("a-form"),ne=u("a-alert"),U=u("a-card"),le=u("a-statistic"),oe=u("a-col"),ie=u("a-row"),re=u("a-tabs");return i(),d("div",null,[j("div",ye,[e[4]||(e[4]=j("div",null,[j("h2",{class:"page-title"},"权限管理"),j("p",{class:"page-sub"},"角色 / 权限检查 / 审计")],-1)),l(o,{type:"primary",ghost:"",loading:z.value,onClick:q},{icon:s(()=>[l(I(de))]),default:s(()=>[e[3]||(e[3]=h(" 刷新 ",-1))]),_:1},8,["loading"])]),l(re,{activeKey:O.value,"onUpdate:activeKey":e[2]||(e[2]=a=>O.value=a),type:"card",onChange:Q},{default:s(()=>[l(m,{key:"roles"},{tab:s(()=>[l(I(pe)),e[5]||(e[5]=h(" 角色列表 ",-1))]),default:s(()=>[S.value?(i(),d("div",ve,[l(p,{size:"large"})])):(i(),b(y,{key:1,columns:Y,"data-source":W.value,pagination:{pageSize:20,showTotal:a=>`共 ${a} 条`},size:"small",style:{background:"var(--bg-card)"},"row-class-name":()=>"perm-row"},{bodyCell:s(({column:a,record:c})=>[a.key==="name"?(i(),d("span",_e,_(c.name),1)):g("",!0),a.key==="description"?(i(),d("span",ge,_(c.description),1)):g("",!0),a.key==="permissions"?(i(),d(L,{key:2},[(i(!0),d(L,null,$((c.permissions||[]).slice(0,5),D=>(i(),b(n,{key:D,color:"blue",style:{"margin-bottom":"2px"}},{default:s(()=>[h(_(D),1)]),_:2},1024))),128)),(c.permissions||[]).length>5?(i(),b(n,{key:0,color:"default"},{default:s(()=>[h(" +"+_(c.permissions.length-5),1)]),_:2},1024)):g("",!0)],64)):g("",!0),a.key==="userCount"?(i(),b(n,{key:3,color:c.userCount>0?"green":"default"},{default:s(()=>[h(_(c.userCount??0),1)]),_:2},1032,["color"])):g("",!0)]),emptyText:s(()=>[l(r,{description:"暂无角色数据"})]),_:1},8,["data-source","pagination"]))]),_:1}),l(m,{key:"check"},{tab:s(()=>[l(I(G)),e[6]||(e[6]=h(" 权限检查 ",-1))]),default:s(()=>[l(U,{style:{background:"var(--bg-card)","border-color":"var(--border-color)","max-width":"640px"}},{default:s(()=>[l(T,{"label-col":{span:5},"wrapper-col":{span:19}},{default:s(()=>[l(x,{label:"用户 ID",required:""},{default:s(()=>[l(f,{value:C.value,"onUpdate:value":e[0]||(e[0]=a=>C.value=a),placeholder:"输入用户 ID"},null,8,["value"])]),_:1}),l(x,{label:"权限",required:""},{default:s(()=>[l(f,{value:w.value,"onUpdate:value":e[1]||(e[1]=a=>w.value=a),placeholder:"note:read"},null,8,["value"])]),_:1}),l(x,{"wrapper-col":{offset:5,span:19}},{default:s(()=>[l(N,{wrap:""},{default:s(()=>[l(o,{type:"primary",loading:M.value,disabled:!C.value.trim()||!w.value.trim(),onClick:Z},{icon:s(()=>[l(I(G))]),default:s(()=>[e[7]||(e[7]=h(" 检查权限 ",-1))]),_:1},8,["loading","disabled"]),(i(),d(L,null,$(X,a=>l(o,{key:a,size:"small",onClick:c=>w.value=a},{default:s(()=>[h(_(a),1)]),_:2},1032,["onClick"])),64))]),_:1})]),_:1})]),_:1}),k.value!==null?(i(),d("div",he,[l(ne,{message:k.value.allowed?"权限允许":"权限拒绝",description:k.value.detail,type:k.value.allowed?"success":"error","show-icon":""},null,8,["message","description","type"])])):g("",!0)]),_:1})]),_:1}),l(m,{key:"audit"},{tab:s(()=>[l(I(me)),e[8]||(e[8]=h(" 审计日志 ",-1))]),default:s(()=>[l(ie,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:s(()=>[(i(!0),d(L,null,$(B.value,a=>(i(),b(oe,{xs:12,sm:6,key:a.label},{default:s(()=>[l(U,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"},size:"small"},{default:s(()=>[l(le,{title:a.label,value:a.value,"value-style":{color:a.color,fontSize:"20px"}},null,8,["title","value","value-style"])]),_:2},1024)]),_:2},1024))),128))]),_:1}),V.value?(i(),d("div",ke,[l(p,{size:"large"})])):(i(),b(y,{key:1,columns:ee,"data-source":A.value,pagination:{pageSize:20,showTotal:a=>`共 ${a} 条`},size:"small",style:{background:"var(--bg-card)"},"row-class-name":()=>"perm-row"},{bodyCell:s(({column:a,record:c})=>[a.key==="timestamp"?(i(),d("span",xe,_(c.timestamp),1)):g("",!0),a.key==="event"?(i(),d("span",be,_(c.event),1)):g("",!0),a.key==="user"?(i(),d("span",we,_(c.user),1)):g("",!0),a.key==="level"?(i(),b(n,{key:3,color:te(c.level)},{default:s(()=>[h(_(c.level),1)]),_:2},1032,["color"])):g("",!0),a.key==="detail"?(i(),d("span",Ce,_(c.detail),1)):g("",!0)]),emptyText:s(()=>[l(r,{description:"暂无审计日志"})]),_:1},8,["data-source","pagination"]))]),_:1})]),_:1},8,["activeKey"])])}}},Te=ue(Ie,[["__scopeId","data-v-71782e36"]]);export{Te as default};
@@ -1 +1 @@
1
- import{o as ut,M as g,R as u,c as a,N as t,K as y,r as M,a as ee,L as r,O as i,u as D,P as o,S as f,a0 as dt,a1 as pt,Q as h,F as H,Y as de,$ as ct,Z as ft,f as Me}from"./vendor-M5lGV-wr.js";import{u as mt,_ as vt,d as A}from"./index-BqCbH37-.js";import{R as $e,aA as yt,O as gt,ak as _t,h as kt,aB as wt,Q as bt,aC as ht,aD as xt,y as Ct,q as Pt,aE as At,a2 as Mt,m as $t,e as ze}from"./icons-CLQTHa5-.js";function pe(w){if(!w)return w;if(w.error)throw new Error(w.error);return w.result!==void 0?w.result:w}function Se(w,m,s,d,x){return typeof w.onMessage!="function"||typeof w._send!="function"?w.sendRaw({type:m,...s},x).then(pe):new Promise((V,Q)=>{const C=typeof crypto<"u"&&crypto.randomUUID?crypto.randomUUID():`${Date.now()}-${Math.random().toString(36).slice(2)}`,B=`${m}.event`,j=`${m}.end`;let G=setTimeout(()=>{w.offMessage&&w.offMessage(C),Q(new Error(`stream timeout (${x}ms): ${m}`))},x);const F=w.onMessage(C,$=>{if(!(!$||$.id!==C)){if($.type===B&&typeof d=="function"){try{d($.event||$)}catch{}return}if($.type===j){clearTimeout(G),typeof F=="function"?F():w.offMessage&&w.offMessage(C),V(pe($));return}$.type==="error"&&(clearTimeout(G),typeof F=="function"?F():w.offMessage&&w.offMessage(C),Q(new Error($.message||"stream error")))}});w._send({id:C,type:m,...s})})}function zt(){const w=mt(),m=(s,d={},x=3e4)=>w.sendRaw({type:s,...d},x).then(pe);return{async health(){return await m("personal-data-hub.health",{},8e3)},async stats(){return await m("personal-data-hub.stats",{},8e3)},async listAdapters(){return await m("personal-data-hub.list-adapters",{},5e3)},async syncAdapter(s,d={}){return await m("personal-data-hub.sync-adapter",{name:s,options:d},12e4)},async syncAll(s={}){return await m("personal-data-hub.sync-all",{options:s},6e5)},async registerMock({name:s="mock",count:d=20,seed:x=1}={}){return await m("personal-data-hub.register-mock",{name:s,count:d,seed:x})},async unregister(s){return await m("personal-data-hub.unregister",{name:s})},async ask(s,d={}){return await m("personal-data-hub.ask",{question:s,options:d},18e4)},async queryEvents(s={}){return await m("personal-data-hub.query-events",s,1e4)},async recentAudit(s={}){return await m("personal-data-hub.recent-audit",s,1e4)},async testEmailAuth(s){return await m("personal-data-hub.test-email-auth",{account:s},3e4)},async registerEmail(s,d={}){return await m("personal-data-hub.register-email",{account:s,opts:d},15e3)},async unregisterEmail(s){return await m("personal-data-hub.unregister-email",{email:s},5e3)},async listEmailAccounts(){return await m("personal-data-hub.list-email-accounts",{},5e3)},async eventDetail(s){return await m("personal-data-hub.event-detail",{eventId:s},5e3)},async syncAdapterStream(s,d={},x){return await Se(w,"personal-data-hub.sync-adapter-stream",{name:s,options:d},x,6e5)},async syncAllStream(s={},d){return await Se(w,"personal-data-hub.sync-all-stream",{options:s},d,9e5)},async registerAlipay(s,d={}){return await m("personal-data-hub.register-alipay",{account:s,opts:d},15e3)},async unregisterAlipay(s){return await m("personal-data-hub.unregister-alipay",{email:s},5e3)},async listAlipayAccounts(){return await m("personal-data-hub.list-alipay-accounts",{},5e3)},async importAlipayBill({zipPath:s,csvPath:d,zipPassword:x}={}){return await m("personal-data-hub.import-alipay-bill",{zipPath:s,csvPath:d,zipPassword:x},3e5)},async reviewQueueList(s=50){return await m("personal-data-hub.review-queue-list",{limit:s},5e3)},async reviewDecision(s,d){return await m("personal-data-hub.review-decision",{reviewId:s,decision:d},5e3)},async manualMerge(s,d){return await m("personal-data-hub.manual-merge",{aId:s,bId:d},5e3)},async manualUnmerge(s){return await m("personal-data-hub.manual-unmerge",{personId:s},5e3)},async resolverDrain(s=50){return await m("personal-data-hub.resolver-drain",{limit:s},18e4)},async resolverStats(){return await m("personal-data-hub.resolver-stats",{},5e3)},async skillsList(){return await m("personal-data-hub.skills-list",{},5e3)},async runSkill(s,d={}){return await m("personal-data-hub.run-skill",{name:s,options:d},12e4)}}}const St={class:"pdh-page"},Lt={class:"pdh-header"},Dt={class:"kv"},Et={key:0,class:"kv"},Ot={key:1,class:"kv"},Ut={class:"kv"},qt={key:0,class:"kv hint"},It={style:{"margin-top":"12px",display:"flex","justify-content":"space-between","align-items":"center"}},Qt={key:0,style:{"margin-top":"12px"}},Rt={key:1,style:{"margin-top":"12px"}},Ht={class:"answer"},Ft={style:{"margin-top":"8px","font-size":"12px",color:"var(--text-color-secondary, #888)"}},Tt={key:2,style:{"margin-top":"8px"}},Nt={style:{display:"flex","align-items":"center",gap:"8px"}},Vt={class:"hint",style:{"margin-top":"4px"}},Bt={key:0,style:{"margin-top":"16px"}},Gt={class:"json-pre",style:{"max-height":"300px",overflow:"auto"}},Kt={key:0,style:{"margin-top":"8px"}},Zt={key:2,style:{"margin-top":"12px"}},jt={class:"kv",style:{"margin-bottom":"4px"}},Jt={key:0,style:{color:"#faad14"}},Wt={key:2,class:"kv hint"},Yt={key:3,class:"kv hint",style:{color:"#ff4d4f"}},Xt={key:3,style:{"margin-top":"12px"}},ea={key:2,style:{"margin-top":"8px"}},ta={key:1},aa={style:{"margin-left":"8px"}},la={key:3,class:"json-pre"},na={style:{"margin-left":"6px"}},sa={key:0,style:{"margin-left":"6px"}},oa={key:0,class:"hint",style:{"margin-top":"4px"}},ia={key:0,style:{"margin-top":"8px"}},ra={style:{"margin-bottom":"12px"}},ua={class:"hint"},da={class:"kv"},pa={class:"kv",style:{"margin-top":"4px"}},ca={class:"kv"},fa={key:0,class:"hint",style:{"margin-top":"4px"}},ma={key:1,style:{"font-size":"11px"}},va={__name:"PersonalDataHub",setup(w,{expose:m}){const s=zt(),d=M(null),x=M(null),V=M([]),Q=M(""),C=M(null),B=M(""),j=M(!1),G=M(!1),F=M([]),$=M(null),K=M(!1),p=ee({provider:"qq",email:"",authCode:"",host:"",port:993,pdfPasswordHints:{idCardLast6:"",phoneLast6:"",cardLast6:""}}),E=M(null),se=M(!1),_=M(null),I=M(null),Le=[{name:"analysis.spending",label:"消费分析",icon:wt,description:"总支出 / 商家排行 / 月度趋势"},{name:"analysis.relations",label:"人际关系",icon:bt,description:"与每个人的互动频率 / 主动比例"},{name:"analysis.footprint",label:"足迹",icon:ht,description:"常去地点 / 出行模式"},{name:"analysis.interests",label:"兴趣画像",icon:xt,description:"从购买 / 浏览 / 收藏抽兴趣"},{name:"analysis.timeline",label:"时间线",icon:Ct,description:"跨源事件串成故事"}],oe=M(!1),ie=M([]),J=ee({queue:{pending:0},mergeGroups:0,reviewQueue:0}),te=M(!1),P=ee({email:"",zipPassword:"",filePath:""}),z=M(null),v=ee({active:!1,adapter:"",phase:"",mailbox:"",current:0,total:0,attempt:1,errorMessage:""}),c=ee({refresh:!1,ask:!1,addMock:!1,syncAll:!1,sync:{},audit:!1,testEmail:!1,saveEmail:!1,eventDetail:!1,importAlipay:!1,reviewQueue:!1,resolverDrain:!1,skill:!1}),De=[{title:"名称",dataIndex:"name",key:"name",width:140},{title:"版本",dataIndex:"version",key:"version",width:80},{title:"能力",key:"capabilities"},{title:"敏感度",key:"sensitivity",width:140},{title:"操作",key:"actions",width:160,align:"right"}],Ee=[{title:"时间",key:"at",dataIndex:"at",width:170},{title:"动作",dataIndex:"action",key:"action",width:200},{title:"详情",key:"details"}],Oe=[{title:"日期",key:"occurredAt",width:100},{title:"描述",dataIndex:"description",key:"description"},{title:"金额",key:"amount",width:140,align:"right"}];function Ue(l){return l==="high"?"red":l==="medium"?"orange":"default"}function qe(l){if(!l)return"";const e=l.entityCounts||{};return`events=${e.events??0} persons=${e.persons??0} | raw=${l.rawCount??0} invalid=${l.invalidCount??0} | KG triples=${l.kgTripleCount??0} RAG docs=${l.ragDocCount??0} | ${l.durationMs??0}ms`}async function R(){c.refresh=!0;try{d.value=await s.health(),x.value=await s.stats(),V.value=await s.listAdapters()}catch(l){A.error("刷新失败: "+l.message)}finally{c.refresh=!1}}async function ce(){if(Q.value.trim()){c.ask=!0,B.value="",C.value=null;try{C.value=await s.ask(Q.value.trim(),{acceptNonLocal:j.value})}catch(l){B.value=l.message}finally{c.ask=!1}}}async function Ie(){c.addMock=!0;try{await s.registerMock({count:30,seed:Date.now()%1e3}),await R(),A.success("MockAdapter 已注册(30 条 mock 数据 ready 同步)")}catch(l){A.error("注册失败: "+l.message)}finally{c.addMock=!1}}function fe(l=""){v.active=!0,v.adapter=l,v.phase="starting",v.mailbox="",v.current=0,v.total=0,v.attempt=1,v.errorMessage=""}function me(l){l&&(l.adapter&&(v.adapter=l.adapter),l.phase&&(v.phase=l.phase),typeof l.current=="number"&&(v.current=l.current),typeof l.total=="number"&&(v.total=l.total),typeof l.attempt=="number"&&(v.attempt=l.attempt),l.mailbox&&(v.mailbox=l.mailbox),l.phase==="error"&&(v.errorMessage=l.message||"sync error"))}async function Qe(l){c.sync[l]=!0,fe(l);try{typeof s.syncAdapterStream=="function"?$.value=await s.syncAdapterStream(l,{},me):$.value=await s.syncAdapter(l),await R()}catch(e){A.error(`同步 ${l} 失败: ${e.message}`)}finally{c.sync[l]=!1,v.active=!1}}async function Re(){c.syncAll=!0,fe("(all)");try{const l=typeof s.syncAllStream=="function"?await s.syncAllStream({},me):await s.syncAll();$.value=l?.[l.length-1]||null,await R(),A.success(`已同步 ${l?.length||0} 个 adapter`)}catch(l){A.error("同步失败: "+l.message)}finally{c.syncAll=!1,v.active=!1}}async function He(l){try{await s.unregister(l),await R()}catch(e){A.error("移除失败: "+e.message)}}async function Fe(l){if(l){c.audit=!0;try{F.value=await s.recentAudit({limit:200})}catch(e){A.error("审计日志加载失败: "+e.message)}finally{c.audit=!1}}}const ae=Me(()=>!(!p.email||!p.email.includes("@")||!p.authCode||p.authCode.length<4||p.provider==="custom"&&!p.host));function Te(l){return{qq:"QQ: 邮箱 → 设置 → 账户 → IMAP/SMTP → 开启 → 生成授权码",163:"163: 邮箱 → 设置 → POP3/SMTP/IMAP → 开启 IMAP/SMTP 服务 → 授权密码",189:"189: 设置 → 第三方客户端授权码",outlook:"Outlook: account.microsoft.com/security → App password",gmail:"Gmail: myaccount.google.com/apppasswords (需开启 2FA)",custom:"联系你的邮箱管理员获取 IMAP 端点 + app-password"}[l]||"请输入服务商授权码(不是登录密码)"}function ve(){p.provider="qq",p.email="",p.authCode="",p.host="",p.port=993,p.pdfPasswordHints={idCardLast6:"",phoneLast6:"",cardLast6:""},E.value=null}function ye(){const l={provider:p.provider,email:p.email.trim(),authCode:p.authCode};return p.provider==="custom"&&(l.host=p.host.trim(),l.port=p.port||993,l.secure=!0),l}function Ne(){const l={};for(const e of Object.keys(p.pdfPasswordHints)){const k=p.pdfPasswordHints[e];typeof k=="string"&&k.trim().length>0&&(l[e]=k.trim())}return Object.keys(l).length>0?l:null}async function Ve(){if(ae.value){c.testEmail=!0,E.value=null;try{E.value=await s.testEmailAuth(ye())}catch(l){E.value={ok:!1,error:l.message}}finally{c.testEmail=!1}}}async function Be(){if(!(!ae.value||!E.value?.ok)){c.saveEmail=!0;try{const l={},e=Ne();e&&(l.pdfPasswordHints=e),await s.registerEmail(ye(),l),A.success("邮箱账号已注册"),K.value=!1,ve(),await R()}catch(l){A.error("保存失败: "+l.message)}finally{c.saveEmail=!1}}}const ge=Me(()=>!(!P.email||!P.email.includes("@")||!P.filePath||P.filePath.length<3));function Ge(){P.email="",P.zipPassword="",P.filePath="",z.value=null}async function Ke(){if(ge.value){c.importAlipay=!0,z.value=null;try{await s.registerAlipay({email:P.email.trim(),zipPassword:P.zipPassword||void 0});const e=/\.zip$/i.test(P.filePath)?{zipPath:P.filePath,zipPassword:P.zipPassword||void 0}:{csvPath:P.filePath};z.value=await s.importAlipayBill(e),z.value?.status==="ok"?(A.success(`导入成功 — ${z.value.entityCounts?.events||0} 笔交易`),await R()):A.error("导入失败: "+(z.value?.error||z.value?.status))}catch(l){z.value={status:"error",error:l.message},A.error("导入失败: "+l.message)}finally{c.importAlipay=!1}}}async function _e(l){if(l){c.eventDetail=!0,se.value=!0;try{_.value=await s.eventDetail(l)}catch(e){_.value=null,A.error("事件详情加载失败: "+e.message)}finally{c.eventDetail=!1}}}m({showEventDetail:_e});async function Ze(l){c.skill=!0,I.value=null;try{I.value=await s.runSkill(l,{})}catch(e){A.error(`${l} 失败: ${e.message}`)}finally{c.skill=!1}}async function le(){c.reviewQueue=!0;try{ie.value=await s.reviewQueueList(50);const l=await s.resolverStats();Object.assign(J,l)}catch(l){A.error("待消歧加载失败: "+l.message)}finally{c.reviewQueue=!1}}async function je(){oe.value=!0,await le()}async function re(l,e){try{await s.reviewDecision(l,e),A.success(`已记录决策: ${e}`),await le()}catch(k){A.error("决策失败: "+k.message)}}async function Je(){c.resolverDrain=!0;try{const l=await s.resolverDrain(20);A.success(`drain 完成 — same=${l.same} different=${l.different} review=${l.review}`),await le()}catch(l){A.error("drain 失败: "+l.message)}finally{c.resolverDrain=!1}}async function We(){try{const l=await s.resolverStats();Object.assign(J,l)}catch{}}return ut(()=>{R(),We()}),(l,e)=>{const k=y("a-button"),Ye=y("a-badge"),L=y("a-space"),S=y("a-tag"),U=y("a-card"),W=y("a-col"),ke=y("a-row"),Xe=y("a-textarea"),et=y("a-checkbox"),q=y("a-alert"),T=y("a-divider"),tt=y("a-spin"),at=y("a-popconfirm"),ue=y("a-table"),we=y("a-empty"),be=y("a-progress"),Z=y("a-select-option"),lt=y("a-select"),O=y("a-form-item"),N=y("a-input"),he=y("a-tooltip"),xe=y("a-input-password"),nt=y("a-input-number"),Ce=y("a-form"),Y=y("a-drawer"),X=y("a-descriptions-item"),st=y("a-descriptions"),ot=y("a-list-item-meta"),Pe=y("a-list-item"),Ae=y("a-list"),it=y("a-collapse-panel"),rt=y("a-collapse");return r(),g("div",St,[u("div",Lt,[e[26]||(e[26]=u("div",null,[u("h2",{class:"page-title"},"个人数据中台"),u("p",{class:"page-sub"}," 让数据回归个人 — 各 app 数据本地加密落盘,本地 LLM 跨源分析,零云端外传。 ")],-1)),a(L,null,{default:t(()=>[a(k,{loading:c.refresh,onClick:R},{icon:t(()=>[a(D($e))]),default:t(()=>[e[23]||(e[23]=i(" 刷新 ",-1))]),_:1},8,["loading"]),a(Ye,{count:J.reviewQueue,offset:[0,0]},{default:t(()=>[a(k,{type:"primary",ghost:"",onClick:je},{icon:t(()=>[a(D(yt))]),default:t(()=>[e[24]||(e[24]=i(" 待消歧 ",-1))]),_:1})]),_:1},8,["count"]),a(k,{type:"primary",ghost:"",onClick:e[0]||(e[0]=n=>G.value=!0)},{icon:t(()=>[a(D(gt))]),default:t(()=>[e[25]||(e[25]=i(" 审计日志 ",-1))]),_:1})]),_:1})]),a(ke,{gutter:16,style:{"margin-bottom":"16px"}},{default:t(()=>[a(W,{xs:24,sm:12,md:6},{default:t(()=>[a(U,{size:"small",title:"Vault"},{extra:t(()=>[a(S,{color:d.value?.vault?.ok?"green":"red"},{default:t(()=>[i(o(d.value?.vault?.ok?"正常":"未就绪"),1)]),_:1},8,["color"])]),default:t(()=>[u("div",Dt,"schema v"+o(d.value?.vault?.schemaVersion??"?"),1),x.value?.vault?(r(),g("div",Et," 事件 "+o(x.value.vault.events)+" · 联系人 "+o(x.value.vault.persons),1)):f("",!0),x.value?.vault?(r(),g("div",Ot," 地点 "+o(x.value.vault.places)+" · 商品 "+o(x.value.vault.items)+" · 主题 "+o(x.value.vault.topics),1)):f("",!0)]),_:1})]),_:1}),a(W,{xs:24,sm:12,md:6},{default:t(()=>[a(U,{size:"small",title:"本地 LLM"},{extra:t(()=>[a(S,{color:d.value?.llm?.ok?d.value.llm.isLocal?"green":"orange":"red"},{default:t(()=>[i(o(d.value?.llm?.ok?d.value.llm.isLocal?"本地":"非本地":"未就绪"),1)]),_:1},8,["color"])]),default:t(()=>[u("div",Ut,o(d.value?.llm?.name||"—"),1),d.value?.llm?.ok&&!d.value.llm.isLocal?(r(),g("div",qt," ⚠️ 非本地 — ask 会被隐私 gate 拒绝,除非显式 acceptNonLocal ")):f("",!0)]),_:1})]),_:1}),a(W,{xs:24,sm:12,md:6},{default:t(()=>[a(U,{size:"small",title:"KG 索引"},{extra:t(()=>[a(S,{color:d.value?.kgSink?.ok?"green":"default"},{default:t(()=>[i(o(d.value?.kgSink?.ok?"已连接":"不可用"),1)]),_:1},8,["color"])]),default:t(()=>[e[27]||(e[27]=u("div",{class:"kv"},"events / persons → cc knowledge-graph 实体 + 关系",-1))]),_:1})]),_:1}),a(W,{xs:24,sm:12,md:6},{default:t(()=>[a(U,{size:"small",title:"RAG 索引"},{extra:t(()=>[a(S,{color:d.value?.ragSink?.ok?"green":"default"},{default:t(()=>[i(o(d.value?.ragSink?.ok?"已连接":"不可用"),1)]),_:1},8,["color"])]),default:t(()=>[e[28]||(e[28]=u("div",{class:"kv"},"文本 → BM25(vector 留待后续 phase)",-1))]),_:1})]),_:1})]),_:1}),a(U,{style:{"margin-bottom":"16px"}},{title:t(()=>[a(L,null,{default:t(()=>[a(D(kt)),e[29]||(e[29]=u("span",null,"问我数据",-1))]),_:1})]),default:t(()=>[a(Xe,{value:Q.value,"onUpdate:value":e[1]||(e[1]=n=>Q.value=n),rows:2,placeholder:"例:上个月在淘宝总共花了多少?/我妈生日那周买了啥送哪儿?",onKeydown:dt(pt(ce,["exact","prevent"]),["enter"])},null,8,["value","onKeydown"]),u("div",It,[a(et,{checked:j.value,"onUpdate:checked":e[2]||(e[2]=n=>j.value=n)},{default:t(()=>[...e[30]||(e[30]=[i("允许非本地 LLM (volcengine / anthropic 等)",-1)])]),_:1},8,["checked"]),a(k,{type:"primary",loading:c.ask,disabled:!Q.value.trim(),onClick:ce},{icon:t(()=>[a(D(_t))]),default:t(()=>[e[31]||(e[31]=i(" 提问 ",-1))]),_:1},8,["loading","disabled"])]),B.value?(r(),g("div",Qt,[a(q,{type:"error","show-icon":"",message:B.value},null,8,["message"])])):f("",!0),C.value?(r(),g("div",Rt,[C.value.warning==="no-facts"?(r(),h(q,{key:0,type:"warning","show-icon":"",message:"vault 里没找到匹配的事件('no-facts')—— 先同步几个 adapter 让数据进 vault",style:{"margin-bottom":"12px"}})):C.value.warning==="hallucinated-citations"?(r(),h(q,{key:1,type:"warning","show-icon":"",message:`LLM 引用了 ${C.value.hallucinatedCitations?.length||0} 个不存在的 event id —— 模型在编造`,style:{"margin-bottom":"12px"}},null,8,["message"])):f("",!0),u("div",Ht,o(C.value.answer),1),u("div",Ft," 引用 "+o(C.value.citations?.length||0)+" 条事实 · "+o(C.value.facts?.length||0)+" facts 入 prompt · "+o(C.value.durationMs)+"ms · "+o(C.value.model),1),C.value.citations?.length?(r(),g("div",Tt,[e[32]||(e[32]=u("span",{style:{"font-size":"12px",color:"var(--text-color-secondary, #888)"}},"事件链接(点击查看明细 / PDF 解密结果):",-1)),a(L,{style:{"margin-top":"4px"},wrap:""},{default:t(()=>[(r(!0),g(H,null,de(C.value.citations,n=>(r(),h(S,{key:n,color:"blue",style:{cursor:"pointer"},onClick:b=>_e(n)},{default:t(()=>[i(o(n),1)]),_:2},1032,["onClick"]))),128))]),_:1})])):f("",!0)])):f("",!0)]),_:1}),a(U,{style:{"margin-bottom":"16px"}},{title:t(()=>[a(L,null,{default:t(()=>[a(D(Pt)),e[33]||(e[33]=u("span",null,"分析 skill (Phase 11)",-1))]),_:1})]),extra:t(()=>[a(S,{color:"purple"},{default:t(()=>[...e[34]||(e[34]=[i("5 内置",-1)])]),_:1})]),default:t(()=>[a(ke,{gutter:[12,12]},{default:t(()=>[(r(),g(H,null,de(Le,n=>a(W,{xs:24,sm:12,md:8,key:n.name},{default:t(()=>[a(U,{size:"small",hoverable:"",onClick:b=>Ze(n.name)},{default:t(()=>[u("div",Nt,[(r(),h(ct(n.icon),{style:{"font-size":"18px",color:"#722ed1"}})),u("strong",null,o(n.label),1)]),u("div",Vt,o(n.description),1)]),_:2},1032,["onClick"])]),_:2},1024)),64))]),_:1}),I.value?(r(),g("div",Bt,[a(T,{plain:"",orientation:"left"},{default:t(()=>[i(o(I.value.skill)+" 结果",1)]),_:1}),a(tt,{spinning:c.skill},{default:t(()=>[u("pre",Gt,o(JSON.stringify(I.value,null,2)),1),I.value.llm_commentary||I.value.llm_narrative?(r(),g("div",Kt,[a(q,{type:"info",message:I.value.llm_commentary||I.value.llm_narrative},null,8,["message"])])):f("",!0)]),_:1},8,["spinning"])])):f("",!0)]),_:1}),a(U,{style:{"margin-bottom":"16px"}},{title:t(()=>[a(L,null,{default:t(()=>[a(D($t)),e[35]||(e[35]=u("span",null,"Adapters",-1))]),_:1})]),extra:t(()=>[a(L,null,{default:t(()=>[a(k,{onClick:e[3]||(e[3]=n=>K.value=!0)},{icon:t(()=>[a(D(At))]),default:t(()=>[e[36]||(e[36]=i(" 添加邮箱账号 ",-1))]),_:1}),a(k,{onClick:e[4]||(e[4]=n=>te.value=!0)},{icon:t(()=>[a(D(Mt))]),default:t(()=>[e[37]||(e[37]=i(" 导入支付宝账单 ",-1))]),_:1}),a(k,{onClick:Ie,loading:c.addMock},{default:t(()=>[...e[38]||(e[38]=[i(" 注册 MockAdapter(开发) ",-1)])]),_:1},8,["loading"]),a(k,{type:"primary",onClick:Re,loading:c.syncAll,disabled:!V.value.length},{default:t(()=>[...e[39]||(e[39]=[i(" 同步全部 ",-1)])]),_:1},8,["loading","disabled"])]),_:1})]),default:t(()=>[V.value.length?(r(),h(ue,{key:0,columns:De,"data-source":V.value,pagination:!1,"row-key":n=>n.name,size:"middle"},{bodyCell:t(({column:n,record:b})=>[n.key==="sensitivity"?(r(),g(H,{key:0},[a(S,{color:Ue(b.sensitivity)},{default:t(()=>[i(o(b.sensitivity),1)]),_:2},1032,["color"]),b.legalGate?(r(),h(S,{key:0,color:"red",style:{"margin-left":"4px"}},{default:t(()=>[...e[40]||(e[40]=[i("需法律确认",-1)])]),_:1})):f("",!0)],64)):n.key==="capabilities"?(r(!0),g(H,{key:1},de(b.capabilities,ne=>(r(),h(S,{key:ne,style:{"margin-right":"4px"}},{default:t(()=>[i(o(ne),1)]),_:2},1024))),128)):n.key==="actions"?(r(),h(L,{key:2},{default:t(()=>[a(k,{size:"small",loading:c.sync[b.name],onClick:ne=>Qe(b.name)},{default:t(()=>[...e[41]||(e[41]=[i(" 同步 ",-1)])]),_:1},8,["loading","onClick"]),a(at,{title:`从注册表移除 ${b.name}?(vault 数据不会删除)`,onConfirm:ne=>He(b.name)},{default:t(()=>[a(k,{size:"small",danger:""},{default:t(()=>[...e[42]||(e[42]=[i("移除",-1)])]),_:1})]),_:1},8,["title","onConfirm"])]),_:2},1024)):f("",!0)]),_:1},8,["data-source","row-key"])):(r(),h(we,{key:1,description:"无已注册 adapter — 点上方按钮注册 MockAdapter 看效果"})),v.active?(r(),g("div",Zt,[a(U,{size:"small",bordered:!0},{default:t(()=>[u("div",jt,[e[43]||(e[43]=u("strong",null,"同步进行中",-1)),i(" · "+o(v.adapter)+" · "+o(v.phase||"...")+" ",1),v.attempt&&v.attempt>1?(r(),g("span",Jt," (重试 #"+o(v.attempt)+") ",1)):f("",!0)]),v.total>0?(r(),h(be,{key:0,percent:Math.round(v.current/v.total*100),status:v.errorMessage?"exception":"active",size:"small"},null,8,["percent","status"])):(r(),h(be,{key:1,percent:0,status:"active",size:"small"})),v.mailbox?(r(),g("div",Wt," 邮箱 "+o(v.mailbox)+" · "+o(v.current)+" / "+o(v.total),1)):f("",!0),v.errorMessage?(r(),g("div",Yt,o(v.errorMessage),1)):f("",!0)]),_:1})])):f("",!0),$.value?(r(),g("div",Xt,[a(q,{type:$.value.status==="ok"?"success":"error","show-icon":"",message:`同步 ${$.value.adapter}: ${$.value.status}`,description:qe($.value)},null,8,["type","message","description"])])):f("",!0)]),_:1}),a(Y,{open:K.value,"onUpdate:open":e[14]||(e[14]=n=>K.value=n),title:"添加邮箱账号",placement:"right",width:"560","destroy-on-close":!0,onClose:ve},{footer:t(()=>[a(L,null,{default:t(()=>[a(k,{onClick:e[13]||(e[13]=n=>K.value=!1)},{default:t(()=>[...e[53]||(e[53]=[i("取消",-1)])]),_:1}),a(k,{loading:c.testEmail,disabled:!ae.value,onClick:Ve},{default:t(()=>[...e[54]||(e[54]=[i(" 测试连接 ",-1)])]),_:1},8,["loading","disabled"]),a(k,{type:"primary",loading:c.saveEmail,disabled:!ae.value||!E.value?.ok,onClick:Be},{default:t(()=>[...e[55]||(e[55]=[i(" 保存并注册 ",-1)])]),_:1},8,["loading","disabled"])]),_:1})]),default:t(()=>[a(q,{message:"数据回归个人 — 凭证落本地加密文件(与 vault 主密钥同目录),同步动作 100% 本地。",type:"info","show-icon":"",style:{"margin-bottom":"16px"}}),a(Ce,{layout:"vertical",model:p},{default:t(()=>[a(O,{label:"邮箱服务商",required:""},{default:t(()=>[a(lt,{value:p.provider,"onUpdate:value":e[5]||(e[5]=n=>p.provider=n),placeholder:"选择服务商"},{default:t(()=>[a(Z,{value:"qq"},{default:t(()=>[...e[44]||(e[44]=[i("QQ 邮箱 (imap.qq.com)",-1)])]),_:1}),a(Z,{value:"163"},{default:t(()=>[...e[45]||(e[45]=[i("网易邮箱 163/126",-1)])]),_:1}),a(Z,{value:"189"},{default:t(()=>[...e[46]||(e[46]=[i("189 邮箱",-1)])]),_:1}),a(Z,{value:"outlook"},{default:t(()=>[...e[47]||(e[47]=[i("Outlook / Hotmail",-1)])]),_:1}),a(Z,{value:"gmail"},{default:t(()=>[...e[48]||(e[48]=[i("Gmail",-1)])]),_:1}),a(Z,{value:"custom"},{default:t(()=>[...e[49]||(e[49]=[i("自定义 IMAP",-1)])]),_:1})]),_:1},8,["value"])]),_:1}),a(O,{label:"邮箱地址",required:""},{default:t(()=>[a(N,{value:p.email,"onUpdate:value":e[6]||(e[6]=n=>p.email=n),placeholder:"you@qq.com",autocomplete:"off"},null,8,["value"])]),_:1}),a(O,{required:""},{label:t(()=>[a(L,null,{default:t(()=>[e[50]||(e[50]=u("span",null,"授权码(非登录密码)",-1)),a(he,{title:Te(p.provider)},{default:t(()=>[a(D(ze),{style:{color:"#888"}})]),_:1},8,["title"])]),_:1})]),default:t(()=>[a(xe,{value:p.authCode,"onUpdate:value":e[7]||(e[7]=n=>p.authCode=n),placeholder:"例:QQ 邮箱 设置 → 账户 → 开启 IMAP/SMTP → 生成的授权码",autocomplete:"off"},null,8,["value"])]),_:1}),p.provider==="custom"?(r(),h(O,{key:0,label:"IMAP host"},{default:t(()=>[a(N,{value:p.host,"onUpdate:value":e[8]||(e[8]=n=>p.host=n),placeholder:"mail.example.com"},null,8,["value"])]),_:1})):f("",!0),p.provider==="custom"?(r(),h(O,{key:1,label:"端口"},{default:t(()=>[a(nt,{value:p.port,"onUpdate:value":e[9]||(e[9]=n=>p.port=n),min:1,max:65535,"default-value":993},null,8,["value"])]),_:1})):f("",!0),a(T,{orientation:"left",plain:""},{default:t(()=>[...e[51]||(e[51]=[i("PDF 账单解密提示(可选)",-1)])]),_:1}),e[52]||(e[52]=u("p",{class:"hint"},"银行 PDF 月结大多加密;提供几个常用候选项让 Phase 5.5 自动解锁:",-1)),a(O,{label:"身份证后 6 位"},{default:t(()=>[a(N,{value:p.pdfPasswordHints.idCardLast6,"onUpdate:value":e[10]||(e[10]=n=>p.pdfPasswordHints.idCardLast6=n),placeholder:"123456",autocomplete:"off"},null,8,["value"])]),_:1}),a(O,{label:"手机后 6 位"},{default:t(()=>[a(N,{value:p.pdfPasswordHints.phoneLast6,"onUpdate:value":e[11]||(e[11]=n=>p.pdfPasswordHints.phoneLast6=n),placeholder:"123456",autocomplete:"off"},null,8,["value"])]),_:1}),a(O,{label:"信用卡尾 6 位"},{default:t(()=>[a(N,{value:p.pdfPasswordHints.cardLast6,"onUpdate:value":e[12]||(e[12]=n=>p.pdfPasswordHints.cardLast6=n),placeholder:"123456",autocomplete:"off"},null,8,["value"])]),_:1}),E.value?(r(),g("div",ea,[a(q,{type:E.value.ok?"success":"error","show-icon":"",message:E.value.ok?"凭证有效 — 可以保存":`认证失败: ${E.value.reason||E.value.error}`},null,8,["type","message"])])):f("",!0)]),_:1},8,["model"])]),_:1},8,["open"]),a(Y,{open:se.value,"onUpdate:open":e[15]||(e[15]=n=>se.value=n),title:_.value?`事件 ${_.value.event.id}`:"加载中...",placement:"right",width:"640","destroy-on-close":!0},{default:t(()=>[_.value?(r(),g(H,{key:0},[a(st,{column:1,size:"small",bordered:""},{default:t(()=>[a(X,{label:"类型"},{default:t(()=>[i(o(_.value.event.subtype),1)]),_:1}),a(X,{label:"发生于"},{default:t(()=>[i(o(new Date(_.value.event.occurredAt).toLocaleString()),1)]),_:1}),a(X,{label:"actor"},{default:t(()=>[i(o(_.value.event.actor),1)]),_:1}),_.value.event.content?.title?(r(),h(X,{key:0,label:"标题"},{default:t(()=>[i(o(_.value.event.content.title),1)]),_:1})):f("",!0),_.value.event.source?.adapter?(r(),h(X,{key:1,label:"来源 adapter"},{default:t(()=>[i(o(_.value.event.source.adapter)+" @ v"+o(_.value.event.source.adapterVersion),1)]),_:1})):f("",!0)]),_:1}),_.value.classification?(r(),h(T,{key:0,orientation:"left",plain:""},{default:t(()=>[...e[56]||(e[56]=[i("分类",-1)])]),_:1})):f("",!0),_.value.classification?(r(),g("div",ta,[a(S,{color:"blue"},{default:t(()=>[i(o(_.value.classification.category),1)]),_:1}),a(S,null,{default:t(()=>[i(o(_.value.classification.layer),1)]),_:1}),u("span",aa,"置信 "+o(Math.round((_.value.classification.confidence||0)*100))+"%",1)])):f("",!0),_.value.extraction?(r(),h(T,{key:2,orientation:"left",plain:""},{default:t(()=>[i("结构化字段("+o(_.value.extraction.template)+")",1)]),_:1})):f("",!0),_.value.extraction?(r(),g("pre",la,o(JSON.stringify(_.value.extraction.fields,null,2)),1)):f("",!0),_.value.extraction?.pdfExtraction?(r(),h(T,{key:4,orientation:"left",plain:""},{default:t(()=>[...e[57]||(e[57]=[i("PDF 解密 / 解析",-1)])]),_:1})):f("",!0),_.value.extraction?.pdfExtraction?(r(),h(Ae,{key:5,"data-source":_.value.extraction.pdfExtraction,size:"small"},{renderItem:t(({item:n})=>[a(Pe,null,{default:t(()=>[a(ot,{title:n.filename},{description:t(()=>[u("div",null,[a(S,{color:n.decrypted?"green":"red"},{default:t(()=>[i(o(n.decrypted?"已解密":"解密失败"),1)]),_:2},1032,["color"]),u("span",na,"尝试 "+o(n.attempted)+" 次",1),n.transactionsExtracted!=null?(r(),g("span",sa," · 提取 "+o(n.transactionsExtracted)+" 条交易 ",1)):f("",!0)]),n.error?(r(),g("div",oa,o(n.error),1)):f("",!0)]),_:2},1032,["title"])]),_:2},1024)]),_:1},8,["data-source"])):f("",!0),_.value.extraction?.fields?.transactions?.length?(r(),g(H,{key:6},[a(T,{orientation:"left",plain:""},{default:t(()=>[...e[58]||(e[58]=[i("交易明细",-1)])]),_:1}),a(ue,{columns:Oe,"data-source":_.value.extraction.fields.transactions,pagination:{pageSize:10,size:"small"},"row-key":(n,b)=>b,size:"small"},{bodyCell:t(({column:n,record:b})=>[n.key==="occurredAt"?(r(),g(H,{key:0},[i(o(new Date(b.occurredAtMs).toLocaleDateString()),1)],64)):n.key==="amount"?(r(),g("span",{key:1,class:ft(b.amount.direction==="in"?"amount-in":"amount-out")},o(b.amount.direction==="in"?"+":"-")+o(b.amount.value.toFixed(2))+" "+o(b.amount.currency),3)):f("",!0)]),_:1},8,["data-source","row-key"])],64)):f("",!0)],64)):(r(),h(we,{key:1,description:"无事件数据"}))]),_:1},8,["open","title"]),a(Y,{open:te.value,"onUpdate:open":e[20]||(e[20]=n=>te.value=n),title:"导入支付宝账单",placement:"right",width:"560","destroy-on-close":!0,onClose:Ge},{footer:t(()=>[a(L,null,{default:t(()=>[a(k,{onClick:e[19]||(e[19]=n=>te.value=!1)},{default:t(()=>[...e[64]||(e[64]=[i("关闭",-1)])]),_:1}),a(k,{type:"primary",loading:c.importAlipay,disabled:!ge.value,onClick:Ke},{default:t(()=>[...e[65]||(e[65]=[i(" 注册账户 + 导入 ",-1)])]),_:1},8,["loading","disabled"])]),_:1})]),default:t(()=>[a(q,{message:"支付宝官方导出 CSV — 服务器侧全量、稳定无风控。3 分钟拿到 12 个月流水。",type:"info","show-icon":"",style:{"margin-bottom":"16px"}}),a(rt,{bordered:!1,style:{"margin-bottom":"12px"}},{default:t(()=>[a(it,{header:"如何导出账单(首次必看)"},{default:t(()=>[...e[59]||(e[59]=[u("ol",{style:{"padding-left":"18px","font-size":"13px"}},[u("li",null,"支付宝 app → 我的 → 账单 → 右上角 ⋯"),u("li",null,'点 "开具交易流水证明"'),u("li",null,"选月份范围(最长 12 个月)"),u("li",null,'用途选 "个人对账"'),u("li",null,"发送到你的绑定邮箱"),u("li",null,[i("从邮箱下载 "),u("code",null,"alipay_record_*.zip")]),u("li",null,"解压密码 = 你的身份证后 6 位")],-1)])]),_:1})]),_:1}),a(Ce,{layout:"vertical",model:P},{default:t(()=>[a(O,{label:"支付宝绑定邮箱(账户标识)",required:""},{default:t(()=>[a(N,{value:P.email,"onUpdate:value":e[16]||(e[16]=n=>P.email=n),placeholder:"alipay-bound@example.com",autocomplete:"off"},null,8,["value"])]),_:1}),a(O,null,{label:t(()=>[a(L,null,{default:t(()=>[e[60]||(e[60]=u("span",null,"ZIP 密码(身份证后 6 位)",-1)),a(he,{title:"支付宝 ZIP 默认密码 = 身份证号后 6 位。也支持自定义密码。"},{default:t(()=>[a(D(ze),{style:{color:"#888"}})]),_:1})]),_:1})]),default:t(()=>[a(xe,{value:P.zipPassword,"onUpdate:value":e[17]||(e[17]=n=>P.zipPassword=n),placeholder:"例:123456",autocomplete:"off"},null,8,["value"]),e[61]||(e[61]=u("div",{class:"hint",style:{"margin-top":"4px"}}," 空白则解析时再问,或导入的 ZIP 未加密。 ",-1))]),_:1}),a(T,{orientation:"left",plain:""},{default:t(()=>[...e[62]||(e[62]=[i("选择文件",-1)])]),_:1}),a(O,{label:"ZIP 或 CSV 文件路径"},{default:t(()=>[a(N,{value:P.filePath,"onUpdate:value":e[18]||(e[18]=n=>P.filePath=n),placeholder:"C:\\\\Users\\\\you\\\\Downloads\\\\alipay_record_xxx.zip","allow-clear":""},null,8,["value"]),e[63]||(e[63]=u("div",{class:"hint",style:{"margin-top":"4px"}}," 桌面版可通过 Electron 文件选择器自动填充;web-shell 复制完整路径。 ",-1))]),_:1}),z.value?(r(),g("div",ia,[a(q,{type:z.value.status==="ok"?"success":"error","show-icon":"",message:z.value.status==="ok"?`导入成功 — ${z.value.entityCounts?.events||0} 笔交易`:`导入失败: ${z.value.error||z.value.status}`,description:z.value.status==="ok"?`${z.value.entityCounts?.persons||0} 个交易对方 · ${z.value.kgTripleCount||0} KG triples · ${z.value.durationMs||0}ms`:null},null,8,["type","message","description"])])):f("",!0)]),_:1},8,["model"])]),_:1},8,["open"]),a(Y,{open:oe.value,"onUpdate:open":e[21]||(e[21]=n=>oe.value=n),title:"待消歧(EntityResolver 模糊判定)",placement:"right",width:"640","destroy-on-close":!0},{default:t(()=>[ie.value.length===0&&!c.reviewQueue?(r(),h(q,{key:0,type:"success","show-icon":"",message:"无待消歧 pair — 所有跨源 Person 已确定。",style:{"margin-bottom":"12px"}})):f("",!0),u("div",ra,[a(L,null,{default:t(()=>[a(k,{loading:c.reviewQueue,onClick:le},{icon:t(()=>[a(D($e))]),default:t(()=>[e[66]||(e[66]=i(" 刷新 ",-1))]),_:1},8,["loading"]),a(k,{loading:c.resolverDrain,onClick:Je},{default:t(()=>[...e[67]||(e[67]=[i(" 手动 drain 队列 ",-1)])]),_:1},8,["loading"]),u("span",ua," queue: "+o(J.queue?.pending||0)+" pending · "+o(J.mergeGroups||0)+" groups ",1)]),_:1})]),a(Ae,{"data-source":ie.value,pagination:{pageSize:5,size:"small"},size:"small"},{renderItem:t(({item:n})=>[a(Pe,null,{default:t(()=>[a(U,{size:"small",style:{width:"100%"}},{default:t(()=>[u("div",da,[u("strong",null,"Pair #"+o(n.id),1),n.embed_sim?(r(),h(S,{key:0,color:"blue",style:{"margin-left":"8px"}},{default:t(()=>[i(" sim "+o(Number(n.embed_sim).toFixed(2)),1)]),_:2},1024)):f("",!0),n.llm_verdict?(r(),h(S,{key:1,color:n.llm_verdict==="yes"?"green":n.llm_verdict==="no"?"red":"orange",style:{"margin-left":"4px"}},{default:t(()=>[i(" LLM: "+o(n.llm_verdict),1)]),_:2},1032,["color"])):f("",!0)]),u("div",pa,"A: "+o(n.a_person_id),1),u("div",ca,"B: "+o(n.b_person_id),1),n.llm_reason?(r(),g("div",fa," LLM 理由: "+o(n.llm_reason),1)):f("",!0),a(L,{style:{"margin-top":"8px"}},{default:t(()=>[a(k,{size:"small",type:"primary",onClick:b=>re(n.id,"same")},{default:t(()=>[...e[68]||(e[68]=[i("同一人",-1)])]),_:1},8,["onClick"]),a(k,{size:"small",danger:"",onClick:b=>re(n.id,"different")},{default:t(()=>[...e[69]||(e[69]=[i("不同人",-1)])]),_:1},8,["onClick"]),a(k,{size:"small",onClick:b=>re(n.id,"skip")},{default:t(()=>[...e[70]||(e[70]=[i("跳过",-1)])]),_:1},8,["onClick"])]),_:2},1024)]),_:2},1024)]),_:2},1024)]),_:1},8,["data-source"])]),_:1},8,["open"]),a(Y,{open:G.value,"onUpdate:open":e[22]||(e[22]=n=>G.value=n),title:"审计日志(数据 lineage)",placement:"right",width:"600",onAfterOpenChange:Fe},{default:t(()=>[a(ue,{columns:Ee,"data-source":F.value,pagination:{pageSize:20,size:"small"},"row-key":n=>n.id,size:"small"},{bodyCell:t(({column:n,record:b})=>[n.key==="at"?(r(),g(H,{key:0},[i(o(new Date(b.at).toLocaleString()),1)],64)):n.key==="details"?(r(),g("code",ma,o(b.details||"—"),1)):f("",!0)]),_:1},8,["data-source","row-key"])]),_:1},8,["open"])])}}},ka=vt(va,[["__scopeId","data-v-60393590"]]);export{ka as default};
1
+ import{o as ut,M as g,R as u,c as a,N as t,K as y,r as M,a as ee,L as r,O as i,u as D,P as o,S as f,a0 as dt,a1 as pt,Q as h,F as H,Y as de,$ as ct,Z as ft,f as Me}from"./vendor-M5lGV-wr.js";import{u as mt,_ as vt,d as A}from"./index-DSjWvxVr.js";import{R as $e,aA as yt,O as gt,ak as _t,h as kt,aB as wt,Q as bt,aC as ht,aD as xt,y as Ct,q as Pt,aE as At,a2 as Mt,m as $t,e as ze}from"./icons-CLQTHa5-.js";function pe(w){if(!w)return w;if(w.error)throw new Error(w.error);return w.result!==void 0?w.result:w}function Se(w,m,s,d,x){return typeof w.onMessage!="function"||typeof w._send!="function"?w.sendRaw({type:m,...s},x).then(pe):new Promise((V,Q)=>{const C=typeof crypto<"u"&&crypto.randomUUID?crypto.randomUUID():`${Date.now()}-${Math.random().toString(36).slice(2)}`,B=`${m}.event`,j=`${m}.end`;let G=setTimeout(()=>{w.offMessage&&w.offMessage(C),Q(new Error(`stream timeout (${x}ms): ${m}`))},x);const F=w.onMessage(C,$=>{if(!(!$||$.id!==C)){if($.type===B&&typeof d=="function"){try{d($.event||$)}catch{}return}if($.type===j){clearTimeout(G),typeof F=="function"?F():w.offMessage&&w.offMessage(C),V(pe($));return}$.type==="error"&&(clearTimeout(G),typeof F=="function"?F():w.offMessage&&w.offMessage(C),Q(new Error($.message||"stream error")))}});w._send({id:C,type:m,...s})})}function zt(){const w=mt(),m=(s,d={},x=3e4)=>w.sendRaw({type:s,...d},x).then(pe);return{async health(){return await m("personal-data-hub.health",{},8e3)},async stats(){return await m("personal-data-hub.stats",{},8e3)},async listAdapters(){return await m("personal-data-hub.list-adapters",{},5e3)},async syncAdapter(s,d={}){return await m("personal-data-hub.sync-adapter",{name:s,options:d},12e4)},async syncAll(s={}){return await m("personal-data-hub.sync-all",{options:s},6e5)},async registerMock({name:s="mock",count:d=20,seed:x=1}={}){return await m("personal-data-hub.register-mock",{name:s,count:d,seed:x})},async unregister(s){return await m("personal-data-hub.unregister",{name:s})},async ask(s,d={}){return await m("personal-data-hub.ask",{question:s,options:d},18e4)},async queryEvents(s={}){return await m("personal-data-hub.query-events",s,1e4)},async recentAudit(s={}){return await m("personal-data-hub.recent-audit",s,1e4)},async testEmailAuth(s){return await m("personal-data-hub.test-email-auth",{account:s},3e4)},async registerEmail(s,d={}){return await m("personal-data-hub.register-email",{account:s,opts:d},15e3)},async unregisterEmail(s){return await m("personal-data-hub.unregister-email",{email:s},5e3)},async listEmailAccounts(){return await m("personal-data-hub.list-email-accounts",{},5e3)},async eventDetail(s){return await m("personal-data-hub.event-detail",{eventId:s},5e3)},async syncAdapterStream(s,d={},x){return await Se(w,"personal-data-hub.sync-adapter-stream",{name:s,options:d},x,6e5)},async syncAllStream(s={},d){return await Se(w,"personal-data-hub.sync-all-stream",{options:s},d,9e5)},async registerAlipay(s,d={}){return await m("personal-data-hub.register-alipay",{account:s,opts:d},15e3)},async unregisterAlipay(s){return await m("personal-data-hub.unregister-alipay",{email:s},5e3)},async listAlipayAccounts(){return await m("personal-data-hub.list-alipay-accounts",{},5e3)},async importAlipayBill({zipPath:s,csvPath:d,zipPassword:x}={}){return await m("personal-data-hub.import-alipay-bill",{zipPath:s,csvPath:d,zipPassword:x},3e5)},async reviewQueueList(s=50){return await m("personal-data-hub.review-queue-list",{limit:s},5e3)},async reviewDecision(s,d){return await m("personal-data-hub.review-decision",{reviewId:s,decision:d},5e3)},async manualMerge(s,d){return await m("personal-data-hub.manual-merge",{aId:s,bId:d},5e3)},async manualUnmerge(s){return await m("personal-data-hub.manual-unmerge",{personId:s},5e3)},async resolverDrain(s=50){return await m("personal-data-hub.resolver-drain",{limit:s},18e4)},async resolverStats(){return await m("personal-data-hub.resolver-stats",{},5e3)},async skillsList(){return await m("personal-data-hub.skills-list",{},5e3)},async runSkill(s,d={}){return await m("personal-data-hub.run-skill",{name:s,options:d},12e4)}}}const St={class:"pdh-page"},Lt={class:"pdh-header"},Dt={class:"kv"},Et={key:0,class:"kv"},Ot={key:1,class:"kv"},Ut={class:"kv"},qt={key:0,class:"kv hint"},It={style:{"margin-top":"12px",display:"flex","justify-content":"space-between","align-items":"center"}},Qt={key:0,style:{"margin-top":"12px"}},Rt={key:1,style:{"margin-top":"12px"}},Ht={class:"answer"},Ft={style:{"margin-top":"8px","font-size":"12px",color:"var(--text-color-secondary, #888)"}},Tt={key:2,style:{"margin-top":"8px"}},Nt={style:{display:"flex","align-items":"center",gap:"8px"}},Vt={class:"hint",style:{"margin-top":"4px"}},Bt={key:0,style:{"margin-top":"16px"}},Gt={class:"json-pre",style:{"max-height":"300px",overflow:"auto"}},Kt={key:0,style:{"margin-top":"8px"}},Zt={key:2,style:{"margin-top":"12px"}},jt={class:"kv",style:{"margin-bottom":"4px"}},Jt={key:0,style:{color:"#faad14"}},Wt={key:2,class:"kv hint"},Yt={key:3,class:"kv hint",style:{color:"#ff4d4f"}},Xt={key:3,style:{"margin-top":"12px"}},ea={key:2,style:{"margin-top":"8px"}},ta={key:1},aa={style:{"margin-left":"8px"}},la={key:3,class:"json-pre"},na={style:{"margin-left":"6px"}},sa={key:0,style:{"margin-left":"6px"}},oa={key:0,class:"hint",style:{"margin-top":"4px"}},ia={key:0,style:{"margin-top":"8px"}},ra={style:{"margin-bottom":"12px"}},ua={class:"hint"},da={class:"kv"},pa={class:"kv",style:{"margin-top":"4px"}},ca={class:"kv"},fa={key:0,class:"hint",style:{"margin-top":"4px"}},ma={key:1,style:{"font-size":"11px"}},va={__name:"PersonalDataHub",setup(w,{expose:m}){const s=zt(),d=M(null),x=M(null),V=M([]),Q=M(""),C=M(null),B=M(""),j=M(!1),G=M(!1),F=M([]),$=M(null),K=M(!1),p=ee({provider:"qq",email:"",authCode:"",host:"",port:993,pdfPasswordHints:{idCardLast6:"",phoneLast6:"",cardLast6:""}}),E=M(null),se=M(!1),_=M(null),I=M(null),Le=[{name:"analysis.spending",label:"消费分析",icon:wt,description:"总支出 / 商家排行 / 月度趋势"},{name:"analysis.relations",label:"人际关系",icon:bt,description:"与每个人的互动频率 / 主动比例"},{name:"analysis.footprint",label:"足迹",icon:ht,description:"常去地点 / 出行模式"},{name:"analysis.interests",label:"兴趣画像",icon:xt,description:"从购买 / 浏览 / 收藏抽兴趣"},{name:"analysis.timeline",label:"时间线",icon:Ct,description:"跨源事件串成故事"}],oe=M(!1),ie=M([]),J=ee({queue:{pending:0},mergeGroups:0,reviewQueue:0}),te=M(!1),P=ee({email:"",zipPassword:"",filePath:""}),z=M(null),v=ee({active:!1,adapter:"",phase:"",mailbox:"",current:0,total:0,attempt:1,errorMessage:""}),c=ee({refresh:!1,ask:!1,addMock:!1,syncAll:!1,sync:{},audit:!1,testEmail:!1,saveEmail:!1,eventDetail:!1,importAlipay:!1,reviewQueue:!1,resolverDrain:!1,skill:!1}),De=[{title:"名称",dataIndex:"name",key:"name",width:140},{title:"版本",dataIndex:"version",key:"version",width:80},{title:"能力",key:"capabilities"},{title:"敏感度",key:"sensitivity",width:140},{title:"操作",key:"actions",width:160,align:"right"}],Ee=[{title:"时间",key:"at",dataIndex:"at",width:170},{title:"动作",dataIndex:"action",key:"action",width:200},{title:"详情",key:"details"}],Oe=[{title:"日期",key:"occurredAt",width:100},{title:"描述",dataIndex:"description",key:"description"},{title:"金额",key:"amount",width:140,align:"right"}];function Ue(l){return l==="high"?"red":l==="medium"?"orange":"default"}function qe(l){if(!l)return"";const e=l.entityCounts||{};return`events=${e.events??0} persons=${e.persons??0} | raw=${l.rawCount??0} invalid=${l.invalidCount??0} | KG triples=${l.kgTripleCount??0} RAG docs=${l.ragDocCount??0} | ${l.durationMs??0}ms`}async function R(){c.refresh=!0;try{d.value=await s.health(),x.value=await s.stats(),V.value=await s.listAdapters()}catch(l){A.error("刷新失败: "+l.message)}finally{c.refresh=!1}}async function ce(){if(Q.value.trim()){c.ask=!0,B.value="",C.value=null;try{C.value=await s.ask(Q.value.trim(),{acceptNonLocal:j.value})}catch(l){B.value=l.message}finally{c.ask=!1}}}async function Ie(){c.addMock=!0;try{await s.registerMock({count:30,seed:Date.now()%1e3}),await R(),A.success("MockAdapter 已注册(30 条 mock 数据 ready 同步)")}catch(l){A.error("注册失败: "+l.message)}finally{c.addMock=!1}}function fe(l=""){v.active=!0,v.adapter=l,v.phase="starting",v.mailbox="",v.current=0,v.total=0,v.attempt=1,v.errorMessage=""}function me(l){l&&(l.adapter&&(v.adapter=l.adapter),l.phase&&(v.phase=l.phase),typeof l.current=="number"&&(v.current=l.current),typeof l.total=="number"&&(v.total=l.total),typeof l.attempt=="number"&&(v.attempt=l.attempt),l.mailbox&&(v.mailbox=l.mailbox),l.phase==="error"&&(v.errorMessage=l.message||"sync error"))}async function Qe(l){c.sync[l]=!0,fe(l);try{typeof s.syncAdapterStream=="function"?$.value=await s.syncAdapterStream(l,{},me):$.value=await s.syncAdapter(l),await R()}catch(e){A.error(`同步 ${l} 失败: ${e.message}`)}finally{c.sync[l]=!1,v.active=!1}}async function Re(){c.syncAll=!0,fe("(all)");try{const l=typeof s.syncAllStream=="function"?await s.syncAllStream({},me):await s.syncAll();$.value=l?.[l.length-1]||null,await R(),A.success(`已同步 ${l?.length||0} 个 adapter`)}catch(l){A.error("同步失败: "+l.message)}finally{c.syncAll=!1,v.active=!1}}async function He(l){try{await s.unregister(l),await R()}catch(e){A.error("移除失败: "+e.message)}}async function Fe(l){if(l){c.audit=!0;try{F.value=await s.recentAudit({limit:200})}catch(e){A.error("审计日志加载失败: "+e.message)}finally{c.audit=!1}}}const ae=Me(()=>!(!p.email||!p.email.includes("@")||!p.authCode||p.authCode.length<4||p.provider==="custom"&&!p.host));function Te(l){return{qq:"QQ: 邮箱 → 设置 → 账户 → IMAP/SMTP → 开启 → 生成授权码",163:"163: 邮箱 → 设置 → POP3/SMTP/IMAP → 开启 IMAP/SMTP 服务 → 授权密码",189:"189: 设置 → 第三方客户端授权码",outlook:"Outlook: account.microsoft.com/security → App password",gmail:"Gmail: myaccount.google.com/apppasswords (需开启 2FA)",custom:"联系你的邮箱管理员获取 IMAP 端点 + app-password"}[l]||"请输入服务商授权码(不是登录密码)"}function ve(){p.provider="qq",p.email="",p.authCode="",p.host="",p.port=993,p.pdfPasswordHints={idCardLast6:"",phoneLast6:"",cardLast6:""},E.value=null}function ye(){const l={provider:p.provider,email:p.email.trim(),authCode:p.authCode};return p.provider==="custom"&&(l.host=p.host.trim(),l.port=p.port||993,l.secure=!0),l}function Ne(){const l={};for(const e of Object.keys(p.pdfPasswordHints)){const k=p.pdfPasswordHints[e];typeof k=="string"&&k.trim().length>0&&(l[e]=k.trim())}return Object.keys(l).length>0?l:null}async function Ve(){if(ae.value){c.testEmail=!0,E.value=null;try{E.value=await s.testEmailAuth(ye())}catch(l){E.value={ok:!1,error:l.message}}finally{c.testEmail=!1}}}async function Be(){if(!(!ae.value||!E.value?.ok)){c.saveEmail=!0;try{const l={},e=Ne();e&&(l.pdfPasswordHints=e),await s.registerEmail(ye(),l),A.success("邮箱账号已注册"),K.value=!1,ve(),await R()}catch(l){A.error("保存失败: "+l.message)}finally{c.saveEmail=!1}}}const ge=Me(()=>!(!P.email||!P.email.includes("@")||!P.filePath||P.filePath.length<3));function Ge(){P.email="",P.zipPassword="",P.filePath="",z.value=null}async function Ke(){if(ge.value){c.importAlipay=!0,z.value=null;try{await s.registerAlipay({email:P.email.trim(),zipPassword:P.zipPassword||void 0});const e=/\.zip$/i.test(P.filePath)?{zipPath:P.filePath,zipPassword:P.zipPassword||void 0}:{csvPath:P.filePath};z.value=await s.importAlipayBill(e),z.value?.status==="ok"?(A.success(`导入成功 — ${z.value.entityCounts?.events||0} 笔交易`),await R()):A.error("导入失败: "+(z.value?.error||z.value?.status))}catch(l){z.value={status:"error",error:l.message},A.error("导入失败: "+l.message)}finally{c.importAlipay=!1}}}async function _e(l){if(l){c.eventDetail=!0,se.value=!0;try{_.value=await s.eventDetail(l)}catch(e){_.value=null,A.error("事件详情加载失败: "+e.message)}finally{c.eventDetail=!1}}}m({showEventDetail:_e});async function Ze(l){c.skill=!0,I.value=null;try{I.value=await s.runSkill(l,{})}catch(e){A.error(`${l} 失败: ${e.message}`)}finally{c.skill=!1}}async function le(){c.reviewQueue=!0;try{ie.value=await s.reviewQueueList(50);const l=await s.resolverStats();Object.assign(J,l)}catch(l){A.error("待消歧加载失败: "+l.message)}finally{c.reviewQueue=!1}}async function je(){oe.value=!0,await le()}async function re(l,e){try{await s.reviewDecision(l,e),A.success(`已记录决策: ${e}`),await le()}catch(k){A.error("决策失败: "+k.message)}}async function Je(){c.resolverDrain=!0;try{const l=await s.resolverDrain(20);A.success(`drain 完成 — same=${l.same} different=${l.different} review=${l.review}`),await le()}catch(l){A.error("drain 失败: "+l.message)}finally{c.resolverDrain=!1}}async function We(){try{const l=await s.resolverStats();Object.assign(J,l)}catch{}}return ut(()=>{R(),We()}),(l,e)=>{const k=y("a-button"),Ye=y("a-badge"),L=y("a-space"),S=y("a-tag"),U=y("a-card"),W=y("a-col"),ke=y("a-row"),Xe=y("a-textarea"),et=y("a-checkbox"),q=y("a-alert"),T=y("a-divider"),tt=y("a-spin"),at=y("a-popconfirm"),ue=y("a-table"),we=y("a-empty"),be=y("a-progress"),Z=y("a-select-option"),lt=y("a-select"),O=y("a-form-item"),N=y("a-input"),he=y("a-tooltip"),xe=y("a-input-password"),nt=y("a-input-number"),Ce=y("a-form"),Y=y("a-drawer"),X=y("a-descriptions-item"),st=y("a-descriptions"),ot=y("a-list-item-meta"),Pe=y("a-list-item"),Ae=y("a-list"),it=y("a-collapse-panel"),rt=y("a-collapse");return r(),g("div",St,[u("div",Lt,[e[26]||(e[26]=u("div",null,[u("h2",{class:"page-title"},"个人数据中台"),u("p",{class:"page-sub"}," 让数据回归个人 — 各 app 数据本地加密落盘,本地 LLM 跨源分析,零云端外传。 ")],-1)),a(L,null,{default:t(()=>[a(k,{loading:c.refresh,onClick:R},{icon:t(()=>[a(D($e))]),default:t(()=>[e[23]||(e[23]=i(" 刷新 ",-1))]),_:1},8,["loading"]),a(Ye,{count:J.reviewQueue,offset:[0,0]},{default:t(()=>[a(k,{type:"primary",ghost:"",onClick:je},{icon:t(()=>[a(D(yt))]),default:t(()=>[e[24]||(e[24]=i(" 待消歧 ",-1))]),_:1})]),_:1},8,["count"]),a(k,{type:"primary",ghost:"",onClick:e[0]||(e[0]=n=>G.value=!0)},{icon:t(()=>[a(D(gt))]),default:t(()=>[e[25]||(e[25]=i(" 审计日志 ",-1))]),_:1})]),_:1})]),a(ke,{gutter:16,style:{"margin-bottom":"16px"}},{default:t(()=>[a(W,{xs:24,sm:12,md:6},{default:t(()=>[a(U,{size:"small",title:"Vault"},{extra:t(()=>[a(S,{color:d.value?.vault?.ok?"green":"red"},{default:t(()=>[i(o(d.value?.vault?.ok?"正常":"未就绪"),1)]),_:1},8,["color"])]),default:t(()=>[u("div",Dt,"schema v"+o(d.value?.vault?.schemaVersion??"?"),1),x.value?.vault?(r(),g("div",Et," 事件 "+o(x.value.vault.events)+" · 联系人 "+o(x.value.vault.persons),1)):f("",!0),x.value?.vault?(r(),g("div",Ot," 地点 "+o(x.value.vault.places)+" · 商品 "+o(x.value.vault.items)+" · 主题 "+o(x.value.vault.topics),1)):f("",!0)]),_:1})]),_:1}),a(W,{xs:24,sm:12,md:6},{default:t(()=>[a(U,{size:"small",title:"本地 LLM"},{extra:t(()=>[a(S,{color:d.value?.llm?.ok?d.value.llm.isLocal?"green":"orange":"red"},{default:t(()=>[i(o(d.value?.llm?.ok?d.value.llm.isLocal?"本地":"非本地":"未就绪"),1)]),_:1},8,["color"])]),default:t(()=>[u("div",Ut,o(d.value?.llm?.name||"—"),1),d.value?.llm?.ok&&!d.value.llm.isLocal?(r(),g("div",qt," ⚠️ 非本地 — ask 会被隐私 gate 拒绝,除非显式 acceptNonLocal ")):f("",!0)]),_:1})]),_:1}),a(W,{xs:24,sm:12,md:6},{default:t(()=>[a(U,{size:"small",title:"KG 索引"},{extra:t(()=>[a(S,{color:d.value?.kgSink?.ok?"green":"default"},{default:t(()=>[i(o(d.value?.kgSink?.ok?"已连接":"不可用"),1)]),_:1},8,["color"])]),default:t(()=>[e[27]||(e[27]=u("div",{class:"kv"},"events / persons → cc knowledge-graph 实体 + 关系",-1))]),_:1})]),_:1}),a(W,{xs:24,sm:12,md:6},{default:t(()=>[a(U,{size:"small",title:"RAG 索引"},{extra:t(()=>[a(S,{color:d.value?.ragSink?.ok?"green":"default"},{default:t(()=>[i(o(d.value?.ragSink?.ok?"已连接":"不可用"),1)]),_:1},8,["color"])]),default:t(()=>[e[28]||(e[28]=u("div",{class:"kv"},"文本 → BM25(vector 留待后续 phase)",-1))]),_:1})]),_:1})]),_:1}),a(U,{style:{"margin-bottom":"16px"}},{title:t(()=>[a(L,null,{default:t(()=>[a(D(kt)),e[29]||(e[29]=u("span",null,"问我数据",-1))]),_:1})]),default:t(()=>[a(Xe,{value:Q.value,"onUpdate:value":e[1]||(e[1]=n=>Q.value=n),rows:2,placeholder:"例:上个月在淘宝总共花了多少?/我妈生日那周买了啥送哪儿?",onKeydown:dt(pt(ce,["exact","prevent"]),["enter"])},null,8,["value","onKeydown"]),u("div",It,[a(et,{checked:j.value,"onUpdate:checked":e[2]||(e[2]=n=>j.value=n)},{default:t(()=>[...e[30]||(e[30]=[i("允许非本地 LLM (volcengine / anthropic 等)",-1)])]),_:1},8,["checked"]),a(k,{type:"primary",loading:c.ask,disabled:!Q.value.trim(),onClick:ce},{icon:t(()=>[a(D(_t))]),default:t(()=>[e[31]||(e[31]=i(" 提问 ",-1))]),_:1},8,["loading","disabled"])]),B.value?(r(),g("div",Qt,[a(q,{type:"error","show-icon":"",message:B.value},null,8,["message"])])):f("",!0),C.value?(r(),g("div",Rt,[C.value.warning==="no-facts"?(r(),h(q,{key:0,type:"warning","show-icon":"",message:"vault 里没找到匹配的事件('no-facts')—— 先同步几个 adapter 让数据进 vault",style:{"margin-bottom":"12px"}})):C.value.warning==="hallucinated-citations"?(r(),h(q,{key:1,type:"warning","show-icon":"",message:`LLM 引用了 ${C.value.hallucinatedCitations?.length||0} 个不存在的 event id —— 模型在编造`,style:{"margin-bottom":"12px"}},null,8,["message"])):f("",!0),u("div",Ht,o(C.value.answer),1),u("div",Ft," 引用 "+o(C.value.citations?.length||0)+" 条事实 · "+o(C.value.facts?.length||0)+" facts 入 prompt · "+o(C.value.durationMs)+"ms · "+o(C.value.model),1),C.value.citations?.length?(r(),g("div",Tt,[e[32]||(e[32]=u("span",{style:{"font-size":"12px",color:"var(--text-color-secondary, #888)"}},"事件链接(点击查看明细 / PDF 解密结果):",-1)),a(L,{style:{"margin-top":"4px"},wrap:""},{default:t(()=>[(r(!0),g(H,null,de(C.value.citations,n=>(r(),h(S,{key:n,color:"blue",style:{cursor:"pointer"},onClick:b=>_e(n)},{default:t(()=>[i(o(n),1)]),_:2},1032,["onClick"]))),128))]),_:1})])):f("",!0)])):f("",!0)]),_:1}),a(U,{style:{"margin-bottom":"16px"}},{title:t(()=>[a(L,null,{default:t(()=>[a(D(Pt)),e[33]||(e[33]=u("span",null,"分析 skill (Phase 11)",-1))]),_:1})]),extra:t(()=>[a(S,{color:"purple"},{default:t(()=>[...e[34]||(e[34]=[i("5 内置",-1)])]),_:1})]),default:t(()=>[a(ke,{gutter:[12,12]},{default:t(()=>[(r(),g(H,null,de(Le,n=>a(W,{xs:24,sm:12,md:8,key:n.name},{default:t(()=>[a(U,{size:"small",hoverable:"",onClick:b=>Ze(n.name)},{default:t(()=>[u("div",Nt,[(r(),h(ct(n.icon),{style:{"font-size":"18px",color:"#722ed1"}})),u("strong",null,o(n.label),1)]),u("div",Vt,o(n.description),1)]),_:2},1032,["onClick"])]),_:2},1024)),64))]),_:1}),I.value?(r(),g("div",Bt,[a(T,{plain:"",orientation:"left"},{default:t(()=>[i(o(I.value.skill)+" 结果",1)]),_:1}),a(tt,{spinning:c.skill},{default:t(()=>[u("pre",Gt,o(JSON.stringify(I.value,null,2)),1),I.value.llm_commentary||I.value.llm_narrative?(r(),g("div",Kt,[a(q,{type:"info",message:I.value.llm_commentary||I.value.llm_narrative},null,8,["message"])])):f("",!0)]),_:1},8,["spinning"])])):f("",!0)]),_:1}),a(U,{style:{"margin-bottom":"16px"}},{title:t(()=>[a(L,null,{default:t(()=>[a(D($t)),e[35]||(e[35]=u("span",null,"Adapters",-1))]),_:1})]),extra:t(()=>[a(L,null,{default:t(()=>[a(k,{onClick:e[3]||(e[3]=n=>K.value=!0)},{icon:t(()=>[a(D(At))]),default:t(()=>[e[36]||(e[36]=i(" 添加邮箱账号 ",-1))]),_:1}),a(k,{onClick:e[4]||(e[4]=n=>te.value=!0)},{icon:t(()=>[a(D(Mt))]),default:t(()=>[e[37]||(e[37]=i(" 导入支付宝账单 ",-1))]),_:1}),a(k,{onClick:Ie,loading:c.addMock},{default:t(()=>[...e[38]||(e[38]=[i(" 注册 MockAdapter(开发) ",-1)])]),_:1},8,["loading"]),a(k,{type:"primary",onClick:Re,loading:c.syncAll,disabled:!V.value.length},{default:t(()=>[...e[39]||(e[39]=[i(" 同步全部 ",-1)])]),_:1},8,["loading","disabled"])]),_:1})]),default:t(()=>[V.value.length?(r(),h(ue,{key:0,columns:De,"data-source":V.value,pagination:!1,"row-key":n=>n.name,size:"middle"},{bodyCell:t(({column:n,record:b})=>[n.key==="sensitivity"?(r(),g(H,{key:0},[a(S,{color:Ue(b.sensitivity)},{default:t(()=>[i(o(b.sensitivity),1)]),_:2},1032,["color"]),b.legalGate?(r(),h(S,{key:0,color:"red",style:{"margin-left":"4px"}},{default:t(()=>[...e[40]||(e[40]=[i("需法律确认",-1)])]),_:1})):f("",!0)],64)):n.key==="capabilities"?(r(!0),g(H,{key:1},de(b.capabilities,ne=>(r(),h(S,{key:ne,style:{"margin-right":"4px"}},{default:t(()=>[i(o(ne),1)]),_:2},1024))),128)):n.key==="actions"?(r(),h(L,{key:2},{default:t(()=>[a(k,{size:"small",loading:c.sync[b.name],onClick:ne=>Qe(b.name)},{default:t(()=>[...e[41]||(e[41]=[i(" 同步 ",-1)])]),_:1},8,["loading","onClick"]),a(at,{title:`从注册表移除 ${b.name}?(vault 数据不会删除)`,onConfirm:ne=>He(b.name)},{default:t(()=>[a(k,{size:"small",danger:""},{default:t(()=>[...e[42]||(e[42]=[i("移除",-1)])]),_:1})]),_:1},8,["title","onConfirm"])]),_:2},1024)):f("",!0)]),_:1},8,["data-source","row-key"])):(r(),h(we,{key:1,description:"无已注册 adapter — 点上方按钮注册 MockAdapter 看效果"})),v.active?(r(),g("div",Zt,[a(U,{size:"small",bordered:!0},{default:t(()=>[u("div",jt,[e[43]||(e[43]=u("strong",null,"同步进行中",-1)),i(" · "+o(v.adapter)+" · "+o(v.phase||"...")+" ",1),v.attempt&&v.attempt>1?(r(),g("span",Jt," (重试 #"+o(v.attempt)+") ",1)):f("",!0)]),v.total>0?(r(),h(be,{key:0,percent:Math.round(v.current/v.total*100),status:v.errorMessage?"exception":"active",size:"small"},null,8,["percent","status"])):(r(),h(be,{key:1,percent:0,status:"active",size:"small"})),v.mailbox?(r(),g("div",Wt," 邮箱 "+o(v.mailbox)+" · "+o(v.current)+" / "+o(v.total),1)):f("",!0),v.errorMessage?(r(),g("div",Yt,o(v.errorMessage),1)):f("",!0)]),_:1})])):f("",!0),$.value?(r(),g("div",Xt,[a(q,{type:$.value.status==="ok"?"success":"error","show-icon":"",message:`同步 ${$.value.adapter}: ${$.value.status}`,description:qe($.value)},null,8,["type","message","description"])])):f("",!0)]),_:1}),a(Y,{open:K.value,"onUpdate:open":e[14]||(e[14]=n=>K.value=n),title:"添加邮箱账号",placement:"right",width:"560","destroy-on-close":!0,onClose:ve},{footer:t(()=>[a(L,null,{default:t(()=>[a(k,{onClick:e[13]||(e[13]=n=>K.value=!1)},{default:t(()=>[...e[53]||(e[53]=[i("取消",-1)])]),_:1}),a(k,{loading:c.testEmail,disabled:!ae.value,onClick:Ve},{default:t(()=>[...e[54]||(e[54]=[i(" 测试连接 ",-1)])]),_:1},8,["loading","disabled"]),a(k,{type:"primary",loading:c.saveEmail,disabled:!ae.value||!E.value?.ok,onClick:Be},{default:t(()=>[...e[55]||(e[55]=[i(" 保存并注册 ",-1)])]),_:1},8,["loading","disabled"])]),_:1})]),default:t(()=>[a(q,{message:"数据回归个人 — 凭证落本地加密文件(与 vault 主密钥同目录),同步动作 100% 本地。",type:"info","show-icon":"",style:{"margin-bottom":"16px"}}),a(Ce,{layout:"vertical",model:p},{default:t(()=>[a(O,{label:"邮箱服务商",required:""},{default:t(()=>[a(lt,{value:p.provider,"onUpdate:value":e[5]||(e[5]=n=>p.provider=n),placeholder:"选择服务商"},{default:t(()=>[a(Z,{value:"qq"},{default:t(()=>[...e[44]||(e[44]=[i("QQ 邮箱 (imap.qq.com)",-1)])]),_:1}),a(Z,{value:"163"},{default:t(()=>[...e[45]||(e[45]=[i("网易邮箱 163/126",-1)])]),_:1}),a(Z,{value:"189"},{default:t(()=>[...e[46]||(e[46]=[i("189 邮箱",-1)])]),_:1}),a(Z,{value:"outlook"},{default:t(()=>[...e[47]||(e[47]=[i("Outlook / Hotmail",-1)])]),_:1}),a(Z,{value:"gmail"},{default:t(()=>[...e[48]||(e[48]=[i("Gmail",-1)])]),_:1}),a(Z,{value:"custom"},{default:t(()=>[...e[49]||(e[49]=[i("自定义 IMAP",-1)])]),_:1})]),_:1},8,["value"])]),_:1}),a(O,{label:"邮箱地址",required:""},{default:t(()=>[a(N,{value:p.email,"onUpdate:value":e[6]||(e[6]=n=>p.email=n),placeholder:"you@qq.com",autocomplete:"off"},null,8,["value"])]),_:1}),a(O,{required:""},{label:t(()=>[a(L,null,{default:t(()=>[e[50]||(e[50]=u("span",null,"授权码(非登录密码)",-1)),a(he,{title:Te(p.provider)},{default:t(()=>[a(D(ze),{style:{color:"#888"}})]),_:1},8,["title"])]),_:1})]),default:t(()=>[a(xe,{value:p.authCode,"onUpdate:value":e[7]||(e[7]=n=>p.authCode=n),placeholder:"例:QQ 邮箱 设置 → 账户 → 开启 IMAP/SMTP → 生成的授权码",autocomplete:"off"},null,8,["value"])]),_:1}),p.provider==="custom"?(r(),h(O,{key:0,label:"IMAP host"},{default:t(()=>[a(N,{value:p.host,"onUpdate:value":e[8]||(e[8]=n=>p.host=n),placeholder:"mail.example.com"},null,8,["value"])]),_:1})):f("",!0),p.provider==="custom"?(r(),h(O,{key:1,label:"端口"},{default:t(()=>[a(nt,{value:p.port,"onUpdate:value":e[9]||(e[9]=n=>p.port=n),min:1,max:65535,"default-value":993},null,8,["value"])]),_:1})):f("",!0),a(T,{orientation:"left",plain:""},{default:t(()=>[...e[51]||(e[51]=[i("PDF 账单解密提示(可选)",-1)])]),_:1}),e[52]||(e[52]=u("p",{class:"hint"},"银行 PDF 月结大多加密;提供几个常用候选项让 Phase 5.5 自动解锁:",-1)),a(O,{label:"身份证后 6 位"},{default:t(()=>[a(N,{value:p.pdfPasswordHints.idCardLast6,"onUpdate:value":e[10]||(e[10]=n=>p.pdfPasswordHints.idCardLast6=n),placeholder:"123456",autocomplete:"off"},null,8,["value"])]),_:1}),a(O,{label:"手机后 6 位"},{default:t(()=>[a(N,{value:p.pdfPasswordHints.phoneLast6,"onUpdate:value":e[11]||(e[11]=n=>p.pdfPasswordHints.phoneLast6=n),placeholder:"123456",autocomplete:"off"},null,8,["value"])]),_:1}),a(O,{label:"信用卡尾 6 位"},{default:t(()=>[a(N,{value:p.pdfPasswordHints.cardLast6,"onUpdate:value":e[12]||(e[12]=n=>p.pdfPasswordHints.cardLast6=n),placeholder:"123456",autocomplete:"off"},null,8,["value"])]),_:1}),E.value?(r(),g("div",ea,[a(q,{type:E.value.ok?"success":"error","show-icon":"",message:E.value.ok?"凭证有效 — 可以保存":`认证失败: ${E.value.reason||E.value.error}`},null,8,["type","message"])])):f("",!0)]),_:1},8,["model"])]),_:1},8,["open"]),a(Y,{open:se.value,"onUpdate:open":e[15]||(e[15]=n=>se.value=n),title:_.value?`事件 ${_.value.event.id}`:"加载中...",placement:"right",width:"640","destroy-on-close":!0},{default:t(()=>[_.value?(r(),g(H,{key:0},[a(st,{column:1,size:"small",bordered:""},{default:t(()=>[a(X,{label:"类型"},{default:t(()=>[i(o(_.value.event.subtype),1)]),_:1}),a(X,{label:"发生于"},{default:t(()=>[i(o(new Date(_.value.event.occurredAt).toLocaleString()),1)]),_:1}),a(X,{label:"actor"},{default:t(()=>[i(o(_.value.event.actor),1)]),_:1}),_.value.event.content?.title?(r(),h(X,{key:0,label:"标题"},{default:t(()=>[i(o(_.value.event.content.title),1)]),_:1})):f("",!0),_.value.event.source?.adapter?(r(),h(X,{key:1,label:"来源 adapter"},{default:t(()=>[i(o(_.value.event.source.adapter)+" @ v"+o(_.value.event.source.adapterVersion),1)]),_:1})):f("",!0)]),_:1}),_.value.classification?(r(),h(T,{key:0,orientation:"left",plain:""},{default:t(()=>[...e[56]||(e[56]=[i("分类",-1)])]),_:1})):f("",!0),_.value.classification?(r(),g("div",ta,[a(S,{color:"blue"},{default:t(()=>[i(o(_.value.classification.category),1)]),_:1}),a(S,null,{default:t(()=>[i(o(_.value.classification.layer),1)]),_:1}),u("span",aa,"置信 "+o(Math.round((_.value.classification.confidence||0)*100))+"%",1)])):f("",!0),_.value.extraction?(r(),h(T,{key:2,orientation:"left",plain:""},{default:t(()=>[i("结构化字段("+o(_.value.extraction.template)+")",1)]),_:1})):f("",!0),_.value.extraction?(r(),g("pre",la,o(JSON.stringify(_.value.extraction.fields,null,2)),1)):f("",!0),_.value.extraction?.pdfExtraction?(r(),h(T,{key:4,orientation:"left",plain:""},{default:t(()=>[...e[57]||(e[57]=[i("PDF 解密 / 解析",-1)])]),_:1})):f("",!0),_.value.extraction?.pdfExtraction?(r(),h(Ae,{key:5,"data-source":_.value.extraction.pdfExtraction,size:"small"},{renderItem:t(({item:n})=>[a(Pe,null,{default:t(()=>[a(ot,{title:n.filename},{description:t(()=>[u("div",null,[a(S,{color:n.decrypted?"green":"red"},{default:t(()=>[i(o(n.decrypted?"已解密":"解密失败"),1)]),_:2},1032,["color"]),u("span",na,"尝试 "+o(n.attempted)+" 次",1),n.transactionsExtracted!=null?(r(),g("span",sa," · 提取 "+o(n.transactionsExtracted)+" 条交易 ",1)):f("",!0)]),n.error?(r(),g("div",oa,o(n.error),1)):f("",!0)]),_:2},1032,["title"])]),_:2},1024)]),_:1},8,["data-source"])):f("",!0),_.value.extraction?.fields?.transactions?.length?(r(),g(H,{key:6},[a(T,{orientation:"left",plain:""},{default:t(()=>[...e[58]||(e[58]=[i("交易明细",-1)])]),_:1}),a(ue,{columns:Oe,"data-source":_.value.extraction.fields.transactions,pagination:{pageSize:10,size:"small"},"row-key":(n,b)=>b,size:"small"},{bodyCell:t(({column:n,record:b})=>[n.key==="occurredAt"?(r(),g(H,{key:0},[i(o(new Date(b.occurredAtMs).toLocaleDateString()),1)],64)):n.key==="amount"?(r(),g("span",{key:1,class:ft(b.amount.direction==="in"?"amount-in":"amount-out")},o(b.amount.direction==="in"?"+":"-")+o(b.amount.value.toFixed(2))+" "+o(b.amount.currency),3)):f("",!0)]),_:1},8,["data-source","row-key"])],64)):f("",!0)],64)):(r(),h(we,{key:1,description:"无事件数据"}))]),_:1},8,["open","title"]),a(Y,{open:te.value,"onUpdate:open":e[20]||(e[20]=n=>te.value=n),title:"导入支付宝账单",placement:"right",width:"560","destroy-on-close":!0,onClose:Ge},{footer:t(()=>[a(L,null,{default:t(()=>[a(k,{onClick:e[19]||(e[19]=n=>te.value=!1)},{default:t(()=>[...e[64]||(e[64]=[i("关闭",-1)])]),_:1}),a(k,{type:"primary",loading:c.importAlipay,disabled:!ge.value,onClick:Ke},{default:t(()=>[...e[65]||(e[65]=[i(" 注册账户 + 导入 ",-1)])]),_:1},8,["loading","disabled"])]),_:1})]),default:t(()=>[a(q,{message:"支付宝官方导出 CSV — 服务器侧全量、稳定无风控。3 分钟拿到 12 个月流水。",type:"info","show-icon":"",style:{"margin-bottom":"16px"}}),a(rt,{bordered:!1,style:{"margin-bottom":"12px"}},{default:t(()=>[a(it,{header:"如何导出账单(首次必看)"},{default:t(()=>[...e[59]||(e[59]=[u("ol",{style:{"padding-left":"18px","font-size":"13px"}},[u("li",null,"支付宝 app → 我的 → 账单 → 右上角 ⋯"),u("li",null,'点 "开具交易流水证明"'),u("li",null,"选月份范围(最长 12 个月)"),u("li",null,'用途选 "个人对账"'),u("li",null,"发送到你的绑定邮箱"),u("li",null,[i("从邮箱下载 "),u("code",null,"alipay_record_*.zip")]),u("li",null,"解压密码 = 你的身份证后 6 位")],-1)])]),_:1})]),_:1}),a(Ce,{layout:"vertical",model:P},{default:t(()=>[a(O,{label:"支付宝绑定邮箱(账户标识)",required:""},{default:t(()=>[a(N,{value:P.email,"onUpdate:value":e[16]||(e[16]=n=>P.email=n),placeholder:"alipay-bound@example.com",autocomplete:"off"},null,8,["value"])]),_:1}),a(O,null,{label:t(()=>[a(L,null,{default:t(()=>[e[60]||(e[60]=u("span",null,"ZIP 密码(身份证后 6 位)",-1)),a(he,{title:"支付宝 ZIP 默认密码 = 身份证号后 6 位。也支持自定义密码。"},{default:t(()=>[a(D(ze),{style:{color:"#888"}})]),_:1})]),_:1})]),default:t(()=>[a(xe,{value:P.zipPassword,"onUpdate:value":e[17]||(e[17]=n=>P.zipPassword=n),placeholder:"例:123456",autocomplete:"off"},null,8,["value"]),e[61]||(e[61]=u("div",{class:"hint",style:{"margin-top":"4px"}}," 空白则解析时再问,或导入的 ZIP 未加密。 ",-1))]),_:1}),a(T,{orientation:"left",plain:""},{default:t(()=>[...e[62]||(e[62]=[i("选择文件",-1)])]),_:1}),a(O,{label:"ZIP 或 CSV 文件路径"},{default:t(()=>[a(N,{value:P.filePath,"onUpdate:value":e[18]||(e[18]=n=>P.filePath=n),placeholder:"C:\\\\Users\\\\you\\\\Downloads\\\\alipay_record_xxx.zip","allow-clear":""},null,8,["value"]),e[63]||(e[63]=u("div",{class:"hint",style:{"margin-top":"4px"}}," 桌面版可通过 Electron 文件选择器自动填充;web-shell 复制完整路径。 ",-1))]),_:1}),z.value?(r(),g("div",ia,[a(q,{type:z.value.status==="ok"?"success":"error","show-icon":"",message:z.value.status==="ok"?`导入成功 — ${z.value.entityCounts?.events||0} 笔交易`:`导入失败: ${z.value.error||z.value.status}`,description:z.value.status==="ok"?`${z.value.entityCounts?.persons||0} 个交易对方 · ${z.value.kgTripleCount||0} KG triples · ${z.value.durationMs||0}ms`:null},null,8,["type","message","description"])])):f("",!0)]),_:1},8,["model"])]),_:1},8,["open"]),a(Y,{open:oe.value,"onUpdate:open":e[21]||(e[21]=n=>oe.value=n),title:"待消歧(EntityResolver 模糊判定)",placement:"right",width:"640","destroy-on-close":!0},{default:t(()=>[ie.value.length===0&&!c.reviewQueue?(r(),h(q,{key:0,type:"success","show-icon":"",message:"无待消歧 pair — 所有跨源 Person 已确定。",style:{"margin-bottom":"12px"}})):f("",!0),u("div",ra,[a(L,null,{default:t(()=>[a(k,{loading:c.reviewQueue,onClick:le},{icon:t(()=>[a(D($e))]),default:t(()=>[e[66]||(e[66]=i(" 刷新 ",-1))]),_:1},8,["loading"]),a(k,{loading:c.resolverDrain,onClick:Je},{default:t(()=>[...e[67]||(e[67]=[i(" 手动 drain 队列 ",-1)])]),_:1},8,["loading"]),u("span",ua," queue: "+o(J.queue?.pending||0)+" pending · "+o(J.mergeGroups||0)+" groups ",1)]),_:1})]),a(Ae,{"data-source":ie.value,pagination:{pageSize:5,size:"small"},size:"small"},{renderItem:t(({item:n})=>[a(Pe,null,{default:t(()=>[a(U,{size:"small",style:{width:"100%"}},{default:t(()=>[u("div",da,[u("strong",null,"Pair #"+o(n.id),1),n.embed_sim?(r(),h(S,{key:0,color:"blue",style:{"margin-left":"8px"}},{default:t(()=>[i(" sim "+o(Number(n.embed_sim).toFixed(2)),1)]),_:2},1024)):f("",!0),n.llm_verdict?(r(),h(S,{key:1,color:n.llm_verdict==="yes"?"green":n.llm_verdict==="no"?"red":"orange",style:{"margin-left":"4px"}},{default:t(()=>[i(" LLM: "+o(n.llm_verdict),1)]),_:2},1032,["color"])):f("",!0)]),u("div",pa,"A: "+o(n.a_person_id),1),u("div",ca,"B: "+o(n.b_person_id),1),n.llm_reason?(r(),g("div",fa," LLM 理由: "+o(n.llm_reason),1)):f("",!0),a(L,{style:{"margin-top":"8px"}},{default:t(()=>[a(k,{size:"small",type:"primary",onClick:b=>re(n.id,"same")},{default:t(()=>[...e[68]||(e[68]=[i("同一人",-1)])]),_:1},8,["onClick"]),a(k,{size:"small",danger:"",onClick:b=>re(n.id,"different")},{default:t(()=>[...e[69]||(e[69]=[i("不同人",-1)])]),_:1},8,["onClick"]),a(k,{size:"small",onClick:b=>re(n.id,"skip")},{default:t(()=>[...e[70]||(e[70]=[i("跳过",-1)])]),_:1},8,["onClick"])]),_:2},1024)]),_:2},1024)]),_:2},1024)]),_:1},8,["data-source"])]),_:1},8,["open"]),a(Y,{open:G.value,"onUpdate:open":e[22]||(e[22]=n=>G.value=n),title:"审计日志(数据 lineage)",placement:"right",width:"600",onAfterOpenChange:Fe},{default:t(()=>[a(ue,{columns:Ee,"data-source":F.value,pagination:{pageSize:20,size:"small"},"row-key":n=>n.id,size:"small"},{bodyCell:t(({column:n,record:b})=>[n.key==="at"?(r(),g(H,{key:0},[i(o(new Date(b.at).toLocaleString()),1)],64)):n.key==="details"?(r(),g("code",ma,o(b.details||"—"),1)):f("",!0)]),_:1},8,["data-source","row-key"])]),_:1},8,["open"])])}}},ka=vt(va,[["__scopeId","data-v-60393590"]]);export{ka as default};
@@ -1 +1 @@
1
- import{_ as Qe,u as We,b as Ze,d as C}from"./index-BqCbH37-.js";import{s as Se}from"./community-parser-CO25nZFt.js";import{R as Xe,ar as et,z as me,ap as tt,a5 as lt,l as at,Y as ve,V as K,aR as nt,f as it,L as st,d as ot,y as rt}from"./icons-CLQTHa5-.js";import{o as pt,M as b,R as S,P as p,c as i,N as a,Q as y,S as m,K as v,r as $,L as r,O as f,u as c,F as z,Y as L,Z as ut,f as te,a as ct}from"./vendor-M5lGV-wr.js";function Y(t){const o=Se(t);if(!o)return null;try{return JSON.parse(o)}catch{}const n=o.match(/\{[\s\S]*\}|\[[\s\S]*\]/);if(!n)return null;try{return JSON.parse(n[0])}catch{return null}}const Ae=Object.freeze(["pending","running","paused","completed","failed","cancelled"]),dt=Object.freeze(["pending","running","gate-waiting","completed","failed","skipped"]),be=Object.freeze(["requirement","architecture","code-generation","testing","code-review","deploy","monitoring"]),le=Object.freeze(["feature","bugfix","refactor","security-audit"]),ft=Object.freeze(["git-pr","docker","npm-publish","local","staging","custom"]),_e=Object.freeze(["code-review","deploy"]);function N(t,o=0){return typeof t=="number"&&Number.isFinite(t)?t:o}function ke(t){if(!t)return{noDb:!1,error:""};const o=Se(t),n=/No database/i.test(o);return{noDb:n,error:n?"No database":""}}function gt(t,o=0){if(!t||typeof t!="object")return null;const n=t.id||"";return n?{key:n,id:n,pipelineId:String(t.pipelineId||""),stageIndex:N(t.stageIndex,o),name:String(t.name||""),status:String(t.status||"pending").toLowerCase(),gateRequired:!!t.gateRequired,gateApproved:!!t.gateApproved,gateRejectReason:t.gateRejectReason||"",input:t.input??null,output:t.output??null,errorMessage:t.errorMessage||"",startedAt:t.startedAt??null,completedAt:t.completedAt??null,_idx:o}:null}function yt(t,o=0){if(!t||typeof t!="object")return null;const n=t.id||"";if(!n)return null;const g=Array.isArray(t.stages)?t.stages.map(gt).filter(Boolean):[];return{key:n,id:n,name:t.name||"",template:String(t.template||""),config:t.config??null,status:String(t.status||"pending").toLowerCase(),currentStage:N(t.currentStage,0),result:t.result??null,errorMessage:t.errorMessage||"",createdAt:t.createdAt??null,updatedAt:t.updatedAt??null,startedAt:t.startedAt??null,completedAt:t.completedAt??null,stages:g,_idx:o}}function mt(t){const o=Y(t);return Array.isArray(o)?o.map(yt).filter(Boolean):[]}function vt(t,o=0){if(!t||typeof t!="object")return null;const n=t.id||"";return n?{key:n,id:n,pipelineId:String(t.pipelineId||""),strategy:String(t.strategy||"").toLowerCase(),config:t.config??null,status:String(t.status||"pending").toLowerCase(),result:t.result??null,errorMessage:t.errorMessage||"",rolledBackAt:t.rolledBackAt??null,rollbackReason:t.rollbackReason||"",createdAt:t.createdAt??null,completedAt:t.completedAt??null,_idx:o}:null}function bt(t){const o=Y(t);return Array.isArray(o)?o.map(vt).filter(Boolean):[]}function _t(t,o=0){if(!t||typeof t!="object")return null;const n=t.name||"";return n?{key:n,name:n,description:String(t.description||""),stages:Array.isArray(t.stages)?t.stages.filter(g=>typeof g=="string"):[],gateStages:Array.isArray(t.gateStages)?t.gateStages.filter(g=>typeof g=="string"):[],_idx:o}:null}function kt(t){const o=Y(t);return Array.isArray(o)?o.map(_t).filter(Boolean):[]}const St={totalPipelines:0,pipelinesByTemplate:{},pipelinesByStatus:{},totalStages:0,stagesByStatus:{},totalArtifacts:0,totalDeploys:0,deploysByStrategy:{}};function At(t){const o=JSON.parse(JSON.stringify(St));for(const g of le)o.pipelinesByTemplate[g]=0;for(const g of Ae)o.pipelinesByStatus[g]=0;for(const g of dt)o.stagesByStatus[g]=0;for(const g of ft)o.deploysByStrategy[g]=0;const n=Y(t);if(!n||typeof n!="object"||Array.isArray(n))return o;if(o.totalPipelines=N(n.totalPipelines,0),o.totalStages=N(n.totalStages,0),o.totalArtifacts=N(n.totalArtifacts,0),o.totalDeploys=N(n.totalDeploys,0),n.pipelinesByTemplate&&typeof n.pipelinesByTemplate=="object")for(const[g,_]of Object.entries(n.pipelinesByTemplate))typeof _=="number"&&Number.isFinite(_)&&(o.pipelinesByTemplate[g]=_);if(n.pipelinesByStatus&&typeof n.pipelinesByStatus=="object")for(const[g,_]of Object.entries(n.pipelinesByStatus))typeof _=="number"&&Number.isFinite(_)&&(o.pipelinesByStatus[g]=_);if(n.stagesByStatus&&typeof n.stagesByStatus=="object")for(const[g,_]of Object.entries(n.stagesByStatus))typeof _=="number"&&Number.isFinite(_)&&(o.stagesByStatus[g]=_);if(n.deploysByStrategy&&typeof n.deploysByStrategy=="object")for(const[g,_]of Object.entries(n.deploysByStrategy))typeof _=="number"&&Number.isFinite(_)&&(o.deploysByStrategy[g]=_);return o}function j(t){if(t==null||t==="")return"—";const o=typeof t=="number"?new Date(t):new Date(String(t));return isNaN(o.getTime())?String(t):o.toLocaleString("zh-CN",{hour12:!1})}const $t={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},xt={class:"page-title"},ht={class:"page-sub"},zt={class:"stage-flow"},Ct={class:"stage-idx"},Bt={class:"filter-bar"},Tt={style:{color:"var(--text-primary)","font-weight":"500"}},Pt={style:{color:"var(--text-secondary)","font-size":"11px","font-family":"monospace","margin-top":"2px"}},Ot={key:1,style:{color:"var(--text-muted)"}},Lt={key:5,style:{color:"var(--text-secondary)","font-size":"11px"}},Dt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},jt={key:0,style:{color:"var(--text-primary)","font-family":"monospace","font-size":"12px"}},Nt={key:3,style:{color:"var(--text-secondary)","font-size":"11px"}},Rt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},Et={style:{color:"var(--text-secondary)","font-size":"12px",margin:"0 0 10px"}},Ft={class:"tpl-stages"},Mt={key:0,style:{"padding-top":"8px"}},Jt={style:{color:"var(--text-primary)","font-size":"13px",margin:"20px 0 10px"}},It={style:{display:"flex","align-items":"center",gap:"8px","flex-wrap":"wrap"}},Ut={style:{color:"var(--text-primary)","font-weight":"500"}},wt={key:0,style:{color:"#52c41a","margin-left":"4px"}},Gt={key:0,style:{color:"#ff4d4f","font-size":"11px","margin-top":"4px"}},qt={key:1,style:{color:"var(--text-secondary)","font-size":"11px","margin-top":"2px"}},Vt={key:0},Kt={__name:"Pipeline",setup(t){const o=We(),{t:n}=Ze(),g=$(!1),_=$(!1),ae=$([]),ne=$([]),ie=$([]),T=$({totalPipelines:0,pipelinesByTemplate:{},pipelinesByStatus:{},totalStages:0,stagesByStatus:{},totalArtifacts:0,totalDeploys:0,deploysByStrategy:{}}),H=$({noDb:!1,error:""}),se=$("pipelines"),R=$(""),E=$(""),I=$(!1),Q=$(!1),k=ct({template:"feature",name:"",configJson:""}),A=$(null),$e=te(()=>[{title:n("pipeline.cols.name"),key:"name"},{title:n("pipeline.cols.template"),key:"template",width:"110px"},{title:n("pipeline.cols.progress"),key:"progress",width:"160px"},{title:n("pipeline.cols.currentStage"),key:"currentStage",width:"140px"},{title:n("pipeline.cols.status"),key:"status",width:"110px"},{title:n("pipeline.cols.createdAt"),key:"createdAt",width:"160px"},{title:n("pipeline.cols.action"),key:"action",width:"260px"}]),xe=te(()=>[{title:n("pipeline.cols.pipeline"),key:"pipeline",width:"180px"},{title:n("pipeline.cols.strategy"),key:"strategy",width:"120px"},{title:n("pipeline.cols.status"),key:"status",width:"110px"},{title:n("pipeline.cols.createdAt"),key:"createdAt"}]),he=te(()=>{let e=ae.value;return R.value&&(e=e.filter(s=>s.template===R.value)),E.value&&(e=e.filter(s=>s.status===E.value)),e});function F(e){const s=`pipeline.templateLabels.${e}`,d=n(s);return d===s?e:d}function W(e){return{feature:"green",bugfix:"red",refactor:"purple","security-audit":"volcano"}[e]||"default"}function U(e){const s=`pipeline.stageLabels.${e}`,d=n(s);return d===s?e:d}function Z(e){const s=`pipeline.pipelineStatusLabels.${e}`,d=n(s);return d===s?e:d}function oe(e){return{pending:"default",running:"processing",paused:"orange",completed:"green",failed:"red",cancelled:"default"}[e]||"default"}function ze(e){const s=`pipeline.stageStatusLabels.${e}`,d=n(s);return d===s?e:d}function re(e){return{pending:"default",running:"processing","gate-waiting":"gold",completed:"green",failed:"red",skipped:"default"}[e]||"default"}function Ce(e){const s=`pipeline.deployStatusLabels.${e}`,d=n(s);return d===s?e:d}function Be(e){return{pending:"default",running:"processing",succeeded:"green",failed:"red","rolled-back":"orange"}[e]||"default"}function Te(e){return{"git-pr":"blue",docker:"cyan","npm-publish":"magenta",local:"default",staging:"orange",custom:"purple"}[e]||"default"}function Pe(e){return{pending:"gray",running:"blue","gate-waiting":"gold",completed:"green",failed:"red",skipped:"gray"}[e]||"gray"}function pe(e){if(!e.stages.length)return 0;const s=e.stages.filter(d=>d.status==="completed").length;return Math.round(100*s/e.stages.length)}function w(e){if(!e.stages.length)return null;const s=Math.min(e.currentStage,e.stages.length-1);return e.stages[s]||null}function Oe(e){if(e.status!=="running")return!1;const s=w(e);return s&&s.status==="gate-waiting"&&s.gateRequired&&!s.gateApproved}function Le(e){return e.status==="pending"||e.status==="running"||e.status==="paused"}async function G(){g.value=!0,H.value={noDb:!1,error:""};try{const[e,s,d,x]=await Promise.all([o.execute("pipeline list",1e4).catch(()=>({output:""})),o.execute("pipeline deploys",1e4).catch(()=>({output:""})),o.execute("pipeline templates",8e3).catch(()=>({output:""})),o.execute("pipeline stats",8e3).catch(()=>({output:""}))]),q=[e,s,x].map(B=>ke(B.output)).find(B=>B.noDb);q&&(H.value=q),ae.value=mt(e.output),ne.value=bt(s.output),ie.value=kt(d.output),T.value=At(x.output)}catch(e){C.error(n("pipeline.msg.loadFailed")+": "+(e?.message||e))}finally{g.value=!1}}async function De(){if(!k.template){C.warning(n("pipeline.msg.selectTemplate"));return}if(k.configJson.trim())try{JSON.parse(k.configJson)}catch{C.warning(n("pipeline.msg.badConfigJson"));return}_.value=!0;try{const e=[`pipeline create --template ${k.template}`];k.name.trim()&&e.push(`--name "${k.name.trim().replace(/"/g,'\\"')}"`),k.configJson.trim()&&e.push(`--config '${k.configJson.trim().replace(/'/g,"'\\''")}'`);const{output:s}=await o.execute(e.join(" "),1e4);if(ke(s).noDb){C.error(n("pipeline.msg.needCcInit"));return}if(/error|Error|失败/i.test(s)&&!/"id"/.test(s)){C.error(n("pipeline.msg.createFailed")+": "+s.slice(0,120));return}C.success(n("pipeline.msg.createSuccess")),I.value=!1,ue(),await G()}catch(e){C.error(n("pipeline.msg.createFailed")+": "+(e?.message||e))}finally{_.value=!1}}async function je(e){await M(e,`pipeline start ${e.id}`,n("pipeline.msg.started"))}async function Ne(e){await M(e,`pipeline pause ${e.id}`,n("pipeline.msg.paused"))}async function Re(e){await M(e,`pipeline resume ${e.id}`,n("pipeline.msg.resumed"))}async function Ee(e){await M(e,`pipeline approve ${e.id}`,n("pipeline.msg.gateApproved"))}async function Fe(e){await M(e,`pipeline cancel ${e.id}`,n("pipeline.msg.cancelled"))}async function M(e,s,d){try{const{output:x}=await o.execute(s,8e3);if(/error|Error|失败/i.test(x)&&!/"id"/.test(x)){C.error(n("pipeline.msg.actionFailed")+": "+x.slice(0,120));return}C.success(d),await G()}catch(x){C.error(n("pipeline.msg.actionFailed")+": "+(x?.message||x))}}function Me(e){A.value=e,Q.value=!0}function ue(){k.template="feature",k.name="",k.configJson=""}return pt(G),(e,s)=>{const d=v("a-button"),x=v("a-space"),q=v("a-alert"),B=v("a-statistic"),P=v("a-card"),D=v("a-col"),ce=v("a-row"),V=v("a-radio-button"),de=v("a-radio-group"),h=v("a-tag"),fe=v("a-progress"),Je=v("a-popconfirm"),ge=v("a-table"),X=v("a-tab-pane"),Ie=v("a-tabs"),Ue=v("a-select-option"),we=v("a-select"),ee=v("a-form-item"),Ge=v("a-input"),qe=v("a-textarea"),Ve=v("a-form"),ye=v("a-modal"),J=v("a-descriptions-item"),Ke=v("a-descriptions"),Ye=v("a-timeline-item"),He=v("a-timeline");return r(),b("div",null,[S("div",$t,[S("div",null,[S("h2",xt,p(e.$t("pipeline.title")),1),S("p",ht,p(e.$t("pipeline.subtitle")),1)]),i(x,null,{default:a(()=>[i(d,{loading:g.value,onClick:G},{icon:a(()=>[i(c(Xe))]),default:a(()=>[f(" "+p(e.$t("pipeline.refresh")),1)]),_:1},8,["loading"]),i(d,{type:"primary",onClick:s[0]||(s[0]=l=>I.value=!0)},{icon:a(()=>[i(c(et))]),default:a(()=>[f(" "+p(e.$t("pipeline.create")),1)]),_:1})]),_:1})]),H.value.noDb?(r(),y(q,{key:0,type:"info","show-icon":"",message:e.$t("pipeline.noDb.message"),description:e.$t("pipeline.noDb.description"),style:{"margin-bottom":"16px"}},null,8,["message","description"])):m("",!0),i(ce,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:a(()=>[i(D,{xs:12,sm:8,lg:5},{default:a(()=>[i(P,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[i(B,{title:e.$t("pipeline.stats.totalPipelines"),value:T.value.totalPipelines,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:a(()=>[i(c(me))]),_:1},8,["title","value"])]),_:1})]),_:1}),i(D,{xs:12,sm:8,lg:5},{default:a(()=>[i(P,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[i(B,{title:e.$t("pipeline.stats.running"),value:T.value.pipelinesByStatus.running||0,"value-style":{color:(T.value.pipelinesByStatus.running||0)>0?"#52c41a":"#888",fontSize:"20px"}},{prefix:a(()=>[i(c(tt))]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),i(D,{xs:12,sm:8,lg:5},{default:a(()=>[i(P,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[i(B,{title:e.$t("pipeline.stats.totalStages"),value:T.value.totalStages,"value-style":{color:"#722ed1",fontSize:"20px"}},{prefix:a(()=>[i(c(lt))]),_:1},8,["title","value"])]),_:1})]),_:1}),i(D,{xs:12,sm:8,lg:5},{default:a(()=>[i(P,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[i(B,{title:e.$t("pipeline.stats.totalArtifacts"),value:T.value.totalArtifacts,"value-style":{color:"#13c2c2",fontSize:"20px"}},{prefix:a(()=>[i(c(at))]),_:1},8,["title","value"])]),_:1})]),_:1}),i(D,{xs:24,sm:8,lg:4},{default:a(()=>[i(P,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[i(B,{title:e.$t("pipeline.stats.totalDeploys"),value:T.value.totalDeploys,"value-style":{color:"#faad14",fontSize:"20px"}},{prefix:a(()=>[i(c(ve))]),_:1},8,["title","value"])]),_:1})]),_:1})]),_:1}),i(P,{title:e.$t("pipeline.stagesCardTitle"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"},"body-style":{padding:"12px 16px"}},{default:a(()=>[S("div",zt,[(r(!0),b(z,null,L(c(be),(l,u)=>(r(),b(z,{key:l},[S("span",{class:ut(["stage-pill",{"is-gate":c(_e).includes(l)}])},[S("span",Ct,p(u+1),1),f(" "+p(U(l))+" ",1),c(_e).includes(l)?(r(),y(c(K),{key:0,class:"gate-icon"})):m("",!0)],2),u<c(be).length-1?(r(),y(c(nt),{key:0,class:"stage-arrow"})):m("",!0)],64))),128))])]),_:1},8,["title"]),i(Ie,{activeKey:se.value,"onUpdate:activeKey":s[3]||(s[3]=l=>se.value=l),class:"pipeline-tabs"},{default:a(()=>[i(X,{key:"pipelines",tab:e.$t("pipeline.tabs.pipelines")},{default:a(()=>[S("div",Bt,[i(de,{value:R.value,"onUpdate:value":s[1]||(s[1]=l=>R.value=l),size:"small","button-style":"solid"},{default:a(()=>[i(V,{value:""},{default:a(()=>[f(p(e.$t("pipeline.filters.allTemplates")),1)]),_:1}),(r(!0),b(z,null,L(c(le),l=>(r(),y(V,{key:l,value:l},{default:a(()=>[f(p(F(l)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),i(de,{value:E.value,"onUpdate:value":s[2]||(s[2]=l=>E.value=l),size:"small"},{default:a(()=>[i(V,{value:""},{default:a(()=>[f(p(e.$t("pipeline.filters.allStatuses")),1)]),_:1}),(r(!0),b(z,null,L(c(Ae),l=>(r(),y(V,{key:l,value:l},{default:a(()=>[f(p(Z(l)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),i(ge,{columns:$e.value,"data-source":he.value,pagination:{pageSize:20,showTotal:l=>e.$t("pipeline.table.totalSuffix",{n:l})},size:"small",loading:g.value,style:{background:"var(--bg-card)"}},{bodyCell:a(({column:l,record:u})=>[l.key==="name"?(r(),b(z,{key:0},[S("span",Tt,p(u.name||e.$t("pipeline.table.unnamed")),1),S("div",Pt,p(u.id.slice(0,16)),1)],64)):m("",!0),l.key==="template"?(r(),y(h,{key:1,color:W(u.template)},{default:a(()=>[f(p(F(u.template)),1)]),_:2},1032,["color"])):m("",!0),l.key==="progress"?(r(),y(fe,{key:2,percent:pe(u),size:"small",status:u.status==="failed"?"exception":u.status==="completed"?"success":"active",format:()=>`${u.currentStage}/${u.stages.length}`},null,8,["percent","status","format"])):m("",!0),l.key==="currentStage"?(r(),b(z,{key:3},[w(u)?(r(),y(h,{key:0,color:re(w(u).status)},{default:a(()=>[f(p(U(w(u).name)),1)]),_:2},1032,["color"])):(r(),b("span",Ot,"—"))],64)):m("",!0),l.key==="status"?(r(),y(h,{key:4,color:oe(u.status)},{default:a(()=>[f(p(Z(u.status)),1)]),_:2},1032,["color"])):m("",!0),l.key==="createdAt"?(r(),b("span",Lt,p(c(j)(u.createdAt)),1)):m("",!0),l.key==="action"?(r(),b(z,{key:6},[i(d,{size:"small",type:"link",onClick:O=>Me(u)},{default:a(()=>[f(p(e.$t("pipeline.table.actions.details")),1)]),_:1},8,["onClick"]),u.status==="pending"?(r(),y(d,{key:0,size:"small",type:"link",onClick:O=>je(u)},{default:a(()=>[f(p(e.$t("pipeline.table.actions.start")),1)]),_:1},8,["onClick"])):m("",!0),u.status==="running"?(r(),y(d,{key:1,size:"small",type:"link",onClick:O=>Ne(u)},{default:a(()=>[f(p(e.$t("pipeline.table.actions.pause")),1)]),_:1},8,["onClick"])):m("",!0),u.status==="paused"?(r(),y(d,{key:2,size:"small",type:"link",onClick:O=>Re(u)},{default:a(()=>[f(p(e.$t("pipeline.table.actions.resume")),1)]),_:1},8,["onClick"])):m("",!0),Oe(u)?(r(),y(d,{key:3,size:"small",type:"link",style:{color:"#52c41a"},onClick:O=>Ee(u)},{default:a(()=>[f(p(e.$t("pipeline.table.actions.approveGate")),1)]),_:1},8,["onClick"])):m("",!0),Le(u)?(r(),y(Je,{key:4,title:e.$t("pipeline.table.cancelConfirm"),"ok-text":e.$t("pipeline.table.cancelOk"),"cancel-text":e.$t("pipeline.table.cancelBack"),onConfirm:O=>Fe(u)},{default:a(()=>[i(d,{size:"small",type:"link",danger:""},{default:a(()=>[f(p(e.$t("pipeline.table.actions.cancel")),1)]),_:1})]),_:1},8,["title","ok-text","cancel-text","onConfirm"])):m("",!0)],64)):m("",!0)]),emptyText:a(()=>[S("div",Dt,[i(c(me),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),f(" "+p(R.value||E.value?e.$t("pipeline.table.emptyFiltered"):e.$t("pipeline.table.empty")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),i(X,{key:"deploys",tab:e.$t("pipeline.tabs.deploys")},{default:a(()=>[i(ge,{columns:xe.value,"data-source":ne.value,pagination:{pageSize:20,showTotal:l=>e.$t("pipeline.table.totalSuffix",{n:l})},size:"small",loading:g.value,style:{background:"var(--bg-card)"}},{bodyCell:a(({column:l,record:u})=>[l.key==="pipeline"?(r(),b("span",jt,p(u.pipelineId.slice(0,12)),1)):m("",!0),l.key==="strategy"?(r(),y(h,{key:1,color:Te(u.strategy),style:{"font-family":"monospace"}},{default:a(()=>[f(p(u.strategy),1)]),_:2},1032,["color"])):m("",!0),l.key==="status"?(r(),y(h,{key:2,color:Be(u.status)},{default:a(()=>[f(p(Ce(u.status)),1)]),_:2},1032,["color"])):m("",!0),l.key==="createdAt"?(r(),b("span",Nt,p(c(j)(u.createdAt)),1)):m("",!0)]),emptyText:a(()=>[S("div",Rt,[i(c(ve),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),f(" "+p(e.$t("pipeline.table.emptyDeploys")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),i(X,{key:"templates",tab:e.$t("pipeline.tabs.templates")},{default:a(()=>[i(ce,{gutter:[16,16]},{default:a(()=>[(r(!0),b(z,null,L(ie.value,l=>(r(),y(D,{key:l.name,xs:24,sm:12,lg:12},{default:a(()=>[i(P,{title:F(l.name),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{extra:a(()=>[i(h,{color:W(l.name)},{default:a(()=>[f(p(l.name),1)]),_:2},1032,["color"])]),default:a(()=>[S("p",Et,p(l.description),1),S("div",Ft,[(r(!0),b(z,null,L(l.stages,(u,O)=>(r(),y(h,{key:u,color:l.gateStages.includes(u)?"gold":"blue",style:{"font-size":"11px"}},{default:a(()=>[f(p(O+1)+". "+p(U(u))+" ",1),l.gateStages.includes(u)?(r(),y(c(K),{key:0,style:{"font-size":"10px","margin-left":"2px"}})):m("",!0)]),_:2},1032,["color"]))),128))])]),_:2},1032,["title"])]),_:2},1024))),128))]),_:1})]),_:1},8,["tab"])]),_:1},8,["activeKey"]),i(ye,{open:I.value,"onUpdate:open":s[7]||(s[7]=l=>I.value=l),title:e.$t("pipeline.create_modal.title"),"confirm-loading":_.value,width:540,"ok-text":e.$t("pipeline.create_modal.ok"),"cancel-text":e.$t("pipeline.create_modal.cancel"),onOk:De,onCancel:ue},{default:a(()=>[i(Ve,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:a(()=>[i(ee,{label:e.$t("pipeline.create_modal.templateLabel"),required:""},{default:a(()=>[i(we,{value:k.template,"onUpdate:value":s[4]||(s[4]=l=>k.template=l)},{default:a(()=>[(r(!0),b(z,null,L(c(le),l=>(r(),y(Ue,{key:l,value:l},{default:a(()=>[f(p(F(l)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"]),i(ee,{label:e.$t("pipeline.create_modal.nameLabel")},{default:a(()=>[i(Ge,{value:k.name,"onUpdate:value":s[5]||(s[5]=l=>k.name=l),placeholder:e.$t("pipeline.create_modal.namePlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),i(ee,{label:e.$t("pipeline.create_modal.configLabel")},{default:a(()=>[i(qe,{value:k.configJson,"onUpdate:value":s[6]||(s[6]=l=>k.configJson=l),placeholder:e.$t("pipeline.create_modal.configPlaceholder"),"auto-size":{minRows:2,maxRows:5}},null,8,["value","placeholder"])]),_:1},8,["label"])]),_:1})]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),i(ye,{open:Q.value,"onUpdate:open":s[8]||(s[8]=l=>Q.value=l),title:e.$t("pipeline.details.title",{label:A.value?.name||A.value?.id?.slice(0,12)||""}),width:780,footer:null},{default:a(()=>[A.value?(r(),b("div",Mt,[i(Ke,{column:2,size:"small",bordered:""},{default:a(()=>[i(J,{label:e.$t("pipeline.details.template")},{default:a(()=>[i(h,{color:W(A.value.template)},{default:a(()=>[f(p(F(A.value.template)),1)]),_:1},8,["color"])]),_:1},8,["label"]),i(J,{label:e.$t("pipeline.details.status")},{default:a(()=>[i(h,{color:oe(A.value.status)},{default:a(()=>[f(p(Z(A.value.status)),1)]),_:1},8,["color"])]),_:1},8,["label"]),i(J,{label:e.$t("pipeline.details.progress"),span:2},{default:a(()=>[i(fe,{percent:pe(A.value),status:A.value.status==="failed"?"exception":A.value.status==="completed"?"success":"active",size:"small"},null,8,["percent","status"])]),_:1},8,["label"]),i(J,{label:e.$t("pipeline.details.createdAt")},{default:a(()=>[f(p(c(j)(A.value.createdAt)),1)]),_:1},8,["label"]),i(J,{label:e.$t("pipeline.details.startedAt")},{default:a(()=>[f(p(c(j)(A.value.startedAt)),1)]),_:1},8,["label"])]),_:1}),S("h4",Jt,p(e.$t("pipeline.details.stagesHeader")),1),i(He,{mode:"left"},{default:a(()=>[(r(!0),b(z,null,L(A.value.stages,l=>(r(),y(Ye,{key:l.id,color:Pe(l.status)},{dot:a(()=>[l.status==="completed"?(r(),y(c(it),{key:0,style:{color:"#52c41a"}})):l.status==="running"?(r(),y(c(st),{key:1,style:{color:"#1677ff"}})):l.status==="failed"?(r(),y(c(ot),{key:2,style:{color:"#ff4d4f"}})):l.status==="gate-waiting"?(r(),y(c(K),{key:3,style:{color:"#faad14"}})):(r(),y(c(rt),{key:4,style:{color:"var(--text-muted)"}}))]),default:a(()=>[S("div",It,[S("span",Ut,p(l.stageIndex+1)+". "+p(U(l.name)),1),i(h,{color:re(l.status),style:{"font-size":"11px"}},{default:a(()=>[f(p(ze(l.status)),1)]),_:2},1032,["color"]),l.gateRequired?(r(),y(h,{key:0,color:"gold",style:{"font-size":"10px"}},{default:a(()=>[i(c(K)),f(" "+p(e.$t("pipeline.details.needsApproval"))+" ",1),l.gateApproved?(r(),b("span",wt,p(e.$t("pipeline.details.approved")),1)):m("",!0)]),_:2},1024)):m("",!0)]),l.errorMessage?(r(),b("div",Gt,p(e.$t("pipeline.details.errorPrefix"))+" "+p(l.errorMessage),1)):m("",!0),l.startedAt?(r(),b("div",qt,[f(p(c(j)(l.startedAt))+" ",1),l.completedAt?(r(),b("span",Vt," → "+p(c(j)(l.completedAt)),1)):m("",!0)])):m("",!0)]),_:2},1032,["color"]))),128))]),_:1})])):m("",!0)]),_:1},8,["open","title"])])}}},Zt=Qe(Kt,[["__scopeId","data-v-8e02619c"]]);export{Zt as default};
1
+ import{_ as Qe,u as We,b as Ze,d as C}from"./index-DSjWvxVr.js";import{s as Se}from"./community-parser-CO25nZFt.js";import{R as Xe,ar as et,z as me,ap as tt,a5 as lt,l as at,Y as ve,V as K,aR as nt,f as it,L as st,d as ot,y as rt}from"./icons-CLQTHa5-.js";import{o as pt,M as b,R as S,P as p,c as i,N as a,Q as y,S as m,K as v,r as $,L as r,O as f,u as c,F as z,Y as L,Z as ut,f as te,a as ct}from"./vendor-M5lGV-wr.js";function Y(t){const o=Se(t);if(!o)return null;try{return JSON.parse(o)}catch{}const n=o.match(/\{[\s\S]*\}|\[[\s\S]*\]/);if(!n)return null;try{return JSON.parse(n[0])}catch{return null}}const Ae=Object.freeze(["pending","running","paused","completed","failed","cancelled"]),dt=Object.freeze(["pending","running","gate-waiting","completed","failed","skipped"]),be=Object.freeze(["requirement","architecture","code-generation","testing","code-review","deploy","monitoring"]),le=Object.freeze(["feature","bugfix","refactor","security-audit"]),ft=Object.freeze(["git-pr","docker","npm-publish","local","staging","custom"]),_e=Object.freeze(["code-review","deploy"]);function N(t,o=0){return typeof t=="number"&&Number.isFinite(t)?t:o}function ke(t){if(!t)return{noDb:!1,error:""};const o=Se(t),n=/No database/i.test(o);return{noDb:n,error:n?"No database":""}}function gt(t,o=0){if(!t||typeof t!="object")return null;const n=t.id||"";return n?{key:n,id:n,pipelineId:String(t.pipelineId||""),stageIndex:N(t.stageIndex,o),name:String(t.name||""),status:String(t.status||"pending").toLowerCase(),gateRequired:!!t.gateRequired,gateApproved:!!t.gateApproved,gateRejectReason:t.gateRejectReason||"",input:t.input??null,output:t.output??null,errorMessage:t.errorMessage||"",startedAt:t.startedAt??null,completedAt:t.completedAt??null,_idx:o}:null}function yt(t,o=0){if(!t||typeof t!="object")return null;const n=t.id||"";if(!n)return null;const g=Array.isArray(t.stages)?t.stages.map(gt).filter(Boolean):[];return{key:n,id:n,name:t.name||"",template:String(t.template||""),config:t.config??null,status:String(t.status||"pending").toLowerCase(),currentStage:N(t.currentStage,0),result:t.result??null,errorMessage:t.errorMessage||"",createdAt:t.createdAt??null,updatedAt:t.updatedAt??null,startedAt:t.startedAt??null,completedAt:t.completedAt??null,stages:g,_idx:o}}function mt(t){const o=Y(t);return Array.isArray(o)?o.map(yt).filter(Boolean):[]}function vt(t,o=0){if(!t||typeof t!="object")return null;const n=t.id||"";return n?{key:n,id:n,pipelineId:String(t.pipelineId||""),strategy:String(t.strategy||"").toLowerCase(),config:t.config??null,status:String(t.status||"pending").toLowerCase(),result:t.result??null,errorMessage:t.errorMessage||"",rolledBackAt:t.rolledBackAt??null,rollbackReason:t.rollbackReason||"",createdAt:t.createdAt??null,completedAt:t.completedAt??null,_idx:o}:null}function bt(t){const o=Y(t);return Array.isArray(o)?o.map(vt).filter(Boolean):[]}function _t(t,o=0){if(!t||typeof t!="object")return null;const n=t.name||"";return n?{key:n,name:n,description:String(t.description||""),stages:Array.isArray(t.stages)?t.stages.filter(g=>typeof g=="string"):[],gateStages:Array.isArray(t.gateStages)?t.gateStages.filter(g=>typeof g=="string"):[],_idx:o}:null}function kt(t){const o=Y(t);return Array.isArray(o)?o.map(_t).filter(Boolean):[]}const St={totalPipelines:0,pipelinesByTemplate:{},pipelinesByStatus:{},totalStages:0,stagesByStatus:{},totalArtifacts:0,totalDeploys:0,deploysByStrategy:{}};function At(t){const o=JSON.parse(JSON.stringify(St));for(const g of le)o.pipelinesByTemplate[g]=0;for(const g of Ae)o.pipelinesByStatus[g]=0;for(const g of dt)o.stagesByStatus[g]=0;for(const g of ft)o.deploysByStrategy[g]=0;const n=Y(t);if(!n||typeof n!="object"||Array.isArray(n))return o;if(o.totalPipelines=N(n.totalPipelines,0),o.totalStages=N(n.totalStages,0),o.totalArtifacts=N(n.totalArtifacts,0),o.totalDeploys=N(n.totalDeploys,0),n.pipelinesByTemplate&&typeof n.pipelinesByTemplate=="object")for(const[g,_]of Object.entries(n.pipelinesByTemplate))typeof _=="number"&&Number.isFinite(_)&&(o.pipelinesByTemplate[g]=_);if(n.pipelinesByStatus&&typeof n.pipelinesByStatus=="object")for(const[g,_]of Object.entries(n.pipelinesByStatus))typeof _=="number"&&Number.isFinite(_)&&(o.pipelinesByStatus[g]=_);if(n.stagesByStatus&&typeof n.stagesByStatus=="object")for(const[g,_]of Object.entries(n.stagesByStatus))typeof _=="number"&&Number.isFinite(_)&&(o.stagesByStatus[g]=_);if(n.deploysByStrategy&&typeof n.deploysByStrategy=="object")for(const[g,_]of Object.entries(n.deploysByStrategy))typeof _=="number"&&Number.isFinite(_)&&(o.deploysByStrategy[g]=_);return o}function j(t){if(t==null||t==="")return"—";const o=typeof t=="number"?new Date(t):new Date(String(t));return isNaN(o.getTime())?String(t):o.toLocaleString("zh-CN",{hour12:!1})}const $t={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},xt={class:"page-title"},ht={class:"page-sub"},zt={class:"stage-flow"},Ct={class:"stage-idx"},Bt={class:"filter-bar"},Tt={style:{color:"var(--text-primary)","font-weight":"500"}},Pt={style:{color:"var(--text-secondary)","font-size":"11px","font-family":"monospace","margin-top":"2px"}},Ot={key:1,style:{color:"var(--text-muted)"}},Lt={key:5,style:{color:"var(--text-secondary)","font-size":"11px"}},Dt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},jt={key:0,style:{color:"var(--text-primary)","font-family":"monospace","font-size":"12px"}},Nt={key:3,style:{color:"var(--text-secondary)","font-size":"11px"}},Rt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},Et={style:{color:"var(--text-secondary)","font-size":"12px",margin:"0 0 10px"}},Ft={class:"tpl-stages"},Mt={key:0,style:{"padding-top":"8px"}},Jt={style:{color:"var(--text-primary)","font-size":"13px",margin:"20px 0 10px"}},It={style:{display:"flex","align-items":"center",gap:"8px","flex-wrap":"wrap"}},Ut={style:{color:"var(--text-primary)","font-weight":"500"}},wt={key:0,style:{color:"#52c41a","margin-left":"4px"}},Gt={key:0,style:{color:"#ff4d4f","font-size":"11px","margin-top":"4px"}},qt={key:1,style:{color:"var(--text-secondary)","font-size":"11px","margin-top":"2px"}},Vt={key:0},Kt={__name:"Pipeline",setup(t){const o=We(),{t:n}=Ze(),g=$(!1),_=$(!1),ae=$([]),ne=$([]),ie=$([]),T=$({totalPipelines:0,pipelinesByTemplate:{},pipelinesByStatus:{},totalStages:0,stagesByStatus:{},totalArtifacts:0,totalDeploys:0,deploysByStrategy:{}}),H=$({noDb:!1,error:""}),se=$("pipelines"),R=$(""),E=$(""),I=$(!1),Q=$(!1),k=ct({template:"feature",name:"",configJson:""}),A=$(null),$e=te(()=>[{title:n("pipeline.cols.name"),key:"name"},{title:n("pipeline.cols.template"),key:"template",width:"110px"},{title:n("pipeline.cols.progress"),key:"progress",width:"160px"},{title:n("pipeline.cols.currentStage"),key:"currentStage",width:"140px"},{title:n("pipeline.cols.status"),key:"status",width:"110px"},{title:n("pipeline.cols.createdAt"),key:"createdAt",width:"160px"},{title:n("pipeline.cols.action"),key:"action",width:"260px"}]),xe=te(()=>[{title:n("pipeline.cols.pipeline"),key:"pipeline",width:"180px"},{title:n("pipeline.cols.strategy"),key:"strategy",width:"120px"},{title:n("pipeline.cols.status"),key:"status",width:"110px"},{title:n("pipeline.cols.createdAt"),key:"createdAt"}]),he=te(()=>{let e=ae.value;return R.value&&(e=e.filter(s=>s.template===R.value)),E.value&&(e=e.filter(s=>s.status===E.value)),e});function F(e){const s=`pipeline.templateLabels.${e}`,d=n(s);return d===s?e:d}function W(e){return{feature:"green",bugfix:"red",refactor:"purple","security-audit":"volcano"}[e]||"default"}function U(e){const s=`pipeline.stageLabels.${e}`,d=n(s);return d===s?e:d}function Z(e){const s=`pipeline.pipelineStatusLabels.${e}`,d=n(s);return d===s?e:d}function oe(e){return{pending:"default",running:"processing",paused:"orange",completed:"green",failed:"red",cancelled:"default"}[e]||"default"}function ze(e){const s=`pipeline.stageStatusLabels.${e}`,d=n(s);return d===s?e:d}function re(e){return{pending:"default",running:"processing","gate-waiting":"gold",completed:"green",failed:"red",skipped:"default"}[e]||"default"}function Ce(e){const s=`pipeline.deployStatusLabels.${e}`,d=n(s);return d===s?e:d}function Be(e){return{pending:"default",running:"processing",succeeded:"green",failed:"red","rolled-back":"orange"}[e]||"default"}function Te(e){return{"git-pr":"blue",docker:"cyan","npm-publish":"magenta",local:"default",staging:"orange",custom:"purple"}[e]||"default"}function Pe(e){return{pending:"gray",running:"blue","gate-waiting":"gold",completed:"green",failed:"red",skipped:"gray"}[e]||"gray"}function pe(e){if(!e.stages.length)return 0;const s=e.stages.filter(d=>d.status==="completed").length;return Math.round(100*s/e.stages.length)}function w(e){if(!e.stages.length)return null;const s=Math.min(e.currentStage,e.stages.length-1);return e.stages[s]||null}function Oe(e){if(e.status!=="running")return!1;const s=w(e);return s&&s.status==="gate-waiting"&&s.gateRequired&&!s.gateApproved}function Le(e){return e.status==="pending"||e.status==="running"||e.status==="paused"}async function G(){g.value=!0,H.value={noDb:!1,error:""};try{const[e,s,d,x]=await Promise.all([o.execute("pipeline list",1e4).catch(()=>({output:""})),o.execute("pipeline deploys",1e4).catch(()=>({output:""})),o.execute("pipeline templates",8e3).catch(()=>({output:""})),o.execute("pipeline stats",8e3).catch(()=>({output:""}))]),q=[e,s,x].map(B=>ke(B.output)).find(B=>B.noDb);q&&(H.value=q),ae.value=mt(e.output),ne.value=bt(s.output),ie.value=kt(d.output),T.value=At(x.output)}catch(e){C.error(n("pipeline.msg.loadFailed")+": "+(e?.message||e))}finally{g.value=!1}}async function De(){if(!k.template){C.warning(n("pipeline.msg.selectTemplate"));return}if(k.configJson.trim())try{JSON.parse(k.configJson)}catch{C.warning(n("pipeline.msg.badConfigJson"));return}_.value=!0;try{const e=[`pipeline create --template ${k.template}`];k.name.trim()&&e.push(`--name "${k.name.trim().replace(/"/g,'\\"')}"`),k.configJson.trim()&&e.push(`--config '${k.configJson.trim().replace(/'/g,"'\\''")}'`);const{output:s}=await o.execute(e.join(" "),1e4);if(ke(s).noDb){C.error(n("pipeline.msg.needCcInit"));return}if(/error|Error|失败/i.test(s)&&!/"id"/.test(s)){C.error(n("pipeline.msg.createFailed")+": "+s.slice(0,120));return}C.success(n("pipeline.msg.createSuccess")),I.value=!1,ue(),await G()}catch(e){C.error(n("pipeline.msg.createFailed")+": "+(e?.message||e))}finally{_.value=!1}}async function je(e){await M(e,`pipeline start ${e.id}`,n("pipeline.msg.started"))}async function Ne(e){await M(e,`pipeline pause ${e.id}`,n("pipeline.msg.paused"))}async function Re(e){await M(e,`pipeline resume ${e.id}`,n("pipeline.msg.resumed"))}async function Ee(e){await M(e,`pipeline approve ${e.id}`,n("pipeline.msg.gateApproved"))}async function Fe(e){await M(e,`pipeline cancel ${e.id}`,n("pipeline.msg.cancelled"))}async function M(e,s,d){try{const{output:x}=await o.execute(s,8e3);if(/error|Error|失败/i.test(x)&&!/"id"/.test(x)){C.error(n("pipeline.msg.actionFailed")+": "+x.slice(0,120));return}C.success(d),await G()}catch(x){C.error(n("pipeline.msg.actionFailed")+": "+(x?.message||x))}}function Me(e){A.value=e,Q.value=!0}function ue(){k.template="feature",k.name="",k.configJson=""}return pt(G),(e,s)=>{const d=v("a-button"),x=v("a-space"),q=v("a-alert"),B=v("a-statistic"),P=v("a-card"),D=v("a-col"),ce=v("a-row"),V=v("a-radio-button"),de=v("a-radio-group"),h=v("a-tag"),fe=v("a-progress"),Je=v("a-popconfirm"),ge=v("a-table"),X=v("a-tab-pane"),Ie=v("a-tabs"),Ue=v("a-select-option"),we=v("a-select"),ee=v("a-form-item"),Ge=v("a-input"),qe=v("a-textarea"),Ve=v("a-form"),ye=v("a-modal"),J=v("a-descriptions-item"),Ke=v("a-descriptions"),Ye=v("a-timeline-item"),He=v("a-timeline");return r(),b("div",null,[S("div",$t,[S("div",null,[S("h2",xt,p(e.$t("pipeline.title")),1),S("p",ht,p(e.$t("pipeline.subtitle")),1)]),i(x,null,{default:a(()=>[i(d,{loading:g.value,onClick:G},{icon:a(()=>[i(c(Xe))]),default:a(()=>[f(" "+p(e.$t("pipeline.refresh")),1)]),_:1},8,["loading"]),i(d,{type:"primary",onClick:s[0]||(s[0]=l=>I.value=!0)},{icon:a(()=>[i(c(et))]),default:a(()=>[f(" "+p(e.$t("pipeline.create")),1)]),_:1})]),_:1})]),H.value.noDb?(r(),y(q,{key:0,type:"info","show-icon":"",message:e.$t("pipeline.noDb.message"),description:e.$t("pipeline.noDb.description"),style:{"margin-bottom":"16px"}},null,8,["message","description"])):m("",!0),i(ce,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:a(()=>[i(D,{xs:12,sm:8,lg:5},{default:a(()=>[i(P,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[i(B,{title:e.$t("pipeline.stats.totalPipelines"),value:T.value.totalPipelines,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:a(()=>[i(c(me))]),_:1},8,["title","value"])]),_:1})]),_:1}),i(D,{xs:12,sm:8,lg:5},{default:a(()=>[i(P,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[i(B,{title:e.$t("pipeline.stats.running"),value:T.value.pipelinesByStatus.running||0,"value-style":{color:(T.value.pipelinesByStatus.running||0)>0?"#52c41a":"#888",fontSize:"20px"}},{prefix:a(()=>[i(c(tt))]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),i(D,{xs:12,sm:8,lg:5},{default:a(()=>[i(P,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[i(B,{title:e.$t("pipeline.stats.totalStages"),value:T.value.totalStages,"value-style":{color:"#722ed1",fontSize:"20px"}},{prefix:a(()=>[i(c(lt))]),_:1},8,["title","value"])]),_:1})]),_:1}),i(D,{xs:12,sm:8,lg:5},{default:a(()=>[i(P,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[i(B,{title:e.$t("pipeline.stats.totalArtifacts"),value:T.value.totalArtifacts,"value-style":{color:"#13c2c2",fontSize:"20px"}},{prefix:a(()=>[i(c(at))]),_:1},8,["title","value"])]),_:1})]),_:1}),i(D,{xs:24,sm:8,lg:4},{default:a(()=>[i(P,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[i(B,{title:e.$t("pipeline.stats.totalDeploys"),value:T.value.totalDeploys,"value-style":{color:"#faad14",fontSize:"20px"}},{prefix:a(()=>[i(c(ve))]),_:1},8,["title","value"])]),_:1})]),_:1})]),_:1}),i(P,{title:e.$t("pipeline.stagesCardTitle"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"},"body-style":{padding:"12px 16px"}},{default:a(()=>[S("div",zt,[(r(!0),b(z,null,L(c(be),(l,u)=>(r(),b(z,{key:l},[S("span",{class:ut(["stage-pill",{"is-gate":c(_e).includes(l)}])},[S("span",Ct,p(u+1),1),f(" "+p(U(l))+" ",1),c(_e).includes(l)?(r(),y(c(K),{key:0,class:"gate-icon"})):m("",!0)],2),u<c(be).length-1?(r(),y(c(nt),{key:0,class:"stage-arrow"})):m("",!0)],64))),128))])]),_:1},8,["title"]),i(Ie,{activeKey:se.value,"onUpdate:activeKey":s[3]||(s[3]=l=>se.value=l),class:"pipeline-tabs"},{default:a(()=>[i(X,{key:"pipelines",tab:e.$t("pipeline.tabs.pipelines")},{default:a(()=>[S("div",Bt,[i(de,{value:R.value,"onUpdate:value":s[1]||(s[1]=l=>R.value=l),size:"small","button-style":"solid"},{default:a(()=>[i(V,{value:""},{default:a(()=>[f(p(e.$t("pipeline.filters.allTemplates")),1)]),_:1}),(r(!0),b(z,null,L(c(le),l=>(r(),y(V,{key:l,value:l},{default:a(()=>[f(p(F(l)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),i(de,{value:E.value,"onUpdate:value":s[2]||(s[2]=l=>E.value=l),size:"small"},{default:a(()=>[i(V,{value:""},{default:a(()=>[f(p(e.$t("pipeline.filters.allStatuses")),1)]),_:1}),(r(!0),b(z,null,L(c(Ae),l=>(r(),y(V,{key:l,value:l},{default:a(()=>[f(p(Z(l)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),i(ge,{columns:$e.value,"data-source":he.value,pagination:{pageSize:20,showTotal:l=>e.$t("pipeline.table.totalSuffix",{n:l})},size:"small",loading:g.value,style:{background:"var(--bg-card)"}},{bodyCell:a(({column:l,record:u})=>[l.key==="name"?(r(),b(z,{key:0},[S("span",Tt,p(u.name||e.$t("pipeline.table.unnamed")),1),S("div",Pt,p(u.id.slice(0,16)),1)],64)):m("",!0),l.key==="template"?(r(),y(h,{key:1,color:W(u.template)},{default:a(()=>[f(p(F(u.template)),1)]),_:2},1032,["color"])):m("",!0),l.key==="progress"?(r(),y(fe,{key:2,percent:pe(u),size:"small",status:u.status==="failed"?"exception":u.status==="completed"?"success":"active",format:()=>`${u.currentStage}/${u.stages.length}`},null,8,["percent","status","format"])):m("",!0),l.key==="currentStage"?(r(),b(z,{key:3},[w(u)?(r(),y(h,{key:0,color:re(w(u).status)},{default:a(()=>[f(p(U(w(u).name)),1)]),_:2},1032,["color"])):(r(),b("span",Ot,"—"))],64)):m("",!0),l.key==="status"?(r(),y(h,{key:4,color:oe(u.status)},{default:a(()=>[f(p(Z(u.status)),1)]),_:2},1032,["color"])):m("",!0),l.key==="createdAt"?(r(),b("span",Lt,p(c(j)(u.createdAt)),1)):m("",!0),l.key==="action"?(r(),b(z,{key:6},[i(d,{size:"small",type:"link",onClick:O=>Me(u)},{default:a(()=>[f(p(e.$t("pipeline.table.actions.details")),1)]),_:1},8,["onClick"]),u.status==="pending"?(r(),y(d,{key:0,size:"small",type:"link",onClick:O=>je(u)},{default:a(()=>[f(p(e.$t("pipeline.table.actions.start")),1)]),_:1},8,["onClick"])):m("",!0),u.status==="running"?(r(),y(d,{key:1,size:"small",type:"link",onClick:O=>Ne(u)},{default:a(()=>[f(p(e.$t("pipeline.table.actions.pause")),1)]),_:1},8,["onClick"])):m("",!0),u.status==="paused"?(r(),y(d,{key:2,size:"small",type:"link",onClick:O=>Re(u)},{default:a(()=>[f(p(e.$t("pipeline.table.actions.resume")),1)]),_:1},8,["onClick"])):m("",!0),Oe(u)?(r(),y(d,{key:3,size:"small",type:"link",style:{color:"#52c41a"},onClick:O=>Ee(u)},{default:a(()=>[f(p(e.$t("pipeline.table.actions.approveGate")),1)]),_:1},8,["onClick"])):m("",!0),Le(u)?(r(),y(Je,{key:4,title:e.$t("pipeline.table.cancelConfirm"),"ok-text":e.$t("pipeline.table.cancelOk"),"cancel-text":e.$t("pipeline.table.cancelBack"),onConfirm:O=>Fe(u)},{default:a(()=>[i(d,{size:"small",type:"link",danger:""},{default:a(()=>[f(p(e.$t("pipeline.table.actions.cancel")),1)]),_:1})]),_:1},8,["title","ok-text","cancel-text","onConfirm"])):m("",!0)],64)):m("",!0)]),emptyText:a(()=>[S("div",Dt,[i(c(me),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),f(" "+p(R.value||E.value?e.$t("pipeline.table.emptyFiltered"):e.$t("pipeline.table.empty")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),i(X,{key:"deploys",tab:e.$t("pipeline.tabs.deploys")},{default:a(()=>[i(ge,{columns:xe.value,"data-source":ne.value,pagination:{pageSize:20,showTotal:l=>e.$t("pipeline.table.totalSuffix",{n:l})},size:"small",loading:g.value,style:{background:"var(--bg-card)"}},{bodyCell:a(({column:l,record:u})=>[l.key==="pipeline"?(r(),b("span",jt,p(u.pipelineId.slice(0,12)),1)):m("",!0),l.key==="strategy"?(r(),y(h,{key:1,color:Te(u.strategy),style:{"font-family":"monospace"}},{default:a(()=>[f(p(u.strategy),1)]),_:2},1032,["color"])):m("",!0),l.key==="status"?(r(),y(h,{key:2,color:Be(u.status)},{default:a(()=>[f(p(Ce(u.status)),1)]),_:2},1032,["color"])):m("",!0),l.key==="createdAt"?(r(),b("span",Nt,p(c(j)(u.createdAt)),1)):m("",!0)]),emptyText:a(()=>[S("div",Rt,[i(c(ve),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),f(" "+p(e.$t("pipeline.table.emptyDeploys")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),i(X,{key:"templates",tab:e.$t("pipeline.tabs.templates")},{default:a(()=>[i(ce,{gutter:[16,16]},{default:a(()=>[(r(!0),b(z,null,L(ie.value,l=>(r(),y(D,{key:l.name,xs:24,sm:12,lg:12},{default:a(()=>[i(P,{title:F(l.name),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{extra:a(()=>[i(h,{color:W(l.name)},{default:a(()=>[f(p(l.name),1)]),_:2},1032,["color"])]),default:a(()=>[S("p",Et,p(l.description),1),S("div",Ft,[(r(!0),b(z,null,L(l.stages,(u,O)=>(r(),y(h,{key:u,color:l.gateStages.includes(u)?"gold":"blue",style:{"font-size":"11px"}},{default:a(()=>[f(p(O+1)+". "+p(U(u))+" ",1),l.gateStages.includes(u)?(r(),y(c(K),{key:0,style:{"font-size":"10px","margin-left":"2px"}})):m("",!0)]),_:2},1032,["color"]))),128))])]),_:2},1032,["title"])]),_:2},1024))),128))]),_:1})]),_:1},8,["tab"])]),_:1},8,["activeKey"]),i(ye,{open:I.value,"onUpdate:open":s[7]||(s[7]=l=>I.value=l),title:e.$t("pipeline.create_modal.title"),"confirm-loading":_.value,width:540,"ok-text":e.$t("pipeline.create_modal.ok"),"cancel-text":e.$t("pipeline.create_modal.cancel"),onOk:De,onCancel:ue},{default:a(()=>[i(Ve,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:a(()=>[i(ee,{label:e.$t("pipeline.create_modal.templateLabel"),required:""},{default:a(()=>[i(we,{value:k.template,"onUpdate:value":s[4]||(s[4]=l=>k.template=l)},{default:a(()=>[(r(!0),b(z,null,L(c(le),l=>(r(),y(Ue,{key:l,value:l},{default:a(()=>[f(p(F(l)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"]),i(ee,{label:e.$t("pipeline.create_modal.nameLabel")},{default:a(()=>[i(Ge,{value:k.name,"onUpdate:value":s[5]||(s[5]=l=>k.name=l),placeholder:e.$t("pipeline.create_modal.namePlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),i(ee,{label:e.$t("pipeline.create_modal.configLabel")},{default:a(()=>[i(qe,{value:k.configJson,"onUpdate:value":s[6]||(s[6]=l=>k.configJson=l),placeholder:e.$t("pipeline.create_modal.configPlaceholder"),"auto-size":{minRows:2,maxRows:5}},null,8,["value","placeholder"])]),_:1},8,["label"])]),_:1})]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),i(ye,{open:Q.value,"onUpdate:open":s[8]||(s[8]=l=>Q.value=l),title:e.$t("pipeline.details.title",{label:A.value?.name||A.value?.id?.slice(0,12)||""}),width:780,footer:null},{default:a(()=>[A.value?(r(),b("div",Mt,[i(Ke,{column:2,size:"small",bordered:""},{default:a(()=>[i(J,{label:e.$t("pipeline.details.template")},{default:a(()=>[i(h,{color:W(A.value.template)},{default:a(()=>[f(p(F(A.value.template)),1)]),_:1},8,["color"])]),_:1},8,["label"]),i(J,{label:e.$t("pipeline.details.status")},{default:a(()=>[i(h,{color:oe(A.value.status)},{default:a(()=>[f(p(Z(A.value.status)),1)]),_:1},8,["color"])]),_:1},8,["label"]),i(J,{label:e.$t("pipeline.details.progress"),span:2},{default:a(()=>[i(fe,{percent:pe(A.value),status:A.value.status==="failed"?"exception":A.value.status==="completed"?"success":"active",size:"small"},null,8,["percent","status"])]),_:1},8,["label"]),i(J,{label:e.$t("pipeline.details.createdAt")},{default:a(()=>[f(p(c(j)(A.value.createdAt)),1)]),_:1},8,["label"]),i(J,{label:e.$t("pipeline.details.startedAt")},{default:a(()=>[f(p(c(j)(A.value.startedAt)),1)]),_:1},8,["label"])]),_:1}),S("h4",Jt,p(e.$t("pipeline.details.stagesHeader")),1),i(He,{mode:"left"},{default:a(()=>[(r(!0),b(z,null,L(A.value.stages,l=>(r(),y(Ye,{key:l.id,color:Pe(l.status)},{dot:a(()=>[l.status==="completed"?(r(),y(c(it),{key:0,style:{color:"#52c41a"}})):l.status==="running"?(r(),y(c(st),{key:1,style:{color:"#1677ff"}})):l.status==="failed"?(r(),y(c(ot),{key:2,style:{color:"#ff4d4f"}})):l.status==="gate-waiting"?(r(),y(c(K),{key:3,style:{color:"#faad14"}})):(r(),y(c(rt),{key:4,style:{color:"var(--text-muted)"}}))]),default:a(()=>[S("div",It,[S("span",Ut,p(l.stageIndex+1)+". "+p(U(l.name)),1),i(h,{color:re(l.status),style:{"font-size":"11px"}},{default:a(()=>[f(p(ze(l.status)),1)]),_:2},1032,["color"]),l.gateRequired?(r(),y(h,{key:0,color:"gold",style:{"font-size":"10px"}},{default:a(()=>[i(c(K)),f(" "+p(e.$t("pipeline.details.needsApproval"))+" ",1),l.gateApproved?(r(),b("span",wt,p(e.$t("pipeline.details.approved")),1)):m("",!0)]),_:2},1024)):m("",!0)]),l.errorMessage?(r(),b("div",Gt,p(e.$t("pipeline.details.errorPrefix"))+" "+p(l.errorMessage),1)):m("",!0),l.startedAt?(r(),b("div",qt,[f(p(c(j)(l.startedAt))+" ",1),l.completedAt?(r(),b("span",Vt," → "+p(c(j)(l.completedAt)),1)):m("",!0)])):m("",!0)]),_:2},1032,["color"]))),128))]),_:1})])):m("",!0)]),_:1},8,["open","title"])])}}},Zt=Qe(Kt,[["__scopeId","data-v-8e02619c"]]);export{Zt as default};