chainlesschain 0.162.25 → 0.162.26

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 (151) hide show
  1. package/package.json +2 -2
  2. package/src/assets/web-panel/.build-hash +1 -1
  3. package/src/assets/web-panel/assets/{AIOps-CAdsXHkz.js → AIOps-DEhhAYYj.js} +1 -1
  4. package/src/assets/web-panel/assets/{ActionButton-JsLRBlBP.js → ActionButton-DEyfUz5F.js} +1 -1
  5. package/src/assets/web-panel/assets/{Analytics-DeM96q71.js → Analytics-D1rjS61W.js} +1 -1
  6. package/src/assets/web-panel/assets/{AppLayout-eb_6mT6V.js → AppLayout-CptFJPy6.js} +2 -2
  7. package/src/assets/web-panel/assets/{Audit-BEOY-CQE.js → Audit-BG6KQUHY.js} +1 -1
  8. package/src/assets/web-panel/assets/{Backup-irFD_DBa.js → Backup-D2ikQT54.js} +1 -1
  9. package/src/assets/web-panel/assets/{BaseInput-Dq7wtv_k.js → BaseInput-BG_d8yMt.js} +1 -1
  10. package/src/assets/web-panel/assets/{Chat-CstRKWdu.js → Chat-CcHmGkLY.js} +1 -1
  11. package/src/assets/web-panel/assets/{ChatBubbleRenderer-3BBqk317.js → ChatBubbleRenderer-DIXrOHbn.js} +1 -1
  12. package/src/assets/web-panel/assets/{Checkbox-A8D25IT5.js → Checkbox-Bx2h6vT3.js} +1 -1
  13. package/src/assets/web-panel/assets/{Codegen-1EfMWeRA.js → Codegen-o14zzfuK.js} +1 -1
  14. package/src/assets/web-panel/assets/{Col-Bc08LzOn.js → Col-HlZjxy7V.js} +1 -1
  15. package/src/assets/web-panel/assets/{Community-BNnNv7xp.js → Community-DXxMflr2.js} +1 -1
  16. package/src/assets/web-panel/assets/{Compact-nFjLneHM.js → Compact-DbswbBjd.js} +1 -1
  17. package/src/assets/web-panel/assets/{Compliance-CZpaaHND.js → Compliance-C7Q4Da2p.js} +1 -1
  18. package/src/assets/web-panel/assets/{Cowork-DzHugH3j.js → Cowork-BLImywOe.js} +1 -1
  19. package/src/assets/web-panel/assets/{Cron-C7YRyiN-.js → Cron-DpXu1G4m.js} +1 -1
  20. package/src/assets/web-panel/assets/{Crosschain-er2h0L0q.js → Crosschain-C4qokeJu.js} +1 -1
  21. package/src/assets/web-panel/assets/{DID-DaMdE0A7.js → DID-C0BjPiij.js} +1 -1
  22. package/src/assets/web-panel/assets/{Dashboard-1z2K_E1B.js → Dashboard-CsfDXwPl.js} +2 -2
  23. package/src/assets/web-panel/assets/{Dropdown-B9NIqAXf.js → Dropdown-CiwMUKrx.js} +1 -1
  24. package/src/assets/web-panel/assets/{EmailListRenderer-CBHLFokz.js → EmailListRenderer-DX7xfm5a.js} +1 -1
  25. package/src/assets/web-panel/assets/{Federation-D2fEJEki.js → Federation-CA4Ibsg0.js} +1 -1
  26. package/src/assets/web-panel/assets/{FormItemContext-tmsd70yG.js → FormItemContext-DvM0lU-7.js} +1 -1
  27. package/src/assets/web-panel/assets/{GenericCardRenderer-DW4Lnrsr.js → GenericCardRenderer-REjsnTHA.js} +1 -1
  28. package/src/assets/web-panel/assets/{Git-D8aBagAp.js → Git-ZhnSDQGH.js} +1 -1
  29. package/src/assets/web-panel/assets/{Governance-CKDAHamy.js → Governance-BL8iUV_g.js} +1 -1
  30. package/src/assets/web-panel/assets/{Inference-BLLp118j.js → Inference-BONrgLk-.js} +1 -1
  31. package/src/assets/web-panel/assets/{KnowledgeGraph-Cawx-yfu.js → KnowledgeGraph-q9SAz7h7.js} +1 -1
  32. package/src/assets/web-panel/assets/{Logs-sWSzp5PY.js → Logs-eHfEFnEZ.js} +1 -1
  33. package/src/assets/web-panel/assets/{Marketplace-BQMX3dSy.js → Marketplace-DzwuVedm.js} +1 -1
  34. package/src/assets/web-panel/assets/{McpTools-DjlFST3o.js → McpTools-BRoLIeq5.js} +1 -1
  35. package/src/assets/web-panel/assets/{Memory-LZE1wG7m.js → Memory-DjvAa1Ce.js} +1 -1
  36. package/src/assets/web-panel/assets/{MobileBridge-BWG47jQ6.js → MobileBridge-CGTanjsT.js} +1 -1
  37. package/src/assets/web-panel/assets/{MobileProjects-DHVv0tYo.js → MobileProjects-cTccXHwN.js} +1 -1
  38. package/src/assets/web-panel/assets/{Mtc-Di1hrhM3.js → Mtc-CNUe29wS.js} +1 -1
  39. package/src/assets/web-panel/assets/{MtcAudit-BowOCi-O.js → MtcAudit-COk24mdH.js} +1 -1
  40. package/src/assets/web-panel/assets/{Multisig-CgpR0s8E.js → Multisig-CFq2j0BU.js} +1 -1
  41. package/src/assets/web-panel/assets/{NLProgramming-O4U3Plxd.js → NLProgramming-dfRr-FGW.js} +1 -1
  42. package/src/assets/web-panel/assets/{Notes-Ce_5C6XT.js → Notes-iM4aoXiw.js} +1 -1
  43. package/src/assets/web-panel/assets/{NotificationSettings-BVVopkxj.js → NotificationSettings-CeVJ-942.js} +1 -1
  44. package/src/assets/web-panel/assets/{OrderTableRenderer-XW2G50wt.js → OrderTableRenderer-zQ5jvUZI.js} +1 -1
  45. package/src/assets/web-panel/assets/{Organization-DaW54kdP.js → Organization-CTSWyMGT.js} +1 -1
  46. package/src/assets/web-panel/assets/{Overflow-CVTGMUVt.js → Overflow---n60sAp.js} +1 -1
  47. package/src/assets/web-panel/assets/{P2P-CpEwrhBx.js → P2P-BCQurpAB.js} +1 -1
  48. package/src/assets/web-panel/assets/{PdhVaultBrowser-CDqun-Z9.js → PdhVaultBrowser-C5L1qAc0.js} +2 -2
  49. package/src/assets/web-panel/assets/{Permissions-BsSU3MaL.js → Permissions-I8sgLLE5.js} +1 -1
  50. package/src/assets/web-panel/assets/PersonalDataHub-CEUfFRCj.js +2 -0
  51. package/src/assets/web-panel/assets/{PersonalDataHub-DmUc89_0.css → PersonalDataHub-CO9-IYDY.css} +1 -1
  52. package/src/assets/web-panel/assets/{Pipeline-CPCDpDyd.js → Pipeline-BTBjJaRd.js} +1 -1
  53. package/src/assets/web-panel/assets/{Privacy-oZEQvVWA.js → Privacy-aCs44rpW.js} +1 -1
  54. package/src/assets/web-panel/assets/{ProjectInit-CRu5bDNW.js → ProjectInit-DZ2iIlbN.js} +1 -1
  55. package/src/assets/web-panel/assets/{ProjectSettings-ComIZ7gQ.js → ProjectSettings-oYUtNgHP.js} +1 -1
  56. package/src/assets/web-panel/assets/{Projects-Djr10qFp.js → Projects-FonFg0ie.js} +1 -1
  57. package/src/assets/web-panel/assets/{Providers-CltNzV7e.js → Providers-CRmOuabY.js} +1 -1
  58. package/src/assets/web-panel/assets/{QuickAsk-C21t1JEf.js → QuickAsk-BHd6UZ1A.js} +1 -1
  59. package/src/assets/web-panel/assets/{Recommend-BjJForJo.js → Recommend-BkzGGuq-.js} +1 -1
  60. package/src/assets/web-panel/assets/{Reputation-Cp8Ym-Hk.js → Reputation-Do7cPr9u.js} +1 -1
  61. package/src/assets/web-panel/assets/{Row-n8ruyEoT.js → Row-D_sR3MmD.js} +1 -1
  62. package/src/assets/web-panel/assets/{RssFeed-CosaiHvS.js → RssFeed-pWSbZ06l.js} +1 -1
  63. package/src/assets/web-panel/assets/{Search-DUNSNFJZ.js → Search-BTL71JSs.js} +1 -1
  64. package/src/assets/web-panel/assets/{Security-Z3WyX_MB.js → Security-8lbNoqY6.js} +1 -1
  65. package/src/assets/web-panel/assets/{Services-U0m9Oj8V.js → Services-yr3QVduo.js} +1 -1
  66. package/src/assets/web-panel/assets/{Skeleton-B_M5sv2W.js → Skeleton-DdnY1ZTz.js} +1 -1
  67. package/src/assets/web-panel/assets/{Skills-NKU9c6LT.js → Skills-fk24WY3D.js} +1 -1
  68. package/src/assets/web-panel/assets/{Sla-DscfpqF8.js → Sla-bOXRT7wR.js} +1 -1
  69. package/src/assets/web-panel/assets/{SpeechSettings-DP0O84ej.js → SpeechSettings-DjonFUbP.js} +1 -1
  70. package/src/assets/web-panel/assets/{SyncSettings-P_WEyoH3.js → SyncSettings-C-7HTl6d.js} +1 -1
  71. package/src/assets/web-panel/assets/{Tasks-C8YAncnj.js → Tasks-DDohfzFT.js} +1 -1
  72. package/src/assets/web-panel/assets/{Templates-F12-SRc3.js → Templates-C8PI_WTt.js} +1 -1
  73. package/src/assets/web-panel/assets/{Tenant-CULHbrwu.js → Tenant-CIvbeRkn.js} +1 -1
  74. package/src/assets/web-panel/assets/{Terminal-DdYrQ0n3.js → Terminal-BuIPGugj.js} +1 -1
  75. package/src/assets/web-panel/assets/{TimelineRenderer-C12_BYAe.js → TimelineRenderer-BefCbTxN.js} +1 -1
  76. package/src/assets/web-panel/assets/{Tokens-8MVLlc0s.js → Tokens-gGAeez46.js} +1 -1
  77. package/src/assets/web-panel/assets/{Trigger-Bl6QmvKw.js → Trigger-C_86E2v7.js} +1 -1
  78. package/src/assets/web-panel/assets/{Trust-BH_aEsWy.js → Trust-Beg23C1W.js} +1 -1
  79. package/src/assets/web-panel/assets/{UkeySign-DsX2CeE4.js → UkeySign--sGSaISg.js} +1 -1
  80. package/src/assets/web-panel/assets/{VideoEditing-DaRdn6e9.js → VideoEditing-DIsnY6D_.js} +1 -1
  81. package/src/assets/web-panel/assets/{Wallet-DO89dzlU.js → Wallet-a7ECYY0i.js} +1 -1
  82. package/src/assets/web-panel/assets/{WebAuthn-KUKNjImY.js → WebAuthn-CsVpkUE8.js} +1 -1
  83. package/src/assets/web-panel/assets/{WorkflowEditor-CnSoP-Z9.js → WorkflowEditor-BOJ4WTgl.js} +1 -1
  84. package/src/assets/web-panel/assets/{chat-Jp0M9E52.js → chat-ezCR5ZZX.js} +1 -1
  85. package/src/assets/web-panel/assets/{colors-Bkq4q91x.js → colors-DSUEQ7GR.js} +1 -1
  86. package/src/assets/web-panel/assets/{compact-item-CCt1byem.js → compact-item-D4w3DGj_.js} +1 -1
  87. package/src/assets/web-panel/assets/{createContext-DwRLi0Uq.js → createContext-B_hvu-NR.js} +1 -1
  88. package/src/assets/web-panel/assets/{hasIn-CTVm-2lw.js → hasIn-FY775Vpc.js} +1 -1
  89. package/src/assets/web-panel/assets/{index-CLjugrcu.js → index-1ki6aTIz.js} +1 -1
  90. package/src/assets/web-panel/assets/{index-CdlVwys1.js → index-B3lbDu2b.js} +1 -1
  91. package/src/assets/web-panel/assets/{index-B9q3wKEr.js → index-B9LXVosT.js} +1 -1
  92. package/src/assets/web-panel/assets/{index-DFcr_PT2.js → index-BGdchdRx.js} +1 -1
  93. package/src/assets/web-panel/assets/{index-D-UAtktg.js → index-BGrm33US.js} +1 -1
  94. package/src/assets/web-panel/assets/{index-CFh73FRz.js → index-BHPD-_s2.js} +1 -1
  95. package/src/assets/web-panel/assets/{index-CIBi-rGt.js → index-BMnGj-Ui.js} +1 -1
  96. package/src/assets/web-panel/assets/{index-CjJWQqPG.js → index-BSp1hSN8.js} +1 -1
  97. package/src/assets/web-panel/assets/{index-B2pkXVOU.js → index-BaZmrJ6j.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-6OmglXey.js → index-BnvLdkR8.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-BJmiHI2z.js → index-BzME19Nh.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-BD2U0Ciz.js → index-C0wDzrUK.js} +3 -3
  101. package/src/assets/web-panel/assets/{index-CPnSymMN.js → index-CAa3LSKI.js} +1 -1
  102. package/src/assets/web-panel/assets/{index-DRkGL2HJ.js → index-CE3vDzJj.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-eyVkd-kF.js → index-CLp4V3Tb.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-TL3iHPdE.js → index-CNUQnJsg.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-Cvrka2TD.js → index-CSbCIyga.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-MdArO-BF.js → index-CUNYcWEF.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-DWQ9NRWg.js → index-CV-F9a_X.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-DJegJP2N.js → index-CcvzscCg.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-BjGcDwb2.js → index-CdzLJsac.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-DRwUdk7I.js → index-Cug_yoee.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-TqiVFiUf.js → index-CxMArAIk.js} +1 -1
  112. package/src/assets/web-panel/assets/index-CzkEIn_T.js +1 -0
  113. package/src/assets/web-panel/assets/index-D2PcvXPP.js +1 -0
  114. package/src/assets/web-panel/assets/{index-CJWYdgmz.js → index-D6yJ0RMr.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-BtzUDs1M.js → index-DM77-xyl.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-hpRtUCjU.js → index-DfU6zsU8.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-C2ovimhG.js → index-DqsQUPY7.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-zwGGcR7I.js → index-DqxLCUYa.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-B_U_xDvh.js → index-DtztktoP.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-CDbgmmSF.js → index-Dz8-7APi.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-B3irAeY8.js → index-Enin7rzK.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-C3ZzMEg0.js → index-S6A76pR1.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-Db3R-khd.js → index-ZGJo2fz1.js} +1 -1
  124. package/src/assets/web-panel/assets/{index-BziGa10S.js → index-d0HXotWE.js} +1 -1
  125. package/src/assets/web-panel/assets/{index-DXDSJwDk.js → index-gAtp_KkQ.js} +1 -1
  126. package/src/assets/web-panel/assets/{index-BhSbNePw.js → index-mlTTTHla.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-DC-8E2CG.js → index-wWVM6ENX.js} +1 -1
  128. package/src/assets/web-panel/assets/{initDefaultProps-9iSe4Eid.js → initDefaultProps-BoLcNBz9.js} +1 -1
  129. package/src/assets/web-panel/assets/{motion-CcUz2pq7.js → motion-ouRvP3eO.js} +1 -1
  130. package/src/assets/web-panel/assets/{move-3Po9fM71.js → move-BBITvaOV.js} +1 -1
  131. package/src/assets/web-panel/assets/{omit-BBcRnciw.js → omit-D8Yxdvbb.js} +1 -1
  132. package/src/assets/web-panel/assets/{pickAttrs-UCqcWwOy.js → pickAttrs-BIUy7mER.js} +1 -1
  133. package/src/assets/web-panel/assets/{placementArrow-boVtHxA4.js → placementArrow-CrNWpNSF.js} +1 -1
  134. package/src/assets/web-panel/assets/{responsiveObserve-V0qPHZOl.js → responsiveObserve-aHLPN464.js} +1 -1
  135. package/src/assets/web-panel/assets/{slide-CZyysA_q.js → slide-2qNtePjk.js} +1 -1
  136. package/src/assets/web-panel/assets/{statusUtils-BLyCU5L3.js → statusUtils-FAF3iR3R.js} +1 -1
  137. package/src/assets/web-panel/assets/{styleChecker-BfXrPW7h.js → styleChecker-BNFTkrbl.js} +1 -1
  138. package/src/assets/web-panel/assets/{useFlexGapSupport-Be2wILDi.js → useFlexGapSupport-BgdPlW7E.js} +1 -1
  139. package/src/assets/web-panel/assets/{useFs-CzJYoHOI.js → useFs-q1QvAh3f.js} +1 -1
  140. package/src/assets/web-panel/assets/{usePersonalDataHub-__HEfTF9.js → usePersonalDataHub-DEZ6cY8C.js} +1 -1
  141. package/src/assets/web-panel/assets/{vnode-C0XE0aCE.js → vnode-vp6H-NL_.js} +1 -1
  142. package/src/assets/web-panel/assets/{zoom-CphwCBhl.js → zoom-UatfJMw4.js} +1 -1
  143. package/src/assets/web-panel/index.html +1 -1
  144. package/src/commands/__tests__/hub-kuaishou-adb-sync.test.js +161 -0
  145. package/src/commands/__tests__/hub-toutiao-adb-sync.test.js +158 -0
  146. package/src/commands/hub.js +283 -0
  147. package/src/gateways/ws/personal-data-hub-protocol.js +34 -0
  148. package/src/lib/personal-data-hub-wiring.js +122 -0
  149. package/src/assets/web-panel/assets/PersonalDataHub-BafcAH5d.js +0 -1
  150. package/src/assets/web-panel/assets/index-CR2wmKfw.js +0 -1
  151. package/src/assets/web-panel/assets/index-iXk8Oeci.js +0 -1
@@ -1 +1 @@
1
- import{P,f as u,i as H,h as D}from"./index-BD2U0Ciz.js";import{R as ee}from"./index-CjJWQqPG.js";import{i as ge,f as c,d as k,p as pe,x as be,c as v,r as he,w as Oe,s as C}from"./vendor-DhFY8mDK.js";const te=Symbol("OverflowContextProviderKey"),X=k({compatConfig:{MODE:3},name:"OverflowContextProvider",inheritAttrs:!1,props:{value:{type:Object}},setup(e,o){let{slots:a}=o;return pe(te,c(()=>e.value)),()=>{var t;return(t=a.default)===null||t===void 0?void 0:t.call(a)}}}),Se=()=>ge(te,c(()=>null));var xe=function(e,o){var a={};for(var t in e)Object.prototype.hasOwnProperty.call(e,t)&&o.indexOf(t)<0&&(a[t]=e[t]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var n=0,t=Object.getOwnPropertySymbols(e);n<t.length;n++)o.indexOf(t[n])<0&&Object.prototype.propertyIsEnumerable.call(e,t[n])&&(a[t[n]]=e[t[n]]);return a};const _=void 0,$=k({compatConfig:{MODE:3},name:"Item",props:{prefixCls:String,item:P.any,renderItem:Function,responsive:Boolean,itemKey:{type:[String,Number]},registerSize:Function,display:Boolean,order:Number,component:P.any,invalidate:Boolean},setup(e,o){let{slots:a,expose:t}=o;const n=c(()=>e.responsive&&!e.display),p=he();t({itemNodeRef:p});function b(i){e.registerSize(e.itemKey,i)}return be(()=>{b(null)}),()=>{var i;const{prefixCls:O,invalidate:w,item:m,renderItem:y,responsive:f,registerSize:z,itemKey:R,display:V,order:I,component:M="div"}=e,S=xe(e,["prefixCls","invalidate","item","renderItem","responsive","registerSize","itemKey","display","order","component"]),W=(i=a.default)===null||i===void 0?void 0:i.call(a),T=y&&m!==_?y(m):W;let h;w||(h={opacity:n.value?0:1,height:n.value?0:_,overflowY:n.value?"hidden":_,order:f?I:_,pointerEvents:n.value?"none":_,position:n.value?"absolute":_});const N={};return n.value&&(N["aria-hidden"]=!0),v(ee,{disabled:!f,onResize:E=>{let{offsetWidth:B}=E;b(B)}},{default:()=>v(M,u(u(u({class:H(!w&&O),style:h},N),S),{},{ref:p}),{default:()=>[T]})})}}});var U=function(e,o){var a={};for(var t in e)Object.prototype.hasOwnProperty.call(e,t)&&o.indexOf(t)<0&&(a[t]=e[t]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var n=0,t=Object.getOwnPropertySymbols(e);n<t.length;n++)o.indexOf(t[n])<0&&Object.prototype.propertyIsEnumerable.call(e,t[n])&&(a[t[n]]=e[t[n]]);return a};const Ce=k({compatConfig:{MODE:3},name:"RawItem",inheritAttrs:!1,props:{component:P.any,title:P.any,id:String,onMouseenter:{type:Function},onMouseleave:{type:Function},onClick:{type:Function},onKeydown:{type:Function},onFocus:{type:Function},role:String,tabindex:Number},setup(e,o){let{slots:a,attrs:t}=o;const n=Se();return()=>{var p;if(!n.value){const{component:y="div"}=e,f=U(e,["component"]);return v(y,u(u({},f),t),{default:()=>[(p=a.default)===null||p===void 0?void 0:p.call(a)]})}const b=n.value,{className:i}=b,O=U(b,["className"]),{class:w}=t,m=U(t,["class"]);return v(X,{value:null},{default:()=>[v($,u(u(u({class:H(i,w)},O),m),e),a)]})}}});var we=function(e,o){var a={};for(var t in e)Object.prototype.hasOwnProperty.call(e,t)&&o.indexOf(t)<0&&(a[t]=e[t]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var n=0,t=Object.getOwnPropertySymbols(e);n<t.length;n++)o.indexOf(t[n])<0&&Object.prototype.propertyIsEnumerable.call(e,t[n])&&(a[t[n]]=e[t[n]]);return a};const ne="responsive",le="invalidate";function Re(e){return`+ ${e.length} ...`}const Ie=()=>({id:String,prefixCls:String,data:Array,itemKey:[String,Number,Function],itemWidth:{type:Number,default:10},renderItem:Function,renderRawItem:Function,maxCount:[Number,String],renderRest:Function,renderRawRest:Function,suffix:P.any,component:String,itemComponent:P.any,onVisibleChange:Function,ssr:String,onMousedown:Function,role:String}),Y=k({name:"Overflow",inheritAttrs:!1,props:Ie(),emits:["visibleChange"],setup(e,o){let{attrs:a,emit:t,slots:n}=o;const p=c(()=>e.ssr==="full"),b=C(null),i=c(()=>b.value||0),O=C(new Map),w=C(0),m=C(0),y=C(0),f=C(null),z=C(null),R=c(()=>z.value===null&&p.value?Number.MAX_SAFE_INTEGER:z.value||0),V=C(!1),I=c(()=>`${e.prefixCls}-item`),M=c(()=>Math.max(w.value,m.value)),S=c(()=>!!(e.data.length&&e.maxCount===ne)),W=c(()=>e.maxCount===le),T=c(()=>S.value||typeof e.maxCount=="number"&&e.data.length>e.maxCount),h=c(()=>{let l=e.data;return S.value?b.value===null&&p.value?l=e.data:l=e.data.slice(0,Math.min(e.data.length,i.value/e.itemWidth)):typeof e.maxCount=="number"&&(l=e.data.slice(0,e.maxCount)),l}),N=c(()=>S.value?e.data.slice(R.value+1):e.data.slice(h.value.length)),E=(l,r)=>{var s;return typeof e.itemKey=="function"?e.itemKey(l):(s=e.itemKey&&l?.[e.itemKey])!==null&&s!==void 0?s:r},B=c(()=>e.renderItem||(l=>l)),A=(l,r)=>{z.value=l,r||(V.value=l<e.data.length-1,t("visibleChange",l))},ae=(l,r)=>{b.value=r.clientWidth},q=(l,r)=>{const s=new Map(O.value);r===null?s.delete(l):s.set(l,r),O.value=s},re=(l,r)=>{w.value=m.value,m.value=r},oe=(l,r)=>{y.value=r},G=l=>O.value.get(E(h.value[l],l));return Oe([i,O,m,y,()=>e.itemKey,h],()=>{if(i.value&&M.value&&h.value){let l=y.value;const r=h.value.length,s=r-1;if(!r){A(0),f.value=null;return}for(let g=0;g<r;g+=1){const F=G(g);if(F===void 0){A(g-1,!0);break}if(l+=F,s===0&&l<=i.value||g===s-1&&l+G(s)<=i.value){A(s),f.value=null;break}else if(l+M.value>i.value){A(g-1),f.value=l-F-y.value+m.value;break}}e.suffix&&G(0)+y.value>i.value&&(f.value=null)}}),()=>{const l=V.value&&!!N.value.length,{itemComponent:r,renderRawItem:s,renderRawRest:g,renderRest:F,prefixCls:ie="rc-overflow",suffix:J,component:se="div",id:ue,onMousedown:de}=e,{class:ce,style:ve}=a,fe=we(a,["class","style"]);let Q={};f.value!==null&&S.value&&(Q={position:"absolute",left:`${f.value}px`,top:0});const j={prefixCls:I.value,responsive:S.value,component:r,invalidate:W.value},me=s?(d,x)=>{const K=E(d,x);return v(X,{key:K,value:D(D({},j),{order:x,item:d,itemKey:K,registerSize:q,display:x<=R.value})},{default:()=>[s(d,x)]})}:(d,x)=>{const K=E(d,x);return v($,u(u({},j),{},{order:x,key:K,item:d,renderItem:B.value,itemKey:K,registerSize:q,display:x<=R.value}),null)};let L=()=>null;const Z={order:l?R.value:Number.MAX_SAFE_INTEGER,className:`${I.value} ${I.value}-rest`,registerSize:re,display:l};if(g)g&&(L=()=>v(X,{value:D(D({},j),Z)},{default:()=>[g(N.value)]}));else{const d=F||Re;L=()=>v($,u(u({},j),Z),{default:()=>typeof d=="function"?d(N.value):d})}const ye=()=>{var d;return v(se,u({id:ue,class:H(!W.value&&ie,ce),style:ve,onMousedown:de,role:e.role},fe),{default:()=>[h.value.map(me),T.value?L():null,J&&v($,u(u({},j),{},{order:R.value,class:`${I.value}-suffix`,registerSize:oe,display:!0,style:Q}),{default:()=>J}),(d=n.default)===null||d===void 0?void 0:d.call(n)]})};return v(ee,{disabled:!S.value,onResize:ae},{default:ye})}}});Y.Item=Ce;Y.RESPONSIVE=ne;Y.INVALIDATE=le;export{Y as O};
1
+ import{P,f as u,i as H,h as D}from"./index-C0wDzrUK.js";import{R as ee}from"./index-BSp1hSN8.js";import{i as ge,f as c,d as k,p as pe,x as be,c as v,r as he,w as Oe,s as C}from"./vendor-DhFY8mDK.js";const te=Symbol("OverflowContextProviderKey"),X=k({compatConfig:{MODE:3},name:"OverflowContextProvider",inheritAttrs:!1,props:{value:{type:Object}},setup(e,o){let{slots:a}=o;return pe(te,c(()=>e.value)),()=>{var t;return(t=a.default)===null||t===void 0?void 0:t.call(a)}}}),Se=()=>ge(te,c(()=>null));var xe=function(e,o){var a={};for(var t in e)Object.prototype.hasOwnProperty.call(e,t)&&o.indexOf(t)<0&&(a[t]=e[t]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var n=0,t=Object.getOwnPropertySymbols(e);n<t.length;n++)o.indexOf(t[n])<0&&Object.prototype.propertyIsEnumerable.call(e,t[n])&&(a[t[n]]=e[t[n]]);return a};const _=void 0,$=k({compatConfig:{MODE:3},name:"Item",props:{prefixCls:String,item:P.any,renderItem:Function,responsive:Boolean,itemKey:{type:[String,Number]},registerSize:Function,display:Boolean,order:Number,component:P.any,invalidate:Boolean},setup(e,o){let{slots:a,expose:t}=o;const n=c(()=>e.responsive&&!e.display),p=he();t({itemNodeRef:p});function b(i){e.registerSize(e.itemKey,i)}return be(()=>{b(null)}),()=>{var i;const{prefixCls:O,invalidate:w,item:m,renderItem:y,responsive:f,registerSize:z,itemKey:R,display:V,order:I,component:M="div"}=e,S=xe(e,["prefixCls","invalidate","item","renderItem","responsive","registerSize","itemKey","display","order","component"]),W=(i=a.default)===null||i===void 0?void 0:i.call(a),T=y&&m!==_?y(m):W;let h;w||(h={opacity:n.value?0:1,height:n.value?0:_,overflowY:n.value?"hidden":_,order:f?I:_,pointerEvents:n.value?"none":_,position:n.value?"absolute":_});const N={};return n.value&&(N["aria-hidden"]=!0),v(ee,{disabled:!f,onResize:E=>{let{offsetWidth:B}=E;b(B)}},{default:()=>v(M,u(u(u({class:H(!w&&O),style:h},N),S),{},{ref:p}),{default:()=>[T]})})}}});var U=function(e,o){var a={};for(var t in e)Object.prototype.hasOwnProperty.call(e,t)&&o.indexOf(t)<0&&(a[t]=e[t]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var n=0,t=Object.getOwnPropertySymbols(e);n<t.length;n++)o.indexOf(t[n])<0&&Object.prototype.propertyIsEnumerable.call(e,t[n])&&(a[t[n]]=e[t[n]]);return a};const Ce=k({compatConfig:{MODE:3},name:"RawItem",inheritAttrs:!1,props:{component:P.any,title:P.any,id:String,onMouseenter:{type:Function},onMouseleave:{type:Function},onClick:{type:Function},onKeydown:{type:Function},onFocus:{type:Function},role:String,tabindex:Number},setup(e,o){let{slots:a,attrs:t}=o;const n=Se();return()=>{var p;if(!n.value){const{component:y="div"}=e,f=U(e,["component"]);return v(y,u(u({},f),t),{default:()=>[(p=a.default)===null||p===void 0?void 0:p.call(a)]})}const b=n.value,{className:i}=b,O=U(b,["className"]),{class:w}=t,m=U(t,["class"]);return v(X,{value:null},{default:()=>[v($,u(u(u({class:H(i,w)},O),m),e),a)]})}}});var we=function(e,o){var a={};for(var t in e)Object.prototype.hasOwnProperty.call(e,t)&&o.indexOf(t)<0&&(a[t]=e[t]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var n=0,t=Object.getOwnPropertySymbols(e);n<t.length;n++)o.indexOf(t[n])<0&&Object.prototype.propertyIsEnumerable.call(e,t[n])&&(a[t[n]]=e[t[n]]);return a};const ne="responsive",le="invalidate";function Re(e){return`+ ${e.length} ...`}const Ie=()=>({id:String,prefixCls:String,data:Array,itemKey:[String,Number,Function],itemWidth:{type:Number,default:10},renderItem:Function,renderRawItem:Function,maxCount:[Number,String],renderRest:Function,renderRawRest:Function,suffix:P.any,component:String,itemComponent:P.any,onVisibleChange:Function,ssr:String,onMousedown:Function,role:String}),Y=k({name:"Overflow",inheritAttrs:!1,props:Ie(),emits:["visibleChange"],setup(e,o){let{attrs:a,emit:t,slots:n}=o;const p=c(()=>e.ssr==="full"),b=C(null),i=c(()=>b.value||0),O=C(new Map),w=C(0),m=C(0),y=C(0),f=C(null),z=C(null),R=c(()=>z.value===null&&p.value?Number.MAX_SAFE_INTEGER:z.value||0),V=C(!1),I=c(()=>`${e.prefixCls}-item`),M=c(()=>Math.max(w.value,m.value)),S=c(()=>!!(e.data.length&&e.maxCount===ne)),W=c(()=>e.maxCount===le),T=c(()=>S.value||typeof e.maxCount=="number"&&e.data.length>e.maxCount),h=c(()=>{let l=e.data;return S.value?b.value===null&&p.value?l=e.data:l=e.data.slice(0,Math.min(e.data.length,i.value/e.itemWidth)):typeof e.maxCount=="number"&&(l=e.data.slice(0,e.maxCount)),l}),N=c(()=>S.value?e.data.slice(R.value+1):e.data.slice(h.value.length)),E=(l,r)=>{var s;return typeof e.itemKey=="function"?e.itemKey(l):(s=e.itemKey&&l?.[e.itemKey])!==null&&s!==void 0?s:r},B=c(()=>e.renderItem||(l=>l)),A=(l,r)=>{z.value=l,r||(V.value=l<e.data.length-1,t("visibleChange",l))},ae=(l,r)=>{b.value=r.clientWidth},q=(l,r)=>{const s=new Map(O.value);r===null?s.delete(l):s.set(l,r),O.value=s},re=(l,r)=>{w.value=m.value,m.value=r},oe=(l,r)=>{y.value=r},G=l=>O.value.get(E(h.value[l],l));return Oe([i,O,m,y,()=>e.itemKey,h],()=>{if(i.value&&M.value&&h.value){let l=y.value;const r=h.value.length,s=r-1;if(!r){A(0),f.value=null;return}for(let g=0;g<r;g+=1){const F=G(g);if(F===void 0){A(g-1,!0);break}if(l+=F,s===0&&l<=i.value||g===s-1&&l+G(s)<=i.value){A(s),f.value=null;break}else if(l+M.value>i.value){A(g-1),f.value=l-F-y.value+m.value;break}}e.suffix&&G(0)+y.value>i.value&&(f.value=null)}}),()=>{const l=V.value&&!!N.value.length,{itemComponent:r,renderRawItem:s,renderRawRest:g,renderRest:F,prefixCls:ie="rc-overflow",suffix:J,component:se="div",id:ue,onMousedown:de}=e,{class:ce,style:ve}=a,fe=we(a,["class","style"]);let Q={};f.value!==null&&S.value&&(Q={position:"absolute",left:`${f.value}px`,top:0});const j={prefixCls:I.value,responsive:S.value,component:r,invalidate:W.value},me=s?(d,x)=>{const K=E(d,x);return v(X,{key:K,value:D(D({},j),{order:x,item:d,itemKey:K,registerSize:q,display:x<=R.value})},{default:()=>[s(d,x)]})}:(d,x)=>{const K=E(d,x);return v($,u(u({},j),{},{order:x,key:K,item:d,renderItem:B.value,itemKey:K,registerSize:q,display:x<=R.value}),null)};let L=()=>null;const Z={order:l?R.value:Number.MAX_SAFE_INTEGER,className:`${I.value} ${I.value}-rest`,registerSize:re,display:l};if(g)g&&(L=()=>v(X,{value:D(D({},j),Z)},{default:()=>[g(N.value)]}));else{const d=F||Re;L=()=>v($,u(u({},j),Z),{default:()=>typeof d=="function"?d(N.value):d})}const ye=()=>{var d;return v(se,u({id:ue,class:H(!W.value&&ie,ce),style:ve,onMousedown:de,role:e.role},fe),{default:()=>[h.value.map(me),T.value?L():null,J&&v($,u(u({},j),{},{order:R.value,class:`${I.value}-suffix`,registerSize:oe,display:!0,style:Q}),{default:()=>J}),(d=n.default)===null||d===void 0?void 0:d.call(n)]})};return v(ee,{disabled:!S.value,onResize:ae},{default:ye})}}});Y.Item=Ce;Y.RESPONSIVE=ne;Y.INVALIDATE=le;export{Y as O};
@@ -1,2 +1,2 @@
1
- import{_ as ve,b as ye,u as me}from"./index-BD2U0Ciz.js";import{R as fe,M as _e,al as te,as as ge,p as B}from"./icons-AILO5ZcK.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-DhFY8mDK.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-C0wDzrUK.js";import{R as fe,M as _e,al as te,as as ge,p as B}from"./icons-AILO5ZcK.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-DhFY8mDK.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,5 +1,5 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./ChatBubbleRenderer-3BBqk317.js","./index-BD2U0Ciz.js","./vendor-DhFY8mDK.js","./icons-AILO5ZcK.js","./index-CfX1DEtk.css","./ChatBubbleRenderer-CO908iBt.css","./OrderTableRenderer-XW2G50wt.js","./OrderTableRenderer-BnOISpKI.css","./TimelineRenderer-C12_BYAe.js","./TimelineRenderer-DmztdsbF.css","./EmailListRenderer-CBHLFokz.js","./EmailListRenderer-CVJ1j3Ll.css","./GenericCardRenderer-DW4Lnrsr.js","./GenericCardRenderer-DtJFcJYl.css"])))=>i.map(i=>d[i]);
2
- import{E as W,r as L,f as R,K as _,L as d,M as O,R as b,c as i,u as s,Q as k,S as $,Z as U,F as P,Y as H,$ as K,P as j,N as v,O as h,V as F,o as Z}from"./vendor-DhFY8mDK.js";import{u as J}from"./usePersonalDataHub-__HEfTF9.js";import{_ as M,e as T,d as z}from"./index-BD2U0Ciz.js";import{m as B,ad as X,M as ee,aH as te,x as ne,aF as se,aq as oe,h as re,t as le,d as ae,e as Q,ag as ie,az as ue,R as ce}from"./icons-AILO5ZcK.js";const I=Object.freeze({q:"",category:null,adapter:null,subtype:null,since:null,until:null}),N=50,G=300,de=W("pdhBrowser",()=>{const t=L({...I}),e=L([]),o=L(null),c=L(!1),r=L(!1),a=L(null),n=L(null),l=L(!1),m=L({byCategory:{},byAdapter:{},bySubtype:{},total:0});let u=0,S=null;const g=R(()=>e.value.length>0),p=R(()=>o.value!=null);function C(w={}){const y={},f=t.value;return f.q&&f.q.trim()&&(y.q=f.q.trim()),f.category&&(y.category=f.category),f.adapter&&(y.adapter=f.adapter),f.subtype&&(y.subtype=f.subtype),Number.isFinite(f.since)&&(y.since=f.since),Number.isFinite(f.until)&&(y.until=f.until),{...y,...w}}async function x(){const w=++u;c.value=!0,a.value=null;const y=J();try{const[f,D]=await Promise.all([y.searchEvents(C({limit:N})),y.facetCounts({...t.value.q&&t.value.q.trim()?{q:t.value.q.trim()}:{},...Number.isFinite(t.value.since)?{since:t.value.since}:{},...Number.isFinite(t.value.until)?{until:t.value.until}:{}})]);if(w!==u)return;e.value=f.rows||[],o.value=f.nextCursor||null,n.value=f.mode||"like",l.value=!!f.shortQuery,m.value={byCategory:D.byCategory||{},byAdapter:D.byAdapter||{},bySubtype:D.bySubtype||{},total:D.total||0}}catch(f){if(w!==u)return;a.value=f&&f.message?f.message:String(f),e.value=[],o.value=null}finally{w===u&&(c.value=!1)}}async function E(){if(!o.value||r.value)return;r.value=!0,a.value=null;const w=J();try{const y=await w.searchEvents(C({cursor:o.value,limit:N}));e.value=e.value.concat(y.rows||[]),o.value=y.nextCursor||null,n.value=y.mode||n.value}catch(y){a.value=y&&y.message?y.message:String(y)}finally{r.value=!1}}function A(w,y){if(!(w in I))throw new Error(`pdhBrowser.setFilter: unknown key "${w}"`);t.value={...t.value,[w]:y},S&&clearTimeout(S),S=setTimeout(()=>{S=null,x()},G)}function q(w){return t.value={...I,...w},S&&(clearTimeout(S),S=null),x()}function Y(){t.value={...I},e.value=[],o.value=null,a.value=null,m.value={byCategory:{},byAdapter:{},bySubtype:{},total:0}}return{filters:t,results:e,cursor:o,isLoading:c,isAppending:r,error:a,mode:n,shortQuery:l,facets:m,hasResults:g,canLoadMore:p,search:x,loadMore:E,setFilter:A,setFilters:q,reset:Y,PAGE_SIZE:N,SEARCH_DEBOUNCE_MS:G}}),fe=Object.freeze(["chat","social","email","shopping","travel","system","ai-chat","other"]),pe=Object.freeze({chat:"社交聊天",social:"内容平台",email:"邮件",shopping:"支付订单",travel:"出行",system:"系统数据","ai-chat":"AI 对话",other:"其他"});function V(t){return pe[t]||t||"未知"}const me=Object.freeze([["wechat","chat"],["messaging-","chat"],["social-","social"],["email-","email"],["shopping-","shopping"],["alipay-","shopping"],["travel-","travel"],["system-data","system"],["browser-","system"],["vscode","system"],["win-recent","system"],["git-activity","system"],["shell-history","system"],["local-files","system"],["ai-chat-","ai-chat"]]);function ye(t){if(typeof t!="string"||t.length===0)return"other";for(const[e,o]of me)if(e.endsWith("-")||e==="system-data"){if(t.startsWith(e))return o}else if(t===e)return o;return"other"}const ve={class:"pdh-sidebar"},ge=["onClick"],_e={class:"label"},be={__name:"CategorySidebar",props:{selected:{type:String,default:null},facets:{type:Object,default:()=>({byCategory:{},total:0})}},emits:["select"],setup(t){const e=t,o=R(()=>e.facets.total||0),c={chat:re,social:oe,email:se,shopping:ne,travel:te,system:ee,"ai-chat":X,other:B};function r(n){return c[n]||B}function a(n){return n?{backgroundColor:"#fff",color:"#1677ff"}:{backgroundColor:"#f0f0f0",color:"#666"}}return(n,l)=>{const m=_("a-badge");return d(),O("div",ve,[l[2]||(l[2]=b("div",{class:"sidebar-title"},"数据类型",-1)),b("div",{class:U(["cat-item",{active:t.selected===null}]),onClick:l[0]||(l[0]=u=>n.$emit("select",null))},[i(s(B),{class:"icon"}),l[1]||(l[1]=b("span",{class:"label"},"全部",-1)),o.value>0?(d(),k(m,{key:0,count:o.value,"number-style":a(t.selected===null),"overflow-count":9999},null,8,["count","number-style"])):$("",!0)],2),(d(!0),O(P,null,H(s(fe),u=>(d(),O("div",{key:u,class:U(["cat-item",{active:t.selected===u,dim:!t.facets.byCategory[u]}]),onClick:S=>n.$emit("select",u)},[(d(),k(K(r(u)),{class:"icon"})),b("span",_e,j(s(V)(u)),1),t.facets.byCategory[u]?(d(),k(m,{key:0,count:t.facets.byCategory[u],"number-style":a(t.selected===u),"overflow-count":9999},null,8,["count","number-style"])):$("",!0)],10,ge))),128))])}}},he=M(be,[["__scopeId","data-v-0c0dc745"]]),Se={class:"pdh-filter-bar"},Ce={key:1,class:"hint"},we={key:2,class:"hint"},Oe={__name:"SearchFilterBar",props:{filters:{type:Object,required:!0},facets:{type:Object,default:()=>({byAdapter:{}})},isLoading:{type:Boolean,default:!1},mode:{type:String,default:null},shortQuery:{type:Boolean,default:!1}},emits:["set-filter","reset"],setup(t,{emit:e}){const o=t,c=e,r=R(()=>o.filters.category?`在「${o.filters.category}」类目内搜索…`:"搜索关键词(如:支付宝、罗技、Kotlin)…"),a=R(()=>Object.entries(o.facets.byAdapter||{}).sort((p,C)=>C[1]-p[1]).map(([p,C])=>({value:p,label:`${p} (${C})`}))),n=R(()=>!o.filters.since&&!o.filters.until?null:[o.filters.since?new Date(o.filters.since):null,o.filters.until?new Date(o.filters.until):null]),l=R(()=>!!(o.filters.q||o.filters.adapter||o.filters.subtype||o.filters.since||o.filters.until));function m(g){c("set-filter","q",g||"")}function u(g){c("set-filter","q",g||"")}function S(g){if(!g||g.length===0){c("set-filter","since",null),c("set-filter","until",null);return}const[p,C]=g;c("set-filter","since",p?+p:null),c("set-filter","until",C?+C:null)}return(g,p)=>{const C=_("a-input-search"),x=_("a-select"),E=_("a-range-picker"),A=_("a-button");return d(),O("div",Se,[i(C,{value:t.filters.q,placeholder:r.value,"enter-button":"搜索","allow-clear":"",loading:t.isLoading,style:{flex:"1","max-width":"480px"},"onUpdate:value":m,onSearch:u},{prefix:v(()=>[i(s(le))]),_:1},8,["value","placeholder","loading"]),i(x,{value:t.filters.adapter,placeholder:"所有 adapter","allow-clear":"",options:a.value,style:{width:"200px"},"onUpdate:value":p[0]||(p[0]=q=>g.$emit("set-filter","adapter",q||null))},null,8,["value","options"]),i(E,{value:n.value,placeholder:["开始日期","结束日期"],style:{width:"280px"},"onUpdate:value":S},null,8,["value"]),l.value?(d(),k(A,{key:0,type:"link",danger:"",onClick:p[1]||(p[1]=q=>g.$emit("reset"))},{icon:v(()=>[i(s(ae))]),default:v(()=>[p[2]||(p[2]=h(" 清空筛选 ",-1))]),_:1})):$("",!0),t.shortQuery?(d(),O("span",Ce,[i(s(Q)),p[3]||(p[3]=h(" 关键词需至少 3 字 (FTS5 trigram 限制) ",-1))])):t.mode==="like"?(d(),O("span",we,[i(s(Q)),p[4]||(p[4]=h(" 当前为 LIKE 兜底模式 ",-1))])):$("",!0)])}}},ke=M(Oe,[["__scopeId","data-v-44891485"]]),$e={__name:"RendererDispatcher",props:{event:{type:Object,required:!0}},setup(t){const e=F(()=>T(()=>import("./ChatBubbleRenderer-3BBqk317.js"),__vite__mapDeps([0,1,2,3,4,5]),import.meta.url)),o=F(()=>T(()=>import("./OrderTableRenderer-XW2G50wt.js"),__vite__mapDeps([6,1,2,3,4,7]),import.meta.url)),c=F(()=>T(()=>import("./TimelineRenderer-C12_BYAe.js"),__vite__mapDeps([8,1,2,3,4,9]),import.meta.url)),r=F(()=>T(()=>import("./EmailListRenderer-CBHLFokz.js"),__vite__mapDeps([10,1,2,3,4,11]),import.meta.url)),a=F(()=>T(()=>import("./GenericCardRenderer-DW4Lnrsr.js"),__vite__mapDeps([12,1,2,3,4,13]),import.meta.url));function n(l){const m=l&&l.source&&l.source.adapter;switch(ye(m)){case"chat":case"ai-chat":return e;case"shopping":return o;case"travel":return c;case"email":return r;default:return a}}return(l,m)=>(d(),k(K(n(t.event)),{event:t.event},null,8,["event"]))}};function Ee(t){return JSON.stringify(t,null,2)}function Le(t){return t.map(e=>JSON.stringify(e)).join(`
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./ChatBubbleRenderer-DIXrOHbn.js","./index-C0wDzrUK.js","./vendor-DhFY8mDK.js","./icons-AILO5ZcK.js","./index-CfX1DEtk.css","./ChatBubbleRenderer-CO908iBt.css","./OrderTableRenderer-zQ5jvUZI.js","./OrderTableRenderer-BnOISpKI.css","./TimelineRenderer-BefCbTxN.js","./TimelineRenderer-DmztdsbF.css","./EmailListRenderer-DX7xfm5a.js","./EmailListRenderer-CVJ1j3Ll.css","./GenericCardRenderer-REjsnTHA.js","./GenericCardRenderer-DtJFcJYl.css"])))=>i.map(i=>d[i]);
2
+ import{E as W,r as L,f as R,K as _,L as d,M as O,R as b,c as i,u as s,Q as k,S as $,Z as U,F as P,Y as H,$ as K,P as j,N as v,O as h,V as F,o as Z}from"./vendor-DhFY8mDK.js";import{u as J}from"./usePersonalDataHub-DEZ6cY8C.js";import{_ as M,e as T,d as z}from"./index-C0wDzrUK.js";import{m as B,ad as X,M as ee,aH as te,x as ne,aF as se,aq as oe,h as re,t as le,d as ae,e as Q,ag as ie,az as ue,R as ce}from"./icons-AILO5ZcK.js";const I=Object.freeze({q:"",category:null,adapter:null,subtype:null,since:null,until:null}),N=50,G=300,de=W("pdhBrowser",()=>{const t=L({...I}),e=L([]),o=L(null),c=L(!1),r=L(!1),a=L(null),n=L(null),l=L(!1),m=L({byCategory:{},byAdapter:{},bySubtype:{},total:0});let u=0,S=null;const g=R(()=>e.value.length>0),p=R(()=>o.value!=null);function C(w={}){const y={},f=t.value;return f.q&&f.q.trim()&&(y.q=f.q.trim()),f.category&&(y.category=f.category),f.adapter&&(y.adapter=f.adapter),f.subtype&&(y.subtype=f.subtype),Number.isFinite(f.since)&&(y.since=f.since),Number.isFinite(f.until)&&(y.until=f.until),{...y,...w}}async function x(){const w=++u;c.value=!0,a.value=null;const y=J();try{const[f,D]=await Promise.all([y.searchEvents(C({limit:N})),y.facetCounts({...t.value.q&&t.value.q.trim()?{q:t.value.q.trim()}:{},...Number.isFinite(t.value.since)?{since:t.value.since}:{},...Number.isFinite(t.value.until)?{until:t.value.until}:{}})]);if(w!==u)return;e.value=f.rows||[],o.value=f.nextCursor||null,n.value=f.mode||"like",l.value=!!f.shortQuery,m.value={byCategory:D.byCategory||{},byAdapter:D.byAdapter||{},bySubtype:D.bySubtype||{},total:D.total||0}}catch(f){if(w!==u)return;a.value=f&&f.message?f.message:String(f),e.value=[],o.value=null}finally{w===u&&(c.value=!1)}}async function E(){if(!o.value||r.value)return;r.value=!0,a.value=null;const w=J();try{const y=await w.searchEvents(C({cursor:o.value,limit:N}));e.value=e.value.concat(y.rows||[]),o.value=y.nextCursor||null,n.value=y.mode||n.value}catch(y){a.value=y&&y.message?y.message:String(y)}finally{r.value=!1}}function A(w,y){if(!(w in I))throw new Error(`pdhBrowser.setFilter: unknown key "${w}"`);t.value={...t.value,[w]:y},S&&clearTimeout(S),S=setTimeout(()=>{S=null,x()},G)}function q(w){return t.value={...I,...w},S&&(clearTimeout(S),S=null),x()}function Y(){t.value={...I},e.value=[],o.value=null,a.value=null,m.value={byCategory:{},byAdapter:{},bySubtype:{},total:0}}return{filters:t,results:e,cursor:o,isLoading:c,isAppending:r,error:a,mode:n,shortQuery:l,facets:m,hasResults:g,canLoadMore:p,search:x,loadMore:E,setFilter:A,setFilters:q,reset:Y,PAGE_SIZE:N,SEARCH_DEBOUNCE_MS:G}}),fe=Object.freeze(["chat","social","email","shopping","travel","system","ai-chat","other"]),pe=Object.freeze({chat:"社交聊天",social:"内容平台",email:"邮件",shopping:"支付订单",travel:"出行",system:"系统数据","ai-chat":"AI 对话",other:"其他"});function V(t){return pe[t]||t||"未知"}const me=Object.freeze([["wechat","chat"],["messaging-","chat"],["social-","social"],["email-","email"],["shopping-","shopping"],["alipay-","shopping"],["travel-","travel"],["system-data","system"],["browser-","system"],["vscode","system"],["win-recent","system"],["git-activity","system"],["shell-history","system"],["local-files","system"],["ai-chat-","ai-chat"]]);function ye(t){if(typeof t!="string"||t.length===0)return"other";for(const[e,o]of me)if(e.endsWith("-")||e==="system-data"){if(t.startsWith(e))return o}else if(t===e)return o;return"other"}const ve={class:"pdh-sidebar"},ge=["onClick"],_e={class:"label"},be={__name:"CategorySidebar",props:{selected:{type:String,default:null},facets:{type:Object,default:()=>({byCategory:{},total:0})}},emits:["select"],setup(t){const e=t,o=R(()=>e.facets.total||0),c={chat:re,social:oe,email:se,shopping:ne,travel:te,system:ee,"ai-chat":X,other:B};function r(n){return c[n]||B}function a(n){return n?{backgroundColor:"#fff",color:"#1677ff"}:{backgroundColor:"#f0f0f0",color:"#666"}}return(n,l)=>{const m=_("a-badge");return d(),O("div",ve,[l[2]||(l[2]=b("div",{class:"sidebar-title"},"数据类型",-1)),b("div",{class:U(["cat-item",{active:t.selected===null}]),onClick:l[0]||(l[0]=u=>n.$emit("select",null))},[i(s(B),{class:"icon"}),l[1]||(l[1]=b("span",{class:"label"},"全部",-1)),o.value>0?(d(),k(m,{key:0,count:o.value,"number-style":a(t.selected===null),"overflow-count":9999},null,8,["count","number-style"])):$("",!0)],2),(d(!0),O(P,null,H(s(fe),u=>(d(),O("div",{key:u,class:U(["cat-item",{active:t.selected===u,dim:!t.facets.byCategory[u]}]),onClick:S=>n.$emit("select",u)},[(d(),k(K(r(u)),{class:"icon"})),b("span",_e,j(s(V)(u)),1),t.facets.byCategory[u]?(d(),k(m,{key:0,count:t.facets.byCategory[u],"number-style":a(t.selected===u),"overflow-count":9999},null,8,["count","number-style"])):$("",!0)],10,ge))),128))])}}},he=M(be,[["__scopeId","data-v-0c0dc745"]]),Se={class:"pdh-filter-bar"},Ce={key:1,class:"hint"},we={key:2,class:"hint"},Oe={__name:"SearchFilterBar",props:{filters:{type:Object,required:!0},facets:{type:Object,default:()=>({byAdapter:{}})},isLoading:{type:Boolean,default:!1},mode:{type:String,default:null},shortQuery:{type:Boolean,default:!1}},emits:["set-filter","reset"],setup(t,{emit:e}){const o=t,c=e,r=R(()=>o.filters.category?`在「${o.filters.category}」类目内搜索…`:"搜索关键词(如:支付宝、罗技、Kotlin)…"),a=R(()=>Object.entries(o.facets.byAdapter||{}).sort((p,C)=>C[1]-p[1]).map(([p,C])=>({value:p,label:`${p} (${C})`}))),n=R(()=>!o.filters.since&&!o.filters.until?null:[o.filters.since?new Date(o.filters.since):null,o.filters.until?new Date(o.filters.until):null]),l=R(()=>!!(o.filters.q||o.filters.adapter||o.filters.subtype||o.filters.since||o.filters.until));function m(g){c("set-filter","q",g||"")}function u(g){c("set-filter","q",g||"")}function S(g){if(!g||g.length===0){c("set-filter","since",null),c("set-filter","until",null);return}const[p,C]=g;c("set-filter","since",p?+p:null),c("set-filter","until",C?+C:null)}return(g,p)=>{const C=_("a-input-search"),x=_("a-select"),E=_("a-range-picker"),A=_("a-button");return d(),O("div",Se,[i(C,{value:t.filters.q,placeholder:r.value,"enter-button":"搜索","allow-clear":"",loading:t.isLoading,style:{flex:"1","max-width":"480px"},"onUpdate:value":m,onSearch:u},{prefix:v(()=>[i(s(le))]),_:1},8,["value","placeholder","loading"]),i(x,{value:t.filters.adapter,placeholder:"所有 adapter","allow-clear":"",options:a.value,style:{width:"200px"},"onUpdate:value":p[0]||(p[0]=q=>g.$emit("set-filter","adapter",q||null))},null,8,["value","options"]),i(E,{value:n.value,placeholder:["开始日期","结束日期"],style:{width:"280px"},"onUpdate:value":S},null,8,["value"]),l.value?(d(),k(A,{key:0,type:"link",danger:"",onClick:p[1]||(p[1]=q=>g.$emit("reset"))},{icon:v(()=>[i(s(ae))]),default:v(()=>[p[2]||(p[2]=h(" 清空筛选 ",-1))]),_:1})):$("",!0),t.shortQuery?(d(),O("span",Ce,[i(s(Q)),p[3]||(p[3]=h(" 关键词需至少 3 字 (FTS5 trigram 限制) ",-1))])):t.mode==="like"?(d(),O("span",we,[i(s(Q)),p[4]||(p[4]=h(" 当前为 LIKE 兜底模式 ",-1))])):$("",!0)])}}},ke=M(Oe,[["__scopeId","data-v-44891485"]]),$e={__name:"RendererDispatcher",props:{event:{type:Object,required:!0}},setup(t){const e=F(()=>T(()=>import("./ChatBubbleRenderer-DIXrOHbn.js"),__vite__mapDeps([0,1,2,3,4,5]),import.meta.url)),o=F(()=>T(()=>import("./OrderTableRenderer-zQ5jvUZI.js"),__vite__mapDeps([6,1,2,3,4,7]),import.meta.url)),c=F(()=>T(()=>import("./TimelineRenderer-BefCbTxN.js"),__vite__mapDeps([8,1,2,3,4,9]),import.meta.url)),r=F(()=>T(()=>import("./EmailListRenderer-DX7xfm5a.js"),__vite__mapDeps([10,1,2,3,4,11]),import.meta.url)),a=F(()=>T(()=>import("./GenericCardRenderer-REjsnTHA.js"),__vite__mapDeps([12,1,2,3,4,13]),import.meta.url));function n(l){const m=l&&l.source&&l.source.adapter;switch(ye(m)){case"chat":case"ai-chat":return e;case"shopping":return o;case"travel":return c;case"email":return r;default:return a}}return(l,m)=>(d(),k(K(n(t.event)),{event:t.event},null,8,["event"]))}};function Ee(t){return JSON.stringify(t,null,2)}function Le(t){return t.map(e=>JSON.stringify(e)).join(`
3
3
  `)+`
4
4
  `}function Re(t){const o=["id","subtype","occurredAt","occurredAtIso","actor","place","adapter","summary","contentJson","extraJson"].join(","),c=t.map(r=>{const a=Number.isFinite(r.occurredAt)?r.occurredAt:null,n=a?new Date(a).toISOString():"",l=r.source&&r.source.adapter||"",m=r.content&&(r.content.text||r.content.title||r.content.subject)||"";return[r.id||"",r.subtype||"",a!=null?String(a):"",n,r.actor||"",r.place||"",l,m,r.content?JSON.stringify(r.content):"",r.extra?JSON.stringify(r.extra):""].map(xe).join(",")});return[o,...c].join(`
5
5
  `)+`
@@ -1,4 +1,4 @@
1
- import{_ as ue,u as ce,d as J}from"./index-BD2U0Ciz.js";import{R as de,W as pe,f as G,a8 as me}from"./icons-AILO5ZcK.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 B}from"./vendor-DhFY8mDK.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"),W=v(!1);async function q(){W.value=!0;try{O.value==="roles"?await P():O.value==="audit"&&await V()}finally{W.value=!1}}function Q(t){t==="roles"&&S.value.length===0&&P(),t==="audit"&&A.value.length===0&&V()}const z=v(!1),S=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(){z.value=!0;try{const{output:t}=await R.execute("auth roles --json",15e3);S.value=K(t,H)}catch(t){J.error("加载角色列表失败: "+t.message)}finally{z.value=!1}}function H(t){const e=[],o=t.split(`
1
+ import{_ as ue,u as ce,d as J}from"./index-C0wDzrUK.js";import{R as de,W as pe,f as G,a8 as me}from"./icons-AILO5ZcK.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 B}from"./vendor-DhFY8mDK.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"),W=v(!1);async function q(){W.value=!0;try{O.value==="roles"?await P():O.value==="audit"&&await V()}finally{W.value=!1}}function Q(t){t==="roles"&&S.value.length===0&&P(),t==="audit"&&A.value.length===0&&V()}const z=v(!1),S=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(){z.value=!0;try{const{output:t}=await R.execute("auth roles --json",15e3);S.value=K(t,H)}catch(t){J.error("加载角色列表失败: "+t.message)}finally{z.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(!1),A=v([]),E=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 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),E.value=se(e.output)}catch(t){J.error("加载审计日志失败: "+t.message)}finally{$.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:W.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(()=>[z.value?(i(),d("div",ve,[l(p,{size:"large"})])):(i(),b(y,{key:1,columns:Y,"data-source":S.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,B((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,B(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(E.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}),$.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};
@@ -0,0 +1,2 @@
1
+ import{w as ot,L as l,Q as k,N as a,c as o,M as _,R as c,F as oe,Y as ce,Z as nt,P as u,O as n,S as f,a1 as lt,f as pe,r as O,K as v,a as ue,a4 as Kt,o as Wt,u as J,a0 as qt,$ as Vt}from"./vendor-DhFY8mDK.js";import{u as Ne}from"./usePersonalDataHub-DEZ6cY8C.js";import{_ as Re,d as p}from"./index-C0wDzrUK.js";import{R as et,aB as Qt,O as Yt,al as Gt,h as Xt,aC as jt,Q as Jt,aD as Zt,aE as ea,y as ta,q as aa,aF as oa,a3 as na,ad as la,aG as sa,m as ra,e as tt}from"./icons-AILO5ZcK.js";const ia={key:0},ua={class:"vendor-head"},da={class:"hint"},ca={class:"hint",style:{"margin-top":"4px"}},pa={key:0,class:"hint",style:{"margin-top":"4px",color:"#ff4d4f"}},fa={key:1},va={class:"hint"},ma=["href"],ya={class:"howto"},ga=["href"],_a={key:3,style:{"margin-top":"8px"}},ka={key:2,class:"kv",style:{"margin-top":"4px"}},ba={key:3,class:"kv",style:{"margin-top":"4px",color:"#ff4d4f"}},Aa={key:2},wa={__name:"AIChatWizard",props:{open:{type:Boolean,default:!1},existingAccounts:{type:Array,default:()=>[]}},emits:["update:open","registered"],setup(ye,{emit:ke}){const C=ye,M=ke,X=[{vendor:"deepseek",displayName:"DeepSeek",notes:"手机号 + 验证码登录",requiredCookies:["userToken"],cookieMaxAgeHintDays:30},{vendor:"kimi",displayName:"Kimi",notes:"手机号验证码登录",requiredCookies:["access_token"],cookieMaxAgeHintDays:30},{vendor:"tongyi",displayName:"通义千问",notes:"阿里云账号 SSO(过期较快)",requiredCookies:["login_aliyunid"],cookieMaxAgeHintDays:7},{vendor:"zhipu",displayName:"智谱清言",notes:"手机号 + 验证码",requiredCookies:["chatglm_token"],cookieMaxAgeHintDays:30},{vendor:"hunyuan",displayName:"腾讯混元",notes:"QQ / 微信 / 手机号",requiredCookies:["hy_token"],cookieMaxAgeHintDays:14},{vendor:"qianfan",displayName:"百度文心",notes:"百度账号",requiredCookies:["BDUSS"],cookieMaxAgeHintDays:7},{vendor:"coze",displayName:"字节扣子 Coze",notes:"字节统一 passport",requiredCookies:["sessionid"],cookieMaxAgeHintDays:14},{vendor:"dreamina",displayName:"即梦 Dreamina",notes:"字节图像生成",requiredCookies:["sessionid"],cookieMaxAgeHintDays:14},{vendor:"doubao",displayName:"豆包 Doubao",notes:"字节文本 AI",requiredCookies:["sessionid"],cookieMaxAgeHintDays:14}],$=Ne(),g=O(1),A=O(null),T=O(""),x=O(null),B=O(null),Y=O(null),U=ue({open:!1,probe:!1,register:!1}),de=pe(()=>X.find(b=>b.vendor===A.value)||{}),fe=pe(()=>g.value===1?"选择一家 AI 服务商":g.value===2?x.value?.fallbackMode==="paste"?"在外部浏览器登录,把 cookie 粘贴到下面":"在内嵌浏览器登录,主进程自动读取 cookie":"校验并写入本地加密 vault"),Z=pe(()=>{const b=B.value;return b?b.reason==="UNKNOWN_VENDOR"?"未知厂商 — 请刷新页面或重选":b.reason==="PASTE_REQUIRED"?"请先粘贴 cookie 字符串":b.missingRequired?.length?`缺关键 cookie: ${b.missingRequired.join(", ")}`:b.reason||"cookie 校验失败":""}),N=pe(()=>{const b=Y.value;return b?b.reason==="REQUIRED_COOKIES_MISSING"?`缺关键 cookie: ${(b.missingRequired||[]).join(", ")}`:b.reason==="VALIDATE_COOKIE_FAILED"?"厂商拒绝该 cookie(可能已过期或被风控)":b.reason==="ADAPTER_THREW"?`Adapter 抛错: ${b.error||"网络错误"}`:b.reason==="UNKNOWN_VENDOR"?"未知厂商":b.reason||"注册失败":"未知错误"});function y(b){return C.existingAccounts.some(i=>i&&i.vendor===b)}function re(b){return C.existingAccounts.find(i=>i&&i.vendor===b)||null}function q(b){const i=re(b);return i?i.lastHealth?i.lastHealth.ok?"ok":i.lastHealth.reason==="SPEC_VERSION_MISMATCH"?"mismatch":"fail":"unknown":null}function ne(b){const i=re(b);if(!i||!i.lastHealth||i.lastHealth.ok)return"";const z=i.lastHealth.reason;return z?z==="SPEC_VERSION_MISMATCH"?"cookie 规格已升级,请重新登录":z==="ADAPTER_THREW"?"上次校验抛错,建议稍后重试":z==="COOKIE_EXPIRED"?"Cookie 已过期,请重新登录":z:"Cookie 校验失败,建议重新登录"}async function ee(b){try{(await $.unregisterAichat(b))?.ok&&M("registered",{vendor:b,accountId:null,unregistered:!0})}catch(i){Y.value={ok:!1,reason:i?.message||"UNREGISTER_FAILED"}}}function w(b){A.value=b}async function K(){if(A.value){U.open=!0,x.value=null,B.value=null,T.value="";try{if(x.value=await $.openAichatLogin(A.value),!x.value?.ok)return;g.value=2}catch(b){x.value={ok:!1,reason:b?.message||"OPEN_FAILED"}}finally{U.open=!1}}}async function le(){U.probe=!0,B.value=null;try{const b=T.value.trim(),i=b||void 0;B.value=await $.probeAichatCookies(A.value,i)}catch(b){B.value={ok:!1,reason:b?.message||"PROBE_FAILED"}}finally{U.probe=!1}}async function S(){if(B.value?.ok){U.register=!0;try{Y.value=await $.registerAichatVendor(A.value,B.value.cookies),g.value=3,Y.value?.ok&&M("registered",{vendor:A.value,accountId:Y.value.accountId})}catch(b){Y.value={ok:!1,reason:b?.message||"REGISTER_FAILED"},g.value=3}finally{U.register=!1}}}function V(){g.value=1,A.value=null,T.value="",x.value=null,B.value=null,Y.value=null}function ve(){V(),M("update:open",!1)}return ot(()=>C.open,b=>{b&&V()}),(b,i)=>{const z=v("a-alert"),h=v("a-tag"),j=v("a-button"),he=v("a-popconfirm"),be=v("a-card"),Oe=v("a-col"),ge=v("a-row"),H=v("a-collapse-panel"),F=v("a-collapse"),I=v("a-textarea"),d=v("a-form-item"),Pe=v("a-form"),Ae=v("a-result"),$e=v("a-space"),xe=v("a-drawer");return l(),k(xe,{open:ye.open,title:"添加 AI 对话账号",placement:"right",width:640,"destroy-on-close":!0,"onUpdate:open":i[4]||(i[4]=L=>M("update:open",L)),onClose:ve},{footer:a(()=>[o($e,{style:{float:"right"}},{default:a(()=>[g.value>1&&g.value<3?(l(),k(j,{key:0,onClick:i[3]||(i[3]=L=>g.value=g.value-1)},{default:a(()=>[...i[22]||(i[22]=[n("上一步",-1)])]),_:1})):f("",!0),o(j,{onClick:ve},{default:a(()=>[...i[23]||(i[23]=[n("取消",-1)])]),_:1}),g.value===1?(l(),k(j,{key:1,type:"primary",disabled:!A.value,loading:U.open,onClick:K},{default:a(()=>[...i[24]||(i[24]=[n(" 下一步 ",-1)])]),_:1},8,["disabled","loading"])):f("",!0),g.value===2&&x.value?.fallbackMode==="paste"?(l(),k(j,{key:2,loading:U.probe,disabled:!T.value.trim(),onClick:le},{default:a(()=>[...i[25]||(i[25]=[n(" 检测 cookie ",-1)])]),_:1},8,["loading","disabled"])):f("",!0),g.value===2&&x.value?.fallbackMode!=="paste"?(l(),k(j,{key:3,loading:U.probe,onClick:le},{default:a(()=>[...i[26]||(i[26]=[n(" 检测 cookie ",-1)])]),_:1},8,["loading"])):f("",!0),g.value===2?(l(),k(j,{key:4,type:"primary",loading:U.register,disabled:!B.value?.ok,onClick:S},{default:a(()=>[...i[27]||(i[27]=[n(" 注册 ",-1)])]),_:1},8,["loading","disabled"])):f("",!0)]),_:1})]),default:a(()=>[o(z,{message:`第 ${g.value} / 3 步`,description:fe.value,type:"info","show-icon":"",style:{"margin-bottom":"16px"}},null,8,["message","description"]),g.value===1?(l(),_("div",ia,[i[10]||(i[10]=c("p",{class:"hint"}," 选择要接入的 AI 服务商。登录后将本地读取 cookie 同步对话历史;cookie 仅落本机加密文件,不上传任何云端。 ",-1)),o(ge,{gutter:[12,12]},{default:a(()=>[(l(),_(oe,null,ce(X,L=>o(Oe,{xs:24,sm:12,md:8,key:L.vendor},{default:a(()=>[o(be,{size:"small",hoverable:"",class:nt(["vendor-card",{selected:A.value===L.vendor}]),onClick:Ue=>w(L.vendor)},{default:a(()=>[c("div",ua,[c("strong",null,u(L.displayName),1),q(L.vendor)==="fail"?(l(),k(h,{key:0,color:"red"},{default:a(()=>[...i[5]||(i[5]=[n("🔴 重新登录",-1)])]),_:1})):q(L.vendor)==="mismatch"?(l(),k(h,{key:1,color:"orange"},{default:a(()=>[...i[6]||(i[6]=[n("⚠ 规格升级",-1)])]),_:1})):q(L.vendor)==="unknown"?(l(),k(h,{key:2,color:"blue"},{default:a(()=>[...i[7]||(i[7]=[n("已接入·待巡检",-1)])]),_:1})):q(L.vendor)==="ok"?(l(),k(h,{key:3,color:"green"},{default:a(()=>[...i[8]||(i[8]=[n("✓ 已接入",-1)])]),_:1})):f("",!0)]),c("div",da,u(L.notes),1),c("div",ca,[o(h,{color:"default"},{default:a(()=>[n(u(L.requiredCookies.length)+" 必需 cookie",1)]),_:2},1024),o(h,{color:"default"},{default:a(()=>[n("过期约 "+u(L.cookieMaxAgeHintDays)+" 天",1)]),_:2},1024)]),y(L.vendor)&&ne(L.vendor)?(l(),_("div",pa,u(ne(L.vendor)),1)):f("",!0),y(L.vendor)?(l(),_("div",{key:1,class:"vendor-actions",onClick:i[0]||(i[0]=lt(()=>{},["stop"]))},[o(he,{title:"注销该 AI 对话来源?历史事件仍可在 vault 中查询。","ok-text":"注销","cancel-text":"取消",onConfirm:Ue=>ee(L.vendor)},{default:a(()=>[o(j,{size:"small",type:"text",danger:""},{default:a(()=>[...i[9]||(i[9]=[n("注销",-1)])]),_:1})]),_:1},8,["onConfirm"])])):f("",!0)]),_:2},1032,["class","onClick"])]),_:2},1024)),64))]),_:1})])):f("",!0),g.value===2&&x.value?(l(),_("div",fa,[c("p",va,[c("strong",null,u(de.value.displayName),1),i[11]||(i[11]=n(" · ",-1)),c("a",{href:x.value.loginUrl,target:"_blank",rel:"noopener noreferrer"},u(x.value.loginUrl),9,ma)]),x.value.fallbackMode==="paste"?(l(),k(z,{key:0,message:x.value.helpText||"请在外部浏览器登录后从开发者工具复制全部 cookie 字符串粘贴到下方。",type:"warning","show-icon":"",style:{"margin-bottom":"12px"}},null,8,["message"])):(l(),k(z,{key:1,message:"桌面端:请在弹出的内嵌浏览器窗口登录后点击 “检测 cookie”。",type:"info","show-icon":"",style:{"margin-bottom":"12px"}})),x.value.fallbackMode==="paste"?(l(),k(F,{key:2,bordered:!1,style:{"margin-bottom":"12px"}},{default:a(()=>[o(H,{key:"howto",header:"如何获取 cookie 字符串?"},{default:a(()=>[c("ol",ya,[c("li",null,[i[12]||(i[12]=n("用 Chrome / Edge 打开 ",-1)),c("a",{href:x.value.loginUrl,target:"_blank"},u(x.value.loginUrl),9,ga)]),i[13]||(i[13]=c("li",null,"完成登录,进入对话页",-1)),i[14]||(i[14]=c("li",null,[n("按 "),c("kbd",null,"F12"),n(" 打开开发者工具 → "),c("strong",null,"Application"),n(" → "),c("strong",null,"Cookies")],-1)),i[15]||(i[15]=c("li",null,"选中域名 → 全选所有 cookie 行 → 用扩展(如 EditThisCookie)导出 “name=value; …” 串",-1)),i[16]||(i[16]=c("li",null,[n("或在 Console 执行 "),c("code",null,"document.cookie"),n(" 复制结果(注意:HTTP-Only cookie 取不到,仍需 Application 面板)")],-1)),i[17]||(i[17]=c("li",null,"粘贴到下方文本框,点 “检测 cookie”",-1))])]),_:1})]),_:1})):f("",!0),o(Pe,{layout:"vertical"},{default:a(()=>[o(d,{label:"Cookie 字符串"},{default:a(()=>[o(I,{value:T.value,"onUpdate:value":i[1]||(i[1]=L=>T.value=L),rows:6,placeholder:"name1=value1; name2=value2; name3=value3 …",autocomplete:"off"},null,8,["value"])]),_:1})]),_:1}),B.value?(l(),_("div",_a,[B.value.ok?(l(),k(z,{key:0,type:"success","show-icon":"",message:`已识别 ${B.value.foundRequired.length} 个必需 cookie + ${B.value.foundOptional.length} 个可选 cookie`},null,8,["message"])):(l(),k(z,{key:1,type:"error","show-icon":"",message:Z.value},null,8,["message"])),B.value.foundRequired?.length?(l(),_("div",ka," ✓ "+u(B.value.foundRequired.join(", ")),1)):f("",!0),B.value.missingRequired?.length?(l(),_("div",ba," 缺失: "+u(B.value.missingRequired.join(", ")),1)):f("",!0)])):f("",!0)])):f("",!0),g.value===3?(l(),_("div",Aa,[Y.value?.ok?(l(),k(Ae,{key:0,status:"success",title:`${de.value.displayName} 已接入`,"sub-title":`accountId: ${Y.value.accountId} · userId: ${Y.value.validation?.userId||"匿名"}`},{extra:a(()=>[o(j,{type:"primary",onClick:ve},{default:a(()=>[...i[18]||(i[18]=[n("完成",-1)])]),_:1}),o(j,{onClick:V},{default:a(()=>[...i[19]||(i[19]=[n("再加一家",-1)])]),_:1})]),_:1},8,["title","sub-title"])):(l(),k(Ae,{key:1,status:"error",title:"接入失败","sub-title":N.value},{extra:a(()=>[o(j,{type:"primary",onClick:i[2]||(i[2]=L=>g.value=2)},{default:a(()=>[...i[20]||(i[20]=[n("返回粘贴 cookie",-1)])]),_:1}),o(j,{onClick:V},{default:a(()=>[...i[21]||(i[21]=[n("选其他厂商",-1)])]),_:1})]),_:1},8,["sub-title"]))])):f("",!0)]),_:1},8,["open"])}}},Ca=Re(wa,[["__scopeId","data-v-a608230c"]]),Ia={key:0},Da={key:0,class:"probe-result"},Ea={key:0,class:"kv"},Sa={key:0,class:"kv"},ha={key:1},Oa={key:2},Pa={key:2,style:{"margin-top":"12px"}},$a={__name:"WechatWizard",props:{open:{type:Boolean,default:!1}},emits:["update:open","registered"],setup(ye,{emit:ke}){const C=ye,M=ke,X=Ne(),$=O(1),g=O(null),A=ue({uin:"",dbPath:"",wechatDataPath:"",forceProvider:null}),T=O(null),x=ue({probe:!1,register:!1}),B=pe(()=>$.value===1?"探测设备 + WeChat 版本,确认可用的 keyProvider":$.value===2?"填 UIN 与已 adb-pull 的本地路径":"bootstrap 注册 + 持久化 wechat-accounts.json"),Y=pe(()=>{const N=T.value;return N?N.reason==="ENV_UNSUPPORTED"?N.message||"env-probe 拒绝 — 请回到第 1 步看 reasons":N.reason==="MD5_NEEDS_WECHAT_DATA_PATH"?"MD5 路径需要 wechatDataPath":N.reason==="FRIDA_NEEDS_WXID"?"Frida 路径需要 account.uin / wxid":N.reason==="ADAPTER_CTOR_FAILED"?`Adapter ctor 抛错: ${N.message||""}`:N.reason==="BOOTSTRAP_THREW"?`Bootstrap 抛错: ${N.message||""}`:N.reason==="UIN_REQUIRED"?"UIN 不能为空":N.message||N.reason||"注册失败":"未知错误"});async function U(){x.probe=!0;try{g.value=await X.probeWechatEnv()}catch(N){g.value={ok:!1,suggestedKeyProvider:"unsupported",reasons:[N?.message||"probe failed"],device:{reachable:!1},root:{detected:!1,magiskInstalled:!1},frida:{serverRunning:!1,port:null},wechat:{installed:!1,versionName:null,majorVersion:null},warnings:[]}}finally{x.probe=!1}}async function de(){x.register=!0;try{T.value=await X.registerWechat({account:{uin:A.uin},dbPath:A.dbPath||null,wechatDataPath:A.wechatDataPath||null,keyProviderOverride:A.forceProvider}),$.value=3,T.value?.ok&&M("registered",{uin:A.uin,chosenKeyProvider:T.value.chosenKeyProvider})}catch(N){T.value={ok:!1,reason:"BOOTSTRAP_THREW",message:N?.message||"RPC failed"},$.value=3}finally{x.register=!1}}function fe(){$.value=1,g.value=null,A.uin="",A.dbPath="",A.wechatDataPath="",A.forceProvider=null,T.value=null}function Z(){fe(),M("update:open",!1)}return ot(()=>C.open,N=>{N&&fe()}),(N,y)=>{const re=v("a-alert"),q=v("a-button"),ne=v("a-tag"),ee=v("a-descriptions-item"),w=v("a-descriptions"),K=v("a-input"),le=v("a-form-item"),S=v("a-radio"),V=v("a-radio-group"),ve=v("a-form"),b=v("a-result"),i=v("a-space"),z=v("a-drawer");return l(),k(z,{open:ye.open,title:"添加 WeChat 账号",placement:"right",width:640,"destroy-on-close":!0,"onUpdate:open":y[8]||(y[8]=h=>M("update:open",h)),onClose:Z},{footer:a(()=>[o(i,{style:{float:"right"}},{default:a(()=>[$.value>1&&$.value<3?(l(),k(q,{key:0,onClick:y[6]||(y[6]=h=>$.value=$.value-1)},{default:a(()=>[...y[21]||(y[21]=[n("上一步",-1)])]),_:1})):f("",!0),o(q,{onClick:Z},{default:a(()=>[...y[22]||(y[22]=[n("取消",-1)])]),_:1}),$.value===1?(l(),k(q,{key:1,type:"primary",disabled:!g.value||g.value.suggestedKeyProvider==="unsupported",onClick:y[7]||(y[7]=h=>$.value=2)},{default:a(()=>[...y[23]||(y[23]=[n(" 下一步 ",-1)])]),_:1},8,["disabled"])):f("",!0),$.value===2?(l(),k(q,{key:2,type:"primary",loading:x.register,disabled:!A.uin||g.value?.suggestedKeyProvider==="md5"&&!A.wechatDataPath,onClick:de},{default:a(()=>[...y[24]||(y[24]=[n(" 注册 ",-1)])]),_:1},8,["loading","disabled"])):f("",!0)]),_:1})]),default:a(()=>[o(re,{message:`第 ${$.value} / 3 步`,description:B.value,type:"info","show-icon":"",style:{"margin-bottom":"16px"}},null,8,["message","description"]),$.value===1?(l(),_("div",Ia,[y[11]||(y[11]=c("p",{class:"hint"},[n(" 请用 USB 连接 Android 设备(开启 USB 调试)。WeChat ≥ 8.0 需要 root + frida-server。 探测仅读取 "),c("code",null,"adb shell"),n(" 命令输出,不写入任何东西。 ")],-1)),o(q,{type:"primary",loading:x.probe,onClick:U,style:{"margin-bottom":"12px"}},{default:a(()=>[...y[9]||(y[9]=[n(" 🔍 探测环境 ",-1)])]),_:1},8,["loading"]),g.value?(l(),_("div",Da,[o(w,{column:1,size:"small",bordered:""},{default:a(()=>[o(ee,{label:"suggestedKeyProvider"},{default:a(()=>[o(ne,{color:g.value.suggestedKeyProvider==="unsupported"?"red":"green"},{default:a(()=>[n(u(g.value.suggestedKeyProvider),1)]),_:1},8,["color"])]),_:1}),o(ee,{label:"adb 设备"},{default:a(()=>[o(ne,{color:g.value.device.reachable?"green":"red"},{default:a(()=>[n(u(g.value.device.reachable?"已连接":"未连接"),1)]),_:1},8,["color"]),g.value.device.serial?(l(),_("span",Ea,u(g.value.device.serial)+" · abi="+u(g.value.device.abi||"?"),1)):f("",!0)]),_:1}),o(ee,{label:"root"},{default:a(()=>[o(ne,{color:g.value.root.detected?"green":"default"},{default:a(()=>[n(u(g.value.root.detected?"已 root":"未 root"),1)]),_:1},8,["color"]),g.value.root.magiskInstalled?(l(),k(ne,{key:0,color:"blue"},{default:a(()=>[...y[10]||(y[10]=[n("Magisk",-1)])]),_:1})):f("",!0)]),_:1}),o(ee,{label:"frida-server"},{default:a(()=>[o(ne,{color:g.value.frida.serverRunning?"green":"default"},{default:a(()=>[n(u(g.value.frida.serverRunning?"运行中":"未运行"),1)]),_:1},8,["color"]),g.value.frida.port?(l(),_("span",Sa," :"+u(g.value.frida.port),1)):f("",!0)]),_:1}),o(ee,{label:"WeChat"},{default:a(()=>[o(ne,{color:g.value.wechat.installed?"green":"red"},{default:a(()=>[n(u(g.value.wechat.installed?g.value.wechat.versionName:"未安装"),1)]),_:1},8,["color"])]),_:1})]),_:1}),(l(!0),_(oe,null,ce(g.value.reasons||[],h=>(l(),k(re,{key:h,message:h,type:"info","show-icon":"",style:{"margin-top":"8px"}},null,8,["message"]))),128)),(l(!0),_(oe,null,ce(g.value.warnings||[],h=>(l(),k(re,{key:h,message:h,type:"warning","show-icon":"",style:{"margin-top":"8px"}},null,8,["message"]))),128))])):f("",!0)])):f("",!0),$.value===2?(l(),_("div",ha,[y[16]||(y[16]=c("p",{class:"hint"},[n(" 填写从 adb pull 拉下来的本地路径。MD5 路径(7.x)需要 "),c("code",null,"wechatDataPath"),n("; Frida 路径(8.0+)需要设备运行 frida-server。 ")],-1)),o(ve,{layout:"vertical"},{default:a(()=>[o(le,{label:"UIN / wxid",required:""},{default:a(()=>[o(K,{value:A.uin,"onUpdate:value":y[0]||(y[0]=h=>A.uin=h),placeholder:"WeChat 数字 UIN 或 wxid"},null,8,["value"])]),_:1}),o(le,{label:"dbPath(已拉下的 EnMicroMsg.db 本地路径)"},{default:a(()=>[o(K,{value:A.dbPath,"onUpdate:value":y[1]||(y[1]=h=>A.dbPath=h),placeholder:"C:\\\\users\\\\me\\\\pull\\\\EnMicroMsg.db"},null,8,["value"])]),_:1}),o(le,{label:"wechatDataPath(已拉下的 /data/data/com.tencent.mm/ 目录)"},{default:a(()=>[o(K,{value:A.wechatDataPath,"onUpdate:value":y[2]||(y[2]=h=>A.wechatDataPath=h),placeholder:"C:\\\\users\\\\me\\\\pull\\\\com.tencent.mm"},null,8,["value"]),y[12]||(y[12]=c("div",{class:"hint"},"MD5 路径必填;Frida 路径可空",-1))]),_:1}),o(le,{label:"强制 keyProvider(覆盖 env-probe 建议)"},{default:a(()=>[o(V,{value:A.forceProvider,"onUpdate:value":y[3]||(y[3]=h=>A.forceProvider=h)},{default:a(()=>[o(S,{value:null},{default:a(()=>[...y[13]||(y[13]=[n("自动(推荐)",-1)])]),_:1}),o(S,{value:"md5"},{default:a(()=>[...y[14]||(y[14]=[n("md5",-1)])]),_:1}),o(S,{value:"frida"},{default:a(()=>[...y[15]||(y[15]=[n("frida",-1)])]),_:1})]),_:1},8,["value"])]),_:1})]),_:1})])):f("",!0),$.value===3?(l(),_("div",Oa,[T.value?.ok?(l(),k(b,{key:0,status:"success",title:`WeChat 已接入 (uin=${A.uin})`,"sub-title":`provider=${T.value.chosenKeyProvider} · sensitivity=${T.value.sensitivity}`},{extra:a(()=>[o(q,{type:"primary",onClick:Z},{default:a(()=>[...y[17]||(y[17]=[n("完成",-1)])]),_:1}),o(q,{onClick:fe},{default:a(()=>[...y[18]||(y[18]=[n("再加一个",-1)])]),_:1})]),_:1},8,["title","sub-title"])):(l(),k(b,{key:1,status:"error",title:"接入失败","sub-title":Y.value},Kt({_:2},[T.value?.probe?.reasons?.length?{name:"extra",fn:a(()=>[o(q,{onClick:y[4]||(y[4]=h=>$.value=1)},{default:a(()=>[...y[19]||(y[19]=[n("返回检查环境",-1)])]),_:1}),o(q,{onClick:y[5]||(y[5]=h=>$.value=2)},{default:a(()=>[...y[20]||(y[20]=[n("返回修改路径",-1)])]),_:1})]),key:"0"}:void 0]),1032,["sub-title"])),T.value?.probe?.reasons?.length?(l(),_("div",Pa,[(l(!0),_(oe,null,ce(T.value.probe.reasons,h=>(l(),k(re,{key:h,message:h,type:"warning","show-icon":"",style:{"margin-bottom":"4px"}},null,8,["message"]))),128))])):f("",!0)])):f("",!0)]),_:1},8,["open"])}}},xa=Re($a,[["__scopeId","data-v-c7327e24"]]),Ua={class:"pdh-page"},Ma={class:"pdh-header"},Ta={class:"kv"},La={key:0,class:"kv"},Ba={key:1,class:"kv"},Na={class:"kv"},Ra={key:0,class:"kv hint"},Ha={style:{"margin-top":"12px",display:"flex","justify-content":"space-between","align-items":"center"}},Fa={key:0,style:{"margin-top":"12px"}},za={key:1,style:{"margin-top":"12px"}},Ka={class:"answer"},Wa={style:{"margin-top":"8px","font-size":"12px",color:"var(--text-color-secondary, #888)"}},qa={key:2,style:{"margin-top":"8px"}},Va={style:{display:"flex","align-items":"center",gap:"8px"}},Qa={class:"hint",style:{"margin-top":"4px"}},Ya={key:0,style:{"margin-top":"16px"}},Ga={class:"json-pre",style:{"max-height":"300px",overflow:"auto"}},Xa={key:0,style:{"margin-top":"8px"}},ja={style:{"min-width":"220px"}},Ja={style:{color:"#999","font-size":"12px","margin-left":"4px"}},Za={key:2,style:{"margin-top":"12px"}},eo={class:"kv",style:{"margin-bottom":"4px"}},to={key:0,style:{color:"#faad14"}},ao={key:2,class:"kv hint"},oo={key:3,class:"kv hint",style:{color:"#ff4d4f"}},no={key:3,style:{"margin-top":"12px"}},lo={key:2,style:{"margin-top":"8px"}},so={key:1},ro={style:{"margin-left":"8px"}},io={key:3,class:"json-pre"},uo={style:{"margin-left":"6px"}},co={key:0,style:{"margin-left":"6px"}},po={key:0,class:"hint",style:{"margin-top":"4px"}},fo={key:0,style:{"margin-top":"8px"}},vo={style:{"margin-bottom":"12px"}},mo={class:"hint"},yo={class:"kv"},go={class:"kv",style:{"margin-top":"4px"}},_o={class:"kv"},ko={key:0,class:"hint",style:{"margin-top":"4px"}},bo={key:1,style:{"font-size":"11px"}},at="pdh.syncIncludeOptions.v1",Ao={__name:"PersonalDataHub",setup(ye,{expose:ke}){const C=Ne(),M=O(null),X=O(null),$=O([]),g=O(""),A=O(null),T=O(""),x=O(!1),B=O(!1),Y=O([]),U=O(null),de={"system-data-android":{contacts:!0,apps:!0,sms:!0,calls:!0}};function fe(){try{const e=localStorage.getItem(at);if(!e)return JSON.parse(JSON.stringify(de));const t=JSON.parse(e);return{"system-data-android":{...de["system-data-android"],...t["system-data-android"]||{}}}}catch{return JSON.parse(JSON.stringify(de))}}const Z=ue(fe());function N(){try{localStorage.setItem(at,JSON.stringify(Z)),console.log("[PDH-include] persisted:",JSON.stringify(Z))}catch(e){console.warn("[PDH-include] persist failed:",e&&e.message)}}const y=O({}),re={"system-data-android":[{key:"contacts",label:"联系人",hint:"~767 条"},{key:"apps",label:"已安装应用",hint:"~176 个"},{key:"sms",label:"短信内容",hint:"~2400 条 · 高敏感",sensitive:!0},{key:"calls",label:"通话记录",hint:"~18000 条 · 包含号码",sensitive:!0}]};function q(e){return Object.prototype.hasOwnProperty.call(re,e)}function ne(e,t,s){const m=s&&s.target?!!s.target.checked:!!s;console.log("[PDH-include] toggle",e,t,"=>",m),Z[e]||(Z[e]={}),Z[e][t]=m,N()}const ee=O(!1),w=ue({provider:"qq",email:"",authCode:"",host:"",port:993,pdfPasswordHints:{idCardLast6:"",phoneLast6:"",cardLast6:""}}),K=O(null),le=O(!1),S=O(null),V=O(null),ve=[{name:"analysis.spending",label:"消费分析",icon:jt,description:"总支出 / 商家排行 / 月度趋势"},{name:"analysis.relations",label:"人际关系",icon:Jt,description:"与每个人的互动频率 / 主动比例"},{name:"analysis.footprint",label:"足迹",icon:Zt,description:"常去地点 / 出行模式"},{name:"analysis.interests",label:"兴趣画像",icon:ea,description:"从购买 / 浏览 / 收藏抽兴趣"},{name:"analysis.timeline",label:"时间线",icon:ta,description:"跨源事件串成故事"}],b=O(!1),i=O([]),z=ue({queue:{pending:0},mergeGroups:0,reviewQueue:0}),h=O(!1),j=O([]);function he(e){e?.unregistered?p.success(`已注销 ${e.vendor}`):p.success(`已接入 ${e.vendor}`),Q()}const be=O(!1);function Oe(e){p.success(`WeChat 已接入 (uin=${e.uin}, provider=${e.chosenKeyProvider})`),Q()}const ge=O(!1),H=ue({email:"",zipPassword:"",filePath:""}),F=O(null),I=ue({active:!1,adapter:"",phase:"",mailbox:"",current:0,total:0,attempt:1,errorMessage:""}),d=ue({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,bilibiliAdbSync:!1,bilibiliAdbDoctor:!1,douyinAdbSync:!1,weiboAdbSync:!1,xhsAdbSync:!1,toutiaoAdbSync:!1,kuaishouAdbSync:!1,bridgeDoctor:!1}),Pe=O(null);function Ae(e){switch(e){case"BRIDGE_UNAVAILABLE":return"adb 未安装或不在 PATH — 请安装 Android Platform Tools 或设置 ADB_PATH 环境变量";case"MODULE_LOAD_FAILED":return"PDH adapter 模块缺失 — 请重装 cc";case"BILIBILI_NO_ROOT":return"手机未 root — Bilibili 正式版 APK 不是 debuggable,需 Magisk root 才能读 Cookies DB";case"BILIBILI_NOT_INSTALLED_OR_NEVER_LOGGED_IN":return"请在手机上安装 Bilibili App 并登录一次,然后重试";case"BILIBILI_COOKIES_INCOMPLETE":return"Cookie 缺关键字段 — 请在手机 Bilibili App 上重新登录";case"BILIBILI_COOKIES_TRUNCATED":return"ADB 流被截断 — 拔插 USB 重试,或检查 `adb logcat` 是否有 MIUI ROM 干扰";case"BILIBILI_NOT_SQLITE":return"ADB 拉回的文件不是 sqlite — 可能 base64 stream 被 MIUI/HyperOS 干扰,拔插 USB 重试";case"BILIBILI_INVALID_UID":return"Cookie 中 DedeUserID 不是正整数 — 请重新登录";default:return"同步失败 — 详见 message 字段"}}function $e(e){switch(e){case"BRIDGE_UNAVAILABLE":return"adb 未安装或不在 PATH — 请安装 Android Platform Tools 或设置 ADB_PATH 环境变量";case"MODULE_LOAD_FAILED":return"PDH adapter 模块缺失 — 请重装 cc";case"DOUYIN_NO_ROOT":return"手机未 root — 抖音正式版 APK 不是 debuggable,需 Magisk root 才能读 IM 数据库";case"DOUYIN_NOT_INSTALLED":return"请在手机上安装抖音 App,然后重试";case"DOUYIN_NO_IM_DB":return"抖音 App 已装但未生成 IM 数据库 — 请登录抖音并打开任一聊天会话后重试";case"DOUYIN_MULTIPLE_USERS":return"此手机登录了多个抖音账号 — 请加 --uid <19位数字> 选一个";case"DOUYIN_UID_NOT_FOUND":return"指定的 uid 不在设备上的抖音账号列表里";case"DOUYIN_PULL_FAILED":return"ADB 流传输失败 — 拔插 USB 重试,或检查 `adb logcat` 是否有 MIUI ROM 干扰";case"DOUYIN_NOT_SQLITE":return"拉回的文件不是 sqlite — 可能 base64 stream 被 MIUI/HyperOS 干扰,拔插 USB 重试";default:return"同步失败 — 详见 message 字段"}}function xe(e){switch(e){case"BRIDGE_UNAVAILABLE":return"adb 未安装或不在 PATH — 请安装 Android Platform Tools 或设置 ADB_PATH 环境变量";case"MODULE_LOAD_FAILED":return"PDH adapter 模块缺失 — 请重装 cc";case"WEIBO_NO_ROOT":return"手机未 root — 微博正式版 APK 不是 debuggable,需 Magisk root 才能读 Cookies DB";case"WEIBO_NOT_INSTALLED":return"请在手机上安装微博 App 并登录一次,然后重试 (或微博使用了非默认 WebView 数据目录)";case"WEIBO_COOKIES_EMPTY":return"ADB 流返 0 字节 — MIUI/HyperOS silent 失败?拔插 USB 重试";case"WEIBO_COOKIES_TRUNCATED":return"ADB 流被截断 — 拔插 USB 重试,或检查 `adb logcat` 是否有 MIUI ROM 干扰";case"WEIBO_NOT_SQLITE":return"拉回的文件不是 sqlite — 可能 base64 stream 被 MIUI 干扰,拔插 USB 重试";case"WEIBO_BASE64_PARSE":return"base64 解码失败 — adb 终端编码问题,请检查 `chcp 65001`";case"WEIBO_COOKIES_INCOMPLETE":return"SUB cookie 缺失 — 请在手机微博 App 上重新登录";default:return"同步失败 — 详见 message 字段"}}function L(e){switch(e){case"BRIDGE_UNAVAILABLE":return"adb 未安装或不在 PATH — 请安装 Android Platform Tools 或设置 ADB_PATH 环境变量";case"MODULE_LOAD_FAILED":return"PDH adapter 模块缺失 — 请重装 cc";case"XHS_NO_ROOT":return"手机未 root — 小红书正式版 APK 不是 debuggable,需 Magisk root 才能读 Cookies DB";case"XHS_NOT_INSTALLED":return"请在手机上安装小红书 App 并登录一次,然后重试";case"XHS_COOKIES_EMPTY":return"ADB 流返 0 字节 — MIUI/HyperOS silent 失败?拔插 USB 重试";case"XHS_COOKIES_TRUNCATED":return"ADB 流被截断 — 拔插 USB 重试,或检查 `adb logcat` 是否有 MIUI ROM 干扰";case"XHS_NOT_SQLITE":return"拉回的文件不是 sqlite — 可能 base64 stream 被 MIUI 干扰,拔插 USB 重试";case"XHS_BASE64_PARSE":return"base64 解码失败 — adb 终端编码问题,请检查 `chcp 65001`";case"XHS_COOKIES_INCOMPLETE":return"a1 或 web_session cookie 缺失 — 请在手机小红书 App 上重新登录 (X-S 签名需要 a1 字段)";default:return"同步失败 — 详见 message 字段"}}async function Ue(){if(!d.xhsAdbSync){d.xhsAdbSync=!0;try{const e=await C.xhsAdbSync({});if(!e||!e.ok){const D=e&&e.reason||"SYNC_FAILED",E=L(D),R=e&&e.message||"";p.error({content:`Xhs ADB 同步失败:${E}`,description:R,duration:8});return}const t=e.report||{},s=t.xhs||{},m=s.eventCounts||{};s.meFetchFailed?p.warning({content:"Xhs 同步未拉到 user_id — /user/me 返空 data",description:`lastErrorCode=${s.lastErrorCode}, ${s.lastErrorMessage||""}。可能 cookie 已过期或 web_session 缺失,请在手机重新登录。`,duration:10}):s.lastErrorCode===461?p.warning({content:"Xhs X-S 签名被拒 (461) — 部分接口未抓到",description:`命中 ${m.total||0} events。我们的 X-S 算法 best-effort (~60% GET / <30% POST hit),461 在 POST 较常见。稍后重试 (X-S 算法可能 4-8 周 rotate)。`,duration:10}):s.lastErrorCode?p.warning({content:`Xhs 同步部分完成 (${m.total||0} events)`,description:`lastErrorCode=${s.lastErrorCode}, ${s.lastErrorMessage||""}`,duration:8}):p.success(`Xhs 同步成功:notes=${m.note||0} / liked=${m.liked||0} / follow=${m.follow||0} (total=${m.total||0})${s.nickname?" ["+s.nickname+"]":""}`),U.value=t,Q()}catch(e){p.error({content:"Xhs ADB 同步异常",description:e&&e.message?e.message:String(e),duration:8})}finally{d.xhsAdbSync=!1}}}function st(e){switch(e){case"BRIDGE_UNAVAILABLE":return"adb 未安装或不在 PATH — 请安装 Android Platform Tools 或设置 ADB_PATH 环境变量";case"MODULE_LOAD_FAILED":return"PDH adapter 模块缺失 — 请重装 cc";case"TOUTIAO_NO_ROOT":return"手机未 root — 头条正式版 APK 不是 debuggable,需 Magisk root 才能读 Cookies DB";case"TOUTIAO_NOT_INSTALLED":return"请在手机上安装今日头条 App(com.ss.android.article.news,不是极速版)并登录后随便点开一篇文章(让 WebView 写入 cookies),再重试";case"TOUTIAO_COOKIES_EMPTY":return"ADB 流返 0 字节 — MIUI/HyperOS silent 失败?拔插 USB 重试";case"TOUTIAO_COOKIES_TRUNCATED":return"ADB 流被截断 — 拔插 USB 重试,或检查 `adb logcat` 是否有 MIUI ROM 干扰";case"TOUTIAO_NOT_SQLITE":return"拉回的文件不是 sqlite — 可能 base64 stream 被 MIUI 干扰,拔插 USB 重试";case"TOUTIAO_BASE64_PARSE":return"base64 解码失败 — adb 终端编码问题,请检查 `chcp 65001`";case"TOUTIAO_COOKIES_INCOMPLETE":return"sessionid / sessionid_ss cookie 缺失 — 请在手机头条 App 上重新登录";default:return"同步失败 — 详见 message 字段"}}async function rt(){if(!d.toutiaoAdbSync){d.toutiaoAdbSync=!0;try{const e=await C.toutiaoAdbSync({});if(!e||!e.ok){const D=e&&e.reason||"SYNC_FAILED",E=st(D),R=e&&e.message||"";p.error({content:`Toutiao ADB 同步失败:${E}`,description:R,duration:8});return}const t=e.report||{},s=t.toutiao||{},m=s.eventCounts||{};s.profileFetchFailed?p.warning({content:"Toutiao 同步未拉到 user_id — passport/info/v2 返失败",description:`lastErrorCode=${s.lastErrorCode}, ${s.lastErrorMessage||""}。可能 cookie 已过期或 sessionid 缺失,请在手机重新登录。`,duration:10}):s.signProviderUsed==="none"&&m.feed===0&&m.collection===0&&m.search===0?p.warning({content:`Toutiao 同步仅获取了 profile (${m.profile||0} event)`,description:"当前 web-shell 上下文不支持 _signature 签名(仅 desktop app 提供 ToutiaoSignBridge)。打开桌面 app 同步可获取 feed / collection / search。",duration:12}):s.lastErrorCode?p.warning({content:`Toutiao 同步部分完成 (${m.total||0} events)`,description:`lastErrorCode=${s.lastErrorCode}, ${s.lastErrorMessage||""}`,duration:8}):p.success(`Toutiao 同步成功:profile=${m.profile||0} / feed=${m.feed||0} / collection=${m.collection||0} / search=${m.search||0} (total=${m.total||0})${s.nickname?" ["+s.nickname+"]":""}`),U.value=t,Q()}catch(e){p.error({content:"Toutiao ADB 同步异常",description:e&&e.message?e.message:String(e),duration:8})}finally{d.toutiaoAdbSync=!1}}}function it(e){switch(e){case"BRIDGE_UNAVAILABLE":return"adb 未安装或不在 PATH — 请安装 Android Platform Tools 或设置 ADB_PATH 环境变量";case"MODULE_LOAD_FAILED":return"PDH adapter 模块缺失 — 请重装 cc";case"KUAISHOU_NO_ROOT":return"手机未 root — 快手正式版 APK 不是 debuggable,需 Magisk root 才能读 Cookies DB";case"KUAISHOU_NOT_INSTALLED":return"请在手机上安装快手 App(com.smile.gifmaker,不是极速版 com.kuaishou.nebula)并登录后随便看一个视频(让 WebView 写入 cookies),再重试";case"KUAISHOU_COOKIES_EMPTY":return"ADB 流返 0 字节 — MIUI/HyperOS silent 失败?拔插 USB 重试";case"KUAISHOU_COOKIES_TRUNCATED":return"ADB 流被截断 — 拔插 USB 重试,或检查 `adb logcat` 是否有 MIUI ROM 干扰";case"KUAISHOU_NOT_SQLITE":return"拉回的文件不是 sqlite — 可能 base64 stream 被 MIUI 干扰,拔插 USB 重试";case"KUAISHOU_BASE64_PARSE":return"base64 解码失败 — adb 终端编码问题,请检查 `chcp 65001`";case"KUAISHOU_COOKIES_INCOMPLETE":return"userId / kuaishou.web.cp.api_ph cookie 缺失 — 请在手机快手 App 上重新登录";default:return"同步失败 — 详见 message 字段"}}async function ut(){if(!d.kuaishouAdbSync){d.kuaishouAdbSync=!0;try{const e=await C.kuaishouAdbSync({});if(!e||!e.ok){const D=e&&e.reason||"SYNC_FAILED",E=it(D),R=e&&e.message||"";p.error({content:`Kuaishou ADB 同步失败:${E}`,description:R,duration:8});return}const t=e.report||{},s=t.kuaishou||{},m=s.eventCounts||{};s.profileFetchFailed?p.warning({content:"Kuaishou 同步 cookie 缺 api_ph payload",description:`lastErrorCode=${s.lastErrorCode}, ${s.lastErrorMessage||""}。可能 cookie 已过期或登录态不完整(仅有 userId 但没有 api_ph),请在手机重新登录。`,duration:10}):s.signProviderUsed==="none"&&m.watch===0&&m.collect===0&&m.search===0?p.warning({content:`Kuaishou 同步仅获取了 profile (${m.profile||0} event)`,description:"当前 web-shell 上下文不支持 __NS_sig3 签名(仅 desktop app 提供 KuaishouSignBridge)。打开桌面 app 同步可获取 watch / collect / search。",duration:12}):s.lastErrorCode?p.warning({content:`Kuaishou 同步部分完成 (${m.total||0} events)`,description:`lastErrorCode=${s.lastErrorCode}, ${s.lastErrorMessage||""}`,duration:8}):p.success(`Kuaishou 同步成功:profile=${m.profile||0} / watch=${m.watch||0} / collect=${m.collect||0} / search=${m.search||0} (total=${m.total||0})${s.nickname?" ["+s.nickname+"]":""}`),U.value=t,Q()}catch(e){p.error({content:"Kuaishou ADB 同步异常",description:e&&e.message?e.message:String(e),duration:8})}finally{d.kuaishouAdbSync=!1}}}async function dt(){if(!d.bridgeDoctor){d.bridgeDoctor=!0;try{const e=await C.bridgeDoctor();if(!e||!e.ok){const W=e&&e.reason||"BRIDGE_DOCTOR_FAILED",G=e&&e.message||"";W==="MODULE_LOAD_FAILED"?p.error({content:"Bridge doctor 不可用",description:"当前上下文不是 Electron desktop app(cli / web-shell-only 无 sign-bridge 模块)。请从桌面 app 运行此诊断。",duration:10}):p.error({content:`Bridge doctor 失败:${W}`,description:G,duration:8});return}const t=e.results||{},s=["xhs","toutiao","kuaishou"],m=s.filter(W=>t[W]&&t[W].anyCandidatePresent).length,D=s.length,E=[];for(const W of s){const G=t[W];if(!G||!G.ok){E.push(`${W}: ✗ ${G&&G.error?G.error:"unknown error"}`);continue}const we=G.candidates||{},Ce=Object.keys(we).filter(Le=>we[Le]===!0),te=Object.keys(we).length,ie=G.anyCandidatePresent?"✓":"⚠",Te=G.anyCandidatePresent?`${Ce.length}/${te} candidate(s): ${Ce.join(", ")}`:`0/${te} candidates (rotation? 需更新 buildSignScript)`;E.push(`${W}: ${ie} ${Te} (warmUp=${G.warmUpMs}ms, probe=${G.probeMs}ms)`)}(m===D?p.success:m===0?p.error:p.warning)({content:`Bridge doctor: ${m}/${D} 平台签名可用`,description:E.join(`
2
+ `),duration:15}),Pe.value=e}catch(e){p.error({content:"Bridge doctor 异常",description:e&&e.message?e.message:String(e),duration:8})}finally{d.bridgeDoctor=!1}}}async function ct(){if(!d.weiboAdbSync){d.weiboAdbSync=!0;try{const e=await C.weiboAdbSync({});if(!e||!e.ok){const D=e&&e.reason||"SYNC_FAILED",E=xe(D),R=e&&e.message||"";p.error({content:`Weibo ADB 同步失败:${E}`,description:R,duration:8});return}const t=e.report||{},s=t.weibo||{},m=s.eventCounts||{};s.uidFetchFailed?p.warning({content:"Weibo 同步未拉到 UID — /api/config 返 login=false",description:`lastErrorCode=${s.lastErrorCode}, ${s.lastErrorMessage||""}。可能 cookie 已过期 (请在手机重新登录) 或微博触发 anti-bot redirect。事件数 0,未入 vault。`,duration:10}):s.lastErrorCode?p.warning({content:`Weibo 同步部分完成 (${m.total||0} events)`,description:`lastErrorCode=${s.lastErrorCode}, ${s.lastErrorMessage||""} — 部分接口受反爬限制,稍后重试可补齐`,duration:8}):p.success(`Weibo 同步成功:posts=${m.post||0} / fav=${m.favourite||0} / follow=${m.follow||0} (total=${m.total||0})`),U.value=t,Q()}catch(e){p.error({content:"Weibo ADB 同步异常",description:e&&e.message?e.message:String(e),duration:8})}finally{d.weiboAdbSync=!1}}}async function pt(){if(!d.douyinAdbSync){d.douyinAdbSync=!0;try{const e=await C.douyinAdbSync({});if(!e||!e.ok){const E=e&&e.reason||"SYNC_FAILED",R=$e(E),W=e&&e.message||"";p.error({content:`Douyin ADB 同步失败:${R}`,description:W,duration:8});return}const t=e.report||{},s=t.douyin||{},m=s.eventCounts||{},D=s.parserDiagnostic||{};if(!D.hadMsgTable&&!D.hadSimpleUserTable)p.warning({content:"Douyin 同步完成但 0 events",description:"msg 和 SIMPLE_USER 表都未在 IM 数据库中找到 — 抖音 App 版本可能用了不同 schema",duration:10});else if(!D.hadMsgTable||!D.hadSimpleUserTable){const E=[];D.hadMsgTable||E.push("msg (私信)"),D.hadSimpleUserTable||E.push("SIMPLE_USER (联系人)"),p.warning({content:`Douyin 部分同步:msg=${m.message||0} contacts=${m.contact||0}`,description:`${E.join("、")} 表未找到,未入库部分数据`,duration:8})}else p.success(`Douyin 同步成功:messages=${m.message||0} contacts=${m.contact||0} (total=${m.total||0})`);U.value=t,Q()}catch(e){p.error({content:"Douyin ADB 同步异常",description:e&&e.message?e.message:String(e),duration:8})}finally{d.douyinAdbSync=!1}}}async function ft(){if(!d.bilibiliAdbDoctor){d.bilibiliAdbDoctor=!0;try{const e=await C.bilibiliAdbDoctor();if(!e||!e.ok){const s=e&&e.reason||"PROBE_FAILED",m=Ae(s),D=e&&e.message||"";p.error({content:`Bilibili 诊断失败:${m}`,description:D,duration:8});return}const t=e.cookieDiagnostic||{};t.hadEncrypted?p.warning({content:`Bilibili 环境就绪 (uid=${e.uid}) — 但发现 Keystore 加密 cookie`,description:`cookies 数=${t.cookieCount||"?"}; 部分行使用 Android Keystore 加密 (跳过)。可能是较新 Bilibili App + Android 14+。可继续同步,但可能数据不全。`,duration:10}):p.success(`Bilibili 环境就绪 — uid=${e.uid}, 找到 ${t.cookieCount||"?"} 个 cookie,可以同步`)}catch(e){p.error({content:"Bilibili 诊断异常",description:e&&e.message?e.message:String(e),duration:8})}finally{d.bilibiliAdbDoctor=!1}}}async function vt(){if(!d.bilibiliAdbSync){d.bilibiliAdbSync=!0;try{const e=await C.bilibiliAdbSync({});if(!e||!e.ok){const D=e&&e.reason||"SYNC_FAILED",E=Ae(D),R=e&&e.message||"";p.error({content:`Bilibili ADB 同步失败:${E}`,description:R,duration:8});return}const t=e.report||{},s=t.bilibili||{},m=s.eventCounts||{};s.lastErrorCode?p.warning({content:`Bilibili 同步部分完成 (${m.total||0} events)`,description:`lastErrorCode=${s.lastErrorCode}, ${s.lastErrorMessage||""} — 部分接口受反爬限制,稍后重试可补齐`,duration:8}):p.success(`Bilibili 同步成功:history=${m.history||0} / fav=${m.favourite||0} / dyn=${m.dynamic||0} / follow=${m.follow||0} (total=${m.total||0})`),U.value=t,Q()}catch(e){p.error({content:"Bilibili ADB 同步异常",description:e&&e.message?e.message:String(e),duration:8})}finally{d.bilibiliAdbSync=!1}}}const mt=[{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"}],yt=[{title:"时间",key:"at",dataIndex:"at",width:170},{title:"动作",dataIndex:"action",key:"action",width:200},{title:"详情",key:"details"}],gt=[{title:"日期",key:"occurredAt",width:100},{title:"描述",dataIndex:"description",key:"description"},{title:"金额",key:"amount",width:140,align:"right"}];function _t(e){return e==="high"?"red":e==="medium"?"orange":"default"}function kt(e){if(!e)return"";const t=e.entityCounts||{},s=`events=${t.events??0} persons=${t.persons??0} | raw=${e.rawCount??0} invalid=${e.invalidCount??0} | KG triples=${e.kgTripleCount??0} RAG docs=${e.ragDocCount??0} | ${e.durationMs??0}ms`;return e.error?`${s} · 错误: ${e.error}`:s}async function Q(){d.refresh=!0;try{M.value=await C.health(),X.value=await C.stats(),$.value=await C.listAdapters();try{j.value=await C.listAichatAccounts()}catch{}}catch(e){p.error("刷新失败: "+e.message)}finally{d.refresh=!1}}async function He(){if(g.value.trim()){d.ask=!0,T.value="",A.value=null;try{A.value=await C.ask(g.value.trim(),{acceptNonLocal:x.value})}catch(e){T.value=e.message}finally{d.ask=!1}}}async function bt(){d.addMock=!0;try{await C.registerMock({count:30,seed:Date.now()%1e3}),await Q(),p.success("MockAdapter 已注册(30 条 mock 数据 ready 同步)")}catch(e){p.error("注册失败: "+e.message)}finally{d.addMock=!1}}function Fe(e=""){I.active=!0,I.adapter=e,I.phase="starting",I.mailbox="",I.current=0,I.total=0,I.attempt=1,I.errorMessage=""}function ze(e){e&&(e.adapter&&(I.adapter=e.adapter),e.phase&&(I.phase=e.phase),typeof e.current=="number"&&(I.current=e.current),typeof e.total=="number"&&(I.total=e.total),typeof e.attempt=="number"&&(I.attempt=e.attempt),e.mailbox&&(I.mailbox=e.mailbox),e.phase==="error"&&(I.errorMessage=e.message||"sync error"))}async function At(e){d.sync[e]=!0,Fe(e);try{const t=Z[e],s=t?{include:{...t}}:{};typeof C.syncAdapterStream=="function"?U.value=await C.syncAdapterStream(e,s,ze):U.value=await C.syncAdapter(e,s),await Q()}catch(t){p.error(`同步 ${e} 失败: ${t.message}`)}finally{d.sync[e]=!1,I.active=!1}}async function wt(){d.syncAll=!0,Fe("(all)");try{const e=typeof C.syncAllStream=="function"?await C.syncAllStream({},ze):await C.syncAll();U.value=e?.[e.length-1]||null,await Q(),p.success(`已同步 ${e?.length||0} 个 adapter`)}catch(e){p.error("同步失败: "+e.message)}finally{d.syncAll=!1,I.active=!1}}async function Ct(e){try{await C.unregister(e),await Q()}catch(t){p.error("移除失败: "+t.message)}}async function It(e){if(e){d.audit=!0;try{Y.value=await C.recentAudit({limit:200})}catch(t){p.error("审计日志加载失败: "+t.message)}finally{d.audit=!1}}}const Ee=pe(()=>!(!w.email||!w.email.includes("@")||!w.authCode||w.authCode.length<4||w.provider==="custom"&&!w.host));function Dt(e){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"}[e]||"请输入服务商授权码(不是登录密码)"}function Ke(){w.provider="qq",w.email="",w.authCode="",w.host="",w.port=993,w.pdfPasswordHints={idCardLast6:"",phoneLast6:"",cardLast6:""},K.value=null}function We(){const e={provider:w.provider,email:w.email.trim(),authCode:w.authCode};return w.provider==="custom"&&(e.host=w.host.trim(),e.port=w.port||993,e.secure=!0),e}function Et(){const e={};for(const t of Object.keys(w.pdfPasswordHints)){const s=w.pdfPasswordHints[t];typeof s=="string"&&s.trim().length>0&&(e[t]=s.trim())}return Object.keys(e).length>0?e:null}async function St(){if(Ee.value){d.testEmail=!0,K.value=null;try{K.value=await C.testEmailAuth(We())}catch(e){K.value={ok:!1,error:e.message}}finally{d.testEmail=!1}}}async function ht(){if(!(!Ee.value||!K.value?.ok)){d.saveEmail=!0;try{const e={},t=Et();t&&(e.pdfPasswordHints=t),await C.registerEmail(We(),e),p.success("邮箱账号已注册"),ee.value=!1,Ke(),await Q()}catch(e){p.error("保存失败: "+e.message)}finally{d.saveEmail=!1}}}const qe=pe(()=>!(!H.email||!H.email.includes("@")||!H.filePath||H.filePath.length<3));function Ot(){H.email="",H.zipPassword="",H.filePath="",F.value=null}async function Pt(){if(qe.value){d.importAlipay=!0,F.value=null;try{await C.registerAlipay({email:H.email.trim(),zipPassword:H.zipPassword||void 0});const t=/\.zip$/i.test(H.filePath)?{zipPath:H.filePath,zipPassword:H.zipPassword||void 0}:{csvPath:H.filePath};F.value=await C.importAlipayBill(t),F.value?.status==="ok"?(p.success(`导入成功 — ${F.value.entityCounts?.events||0} 笔交易`),await Q()):p.error("导入失败: "+(F.value?.error||F.value?.status))}catch(e){F.value={status:"error",error:e.message},p.error("导入失败: "+e.message)}finally{d.importAlipay=!1}}}async function Ve(e){if(e){d.eventDetail=!0,le.value=!0;try{S.value=await C.eventDetail(e)}catch(t){S.value=null,p.error("事件详情加载失败: "+t.message)}finally{d.eventDetail=!1}}}ke({showEventDetail:Ve});async function $t(e){d.skill=!0,V.value=null;try{V.value=await C.runSkill(e,{})}catch(t){p.error(`${e} 失败: ${t.message}`)}finally{d.skill=!1}}async function Se(){d.reviewQueue=!0;try{i.value=await C.reviewQueueList(50);const e=await C.resolverStats();Object.assign(z,e)}catch(e){p.error("待消歧加载失败: "+e.message)}finally{d.reviewQueue=!1}}async function xt(){b.value=!0,await Se()}async function Me(e,t){try{await C.reviewDecision(e,t),p.success(`已记录决策: ${t}`),await Se()}catch(s){p.error("决策失败: "+s.message)}}async function Ut(){d.resolverDrain=!0;try{const e=await C.resolverDrain(20);p.success(`drain 完成 — same=${e.same} different=${e.different} review=${e.review}`),await Se()}catch(e){p.error("drain 失败: "+e.message)}finally{d.resolverDrain=!1}}async function Mt(){try{const e=await C.resolverStats();Object.assign(z,e)}catch{}}return Wt(()=>{Q(),Mt()}),(e,t)=>{const s=v("a-button"),m=v("a-badge"),D=v("a-space"),E=v("a-tag"),R=v("a-card"),W=v("a-col"),G=v("a-row"),we=v("a-textarea"),Ce=v("a-checkbox"),te=v("a-alert"),ie=v("a-divider"),Te=v("a-spin"),Le=v("a-popover"),Tt=v("a-popconfirm"),Be=v("a-table"),Qe=v("a-empty"),Ye=v("a-progress"),_e=v("a-select-option"),Lt=v("a-select"),se=v("a-form-item"),me=v("a-input"),Ge=v("a-tooltip"),Xe=v("a-input-password"),Bt=v("a-input-number"),je=v("a-form"),Ie=v("a-drawer"),De=v("a-descriptions-item"),Nt=v("a-descriptions"),Rt=v("a-list-item-meta"),Je=v("a-list-item"),Ze=v("a-list"),Ht=v("a-collapse-panel"),Ft=v("a-collapse");return l(),_("div",Ua,[c("div",Ma,[t[30]||(t[30]=c("div",null,[c("h2",{class:"page-title"},"个人数据中台"),c("p",{class:"page-sub"}," 让数据回归个人 — 各 app 数据本地加密落盘,本地 LLM 跨源分析,零云端外传。 ")],-1)),o(D,null,{default:a(()=>[o(s,{loading:d.refresh,onClick:Q},{icon:a(()=>[o(J(et))]),default:a(()=>[t[27]||(t[27]=n(" 刷新 ",-1))]),_:1},8,["loading"]),o(m,{count:z.reviewQueue,offset:[0,0]},{default:a(()=>[o(s,{type:"primary",ghost:"",onClick:xt},{icon:a(()=>[o(J(Qt))]),default:a(()=>[t[28]||(t[28]=n(" 待消歧 ",-1))]),_:1})]),_:1},8,["count"]),o(s,{type:"primary",ghost:"",onClick:t[0]||(t[0]=r=>B.value=!0)},{icon:a(()=>[o(J(Yt))]),default:a(()=>[t[29]||(t[29]=n(" 审计日志 ",-1))]),_:1})]),_:1})]),o(G,{gutter:16,style:{"margin-bottom":"16px"}},{default:a(()=>[o(W,{xs:24,sm:12,md:6},{default:a(()=>[o(R,{size:"small",title:"Vault"},{extra:a(()=>[o(E,{color:M.value?.vault?.ok?"green":"red"},{default:a(()=>[n(u(M.value?.vault?.ok?"正常":"未就绪"),1)]),_:1},8,["color"])]),default:a(()=>[c("div",Ta,"schema v"+u(M.value?.vault?.schemaVersion??"?"),1),X.value?.vault?(l(),_("div",La," 事件 "+u(X.value.vault.events)+" · 联系人 "+u(X.value.vault.persons),1)):f("",!0),X.value?.vault?(l(),_("div",Ba," 地点 "+u(X.value.vault.places)+" · 商品 "+u(X.value.vault.items)+" · 主题 "+u(X.value.vault.topics),1)):f("",!0)]),_:1})]),_:1}),o(W,{xs:24,sm:12,md:6},{default:a(()=>[o(R,{size:"small",title:"本地 LLM"},{extra:a(()=>[o(E,{color:M.value?.llm?.ok?M.value.llm.isLocal?"green":"orange":"red"},{default:a(()=>[n(u(M.value?.llm?.ok?M.value.llm.isLocal?"本地":"非本地":"未就绪"),1)]),_:1},8,["color"])]),default:a(()=>[c("div",Na,u(M.value?.llm?.name||"—"),1),M.value?.llm?.ok&&!M.value.llm.isLocal?(l(),_("div",Ra," ⚠️ 非本地 — ask 会被隐私 gate 拒绝,除非显式 acceptNonLocal ")):f("",!0)]),_:1})]),_:1}),o(W,{xs:24,sm:12,md:6},{default:a(()=>[o(R,{size:"small",title:"KG 索引"},{extra:a(()=>[o(E,{color:M.value?.kgSink?.ok?"green":"default"},{default:a(()=>[n(u(M.value?.kgSink?.ok?"已连接":"不可用"),1)]),_:1},8,["color"])]),default:a(()=>[t[31]||(t[31]=c("div",{class:"kv"},"events / persons → cc knowledge-graph 实体 + 关系",-1))]),_:1})]),_:1}),o(W,{xs:24,sm:12,md:6},{default:a(()=>[o(R,{size:"small",title:"RAG 索引"},{extra:a(()=>[o(E,{color:M.value?.ragSink?.ok?"green":"default"},{default:a(()=>[n(u(M.value?.ragSink?.ok?"已连接":"不可用"),1)]),_:1},8,["color"])]),default:a(()=>[t[32]||(t[32]=c("div",{class:"kv"},"文本 → BM25(vector 留待后续 phase)",-1))]),_:1})]),_:1})]),_:1}),o(R,{style:{"margin-bottom":"16px"}},{title:a(()=>[o(D,null,{default:a(()=>[o(J(Xt)),t[33]||(t[33]=c("span",null,"问我数据",-1))]),_:1})]),default:a(()=>[o(we,{value:g.value,"onUpdate:value":t[1]||(t[1]=r=>g.value=r),rows:2,placeholder:"例:上个月在淘宝总共花了多少?/我妈生日那周买了啥送哪儿?",onKeydown:qt(lt(He,["exact","prevent"]),["enter"])},null,8,["value","onKeydown"]),c("div",Ha,[o(Ce,{checked:x.value,"onUpdate:checked":t[2]||(t[2]=r=>x.value=r)},{default:a(()=>[...t[34]||(t[34]=[n("允许非本地 LLM (volcengine / anthropic 等)",-1)])]),_:1},8,["checked"]),o(s,{type:"primary",loading:d.ask,disabled:!g.value.trim(),onClick:He},{icon:a(()=>[o(J(Gt))]),default:a(()=>[t[35]||(t[35]=n(" 提问 ",-1))]),_:1},8,["loading","disabled"])]),T.value?(l(),_("div",Fa,[o(te,{type:"error","show-icon":"",message:T.value},null,8,["message"])])):f("",!0),A.value?(l(),_("div",za,[A.value.warning==="no-facts"?(l(),k(te,{key:0,type:"warning","show-icon":"",message:"vault 里没找到匹配的事件('no-facts')—— 先同步几个 adapter 让数据进 vault",style:{"margin-bottom":"12px"}})):A.value.warning==="hallucinated-citations"?(l(),k(te,{key:1,type:"warning","show-icon":"",message:`LLM 引用了 ${A.value.hallucinatedCitations?.length||0} 个不存在的 event id —— 模型在编造`,style:{"margin-bottom":"12px"}},null,8,["message"])):f("",!0),c("div",Ka,u(A.value.answer),1),c("div",Wa," 引用 "+u(A.value.citations?.length||0)+" 条事实 · "+u(A.value.facts?.length||0)+" facts 入 prompt · "+u(A.value.durationMs)+"ms · "+u(A.value.model),1),A.value.citations?.length?(l(),_("div",qa,[t[36]||(t[36]=c("span",{style:{"font-size":"12px",color:"var(--text-color-secondary, #888)"}},"事件链接(点击查看明细 / PDF 解密结果):",-1)),o(D,{style:{"margin-top":"4px"},wrap:""},{default:a(()=>[(l(!0),_(oe,null,ce(A.value.citations,r=>(l(),k(E,{key:r,color:"blue",style:{cursor:"pointer"},onClick:P=>Ve(r)},{default:a(()=>[n(u(r),1)]),_:2},1032,["onClick"]))),128))]),_:1})])):f("",!0)])):f("",!0)]),_:1}),o(R,{style:{"margin-bottom":"16px"}},{title:a(()=>[o(D,null,{default:a(()=>[o(J(aa)),t[37]||(t[37]=c("span",null,"分析 skill (Phase 11)",-1))]),_:1})]),extra:a(()=>[o(E,{color:"purple"},{default:a(()=>[...t[38]||(t[38]=[n("5 内置",-1)])]),_:1})]),default:a(()=>[o(G,{gutter:[12,12]},{default:a(()=>[(l(),_(oe,null,ce(ve,r=>o(W,{xs:24,sm:12,md:8,key:r.name},{default:a(()=>[o(R,{size:"small",hoverable:"",onClick:P=>$t(r.name)},{default:a(()=>[c("div",Va,[(l(),k(Vt(r.icon),{style:{"font-size":"18px",color:"#722ed1"}})),c("strong",null,u(r.label),1)]),c("div",Qa,u(r.description),1)]),_:2},1032,["onClick"])]),_:2},1024)),64))]),_:1}),V.value?(l(),_("div",Ya,[o(ie,{plain:"",orientation:"left"},{default:a(()=>[n(u(V.value.skill)+" 结果",1)]),_:1}),o(Te,{spinning:d.skill},{default:a(()=>[c("pre",Ga,u(JSON.stringify(V.value,null,2)),1),V.value.llm_commentary||V.value.llm_narrative?(l(),_("div",Xa,[o(te,{type:"info",message:V.value.llm_commentary||V.value.llm_narrative},null,8,["message"])])):f("",!0)]),_:1},8,["spinning"])])):f("",!0)]),_:1}),o(R,{style:{"margin-bottom":"16px"}},{title:a(()=>[o(D,null,{default:a(()=>[o(J(ra)),t[39]||(t[39]=c("span",null,"Adapters",-1))]),_:1})]),extra:a(()=>[o(D,null,{default:a(()=>[o(s,{onClick:t[3]||(t[3]=r=>ee.value=!0)},{icon:a(()=>[o(J(oa))]),default:a(()=>[t[40]||(t[40]=n(" 添加邮箱账号 ",-1))]),_:1}),o(s,{onClick:t[4]||(t[4]=r=>ge.value=!0)},{icon:a(()=>[o(J(na))]),default:a(()=>[t[41]||(t[41]=n(" 导入支付宝账单 ",-1))]),_:1}),o(s,{onClick:t[5]||(t[5]=r=>h.value=!0)},{icon:a(()=>[o(J(la))]),default:a(()=>[t[42]||(t[42]=n(" 添加 AI 对话账号 ",-1))]),_:1}),o(s,{onClick:t[6]||(t[6]=r=>be.value=!0)},{icon:a(()=>[o(J(sa))]),default:a(()=>[t[43]||(t[43]=n(" 添加 WeChat ",-1))]),_:1}),o(s,{onClick:ft,loading:d.bilibiliAdbDoctor},{default:a(()=>[...t[44]||(t[44]=[n(" 诊断 Bilibili ADB ",-1)])]),_:1},8,["loading"]),o(s,{onClick:vt,loading:d.bilibiliAdbSync},{default:a(()=>[...t[45]||(t[45]=[n(" 通过 PC ADB 同步 Bilibili ",-1)])]),_:1},8,["loading"]),o(s,{onClick:ct,loading:d.weiboAdbSync},{default:a(()=>[...t[46]||(t[46]=[n(" 通过 PC ADB 同步 Weibo ",-1)])]),_:1},8,["loading"]),o(s,{onClick:Ue,loading:d.xhsAdbSync},{default:a(()=>[...t[47]||(t[47]=[n(" 通过 PC ADB 同步 Xhs ",-1)])]),_:1},8,["loading"]),o(s,{onClick:rt,loading:d.toutiaoAdbSync},{default:a(()=>[...t[48]||(t[48]=[n(" 通过 PC ADB 同步 Toutiao ",-1)])]),_:1},8,["loading"]),o(s,{onClick:ut,loading:d.kuaishouAdbSync},{default:a(()=>[...t[49]||(t[49]=[n(" 通过 PC ADB 同步 Kuaishou ",-1)])]),_:1},8,["loading"]),o(s,{onClick:dt,loading:d.bridgeDoctor},{default:a(()=>[...t[50]||(t[50]=[n(" 诊断签名 Bridges ",-1)])]),_:1},8,["loading"]),o(s,{onClick:pt,loading:d.douyinAdbSync},{default:a(()=>[...t[51]||(t[51]=[n(" 通过 PC ADB 同步 Douyin ",-1)])]),_:1},8,["loading"]),o(s,{onClick:bt,loading:d.addMock},{default:a(()=>[...t[52]||(t[52]=[n(" 注册 MockAdapter(开发) ",-1)])]),_:1},8,["loading"]),o(s,{type:"primary",onClick:wt,loading:d.syncAll,disabled:!$.value.length},{default:a(()=>[...t[53]||(t[53]=[n(" 同步全部 ",-1)])]),_:1},8,["loading","disabled"])]),_:1})]),default:a(()=>[$.value.length?(l(),k(Be,{key:0,columns:mt,"data-source":$.value,pagination:!1,"row-key":r=>r.name,size:"middle"},{bodyCell:a(({column:r,record:P})=>[r.key==="sensitivity"?(l(),_(oe,{key:0},[o(E,{color:_t(P.sensitivity)},{default:a(()=>[n(u(P.sensitivity),1)]),_:2},1032,["color"]),P.legalGate?(l(),k(E,{key:0,color:"red",style:{"margin-left":"4px"}},{default:a(()=>[...t[54]||(t[54]=[n("需法律确认",-1)])]),_:1})):f("",!0)],64)):r.key==="capabilities"?(l(!0),_(oe,{key:1},ce(P.capabilities,ae=>(l(),k(E,{key:ae,style:{"margin-right":"4px"}},{default:a(()=>[n(u(ae),1)]),_:2},1024))),128)):r.key==="actions"?(l(),k(D,{key:2},{default:a(()=>[o(s,{size:"small",loading:d.sync[P.name],onClick:ae=>At(P.name)},{default:a(()=>[...t[55]||(t[55]=[n(" 同步 ",-1)])]),_:1},8,["loading","onClick"]),q(P.name)?(l(),k(Le,{key:0,open:y.value[P.name],"onUpdate:open":ae=>y.value[P.name]=ae,trigger:"click",placement:"left",title:`${P.name} 采集范围`},{content:a(()=>[c("div",ja,[(l(!0),_(oe,null,ce(re[P.name],ae=>(l(),_("div",{key:ae.key,style:{margin:"6px 0"}},[o(Ce,{checked:Z[P.name][ae.key]!==!1,onChange:zt=>ne(P.name,ae.key,zt)},{default:a(()=>[n(u(ae.label)+" ",1),c("span",Ja,u(ae.hint),1),ae.sensitive?(l(),k(E,{key:0,color:"orange",size:"small",style:{"margin-left":"4px"}},{default:a(()=>[...t[56]||(t[56]=[n("敏感",-1)])]),_:1})):f("",!0)]),_:2},1032,["checked","onChange"])]))),128)),t[57]||(t[57]=c("div",{style:{"margin-top":"8px","font-size":"11px",color:"#999"}}," 取消勾选的数据本次同步不会拉取入库 ",-1))])]),default:a(()=>[o(s,{size:"small",title:"选择采集范围"},{default:a(()=>[...t[58]||(t[58]=[n("⚙",-1)])]),_:1})]),_:2},1032,["open","onUpdate:open","title"])):f("",!0),o(Tt,{title:`从注册表移除 ${P.name}?(vault 数据不会删除)`,onConfirm:ae=>Ct(P.name)},{default:a(()=>[o(s,{size:"small",danger:""},{default:a(()=>[...t[59]||(t[59]=[n("移除",-1)])]),_:1})]),_:1},8,["title","onConfirm"])]),_:2},1024)):f("",!0)]),_:1},8,["data-source","row-key"])):(l(),k(Qe,{key:1,description:"无已注册 adapter — 点上方按钮注册 MockAdapter 看效果"})),I.active?(l(),_("div",Za,[o(R,{size:"small",bordered:!0},{default:a(()=>[c("div",eo,[t[60]||(t[60]=c("strong",null,"同步进行中",-1)),n(" · "+u(I.adapter)+" · "+u(I.phase||"...")+" ",1),I.attempt&&I.attempt>1?(l(),_("span",to," (重试 #"+u(I.attempt)+") ",1)):f("",!0)]),I.total>0?(l(),k(Ye,{key:0,percent:Math.round(I.current/I.total*100),status:I.errorMessage?"exception":"active",size:"small"},null,8,["percent","status"])):(l(),k(Ye,{key:1,percent:0,status:"active",size:"small"})),I.mailbox?(l(),_("div",ao," 邮箱 "+u(I.mailbox)+" · "+u(I.current)+" / "+u(I.total),1)):f("",!0),I.errorMessage?(l(),_("div",oo,u(I.errorMessage),1)):f("",!0)]),_:1})])):f("",!0),U.value?(l(),_("div",no,[o(te,{type:U.value.status==="ok"?"success":"error","show-icon":"",message:`同步 ${U.value.adapter}: ${U.value.status}`,description:kt(U.value)},null,8,["type","message","description"])])):f("",!0)]),_:1}),o(Ie,{open:ee.value,"onUpdate:open":t[16]||(t[16]=r=>ee.value=r),title:"添加邮箱账号",placement:"right",width:"560","destroy-on-close":!0,onClose:Ke},{footer:a(()=>[o(D,null,{default:a(()=>[o(s,{onClick:t[15]||(t[15]=r=>ee.value=!1)},{default:a(()=>[...t[70]||(t[70]=[n("取消",-1)])]),_:1}),o(s,{loading:d.testEmail,disabled:!Ee.value,onClick:St},{default:a(()=>[...t[71]||(t[71]=[n(" 测试连接 ",-1)])]),_:1},8,["loading","disabled"]),o(s,{type:"primary",loading:d.saveEmail,disabled:!Ee.value||!K.value?.ok,onClick:ht},{default:a(()=>[...t[72]||(t[72]=[n(" 保存并注册 ",-1)])]),_:1},8,["loading","disabled"])]),_:1})]),default:a(()=>[o(te,{message:"数据回归个人 — 凭证落本地加密文件(与 vault 主密钥同目录),同步动作 100% 本地。",type:"info","show-icon":"",style:{"margin-bottom":"16px"}}),o(je,{layout:"vertical",model:w},{default:a(()=>[o(se,{label:"邮箱服务商",required:""},{default:a(()=>[o(Lt,{value:w.provider,"onUpdate:value":t[7]||(t[7]=r=>w.provider=r),placeholder:"选择服务商"},{default:a(()=>[o(_e,{value:"qq"},{default:a(()=>[...t[61]||(t[61]=[n("QQ 邮箱 (imap.qq.com)",-1)])]),_:1}),o(_e,{value:"163"},{default:a(()=>[...t[62]||(t[62]=[n("网易邮箱 163/126",-1)])]),_:1}),o(_e,{value:"189"},{default:a(()=>[...t[63]||(t[63]=[n("189 邮箱",-1)])]),_:1}),o(_e,{value:"outlook"},{default:a(()=>[...t[64]||(t[64]=[n("Outlook / Hotmail",-1)])]),_:1}),o(_e,{value:"gmail"},{default:a(()=>[...t[65]||(t[65]=[n("Gmail",-1)])]),_:1}),o(_e,{value:"custom"},{default:a(()=>[...t[66]||(t[66]=[n("自定义 IMAP",-1)])]),_:1})]),_:1},8,["value"])]),_:1}),o(se,{label:"邮箱地址",required:""},{default:a(()=>[o(me,{value:w.email,"onUpdate:value":t[8]||(t[8]=r=>w.email=r),placeholder:"you@qq.com",autocomplete:"off"},null,8,["value"])]),_:1}),o(se,{required:""},{label:a(()=>[o(D,null,{default:a(()=>[t[67]||(t[67]=c("span",null,"授权码(非登录密码)",-1)),o(Ge,{title:Dt(w.provider)},{default:a(()=>[o(J(tt),{style:{color:"#888"}})]),_:1},8,["title"])]),_:1})]),default:a(()=>[o(Xe,{value:w.authCode,"onUpdate:value":t[9]||(t[9]=r=>w.authCode=r),placeholder:"例:QQ 邮箱 设置 → 账户 → 开启 IMAP/SMTP → 生成的授权码",autocomplete:"off"},null,8,["value"])]),_:1}),w.provider==="custom"?(l(),k(se,{key:0,label:"IMAP host"},{default:a(()=>[o(me,{value:w.host,"onUpdate:value":t[10]||(t[10]=r=>w.host=r),placeholder:"mail.example.com"},null,8,["value"])]),_:1})):f("",!0),w.provider==="custom"?(l(),k(se,{key:1,label:"端口"},{default:a(()=>[o(Bt,{value:w.port,"onUpdate:value":t[11]||(t[11]=r=>w.port=r),min:1,max:65535,"default-value":993},null,8,["value"])]),_:1})):f("",!0),o(ie,{orientation:"left",plain:""},{default:a(()=>[...t[68]||(t[68]=[n("PDF 账单解密提示(可选)",-1)])]),_:1}),t[69]||(t[69]=c("p",{class:"hint"},"银行 PDF 月结大多加密;提供几个常用候选项让 Phase 5.5 自动解锁:",-1)),o(se,{label:"身份证后 6 位"},{default:a(()=>[o(me,{value:w.pdfPasswordHints.idCardLast6,"onUpdate:value":t[12]||(t[12]=r=>w.pdfPasswordHints.idCardLast6=r),placeholder:"123456",autocomplete:"off"},null,8,["value"])]),_:1}),o(se,{label:"手机后 6 位"},{default:a(()=>[o(me,{value:w.pdfPasswordHints.phoneLast6,"onUpdate:value":t[13]||(t[13]=r=>w.pdfPasswordHints.phoneLast6=r),placeholder:"123456",autocomplete:"off"},null,8,["value"])]),_:1}),o(se,{label:"信用卡尾 6 位"},{default:a(()=>[o(me,{value:w.pdfPasswordHints.cardLast6,"onUpdate:value":t[14]||(t[14]=r=>w.pdfPasswordHints.cardLast6=r),placeholder:"123456",autocomplete:"off"},null,8,["value"])]),_:1}),K.value?(l(),_("div",lo,[o(te,{type:K.value.ok?"success":"error","show-icon":"",message:K.value.ok?"凭证有效 — 可以保存":`认证失败: ${K.value.reason||K.value.error}`},null,8,["type","message"])])):f("",!0)]),_:1},8,["model"])]),_:1},8,["open"]),o(Ie,{open:le.value,"onUpdate:open":t[17]||(t[17]=r=>le.value=r),title:S.value?`事件 ${S.value.event.id}`:"加载中...",placement:"right",width:"640","destroy-on-close":!0},{default:a(()=>[S.value?(l(),_(oe,{key:0},[o(Nt,{column:1,size:"small",bordered:""},{default:a(()=>[o(De,{label:"类型"},{default:a(()=>[n(u(S.value.event.subtype),1)]),_:1}),o(De,{label:"发生于"},{default:a(()=>[n(u(new Date(S.value.event.occurredAt).toLocaleString()),1)]),_:1}),o(De,{label:"actor"},{default:a(()=>[n(u(S.value.event.actor),1)]),_:1}),S.value.event.content?.title?(l(),k(De,{key:0,label:"标题"},{default:a(()=>[n(u(S.value.event.content.title),1)]),_:1})):f("",!0),S.value.event.source?.adapter?(l(),k(De,{key:1,label:"来源 adapter"},{default:a(()=>[n(u(S.value.event.source.adapter)+" @ v"+u(S.value.event.source.adapterVersion),1)]),_:1})):f("",!0)]),_:1}),S.value.classification?(l(),k(ie,{key:0,orientation:"left",plain:""},{default:a(()=>[...t[73]||(t[73]=[n("分类",-1)])]),_:1})):f("",!0),S.value.classification?(l(),_("div",so,[o(E,{color:"blue"},{default:a(()=>[n(u(S.value.classification.category),1)]),_:1}),o(E,null,{default:a(()=>[n(u(S.value.classification.layer),1)]),_:1}),c("span",ro,"置信 "+u(Math.round((S.value.classification.confidence||0)*100))+"%",1)])):f("",!0),S.value.extraction?(l(),k(ie,{key:2,orientation:"left",plain:""},{default:a(()=>[n("结构化字段("+u(S.value.extraction.template)+")",1)]),_:1})):f("",!0),S.value.extraction?(l(),_("pre",io,u(JSON.stringify(S.value.extraction.fields,null,2)),1)):f("",!0),S.value.extraction?.pdfExtraction?(l(),k(ie,{key:4,orientation:"left",plain:""},{default:a(()=>[...t[74]||(t[74]=[n("PDF 解密 / 解析",-1)])]),_:1})):f("",!0),S.value.extraction?.pdfExtraction?(l(),k(Ze,{key:5,"data-source":S.value.extraction.pdfExtraction,size:"small"},{renderItem:a(({item:r})=>[o(Je,null,{default:a(()=>[o(Rt,{title:r.filename},{description:a(()=>[c("div",null,[o(E,{color:r.decrypted?"green":"red"},{default:a(()=>[n(u(r.decrypted?"已解密":"解密失败"),1)]),_:2},1032,["color"]),c("span",uo,"尝试 "+u(r.attempted)+" 次",1),r.transactionsExtracted!=null?(l(),_("span",co," · 提取 "+u(r.transactionsExtracted)+" 条交易 ",1)):f("",!0)]),r.error?(l(),_("div",po,u(r.error),1)):f("",!0)]),_:2},1032,["title"])]),_:2},1024)]),_:1},8,["data-source"])):f("",!0),S.value.extraction?.fields?.transactions?.length?(l(),_(oe,{key:6},[o(ie,{orientation:"left",plain:""},{default:a(()=>[...t[75]||(t[75]=[n("交易明细",-1)])]),_:1}),o(Be,{columns:gt,"data-source":S.value.extraction.fields.transactions,pagination:{pageSize:10,size:"small"},"row-key":(r,P)=>P,size:"small"},{bodyCell:a(({column:r,record:P})=>[r.key==="occurredAt"?(l(),_(oe,{key:0},[n(u(new Date(P.occurredAtMs).toLocaleDateString()),1)],64)):r.key==="amount"?(l(),_("span",{key:1,class:nt(P.amount.direction==="in"?"amount-in":"amount-out")},u(P.amount.direction==="in"?"+":"-")+u(P.amount.value.toFixed(2))+" "+u(P.amount.currency),3)):f("",!0)]),_:1},8,["data-source","row-key"])],64)):f("",!0)],64)):(l(),k(Qe,{key:1,description:"无事件数据"}))]),_:1},8,["open","title"]),o(Ie,{open:ge.value,"onUpdate:open":t[22]||(t[22]=r=>ge.value=r),title:"导入支付宝账单",placement:"right",width:"560","destroy-on-close":!0,onClose:Ot},{footer:a(()=>[o(D,null,{default:a(()=>[o(s,{onClick:t[21]||(t[21]=r=>ge.value=!1)},{default:a(()=>[...t[81]||(t[81]=[n("关闭",-1)])]),_:1}),o(s,{type:"primary",loading:d.importAlipay,disabled:!qe.value,onClick:Pt},{default:a(()=>[...t[82]||(t[82]=[n(" 注册账户 + 导入 ",-1)])]),_:1},8,["loading","disabled"])]),_:1})]),default:a(()=>[o(te,{message:"支付宝官方导出 CSV — 服务器侧全量、稳定无风控。3 分钟拿到 12 个月流水。",type:"info","show-icon":"",style:{"margin-bottom":"16px"}}),o(Ft,{bordered:!1,style:{"margin-bottom":"12px"}},{default:a(()=>[o(Ht,{header:"如何导出账单(首次必看)"},{default:a(()=>[...t[76]||(t[76]=[c("ol",{style:{"padding-left":"18px","font-size":"13px"}},[c("li",null,"支付宝 app → 我的 → 账单 → 右上角 ⋯"),c("li",null,'点 "开具交易流水证明"'),c("li",null,"选月份范围(最长 12 个月)"),c("li",null,'用途选 "个人对账"'),c("li",null,"发送到你的绑定邮箱"),c("li",null,[n("从邮箱下载 "),c("code",null,"alipay_record_*.zip")]),c("li",null,"解压密码 = 你的身份证后 6 位")],-1)])]),_:1})]),_:1}),o(je,{layout:"vertical",model:H},{default:a(()=>[o(se,{label:"支付宝绑定邮箱(账户标识)",required:""},{default:a(()=>[o(me,{value:H.email,"onUpdate:value":t[18]||(t[18]=r=>H.email=r),placeholder:"alipay-bound@example.com",autocomplete:"off"},null,8,["value"])]),_:1}),o(se,null,{label:a(()=>[o(D,null,{default:a(()=>[t[77]||(t[77]=c("span",null,"ZIP 密码(身份证后 6 位)",-1)),o(Ge,{title:"支付宝 ZIP 默认密码 = 身份证号后 6 位。也支持自定义密码。"},{default:a(()=>[o(J(tt),{style:{color:"#888"}})]),_:1})]),_:1})]),default:a(()=>[o(Xe,{value:H.zipPassword,"onUpdate:value":t[19]||(t[19]=r=>H.zipPassword=r),placeholder:"例:123456",autocomplete:"off"},null,8,["value"]),t[78]||(t[78]=c("div",{class:"hint",style:{"margin-top":"4px"}}," 空白则解析时再问,或导入的 ZIP 未加密。 ",-1))]),_:1}),o(ie,{orientation:"left",plain:""},{default:a(()=>[...t[79]||(t[79]=[n("选择文件",-1)])]),_:1}),o(se,{label:"ZIP 或 CSV 文件路径"},{default:a(()=>[o(me,{value:H.filePath,"onUpdate:value":t[20]||(t[20]=r=>H.filePath=r),placeholder:"C:\\\\Users\\\\you\\\\Downloads\\\\alipay_record_xxx.zip","allow-clear":""},null,8,["value"]),t[80]||(t[80]=c("div",{class:"hint",style:{"margin-top":"4px"}}," 桌面版可通过 Electron 文件选择器自动填充;web-shell 复制完整路径。 ",-1))]),_:1}),F.value?(l(),_("div",fo,[o(te,{type:F.value.status==="ok"?"success":"error","show-icon":"",message:F.value.status==="ok"?`导入成功 — ${F.value.entityCounts?.events||0} 笔交易`:`导入失败: ${F.value.error||F.value.status}`,description:F.value.status==="ok"?`${F.value.entityCounts?.persons||0} 个交易对方 · ${F.value.kgTripleCount||0} KG triples · ${F.value.durationMs||0}ms`:null},null,8,["type","message","description"])])):f("",!0)]),_:1},8,["model"])]),_:1},8,["open"]),o(Ie,{open:b.value,"onUpdate:open":t[23]||(t[23]=r=>b.value=r),title:"待消歧(EntityResolver 模糊判定)",placement:"right",width:"640","destroy-on-close":!0},{default:a(()=>[i.value.length===0&&!d.reviewQueue?(l(),k(te,{key:0,type:"success","show-icon":"",message:"无待消歧 pair — 所有跨源 Person 已确定。",style:{"margin-bottom":"12px"}})):f("",!0),c("div",vo,[o(D,null,{default:a(()=>[o(s,{loading:d.reviewQueue,onClick:Se},{icon:a(()=>[o(J(et))]),default:a(()=>[t[83]||(t[83]=n(" 刷新 ",-1))]),_:1},8,["loading"]),o(s,{loading:d.resolverDrain,onClick:Ut},{default:a(()=>[...t[84]||(t[84]=[n(" 手动 drain 队列 ",-1)])]),_:1},8,["loading"]),c("span",mo," queue: "+u(z.queue?.pending||0)+" pending · "+u(z.mergeGroups||0)+" groups ",1)]),_:1})]),o(Ze,{"data-source":i.value,pagination:{pageSize:5,size:"small"},size:"small"},{renderItem:a(({item:r})=>[o(Je,null,{default:a(()=>[o(R,{size:"small",style:{width:"100%"}},{default:a(()=>[c("div",yo,[c("strong",null,"Pair #"+u(r.id),1),r.embed_sim?(l(),k(E,{key:0,color:"blue",style:{"margin-left":"8px"}},{default:a(()=>[n(" sim "+u(Number(r.embed_sim).toFixed(2)),1)]),_:2},1024)):f("",!0),r.llm_verdict?(l(),k(E,{key:1,color:r.llm_verdict==="yes"?"green":r.llm_verdict==="no"?"red":"orange",style:{"margin-left":"4px"}},{default:a(()=>[n(" LLM: "+u(r.llm_verdict),1)]),_:2},1032,["color"])):f("",!0)]),c("div",go,"A: "+u(r.a_person_id),1),c("div",_o,"B: "+u(r.b_person_id),1),r.llm_reason?(l(),_("div",ko," LLM 理由: "+u(r.llm_reason),1)):f("",!0),o(D,{style:{"margin-top":"8px"}},{default:a(()=>[o(s,{size:"small",type:"primary",onClick:P=>Me(r.id,"same")},{default:a(()=>[...t[85]||(t[85]=[n("同一人",-1)])]),_:1},8,["onClick"]),o(s,{size:"small",danger:"",onClick:P=>Me(r.id,"different")},{default:a(()=>[...t[86]||(t[86]=[n("不同人",-1)])]),_:1},8,["onClick"]),o(s,{size:"small",onClick:P=>Me(r.id,"skip")},{default:a(()=>[...t[87]||(t[87]=[n("跳过",-1)])]),_:1},8,["onClick"])]),_:2},1024)]),_:2},1024)]),_:2},1024)]),_:1},8,["data-source"])]),_:1},8,["open"]),o(Ie,{open:B.value,"onUpdate:open":t[24]||(t[24]=r=>B.value=r),title:"审计日志(数据 lineage)",placement:"right",width:"600",onAfterOpenChange:It},{default:a(()=>[o(Be,{columns:yt,"data-source":Y.value,pagination:{pageSize:20,size:"small"},"row-key":r=>r.id,size:"small"},{bodyCell:a(({column:r,record:P})=>[r.key==="at"?(l(),_(oe,{key:0},[n(u(new Date(P.at).toLocaleString()),1)],64)):r.key==="details"?(l(),_("code",bo,u(P.details||"—"),1)):f("",!0)]),_:1},8,["data-source","row-key"])]),_:1},8,["open"]),o(Ca,{open:h.value,"onUpdate:open":t[25]||(t[25]=r=>h.value=r),"existing-accounts":j.value,onRegistered:he},null,8,["open","existing-accounts"]),o(xa,{open:be.value,"onUpdate:open":t[26]||(t[26]=r=>be.value=r),onRegistered:Oe},null,8,["open"])])}}},Eo=Re(Ao,[["__scopeId","data-v-08d2e73e"]]);export{Eo as default};
@@ -1 +1 @@
1
- .hint[data-v-a608230c]{font-size:12px;color:var(--text-color-secondary, #888)}.vendor-card[data-v-a608230c]{cursor:pointer;border:1px solid transparent;transition:border-color .15s}.vendor-card.selected[data-v-a608230c]{border-color:#1677ff}.vendor-head[data-v-a608230c]{display:flex;justify-content:space-between;align-items:center;gap:8px;margin-bottom:4px}.vendor-actions[data-v-a608230c]{margin-top:6px;display:flex;justify-content:flex-end}.kv[data-v-a608230c]{font-size:12px}.howto[data-v-a608230c]{margin:0;padding-left:20px;font-size:13px}.howto li[data-v-a608230c]{margin-bottom:4px}kbd[data-v-a608230c]{background:#f0f0f0;border:1px solid #d9d9d9;border-radius:3px;padding:0 4px;font-family:monospace;font-size:12px}.hint[data-v-c7327e24],.kv[data-v-c7327e24]{font-size:12px;color:var(--text-color-secondary, #888)}.probe-result[data-v-c7327e24]{margin-top:8px}code[data-v-c7327e24]{background:#f0f0f0;padding:1px 4px;border-radius:3px;font-family:monospace;font-size:12px}.pdh-page[data-v-3b29f69d]{padding:16px;max-width:1400px;margin:0 auto}.pdh-header[data-v-3b29f69d]{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:24px;gap:16px;flex-wrap:wrap}.page-title[data-v-3b29f69d]{margin:0 0 4px;font-size:22px;font-weight:600}.page-sub[data-v-3b29f69d]{margin:0;color:var(--text-color-secondary, #888);font-size:13px}.kv[data-v-3b29f69d]{font-size:13px;color:var(--text-color, #333);line-height:1.6}.kv.hint[data-v-3b29f69d]{color:#faad14;font-size:12px;margin-top:4px}.answer[data-v-3b29f69d]{white-space:pre-wrap;font-size:14px;line-height:1.7;background:var(--bg-elevated, #fafafa);padding:12px;border-radius:6px;border-left:3px solid #1677ff}.hint[data-v-3b29f69d]{color:var(--text-color-secondary, #888);font-size:12px}.json-pre[data-v-3b29f69d]{font-size:12px;background:var(--bg-elevated, #fafafa);padding:10px;border-radius:4px;max-height:280px;overflow:auto}.amount-in[data-v-3b29f69d]{color:#52c41a;font-weight:600}.amount-out[data-v-3b29f69d]{color:#ff4d4f;font-weight:600}
1
+ .hint[data-v-a608230c]{font-size:12px;color:var(--text-color-secondary, #888)}.vendor-card[data-v-a608230c]{cursor:pointer;border:1px solid transparent;transition:border-color .15s}.vendor-card.selected[data-v-a608230c]{border-color:#1677ff}.vendor-head[data-v-a608230c]{display:flex;justify-content:space-between;align-items:center;gap:8px;margin-bottom:4px}.vendor-actions[data-v-a608230c]{margin-top:6px;display:flex;justify-content:flex-end}.kv[data-v-a608230c]{font-size:12px}.howto[data-v-a608230c]{margin:0;padding-left:20px;font-size:13px}.howto li[data-v-a608230c]{margin-bottom:4px}kbd[data-v-a608230c]{background:#f0f0f0;border:1px solid #d9d9d9;border-radius:3px;padding:0 4px;font-family:monospace;font-size:12px}.hint[data-v-c7327e24],.kv[data-v-c7327e24]{font-size:12px;color:var(--text-color-secondary, #888)}.probe-result[data-v-c7327e24]{margin-top:8px}code[data-v-c7327e24]{background:#f0f0f0;padding:1px 4px;border-radius:3px;font-family:monospace;font-size:12px}.pdh-page[data-v-08d2e73e]{padding:16px;max-width:1400px;margin:0 auto}.pdh-header[data-v-08d2e73e]{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:24px;gap:16px;flex-wrap:wrap}.page-title[data-v-08d2e73e]{margin:0 0 4px;font-size:22px;font-weight:600}.page-sub[data-v-08d2e73e]{margin:0;color:var(--text-color-secondary, #888);font-size:13px}.kv[data-v-08d2e73e]{font-size:13px;color:var(--text-color, #333);line-height:1.6}.kv.hint[data-v-08d2e73e]{color:#faad14;font-size:12px;margin-top:4px}.answer[data-v-08d2e73e]{white-space:pre-wrap;font-size:14px;line-height:1.7;background:var(--bg-elevated, #fafafa);padding:12px;border-radius:6px;border-left:3px solid #1677ff}.hint[data-v-08d2e73e]{color:var(--text-color-secondary, #888);font-size:12px}.json-pre[data-v-08d2e73e]{font-size:12px;background:var(--bg-elevated, #fafafa);padding:10px;border-radius:4px;max-height:280px;overflow:auto}.amount-in[data-v-08d2e73e]{color:#52c41a;font-weight:600}.amount-out[data-v-08d2e73e]{color:#ff4d4f;font-weight:600}
@@ -1 +1 @@
1
- import{_ as Ze,u as He,b as Qe,d as C}from"./index-BD2U0Ciz.js";import{s as Se}from"./community-parser-CO25nZFt.js";import{R as Xe,as as et,z as me,aq as tt,a6 as lt,l as at,Z as ve,W as V,aU as nt,f as it,L as st,d as ot,y as rt}from"./icons-AILO5ZcK.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-DhFY8mDK.js";function W(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=W(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=W(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=W(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=W(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"}},qt={key:0,style:{color:"#ff4d4f","font-size":"11px","margin-top":"4px"}},Gt={key:1,style:{color:"var(--text-secondary)","font-size":"11px","margin-top":"2px"}},Kt={key:0},Vt={__name:"Pipeline",setup(t){const o=He(),{t:n}=Qe(),g=$(!1),_=$(!1),ae=$([]),ne=$([]),ie=$([]),T=$({totalPipelines:0,pipelinesByTemplate:{},pipelinesByStatus:{},totalStages:0,stagesByStatus:{},totalArtifacts:0,totalDeploys:0,deploysByStrategy:{}}),Y=$({noDb:!1,error:""}),se=$("pipelines"),R=$(""),E=$(""),I=$(!1),Z=$(!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 H(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 Q(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 q(){g.value=!0,Y.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:""}))]),G=[e,s,x].map(B=>ke(B.output)).find(B=>B.noDb);G&&(Y.value=G),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 q()}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 q()}catch(x){C.error(n("pipeline.msg.actionFailed")+": "+(x?.message||x))}}function Me(e){A.value=e,Z.value=!0}function ue(){k.template="feature",k.name="",k.configJson=""}return pt(q),(e,s)=>{const d=v("a-button"),x=v("a-space"),G=v("a-alert"),B=v("a-statistic"),P=v("a-card"),D=v("a-col"),ce=v("a-row"),K=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"),qe=v("a-input"),Ge=v("a-textarea"),Ke=v("a-form"),ye=v("a-modal"),J=v("a-descriptions-item"),Ve=v("a-descriptions"),We=v("a-timeline-item"),Ye=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:q},{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})]),Y.value.noDb?(r(),y(G,{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(V),{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(K,{value:""},{default:a(()=>[f(p(e.$t("pipeline.filters.allTemplates")),1)]),_:1}),(r(!0),b(z,null,L(c(le),l=>(r(),y(K,{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(K,{value:""},{default:a(()=>[f(p(e.$t("pipeline.filters.allStatuses")),1)]),_:1}),(r(!0),b(z,null,L(c(Ae),l=>(r(),y(K,{key:l,value:l},{default:a(()=>[f(p(Q(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:H(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(Q(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:H(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(V),{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(Ke,{"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(qe,{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(Ge,{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:Z.value,"onUpdate:open":s[8]||(s[8]=l=>Z.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(Ve,{column:2,size:"small",bordered:""},{default:a(()=>[i(J,{label:e.$t("pipeline.details.template")},{default:a(()=>[i(h,{color:H(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(Q(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(Ye,{mode:"left"},{default:a(()=>[(r(!0),b(z,null,L(A.value.stages,l=>(r(),y(We,{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(V),{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(V)),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",qt,p(e.$t("pipeline.details.errorPrefix"))+" "+p(l.errorMessage),1)):m("",!0),l.startedAt?(r(),b("div",Gt,[f(p(c(j)(l.startedAt))+" ",1),l.completedAt?(r(),b("span",Kt," → "+p(c(j)(l.completedAt)),1)):m("",!0)])):m("",!0)]),_:2},1032,["color"]))),128))]),_:1})])):m("",!0)]),_:1},8,["open","title"])])}}},Qt=Ze(Vt,[["__scopeId","data-v-8e02619c"]]);export{Qt as default};
1
+ import{_ as Ze,u as He,b as Qe,d as C}from"./index-C0wDzrUK.js";import{s as Se}from"./community-parser-CO25nZFt.js";import{R as Xe,as as et,z as me,aq as tt,a6 as lt,l as at,Z as ve,W as V,aU as nt,f as it,L as st,d as ot,y as rt}from"./icons-AILO5ZcK.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-DhFY8mDK.js";function W(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=W(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=W(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=W(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=W(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"}},qt={key:0,style:{color:"#ff4d4f","font-size":"11px","margin-top":"4px"}},Gt={key:1,style:{color:"var(--text-secondary)","font-size":"11px","margin-top":"2px"}},Kt={key:0},Vt={__name:"Pipeline",setup(t){const o=He(),{t:n}=Qe(),g=$(!1),_=$(!1),ae=$([]),ne=$([]),ie=$([]),T=$({totalPipelines:0,pipelinesByTemplate:{},pipelinesByStatus:{},totalStages:0,stagesByStatus:{},totalArtifacts:0,totalDeploys:0,deploysByStrategy:{}}),Y=$({noDb:!1,error:""}),se=$("pipelines"),R=$(""),E=$(""),I=$(!1),Z=$(!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 H(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 Q(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 q(){g.value=!0,Y.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:""}))]),G=[e,s,x].map(B=>ke(B.output)).find(B=>B.noDb);G&&(Y.value=G),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 q()}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 q()}catch(x){C.error(n("pipeline.msg.actionFailed")+": "+(x?.message||x))}}function Me(e){A.value=e,Z.value=!0}function ue(){k.template="feature",k.name="",k.configJson=""}return pt(q),(e,s)=>{const d=v("a-button"),x=v("a-space"),G=v("a-alert"),B=v("a-statistic"),P=v("a-card"),D=v("a-col"),ce=v("a-row"),K=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"),qe=v("a-input"),Ge=v("a-textarea"),Ke=v("a-form"),ye=v("a-modal"),J=v("a-descriptions-item"),Ve=v("a-descriptions"),We=v("a-timeline-item"),Ye=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:q},{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})]),Y.value.noDb?(r(),y(G,{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(V),{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(K,{value:""},{default:a(()=>[f(p(e.$t("pipeline.filters.allTemplates")),1)]),_:1}),(r(!0),b(z,null,L(c(le),l=>(r(),y(K,{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(K,{value:""},{default:a(()=>[f(p(e.$t("pipeline.filters.allStatuses")),1)]),_:1}),(r(!0),b(z,null,L(c(Ae),l=>(r(),y(K,{key:l,value:l},{default:a(()=>[f(p(Q(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:H(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(Q(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:H(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(V),{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(Ke,{"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(qe,{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(Ge,{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:Z.value,"onUpdate:open":s[8]||(s[8]=l=>Z.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(Ve,{column:2,size:"small",bordered:""},{default:a(()=>[i(J,{label:e.$t("pipeline.details.template")},{default:a(()=>[i(h,{color:H(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(Q(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(Ye,{mode:"left"},{default:a(()=>[(r(!0),b(z,null,L(A.value.stages,l=>(r(),y(We,{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(V),{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(V)),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",qt,p(e.$t("pipeline.details.errorPrefix"))+" "+p(l.errorMessage),1)):m("",!0),l.startedAt?(r(),b("div",Gt,[f(p(c(j)(l.startedAt))+" ",1),l.completedAt?(r(),b("span",Kt," → "+p(c(j)(l.completedAt)),1)):m("",!0)])):m("",!0)]),_:2},1032,["color"]))),128))]),_:1})])):m("",!0)]),_:1},8,["open","title"])])}}},Qt=Ze(Vt,[["__scopeId","data-v-8e02619c"]]);export{Qt as default};