chainlesschain 0.166.130 → 0.166.131

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 (466) hide show
  1. package/README.md +20 -4
  2. package/package.json +2 -2
  3. package/src/assets/linux-subreaper/linux-arm64/manifest.json +1 -1
  4. package/src/assets/linux-subreaper/linux-x64/manifest.json +1 -1
  5. package/src/assets/web-panel/.build-hash +1 -1
  6. package/src/assets/web-panel/assets/AIOps-CHItp4vg.js +1 -0
  7. package/src/assets/web-panel/assets/AIOps-Cchx1iXI.css +1 -0
  8. package/src/assets/web-panel/assets/{ActionButton-Dzv1ReHF.js → ActionButton-nhMNWW_d.js} +1 -1
  9. package/src/assets/web-panel/assets/Analytics-DRc81BBI.js +3 -0
  10. package/src/assets/web-panel/assets/Analytics-Dr-1kvaM.css +1 -0
  11. package/src/assets/web-panel/assets/AppLayout-BTBIIl1e.css +1 -0
  12. package/src/assets/web-panel/assets/AppLayout-CVt7HMkp.js +3 -0
  13. package/src/assets/web-panel/assets/Artifacts-BuJgG5jf.js +1 -0
  14. package/src/assets/web-panel/assets/Artifacts-Dohtjyfl.css +1 -0
  15. package/src/assets/web-panel/assets/Audit-DDnViLtj.css +1 -0
  16. package/src/assets/web-panel/assets/Audit-msNg0aH-.js +1 -0
  17. package/src/assets/web-panel/assets/BackgroundAgents-BpcV8yWC.js +1 -0
  18. package/src/assets/web-panel/assets/BackgroundAgents-CH3Uc9sF.css +1 -0
  19. package/src/assets/web-panel/assets/Backup-CYh10zO3.css +1 -0
  20. package/src/assets/web-panel/assets/Backup-P53DADwG.js +1 -0
  21. package/src/assets/web-panel/assets/BaseInput-DFxT2yWN.js +1 -0
  22. package/src/assets/web-panel/assets/Chat-B5JvvQJb.css +1 -0
  23. package/src/assets/web-panel/assets/Chat-BXoHisHW.js +7 -0
  24. package/src/assets/web-panel/assets/ChatBubbleRenderer-CO908iBt.css +1 -0
  25. package/src/assets/web-panel/assets/ChatBubbleRenderer-DMGtSdDx.js +1 -0
  26. package/src/assets/web-panel/assets/{Checkbox-B5uzaLLP.js → Checkbox-B4g_ckJq.js} +1 -1
  27. package/src/assets/web-panel/assets/Codegen-BLP7id2a.css +1 -0
  28. package/src/assets/web-panel/assets/Codegen-C6SSSOfp.js +1 -0
  29. package/src/assets/web-panel/assets/{Col-D3I2kUGu.js → Col-IO1NEUYL.js} +1 -1
  30. package/src/assets/web-panel/assets/Community-C2RejeOY.css +1 -0
  31. package/src/assets/web-panel/assets/Community-CdEBl93F.js +1 -0
  32. package/src/assets/web-panel/assets/{Compact-5GigOmb8.js → Compact-DYs0a9k7.js} +1 -1
  33. package/src/assets/web-panel/assets/Compliance-BPnk7948.js +1 -0
  34. package/src/assets/web-panel/assets/Compliance-DOys4Ov1.css +1 -0
  35. package/src/assets/web-panel/assets/Cowork-DsOst4XK.css +1 -0
  36. package/src/assets/web-panel/assets/Cowork-VLOTGbza.js +6 -0
  37. package/src/assets/web-panel/assets/Cron-_9GgQLJo.js +2 -0
  38. package/src/assets/web-panel/assets/Crosschain-B21yn0qy.js +1 -0
  39. package/src/assets/web-panel/assets/Crosschain-C7Le4Pte.css +1 -0
  40. package/src/assets/web-panel/assets/DID-BX6k3jZi.css +1 -0
  41. package/src/assets/web-panel/assets/DID-mBeDgRZ7.js +2 -0
  42. package/src/assets/web-panel/assets/Dashboard-BckYYzhP.js +3 -0
  43. package/src/assets/web-panel/assets/Dashboard-MFDcsVcM.css +1 -0
  44. package/src/assets/web-panel/assets/Dropdown-DEedqFiE.js +1 -0
  45. package/src/assets/web-panel/assets/EmailListRenderer-CMs0k9TB.js +1 -0
  46. package/src/assets/web-panel/assets/EmailListRenderer-CVJ1j3Ll.css +1 -0
  47. package/src/assets/web-panel/assets/EvolutionSettings-B00Qd0fN.js +1 -0
  48. package/src/assets/web-panel/assets/EvolutionSettings-BnQ91YHJ.css +1 -0
  49. package/src/assets/web-panel/assets/FamilyGuardDashboard-Df-D09Q4.css +1 -0
  50. package/src/assets/web-panel/assets/FamilyGuardDashboard-DxMTAMa8.js +1 -0
  51. package/src/assets/web-panel/assets/Federation-B-UZw0LO.js +1 -0
  52. package/src/assets/web-panel/assets/Federation-CgmfLbx1.css +1 -0
  53. package/src/assets/web-panel/assets/FormItemContext-CkafazEw.js +1 -0
  54. package/src/assets/web-panel/assets/GenericCardRenderer-DEUG25ZJ.js +1 -0
  55. package/src/assets/web-panel/assets/GenericCardRenderer-DtJFcJYl.css +1 -0
  56. package/src/assets/web-panel/assets/Git-D7dr9oz9.js +2 -0
  57. package/src/assets/web-panel/assets/{Git-BdHhxBWR.css → Git-DPuaGtg7.css} +1 -1
  58. package/src/assets/web-panel/assets/Governance-BoipmXaM.css +1 -0
  59. package/src/assets/web-panel/assets/Governance-DKlUJ1wg.js +1 -0
  60. package/src/assets/web-panel/assets/Inference-BJKqplap.js +1 -0
  61. package/src/assets/web-panel/assets/Inference-BWxYJF9-.css +1 -0
  62. package/src/assets/web-panel/assets/KnowledgeGraph-B78fB-bz.js +1 -0
  63. package/src/assets/web-panel/assets/KnowledgeGraph-CztPDA96.css +1 -0
  64. package/src/assets/web-panel/assets/Logs-DJGcHYH_.js +2 -0
  65. package/src/assets/web-panel/assets/Logs-Gf_Mv9Nx.css +1 -0
  66. package/src/assets/web-panel/assets/MarkdownRenderer-BAxj61I3.css +1 -0
  67. package/src/assets/web-panel/assets/MarkdownRenderer-DkcG_MxW.js +1 -0
  68. package/src/assets/web-panel/assets/Marketplace-Djp5q9dS.css +1 -0
  69. package/src/assets/web-panel/assets/Marketplace-ucTbwByD.js +1 -0
  70. package/src/assets/web-panel/assets/McpTools-Cu1xZYYk.js +2 -0
  71. package/src/assets/web-panel/assets/McpTools-DSGHWYS_.css +1 -0
  72. package/src/assets/web-panel/assets/Memory-Bcc2hxOA.css +1 -0
  73. package/src/assets/web-panel/assets/Memory-DCGpXmi-.js +2 -0
  74. package/src/assets/web-panel/assets/MobileBridge-BQ-Uwwg7.css +1 -0
  75. package/src/assets/web-panel/assets/MobileBridge-BnKr0aAS.js +1 -0
  76. package/src/assets/web-panel/assets/MobileProjects-C5UvYJTP.js +1 -0
  77. package/src/assets/web-panel/assets/MobileProjects-Ceaxrqzc.css +1 -0
  78. package/src/assets/web-panel/assets/Mtc-D1UUl4WH.js +6 -0
  79. package/src/assets/web-panel/assets/Mtc-DHwbdUqA.css +1 -0
  80. package/src/assets/web-panel/assets/MtcAudit-B0x8gahq.css +1 -0
  81. package/src/assets/web-panel/assets/MtcAudit-D3aa8XP4.js +19 -0
  82. package/src/assets/web-panel/assets/Multisig-DiXdfJjO.js +7 -0
  83. package/src/assets/web-panel/assets/Multisig-kwPDnXnl.css +1 -0
  84. package/src/assets/web-panel/assets/NLProgramming-CLOvy-35.css +1 -0
  85. package/src/assets/web-panel/assets/NLProgramming-DbWABgSE.js +1 -0
  86. package/src/assets/web-panel/assets/Notes-BP1DPl-R.js +7 -0
  87. package/src/assets/web-panel/assets/Notes-COE2q2gD.css +1 -0
  88. package/src/assets/web-panel/assets/NotificationSettings-Co0e0uEO.css +1 -0
  89. package/src/assets/web-panel/assets/NotificationSettings-xaB6ONe7.js +1 -0
  90. package/src/assets/web-panel/assets/OrderTableRenderer-BnOISpKI.css +1 -0
  91. package/src/assets/web-panel/assets/OrderTableRenderer-D1uNcz3b.js +1 -0
  92. package/src/assets/web-panel/assets/Organization-BM3Lh8Q8.css +1 -0
  93. package/src/assets/web-panel/assets/Organization-DMLDGaf1.js +4 -0
  94. package/src/assets/web-panel/assets/{Overflow-ky9UfGv4.js → Overflow-DH4QPEoI.js} +1 -1
  95. package/src/assets/web-panel/assets/{OverrideContext-C0w0P4A3.js → OverrideContext-DLR1AtLy.js} +1 -1
  96. package/src/assets/web-panel/assets/P2P-Bl4OS10o.js +2 -0
  97. package/src/assets/web-panel/assets/P2P-Cx88UaiD.css +1 -0
  98. package/src/assets/web-panel/assets/PdhVaultBrowser-B9ZGFpn4.css +1 -0
  99. package/src/assets/web-panel/assets/PdhVaultBrowser-D9XSE2YI.js +7 -0
  100. package/src/assets/web-panel/assets/Permissions-CUaPlr6d.js +4 -0
  101. package/src/assets/web-panel/assets/Permissions-Diejgkbs.css +1 -0
  102. package/src/assets/web-panel/assets/PersonalDataHub-Ba92dZk-.js +3 -0
  103. package/src/assets/web-panel/assets/PersonalDataHub-C_xhspRy.css +1 -0
  104. package/src/assets/web-panel/assets/Pipeline-Bh2okm-8.js +1 -0
  105. package/src/assets/web-panel/assets/Pipeline-DxkXqrH2.css +1 -0
  106. package/src/assets/web-panel/assets/Privacy-Bmq3p4gC.js +1 -0
  107. package/src/assets/web-panel/assets/Privacy-CrsfSFKd.css +1 -0
  108. package/src/assets/web-panel/assets/ProjectInit-BPu2fdKR.js +2 -0
  109. package/src/assets/web-panel/assets/ProjectInit-CteEo-wF.css +1 -0
  110. package/src/assets/web-panel/assets/ProjectSettings-D6ABLpmt.js +2 -0
  111. package/src/assets/web-panel/assets/ProjectSettings-pLSae-wy.css +1 -0
  112. package/src/assets/web-panel/assets/Projects-BX-SG9R4.css +1 -0
  113. package/src/assets/web-panel/assets/Projects-qWHEve0z.js +1 -0
  114. package/src/assets/web-panel/assets/Providers-CpAXh_6c.css +1 -0
  115. package/src/assets/web-panel/assets/Providers-D9DI-2hc.js +1 -0
  116. package/src/assets/web-panel/assets/{QrScannerModal-er_HkLCI.js → QrScannerModal-CxifoeD5.js} +1 -1
  117. package/src/assets/web-panel/assets/QrScannerModal-DFrn7rxS.css +1 -0
  118. package/src/assets/web-panel/assets/QuickAsk-DC1BvwR7.js +1 -0
  119. package/src/assets/web-panel/assets/Recommend-CH6wKzGo.css +1 -0
  120. package/src/assets/web-panel/assets/Recommend-CKqbMB5o.js +1 -0
  121. package/src/assets/web-panel/assets/RemoteSession-BGGzPdS5.js +5 -0
  122. package/src/assets/web-panel/assets/Reputation-D6VPNEd0.css +1 -0
  123. package/src/assets/web-panel/assets/Reputation-DH90O9-5.js +1 -0
  124. package/src/assets/web-panel/assets/Row-h7ovueJc.js +1 -0
  125. package/src/assets/web-panel/assets/RssFeed-Cze7YLaG.css +1 -0
  126. package/src/assets/web-panel/assets/RssFeed-DaHxXTZg.js +3 -0
  127. package/src/assets/web-panel/assets/Search-B6RalzTB.css +1 -0
  128. package/src/assets/web-panel/assets/Search-Bn6Nqpn4.js +1 -0
  129. package/src/assets/web-panel/assets/Security-13K57V_v.css +1 -0
  130. package/src/assets/web-panel/assets/Security-ClbBmPJi.js +4 -0
  131. package/src/assets/web-panel/assets/Services-C8Qs6KXv.css +1 -0
  132. package/src/assets/web-panel/assets/Services-ChHLQwRn.js +2 -0
  133. package/src/assets/web-panel/assets/{Skeleton-CrFs6rUL.js → Skeleton-DfN6BFzt.js} +1 -1
  134. package/src/assets/web-panel/assets/Skills-BdjRyorN.css +1 -0
  135. package/src/assets/web-panel/assets/Skills-C926wDev.js +1 -0
  136. package/src/assets/web-panel/assets/Sla-DJzi1l1M.js +1 -0
  137. package/src/assets/web-panel/assets/Sla-K19oOyQc.css +1 -0
  138. package/src/assets/web-panel/assets/SpeechSettings-DYPJTDKz.css +1 -0
  139. package/src/assets/web-panel/assets/SpeechSettings-_GSyVjm_.js +1 -0
  140. package/src/assets/web-panel/assets/SyncSettings-B67xnERe.js +1 -0
  141. package/src/assets/web-panel/assets/SyncSettings-C6cDrwDR.css +1 -0
  142. package/src/assets/web-panel/assets/Tasks-BJjN_YEm.css +1 -0
  143. package/src/assets/web-panel/assets/Tasks-BaYZadcG.js +1 -0
  144. package/src/assets/web-panel/assets/Templates-BsMmCdZI.css +1 -0
  145. package/src/assets/web-panel/assets/Templates-Bu8kN1Xt.js +1 -0
  146. package/src/assets/web-panel/assets/Tenant-BM9qufw1.js +1 -0
  147. package/src/assets/web-panel/assets/Tenant-D3zkSAV0.css +1 -0
  148. package/src/assets/web-panel/assets/Terminal-MEdd5DjB.js +3 -0
  149. package/src/assets/web-panel/assets/Terminal-qPp9MaPu.css +1 -0
  150. package/src/assets/web-panel/assets/TimelineRenderer-C27kL2oU.js +1 -0
  151. package/src/assets/web-panel/assets/TimelineRenderer-DmztdsbF.css +1 -0
  152. package/src/assets/web-panel/assets/Tokens-BBOdNRHQ.css +1 -0
  153. package/src/assets/web-panel/assets/Tokens-Cvjd98VC.js +1 -0
  154. package/src/assets/web-panel/assets/{Trigger-CXrW4Nry.js → Trigger-CLym84HI.js} +1 -1
  155. package/src/assets/web-panel/assets/Trust-Bv2JTaNN.js +1 -0
  156. package/src/assets/web-panel/assets/Trust-DeOo0xAh.css +1 -0
  157. package/src/assets/web-panel/assets/UkeySign-CSCkNbtm.js +1 -0
  158. package/src/assets/web-panel/assets/VideoEditing-BFDXB4xh.js +1 -0
  159. package/src/assets/web-panel/assets/VideoEditing-DksiizfS.css +1 -0
  160. package/src/assets/web-panel/assets/Wallet-CMEFrG_b.js +4 -0
  161. package/src/assets/web-panel/assets/Wallet-Dw8uV4Ug.css +1 -0
  162. package/src/assets/web-panel/assets/WebAuthn-DKx6xPPl.css +1 -0
  163. package/src/assets/web-panel/assets/WebAuthn-x4eO_Q4y.js +5 -0
  164. package/src/assets/web-panel/assets/WorkflowEditor-ClWEPgV1.js +1 -0
  165. package/src/assets/web-panel/assets/WorkflowEditor-IiwsD8Kh.css +1 -0
  166. package/src/assets/web-panel/assets/{_getTag-DnrRH4E6.js → _getTag-BVc6NQ_K.js} +1 -1
  167. package/src/assets/web-panel/assets/{chat-BpJsXlTK.js → chat-BdYOI4gM.js} +1 -1
  168. package/src/assets/web-panel/assets/{collapseMotion-CqM1QOwM.js → collapseMotion-B4IZiILV.js} +1 -1
  169. package/src/assets/web-panel/assets/{colors-CUNg0-fh.js → colors-DcTBrGvS.js} +1 -1
  170. package/src/assets/web-panel/assets/{compact-item-C3tFHnhu.js → compact-item-Dn2ktVuj.js} +1 -1
  171. package/src/assets/web-panel/assets/createContext-XTreuyqp.js +1 -0
  172. package/src/assets/web-panel/assets/{debounce-CFGTTtN3.js → debounce-D9xTw4Sx.js} +1 -1
  173. package/src/assets/web-panel/assets/devWarning-CNIS3FrJ.js +1 -0
  174. package/src/assets/web-panel/assets/echarts-CDp6K7pj.js +19 -0
  175. package/src/assets/web-panel/assets/{hasIn-CU6RIciB.js → hasIn-CFRNsYQd.js} +1 -1
  176. package/src/assets/web-panel/assets/{icons-DG5UD-6K.js → icons-DlxlFL4g.js} +4 -4
  177. package/src/assets/web-panel/assets/index-3RqDry-K.js +71 -0
  178. package/src/assets/web-panel/assets/{index-BPWJw4Ji.js → index-8METW_Wr.js} +1 -1
  179. package/src/assets/web-panel/assets/index-BBd64wj8.js +31 -0
  180. package/src/assets/web-panel/assets/index-BEyVNbNE.js +3 -0
  181. package/src/assets/web-panel/assets/index-BMLpP8QQ.js +1 -0
  182. package/src/assets/web-panel/assets/{index-BzhobTgZ.js → index-BSqydcDa.js} +1 -1
  183. package/src/assets/web-panel/assets/index-BV6LojRv.js +21 -0
  184. package/src/assets/web-panel/assets/index-BbMWvjLZ.js +1 -0
  185. package/src/assets/web-panel/assets/{index-KgR1f2Gq.js → index-Brc0BF-k.js} +2 -2
  186. package/src/assets/web-panel/assets/{index-D4njcYFw.js → index-CG9YLDmI.js} +1 -1
  187. package/src/assets/web-panel/assets/{index-6EwPIfXu.js → index-CNHWMMDX.js} +1 -1
  188. package/src/assets/web-panel/assets/{index-CEIoRm_c.js → index-COuEJdmr.js} +3 -3
  189. package/src/assets/web-panel/assets/{index-BG4zuFf0.js → index-CRW3AWdS.js} +1 -1
  190. package/src/assets/web-panel/assets/{index-BOlAutGy.js → index-CUT4h5JB.js} +2 -2
  191. package/src/assets/web-panel/assets/index-CXMa7Z-S.js +1 -0
  192. package/src/assets/web-panel/assets/index-CbaPXyNc.js +19 -0
  193. package/src/assets/web-panel/assets/{index-Cq93VfoF.css → index-CfX1DEtk.css} +1 -1
  194. package/src/assets/web-panel/assets/{index-X6e0cGRU.js → index-CjHA_Q7s.js} +1 -1
  195. package/src/assets/web-panel/assets/index-CsnYp4qF.js +1 -0
  196. package/src/assets/web-panel/assets/index-D45vulkq.js +12 -0
  197. package/src/assets/web-panel/assets/index-D9kPBEqD.js +55 -0
  198. package/src/assets/web-panel/assets/index-DDTSgpXz.js +1 -0
  199. package/src/assets/web-panel/assets/index-DFl_a0n5.js +1 -0
  200. package/src/assets/web-panel/assets/index-DNdiAymC.js +1 -0
  201. package/src/assets/web-panel/assets/{index-BJjEAoDb.js → index-DQEu7uW0.js} +1 -1
  202. package/src/assets/web-panel/assets/index-DW9XncMy.js +21 -0
  203. package/src/assets/web-panel/assets/index-Daa1yCt_.js +1 -0
  204. package/src/assets/web-panel/assets/index-DdVpoNEQ.js +12 -0
  205. package/src/assets/web-panel/assets/index-Dhi4Oybt.js +1 -0
  206. package/src/assets/web-panel/assets/index-DoVoNjtJ.js +1 -0
  207. package/src/assets/web-panel/assets/{index-111hR8WZ.js → index-Vo7A4aiN.js} +4 -4
  208. package/src/assets/web-panel/assets/{index-lo9rgpyj.js → index-XdlYkgCa.js} +1 -1
  209. package/src/assets/web-panel/assets/{index-1L0tt7G2.js → index-ir2ZwWz5.js} +2 -2
  210. package/src/assets/web-panel/assets/index-kzyCd8a0.js +3 -0
  211. package/src/assets/web-panel/assets/{index-CyyhilXV.js → index-lnTt0Jps.js} +2 -2
  212. package/src/assets/web-panel/assets/{index-CLQjdKmE.js → index-ma-rJkfE.js} +1 -1
  213. package/src/assets/web-panel/assets/index-oE4jTpHK.js +13 -0
  214. package/src/assets/web-panel/assets/{index-K2Uqqkr1.js → index-r5sNECM5.js} +1 -1
  215. package/src/assets/web-panel/assets/index-uT4fRDzU.js +1 -0
  216. package/src/assets/web-panel/assets/index-xlS8pDS2.js +1 -0
  217. package/src/assets/web-panel/assets/{initDefaultProps-FI8D7E2x.js → initDefaultProps-mdL0oeZa.js} +1 -1
  218. package/src/assets/web-panel/assets/{isPlainObject-BWRMT62c.js → isPlainObject-_gz-soRW.js} +1 -1
  219. package/src/assets/web-panel/assets/isSymbol-DAy2hlR5.js +1 -0
  220. package/src/assets/web-panel/assets/motion-ZgVCKcEX.js +11 -0
  221. package/src/assets/web-panel/assets/{move-Vl1vUReW.js → move-A_28O5T2.js} +1 -1
  222. package/src/assets/web-panel/assets/{mtc-parser-6Cu2aFME.js → mtc-parser-0zlMjabo.js} +1 -1
  223. package/src/assets/web-panel/assets/{omit-VRKL8iSO.js → omit-DF7mU3yG.js} +1 -1
  224. package/src/assets/web-panel/assets/{pickAttrs-DZfWsOe0.js → pickAttrs-Cmt8liJP.js} +1 -1
  225. package/src/assets/web-panel/assets/{placementArrow-qmcOUc4W.js → placementArrow-DaMDC57b.js} +1 -1
  226. package/src/assets/web-panel/assets/{responsiveObserve-BLB6SsSw.js → responsiveObserve-CHw_f2d3.js} +1 -1
  227. package/src/assets/web-panel/assets/{slide-41jdYeSH.js → slide-DJS9fFQq.js} +1 -1
  228. package/src/assets/web-panel/assets/{statusUtils-Yn8OQ5ey.js → statusUtils-Bk3XdZwh.js} +1 -1
  229. package/src/assets/web-panel/assets/{styleChecker-4CEwz9Zd.js → styleChecker-DMybAFsA.js} +1 -1
  230. package/src/assets/web-panel/assets/useFlexGapSupport-_tbIIFMu.js +1 -0
  231. package/src/assets/web-panel/assets/{useFs-Bugo8HuF.js → useFs-KPklVptS.js} +1 -1
  232. package/src/assets/web-panel/assets/{useMergedState-DXbJa_zE.js → useMergedState-d-EXs3xd.js} +1 -1
  233. package/src/assets/web-panel/assets/{usePersonalDataHub-B-q2ElB0.js → usePersonalDataHub-C7FrKDhD.js} +1 -1
  234. package/src/assets/web-panel/assets/{useRefs-BrCfMLMc.js → useRefs-DHeCQehi.js} +1 -1
  235. package/src/assets/web-panel/assets/{useState-CnxtbLoC.js → useState-Dlgl7fUg.js} +1 -1
  236. package/src/assets/web-panel/assets/vendor-BXcBOG8b.js +1 -0
  237. package/src/assets/web-panel/assets/vnode-DB3JBusp.js +1 -0
  238. package/src/assets/web-panel/assets/warning-Pq00owYb.js +1 -0
  239. package/src/assets/web-panel/assets/{zoom-DM1y_KKP.js → zoom-C8rAdf81.js} +1 -1
  240. package/src/assets/web-panel/index.html +4 -4
  241. package/src/command-help-index.json +1 -1
  242. package/src/commands/agent.js +1 -1
  243. package/src/commands/governed-skill-marketplace.js +24 -10
  244. package/src/commands/llm.js +4 -3
  245. package/src/data/changelog.json +14 -1
  246. package/src/harness/worktree-isolator.js +4 -1
  247. package/src/lib/compaction-host-provenance.js +24 -0
  248. package/src/lib/context-memory-kernel/durable-memory-port.js +46 -34
  249. package/src/lib/context-memory-kernel/live-compaction.js +12 -3
  250. package/src/lib/context-memory-kernel/memory-query-bundle.js +375 -0
  251. package/src/lib/context-memory-kernel/memory-query-control.js +28 -0
  252. package/src/lib/context-memory-kernel/memory-service.js +30 -16
  253. package/src/lib/context-memory-kernel/memory-shard-snapshots.js +63 -0
  254. package/src/lib/context-memory-kernel/provider-context.js +55 -24
  255. package/src/lib/context-memory-kernel/segmented-memory-port.js +347 -138
  256. package/src/lib/cost-budget.js +2 -0
  257. package/src/lib/ephemeral-worktree-scope.js +24 -0
  258. package/src/lib/evolution/evolution-deployment-loader.js +6 -4
  259. package/src/lib/evolution/governed-skill-marketplace-abort.js +14 -0
  260. package/src/lib/evolution/governed-skill-marketplace-candidate.js +10 -2
  261. package/src/lib/evolution/governed-skill-marketplace-cli-host.js +47 -20
  262. package/src/lib/evolution/governed-skill-marketplace.js +47 -24
  263. package/src/lib/goal-condition-engine.js +20 -3
  264. package/src/lib/goal-verification-command.js +221 -0
  265. package/src/lib/goal-verification-plan.js +372 -0
  266. package/src/lib/llm-connection-probe.js +12 -5
  267. package/src/lib/llm-onboarding-catalog.json +1 -1
  268. package/src/lib/llm-pricing.js +34 -8
  269. package/src/lib/mcp-tool-catalog-authority.js +244 -0
  270. package/src/lib/model-capabilities.js +6 -0
  271. package/src/lib/model-catalog-review.js +3 -0
  272. package/src/lib/model-context-catalog.js +44 -2
  273. package/src/lib/openai-responses.js +35 -6
  274. package/src/lib/sub-agent-context.js +12 -4
  275. package/src/lib/subagent-inheritance.js +162 -2
  276. package/src/lib/usage-pricing-context.js +34 -17
  277. package/src/repl/agent-repl.js +34 -2
  278. package/src/runtime/agent-core.js +199 -9
  279. package/src/runtime/compaction-host-context.js +72 -0
  280. package/src/runtime/headless-runner.js +133 -37
  281. package/src/runtime/headless-stream.js +38 -21
  282. package/src/runtime/mcp-agent-catalog.js +257 -0
  283. package/src/runtime/mcp-config.js +18 -69
  284. package/src/runtime/mcp-tool-search.js +16 -1
  285. package/src/runtime/system-prompt.js +9 -0
  286. package/src/assets/web-panel/assets/AIOps-CSpp7iGY.css +0 -1
  287. package/src/assets/web-panel/assets/AIOps-o-rFKEYL.js +0 -1
  288. package/src/assets/web-panel/assets/Analytics-Bt7H_jrh.js +0 -3
  289. package/src/assets/web-panel/assets/Analytics-DJcHjy5J.css +0 -1
  290. package/src/assets/web-panel/assets/AppLayout-CgynsRFP.js +0 -9
  291. package/src/assets/web-panel/assets/AppLayout-VlanTjPw.css +0 -1
  292. package/src/assets/web-panel/assets/Artifacts-CTVt96zW.css +0 -1
  293. package/src/assets/web-panel/assets/Artifacts-gghOGDyE.js +0 -1
  294. package/src/assets/web-panel/assets/Audit-D8oxP0wr.css +0 -1
  295. package/src/assets/web-panel/assets/Audit-DBXn-AZ6.js +0 -1
  296. package/src/assets/web-panel/assets/BackgroundAgents--dxPftKa.js +0 -1
  297. package/src/assets/web-panel/assets/BackgroundAgents-Dq2340Kl.css +0 -1
  298. package/src/assets/web-panel/assets/Backup-D9Zf_2tH.js +0 -1
  299. package/src/assets/web-panel/assets/Backup-Wi9CaP3d.css +0 -1
  300. package/src/assets/web-panel/assets/BaseInput-DDTOjovq.js +0 -1
  301. package/src/assets/web-panel/assets/Chat-2ETqdBLn.js +0 -8
  302. package/src/assets/web-panel/assets/Chat-KSGPtU0L.css +0 -1
  303. package/src/assets/web-panel/assets/ChatBubbleRenderer-DSg2Xs8G.js +0 -1
  304. package/src/assets/web-panel/assets/ChatBubbleRenderer-gy5SDGw2.css +0 -1
  305. package/src/assets/web-panel/assets/Codegen-4ieEEIwt.js +0 -1
  306. package/src/assets/web-panel/assets/Codegen-BB08p1fn.css +0 -1
  307. package/src/assets/web-panel/assets/Community-Cbq1nrpo.css +0 -1
  308. package/src/assets/web-panel/assets/Community-DeYxFMJb.js +0 -1
  309. package/src/assets/web-panel/assets/Compliance-DLVjbVUh.js +0 -1
  310. package/src/assets/web-panel/assets/Compliance-NoXr2Vof.css +0 -1
  311. package/src/assets/web-panel/assets/Cowork-BlXJRu6L.css +0 -1
  312. package/src/assets/web-panel/assets/Cowork-DfUKa0T5.js +0 -6
  313. package/src/assets/web-panel/assets/Cron-_RpktpO5.js +0 -2
  314. package/src/assets/web-panel/assets/Crosschain-7x6xdbwH.js +0 -1
  315. package/src/assets/web-panel/assets/Crosschain-CgRAecoR.css +0 -1
  316. package/src/assets/web-panel/assets/DID-DVsYcgvs.css +0 -1
  317. package/src/assets/web-panel/assets/DID-ccVhToC1.js +0 -2
  318. package/src/assets/web-panel/assets/Dashboard-CAPSdFR4.css +0 -1
  319. package/src/assets/web-panel/assets/Dashboard-DhygcaoK.js +0 -3
  320. package/src/assets/web-panel/assets/Dropdown-DFplwXK7.js +0 -1
  321. package/src/assets/web-panel/assets/EmailListRenderer-Bm01soCN.js +0 -1
  322. package/src/assets/web-panel/assets/EmailListRenderer-DTPZPx_S.css +0 -1
  323. package/src/assets/web-panel/assets/EvolutionSettings-Bdw8ApoT.css +0 -1
  324. package/src/assets/web-panel/assets/EvolutionSettings-C4v--DkD.js +0 -1
  325. package/src/assets/web-panel/assets/FamilyGuardDashboard-ChQXDBA3.js +0 -1
  326. package/src/assets/web-panel/assets/FamilyGuardDashboard-nd3idUVb.css +0 -1
  327. package/src/assets/web-panel/assets/Federation-C0yomE-M.js +0 -1
  328. package/src/assets/web-panel/assets/Federation-fGN6iMX_.css +0 -1
  329. package/src/assets/web-panel/assets/FormItemContext-DtT3ZEZK.js +0 -2
  330. package/src/assets/web-panel/assets/GenericCardRenderer-DgITtFRv.js +0 -1
  331. package/src/assets/web-panel/assets/GenericCardRenderer-o85VDYQS.css +0 -1
  332. package/src/assets/web-panel/assets/Git-CCY42R8S.js +0 -2
  333. package/src/assets/web-panel/assets/Governance-DtCS4NDm.css +0 -1
  334. package/src/assets/web-panel/assets/Governance-N66Bwvqg.js +0 -1
  335. package/src/assets/web-panel/assets/Inference-BkbPuR_2.js +0 -1
  336. package/src/assets/web-panel/assets/Inference-t-w0NgIS.css +0 -1
  337. package/src/assets/web-panel/assets/KnowledgeGraph-4NU1S2Xm.css +0 -1
  338. package/src/assets/web-panel/assets/KnowledgeGraph-B3PibXdA.js +0 -1
  339. package/src/assets/web-panel/assets/Logs-CUtNB_N6.js +0 -2
  340. package/src/assets/web-panel/assets/Logs-DQbCaYhL.css +0 -1
  341. package/src/assets/web-panel/assets/MarkdownRenderer-D-V4dOe3.js +0 -1
  342. package/src/assets/web-panel/assets/MarkdownRenderer-DbzhFwvz.css +0 -1
  343. package/src/assets/web-panel/assets/Marketplace-Bvo5cuGa.css +0 -1
  344. package/src/assets/web-panel/assets/Marketplace-DLNJb6Nr.js +0 -1
  345. package/src/assets/web-panel/assets/McpTools-2zGjJb5K.js +0 -4
  346. package/src/assets/web-panel/assets/McpTools-534Q95Mx.css +0 -1
  347. package/src/assets/web-panel/assets/Memory-9rNZ1EvR.js +0 -2
  348. package/src/assets/web-panel/assets/Memory-CleW_R6V.css +0 -1
  349. package/src/assets/web-panel/assets/MobileBridge-Cw7sAAgn.js +0 -1
  350. package/src/assets/web-panel/assets/MobileBridge-D3Arxfeg.css +0 -1
  351. package/src/assets/web-panel/assets/MobileProjects-8XACrqqy.js +0 -1
  352. package/src/assets/web-panel/assets/MobileProjects-BD4alw6-.css +0 -1
  353. package/src/assets/web-panel/assets/Mtc-CXZGO9Sh.css +0 -1
  354. package/src/assets/web-panel/assets/Mtc-mg02JNy-.js +0 -6
  355. package/src/assets/web-panel/assets/MtcAudit-B1Vkhj2l.js +0 -19
  356. package/src/assets/web-panel/assets/MtcAudit-C1JM8esp.css +0 -1
  357. package/src/assets/web-panel/assets/Multisig-BQEeA7GG.js +0 -13
  358. package/src/assets/web-panel/assets/Multisig-BryR2Jpr.css +0 -1
  359. package/src/assets/web-panel/assets/NLProgramming-BIbkjZV3.js +0 -1
  360. package/src/assets/web-panel/assets/NLProgramming-DGDHq6Z9.css +0 -1
  361. package/src/assets/web-panel/assets/Notes-BKKmMtqV.css +0 -1
  362. package/src/assets/web-panel/assets/Notes-DIwhkZNY.js +0 -7
  363. package/src/assets/web-panel/assets/NotificationSettings-CG3Kfuef.css +0 -1
  364. package/src/assets/web-panel/assets/NotificationSettings-Cj9175ce.js +0 -1
  365. package/src/assets/web-panel/assets/OrderTableRenderer-CfrDjSHT.css +0 -1
  366. package/src/assets/web-panel/assets/OrderTableRenderer-IfNpXT2R.js +0 -1
  367. package/src/assets/web-panel/assets/Organization-DPFp6G9o.js +0 -4
  368. package/src/assets/web-panel/assets/Organization-LVvqwG0D.css +0 -1
  369. package/src/assets/web-panel/assets/P2P-DcFvP7F-.css +0 -1
  370. package/src/assets/web-panel/assets/P2P-tXck8GLq.js +0 -2
  371. package/src/assets/web-panel/assets/PdhVaultBrowser-DSvpQl9k.js +0 -7
  372. package/src/assets/web-panel/assets/PdhVaultBrowser-DZZrUOr1.css +0 -1
  373. package/src/assets/web-panel/assets/Permissions-CKPkdLj-.js +0 -4
  374. package/src/assets/web-panel/assets/Permissions-DsPE_IQy.css +0 -1
  375. package/src/assets/web-panel/assets/PersonalDataHub-BhpRlh9D.css +0 -1
  376. package/src/assets/web-panel/assets/PersonalDataHub-DnqXc12l.js +0 -9
  377. package/src/assets/web-panel/assets/Pipeline-BItr5CyP.css +0 -1
  378. package/src/assets/web-panel/assets/Pipeline-BKjFU_kd.js +0 -1
  379. package/src/assets/web-panel/assets/Privacy-ChC-J5Tn.js +0 -1
  380. package/src/assets/web-panel/assets/Privacy-F_ENsxZk.css +0 -1
  381. package/src/assets/web-panel/assets/ProjectInit-B86LEzDL.css +0 -1
  382. package/src/assets/web-panel/assets/ProjectInit-ByFZG9sY.js +0 -2
  383. package/src/assets/web-panel/assets/ProjectSettings-Bbv1Kiw-.js +0 -2
  384. package/src/assets/web-panel/assets/ProjectSettings-DK7KA_iX.css +0 -1
  385. package/src/assets/web-panel/assets/Projects-CmJeUDBW.css +0 -1
  386. package/src/assets/web-panel/assets/Projects-QYyGW31-.js +0 -1
  387. package/src/assets/web-panel/assets/Providers-C6q_fvea.css +0 -1
  388. package/src/assets/web-panel/assets/Providers-CJLnWw0r.js +0 -1
  389. package/src/assets/web-panel/assets/QrScannerModal-NwAHNfiJ.css +0 -1
  390. package/src/assets/web-panel/assets/QuickAsk-DoXU0np9.js +0 -1
  391. package/src/assets/web-panel/assets/Recommend-DCo_vuaf.js +0 -1
  392. package/src/assets/web-panel/assets/Recommend-D_bf91K6.css +0 -1
  393. package/src/assets/web-panel/assets/RemoteSession-CLuL925Z.js +0 -5
  394. package/src/assets/web-panel/assets/Reputation-CNNCA_-M.js +0 -1
  395. package/src/assets/web-panel/assets/Reputation-DiOsOleI.css +0 -1
  396. package/src/assets/web-panel/assets/Row-Vu4j631i.js +0 -1
  397. package/src/assets/web-panel/assets/RssFeed-C18B4xiy.js +0 -3
  398. package/src/assets/web-panel/assets/RssFeed-CjcbkyUb.css +0 -1
  399. package/src/assets/web-panel/assets/Search-DxiqccE2.js +0 -1
  400. package/src/assets/web-panel/assets/Search-Klk29S7C.css +0 -1
  401. package/src/assets/web-panel/assets/Security-BmrukMHn.css +0 -1
  402. package/src/assets/web-panel/assets/Security-Droe_hHI.js +0 -4
  403. package/src/assets/web-panel/assets/Services-CwmmyXzq.js +0 -2
  404. package/src/assets/web-panel/assets/Services-DAnVNhUG.css +0 -1
  405. package/src/assets/web-panel/assets/Skills-BUu9owbR.css +0 -1
  406. package/src/assets/web-panel/assets/Skills-Dp-d2miK.js +0 -1
  407. package/src/assets/web-panel/assets/Sla-2DFXVbK4.js +0 -1
  408. package/src/assets/web-panel/assets/Sla-sodqCU4a.css +0 -1
  409. package/src/assets/web-panel/assets/SpeechSettings-Cdd9lCoy.js +0 -1
  410. package/src/assets/web-panel/assets/SpeechSettings-CgB9nFyq.css +0 -1
  411. package/src/assets/web-panel/assets/SyncSettings-B3hJqmBP.css +0 -1
  412. package/src/assets/web-panel/assets/SyncSettings-CxQhcYSk.js +0 -2
  413. package/src/assets/web-panel/assets/Tasks-BHWVRfXx.js +0 -1
  414. package/src/assets/web-panel/assets/Tasks-nbTUVXvt.css +0 -1
  415. package/src/assets/web-panel/assets/Templates-CpFsKk_l.css +0 -1
  416. package/src/assets/web-panel/assets/Templates-DNFk3a5_.js +0 -1
  417. package/src/assets/web-panel/assets/Tenant-B6X6dPo8.js +0 -1
  418. package/src/assets/web-panel/assets/Tenant-MuPJnOjk.css +0 -1
  419. package/src/assets/web-panel/assets/Terminal-BuUNoLGM.js +0 -3
  420. package/src/assets/web-panel/assets/Terminal-DHoveJwj.css +0 -1
  421. package/src/assets/web-panel/assets/TimelineRenderer-BlTAtkOc.css +0 -1
  422. package/src/assets/web-panel/assets/TimelineRenderer-DThrBYj8.js +0 -1
  423. package/src/assets/web-panel/assets/Tokens-CA_u4Blu.js +0 -1
  424. package/src/assets/web-panel/assets/Tokens-CynVae-o.css +0 -1
  425. package/src/assets/web-panel/assets/Trust-C-WrW0Fj.css +0 -1
  426. package/src/assets/web-panel/assets/Trust-DHcLpNy3.js +0 -1
  427. package/src/assets/web-panel/assets/UkeySign-B_fni4C2.js +0 -1
  428. package/src/assets/web-panel/assets/VideoEditing-BDFghpzP.css +0 -1
  429. package/src/assets/web-panel/assets/VideoEditing-g9nf2EhS.js +0 -1
  430. package/src/assets/web-panel/assets/Wallet-C8pOjIve.js +0 -4
  431. package/src/assets/web-panel/assets/Wallet-DUbpTRcg.css +0 -1
  432. package/src/assets/web-panel/assets/WebAuthn-BaKNjxZt.js +0 -5
  433. package/src/assets/web-panel/assets/WebAuthn-CVAFRfCQ.css +0 -1
  434. package/src/assets/web-panel/assets/WorkflowEditor-429lPWYk.css +0 -1
  435. package/src/assets/web-panel/assets/WorkflowEditor-CX030Wb1.js +0 -1
  436. package/src/assets/web-panel/assets/createContext-B8rTvO61.js +0 -1
  437. package/src/assets/web-panel/assets/devWarning-B4_IVU_n.js +0 -1
  438. package/src/assets/web-panel/assets/echarts-C61Vn3mP.js +0 -25
  439. package/src/assets/web-panel/assets/index--6BUI55w.js +0 -1
  440. package/src/assets/web-panel/assets/index-5Q1bepcM.js +0 -1
  441. package/src/assets/web-panel/assets/index-B10Ia2KL.js +0 -21
  442. package/src/assets/web-panel/assets/index-B1SLBLli.js +0 -3
  443. package/src/assets/web-panel/assets/index-B8_VQAav.js +0 -1
  444. package/src/assets/web-panel/assets/index-BMuPJra-.js +0 -1
  445. package/src/assets/web-panel/assets/index-BOCjph-k.js +0 -12
  446. package/src/assets/web-panel/assets/index-BpBaOWmV.js +0 -1
  447. package/src/assets/web-panel/assets/index-CDlHvQtw.js +0 -1
  448. package/src/assets/web-panel/assets/index-CPF7Vqri.js +0 -55
  449. package/src/assets/web-panel/assets/index-CPmgKQcl.js +0 -1
  450. package/src/assets/web-panel/assets/index-CcpMHPWd.js +0 -21
  451. package/src/assets/web-panel/assets/index-Cyksnofp.js +0 -1
  452. package/src/assets/web-panel/assets/index-Dc9pcin6.js +0 -1
  453. package/src/assets/web-panel/assets/index-DfAC55QA.js +0 -19
  454. package/src/assets/web-panel/assets/index-DgNCfwvg.js +0 -1
  455. package/src/assets/web-panel/assets/index-DvfhIBNZ.js +0 -1
  456. package/src/assets/web-panel/assets/index-Hbzd9WeI.js +0 -1
  457. package/src/assets/web-panel/assets/index-IiS7WoUl.js +0 -13
  458. package/src/assets/web-panel/assets/index-Xa6TlaD7.js +0 -31
  459. package/src/assets/web-panel/assets/index-YczWc2_0.js +0 -12
  460. package/src/assets/web-panel/assets/index-h_ANnbR8.js +0 -3
  461. package/src/assets/web-panel/assets/index-k7QsBwyo.js +0 -75
  462. package/src/assets/web-panel/assets/isSymbol-S5WZT7lS.js +0 -1
  463. package/src/assets/web-panel/assets/motion-B1hpJYSD.js +0 -11
  464. package/src/assets/web-panel/assets/useFlexGapSupport-BClv53kR.js +0 -1
  465. package/src/assets/web-panel/assets/vendor-Bn1JzzAn.js +0 -42
  466. package/src/assets/web-panel/assets/vnode-ejVeFJ0x.js +0 -1
@@ -0,0 +1,2 @@
1
+ import{_ as ve,b as ye,u as me}from"./index-3RqDry-K.js";import{R as fe,M as _e,am as te,at as ge,q as B}from"./icons-DlxlFL4g.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-BXcBOG8b.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 Y(){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
+ `).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 Y()}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),q=r(!1);async function A(){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 A()}catch(o){f.value=e("p2p.messages.pushFailed",{err:o.message})}finally{j.value=!1}}async function ce(){q.value=!0,f.value="";try{const{output:o}=await x.execute("sync pull",3e4);f.value=o||e("p2p.sync.pullDefault"),await A()}catch(o){f.value=e("p2p.messages.pullFailed",{err:o.message})}finally{q.value=!1}}async function X(){await Promise.all([Y(),A()])}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"),K=p("a-statistic"),W=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(W,{xs:24,sm:8},{default:n(()=>[a(M,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[a(K,{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(W,{xs:24,sm:8},{default:n(()=>[a(M,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[a(K,{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(W,{xs:24,sm:8},{default:n(()=>[a(M,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[a(K,{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:q.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"])])}}},Ke=ve(Ve,[["__scopeId","data-v-832d025d"]]);export{Ke as default};
@@ -0,0 +1 @@
1
+ [data-v-832d025d] .ant-table{background:transparent}[data-v-832d025d] .ant-select-selector{background:var(--bg-card)!important;border-color:var(--border-color)!important}
@@ -0,0 +1 @@
1
+ .pdh-sidebar[data-v-0c0dc745]{background:#fff;border-radius:8px;padding:12px 8px;border:1px solid #f0f0f0}.sidebar-title[data-v-0c0dc745]{font-size:12px;color:#999;padding:4px 8px 8px;font-weight:600;letter-spacing:.5px}.cat-item[data-v-0c0dc745]{display:flex;align-items:center;gap:10px;padding:8px 12px;border-radius:6px;cursor:pointer;transition:background .15s;margin-bottom:2px}.cat-item[data-v-0c0dc745]:hover{background:#f5f5f5}.cat-item.active[data-v-0c0dc745]{background:#1677ff;color:#fff}.cat-item.dim[data-v-0c0dc745]{opacity:.45}.cat-item .icon[data-v-0c0dc745]{font-size:16px}.cat-item .label[data-v-0c0dc745]{flex:1;font-size:14px}.pdh-filter-bar[data-v-44891485]{display:flex;align-items:center;gap:12px;padding:12px 16px;background:#fff;border-radius:8px;border:1px solid #f0f0f0;flex-wrap:wrap}.hint[data-v-44891485]{font-size:12px;color:#999;display:flex;align-items:center;gap:4px}.pdh-browser-page[data-v-b77bf5a7]{padding:16px;height:100%;background:#f5f5f5;overflow-y:auto}.page-header[data-v-b77bf5a7]{display:flex;align-items:flex-start;justify-content:space-between;margin-bottom:16px}.page-title[data-v-b77bf5a7]{margin:0 0 4px;font-size:18px}.page-sub[data-v-b77bf5a7]{margin:0;color:#999;font-size:13px}.browser-layout[data-v-b77bf5a7]{align-items:flex-start}.main-pane[data-v-b77bf5a7]{display:flex;flex-direction:column;gap:12px}.results-summary[data-v-b77bf5a7]{font-size:13px;color:#666;padding:4px 4px 8px}.results-summary .loaded-of[data-v-b77bf5a7]{margin-left:8px;color:#999}.load-more[data-v-b77bf5a7]{margin-top:12px}
@@ -0,0 +1,7 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./ChatBubbleRenderer-DMGtSdDx.js","./index-3RqDry-K.js","./vendor-BXcBOG8b.js","./icons-DlxlFL4g.js","./index-CfX1DEtk.css","./ChatBubbleRenderer-CO908iBt.css","./OrderTableRenderer-D1uNcz3b.js","./OrderTableRenderer-BnOISpKI.css","./TimelineRenderer-C27kL2oU.js","./TimelineRenderer-DmztdsbF.css","./EmailListRenderer-CMs0k9TB.js","./EmailListRenderer-CVJ1j3Ll.css","./GenericCardRenderer-DEUG25ZJ.js","./GenericCardRenderer-DtJFcJYl.css"])))=>i.map(i=>d[i]);
2
+ import{E as W,r as L,f as R,K as b,L as d,M as O,R as _,c as i,u as s,Q as k,S as $,Z as U,F as P,Y as K,$ as H,P as x,N as v,O as h,V as F,o as Z}from"./vendor-BXcBOG8b.js";import{u as J}from"./usePersonalDataHub-C7FrKDhD.js";import{_ as M,e as T,d as z}from"./index-3RqDry-K.js";import{m as B,ae as X,M as ee,aI as te,y as ne,aG as se,ar as oe,h as re,u as le,d as ae,e as Q,ah as ie,aA as ue,R as ce}from"./icons-DlxlFL4g.js";import"./useShellMode-CgR0wCYM.js";const D=Object.freeze({q:"",category:null,adapter:null,subtype:null,since:null,until:null}),N=50,G=300,de=W("pdhBrowser",()=>{const t=L({...D}),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 j(){const w=++u;c.value=!0,a.value=null;const y=J();try{const[f,I]=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:I.byCategory||{},byAdapter:I.byAdapter||{},bySubtype:I.bySubtype||{},total:I.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 D))throw new Error(`pdhBrowser.setFilter: unknown key "${w}"`);t.value={...t.value,[w]:y},S&&clearTimeout(S),S=setTimeout(()=>{S=null,j()},G)}function q(w){return t.value={...D,...w},S&&(clearTimeout(S),S=null),j()}function Y(){t.value={...D},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:j,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"],["meeting-","system"],["vscode","system"],["vscodium","system"],["jetbrains-ide","system"],["win-recent","system"],["git-activity","system"],["shell-history","system"],["hbuilderx","system"],["local-files","system"],["cursor","ai-chat"],["claude-code","ai-chat"],["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"],be={class:"label"},_e={__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=b("a-badge");return d(),O("div",ve,[l[2]||(l[2]=_("div",{class:"sidebar-title"},"数据类型",-1)),_("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]=_("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,K(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(H(r(u)),{class:"icon"})),_("span",be,x(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(_e,[["__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=b("a-input-search"),j=b("a-select"),E=b("a-range-picker"),A=b("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(j,{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-DMGtSdDx.js"),__vite__mapDeps([0,1,2,3,4,5]),import.meta.url)),o=F(()=>T(()=>import("./OrderTableRenderer-D1uNcz3b.js"),__vite__mapDeps([6,1,2,3,4,7]),import.meta.url)),c=F(()=>T(()=>import("./TimelineRenderer-C27kL2oU.js"),__vite__mapDeps([8,1,2,3,4,9]),import.meta.url)),r=F(()=>T(()=>import("./EmailListRenderer-CMs0k9TB.js"),__vite__mapDeps([10,1,2,3,4,11]),import.meta.url)),a=F(()=>T(()=>import("./GenericCardRenderer-DEUG25ZJ.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(H(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
+ `)+`
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(je).join(",")});return[o,...c].join(`
5
+ `)+`
6
+ `}function je(t){const e=String(t??"");return e.includes(",")||e.includes('"')||e.includes(`
7
+ `)||e.includes("\r")?'"'+e.replace(/"/g,'""')+'"':e}function xe(t,e,o="application/octet-stream"){if(typeof window>"u"||typeof document>"u")return e;const c=new Blob([t],{type:o}),r=URL.createObjectURL(c),a=document.createElement("a");return a.href=r,a.download=e,document.body.appendChild(a),a.click(),document.body.removeChild(a),setTimeout(()=>URL.revokeObjectURL(r),1e3),e}function Ae(t,e=null){const o=new Date,c=o.getFullYear(),r=String(o.getMonth()+1).padStart(2,"0"),a=String(o.getDate()).padStart(2,"0"),n=t==="ndjson"?"ndjson":t,l=e?`-${e}`:"";return`pdh-events-${c}-${r}-${a}${l}.${n}`}const Fe={__name:"ExportDropdown",props:{events:{type:Array,required:!0},category:{type:String,default:null}},setup(t){const e=t,o=R(()=>e.events.length>0),c={json:"application/json;charset=utf-8",ndjson:"application/x-ndjson;charset=utf-8",csv:"text/csv;charset=utf-8"};function r(n){switch(n){case"json":return Ee(e.events);case"ndjson":return Le(e.events);case"csv":return Re(e.events);default:throw new Error(`unknown format: ${n}`)}}function a({key:n}){try{const l=r(n),m=Ae(n,e.category);xe(l,m,c[n]),z.success(`已导出 ${e.events.length} 条到 ${m}`)}catch(l){z.error(`导出失败: ${l.message||l}`)}}return(n,l)=>{const m=b("a-button"),u=b("a-menu-item"),S=b("a-menu"),g=b("a-dropdown");return d(),k(g,{disabled:!o.value},{overlay:v(()=>[i(S,{onClick:a},{default:v(()=>[i(u,{key:"json"},{default:v(()=>[...l[0]||(l[0]=[h("JSON (.json)",-1)])]),_:1}),i(u,{key:"ndjson"},{default:v(()=>[...l[1]||(l[1]=[h("NDJSON (.ndjson)",-1)])]),_:1}),i(u,{key:"csv"},{default:v(()=>[...l[2]||(l[2]=[h("CSV (.csv)",-1)])]),_:1})]),_:1})]),default:v(()=>[i(m,{disabled:!o.value},{icon:v(()=>[i(s(ue))]),default:v(()=>[h(" 导出 ("+x(t.events.length)+") ",1),i(s(ie))]),_:1},8,["disabled"])]),_:1},8,["disabled"])}}},Te={class:"pdh-browser-page"},qe={class:"page-header"},Ie={class:"main-pane"},De={class:"results-summary"},Be={key:0},Ne={key:0},Pe={key:1},Ve={class:"loaded-of"},Me={class:"results-list"},Ue={key:2,class:"load-more"},Je={__name:"PdhVaultBrowser",setup(t){const e=de(),o=R(()=>e.filters.q?`没有匹配 "${e.filters.q}" 的事件 — 试试更短的关键词或换个类目`:e.filters.category?`「${V(e.filters.category)}」类目下还没有数据 — 去采集页同步对应 adapter`:"Vault 里还没有数据 — 去「个人数据中台」页面同步任意 adapter");function c(a){e.filters.category=a,e.search()}function r(a,n){e.setFilter(a,n)}return Z(()=>{!e.hasResults&&!e.isLoading&&e.search()}),(a,n)=>{const l=b("a-tag"),m=b("a-button"),u=b("a-space"),S=b("a-col"),g=b("a-spin"),p=b("a-alert"),C=b("a-empty"),j=b("a-row");return d(),O("div",Te,[_("div",qe,[n[6]||(n[6]=_("div",null,[_("h2",{class:"page-title"},"数据浏览器"),_("p",{class:"page-sub"}," Vault 里所有已采集的数据,按类目浏览 / 全文检索 / 时间窗口筛选。 完全离线,不外传。 ")],-1)),i(u,null,{default:v(()=>[s(e).mode==="fts5"?(d(),k(l,{key:0,color:"green"},{default:v(()=>[...n[3]||(n[3]=[h("FTS5 trigram",-1)])]),_:1})):s(e).mode==="like"?(d(),k(l,{key:1,color:"orange"},{default:v(()=>[...n[4]||(n[4]=[h("LIKE 兜底",-1)])]),_:1})):$("",!0),i(Fe,{events:s(e).results,category:s(e).filters.category},null,8,["events","category"]),i(m,{onClick:n[0]||(n[0]=E=>s(e).search()),loading:s(e).isLoading},{icon:v(()=>[i(s(ce))]),default:v(()=>[n[5]||(n[5]=h(" 刷新 ",-1))]),_:1},8,["loading"])]),_:1})]),i(j,{gutter:16,class:"browser-layout"},{default:v(()=>[i(S,{xs:24,sm:24,md:6,lg:5,xl:4},{default:v(()=>[i(he,{selected:s(e).filters.category,facets:s(e).facets,onSelect:c},null,8,["selected","facets"])]),_:1}),i(S,{xs:24,sm:24,md:18,lg:19,xl:20},{default:v(()=>[_("div",Ie,[i(ke,{filters:s(e).filters,facets:s(e).facets,"is-loading":s(e).isLoading,mode:s(e).mode,"short-query":s(e).shortQuery,onSetFilter:r,onReset:n[1]||(n[1]=E=>{s(e).reset(),s(e).search()})},null,8,["filters","facets","is-loading","mode","short-query"]),_("div",De,[s(e).isLoading&&s(e).results.length===0?(d(),O("span",Be,[i(g,{size:"small"}),n[7]||(n[7]=h(" 载入中… ",-1))])):(d(),O(P,{key:1},[_("strong",null,x(s(e).facets.total),1),n[11]||(n[11]=h(" 条事件 ",-1)),s(e).filters.category?(d(),O("span",Ne,[n[8]||(n[8]=h(" / 当前类目 ",-1)),_("strong",null,x(s(V)(s(e).filters.category)),1),_("strong",null,x(s(e).facets.byCategory[s(e).filters.category]||0),1)])):$("",!0),s(e).filters.q?(d(),O("span",Pe,[n[9]||(n[9]=h(' / 关键词 "',-1)),_("em",null,x(s(e).filters.q),1),n[10]||(n[10]=h('"',-1))])):$("",!0),_("span",Ve," / 已显示 "+x(s(e).results.length),1)],64))]),s(e).error?(d(),k(p,{key:0,type:"error","show-icon":"",message:s(e).error,closable:"",style:{margin:"12px 0"}},null,8,["message"])):$("",!0),!s(e).isLoading&&s(e).results.length===0&&!s(e).error?(d(),k(C,{key:1,description:o.value,style:{"margin-top":"40px"}},null,8,["description"])):$("",!0),_("div",Me,[(d(!0),O(P,null,K(s(e).results,(E,A)=>(d(),k($e,{key:`r-${A}-${E.id}`,event:E},null,8,["event"]))),128))]),s(e).canLoadMore?(d(),O("div",Ue,[i(m,{loading:s(e).isAppending,onClick:n[2]||(n[2]=E=>s(e).loadMore()),block:""},{default:v(()=>[...n[12]||(n[12]=[h(" 加载下一页 (50 条) ",-1)])]),_:1},8,["loading"])])):$("",!0)])]),_:1})]),_:1})])}}},Ye=M(Je,[["__scopeId","data-v-b77bf5a7"]]);export{Ye as default};
@@ -0,0 +1,4 @@
1
+ import{_ as ue,u as ce,d as D,t as G}from"./index-3RqDry-K.js";import{R as de,X as pe,f as J,a9 as me}from"./icons-DlxlFL4g.js";import{o as fe,M as d,R as O,c as n,N as a,r as v,K as u,L as i,O as h,u as I,Q as x,P as _,S as g,F as z,Y as B}from"./vendor-BXcBOG8b.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"}},be={key:0,style:{color:"var(--text-secondary)","font-size":"12px","font-family":"monospace"}},xe={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(),A=v("roles"),W=v(!1);async function q(){W.value=!0;try{A.value==="roles"?await P():A.value==="audit"&&await E()}finally{W.value=!1}}function Q(l){l==="roles"&&S.value.length===0&&P(),l==="audit"&&N.value.length===0&&E()}const j=v(!1),S=v([]),X=[{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(){j.value=!0;try{const{output:l}=await R.execute("auth roles --json",15e3);S.value=F(l,Y)}catch(l){D.error("加载角色列表失败: "+l.message)}finally{j.value=!1}}function Y(l){const e=[],o=l.split(`
2
+ `);for(const p of o){const s=p.trim();if(!s||s.startsWith("─")||s.match(/^Role/i))continue;const r=s.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}):s.length>2&&e.push({key:e.length,name:s.slice(0,60),description:"",permissions:[],userCount:0})}return e}const C=v(""),w=v(""),M=v(!1),k=v(null),H=["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 l=`auth check ${C.value.trim()} "${w.value.trim()}"`,{output:e}=await R.execute(l,15e3),o=e.toLowerCase(),p=o.includes("allow")||o.includes("granted")||o.includes("true")||o.includes("yes"),s=o.includes("denied")||o.includes("reject")||o.includes("false")||o.includes("no permission");k.value={allowed:p&&!s,detail:e.trim()||(p?"用户拥有该权限":"用户没有该权限")}}catch(l){k.value={allowed:!1,detail:"检查失败: "+l.message}}finally{M.value=!1}}}const $=v(!1),N=v([]),V=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(l){return{info:"blue",warn:"orange",warning:"orange",error:"red",critical:"red"}[(l||"").toLowerCase()]||"default"}async function E(){$.value=!0;try{const[l,e]=await Promise.all([R.execute("audit log --json",15e3),R.execute("audit stats --json",15e3)]);N.value=F(l.output,ae),V.value=se(e.output)}catch(l){D.error("加载审计日志失败: "+l.message)}finally{$.value=!1}}function ae(l){const e=[],o=l.split(`
3
+ `);for(const p of o){const s=p.trim();if(!s||s.startsWith("─")||s.startsWith("Audit")||s.startsWith("Recent"))continue;const r=s.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=s.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 s.length>3&&!s.match(/^\d+ event/i)&&e.push({key:e.length,timestamp:"-",event:s.slice(0,80),user:"-",level:"info",detail:""})}return e}function se(l){const e=G(l);if(e&&typeof e=="object"&&!Array.isArray(e)){const y=["#1677ff","#52c41a","#faad14","#ff4d4f"];return Object.entries(e).slice(0,4).map(([m,f],b)=>({label:m,value:typeof f=="number"?f:String(f),color:y[b%y.length]}))}const o=[],p=l.split(`
4
+ `),s=["#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 b=f[1].trim(),T=f[2].trim(),L=T.match(/^(\d+)/);o.push({label:b,value:L?parseInt(L[1],10):T,color:s[r%s.length]}),r++}}return o.length===0&&o.push({label:"总事件数",value:N.value.length,color:"#1677ff"},{label:"状态",value:"就绪",color:"#52c41a"}),o}function F(l,e){const o=G(l);return Array.isArray(o)?o.map((p,s)=>({key:s,...p})):e(l)}return fe(()=>{P()}),(l,e)=>{const o=u("a-button"),p=u("a-spin"),s=u("a-tag"),r=u("a-empty"),y=u("a-table"),m=u("a-tab-pane"),f=u("a-input"),b=u("a-form-item"),T=u("a-space"),L=u("a-form"),ne=u("a-alert"),K=u("a-card"),le=u("a-statistic"),oe=u("a-col"),ie=u("a-row"),re=u("a-tabs");return i(),d("div",null,[O("div",ye,[e[4]||(e[4]=O("div",null,[O("h2",{class:"page-title"},"权限管理"),O("p",{class:"page-sub"},"角色 / 权限检查 / 审计")],-1)),n(o,{type:"primary",ghost:"",loading:W.value,onClick:q},{icon:a(()=>[n(I(de))]),default:a(()=>[e[3]||(e[3]=h(" 刷新 ",-1))]),_:1},8,["loading"])]),n(re,{activeKey:A.value,"onUpdate:activeKey":e[2]||(e[2]=t=>A.value=t),type:"card",onChange:Q},{default:a(()=>[n(m,{key:"roles"},{tab:a(()=>[n(I(pe)),e[5]||(e[5]=h(" 角色列表 ",-1))]),default:a(()=>[j.value?(i(),d("div",ve,[n(p,{size:"large"})])):(i(),x(y,{key:1,columns:X,"data-source":S.value,pagination:{pageSize:20,showTotal:t=>`共 ${t} 条`},size:"small",style:{background:"var(--bg-card)"},"row-class-name":()=>"perm-row"},{bodyCell:a(({column:t,record:c})=>[t.key==="name"?(i(),d("span",_e,_(c.name),1)):g("",!0),t.key==="description"?(i(),d("span",ge,_(c.description),1)):g("",!0),t.key==="permissions"?(i(),d(z,{key:2},[(i(!0),d(z,null,B((c.permissions||[]).slice(0,5),U=>(i(),x(s,{key:U,color:"blue",style:{"margin-bottom":"2px"}},{default:a(()=>[h(_(U),1)]),_:2},1024))),128)),(c.permissions||[]).length>5?(i(),x(s,{key:0,color:"default"},{default:a(()=>[h(" +"+_(c.permissions.length-5),1)]),_:2},1024)):g("",!0)],64)):g("",!0),t.key==="userCount"?(i(),x(s,{key:3,color:c.userCount>0?"green":"default"},{default:a(()=>[h(_(c.userCount??0),1)]),_:2},1032,["color"])):g("",!0)]),emptyText:a(()=>[n(r,{description:"暂无角色数据"})]),_:1},8,["data-source","pagination"]))]),_:1}),n(m,{key:"check"},{tab:a(()=>[n(I(J)),e[6]||(e[6]=h(" 权限检查 ",-1))]),default:a(()=>[n(K,{style:{background:"var(--bg-card)","border-color":"var(--border-color)","max-width":"640px"}},{default:a(()=>[n(L,{"label-col":{span:5},"wrapper-col":{span:19}},{default:a(()=>[n(b,{label:"用户 ID",required:""},{default:a(()=>[n(f,{value:C.value,"onUpdate:value":e[0]||(e[0]=t=>C.value=t),placeholder:"输入用户 ID"},null,8,["value"])]),_:1}),n(b,{label:"权限",required:""},{default:a(()=>[n(f,{value:w.value,"onUpdate:value":e[1]||(e[1]=t=>w.value=t),placeholder:"note:read"},null,8,["value"])]),_:1}),n(b,{"wrapper-col":{offset:5,span:19}},{default:a(()=>[n(T,{wrap:""},{default:a(()=>[n(o,{type:"primary",loading:M.value,disabled:!C.value.trim()||!w.value.trim(),onClick:Z},{icon:a(()=>[n(I(J))]),default:a(()=>[e[7]||(e[7]=h(" 检查权限 ",-1))]),_:1},8,["loading","disabled"]),(i(),d(z,null,B(H,t=>n(o,{key:t,size:"small",onClick:c=>w.value=t},{default:a(()=>[h(_(t),1)]),_:2},1032,["onClick"])),64))]),_:1})]),_:1})]),_:1}),k.value!==null?(i(),d("div",he,[n(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}),n(m,{key:"audit"},{tab:a(()=>[n(I(me)),e[8]||(e[8]=h(" 审计日志 ",-1))]),default:a(()=>[n(ie,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:a(()=>[(i(!0),d(z,null,B(V.value,t=>(i(),x(oe,{xs:12,sm:6,key:t.label},{default:a(()=>[n(K,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"},size:"small"},{default:a(()=>[n(le,{title:t.label,value:t.value,"value-style":{color:t.color,fontSize:"20px"}},null,8,["title","value","value-style"])]),_:2},1024)]),_:2},1024))),128))]),_:1}),$.value?(i(),d("div",ke,[n(p,{size:"large"})])):(i(),x(y,{key:1,columns:ee,"data-source":N.value,pagination:{pageSize:20,showTotal:t=>`共 ${t} 条`},size:"small",style:{background:"var(--bg-card)"},"row-class-name":()=>"perm-row"},{bodyCell:a(({column:t,record:c})=>[t.key==="timestamp"?(i(),d("span",be,_(c.timestamp),1)):g("",!0),t.key==="event"?(i(),d("span",xe,_(c.event),1)):g("",!0),t.key==="user"?(i(),d("span",we,_(c.user),1)):g("",!0),t.key==="level"?(i(),x(s,{key:3,color:te(c.level)},{default:a(()=>[h(_(c.level),1)]),_:2},1032,["color"])):g("",!0),t.key==="detail"?(i(),d("span",Ce,_(c.detail),1)):g("",!0)]),emptyText:a(()=>[n(r,{description:"暂无审计日志"})]),_:1},8,["data-source","pagination"]))]),_:1})]),_:1},8,["activeKey"])])}}},Le=ue(Ie,[["__scopeId","data-v-5c1994c2"]]);export{Le as default};
@@ -0,0 +1 @@
1
+ [data-v-5c1994c2] .perm-row:hover td{background:var(--bg-card-hover)!important}[data-v-5c1994c2] .ant-tabs-tab{color:var(--text-secondary)!important}[data-v-5c1994c2] .ant-tabs-tab-active .ant-tabs-tab-btn{color:#1677ff!important}[data-v-5c1994c2] .ant-card-head{border-color:var(--border-color)!important;color:var(--text-primary)!important}
@@ -0,0 +1,3 @@
1
+ import{w as ot,L as s,Q as A,N as a,c as n,M as C,R as y,F as J,Y as ye,Z as Bt,P as c,O as r,S as v,a1 as Nt,f as pe,r as L,K as g,a as ge,e as La,a4 as Ua,o as Ma,u as ue,a0 as Ba,$ as Na}from"./vendor-BXcBOG8b.js";import{u as lt}from"./usePersonalDataHub-C7FrKDhD.js";import{_ as st,d as p}from"./index-3RqDry-K.js";import{R as Tt,aC as za,V as Ha,am as Ka,h as Fa,aD as qa,x as ja,aE as Wa,aF as Ya,z as Va,r as Qa,aG as Ga,a4 as Xa,ae as Za,aH as Ja,m as en,e as xt}from"./icons-DlxlFL4g.js";import"./useShellMode-CgR0wCYM.js";const H=Object.freeze({SYNC:"sync",FILE:"file",DIRECTORY:"directory",COOKIE:"cookie",OAUTH:"oauth",ADB:"adb",SETUP:"setup"}),tn=new Set(["social-bilibili","social-weibo","social-douyin","social-xiaohongshu","social-toutiao","social-kuaishou"]),zt=new Set(["travel-didi-consumer"]),an=new Set(["sync:file-import","sync:snapshot","sync:sqlite"]),nn=new Set(["sync:cookie","sync:cookie-api"]),Rt=Object.freeze({"doc-baidu-netdisk":Object.freeze({fields:Object.freeze([Object.freeze({key:"accessToken",label:"OAuth access token",placeholder:"百度网盘开放平台 access token",required:!0,secret:!0}),Object.freeze({key:"accountId",label:"稳定账号标识",placeholder:"仅用于生成隔离水位的哈希作用域",required:!0}),Object.freeze({key:"dir",label:"应用目录",placeholder:"/apps/你的应用目录",required:!0})])}),"doc-wps":Object.freeze({fields:Object.freeze([Object.freeze({key:"accessToken",label:"OAuth access token",placeholder:"WPS 365 用户授权 access token",required:!0,secret:!0}),Object.freeze({key:"accountId",label:"稳定账号标识",placeholder:"仅用于生成隔离水位的哈希作用域",required:!0}),Object.freeze({key:"driveId",label:"云盘 ID",placeholder:"WPS driveId",required:!0}),Object.freeze({key:"parentId",label:"起始目录 ID",placeholder:"默认 0(根目录)",defaultValue:"0"}),Object.freeze({key:"appId",label:"KSO-1 App ID(可选)",placeholder:"启用接口签名时填写"}),Object.freeze({key:"appKey",label:"KSO-1 App Key(可选)",placeholder:"必须与 App ID 同时填写",secret:!0})])})}),on=new Set(["NO_KEY_PROVIDER","EMPTY_KEY","KEY_PROVIDER_THREW","ENV_UNSUPPORTED","CUSTOM_FETCH_REQUIRED"]);function Oe(l){return Array.isArray(l?.capabilities)?l.capabilities:[]}function rt(l){return!l||!Oe(l).includes("sync:oauth-api")||!Object.prototype.hasOwnProperty.call(Rt,l.name)?null:Rt[l.name]}function Be(l){if(!l||typeof l!="object")return H.SETUP;if(tn.has(l.name))return H.ADB;const _=Oe(l);return _.includes("sync:scan-directory")?H.DIRECTORY:l.ready===!0?H.SYNC:on.has(l.reason)?H.SETUP:_.some(i=>nn.has(i))||zt.has(l.name)&&_.includes("sync:custom-cookie-api")?H.COOKIE:rt(l)?H.OAUTH:_.includes("sync:scan-directory")||_.includes("sync:export-directory")||_.includes("sync:profile-directory")?H.DIRECTORY:_.some(i=>an.has(i))?H.FILE:l.ready==null&&l.category==="local"?H.SYNC:H.SETUP}function ln(l){switch(Be(l)){case H.FILE:return"📂 选择文件采集";case H.DIRECTORY:return Oe(l).includes("sync:scan-directory")?"📁 选择扫描目录":Oe(l).includes("sync:profile-directory")?"📁 选择配置目录":"📁 选择导出目录";case H.COOKIE:return"🔑 登录采集";case H.OAUTH:return"🔐 OAuth 授权采集";case H.ADB:return"📱 USB 一键采集";case H.SYNC:return"⚡ 立即采集";default:return"查看采集步骤"}}function sn(l){switch(Be(l)){case H.FILE:return"📂 采集";case H.DIRECTORY:return"📁 采集";case H.COOKIE:return"🔑 采集";case H.OAUTH:return"🔐 授权采集";case H.ADB:return"📱 采集";case H.SYNC:return"采集";default:return"查看步骤"}}function rn(l){if(Be(l)===H.COOKIE&&it(l))return"粘贴登录 Cookie、稳定账号标识和本次使用的滴滴 HTTPS 订单接口后采集入库";switch(Be(l)){case H.FILE:return"选择导出或解密好的文件,自动入库";case H.DIRECTORY:return Oe(l).includes("sync:scan-directory")?"选择本地目录,仅采集其中的文件活动元数据":Oe(l).includes("sync:profile-directory")?"选择本地配置目录,读取其中的数据文件":"选择本地导出目录,递归扫描支持的文件";case H.COOKIE:return"粘贴当前登录 Cookie 后采集入库";case H.OAUTH:return"临时输入官方 OAuth 凭据后采集;凭据不会保存到本地配置、数据中台或同步水位";case H.ADB:return"连接已授权的 Android 手机后自动采集";case H.SYNC:return"复用当前配置,直接采集入库";default:return"先按上述步骤完成采集配置"}}function it(l){return zt.has(l?.name)}function Ie(l,_,{normalize:i=!1}={}){if(typeof l!="string")return"";const k=(i?l.normalize("NFKC"):l).trim();return!k||k.length>_||/[\0\r\n]/u.test(k)?"":k}function Lt(l,_={}){if(!rt(l))return null;const i=Ie(_.accessToken,16*1024),k=Ie(_.accountId,1024,{normalize:!0});if(!i||!k)return null;if(l.name==="doc-baidu-netdisk"){const I=Ie(_.dir,4096,{normalize:!0});return/^\/apps\/[^/\0\r\n]+(?:\/[^\0\r\n]*)?$/u.test(I)?{accessToken:i,accountId:k,dir:I,recursive:_.recursive!==!1}:null}if(l.name==="doc-wps"){const I=Ie(_.driveId,1024,{normalize:!0}),$=Ie(_.parentId,1024,{normalize:!0})||"0",h=Ie(_.appId,1024,{normalize:!0}),D=Ie(_.appKey,16*1024);return!I||!!h!=!!D?null:{accessToken:i,accountId:k,driveId:I,parentId:$,recursive:_.recursive!==!1,...h?{appId:h,appKey:D}:{}}}return null}function un(l,_,i,k){const I=typeof _=="string"?_.trim():"",$=typeof i=="string"?i.trim():"";if(!I||!$)return null;const h={cookie:I,accountId:$};if(!it(l))return h;const D=typeof k=="string"?k.trim():"";if(!D)return null;try{const S=new URL(D);if(S.protocol!=="https:"||S.username||S.password||S.hash||S.port&&S.port!=="443"||!(S.hostname==="xiaojukeji.com"||S.hostname.endsWith(".xiaojukeji.com")))return null;h.sourceUrl=S.href}catch{return null}return h}function dn(l,_,i){if(typeof _!="string"||_.length===0)return null;const k=Oe(l);if(k.includes("sync:scan-directory"))return{roots:[_]};if(k.includes("sync:profile-directory"))return{profilePath:_};if(k.includes("sync:export-directory")){const I=typeof i=="string"?i.trim():"";return I?{exportDir:_,accountId:I}:null}return null}function cn(l="数据"){return`当前 Web/CLI 宿主不支持原生目录选择器。
2
+ 请手动输入运行 ChainlessChain 主机上的绝对${l}目录路径(不是浏览器所在设备的路径)。该目录将由主机端直接读取;留空取消:`}function pn(l){return typeof l!="string"||l.length===0?!1:l.startsWith("/")||/^[A-Za-z]:[\\/]/u.test(l)}async function fn({pickDirectoryResult:l,prompt:_,title:i,directoryKind:k}){const I=await l({title:i});if(I?.status==="selected")return{...I,manual:!1};if(I?.status==="cancelled")return{status:"cancelled",path:null,manual:!1};const $=_(cn(k));return typeof $!="string"||$.length===0?{status:"cancelled",path:null,manual:!0}:pn($)?{status:"selected",path:$,manual:!0}:{status:"invalid",path:null,manual:!0,reason:"HOST_ABSOLUTE_PATH_REQUIRED"}}const mn=Object.freeze(["events","persons","places","items","topics"]);function ce(l){return Number.isFinite(l)&&l>0?l:0}function nt(l){return Number.isFinite(l)&&l>0?l:null}function je(l){return Number.isFinite(l)&&l>=0?l:null}function yn(l){const _=l?.entityCounts;return!_||typeof _!="object"?0:mn.reduce((i,k)=>i+ce(_[k]),0)}function Ee(l){const _=!!l&&typeof l=="object",i=_&&typeof l.status=="string"?l.status:"invalid",k=yn(l),I=ce(l?.rawCount),$=ce(l?.archivedRawCount),h=ce(l?.archiveFailureCount),D=ce(l?.invalidCount),S=l?.watermarkDeferred===!0,M=typeof l?.checkpointCommitted=="boolean"?l.checkpointCommitted:null,N={archivedRawCount:$,archiveFailureCount:h,checkpointCommitted:M},K={pageBudget:nt(l?.pageBudget),nextPageBudget:nt(l?.nextPageBudget),scanDeferredCount:ce(l?.scanDeferredCount),watermarkLookbackMs:ce(l?.watermarkLookbackMs),collectionSinceWatermark:typeof l?.collectionSinceWatermark=="string"?l.collectionSinceWatermark:null},B={attemptCount:ce(l?.attemptCount),retryCount:ce(l?.retryCount),totalRetryDelayMs:ce(l?.totalRetryDelayMs),retryExhausted:l?.retryExhausted===!0,retryAfterMs:nt(l?.retryAfterMs),rateLimitReason:typeof l?.rateLimitReason=="string"?l.rateLimitReason:null,rateLimitRemainingMinute:je(l?.rateLimitRemainingMinute),rateLimitRemainingDay:je(l?.rateLimitRemainingDay),sourceRequestCount:ce(l?.sourceRequestCount),sourceRequestThrottleMs:ce(l?.sourceRequestThrottleMs),sourceRequestRateLimitRemainingMinute:je(l?.sourceRequestRateLimitRemainingMinute),sourceRequestRateLimitRemainingDay:je(l?.sourceRequestRateLimitRemainingDay)};return _&&i==="skipped"?{kind:"skipped",level:"info",completed:!0,status:i,total:k,rawCount:I,...N,...K,...B,invalidCount:D,error:null,skipReason:l.skipReason||"NOT_READY",skipMessage:l.skipMessage||"来源当前未就绪"}:!_||i!=="ok"?{kind:"failed",level:"error",completed:!1,status:i,total:k,rawCount:I,...N,...K,...B,invalidCount:D,error:_&&typeof l.error=="string"&&l.error.trim()||(i==="invalid"?"未收到有效同步报告":`同步状态:${i}`)}:S||h>0||M===!1||D>0||I>0&&k===0?{kind:"partial",level:"warning",completed:!0,status:i,total:k,rawCount:I,...N,...K,...B,invalidCount:D,watermarkDeferred:S,error:null}:k===0?{kind:"empty",level:"info",completed:!0,status:i,total:k,rawCount:I,...N,...K,...B,invalidCount:D,error:null}:{kind:"success",level:"success",completed:!0,status:i,total:k,rawCount:I,...N,...K,...B,invalidCount:D,watermarkDeferred:S,error:null}}function vn(l){if(!Array.isArray(l))return{level:"error",completed:!1,totalReports:0,totalEntities:0,success:0,empty:0,partial:0,skipped:0,failed:1,analyses:[]};const _=l.map(Ee),i={level:"success",completed:!0,totalReports:_.length,totalEntities:_.reduce((k,I)=>k+I.total,0),success:_.filter(k=>k.kind==="success").length,empty:_.filter(k=>k.kind==="empty").length,partial:_.filter(k=>k.kind==="partial").length,skipped:_.filter(k=>k.kind==="skipped").length,failed:_.filter(k=>k.kind==="failed").length,analyses:_};return i.failed>0?(i.level=i.failed===i.totalReports?"error":"warning",i.completed=!1):i.partial>0?i.level="warning":(i.skipped>0||i.success===0)&&(i.level="info"),i}function gn(l){return!Array.isArray(l)||l.length===0?null:l.find(_=>Ee(_).kind==="failed")||l.find(_=>Ee(_).kind==="partial")||l.find(_=>Ee(_).kind==="skipped")||l[l.length-1]}const We=Object.freeze({"system-data-android":Object.freeze([Object.freeze({key:"contacts",label:"联系人",hint:"~767 条"}),Object.freeze({key:"apps",label:"已安装应用",hint:"~176 个"}),Object.freeze({key:"sms",label:"短信内容",hint:"~2400 条 · 高敏感",sensitive:!0}),Object.freeze({key:"calls",label:"通话记录",hint:"~18000 条 · 包含号码",sensitive:!0}),Object.freeze({key:"media",label:"媒体文件元数据",hint:"照片 / 视频 / 下载 / 文档 · 高敏感",sensitive:!0})])}),Ht=Object.freeze(Object.fromEntries(Object.entries(We).map(([l,_])=>[l,Object.freeze(Object.fromEntries(_.map(({key:i})=>[i,!0])))])));function Ut(){return Object.fromEntries(Object.entries(Ht).map(([l,_])=>[l,{..._}]))}function kn(l,_){const i=We[l];if(!i)return{};const k=_?.[l]||{};return{include:Object.fromEntries(i.map(({key:$})=>[$,k[$]!==!1]))}}const _n={key:0},bn={class:"vendor-head"},An={class:"hint"},Cn={class:"hint",style:{"margin-top":"4px"}},hn={key:0,class:"hint",style:{"margin-top":"4px",color:"#ff4d4f"}},wn={key:1},In={class:"hint"},En=["href"],On={class:"howto"},Sn=["href"],Dn={key:3,style:{"margin-top":"8px"}},Pn={key:2,class:"kv",style:{"margin-top":"4px"}},$n={key:3,class:"kv",style:{"margin-top":"4px",color:"#ff4d4f"}},Tn={key:2},xn={__name:"AIChatWizard",props:{open:{type:Boolean,default:!1},existingAccounts:{type:Array,default:()=>[]}},emits:["update:open","registered"],setup(l,{emit:_}){const i=l,k=_,I=[{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}],$=lt(),h=L(1),D=L(null),S=L(""),M=L(null),N=L(null),K=L(null),B=ge({open:!1,probe:!1,register:!1}),Q=pe(()=>I.find(T=>T.vendor===D.value)||{}),ke=pe(()=>h.value===1?"选择一家 AI 服务商":h.value===2?M.value?.fallbackMode==="paste"?"在外部浏览器登录,把 cookie 粘贴到下面":"在内嵌浏览器登录,主进程自动读取 cookie":"校验并写入本地加密 vault"),se=pe(()=>{const T=N.value;return T?T.reason==="UNKNOWN_VENDOR"?"未知厂商 — 请刷新页面或重选":T.reason==="PASTE_REQUIRED"?"请先粘贴 cookie 字符串":T.missingRequired?.length?`缺关键 cookie: ${T.missingRequired.join(", ")}`:T.reason||"cookie 校验失败":""}),F=pe(()=>{const T=K.value;return T?T.reason==="REQUIRED_COOKIES_MISSING"?`缺关键 cookie: ${(T.missingRequired||[]).join(", ")}`:T.reason==="VALIDATE_COOKIE_FAILED"?"厂商拒绝该 cookie(可能已过期或被风控)":T.reason==="ADAPTER_THREW"?`Adapter 抛错: ${T.error||"网络错误"}`:T.reason==="UNKNOWN_VENDOR"?"未知厂商":T.reason||"注册失败":"未知错误"});function E(T){return i.existingAccounts.some(f=>f&&f.vendor===T)}function fe(T){return i.existingAccounts.find(f=>f&&f.vendor===T)||null}function ee(T){const f=fe(T);return f?f.lastHealth?f.lastHealth.ok?"ok":f.lastHealth.reason==="SPEC_VERSION_MISMATCH"?"mismatch":"fail":"unknown":null}function te(T){const f=fe(T);if(!f||!f.lastHealth||f.lastHealth.ok)return"";const ne=f.lastHealth.reason;return ne?ne==="SPEC_VERSION_MISMATCH"?"cookie 规格已升级,请重新登录":ne==="ADAPTER_THREW"?"上次校验抛错,建议稍后重试":ne==="COOKIE_EXPIRED"?"Cookie 已过期,请重新登录":ne:"Cookie 校验失败,建议重新登录"}async function P(T){try{(await $.unregisterAichat(T))?.ok&&k("registered",{vendor:T,accountId:null,unregistered:!0})}catch(f){K.value={ok:!1,reason:f?.message||"UNREGISTER_FAILED"}}}function ae(T){D.value=T}async function q(){if(D.value){B.open=!0,M.value=null,N.value=null,S.value="";try{if(M.value=await $.openAichatLogin(D.value),!M.value?.ok)return;h.value=2}catch(T){M.value={ok:!1,reason:T?.message||"OPEN_FAILED"}}finally{B.open=!1}}}async function R(){B.probe=!0,N.value=null;try{const T=S.value.trim(),f=T||void 0;N.value=await $.probeAichatCookies(D.value,f)}catch(T){N.value={ok:!1,reason:T?.message||"PROBE_FAILED"}}finally{B.probe=!1}}async function _e(){if(N.value?.ok){B.register=!0;try{K.value=await $.registerAichatVendor(D.value,N.value.cookies),h.value=3,K.value?.ok&&k("registered",{vendor:D.value,accountId:K.value.accountId})}catch(T){K.value={ok:!1,reason:T?.message||"REGISTER_FAILED"},h.value=3}finally{B.register=!1}}}function be(){h.value=1,D.value=null,S.value="",M.value=null,N.value=null,K.value=null}function re(){be(),k("update:open",!1)}return ot(()=>i.open,T=>{T&&be()}),(T,f)=>{const ne=g("a-alert"),U=g("a-tag"),ie=g("a-button"),Ne=g("a-popconfirm"),Ye=g("a-card"),$e=g("a-col"),Ve=g("a-row"),Se=g("a-collapse-panel"),Y=g("a-collapse"),G=g("a-textarea"),O=g("a-form-item"),m=g("a-form"),ze=g("a-result"),He=g("a-space"),Qe=g("a-drawer");return s(),A(Qe,{open:l.open,title:"添加 AI 对话账号",placement:"right",width:640,"destroy-on-close":!0,"onUpdate:open":f[4]||(f[4]=j=>k("update:open",j)),onClose:re},{footer:a(()=>[n(He,{style:{float:"right"}},{default:a(()=>[h.value>1&&h.value<3?(s(),A(ie,{key:0,onClick:f[3]||(f[3]=j=>h.value=h.value-1)},{default:a(()=>[...f[22]||(f[22]=[r("上一步",-1)])]),_:1})):v("",!0),n(ie,{onClick:re},{default:a(()=>[...f[23]||(f[23]=[r("取消",-1)])]),_:1}),h.value===1?(s(),A(ie,{key:1,type:"primary",disabled:!D.value,loading:B.open,onClick:q},{default:a(()=>[...f[24]||(f[24]=[r(" 下一步 ",-1)])]),_:1},8,["disabled","loading"])):v("",!0),h.value===2&&M.value?.fallbackMode==="paste"?(s(),A(ie,{key:2,loading:B.probe,disabled:!S.value.trim(),onClick:R},{default:a(()=>[...f[25]||(f[25]=[r(" 检测 cookie ",-1)])]),_:1},8,["loading","disabled"])):v("",!0),h.value===2&&M.value?.fallbackMode!=="paste"?(s(),A(ie,{key:3,loading:B.probe,onClick:R},{default:a(()=>[...f[26]||(f[26]=[r(" 检测 cookie ",-1)])]),_:1},8,["loading"])):v("",!0),h.value===2?(s(),A(ie,{key:4,type:"primary",loading:B.register,disabled:!N.value?.ok,onClick:_e},{default:a(()=>[...f[27]||(f[27]=[r(" 注册 ",-1)])]),_:1},8,["loading","disabled"])):v("",!0)]),_:1})]),default:a(()=>[n(ne,{message:`第 ${h.value} / 3 步`,description:ke.value,type:"info","show-icon":"",style:{"margin-bottom":"16px"}},null,8,["message","description"]),h.value===1?(s(),C("div",_n,[f[10]||(f[10]=y("p",{class:"hint"}," 选择要接入的 AI 服务商。登录后将本地读取 cookie 同步对话历史;cookie 仅落本机加密文件,不上传任何云端。 ",-1)),n(Ve,{gutter:[12,12]},{default:a(()=>[(s(),C(J,null,ye(I,j=>n($e,{xs:24,sm:12,md:8,key:j.vendor},{default:a(()=>[n(Ye,{size:"small",hoverable:"",class:Bt(["vendor-card",{selected:D.value===j.vendor}]),onClick:Ge=>ae(j.vendor)},{default:a(()=>[y("div",bn,[y("strong",null,c(j.displayName),1),ee(j.vendor)==="fail"?(s(),A(U,{key:0,color:"red"},{default:a(()=>[...f[5]||(f[5]=[r("🔴 重新登录",-1)])]),_:1})):ee(j.vendor)==="mismatch"?(s(),A(U,{key:1,color:"orange"},{default:a(()=>[...f[6]||(f[6]=[r("⚠ 规格升级",-1)])]),_:1})):ee(j.vendor)==="unknown"?(s(),A(U,{key:2,color:"blue"},{default:a(()=>[...f[7]||(f[7]=[r("已接入·待巡检",-1)])]),_:1})):ee(j.vendor)==="ok"?(s(),A(U,{key:3,color:"green"},{default:a(()=>[...f[8]||(f[8]=[r("✓ 已接入",-1)])]),_:1})):v("",!0)]),y("div",An,c(j.notes),1),y("div",Cn,[n(U,{color:"default"},{default:a(()=>[r(c(j.requiredCookies.length)+" 必需 cookie",1)]),_:2},1024),n(U,{color:"default"},{default:a(()=>[r("过期约 "+c(j.cookieMaxAgeHintDays)+" 天",1)]),_:2},1024)]),E(j.vendor)&&te(j.vendor)?(s(),C("div",hn,c(te(j.vendor)),1)):v("",!0),E(j.vendor)?(s(),C("div",{key:1,class:"vendor-actions",onClick:f[0]||(f[0]=Nt(()=>{},["stop"]))},[n(Ne,{title:"注销该 AI 对话来源?历史事件仍可在 vault 中查询。","ok-text":"注销","cancel-text":"取消",onConfirm:Ge=>P(j.vendor)},{default:a(()=>[n(ie,{size:"small",type:"text",danger:""},{default:a(()=>[...f[9]||(f[9]=[r("注销",-1)])]),_:1})]),_:1},8,["onConfirm"])])):v("",!0)]),_:2},1032,["class","onClick"])]),_:2},1024)),64))]),_:1})])):v("",!0),h.value===2&&M.value?(s(),C("div",wn,[y("p",In,[y("strong",null,c(Q.value.displayName),1),f[11]||(f[11]=r(" · ",-1)),y("a",{href:M.value.loginUrl,target:"_blank",rel:"noopener noreferrer"},c(M.value.loginUrl),9,En)]),M.value.fallbackMode==="paste"?(s(),A(ne,{key:0,message:M.value.helpText||"请在外部浏览器登录后从开发者工具复制全部 cookie 字符串粘贴到下方。",type:"warning","show-icon":"",style:{"margin-bottom":"12px"}},null,8,["message"])):(s(),A(ne,{key:1,message:"桌面端:请在弹出的内嵌浏览器窗口登录后点击 “检测 cookie”。",type:"info","show-icon":"",style:{"margin-bottom":"12px"}})),M.value.fallbackMode==="paste"?(s(),A(Y,{key:2,bordered:!1,style:{"margin-bottom":"12px"}},{default:a(()=>[n(Se,{key:"howto",header:"如何获取 cookie 字符串?"},{default:a(()=>[y("ol",On,[y("li",null,[f[12]||(f[12]=r("用 Chrome / Edge 打开 ",-1)),y("a",{href:M.value.loginUrl,target:"_blank"},c(M.value.loginUrl),9,Sn)]),f[13]||(f[13]=y("li",null,"完成登录,进入对话页",-1)),f[14]||(f[14]=y("li",null,[r("按 "),y("kbd",null,"F12"),r(" 打开开发者工具 → "),y("strong",null,"Application"),r(" → "),y("strong",null,"Cookies")],-1)),f[15]||(f[15]=y("li",null,"选中域名 → 全选所有 cookie 行 → 用扩展(如 EditThisCookie)导出 “name=value; …” 串",-1)),f[16]||(f[16]=y("li",null,[r("或在 Console 执行 "),y("code",null,"document.cookie"),r(" 复制结果(注意:HTTP-Only cookie 取不到,仍需 Application 面板)")],-1)),f[17]||(f[17]=y("li",null,"粘贴到下方文本框,点 “检测 cookie”",-1))])]),_:1})]),_:1})):v("",!0),n(m,{layout:"vertical"},{default:a(()=>[n(O,{label:"Cookie 字符串"},{default:a(()=>[n(G,{value:S.value,"onUpdate:value":f[1]||(f[1]=j=>S.value=j),rows:6,placeholder:"name1=value1; name2=value2; name3=value3 …",autocomplete:"off"},null,8,["value"])]),_:1})]),_:1}),N.value?(s(),C("div",Dn,[N.value.ok?(s(),A(ne,{key:0,type:"success","show-icon":"",message:`已识别 ${N.value.foundRequired.length} 个必需 cookie + ${N.value.foundOptional.length} 个可选 cookie`},null,8,["message"])):(s(),A(ne,{key:1,type:"error","show-icon":"",message:se.value},null,8,["message"])),N.value.foundRequired?.length?(s(),C("div",Pn," ✓ "+c(N.value.foundRequired.join(", ")),1)):v("",!0),N.value.missingRequired?.length?(s(),C("div",$n," 缺失: "+c(N.value.missingRequired.join(", ")),1)):v("",!0)])):v("",!0)])):v("",!0),h.value===3?(s(),C("div",Tn,[K.value?.ok?(s(),A(ze,{key:0,status:"success",title:`${Q.value.displayName} 已接入`,"sub-title":`accountId: ${K.value.accountId} · userId: ${K.value.validation?.userId||"匿名"}`},{extra:a(()=>[n(ie,{type:"primary",onClick:re},{default:a(()=>[...f[18]||(f[18]=[r("完成",-1)])]),_:1}),n(ie,{onClick:be},{default:a(()=>[...f[19]||(f[19]=[r("再加一家",-1)])]),_:1})]),_:1},8,["title","sub-title"])):(s(),A(ze,{key:1,status:"error",title:"接入失败","sub-title":F.value},{extra:a(()=>[n(ie,{type:"primary",onClick:f[2]||(f[2]=j=>h.value=2)},{default:a(()=>[...f[20]||(f[20]=[r("返回粘贴 cookie",-1)])]),_:1}),n(ie,{onClick:be},{default:a(()=>[...f[21]||(f[21]=[r("选其他厂商",-1)])]),_:1})]),_:1},8,["sub-title"]))])):v("",!0)]),_:1},8,["open"])}}},Rn=st(xn,[["__scopeId","data-v-a608230c"]]),Ln={__name:"PdhOAuthCollectorDrawer",props:{open:{type:Boolean,default:!1},source:{type:Object,default:null}},emits:["update:open","collect"],setup(l,{emit:_}){const i=l,k=_,I=ge({accessToken:"",accountId:"",dir:"",driveId:"",parentId:"0",appId:"",appKey:"",recursive:!0}),$=pe(()=>rt(i.source)),h=pe(()=>i.source?.name==="doc-baidu-netdisk"?"百度网盘 OAuth 采集":i.source?.name==="doc-wps"?"WPS OAuth 采集":"OAuth 授权采集"),D=pe(()=>Lt(i.source,I)!==null);function S(){I.accessToken="",I.accountId="",I.dir="",I.driveId="",I.parentId="0",I.appId="",I.appKey="",I.recursive=!0}function M(){S(),k("update:open",!1)}function N(){const K=Lt(i.source,I);if(!K)return;const B=i.source.name;S(),k("update:open",!1),k("collect",{name:B,options:K})}return ot(()=>[i.open,i.source?.name],([K])=>{K&&S()}),La(S),(K,B)=>{const Q=g("a-alert"),ke=g("a-input-password"),se=g("a-input"),F=g("a-form-item"),E=g("a-checkbox"),fe=g("a-form"),ee=g("a-empty"),te=g("a-button"),P=g("a-space"),ae=g("a-drawer");return s(),A(ae,{open:l.open,title:h.value,placement:"right",width:"520","destroy-on-close":!0,onClose:M},{footer:a(()=>[n(P,null,{default:a(()=>[n(te,{onClick:M},{default:a(()=>[...B[2]||(B[2]=[r("取消",-1)])]),_:1}),n(te,{type:"primary",disabled:!D.value,onClick:N},{default:a(()=>[...B[3]||(B[3]=[r(" 开始采集 ",-1)])]),_:1},8,["disabled"])]),_:1})]),default:a(()=>[n(Q,{type:"info","show-icon":"",message:"凭据仅用于本次官方 API 采集",description:"access token 与 App Key 不会写入本地配置、数据中台、审计日志或同步水位。提交后表单会立即清空。",style:{"margin-bottom":"16px"}}),$.value?(s(),A(fe,{key:0,layout:"vertical",model:I},{default:a(()=>[(s(!0),C(J,null,ye($.value.fields,q=>(s(),A(F,{key:q.key,label:q.label,required:q.required===!0},{default:a(()=>[q.secret?(s(),A(ke,{key:0,value:I[q.key],"onUpdate:value":R=>I[q.key]=R,"data-field":q.key,placeholder:q.placeholder,autocomplete:"new-password",spellcheck:!1},null,8,["value","onUpdate:value","data-field","placeholder"])):(s(),A(se,{key:1,value:I[q.key],"onUpdate:value":R=>I[q.key]=R,"data-field":q.key,placeholder:q.placeholder,autocomplete:"off",spellcheck:!1},null,8,["value","onUpdate:value","data-field","placeholder"]))]),_:2},1032,["label","required"]))),128)),n(F,{label:"扫描范围"},{default:a(()=>[n(E,{checked:I.recursive,"onUpdate:checked":B[0]||(B[0]=q=>I.recursive=q)},{default:a(()=>[...B[1]||(B[1]=[r(" 递归采集子目录 ",-1)])]),_:1},8,["checked"])]),_:1}),l.source?.name==="doc-wps"?(s(),A(Q,{key:0,type:"warning","show-icon":"",message:"App ID 与 App Key 必须同时填写或同时留空"})):v("",!0)]),_:1},8,["model"])):(s(),A(ee,{key:1,description:"该来源没有可用的 OAuth 采集配置"}))]),_:1},8,["open","title"])}}},Un={key:0},Mn={key:0,class:"probe-result"},Bn={key:0,class:"kv"},Nn={key:0,class:"kv"},zn={key:1},Hn={key:2},Kn={key:2,style:{"margin-top":"12px"}},Fn={__name:"WechatWizard",props:{open:{type:Boolean,default:!1}},emits:["update:open","registered"],setup(l,{emit:_}){const i=l,k=_,I=lt(),$=L(1),h=L(null),D=ge({uin:"",dbPath:"",wechatDataPath:"",forceProvider:null}),S=L(null),M=ge({probe:!1,register:!1}),N=pe(()=>$.value===1?"探测设备 + WeChat 版本,确认可用的 keyProvider":$.value===2?"填 UIN 与已 adb-pull 的本地路径":"bootstrap 注册 + 持久化 wechat-accounts.json"),K=pe(()=>{const F=S.value;return F?F.reason==="ENV_UNSUPPORTED"?F.message||"env-probe 拒绝 — 请回到第 1 步看 reasons":F.reason==="MD5_NEEDS_WECHAT_DATA_PATH"?"MD5 路径需要 wechatDataPath":F.reason==="FRIDA_NEEDS_WXID"?"Frida 路径需要 account.uin / wxid":F.reason==="ADAPTER_CTOR_FAILED"?`Adapter ctor 抛错: ${F.message||""}`:F.reason==="BOOTSTRAP_THREW"?`Bootstrap 抛错: ${F.message||""}`:F.reason==="UIN_REQUIRED"?"UIN 不能为空":F.message||F.reason||"注册失败":"未知错误"});async function B(){M.probe=!0;try{h.value=await I.probeWechatEnv()}catch(F){h.value={ok:!1,suggestedKeyProvider:"unsupported",reasons:[F?.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{M.probe=!1}}async function Q(){M.register=!0;try{S.value=await I.registerWechat({account:{uin:D.uin},dbPath:D.dbPath||null,wechatDataPath:D.wechatDataPath||null,keyProviderOverride:D.forceProvider}),$.value=3,S.value?.ok&&k("registered",{uin:D.uin,chosenKeyProvider:S.value.chosenKeyProvider})}catch(F){S.value={ok:!1,reason:"BOOTSTRAP_THREW",message:F?.message||"RPC failed"},$.value=3}finally{M.register=!1}}function ke(){$.value=1,h.value=null,D.uin="",D.dbPath="",D.wechatDataPath="",D.forceProvider=null,S.value=null}function se(){ke(),k("update:open",!1)}return ot(()=>i.open,F=>{F&&ke()}),(F,E)=>{const fe=g("a-alert"),ee=g("a-button"),te=g("a-tag"),P=g("a-descriptions-item"),ae=g("a-descriptions"),q=g("a-input"),R=g("a-form-item"),_e=g("a-radio"),be=g("a-radio-group"),re=g("a-form"),T=g("a-result"),f=g("a-space"),ne=g("a-drawer");return s(),A(ne,{open:l.open,title:"添加 WeChat 账号",placement:"right",width:640,"destroy-on-close":!0,"onUpdate:open":E[8]||(E[8]=U=>k("update:open",U)),onClose:se},{footer:a(()=>[n(f,{style:{float:"right"}},{default:a(()=>[$.value>1&&$.value<3?(s(),A(ee,{key:0,onClick:E[6]||(E[6]=U=>$.value=$.value-1)},{default:a(()=>[...E[21]||(E[21]=[r("上一步",-1)])]),_:1})):v("",!0),n(ee,{onClick:se},{default:a(()=>[...E[22]||(E[22]=[r("取消",-1)])]),_:1}),$.value===1?(s(),A(ee,{key:1,type:"primary",disabled:!h.value||h.value.suggestedKeyProvider==="unsupported",onClick:E[7]||(E[7]=U=>$.value=2)},{default:a(()=>[...E[23]||(E[23]=[r(" 下一步 ",-1)])]),_:1},8,["disabled"])):v("",!0),$.value===2?(s(),A(ee,{key:2,type:"primary",loading:M.register,disabled:!D.uin||h.value?.suggestedKeyProvider==="md5"&&!D.wechatDataPath,onClick:Q},{default:a(()=>[...E[24]||(E[24]=[r(" 注册 ",-1)])]),_:1},8,["loading","disabled"])):v("",!0)]),_:1})]),default:a(()=>[n(fe,{message:`第 ${$.value} / 3 步`,description:N.value,type:"info","show-icon":"",style:{"margin-bottom":"16px"}},null,8,["message","description"]),$.value===1?(s(),C("div",Un,[E[11]||(E[11]=y("p",{class:"hint"},[r(" 请用 USB 连接 Android 设备(开启 USB 调试)。WeChat ≥ 8.0 需要 root + frida-server。 探测仅读取 "),y("code",null,"adb shell"),r(" 命令输出,不写入任何东西。 ")],-1)),n(ee,{type:"primary",loading:M.probe,onClick:B,style:{"margin-bottom":"12px"}},{default:a(()=>[...E[9]||(E[9]=[r(" 🔍 探测环境 ",-1)])]),_:1},8,["loading"]),h.value?(s(),C("div",Mn,[n(ae,{column:1,size:"small",bordered:""},{default:a(()=>[n(P,{label:"suggestedKeyProvider"},{default:a(()=>[n(te,{color:h.value.suggestedKeyProvider==="unsupported"?"red":"green"},{default:a(()=>[r(c(h.value.suggestedKeyProvider),1)]),_:1},8,["color"])]),_:1}),n(P,{label:"adb 设备"},{default:a(()=>[n(te,{color:h.value.device.reachable?"green":"red"},{default:a(()=>[r(c(h.value.device.reachable?"已连接":"未连接"),1)]),_:1},8,["color"]),h.value.device.serial?(s(),C("span",Bn,c(h.value.device.serial)+" · abi="+c(h.value.device.abi||"?"),1)):v("",!0)]),_:1}),n(P,{label:"root"},{default:a(()=>[n(te,{color:h.value.root.detected?"green":"default"},{default:a(()=>[r(c(h.value.root.detected?"已 root":"未 root"),1)]),_:1},8,["color"]),h.value.root.magiskInstalled?(s(),A(te,{key:0,color:"blue"},{default:a(()=>[...E[10]||(E[10]=[r("Magisk",-1)])]),_:1})):v("",!0)]),_:1}),n(P,{label:"frida-server"},{default:a(()=>[n(te,{color:h.value.frida.serverRunning?"green":"default"},{default:a(()=>[r(c(h.value.frida.serverRunning?"运行中":"未运行"),1)]),_:1},8,["color"]),h.value.frida.port?(s(),C("span",Nn," :"+c(h.value.frida.port),1)):v("",!0)]),_:1}),n(P,{label:"WeChat"},{default:a(()=>[n(te,{color:h.value.wechat.installed?"green":"red"},{default:a(()=>[r(c(h.value.wechat.installed?h.value.wechat.versionName:"未安装"),1)]),_:1},8,["color"])]),_:1})]),_:1}),(s(!0),C(J,null,ye(h.value.reasons||[],U=>(s(),A(fe,{key:U,message:U,type:"info","show-icon":"",style:{"margin-top":"8px"}},null,8,["message"]))),128)),(s(!0),C(J,null,ye(h.value.warnings||[],U=>(s(),A(fe,{key:U,message:U,type:"warning","show-icon":"",style:{"margin-top":"8px"}},null,8,["message"]))),128))])):v("",!0)])):v("",!0),$.value===2?(s(),C("div",zn,[E[16]||(E[16]=y("p",{class:"hint"},[r(" 填写从 adb pull 拉下来的本地路径。MD5 路径(7.x)需要 "),y("code",null,"wechatDataPath"),r("; Frida 路径(8.0+)需要设备运行 frida-server。 ")],-1)),n(re,{layout:"vertical"},{default:a(()=>[n(R,{label:"UIN / wxid",required:""},{default:a(()=>[n(q,{value:D.uin,"onUpdate:value":E[0]||(E[0]=U=>D.uin=U),placeholder:"WeChat 数字 UIN 或 wxid"},null,8,["value"])]),_:1}),n(R,{label:"dbPath(已拉下的 EnMicroMsg.db 本地路径)"},{default:a(()=>[n(q,{value:D.dbPath,"onUpdate:value":E[1]||(E[1]=U=>D.dbPath=U),placeholder:"C:\\\\users\\\\me\\\\pull\\\\EnMicroMsg.db"},null,8,["value"])]),_:1}),n(R,{label:"wechatDataPath(已拉下的 /data/data/com.tencent.mm/ 目录)"},{default:a(()=>[n(q,{value:D.wechatDataPath,"onUpdate:value":E[2]||(E[2]=U=>D.wechatDataPath=U),placeholder:"C:\\\\users\\\\me\\\\pull\\\\com.tencent.mm"},null,8,["value"]),E[12]||(E[12]=y("div",{class:"hint"},"MD5 路径必填;Frida 路径可空",-1))]),_:1}),n(R,{label:"强制 keyProvider(覆盖 env-probe 建议)"},{default:a(()=>[n(be,{value:D.forceProvider,"onUpdate:value":E[3]||(E[3]=U=>D.forceProvider=U)},{default:a(()=>[n(_e,{value:null},{default:a(()=>[...E[13]||(E[13]=[r("自动(推荐)",-1)])]),_:1}),n(_e,{value:"md5"},{default:a(()=>[...E[14]||(E[14]=[r("md5",-1)])]),_:1}),n(_e,{value:"frida"},{default:a(()=>[...E[15]||(E[15]=[r("frida",-1)])]),_:1})]),_:1},8,["value"])]),_:1})]),_:1})])):v("",!0),$.value===3?(s(),C("div",Hn,[S.value?.ok?(s(),A(T,{key:0,status:"success",title:`WeChat 已接入 (uin=${D.uin})`,"sub-title":`provider=${S.value.chosenKeyProvider} · sensitivity=${S.value.sensitivity}`},{extra:a(()=>[n(ee,{type:"primary",onClick:se},{default:a(()=>[...E[17]||(E[17]=[r("完成",-1)])]),_:1}),n(ee,{onClick:ke},{default:a(()=>[...E[18]||(E[18]=[r("再加一个",-1)])]),_:1})]),_:1},8,["title","sub-title"])):(s(),A(T,{key:1,status:"error",title:"接入失败","sub-title":K.value},Ua({_:2},[S.value?.probe?.reasons?.length?{name:"extra",fn:a(()=>[n(ee,{onClick:E[4]||(E[4]=U=>$.value=1)},{default:a(()=>[...E[19]||(E[19]=[r("返回检查环境",-1)])]),_:1}),n(ee,{onClick:E[5]||(E[5]=U=>$.value=2)},{default:a(()=>[...E[20]||(E[20]=[r("返回修改路径",-1)])]),_:1})]),key:"0"}:void 0]),1032,["sub-title"])),S.value?.probe?.reasons?.length?(s(),C("div",Kn,[(s(!0),C(J,null,ye(S.value.probe.reasons,U=>(s(),A(fe,{key:U,message:U,type:"warning","show-icon":"",style:{"margin-bottom":"4px"}},null,8,["message"]))),128))])):v("",!0)])):v("",!0)]),_:1},8,["open"])}}},qn=st(Fn,[["__scopeId","data-v-c7327e24"]]),jn={class:"pdh-page"},Wn={class:"pdh-header"},Yn={class:"kv"},Vn={key:0,class:"kv"},Qn={key:1,class:"kv"},Gn={class:"kv"},Xn={key:0,class:"kv hint"},Zn={style:{"margin-top":"12px",display:"flex","justify-content":"space-between","align-items":"center"}},Jn={key:0,style:{"margin-top":"12px"}},eo={key:1,style:{"margin-top":"12px"}},to={class:"answer"},ao={style:{"margin-top":"8px","font-size":"12px",color:"var(--text-color-secondary, #888)"}},no={key:2,style:{"margin-top":"8px"}},oo={style:{display:"flex","align-items":"center",gap:"8px"}},lo={class:"hint",style:{"margin-top":"4px"}},so={key:0,style:{"margin-top":"16px"}},ro={class:"json-pre",style:{"max-height":"300px",overflow:"auto"}},io={key:0,style:{"margin-top":"8px"}},uo={key:0,style:{"margin-top":"4px",opacity:"0.85"}},co={key:1,style:{"margin-top":"4px",color:"#ffb3b3"}},po={style:{color:"#999","font-size":"12px","margin-left":"2px"}},fo={key:0,style:{color:"#8c8c8c","font-size":"12px","margin-top":"2px","line-height":"1.4"}},mo={style:{"min-width":"220px"}},yo={style:{color:"#999","font-size":"12px","margin-left":"4px"}},vo={key:2,style:{"margin-top":"12px"}},go={class:"kv",style:{"margin-bottom":"4px"}},ko={key:0,style:{color:"#faad14"}},_o={key:2,class:"kv hint"},bo={key:3,class:"kv hint",style:{color:"#ff4d4f"}},Ao={key:3,style:{"margin-top":"12px"}},Co={key:2,style:{"margin-top":"8px"}},ho={key:1},wo={style:{"margin-left":"8px"}},Io={key:3,class:"json-pre"},Eo={style:{"margin-left":"6px"}},Oo={key:0,style:{"margin-left":"6px"}},So={key:0,class:"hint",style:{"margin-top":"4px"}},Do={key:0,style:{"margin-top":"8px"}},Po={style:{"margin-bottom":"12px"}},$o={class:"hint"},To={class:"kv"},xo={class:"kv",style:{"margin-top":"4px"}},Ro={class:"kv"},Lo={key:0,class:"hint",style:{"margin-top":"4px"}},Uo={key:1,style:{"font-size":"11px"}},Mo={style:{"font-weight":"600","margin-bottom":"8px"}},Bo={style:{margin:"0","padding-left":"20px","line-height":"1.9"}},No={key:0,style:{"margin-top":"6px","font-size":"12px",color:"#52c41a"}},zo={style:{"font-size":"12px",color:"#999"}},Mt="pdh.syncIncludeOptions.v1",Ho={__name:"PersonalDataHub",setup(l,{expose:_}){const i=lt(),k=L(null),I=L(null),$=L([]),h=L({}),D=L(""),S=L(null),M=L(""),N=L(!1),K=L(!1),B=L([]),Q=L(null);function ke(){try{const e=localStorage.getItem(Mt);if(!e)return Ut();const t=JSON.parse(e);return{"system-data-android":{...Ht["system-data-android"],...t["system-data-android"]||{}}}}catch{return Ut()}}const se=ge(ke());function F(){try{localStorage.setItem(Mt,JSON.stringify(se)),console.log("[PDH-include] persisted:",JSON.stringify(se))}catch(e){console.warn("[PDH-include] persist failed:",e&&e.message)}}const E=L({});function fe(e){return Object.prototype.hasOwnProperty.call(We,e)}function ee(e,t,o){const d=o&&o.target?!!o.target.checked:!!o;console.log("[PDH-include] toggle",e,t,"=>",d),se[e]||(se[e]={}),se[e][t]=d,F()}const te=L(!1),P=ge({provider:"qq",email:"",authCode:"",host:"",port:993,pdfPasswordHints:{idCardLast6:"",phoneLast6:"",cardLast6:""}}),ae=L(null),q=L(!1),R=L(null),_e=L(!1),be=L(null),re=L(null),T=[{name:"analysis.spending",label:"消费分析",icon:qa,description:"总支出 / 商家排行 / 月度趋势"},{name:"analysis.relations",label:"人际关系",icon:ja,description:"与每个人的互动频率 / 主动比例"},{name:"analysis.footprint",label:"足迹",icon:Wa,description:"常去地点 / 出行模式"},{name:"analysis.interests",label:"兴趣画像",icon:Ya,description:"从购买 / 浏览 / 收藏抽兴趣"},{name:"analysis.timeline",label:"时间线",icon:Va,description:"跨源事件串成故事"}],f=L(!1),ne=L([]),U=ge({queue:{pending:0},mergeGroups:0,reviewQueue:0}),ie=L(!1),Ne=L([]);function Ye(e){e?.unregistered?p.success(`已注销 ${e.vendor}`):p.success(`已接入 ${e.vendor}`),X()}const $e=L(!1);function Ve(e){p.success(`WeChat 已接入 (uin=${e.uin}, provider=${e.chosenKeyProvider})`),X()}const Se=L(!1),Y=ge({email:"",zipPassword:"",filePath:""}),G=L(null),O=ge({active:!1,batchMode:!1,adapter:"",phase:"",mailbox:"",current:0,total:0,attempt:1,errorMessage:""}),m=ge({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}),ze=L(null);function He(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 Qe(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 j(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 Ge(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 ut(){if(!m.xhsAdbSync){m.xhsAdbSync=!0;try{const e=await i.xhsAdbSync({});if(!e||!e.ok){const b=e&&e.reason||"SYNC_FAILED",w=Ge(b),z=e&&e.message||"";p.error({content:`Xhs ADB 同步失败:${w}`,description:z,duration:8});return}const t=e.report||{},o=t.xhs||{},d=o.eventCounts||{};o.meFetchFailed?p.warning({content:"Xhs 同步未拉到 user_id — /user/me 返空 data",description:`lastErrorCode=${o.lastErrorCode}, ${o.lastErrorMessage||""}。可能 cookie 已过期或 web_session 缺失,请在手机重新登录。`,duration:10}):o.lastErrorCode===461?p.warning({content:"Xhs X-S 签名被拒 (461) — 部分接口未抓到",description:`命中 ${d.total||0} events。我们的 X-S 算法 best-effort (~60% GET / <30% POST hit),461 在 POST 较常见。稍后重试 (X-S 算法可能 4-8 周 rotate)。`,duration:10}):o.lastErrorCode?p.warning({content:`Xhs 同步部分完成 (${d.total||0} events)`,description:`lastErrorCode=${o.lastErrorCode}, ${o.lastErrorMessage||""}`,duration:8}):p.success(`Xhs 同步成功:notes=${d.note||0} / liked=${d.liked||0} / follow=${d.follow||0} (total=${d.total||0})${o.nickname?" ["+o.nickname+"]":""}`),Q.value=t,X()}catch(e){p.error({content:"Xhs ADB 同步异常",description:e&&e.message?e.message:String(e),duration:8})}finally{m.xhsAdbSync=!1}}}function Kt(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 dt(){if(!m.toutiaoAdbSync){m.toutiaoAdbSync=!0;try{const e=await i.toutiaoAdbSync({});if(!e||!e.ok){const b=e&&e.reason||"SYNC_FAILED",w=Kt(b),z=e&&e.message||"";p.error({content:`Toutiao ADB 同步失败:${w}`,description:z,duration:8});return}const t=e.report||{},o=t.toutiao||{},d=o.eventCounts||{};o.profileFetchFailed?p.warning({content:"Toutiao 同步未拉到 user_id — passport/info/v2 返失败",description:`lastErrorCode=${o.lastErrorCode}, ${o.lastErrorMessage||""}。可能 cookie 已过期或 sessionid 缺失,请在手机重新登录。`,duration:10}):o.signProviderUsed==="none"&&d.feed===0&&d.collection===0&&d.search===0?p.warning({content:`Toutiao 同步仅获取了 profile (${d.profile||0} event)`,description:"当前 web-shell 上下文不支持 _signature 签名(仅 desktop app 提供 ToutiaoSignBridge)。打开桌面 app 同步可获取 feed / collection / search。",duration:12}):o.lastErrorCode?p.warning({content:`Toutiao 同步部分完成 (${d.total||0} events)`,description:`lastErrorCode=${o.lastErrorCode}, ${o.lastErrorMessage||""}`,duration:8}):p.success(`Toutiao 同步成功:profile=${d.profile||0} / feed=${d.feed||0} / collection=${d.collection||0} / search=${d.search||0} (total=${d.total||0})${o.nickname?" ["+o.nickname+"]":""}`),Q.value=t,X()}catch(e){p.error({content:"Toutiao ADB 同步异常",description:e&&e.message?e.message:String(e),duration:8})}finally{m.toutiaoAdbSync=!1}}}function Ft(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 ct(){if(!m.kuaishouAdbSync){m.kuaishouAdbSync=!0;try{const e=await i.kuaishouAdbSync({});if(!e||!e.ok){const b=e&&e.reason||"SYNC_FAILED",w=Ft(b),z=e&&e.message||"";p.error({content:`Kuaishou ADB 同步失败:${w}`,description:z,duration:8});return}const t=e.report||{},o=t.kuaishou||{},d=o.eventCounts||{};o.profileFetchFailed?p.warning({content:"Kuaishou 同步 cookie 缺 api_ph payload",description:`lastErrorCode=${o.lastErrorCode}, ${o.lastErrorMessage||""}。可能 cookie 已过期或登录态不完整(仅有 userId 但没有 api_ph),请在手机重新登录。`,duration:10}):o.signProviderUsed==="none"&&d.watch===0&&d.collect===0&&d.search===0?p.warning({content:`Kuaishou 同步仅获取了 profile (${d.profile||0} event)`,description:"当前 web-shell 上下文不支持 __NS_sig3 签名(仅 desktop app 提供 KuaishouSignBridge)。打开桌面 app 同步可获取 watch / collect / search。",duration:12}):o.lastErrorCode?p.warning({content:`Kuaishou 同步部分完成 (${d.total||0} events)`,description:`lastErrorCode=${o.lastErrorCode}, ${o.lastErrorMessage||""}`,duration:8}):p.success(`Kuaishou 同步成功:profile=${d.profile||0} / watch=${d.watch||0} / collect=${d.collect||0} / search=${d.search||0} (total=${d.total||0})${o.nickname?" ["+o.nickname+"]":""}`),Q.value=t,X()}catch(e){p.error({content:"Kuaishou ADB 同步异常",description:e&&e.message?e.message:String(e),duration:8})}finally{m.kuaishouAdbSync=!1}}}async function qt(){if(!m.bridgeDoctor){m.bridgeDoctor=!0;try{const e=await i.bridgeDoctor();if(!e||!e.ok){const W=e&&e.reason||"BRIDGE_DOCTOR_FAILED",oe=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:oe,duration:8});return}const t=e.results||{},o=["xhs","toutiao","kuaishou"],d=o.filter(W=>t[W]&&t[W].anyCandidatePresent).length,b=o.length,w=[];for(const W of o){const oe=t[W];if(!oe||!oe.ok){w.push(`${W}: ✗ ${oe&&oe.error?oe.error:"unknown error"}`);continue}const he=oe.candidates||{},Ae=Object.keys(he).filter(Ue=>he[Ue]===!0),Z=Object.keys(he).length,ve=oe.anyCandidatePresent?"✓":"⚠",Je=oe.anyCandidatePresent?`${Ae.length}/${Z} candidate(s): ${Ae.join(", ")}`:`0/${Z} candidates (rotation? 需更新 buildSignScript)`;w.push(`${W}: ${ve} ${Je} (warmUp=${oe.warmUpMs}ms, probe=${oe.probeMs}ms)`)}(d===b?p.success:d===0?p.error:p.warning)({content:`Bridge doctor: ${d}/${b} 平台签名可用`,description:w.join(`
3
+ `),duration:15}),ze.value=e}catch(e){p.error({content:"Bridge doctor 异常",description:e&&e.message?e.message:String(e),duration:8})}finally{m.bridgeDoctor=!1}}}async function pt(){if(!m.weiboAdbSync){m.weiboAdbSync=!0;try{const e=await i.weiboAdbSync({});if(!e||!e.ok){const b=e&&e.reason||"SYNC_FAILED",w=j(b),z=e&&e.message||"";p.error({content:`Weibo ADB 同步失败:${w}`,description:z,duration:8});return}const t=e.report||{},o=t.weibo||{},d=o.eventCounts||{};o.uidFetchFailed?p.warning({content:"Weibo 同步未拉到 UID — /api/config 返 login=false",description:`lastErrorCode=${o.lastErrorCode}, ${o.lastErrorMessage||""}。可能 cookie 已过期 (请在手机重新登录) 或微博触发 anti-bot redirect。事件数 0,未入 vault。`,duration:10}):o.lastErrorCode?p.warning({content:`Weibo 同步部分完成 (${d.total||0} events)`,description:`lastErrorCode=${o.lastErrorCode}, ${o.lastErrorMessage||""} — 部分接口受反爬限制,稍后重试可补齐`,duration:8}):p.success(`Weibo 同步成功:posts=${d.post||0} / fav=${d.favourite||0} / follow=${d.follow||0} (total=${d.total||0})`),Q.value=t,X()}catch(e){p.error({content:"Weibo ADB 同步异常",description:e&&e.message?e.message:String(e),duration:8})}finally{m.weiboAdbSync=!1}}}async function ft(){if(!m.douyinAdbSync){m.douyinAdbSync=!0;try{const e=await i.douyinAdbSync({});if(!e||!e.ok){const w=e&&e.reason||"SYNC_FAILED",z=Qe(w),W=e&&e.message||"";p.error({content:`Douyin ADB 同步失败:${z}`,description:W,duration:8});return}const t=e.report||{},o=t.douyin||{},d=o.eventCounts||{},b=o.parserDiagnostic||{};if(!b.hadMsgTable&&!b.hadSimpleUserTable)p.warning({content:"Douyin 同步完成但 0 events",description:"msg 和 SIMPLE_USER 表都未在 IM 数据库中找到 — 抖音 App 版本可能用了不同 schema",duration:10});else if(!b.hadMsgTable||!b.hadSimpleUserTable){const w=[];b.hadMsgTable||w.push("msg (私信)"),b.hadSimpleUserTable||w.push("SIMPLE_USER (联系人)"),p.warning({content:`Douyin 部分同步:msg=${d.message||0} contacts=${d.contact||0}`,description:`${w.join("、")} 表未找到,未入库部分数据`,duration:8})}else p.success(`Douyin 同步成功:messages=${d.message||0} contacts=${d.contact||0} (total=${d.total||0})`);Q.value=t,X()}catch(e){p.error({content:"Douyin ADB 同步异常",description:e&&e.message?e.message:String(e),duration:8})}finally{m.douyinAdbSync=!1}}}async function jt(){if(!m.bilibiliAdbDoctor){m.bilibiliAdbDoctor=!0;try{const e=await i.bilibiliAdbDoctor();if(!e||!e.ok){const o=e&&e.reason||"PROBE_FAILED",d=He(o),b=e&&e.message||"";p.error({content:`Bilibili 诊断失败:${d}`,description:b,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{m.bilibiliAdbDoctor=!1}}}async function mt(){if(!m.bilibiliAdbSync){m.bilibiliAdbSync=!0;try{const e=await i.bilibiliAdbSync({});if(!e||!e.ok){const b=e&&e.reason||"SYNC_FAILED",w=He(b),z=e&&e.message||"";p.error({content:`Bilibili ADB 同步失败:${w}`,description:z,duration:8});return}const t=e.report||{},o=t.bilibili||{},d=o.eventCounts||{};o.lastErrorCode?p.warning({content:`Bilibili 同步部分完成 (${d.total||0} events)`,description:`lastErrorCode=${o.lastErrorCode}, ${o.lastErrorMessage||""} — 部分接口受反爬限制,稍后重试可补齐`,duration:8}):p.success(`Bilibili 同步成功:history=${d.history||0} / fav=${d.favourite||0} / dyn=${d.dynamic||0} / follow=${d.follow||0} (total=${d.total||0})`),Q.value=t,X()}catch(e){p.error({content:"Bilibili ADB 同步异常",description:e&&e.message?e.message:String(e),duration:8})}finally{m.bilibiliAdbSync=!1}}}const Wt=[{title:"名称",dataIndex:"name",key:"name",width:140},{title:"版本",dataIndex:"version",key:"version",width:70},{title:"就绪状态",key:"readiness",width:220},{title:"能力",key:"capabilities"},{title:"敏感度",key:"sensitivity",width:140},{title:"操作",key:"actions",width:160,align:"right"}];function de(e){return h.value[e]||null}function Te(e){const t=$.value.find(d=>d.name===e)||{},o=de(e)||{};return{...t,...o,name:e,capabilities:o.capabilities||t.capabilities||[]}}const Ce=L(!1),V=L(null);function Xe(e){V.value=Te(e),Ce.value=!0}async function Yt(){const e=V.value?.name;await X(),e&&(V.value=Te(e))}const Vt={ready:"green",needs_setup:"orange",unavailable:"default",error:"red"};function yt(e){return Vt[e]||"default"}const Qt={ready:"可采集",needs_setup:"待配置",unavailable:"不支持",error:"异常"};function vt(e){return e?Qt[e.status]||e.status:"检测中"}const Gt={local:"本机直采",snapshot:"需手机采集",device:"需 root/本地解密",credential:"需登录授权",platform:"平台限制"};function gt(e){return Gt[e]||e||""}const Xt=new Set(["wechat-pc","qq-pc","dingtalk-pc","feishu-pc","messaging-whatsapp"]),Zt=new Set(["alipay-bill"]),Jt=Object.freeze({"social-bilibili":mt,"social-weibo":pt,"social-douyin":ft,"social-xiaohongshu":ut,"social-toutiao":dt,"social-kuaishou":ct});function kt(e){return Be(e)}function _t(e){return ln(e)}function ea(e){return sn(e)}function ta(e){return rn(e)}async function bt(e){const t=Te(e),o=kt(t);if(o==="file"){const d=await i.pickFile({title:`选择 ${t&&t.guide?t.guide.displayName:e} 的数据文件`});if(!d){p.info("已取消选择文件");return}let b,w;Xt.has(e)?b=window.prompt("如数据库已解密为明文,直接确定即可;若为加密库,请粘贴密钥或输入密钥文件路径:")||void 0:Zt.has(e)&&/\.zip$/i.test(d)&&(w=window.prompt("请输入支付宝账单 ZIP 密码;如该 ZIP 未加密可直接确定:")||void 0),await na(e,d,{key:b,zipPassword:w})}else if(o==="directory"){const d=Array.isArray(t?.capabilities)?t.capabilities:[],b=d.includes("sync:scan-directory"),w=!b&&d.includes("sync:profile-directory"),z=b?"扫描":w?"配置":"导出",W=await fn({pickDirectoryResult:Z=>i.pickDirectoryResult(Z),prompt:Z=>window.prompt(Z),title:`选择 ${t&&t.guide?t.guide.displayName:e} 的本地${z}目录`,directoryKind:z});if(W.status==="cancelled"){p.info(W.manual?"已取消输入主机目录":"已取消选择目录");return}if(W.status==="invalid"){p.warning("请输入 ChainlessChain 主机上的绝对目录路径;相对路径不会用于采集");return}const oe=W.path;W.manual&&p.info("将从运行 ChainlessChain 的主机读取手工指定目录");const he=w||b?null:(window.prompt("请输入一个稳定的本地账号标识,用于隔离同步水位(原文不会写入数据中台):")||"").trim(),Ae=dn(t,oe,he);if(!Ae){p.info("已取消:需要本地账号标识才能安全隔离同步水位");return}await oa(e,Ae)}else if(o==="cookie"){const d=window.prompt("粘贴登录态 Cookie(在已登录的网页 DevTools → Application → Cookies 复制,或整条 Cookie 请求头):");if(!d||!d.trim()){p.info("已取消");return}const b=window.prompt("输入该平台账号的稳定标识(若接口需要用户名/UID,请填写真实平台标识;否则可用本地别名。只会持久化其哈希同步水位):");if(!b||!b.trim()){p.info("已取消:需要账号标识才能安全隔离同步水位");return}let w;if(it(t)&&(w=window.prompt("粘贴本次授权会话中捕获的滴滴订单接口 HTTPS URL(仅允许 xiaojukeji.com 官方域名,不会保存):"),!w||!w.trim())){p.info("已取消:该数据源需要本次使用的 HTTPS 订单接口");return}const z=un(t,d,b,w);if(!z){p.error("采集参数无效:请检查 Cookie、账号标识和 HTTPS 接口");return}await At(e,z)}else if(o==="oauth")be.value=t,_e.value=!0;else if(o==="adb"){const d=Jt[e];if(!d){Xe(e);return}m.sync[e]=!0;try{await d()}finally{m.sync[e]=!1}}else o==="sync"?(await fa(e))?.completed&&(Ce.value=!1):Xe(e)}async function aa({name:e,options:t}){await At(e,t)}async function At(e,t){m.sync[e]=!0,Re(e);try{let o;typeof i.syncAdapterStream=="function"?o=await i.syncAdapterStream(e,t,Le):o=await i.syncAdapter(e,t),Ke(e,o,"采集").completed&&(Ce.value=!1),await X()}catch(o){p.error(`采集 ${e} 失败: ${o.message}`)}finally{m.sync[e]=!1,O.active=!1}}async function na(e,t,o={}){m.sync[e]=!0,Re(e);try{const d={inputPath:t};o.key&&(d.key=o.key),o.zipPassword&&(d.zipPassword=o.zipPassword);let b;typeof i.syncAdapterStream=="function"?b=await i.syncAdapterStream(e,d,Le):b=await i.syncAdapter(e,d),Ke(e,b,"采集").completed&&(Ce.value=!1),await X()}catch(d){p.error(`采集 ${e} 失败: ${d.message}`)}finally{m.sync[e]=!1,O.active=!1}}async function oa(e,t){m.sync[e]=!0,Re(e);try{const o={...t};let d;typeof i.syncAdapterStream=="function"?d=await i.syncAdapterStream(e,o,Le):d=await i.syncAdapter(e,o),Ke(e,d,"采集").completed&&(Ce.value=!1),await X()}catch(o){p.error(`采集 ${e} 失败: ${o.message}`)}finally{m.sync[e]=!1,O.active=!1}}const xe=pe(()=>{const e=$.value||[];if(!e.length)return null;let t=0;for(const o of e){const d=de(o.name);d&&d.ready&&(t+=1)}return{ready:t,total:e.length}}),la=[{title:"时间",key:"at",dataIndex:"at",width:170},{title:"动作",dataIndex:"action",key:"action",width:200},{title:"详情",key:"details"}],sa=[{title:"日期",key:"occurredAt",width:100},{title:"描述",dataIndex:"description",key:"description"},{title:"金额",key:"amount",width:140,align:"right"}];function ra(e){return e==="high"?"red":e==="medium"?"orange":"default"}function ia(e){if(!e)return"";if(e.status==="skipped")return`${e.skipReason||"NOT_READY"}:${e.skipMessage||"来源当前未就绪"}`;const t=e.entityCounts||{},o=`events=${t.events??0} persons=${t.persons??0} places=${t.places??0} items=${t.items??0} topics=${t.topics??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?`${o} · 错误: ${e.error}`:o}function ua(e){return Ee(e).level}function da(e){const t=Ee(e),o=e?.adapter||"未知来源",d={success:"成功",empty:"无新数据",partial:"部分有效",skipped:"已跳过",failed:"失败"}[t.kind];return`同步 ${o}: ${d}`}function Ke(e,t,o="同步"){const d=t&&typeof t=="object"?t:{adapter:e,status:"error",rawCount:0,invalidCount:0,entityCounts:{},error:"未收到有效同步报告"};Q.value=d;const b=Ee(d),w=d.adapter||e;if(b.kind==="failed")p.error(`${o} ${w} 失败:${b.error}`);else if(b.kind==="skipped")p.info(`${o}已跳过:${w},${b.skipMessage}`);else if(b.kind==="partial"){const z=b.watermarkDeferred?`本次入库 ${b.total} 条,但分页窗口尚未扫描完,水位未推进;扩大采集窗口后可安全续扫`:b.total>0?`入库 ${b.total} 条,${b.invalidCount} 条无效`:`读取 ${b.rawCount} 条,但没有形成有效数据`;p.warning(`${o}部分完成:${w},${z}`)}else b.kind==="empty"?p.info(`${o}完成:${w},未发现新数据`):p.success(`${o}完成:${w} 入库 ${b.total} 条`);return b}function ca(e){const t=vn(e);Q.value=gn(e);const o=`同步 ${t.totalReports} 个来源:${t.success} 成功,${t.empty} 无新数据,${t.partial} 部分有效,${t.skipped} 已跳过,${t.failed} 失败,共入库 ${t.totalEntities} 条`;return t.level==="error"?p.error(o):t.level==="warning"?p.warning(o):t.level==="info"?p.info(o):p.success(o),t}async function X(){m.refresh=!0;try{k.value=await i.health(),I.value=await i.stats(),$.value=await i.listAdapters();try{const e=await i.adapterReadiness(),t={};for(const o of Array.isArray(e)?e:[])t[o.name]=o;h.value=t}catch{}try{Ne.value=await i.listAichatAccounts()}catch{}}catch(e){p.error("刷新失败: "+e.message)}finally{m.refresh=!1}}async function Ct(){if(D.value.trim()){m.ask=!0,M.value="",S.value=null;try{S.value=await i.ask(D.value.trim(),{acceptNonLocal:N.value})}catch(e){M.value=e.message}finally{m.ask=!1}}}async function pa(){m.addMock=!0;try{await i.registerMock({count:30,seed:Date.now()%1e3}),await X(),p.success("MockAdapter 已注册(30 条 mock 数据 ready 同步)")}catch(e){p.error("注册失败: "+e.message)}finally{m.addMock=!1}}function Re(e="",t=!1){O.active=!0,O.batchMode=t,O.adapter=e,O.phase="starting",O.mailbox="",O.current=0,O.total=0,O.attempt=1,O.errorMessage=""}function Le(e){if(e){if(e.kind==="sync.batch.start"){O.batchMode=!0,O.adapter="(all)",O.phase="preparing",O.current=e.current||0,O.total=e.total||0;return}if(e.kind==="sync.batch.progress"){O.batchMode=!0,O.adapter=e.adapter||"(all)",O.phase=e.status||"completed",O.current=e.current||0,O.total=e.total||O.total;return}if(e.kind==="sync.batch.done"){O.batchMode=!0,O.adapter="(all)",O.phase="done",O.current=e.current||0,O.total=e.total||O.total;return}e.adapter&&(O.adapter=e.adapter),e.phase&&(O.phase=e.phase),O.batchMode||(typeof e.current=="number"&&(O.current=e.current),typeof e.total=="number"&&(O.total=e.total)),typeof e.attempt=="number"&&(O.attempt=e.attempt),e.mailbox&&(O.mailbox=e.mailbox),e.phase==="error"&&(O.errorMessage=e.message||"sync error")}}async function fa(e){m.sync[e]=!0,Re(e);try{const t=kn(e,se);let o;typeof i.syncAdapterStream=="function"?o=await i.syncAdapterStream(e,t,Le):o=await i.syncAdapter(e,t);const d=Ke(e,o);return await X(),d}catch(t){return p.error(`同步 ${e} 失败: ${t.message}`),null}finally{m.sync[e]=!1,O.active=!1}}async function ma(){m.syncAll=!0,Re("(all)",!0);try{const e=typeof i.syncAllStream=="function"?await i.syncAllStream({readyOnly:!0},Le):await i.syncAll({readyOnly:!0});ca(e),await X()}catch(e){p.error("同步失败: "+e.message)}finally{m.syncAll=!1,O.active=!1}}async function ya(e){try{await i.unregister(e),await X()}catch(t){p.error("移除失败: "+t.message)}}async function va(e){if(e){m.audit=!0;try{B.value=await i.recentAudit({limit:200})}catch(t){p.error("审计日志加载失败: "+t.message)}finally{m.audit=!1}}}const Fe=pe(()=>!(!P.email||!P.email.includes("@")||!P.authCode||P.authCode.length<4||P.provider==="custom"&&!P.host));function ga(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 ht(){P.provider="qq",P.email="",P.authCode="",P.host="",P.port=993,P.pdfPasswordHints={idCardLast6:"",phoneLast6:"",cardLast6:""},ae.value=null}function wt(){const e={provider:P.provider,email:P.email.trim(),authCode:P.authCode};return P.provider==="custom"&&(e.host=P.host.trim(),e.port=P.port||993,e.secure=!0),e}function ka(){const e={};for(const t of Object.keys(P.pdfPasswordHints)){const o=P.pdfPasswordHints[t];typeof o=="string"&&o.trim().length>0&&(e[t]=o.trim())}return Object.keys(e).length>0?e:null}async function _a(){if(Fe.value){m.testEmail=!0,ae.value=null;try{ae.value=await i.testEmailAuth(wt())}catch(e){ae.value={ok:!1,error:e.message}}finally{m.testEmail=!1}}}async function ba(){if(!(!Fe.value||!ae.value?.ok)){m.saveEmail=!0;try{const e={},t=ka();t&&(e.pdfPasswordHints=t),await i.registerEmail(wt(),e),p.success("邮箱账号已注册"),te.value=!1,ht(),await X()}catch(e){p.error("保存失败: "+e.message)}finally{m.saveEmail=!1}}}const It=pe(()=>!(!Y.email||!Y.email.includes("@")||!Y.filePath||Y.filePath.length<3));function Aa(){Y.email="",Y.zipPassword="",Y.filePath="",G.value=null}async function Ca(){if(It.value){m.importAlipay=!0,G.value=null;try{await i.registerAlipay({email:Y.email.trim(),zipPassword:Y.zipPassword||void 0});const t=/\.zip$/i.test(Y.filePath)?{zipPath:Y.filePath,zipPassword:Y.zipPassword||void 0}:{csvPath:Y.filePath};G.value=await i.importAlipayBill(t),G.value?.status==="ok"?(p.success(`导入成功 — ${G.value.entityCounts?.events||0} 笔交易`),await X()):p.error("导入失败: "+(G.value?.error||G.value?.status))}catch(e){G.value={status:"error",error:e.message},p.error("导入失败: "+e.message)}finally{m.importAlipay=!1}}}async function Et(e){if(e){m.eventDetail=!0,q.value=!0;try{R.value=await i.eventDetail(e)}catch(t){R.value=null,p.error("事件详情加载失败: "+t.message)}finally{m.eventDetail=!1}}}_({showEventDetail:Et});async function ha(e){m.skill=!0,re.value=null;try{re.value=await i.runSkill(e,{})}catch(t){p.error(`${e} 失败: ${t.message}`)}finally{m.skill=!1}}async function qe(){m.reviewQueue=!0;try{ne.value=await i.reviewQueueList(50);const e=await i.resolverStats();Object.assign(U,e)}catch(e){p.error("待消歧加载失败: "+e.message)}finally{m.reviewQueue=!1}}async function wa(){f.value=!0,await qe()}async function Ze(e,t){try{await i.reviewDecision(e,t),p.success(`已记录决策: ${t}`),await qe()}catch(o){p.error("决策失败: "+o.message)}}async function Ia(){m.resolverDrain=!0;try{const e=await i.resolverDrain(20);p.success(`drain 完成 — same=${e.same} different=${e.different} review=${e.review}`),await qe()}catch(e){p.error("drain 失败: "+e.message)}finally{m.resolverDrain=!1}}async function Ea(){try{const e=await i.resolverStats();Object.assign(U,e)}catch{}}return Ma(()=>{X(),Ea()}),(e,t)=>{const o=g("a-button"),d=g("a-badge"),b=g("a-space"),w=g("a-tag"),z=g("a-card"),W=g("a-col"),oe=g("a-row"),he=g("a-textarea"),Ae=g("a-checkbox"),Z=g("a-alert"),ve=g("a-divider"),Je=g("a-spin"),Ue=g("a-tooltip"),Oa=g("a-popover"),Sa=g("a-popconfirm"),et=g("a-table"),tt=g("a-empty"),Ot=g("a-progress"),De=g("a-select-option"),Da=g("a-select"),me=g("a-form-item"),we=g("a-input"),St=g("a-input-password"),Pa=g("a-input-number"),Dt=g("a-form"),Pe=g("a-drawer"),Me=g("a-descriptions-item"),$a=g("a-descriptions"),Ta=g("a-list-item-meta"),Pt=g("a-list-item"),$t=g("a-list"),xa=g("a-collapse-panel"),Ra=g("a-collapse");return s(),C("div",jn,[y("div",Wn,[t[33]||(t[33]=y("div",null,[y("h2",{class:"page-title"},"个人数据中台"),y("p",{class:"page-sub"}," 让数据回归个人 — 各 app 数据本地加密落盘,本地 LLM 跨源分析,零云端外传。 ")],-1)),n(b,null,{default:a(()=>[n(o,{loading:m.refresh,onClick:X},{icon:a(()=>[n(ue(Tt))]),default:a(()=>[t[30]||(t[30]=r(" 刷新 ",-1))]),_:1},8,["loading"]),n(d,{count:U.reviewQueue,offset:[0,0]},{default:a(()=>[n(o,{type:"primary",ghost:"",onClick:wa},{icon:a(()=>[n(ue(za))]),default:a(()=>[t[31]||(t[31]=r(" 待消歧 ",-1))]),_:1})]),_:1},8,["count"]),n(o,{type:"primary",ghost:"",onClick:t[0]||(t[0]=u=>K.value=!0)},{icon:a(()=>[n(ue(Ha))]),default:a(()=>[t[32]||(t[32]=r(" 审计日志 ",-1))]),_:1})]),_:1})]),n(oe,{gutter:16,style:{"margin-bottom":"16px"}},{default:a(()=>[n(W,{xs:24,sm:12,md:6},{default:a(()=>[n(z,{size:"small",title:"Vault"},{extra:a(()=>[n(w,{color:k.value?.vault?.ok?"green":"red"},{default:a(()=>[r(c(k.value?.vault?.ok?"正常":"未就绪"),1)]),_:1},8,["color"])]),default:a(()=>[y("div",Yn," schema v"+c(k.value?.vault?.schemaVersion??"?"),1),I.value?.vault?(s(),C("div",Vn," 事件 "+c(I.value.vault.events)+" · 联系人 "+c(I.value.vault.persons),1)):v("",!0),I.value?.vault?(s(),C("div",Qn," 地点 "+c(I.value.vault.places)+" · 商品 "+c(I.value.vault.items)+" · 主题 "+c(I.value.vault.topics),1)):v("",!0)]),_:1})]),_:1}),n(W,{xs:24,sm:12,md:6},{default:a(()=>[n(z,{size:"small",title:"本地 LLM"},{extra:a(()=>[n(w,{color:k.value?.llm?.ok?k.value.llm.isLocal?"green":"orange":"red"},{default:a(()=>[r(c(k.value?.llm?.ok?k.value.llm.isLocal?"本地":"非本地":"未就绪"),1)]),_:1},8,["color"])]),default:a(()=>[y("div",Gn,c(k.value?.llm?.name||"—"),1),k.value?.llm?.ok&&!k.value.llm.isLocal?(s(),C("div",Xn," ⚠️ 非本地 — ask 会被隐私 gate 拒绝,除非显式 acceptNonLocal ")):v("",!0)]),_:1})]),_:1}),n(W,{xs:24,sm:12,md:6},{default:a(()=>[n(z,{size:"small",title:"KG 索引"},{extra:a(()=>[n(w,{color:k.value?.kgSink?.ok?"green":"default"},{default:a(()=>[r(c(k.value?.kgSink?.ok?"已连接":"不可用"),1)]),_:1},8,["color"])]),default:a(()=>[t[34]||(t[34]=y("div",{class:"kv"}," events / persons → cc knowledge-graph 实体 + 关系 ",-1))]),_:1})]),_:1}),n(W,{xs:24,sm:12,md:6},{default:a(()=>[n(z,{size:"small",title:"RAG 索引"},{extra:a(()=>[n(w,{color:k.value?.ragSink?.ok?"green":"default"},{default:a(()=>[r(c(k.value?.ragSink?.ok?"已连接":"不可用"),1)]),_:1},8,["color"])]),default:a(()=>[t[35]||(t[35]=y("div",{class:"kv"},"文本 → BM25(vector 留待后续 phase)",-1))]),_:1})]),_:1})]),_:1}),n(z,{style:{"margin-bottom":"16px"}},{title:a(()=>[n(b,null,{default:a(()=>[n(ue(Fa)),t[36]||(t[36]=y("span",null,"问我数据",-1))]),_:1})]),default:a(()=>[n(he,{value:D.value,"onUpdate:value":t[1]||(t[1]=u=>D.value=u),rows:2,placeholder:"例:上个月在淘宝总共花了多少?/我妈生日那周买了啥送哪儿?",onKeydown:Ba(Nt(Ct,["exact","prevent"]),["enter"])},null,8,["value","onKeydown"]),y("div",Zn,[n(Ae,{checked:N.value,"onUpdate:checked":t[2]||(t[2]=u=>N.value=u)},{default:a(()=>[...t[37]||(t[37]=[r("允许非本地 LLM (volcengine / anthropic 等)",-1)])]),_:1},8,["checked"]),n(o,{type:"primary",loading:m.ask,disabled:!D.value.trim(),onClick:Ct},{icon:a(()=>[n(ue(Ka))]),default:a(()=>[t[38]||(t[38]=r(" 提问 ",-1))]),_:1},8,["loading","disabled"])]),M.value?(s(),C("div",Jn,[n(Z,{type:"error","show-icon":"",message:M.value},null,8,["message"])])):v("",!0),S.value?(s(),C("div",eo,[S.value.warning==="no-facts"?(s(),A(Z,{key:0,type:"warning","show-icon":"",message:"vault 里没找到匹配的事件('no-facts')—— 先同步几个 adapter 让数据进 vault",style:{"margin-bottom":"12px"}})):S.value.warning==="hallucinated-citations"?(s(),A(Z,{key:1,type:"warning","show-icon":"",message:`LLM 引用了 ${S.value.hallucinatedCitations?.length||0} 个不存在的 event id —— 模型在编造`,style:{"margin-bottom":"12px"}},null,8,["message"])):v("",!0),y("div",to,c(S.value.answer),1),y("div",ao," 引用 "+c(S.value.citations?.length||0)+" 条事实 · "+c(S.value.facts?.length||0)+" facts 入 prompt · "+c(S.value.durationMs)+"ms · "+c(S.value.model),1),S.value.citations?.length?(s(),C("div",no,[t[39]||(t[39]=y("span",{style:{"font-size":"12px",color:"var(--text-color-secondary, #888)"}},"事件链接(点击查看明细 / PDF 解密结果):",-1)),n(b,{style:{"margin-top":"4px"},wrap:""},{default:a(()=>[(s(!0),C(J,null,ye(S.value.citations,u=>(s(),A(w,{key:u,color:"blue",style:{cursor:"pointer"},onClick:x=>Et(u)},{default:a(()=>[r(c(u),1)]),_:2},1032,["onClick"]))),128))]),_:1})])):v("",!0)])):v("",!0)]),_:1}),n(z,{style:{"margin-bottom":"16px"}},{title:a(()=>[n(b,null,{default:a(()=>[n(ue(Qa)),t[40]||(t[40]=y("span",null,"分析 skill (Phase 11)",-1))]),_:1})]),extra:a(()=>[n(w,{color:"purple"},{default:a(()=>[...t[41]||(t[41]=[r("5 内置",-1)])]),_:1})]),default:a(()=>[n(oe,{gutter:[12,12]},{default:a(()=>[(s(),C(J,null,ye(T,u=>n(W,{xs:24,sm:12,md:8,key:u.name},{default:a(()=>[n(z,{size:"small",hoverable:"",onClick:x=>ha(u.name)},{default:a(()=>[y("div",oo,[(s(),A(Na(u.icon),{style:{"font-size":"18px",color:"#722ed1"}})),y("strong",null,c(u.label),1)]),y("div",lo,c(u.description),1)]),_:2},1032,["onClick"])]),_:2},1024)),64))]),_:1}),re.value?(s(),C("div",so,[n(ve,{plain:"",orientation:"left"},{default:a(()=>[r(c(re.value.skill)+" 结果",1)]),_:1}),n(Je,{spinning:m.skill},{default:a(()=>[y("pre",ro,c(JSON.stringify(re.value,null,2)),1),re.value.llm_commentary||re.value.llm_narrative?(s(),C("div",io,[n(Z,{type:"info",message:re.value.llm_commentary||re.value.llm_narrative},null,8,["message"])])):v("",!0)]),_:1},8,["spinning"])])):v("",!0)]),_:1}),n(z,{style:{"margin-bottom":"16px"}},{title:a(()=>[n(b,null,{default:a(()=>[n(ue(en)),t[42]||(t[42]=y("span",null,"Adapters",-1)),xe.value?(s(),A(w,{key:0,color:xe.value.ready===xe.value.total?"green":"orange"},{default:a(()=>[r(c(xe.value.ready)+"/"+c(xe.value.total)+" 可采集 ",1)]),_:1},8,["color"])):v("",!0)]),_:1})]),extra:a(()=>[n(b,null,{default:a(()=>[n(o,{onClick:t[3]||(t[3]=u=>te.value=!0)},{icon:a(()=>[n(ue(Ga))]),default:a(()=>[t[43]||(t[43]=r(" 添加邮箱账号 ",-1))]),_:1}),n(o,{onClick:t[4]||(t[4]=u=>Se.value=!0)},{icon:a(()=>[n(ue(Xa))]),default:a(()=>[t[44]||(t[44]=r(" 导入支付宝账单 ",-1))]),_:1}),n(o,{onClick:t[5]||(t[5]=u=>ie.value=!0)},{icon:a(()=>[n(ue(Za))]),default:a(()=>[t[45]||(t[45]=r(" 添加 AI 对话账号 ",-1))]),_:1}),n(o,{onClick:t[6]||(t[6]=u=>$e.value=!0)},{icon:a(()=>[n(ue(Ja))]),default:a(()=>[t[46]||(t[46]=r(" 添加 WeChat ",-1))]),_:1}),n(o,{onClick:jt,loading:m.bilibiliAdbDoctor},{default:a(()=>[...t[47]||(t[47]=[r(" 诊断 Bilibili ADB ",-1)])]),_:1},8,["loading"]),n(o,{onClick:mt,loading:m.bilibiliAdbSync},{default:a(()=>[...t[48]||(t[48]=[r(" 通过 PC ADB 同步 Bilibili ",-1)])]),_:1},8,["loading"]),n(o,{onClick:pt,loading:m.weiboAdbSync},{default:a(()=>[...t[49]||(t[49]=[r(" 通过 PC ADB 同步 Weibo ",-1)])]),_:1},8,["loading"]),n(o,{onClick:ut,loading:m.xhsAdbSync},{default:a(()=>[...t[50]||(t[50]=[r(" 通过 PC ADB 同步 Xhs ",-1)])]),_:1},8,["loading"]),n(o,{onClick:dt,loading:m.toutiaoAdbSync},{default:a(()=>[...t[51]||(t[51]=[r(" 通过 PC ADB 同步 Toutiao ",-1)])]),_:1},8,["loading"]),n(o,{onClick:ct,loading:m.kuaishouAdbSync},{default:a(()=>[...t[52]||(t[52]=[r(" 通过 PC ADB 同步 Kuaishou ",-1)])]),_:1},8,["loading"]),n(o,{onClick:qt,loading:m.bridgeDoctor},{default:a(()=>[...t[53]||(t[53]=[r(" 诊断签名 Bridges ",-1)])]),_:1},8,["loading"]),n(o,{onClick:ft,loading:m.douyinAdbSync},{default:a(()=>[...t[54]||(t[54]=[r(" 通过 PC ADB 同步 Douyin ",-1)])]),_:1},8,["loading"]),n(o,{onClick:pa,loading:m.addMock},{default:a(()=>[...t[55]||(t[55]=[r(" 注册 MockAdapter(开发) ",-1)])]),_:1},8,["loading"]),n(o,{type:"primary",onClick:ma,loading:m.syncAll,disabled:!$.value.length},{default:a(()=>[...t[56]||(t[56]=[r(" 同步全部 ",-1)])]),_:1},8,["loading","disabled"])]),_:1})]),default:a(()=>[$.value.length?(s(),A(et,{key:0,columns:Wt,"data-source":$.value,pagination:!1,"row-key":u=>u.name,size:"middle"},{bodyCell:a(({column:u,record:x})=>[u.key==="readiness"?(s(),C(J,{key:0},[de(x.name)?(s(),C(J,{key:0},[n(Ue,null,{title:a(()=>[y("div",null,c(de(x.name).message),1),de(x.name).actionHint?(s(),C("div",uo," → "+c(de(x.name).actionHint),1)):v("",!0),de(x.name).lastError?(s(),C("div",co," 上次同步错误: "+c(de(x.name).lastError),1)):v("",!0)]),default:a(()=>[n(w,{color:yt(de(x.name).status)},{default:a(()=>[r(c(vt(de(x.name))),1)]),_:2},1032,["color"])]),_:2},1024),y("span",po,c(gt(de(x.name).category)),1),de(x.name).ready?v("",!0):(s(),C("div",fo,c(de(x.name).message),1))],64)):(s(),A(w,{key:1,color:"default"},{default:a(()=>[...t[57]||(t[57]=[r("检测中",-1)])]),_:1}))],64)):u.key==="sensitivity"?(s(),C(J,{key:1},[n(w,{color:ra(x.sensitivity)},{default:a(()=>[r(c(x.sensitivity),1)]),_:2},1032,["color"]),x.legalGate?(s(),A(w,{key:0,color:"red",style:{"margin-left":"4px"}},{default:a(()=>[...t[58]||(t[58]=[r("需法律确认",-1)])]),_:1})):v("",!0)],64)):u.key==="capabilities"?(s(!0),C(J,{key:2},ye(x.capabilities,le=>(s(),A(w,{key:le,style:{"margin-right":"4px"}},{default:a(()=>[r(c(le),1)]),_:2},1024))),128)):u.key==="actions"?(s(),A(b,{key:3},{default:a(()=>[n(o,{size:"small",type:"link",onClick:le=>Xe(x.name)},{default:a(()=>[...t[59]||(t[59]=[r(" 如何导入 ",-1)])]),_:1},8,["onClick"]),n(o,{size:"small",type:"primary",title:_t(Te(x.name)),loading:m.sync[x.name],onClick:le=>bt(x.name)},{default:a(()=>[r(c(ea(Te(x.name))),1)]),_:2},1032,["title","loading","onClick"]),fe(x.name)?(s(),A(Oa,{key:0,open:E.value[x.name],"onUpdate:open":le=>E.value[x.name]=le,trigger:"click",placement:"left",title:`${x.name} 采集范围`},{content:a(()=>[y("div",mo,[(s(!0),C(J,null,ye(ue(We)[x.name],le=>(s(),C("div",{key:le.key,style:{margin:"6px 0"}},[n(Ae,{checked:se[x.name][le.key]!==!1,onChange:at=>ee(x.name,le.key,at)},{default:a(()=>[r(c(le.label)+" ",1),y("span",yo,c(le.hint),1),le.sensitive?(s(),A(w,{key:0,color:"orange",size:"small",style:{"margin-left":"4px"}},{default:a(()=>[...t[60]||(t[60]=[r("敏感",-1)])]),_:1})):v("",!0)]),_:2},1032,["checked","onChange"])]))),128)),t[61]||(t[61]=y("div",{style:{"margin-top":"8px","font-size":"11px",color:"#999"}}," 取消勾选的数据本次同步不会拉取入库 ",-1))])]),default:a(()=>[n(o,{size:"small",title:"选择采集范围"},{default:a(()=>[...t[62]||(t[62]=[r("⚙",-1)])]),_:1})]),_:2},1032,["open","onUpdate:open","title"])):v("",!0),n(Sa,{title:`从注册表移除 ${x.name}?(vault 数据不会删除)`,onConfirm:le=>ya(x.name)},{default:a(()=>[n(o,{size:"small",danger:""},{default:a(()=>[...t[63]||(t[63]=[r("移除",-1)])]),_:1})]),_:1},8,["title","onConfirm"])]),_:2},1024)):v("",!0)]),_:1},8,["data-source","row-key"])):(s(),A(tt,{key:1,description:"无已注册 adapter — 点上方按钮注册 MockAdapter 看效果"})),O.active?(s(),C("div",vo,[n(z,{size:"small",bordered:!0},{default:a(()=>[y("div",go,[t[64]||(t[64]=y("strong",null,"同步进行中",-1)),r(" · "+c(O.adapter)+" · "+c(O.phase||"...")+" ",1),O.attempt&&O.attempt>1?(s(),C("span",ko," (重试 #"+c(O.attempt)+") ",1)):v("",!0)]),O.total>0?(s(),A(Ot,{key:0,percent:Math.round(O.current/O.total*100),status:O.errorMessage?"exception":"active",size:"small"},null,8,["percent","status"])):(s(),A(Ot,{key:1,percent:0,status:"active",size:"small"})),O.mailbox?(s(),C("div",_o," 邮箱 "+c(O.mailbox)+" · "+c(O.current)+" / "+c(O.total),1)):v("",!0),O.errorMessage?(s(),C("div",bo,c(O.errorMessage),1)):v("",!0)]),_:1})])):v("",!0),Q.value?(s(),C("div",Ao,[n(Z,{type:ua(Q.value),"show-icon":"",message:da(Q.value),description:ia(Q.value)},null,8,["type","message","description"])])):v("",!0)]),_:1}),n(Ln,{open:_e.value,"onUpdate:open":t[7]||(t[7]=u=>_e.value=u),source:be.value,onCollect:aa},null,8,["open","source"]),n(Pe,{open:te.value,"onUpdate:open":t[17]||(t[17]=u=>te.value=u),title:"添加邮箱账号",placement:"right",width:"560","destroy-on-close":!0,onClose:ht},{footer:a(()=>[n(b,null,{default:a(()=>[n(o,{onClick:t[16]||(t[16]=u=>te.value=!1)},{default:a(()=>[...t[74]||(t[74]=[r("取消",-1)])]),_:1}),n(o,{loading:m.testEmail,disabled:!Fe.value,onClick:_a},{default:a(()=>[...t[75]||(t[75]=[r(" 测试连接 ",-1)])]),_:1},8,["loading","disabled"]),n(o,{type:"primary",loading:m.saveEmail,disabled:!Fe.value||!ae.value?.ok,onClick:ba},{default:a(()=>[...t[76]||(t[76]=[r(" 保存并注册 ",-1)])]),_:1},8,["loading","disabled"])]),_:1})]),default:a(()=>[n(Z,{message:"数据回归个人 — 凭证落本地加密文件(与 vault 主密钥同目录),同步动作 100% 本地。",type:"info","show-icon":"",style:{"margin-bottom":"16px"}}),n(Dt,{layout:"vertical",model:P},{default:a(()=>[n(me,{label:"邮箱服务商",required:""},{default:a(()=>[n(Da,{value:P.provider,"onUpdate:value":t[8]||(t[8]=u=>P.provider=u),placeholder:"选择服务商"},{default:a(()=>[n(De,{value:"qq"},{default:a(()=>[...t[65]||(t[65]=[r("QQ 邮箱 (imap.qq.com)",-1)])]),_:1}),n(De,{value:"163"},{default:a(()=>[...t[66]||(t[66]=[r("网易邮箱 163/126",-1)])]),_:1}),n(De,{value:"189"},{default:a(()=>[...t[67]||(t[67]=[r("189 邮箱",-1)])]),_:1}),n(De,{value:"outlook"},{default:a(()=>[...t[68]||(t[68]=[r("Outlook / Hotmail",-1)])]),_:1}),n(De,{value:"gmail"},{default:a(()=>[...t[69]||(t[69]=[r("Gmail",-1)])]),_:1}),n(De,{value:"custom"},{default:a(()=>[...t[70]||(t[70]=[r("自定义 IMAP",-1)])]),_:1})]),_:1},8,["value"])]),_:1}),n(me,{label:"邮箱地址",required:""},{default:a(()=>[n(we,{value:P.email,"onUpdate:value":t[9]||(t[9]=u=>P.email=u),placeholder:"you@qq.com",autocomplete:"off"},null,8,["value"])]),_:1}),n(me,{required:""},{label:a(()=>[n(b,null,{default:a(()=>[t[71]||(t[71]=y("span",null,"授权码(非登录密码)",-1)),n(Ue,{title:ga(P.provider)},{default:a(()=>[n(ue(xt),{style:{color:"#888"}})]),_:1},8,["title"])]),_:1})]),default:a(()=>[n(St,{value:P.authCode,"onUpdate:value":t[10]||(t[10]=u=>P.authCode=u),placeholder:"例:QQ 邮箱 设置 → 账户 → 开启 IMAP/SMTP → 生成的授权码",autocomplete:"off"},null,8,["value"])]),_:1}),P.provider==="custom"?(s(),A(me,{key:0,label:"IMAP host"},{default:a(()=>[n(we,{value:P.host,"onUpdate:value":t[11]||(t[11]=u=>P.host=u),placeholder:"mail.example.com"},null,8,["value"])]),_:1})):v("",!0),P.provider==="custom"?(s(),A(me,{key:1,label:"端口"},{default:a(()=>[n(Pa,{value:P.port,"onUpdate:value":t[12]||(t[12]=u=>P.port=u),min:1,max:65535,"default-value":993},null,8,["value"])]),_:1})):v("",!0),n(ve,{orientation:"left",plain:""},{default:a(()=>[...t[72]||(t[72]=[r("PDF 账单解密提示(可选)",-1)])]),_:1}),t[73]||(t[73]=y("p",{class:"hint"}," 银行 PDF 月结大多加密;提供几个常用候选项让 Phase 5.5 自动解锁: ",-1)),n(me,{label:"身份证后 6 位"},{default:a(()=>[n(we,{value:P.pdfPasswordHints.idCardLast6,"onUpdate:value":t[13]||(t[13]=u=>P.pdfPasswordHints.idCardLast6=u),placeholder:"123456",autocomplete:"off"},null,8,["value"])]),_:1}),n(me,{label:"手机后 6 位"},{default:a(()=>[n(we,{value:P.pdfPasswordHints.phoneLast6,"onUpdate:value":t[14]||(t[14]=u=>P.pdfPasswordHints.phoneLast6=u),placeholder:"123456",autocomplete:"off"},null,8,["value"])]),_:1}),n(me,{label:"信用卡尾 6 位"},{default:a(()=>[n(we,{value:P.pdfPasswordHints.cardLast6,"onUpdate:value":t[15]||(t[15]=u=>P.pdfPasswordHints.cardLast6=u),placeholder:"123456",autocomplete:"off"},null,8,["value"])]),_:1}),ae.value?(s(),C("div",Co,[n(Z,{type:ae.value.ok?"success":"error","show-icon":"",message:ae.value.ok?"凭证有效 — 可以保存":`认证失败: ${ae.value.reason||ae.value.error}`},null,8,["type","message"])])):v("",!0)]),_:1},8,["model"])]),_:1},8,["open"]),n(Pe,{open:q.value,"onUpdate:open":t[18]||(t[18]=u=>q.value=u),title:R.value?`事件 ${R.value.event.id}`:"加载中...",placement:"right",width:"640","destroy-on-close":!0},{default:a(()=>[R.value?(s(),C(J,{key:0},[n($a,{column:1,size:"small",bordered:""},{default:a(()=>[n(Me,{label:"类型"},{default:a(()=>[r(c(R.value.event.subtype),1)]),_:1}),n(Me,{label:"发生于"},{default:a(()=>[r(c(new Date(R.value.event.occurredAt).toLocaleString()),1)]),_:1}),n(Me,{label:"actor"},{default:a(()=>[r(c(R.value.event.actor),1)]),_:1}),R.value.event.content?.title?(s(),A(Me,{key:0,label:"标题"},{default:a(()=>[r(c(R.value.event.content.title),1)]),_:1})):v("",!0),R.value.event.source?.adapter?(s(),A(Me,{key:1,label:"来源 adapter"},{default:a(()=>[r(c(R.value.event.source.adapter)+" @ v"+c(R.value.event.source.adapterVersion),1)]),_:1})):v("",!0)]),_:1}),R.value.classification?(s(),A(ve,{key:0,orientation:"left",plain:""},{default:a(()=>[...t[77]||(t[77]=[r("分类",-1)])]),_:1})):v("",!0),R.value.classification?(s(),C("div",ho,[n(w,{color:"blue"},{default:a(()=>[r(c(R.value.classification.category),1)]),_:1}),n(w,null,{default:a(()=>[r(c(R.value.classification.layer),1)]),_:1}),y("span",wo,"置信 "+c(Math.round((R.value.classification.confidence||0)*100))+"%",1)])):v("",!0),R.value.extraction?(s(),A(ve,{key:2,orientation:"left",plain:""},{default:a(()=>[r("结构化字段("+c(R.value.extraction.template)+")",1)]),_:1})):v("",!0),R.value.extraction?(s(),C("pre",Io,c(JSON.stringify(R.value.extraction.fields,null,2)),1)):v("",!0),R.value.extraction?.pdfExtraction?(s(),A(ve,{key:4,orientation:"left",plain:""},{default:a(()=>[...t[78]||(t[78]=[r("PDF 解密 / 解析",-1)])]),_:1})):v("",!0),R.value.extraction?.pdfExtraction?(s(),A($t,{key:5,"data-source":R.value.extraction.pdfExtraction,size:"small"},{renderItem:a(({item:u})=>[n(Pt,null,{default:a(()=>[n(Ta,{title:u.filename},{description:a(()=>[y("div",null,[n(w,{color:u.decrypted?"green":"red"},{default:a(()=>[r(c(u.decrypted?"已解密":"解密失败"),1)]),_:2},1032,["color"]),y("span",Eo,"尝试 "+c(u.attempted)+" 次",1),u.transactionsExtracted!=null?(s(),C("span",Oo," · 提取 "+c(u.transactionsExtracted)+" 条交易 ",1)):v("",!0)]),u.error?(s(),C("div",So,c(u.error),1)):v("",!0)]),_:2},1032,["title"])]),_:2},1024)]),_:1},8,["data-source"])):v("",!0),R.value.extraction?.fields?.transactions?.length?(s(),C(J,{key:6},[n(ve,{orientation:"left",plain:""},{default:a(()=>[...t[79]||(t[79]=[r("交易明细",-1)])]),_:1}),n(et,{columns:sa,"data-source":R.value.extraction.fields.transactions,pagination:{pageSize:10,size:"small"},"row-key":(u,x)=>x,size:"small"},{bodyCell:a(({column:u,record:x})=>[u.key==="occurredAt"?(s(),C(J,{key:0},[r(c(new Date(x.occurredAtMs).toLocaleDateString()),1)],64)):u.key==="amount"?(s(),C("span",{key:1,class:Bt(x.amount.direction==="in"?"amount-in":"amount-out")},c(x.amount.direction==="in"?"+":"-")+c(x.amount.value.toFixed(2))+" "+c(x.amount.currency),3)):v("",!0)]),_:1},8,["data-source","row-key"])],64)):v("",!0)],64)):(s(),A(tt,{key:1,description:"无事件数据"}))]),_:1},8,["open","title"]),n(Pe,{open:Se.value,"onUpdate:open":t[23]||(t[23]=u=>Se.value=u),title:"导入支付宝账单",placement:"right",width:"560","destroy-on-close":!0,onClose:Aa},{footer:a(()=>[n(b,null,{default:a(()=>[n(o,{onClick:t[22]||(t[22]=u=>Se.value=!1)},{default:a(()=>[...t[85]||(t[85]=[r("关闭",-1)])]),_:1}),n(o,{type:"primary",loading:m.importAlipay,disabled:!It.value,onClick:Ca},{default:a(()=>[...t[86]||(t[86]=[r(" 注册账户 + 导入 ",-1)])]),_:1},8,["loading","disabled"])]),_:1})]),default:a(()=>[n(Z,{message:"支付宝官方导出 CSV — 服务器侧全量、稳定无风控。3 分钟拿到 12 个月流水。",type:"info","show-icon":"",style:{"margin-bottom":"16px"}}),n(Ra,{bordered:!1,style:{"margin-bottom":"12px"}},{default:a(()=>[n(xa,{header:"如何导出账单(首次必看)"},{default:a(()=>[...t[80]||(t[80]=[y("ol",{style:{"padding-left":"18px","font-size":"13px"}},[y("li",null,"支付宝 app → 我的 → 账单 → 右上角 ⋯"),y("li",null,'点 "开具交易流水证明"'),y("li",null,"选月份范围(最长 12 个月)"),y("li",null,'用途选 "个人对账"'),y("li",null,"发送到你的绑定邮箱"),y("li",null,[r("从邮箱下载 "),y("code",null,"alipay_record_*.zip")]),y("li",null,"解压密码 = 你的身份证后 6 位")],-1)])]),_:1})]),_:1}),n(Dt,{layout:"vertical",model:Y},{default:a(()=>[n(me,{label:"支付宝绑定邮箱(账户标识)",required:""},{default:a(()=>[n(we,{value:Y.email,"onUpdate:value":t[19]||(t[19]=u=>Y.email=u),placeholder:"alipay-bound@example.com",autocomplete:"off"},null,8,["value"])]),_:1}),n(me,null,{label:a(()=>[n(b,null,{default:a(()=>[t[81]||(t[81]=y("span",null,"ZIP 密码(身份证后 6 位)",-1)),n(Ue,{title:"支付宝 ZIP 默认密码 = 身份证号后 6 位。也支持自定义密码。"},{default:a(()=>[n(ue(xt),{style:{color:"#888"}})]),_:1})]),_:1})]),default:a(()=>[n(St,{value:Y.zipPassword,"onUpdate:value":t[20]||(t[20]=u=>Y.zipPassword=u),placeholder:"例:123456",autocomplete:"off"},null,8,["value"]),t[82]||(t[82]=y("div",{class:"hint",style:{"margin-top":"4px"}}," 空白则解析时再问,或导入的 ZIP 未加密。 ",-1))]),_:1}),n(ve,{orientation:"left",plain:""},{default:a(()=>[...t[83]||(t[83]=[r("选择文件",-1)])]),_:1}),n(me,{label:"ZIP 或 CSV 文件路径"},{default:a(()=>[n(we,{value:Y.filePath,"onUpdate:value":t[21]||(t[21]=u=>Y.filePath=u),placeholder:"C:\\\\Users\\\\you\\\\Downloads\\\\alipay_record_xxx.zip","allow-clear":""},null,8,["value"]),t[84]||(t[84]=y("div",{class:"hint",style:{"margin-top":"4px"}}," 桌面版可通过 Electron 文件选择器自动填充;web-shell 复制完整路径。 ",-1))]),_:1}),G.value?(s(),C("div",Do,[n(Z,{type:G.value.status==="ok"?"success":"error","show-icon":"",message:G.value.status==="ok"?`导入成功 — ${G.value.entityCounts?.events||0} 笔交易`:`导入失败: ${G.value.error||G.value.status}`,description:G.value.status==="ok"?`${G.value.entityCounts?.persons||0} 个交易对方 · ${G.value.kgTripleCount||0} KG triples · ${G.value.durationMs||0}ms`:null},null,8,["type","message","description"])])):v("",!0)]),_:1},8,["model"])]),_:1},8,["open"]),n(Pe,{open:f.value,"onUpdate:open":t[24]||(t[24]=u=>f.value=u),title:"待消歧(EntityResolver 模糊判定)",placement:"right",width:"640","destroy-on-close":!0},{default:a(()=>[ne.value.length===0&&!m.reviewQueue?(s(),A(Z,{key:0,type:"success","show-icon":"",message:"无待消歧 pair — 所有跨源 Person 已确定。",style:{"margin-bottom":"12px"}})):v("",!0),y("div",Po,[n(b,null,{default:a(()=>[n(o,{loading:m.reviewQueue,onClick:qe},{icon:a(()=>[n(ue(Tt))]),default:a(()=>[t[87]||(t[87]=r(" 刷新 ",-1))]),_:1},8,["loading"]),n(o,{loading:m.resolverDrain,onClick:Ia},{default:a(()=>[...t[88]||(t[88]=[r(" 手动 drain 队列 ",-1)])]),_:1},8,["loading"]),y("span",$o," queue: "+c(U.queue?.pending||0)+" pending · "+c(U.mergeGroups||0)+" groups ",1)]),_:1})]),n($t,{"data-source":ne.value,pagination:{pageSize:5,size:"small"},size:"small"},{renderItem:a(({item:u})=>[n(Pt,null,{default:a(()=>[n(z,{size:"small",style:{width:"100%"}},{default:a(()=>[y("div",To,[y("strong",null,"Pair #"+c(u.id),1),u.embed_sim?(s(),A(w,{key:0,color:"blue",style:{"margin-left":"8px"}},{default:a(()=>[r(" sim "+c(Number(u.embed_sim).toFixed(2)),1)]),_:2},1024)):v("",!0),u.llm_verdict?(s(),A(w,{key:1,color:u.llm_verdict==="yes"?"green":u.llm_verdict==="no"?"red":"orange",style:{"margin-left":"4px"}},{default:a(()=>[r(" LLM: "+c(u.llm_verdict),1)]),_:2},1032,["color"])):v("",!0)]),y("div",xo," A: "+c(u.a_person_id),1),y("div",Ro,"B: "+c(u.b_person_id),1),u.llm_reason?(s(),C("div",Lo," LLM 理由: "+c(u.llm_reason),1)):v("",!0),n(b,{style:{"margin-top":"8px"}},{default:a(()=>[n(o,{size:"small",type:"primary",onClick:x=>Ze(u.id,"same")},{default:a(()=>[...t[89]||(t[89]=[r("同一人",-1)])]),_:1},8,["onClick"]),n(o,{size:"small",danger:"",onClick:x=>Ze(u.id,"different")},{default:a(()=>[...t[90]||(t[90]=[r("不同人",-1)])]),_:1},8,["onClick"]),n(o,{size:"small",onClick:x=>Ze(u.id,"skip")},{default:a(()=>[...t[91]||(t[91]=[r("跳过",-1)])]),_:1},8,["onClick"])]),_:2},1024)]),_:2},1024)]),_:2},1024)]),_:1},8,["data-source"])]),_:1},8,["open"]),n(Pe,{open:K.value,"onUpdate:open":t[25]||(t[25]=u=>K.value=u),title:"审计日志(数据 lineage)",placement:"right",width:"600",onAfterOpenChange:va},{default:a(()=>[n(et,{columns:la,"data-source":B.value,pagination:{pageSize:20,size:"small"},"row-key":u=>u.id,size:"small"},{bodyCell:a(({column:u,record:x})=>[u.key==="at"?(s(),C(J,{key:0},[r(c(new Date(x.at).toLocaleString()),1)],64)):u.key==="details"?(s(),C("code",Uo,c(x.details||"—"),1)):v("",!0)]),_:1},8,["data-source","row-key"])]),_:1},8,["open"]),n(Rn,{open:ie.value,"onUpdate:open":t[26]||(t[26]=u=>ie.value=u),"existing-accounts":Ne.value,onRegistered:Ye},null,8,["open","existing-accounts"]),n(qn,{open:$e.value,"onUpdate:open":t[27]||(t[27]=u=>$e.value=u),onRegistered:Ve},null,8,["open"]),n(Pe,{open:Ce.value,"onUpdate:open":t[29]||(t[29]=u=>Ce.value=u),title:V.value&&V.value.guide?`如何导入:${V.value.guide.displayName}`:"如何导入",width:"520",placement:"right"},{default:a(()=>[V.value&&V.value.guide?(s(),C(J,{key:0},[n(b,{style:{"margin-bottom":"12px"},wrap:""},{default:a(()=>[n(w,{color:yt(V.value.status)},{default:a(()=>[r(c(vt(V.value)),1)]),_:1},8,["color"]),n(w,null,{default:a(()=>[r(c(gt(V.value.guide.category)),1)]),_:1})]),_:1}),n(Z,{type:"info",message:V.value.guide.summary,"show-icon":"",style:{"margin-bottom":"8px"}},null,8,["message"]),!V.value.ready&&V.value.message?(s(),A(Z,{key:0,type:"warning",message:`当前状态:${V.value.message}`,"show-icon":"",style:{"margin-bottom":"16px"}},null,8,["message"])):v("",!0),(s(!0),C(J,null,ye(V.value.guide.methods,(u,x)=>(s(),C("div",{key:x,style:{"margin-bottom":"20px"}},[y("div",Mo,[r(c(u.label)+" ",1),u.recommended?(s(),A(w,{key:0,color:"green",style:{"margin-left":"6px"}},{default:a(()=>[...t[92]||(t[92]=[r("推荐",-1)])]),_:1})):v("",!0)]),y("ol",Bo,[(s(!0),C(J,null,ye(u.steps,(le,at)=>(s(),C("li",{key:at},c(le),1))),128))]),u.note?(s(),C("div",No,c(u.note),1)):v("",!0)]))),128)),n(ve,{style:{margin:"12px 0"}}),n(b,null,{default:a(()=>[kt(V.value)!=="setup"?(s(),A(o,{key:0,type:"primary",size:"large",loading:m.sync[V.value.name],onClick:t[28]||(t[28]=u=>bt(V.value.name))},{default:a(()=>[r(c(_t(V.value)),1)]),_:1},8,["loading"])):(s(),A(o,{key:1,type:"primary",size:"large",loading:m.refresh,onClick:Yt},{default:a(()=>[...t[93]||(t[93]=[r(" 重新检测 ",-1)])]),_:1},8,["loading"])),y("span",zo,c(ta(V.value)),1)]),_:1})],64)):(s(),A(tt,{key:1,description:"该数据源暂无导入指引"}))]),_:1},8,["open","title"])])}}},Yo=st(Ho,[["__scopeId","data-v-b6bdc838"]]);export{Yo as default};
@@ -0,0 +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-b6bdc838]{padding:16px;max-width:1400px;margin:0 auto}.pdh-header[data-v-b6bdc838]{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:24px;gap:16px;flex-wrap:wrap}.page-title[data-v-b6bdc838]{margin:0 0 4px;font-size:22px;font-weight:600}.page-sub[data-v-b6bdc838]{margin:0;color:var(--text-color-secondary, #888);font-size:13px}.kv[data-v-b6bdc838]{font-size:13px;color:var(--text-color, #333);line-height:1.6}.kv.hint[data-v-b6bdc838]{color:#faad14;font-size:12px;margin-top:4px}.answer[data-v-b6bdc838]{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-b6bdc838]{color:var(--text-color-secondary, #888);font-size:12px}.json-pre[data-v-b6bdc838]{font-size:12px;background:var(--bg-elevated, #fafafa);padding:10px;border-radius:4px;max-height:280px;overflow:auto}.amount-in[data-v-b6bdc838]{color:#52c41a;font-weight:600}.amount-out[data-v-b6bdc838]{color:#ff4d4f;font-weight:600}
@@ -0,0 +1 @@
1
+ import{X as Xe,t as H,_ as Ye,u as Qe,b as We,d as C}from"./index-3RqDry-K.js";import{R as Ze,at as et,H as me,ar as tt,a7 as lt,l as at,_ as ve,X as K,aV as nt,f as it,L as st,d as ot,z as rt}from"./icons-DlxlFL4g.js";import{o as pt,M as b,R as S,P as r,c as i,N as a,Q as y,S as m,K as v,r as $,L as o,O as f,u as c,F as z,Y as L,Z as ut,f as te,a as ct}from"./vendor-BXcBOG8b.js";const Se=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 R(t,p=0){return typeof t=="number"&&Number.isFinite(t)?t:p}function ke(t){if(!t)return{noDb:!1,error:""};const p=Xe(t),n=/No database/i.test(p);return{noDb:n,error:n?"No database":""}}function gt(t,p=0){if(!t||typeof t!="object")return null;const n=t.id||"";return n?{key:n,id:n,pipelineId:String(t.pipelineId||""),stageIndex:R(t.stageIndex,p),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:p}:null}function yt(t,p=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:R(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:p}}function mt(t){const p=H(t);return Array.isArray(p)?p.map(yt).filter(Boolean):[]}function vt(t,p=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:p}:null}function bt(t){const p=H(t);return Array.isArray(p)?p.map(vt).filter(Boolean):[]}function _t(t,p=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:p}:null}function kt(t){const p=H(t);return Array.isArray(p)?p.map(_t).filter(Boolean):[]}const St={totalPipelines:0,pipelinesByTemplate:{},pipelinesByStatus:{},totalStages:0,stagesByStatus:{},totalArtifacts:0,totalDeploys:0,deploysByStrategy:{}};function At(t){const p=JSON.parse(JSON.stringify(St));for(const g of le)p.pipelinesByTemplate[g]=0;for(const g of Se)p.pipelinesByStatus[g]=0;for(const g of dt)p.stagesByStatus[g]=0;for(const g of ft)p.deploysByStrategy[g]=0;const n=H(t);if(!n||typeof n!="object"||Array.isArray(n))return p;if(p.totalPipelines=R(n.totalPipelines,0),p.totalStages=R(n.totalStages,0),p.totalArtifacts=R(n.totalArtifacts,0),p.totalDeploys=R(n.totalDeploys,0),n.pipelinesByTemplate&&typeof n.pipelinesByTemplate=="object")for(const[g,_]of Object.entries(n.pipelinesByTemplate))typeof _=="number"&&Number.isFinite(_)&&(p.pipelinesByTemplate[g]=_);if(n.pipelinesByStatus&&typeof n.pipelinesByStatus=="object")for(const[g,_]of Object.entries(n.pipelinesByStatus))typeof _=="number"&&Number.isFinite(_)&&(p.pipelinesByStatus[g]=_);if(n.stagesByStatus&&typeof n.stagesByStatus=="object")for(const[g,_]of Object.entries(n.stagesByStatus))typeof _=="number"&&Number.isFinite(_)&&(p.stagesByStatus[g]=_);if(n.deploysByStrategy&&typeof n.deploysByStrategy=="object")for(const[g,_]of Object.entries(n.deploysByStrategy))typeof _=="number"&&Number.isFinite(_)&&(p.deploysByStrategy[g]=_);return p}function j(t){if(t==null||t==="")return"—";const p=typeof t=="number"?new Date(t):new Date(String(t));return isNaN(p.getTime())?String(t):p.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"}},Rt={key:3,style:{color:"var(--text-secondary)","font-size":"11px"}},Nt={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"}},It={style:{color:"var(--text-primary)","font-size":"13px",margin:"20px 0 10px"}},Jt={style:{display:"flex","align-items":"center",gap:"8px","flex-wrap":"wrap"}},Ut={style:{color:"var(--text-primary)","font-weight":"500"}},wt={key:0,style:{color:"#52c41a","margin-left":"4px"}},Gt={key:0,style:{color:"#ff4d4f","font-size":"11px","margin-top":"4px"}},qt={key:1,style:{color:"var(--text-secondary)","font-size":"11px","margin-top":"2px"}},Vt={key:0},Kt={__name:"Pipeline",setup(t){const p=Qe(),{t:n}=We(),g=$(!1),_=$(!1),ae=$([]),ne=$([]),ie=$([]),T=$({totalPipelines:0,pipelinesByTemplate:{},pipelinesByStatus:{},totalStages:0,stagesByStatus:{},totalArtifacts:0,totalDeploys:0,deploysByStrategy:{}}),X=$({noDb:!1,error:""}),se=$("pipelines"),N=$(""),E=$(""),J=$(!1),Y=$(!1),k=ct({template:"feature",name:"",configJson:""}),A=$(null),Ae=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"}]),$e=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"}]),xe=te(()=>{let e=ae.value;return N.value&&(e=e.filter(s=>s.template===N.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 Q(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 W(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 he(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 ze(e){const s=`pipeline.deployStatusLabels.${e}`,d=n(s);return d===s?e:d}function Ce(e){return{pending:"default",running:"processing",succeeded:"green",failed:"red","rolled-back":"orange"}[e]||"default"}function Be(e){return{"git-pr":"blue",docker:"cyan","npm-publish":"magenta",local:"default",staging:"orange",custom:"purple"}[e]||"default"}function Te(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 Pe(e){if(e.status!=="running")return!1;const s=w(e);return s&&s.status==="gate-waiting"&&s.gateRequired&&!s.gateApproved}function Oe(e){return e.status==="pending"||e.status==="running"||e.status==="paused"}async function G(){g.value=!0,X.value={noDb:!1,error:""};try{const[e,s,d,x]=await Promise.all([p.execute("pipeline list",1e4).catch(()=>({output:""})),p.execute("pipeline deploys",1e4).catch(()=>({output:""})),p.execute("pipeline templates",8e3).catch(()=>({output:""})),p.execute("pipeline stats",8e3).catch(()=>({output:""}))]),q=[e,s,x].map(B=>ke(B.output)).find(B=>B.noDb);q&&(X.value=q),ae.value=mt(e.output),ne.value=bt(s.output),ie.value=kt(d.output),T.value=At(x.output)}catch(e){C.error(n("pipeline.msg.loadFailed")+": "+(e?.message||e))}finally{g.value=!1}}async function Le(){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 p.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")),J.value=!1,ue(),await G()}catch(e){C.error(n("pipeline.msg.createFailed")+": "+(e?.message||e))}finally{_.value=!1}}async function De(e){await M(e,`pipeline start ${e.id}`,n("pipeline.msg.started"))}async function je(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 Ne(e){await M(e,`pipeline approve ${e.id}`,n("pipeline.msg.gateApproved"))}async function Ee(e){await M(e,`pipeline cancel ${e.id}`,n("pipeline.msg.cancelled"))}async function M(e,s,d){try{const{output:x}=await p.execute(s,8e3);if(/error|Error|失败/i.test(x)&&!/"id"/.test(x)){C.error(n("pipeline.msg.actionFailed")+": "+x.slice(0,120));return}C.success(d),await G()}catch(x){C.error(n("pipeline.msg.actionFailed")+": "+(x?.message||x))}}function Fe(e){A.value=e,Y.value=!0}function ue(){k.template="feature",k.name="",k.configJson=""}return pt(G),(e,s)=>{const d=v("a-button"),x=v("a-space"),q=v("a-alert"),B=v("a-statistic"),P=v("a-card"),D=v("a-col"),ce=v("a-row"),V=v("a-radio-button"),de=v("a-radio-group"),h=v("a-tag"),fe=v("a-progress"),Me=v("a-popconfirm"),ge=v("a-table"),Z=v("a-tab-pane"),Ie=v("a-tabs"),Je=v("a-select-option"),Ue=v("a-select"),ee=v("a-form-item"),we=v("a-input"),Ge=v("a-textarea"),qe=v("a-form"),ye=v("a-modal"),I=v("a-descriptions-item"),Ve=v("a-descriptions"),Ke=v("a-timeline-item"),He=v("a-timeline");return o(),b("div",null,[S("div",$t,[S("div",null,[S("h2",xt,r(e.$t("pipeline.title")),1),S("p",ht,r(e.$t("pipeline.subtitle")),1)]),i(x,null,{default:a(()=>[i(d,{loading:g.value,onClick:G},{icon:a(()=>[i(c(Ze))]),default:a(()=>[f(" "+r(e.$t("pipeline.refresh")),1)]),_:1},8,["loading"]),i(d,{type:"primary",onClick:s[0]||(s[0]=l=>J.value=!0)},{icon:a(()=>[i(c(et))]),default:a(()=>[f(" "+r(e.$t("pipeline.create")),1)]),_:1})]),_:1})]),X.value.noDb?(o(),y(q,{key:0,type:"info","show-icon":"",message:e.$t("pipeline.noDb.message"),description:e.$t("pipeline.noDb.description"),style:{"margin-bottom":"16px"}},null,8,["message","description"])):m("",!0),i(ce,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:a(()=>[i(D,{xs:12,sm:8,lg:5},{default:a(()=>[i(P,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[i(B,{title:e.$t("pipeline.stats.totalPipelines"),value:T.value.totalPipelines,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:a(()=>[i(c(me))]),_:1},8,["title","value"])]),_:1})]),_:1}),i(D,{xs:12,sm:8,lg:5},{default:a(()=>[i(P,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[i(B,{title:e.$t("pipeline.stats.running"),value:T.value.pipelinesByStatus.running||0,"value-style":{color:(T.value.pipelinesByStatus.running||0)>0?"#52c41a":"#888",fontSize:"20px"}},{prefix:a(()=>[i(c(tt))]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),i(D,{xs:12,sm:8,lg:5},{default:a(()=>[i(P,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[i(B,{title:e.$t("pipeline.stats.totalStages"),value:T.value.totalStages,"value-style":{color:"#722ed1",fontSize:"20px"}},{prefix:a(()=>[i(c(lt))]),_:1},8,["title","value"])]),_:1})]),_:1}),i(D,{xs:12,sm:8,lg:5},{default:a(()=>[i(P,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[i(B,{title:e.$t("pipeline.stats.totalArtifacts"),value:T.value.totalArtifacts,"value-style":{color:"#13c2c2",fontSize:"20px"}},{prefix:a(()=>[i(c(at))]),_:1},8,["title","value"])]),_:1})]),_:1}),i(D,{xs:24,sm:8,lg:4},{default:a(()=>[i(P,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[i(B,{title:e.$t("pipeline.stats.totalDeploys"),value:T.value.totalDeploys,"value-style":{color:"#faad14",fontSize:"20px"}},{prefix:a(()=>[i(c(ve))]),_:1},8,["title","value"])]),_:1})]),_:1})]),_:1}),i(P,{title:e.$t("pipeline.stagesCardTitle"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"},"body-style":{padding:"12px 16px"}},{default:a(()=>[S("div",zt,[(o(!0),b(z,null,L(c(be),(l,u)=>(o(),b(z,{key:l},[S("span",{class:ut(["stage-pill",{"is-gate":c(_e).includes(l)}])},[S("span",Ct,r(u+1),1),f(" "+r(U(l))+" ",1),c(_e).includes(l)?(o(),y(c(K),{key:0,class:"gate-icon"})):m("",!0)],2),u<c(be).length-1?(o(),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(Z,{key:"pipelines",tab:e.$t("pipeline.tabs.pipelines")},{default:a(()=>[S("div",Bt,[i(de,{value:N.value,"onUpdate:value":s[1]||(s[1]=l=>N.value=l),size:"small","button-style":"solid"},{default:a(()=>[i(V,{value:""},{default:a(()=>[f(r(e.$t("pipeline.filters.allTemplates")),1)]),_:1}),(o(!0),b(z,null,L(c(le),l=>(o(),y(V,{key:l,value:l},{default:a(()=>[f(r(F(l)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),i(de,{value:E.value,"onUpdate:value":s[2]||(s[2]=l=>E.value=l),size:"small"},{default:a(()=>[i(V,{value:""},{default:a(()=>[f(r(e.$t("pipeline.filters.allStatuses")),1)]),_:1}),(o(!0),b(z,null,L(c(Se),l=>(o(),y(V,{key:l,value:l},{default:a(()=>[f(r(W(l)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),i(ge,{columns:Ae.value,"data-source":xe.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"?(o(),b(z,{key:0},[S("span",Tt,r(u.name||e.$t("pipeline.table.unnamed")),1),S("div",Pt,r(u.id.slice(0,16)),1)],64)):m("",!0),l.key==="template"?(o(),y(h,{key:1,color:Q(u.template)},{default:a(()=>[f(r(F(u.template)),1)]),_:2},1032,["color"])):m("",!0),l.key==="progress"?(o(),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"?(o(),b(z,{key:3},[w(u)?(o(),y(h,{key:0,color:re(w(u).status)},{default:a(()=>[f(r(U(w(u).name)),1)]),_:2},1032,["color"])):(o(),b("span",Ot,"—"))],64)):m("",!0),l.key==="status"?(o(),y(h,{key:4,color:oe(u.status)},{default:a(()=>[f(r(W(u.status)),1)]),_:2},1032,["color"])):m("",!0),l.key==="createdAt"?(o(),b("span",Lt,r(c(j)(u.createdAt)),1)):m("",!0),l.key==="action"?(o(),b(z,{key:6},[i(d,{size:"small",type:"link",onClick:O=>Fe(u)},{default:a(()=>[f(r(e.$t("pipeline.table.actions.details")),1)]),_:1},8,["onClick"]),u.status==="pending"?(o(),y(d,{key:0,size:"small",type:"link",onClick:O=>De(u)},{default:a(()=>[f(r(e.$t("pipeline.table.actions.start")),1)]),_:1},8,["onClick"])):m("",!0),u.status==="running"?(o(),y(d,{key:1,size:"small",type:"link",onClick:O=>je(u)},{default:a(()=>[f(r(e.$t("pipeline.table.actions.pause")),1)]),_:1},8,["onClick"])):m("",!0),u.status==="paused"?(o(),y(d,{key:2,size:"small",type:"link",onClick:O=>Re(u)},{default:a(()=>[f(r(e.$t("pipeline.table.actions.resume")),1)]),_:1},8,["onClick"])):m("",!0),Pe(u)?(o(),y(d,{key:3,size:"small",type:"link",style:{color:"#52c41a"},onClick:O=>Ne(u)},{default:a(()=>[f(r(e.$t("pipeline.table.actions.approveGate")),1)]),_:1},8,["onClick"])):m("",!0),Oe(u)?(o(),y(Me,{key:4,title:e.$t("pipeline.table.cancelConfirm"),"ok-text":e.$t("pipeline.table.cancelOk"),"cancel-text":e.$t("pipeline.table.cancelBack"),onConfirm:O=>Ee(u)},{default:a(()=>[i(d,{size:"small",type:"link",danger:""},{default:a(()=>[f(r(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(" "+r(N.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(Z,{key:"deploys",tab:e.$t("pipeline.tabs.deploys")},{default:a(()=>[i(ge,{columns:$e.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"?(o(),b("span",jt,r(u.pipelineId.slice(0,12)),1)):m("",!0),l.key==="strategy"?(o(),y(h,{key:1,color:Be(u.strategy),style:{"font-family":"monospace"}},{default:a(()=>[f(r(u.strategy),1)]),_:2},1032,["color"])):m("",!0),l.key==="status"?(o(),y(h,{key:2,color:Ce(u.status)},{default:a(()=>[f(r(ze(u.status)),1)]),_:2},1032,["color"])):m("",!0),l.key==="createdAt"?(o(),b("span",Rt,r(c(j)(u.createdAt)),1)):m("",!0)]),emptyText:a(()=>[S("div",Nt,[i(c(ve),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),f(" "+r(e.$t("pipeline.table.emptyDeploys")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),i(Z,{key:"templates",tab:e.$t("pipeline.tabs.templates")},{default:a(()=>[i(ce,{gutter:[16,16]},{default:a(()=>[(o(!0),b(z,null,L(ie.value,l=>(o(),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:Q(l.name)},{default:a(()=>[f(r(l.name),1)]),_:2},1032,["color"])]),default:a(()=>[S("p",Et,r(l.description),1),S("div",Ft,[(o(!0),b(z,null,L(l.stages,(u,O)=>(o(),y(h,{key:u,color:l.gateStages.includes(u)?"gold":"blue",style:{"font-size":"11px"}},{default:a(()=>[f(r(O+1)+". "+r(U(u))+" ",1),l.gateStages.includes(u)?(o(),y(c(K),{key:0,style:{"font-size":"10px","margin-left":"2px"}})):m("",!0)]),_:2},1032,["color"]))),128))])]),_:2},1032,["title"])]),_:2},1024))),128))]),_:1})]),_:1},8,["tab"])]),_:1},8,["activeKey"]),i(ye,{open:J.value,"onUpdate:open":s[7]||(s[7]=l=>J.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:Le,onCancel:ue},{default:a(()=>[i(qe,{"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(Ue,{value:k.template,"onUpdate:value":s[4]||(s[4]=l=>k.template=l)},{default:a(()=>[(o(!0),b(z,null,L(c(le),l=>(o(),y(Je,{key:l,value:l},{default:a(()=>[f(r(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(we,{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:Y.value,"onUpdate:open":s[8]||(s[8]=l=>Y.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?(o(),b("div",Mt,[i(Ve,{column:2,size:"small",bordered:""},{default:a(()=>[i(I,{label:e.$t("pipeline.details.template")},{default:a(()=>[i(h,{color:Q(A.value.template)},{default:a(()=>[f(r(F(A.value.template)),1)]),_:1},8,["color"])]),_:1},8,["label"]),i(I,{label:e.$t("pipeline.details.status")},{default:a(()=>[i(h,{color:oe(A.value.status)},{default:a(()=>[f(r(W(A.value.status)),1)]),_:1},8,["color"])]),_:1},8,["label"]),i(I,{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(I,{label:e.$t("pipeline.details.createdAt")},{default:a(()=>[f(r(c(j)(A.value.createdAt)),1)]),_:1},8,["label"]),i(I,{label:e.$t("pipeline.details.startedAt")},{default:a(()=>[f(r(c(j)(A.value.startedAt)),1)]),_:1},8,["label"])]),_:1}),S("h4",It,r(e.$t("pipeline.details.stagesHeader")),1),i(He,{mode:"left"},{default:a(()=>[(o(!0),b(z,null,L(A.value.stages,l=>(o(),y(Ke,{key:l.id,color:Te(l.status)},{dot:a(()=>[l.status==="completed"?(o(),y(c(it),{key:0,style:{color:"#52c41a"}})):l.status==="running"?(o(),y(c(st),{key:1,style:{color:"#1677ff"}})):l.status==="failed"?(o(),y(c(ot),{key:2,style:{color:"#ff4d4f"}})):l.status==="gate-waiting"?(o(),y(c(K),{key:3,style:{color:"#faad14"}})):(o(),y(c(rt),{key:4,style:{color:"var(--text-muted)"}}))]),default:a(()=>[S("div",Jt,[S("span",Ut,r(l.stageIndex+1)+". "+r(U(l.name)),1),i(h,{color:re(l.status),style:{"font-size":"11px"}},{default:a(()=>[f(r(he(l.status)),1)]),_:2},1032,["color"]),l.gateRequired?(o(),y(h,{key:0,color:"gold",style:{"font-size":"10px"}},{default:a(()=>[i(c(K)),f(" "+r(e.$t("pipeline.details.needsApproval"))+" ",1),l.gateApproved?(o(),b("span",wt,r(e.$t("pipeline.details.approved")),1)):m("",!0)]),_:2},1024)):m("",!0)]),l.errorMessage?(o(),b("div",Gt,r(e.$t("pipeline.details.errorPrefix"))+" "+r(l.errorMessage),1)):m("",!0),l.startedAt?(o(),b("div",qt,[f(r(c(j)(l.startedAt))+" ",1),l.completedAt?(o(),b("span",Vt," → "+r(c(j)(l.completedAt)),1)):m("",!0)])):m("",!0)]),_:2},1032,["color"]))),128))]),_:1})])):m("",!0)]),_:1},8,["open","title"])])}}},Qt=Ye(Kt,[["__scopeId","data-v-8e02619c"]]);export{Qt as default};
@@ -0,0 +1 @@
1
+ .page-title[data-v-8e02619c]{margin:0;color:var(--text-primary);font-size:22px;font-weight:600}.page-sub[data-v-8e02619c]{margin:4px 0 0;color:var(--text-secondary);font-size:13px}.pipeline-tabs[data-v-8e02619c] .ant-tabs-nav{margin-bottom:16px}.filter-bar[data-v-8e02619c]{display:flex;align-items:center;gap:12px;margin-bottom:12px;flex-wrap:wrap}.stage-flow[data-v-8e02619c]{display:flex;align-items:center;gap:6px;flex-wrap:wrap}.stage-pill[data-v-8e02619c]{display:inline-flex;align-items:center;gap:6px;padding:4px 10px;border-radius:14px;background:#1677ff1f;color:#1677ff;font-size:12px;font-weight:500;border:1px solid rgba(22,119,255,.25)}.stage-pill.is-gate[data-v-8e02619c]{background:#faad1426;color:#faad14;border-color:#faad144d}.stage-idx[data-v-8e02619c]{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;background:currentColor;color:#fff!important;border-radius:50%;font-size:10px;font-weight:700}.stage-pill.is-gate .stage-idx[data-v-8e02619c]{background:#faad14}.stage-arrow[data-v-8e02619c]{color:var(--text-muted);font-size:11px}.gate-icon[data-v-8e02619c]{font-size:11px}.tpl-stages[data-v-8e02619c]{display:flex;gap:4px;flex-wrap:wrap}
@@ -0,0 +1 @@
1
+ import{t as D,_ as Ze,u as et,b as tt,d as v}from"./index-3RqDry-K.js";import{R as at,at as lt,a1 as pe,H as ce,X as Le,Q as ot,b0 as it}from"./icons-DlxlFL4g.js";import{o as nt,M as m,R as f,P as s,c as a,N as o,K as g,r as h,L as u,O as y,u as _,F as z,Y as T,Q as S,S as k,_ as rt,f as I,a as Z}from"./vendor-BXcBOG8b.js";const st=Object.freeze(["initializing","training","aggregating","completed","failed"]),ut=Object.freeze(["pending","computing","completed"]),Re=Object.freeze(["shamir","beaver","gmw"]),pt=Object.freeze(["laplace","gaussian","exponential"]),ct=Object.freeze(["paillier","bfv","ckks"]),dt=Object.freeze(["sum","product","mean","count"]);function b(i,r=0){return typeof i=="number"&&Number.isFinite(i)?i:r}function mt(i,r=0){if(!i||typeof i!="object")return null;const n=i.id||"";return n?{key:n,id:n,name:String(i.name||n),description:String(i.description||""),_idx:r}:null}function de(i){const r=D(i);return Array.isArray(r)?r.map(mt).filter(Boolean):[]}function yt(i,r=0){if(!i||typeof i!="object")return null;const n=i.id||"";return n?{key:n,id:n,name:String(i.name||""),modelType:i.modelType??i.model_type??"neural_network",architecture:String(i.architecture||""),status:String(i.status||"initializing").toLowerCase(),currentRound:b(i.currentRound??i.current_round,0),totalRounds:b(i.totalRounds??i.total_rounds,0),participantCount:b(i.participantCount??i.participant_count,0),accuracy:b(i.accuracy,0),loss:i.loss==null?null:b(i.loss,null),learningRate:b(i.learningRate??i.learning_rate,0),aggregationStrategy:i.aggregationStrategy??i.aggregation_strategy??"",privacyBudgetSpent:b(i.privacyBudgetSpent??i.privacy_budget_spent,0),createdAt:i.createdAt??i.created_at??null,updatedAt:i.updatedAt??i.updated_at??null,_idx:r}:null}function vt(i){const r=D(i);return Array.isArray(r)?r.map(yt).filter(Boolean):[]}function ft(i,r=0){if(!i||typeof i!="object")return null;const n=i.id||"";if(!n)return null;let L=i.participantIds??i.participant_ids??[];if(typeof L=="string")try{L=JSON.parse(L)}catch{L=[]}return Array.isArray(L)||(L=[]),{key:n,id:n,computationType:i.computationType??i.computation_type??"",protocol:String(i.protocol||"shamir").toLowerCase(),participantCount:b(i.participantCount??i.participant_count,0),participantIds:L,resultHash:i.resultHash??i.result_hash??null,status:String(i.status||"pending").toLowerCase(),sharesReceived:b(i.sharesReceived??i.shares_received,0),sharesRequired:b(i.sharesRequired??i.shares_required,0),computationTimeMs:i.computationTimeMs??i.computation_time_ms??null,errorMessage:i.errorMessage??i.error_message??"",createdAt:i.createdAt??i.created_at??null,completedAt:i.completedAt??i.completed_at??null,_idx:r}}function gt(i){const r=D(i);return Array.isArray(r)?r.map(ft).filter(Boolean):[]}function bt(i){const r=D(i);return!r||typeof r!="object"||Array.isArray(r)?null:{published:!!r.published,reason:r.reason||null,data:r.data??null,epsilon:b(r.epsilon,0),delta:b(r.delta,0),mechanism:String(r.mechanism||""),budgetSpent:b(r.budgetSpent??r.budget_spent,0),budgetRemaining:b(r.budgetRemaining??r.budget_remaining,0)}}function ht(i){const r=D(i);return!r||typeof r!="object"||Array.isArray(r)?null:{result:r.result??null,operation:String(r.operation||""),scheme:String(r.scheme||""),inputCount:b(r.inputCount??r.input_count,0),encrypted:r.encrypted!==!1}}const _t={privacyBudget:{spent:0,limit:0,remaining:0,exhausted:!1},federatedLearning:{totalModels:0,completed:0,training:0,avgAccuracy:0},mpc:{totalComputations:0,completed:0,pending:0,byProtocol:{}}};function kt(i){const r=JSON.parse(JSON.stringify(_t)),n=D(i);if(!n||typeof n!="object"||Array.isArray(n))return r;if(n.privacyBudget&&typeof n.privacyBudget=="object"&&(r.privacyBudget.spent=b(n.privacyBudget.spent,0),r.privacyBudget.limit=b(n.privacyBudget.limit,0),r.privacyBudget.remaining=b(n.privacyBudget.remaining,0),r.privacyBudget.exhausted=!!n.privacyBudget.exhausted),n.federatedLearning&&typeof n.federatedLearning=="object"&&(r.federatedLearning.totalModels=b(n.federatedLearning.totalModels,0),r.federatedLearning.completed=b(n.federatedLearning.completed,0),r.federatedLearning.training=b(n.federatedLearning.training,0),r.federatedLearning.avgAccuracy=b(n.federatedLearning.avgAccuracy,0)),n.mpc&&typeof n.mpc=="object"&&(r.mpc.totalComputations=b(n.mpc.totalComputations,0),r.mpc.completed=b(n.mpc.completed,0),r.mpc.pending=b(n.mpc.pending,0),n.mpc.byProtocol&&typeof n.mpc.byProtocol=="object"))for(const[L,j]of Object.entries(n.mpc.byProtocol))typeof j=="number"&&Number.isFinite(j)&&(r.mpc.byProtocol[L]=j);return r}function Ae(i){if(i==null||i==="")return"—";const r=typeof i=="number"?new Date(i):new Date(String(i));return isNaN(r.getTime())?String(i):r.toLocaleString("zh-CN",{hour12:!1})}const $t={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},Ct={class:"page-title"},St={class:"page-sub"},xt={style:{"font-size":"11px",color:"var(--text-secondary)"}},zt={class:"catalog-name"},Lt={class:"catalog-desc"},Rt={class:"catalog-name"},At={class:"catalog-desc"},Mt={class:"catalog-name"},jt={class:"catalog-desc"},Ft={class:"filter-bar"},Tt={style:{color:"var(--text-primary)","font-weight":"500"}},Ot={style:{color:"var(--text-secondary)","font-size":"11px","margin-top":"2px"}},Pt={style:{"font-size":"11px",color:"var(--text-secondary)"}},Bt={key:0,style:{"font-size":"11px",color:"var(--text-secondary)"}},Ut={key:5,style:{"font-family":"monospace",color:"var(--text-secondary)"}},wt={key:6,style:{color:"var(--text-secondary)","font-size":"11px"}},Nt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},Et={class:"filter-bar"},qt={key:0,style:{color:"var(--text-primary)","font-family":"monospace","font-weight":"500"}},Ht={key:0,style:{"font-family":"monospace",color:"var(--text-secondary)","font-size":"12px"}},It={key:1,style:{color:"var(--text-muted)"}},Dt={key:5,style:{color:"var(--text-secondary)","font-size":"11px"}},Jt={key:1,style:{color:"var(--text-muted)","font-size":"11px","font-family":"monospace"}},Kt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},Vt={style:{"margin-top":"12px","font-size":"12px",color:"var(--text-secondary)"}},Qt={style:{"margin-top":"12px","font-size":"12px",color:"var(--text-secondary)"}},Wt={__name:"Privacy",setup(i){const r=et(),{t:n}=tt(),L=h(!1),j=h(!1),ee=h(!1),te=h(!1),ae=h(""),le=h(""),me=h([]),ye=h([]),ve=h([]),oe=h([]),fe=h([]),R=h({privacyBudget:{spent:0,limit:0,remaining:0,exhausted:!1},federatedLearning:{totalModels:0,completed:0,training:0,avgAccuracy:0},mpc:{totalComputations:0,completed:0,pending:0,byProtocol:{}}}),ie=h("models"),J=h(""),V=h(""),Q=h(""),W=h(!1),X=h(!1),ne=h(!1),re=h(!1),c=Z({name:"",modelType:"",architecture:"",rounds:10,lr:.01,participants:0}),$=Z({type:"",protocol:"shamir",participants:"",threshold:null}),C=Z({data:"",mechanism:"laplace",epsilon:.1,delta:1e-5,sensitivity:1}),A=Z({data:"",operation:"sum",scheme:"paillier"}),M=h(null),O=h(null),Me=I(()=>[{title:n("privacy.modelCols.name"),key:"name"},{title:n("privacy.modelCols.status"),key:"status",width:"120px"},{title:n("privacy.modelCols.progress"),key:"progress",width:"160px"},{title:n("privacy.modelCols.accuracy"),key:"accuracy",width:"110px"},{title:n("privacy.modelCols.participants"),key:"participants",width:"90px"},{title:n("privacy.modelCols.budget"),key:"budget",width:"100px"},{title:n("privacy.modelCols.updatedAt"),key:"updatedAt",width:"160px"},{title:n("privacy.modelCols.action"),key:"action",width:"180px"}]),je=I(()=>[{title:n("privacy.computationCols.type"),key:"type",width:"160px"},{title:n("privacy.computationCols.protocol"),key:"protocol",width:"100px"},{title:n("privacy.computationCols.progress"),key:"progress"},{title:n("privacy.computationCols.status"),key:"status",width:"110px"},{title:n("privacy.computationCols.time"),key:"time",width:"110px"},{title:n("privacy.computationCols.createdAt"),key:"createdAt",width:"160px"},{title:n("privacy.computationCols.action"),key:"action",width:"160px"}]),Fe=I(()=>R.value.federatedLearning.avgAccuracy*100),Te=I(()=>{const e=R.value.privacyBudget.remaining,l=R.value.privacyBudget.limit;if(l===0)return"#888";const d=e/l;return d<.2?"#ff4d4f":d<.5?"#faad14":"#52c41a"}),Oe=I(()=>J.value?oe.value.filter(e=>e.status===J.value):oe.value),Pe=I(()=>{let e=fe.value;return V.value&&(e=e.filter(l=>l.protocol===V.value)),Q.value&&(e=e.filter(l=>l.status===Q.value)),e});function ge(e){const l=`privacy.flStatusLabels.${e}`,d=n(l);return d===l?e:d}function Be(e){return{initializing:"default",training:"processing",aggregating:"cyan",completed:"green",failed:"red"}[e]||"default"}function be(e){const l=`privacy.mpcStatusLabels.${e}`,d=n(l);return d===l?e:d}function Ue(e){return{pending:"default",computing:"processing",completed:"green"}[e]||"default"}function we(e){return e>=.85?"#52c41a":e>=.6?"#faad14":"#ff4d4f"}function Ne(e){return e.status==="initializing"||e.status==="training"||e.status==="aggregating"}function Ee({key:e}){e==="model"?W.value=!0:e==="computation"?X.value=!0:e==="dp"?(M.value=null,ne.value=!0):e==="he"&&(O.value=null,re.value=!0)}async function B(){L.value=!0;try{const[e,l,d,q,se,ue]=await Promise.all([r.execute("privacy protocols --json",8e3).catch(()=>({output:""})),r.execute("privacy dp-mechanisms --json",8e3).catch(()=>({output:""})),r.execute("privacy he-schemes --json",8e3).catch(()=>({output:""})),r.execute("privacy models --limit 100 --json",1e4).catch(()=>({output:""})),r.execute("privacy computations --limit 100 --json",1e4).catch(()=>({output:""})),r.execute("privacy report --json",8e3).catch(()=>({output:""}))]);me.value=de(e.output),ye.value=de(l.output),ve.value=de(d.output),oe.value=vt(q.output),fe.value=gt(se.output),R.value=kt(ue.output)}catch(e){v.error(n("privacy.msg.loadFailed")+": "+(e?.message||e))}finally{L.value=!1}}async function qe(){if(!c.name.trim()){v.warning(n("privacy.msg.modelNameEmpty"));return}j.value=!0;try{const e=[`privacy create-model "${c.name.trim().replace(/"/g,'\\"')}"`];c.modelType.trim()&&e.push(`--type "${c.modelType.trim().replace(/"/g,'\\"')}"`),c.architecture.trim()&&e.push(`--arch "${c.architecture.trim().replace(/"/g,'\\"')}"`),c.rounds!=null&&e.push(`--rounds ${c.rounds}`),c.lr!=null&&e.push(`--lr ${c.lr}`),c.participants!=null&&e.push(`--participants ${c.participants}`),e.push("--json");const{output:l}=await r.execute(e.join(" "),12e3);if(/error|失败/i.test(l)&&!/"modelId"/.test(l)){v.error(n("privacy.msg.modelCreateFailed")+": "+l.slice(0,120));return}v.success(n("privacy.msg.modelCreateSuccess")),W.value=!1,he(),await B()}catch(e){v.error(n("privacy.msg.modelCreateFailed")+": "+(e?.message||e))}finally{j.value=!1}}async function He(){if(!$.type.trim()){v.warning(n("privacy.msg.computationTypeEmpty"));return}j.value=!0;try{const e=[`privacy create-computation "${$.type.trim().replace(/"/g,'\\"')}"`];if(e.push(`--protocol ${$.protocol}`),$.participants.trim()){const d=$.participants.split(/[,\s]+/).filter(Boolean).join(",");d&&e.push(`--participants "${d}"`)}$.threshold!=null&&e.push(`--threshold ${$.threshold}`),e.push("--json");const{output:l}=await r.execute(e.join(" "),1e4);if(/error|失败|invalid/i.test(l)&&!/"computationId"/.test(l)){v.error(n("privacy.msg.computationCreateFailed")+": "+l.slice(0,120));return}v.success(n("privacy.msg.computationCreateSuccess")),X.value=!1,_e(),ie.value="computations",await B()}catch(e){v.error(n("privacy.msg.computationCreateFailed")+": "+(e?.message||e))}finally{j.value=!1}}async function Ie(e){ae.value=e.id;try{const{output:l}=await r.execute(`privacy train ${e.id} --json`,12e3);if(/error|失败/i.test(l)&&!/"trained"/.test(l)){v.error(n("privacy.msg.trainFailed")+": "+l.slice(0,120));return}v.success(n("privacy.msg.trainSuccess")),await B()}catch(l){v.error(n("privacy.msg.trainFailed")+": "+(l?.message||l))}finally{ae.value=""}}async function De(e){try{const{output:l}=await r.execute(`privacy fail-model ${e.id} --json`,8e3);if(/error/i.test(l)&&!/"failed"/.test(l)){v.error(n("privacy.msg.failMarkFailed")+": "+l.slice(0,120));return}v.success(n("privacy.msg.failMarkSuccess")),await B()}catch(l){v.error(n("privacy.msg.failMarkFailed")+": "+(l?.message||l))}}async function Je(e){le.value=e.id;try{const{output:l}=await r.execute(`privacy submit-share ${e.id} --json`,1e4);if(/error|失败/i.test(l)&&!/"submitted"/.test(l)){v.error(n("privacy.msg.submitFailed")+": "+l.slice(0,120));return}v.success(n("privacy.msg.submitSuccess")),await B()}catch(l){v.error(n("privacy.msg.submitFailed")+": "+(l?.message||l))}finally{le.value=""}}async function Ke(){if(!C.data.trim()){v.warning(n("privacy.msg.dataEmpty"));return}ee.value=!0,M.value=null;try{const e=["privacy dp-publish"];e.push(`--data ${JSON.stringify(C.data.trim())}`),e.push(`--mechanism ${C.mechanism}`),C.epsilon!=null&&e.push(`--epsilon ${C.epsilon}`),C.delta!=null&&e.push(`--delta ${C.delta}`),C.sensitivity!=null&&e.push(`--sensitivity ${C.sensitivity}`),e.push("--json");const{output:l}=await r.execute(e.join(" "),1e4),d=bt(l);if(!d){v.error(n("privacy.msg.dpFailed")+": "+l.slice(0,120));return}M.value=d,d.published?(v.success(n("privacy.msg.dpSuccess")),await B()):v.warning(n("privacy.msg.dpRejected",{reason:d.reason||"unknown"}))}catch(e){v.error(n("privacy.msg.dpFailed")+": "+(e?.message||e))}finally{ee.value=!1}}async function Ve(){if(!A.data.trim()){v.warning(n("privacy.msg.dataEmpty"));return}try{JSON.parse(A.data)}catch{v.warning(n("privacy.msg.dataInvalidJson"));return}te.value=!0,O.value=null;try{const e=["privacy he-query"];e.push(`--data ${JSON.stringify(A.data.trim())}`),e.push(`--operation ${A.operation}`),e.push(`--scheme ${A.scheme}`),e.push("--json");const{output:l}=await r.execute(e.join(" "),1e4),d=ht(l);if(!d){v.error(n("privacy.msg.heFailed")+": "+l.slice(0,120));return}O.value=d,v.success(n("privacy.msg.heSuccess",{scheme:d.scheme,op:d.operation}))}catch(e){v.error(n("privacy.msg.heFailed")+": "+(e?.message||e))}finally{te.value=!1}}function he(){c.name="",c.modelType="",c.architecture="",c.rounds=10,c.lr=.01,c.participants=0}function _e(){$.type="",$.protocol="shamir",$.participants="",$.threshold=null}return nt(B),(e,l)=>{const d=g("a-button"),q=g("a-menu-item"),se=g("a-menu"),ue=g("a-dropdown"),Qe=g("a-space"),U=g("a-statistic"),F=g("a-card"),w=g("a-col"),ke=g("a-row"),N=g("a-tag"),P=g("a-radio-button"),H=g("a-radio-group"),$e=g("a-progress"),We=g("a-popconfirm"),Ce=g("a-table"),Se=g("a-tab-pane"),Xe=g("a-tabs"),K=g("a-input"),x=g("a-form-item"),E=g("a-input-number"),Y=g("a-form"),G=g("a-modal"),Ye=g("a-select-option"),Ge=g("a-select"),xe=g("a-textarea");return u(),m("div",null,[f("div",$t,[f("div",null,[f("h2",Ct,s(e.$t("privacy.title")),1),f("p",St,s(e.$t("privacy.subtitle")),1)]),a(Qe,null,{default:o(()=>[a(d,{loading:L.value,onClick:B},{icon:o(()=>[a(_(at))]),default:o(()=>[y(" "+s(e.$t("privacy.refresh")),1)]),_:1},8,["loading"]),a(ue,{trigger:["click"]},{overlay:o(()=>[a(se,{onClick:Ee},{default:o(()=>[a(q,{key:"model"},{default:o(()=>[a(_(pe)),y(" "+s(e.$t("privacy.actions.model")),1)]),_:1}),a(q,{key:"computation"},{default:o(()=>[a(_(ce)),y(" "+s(e.$t("privacy.actions.computation")),1)]),_:1}),a(q,{key:"dp"},{default:o(()=>[a(_(Le)),y(" "+s(e.$t("privacy.actions.dp")),1)]),_:1}),a(q,{key:"he"},{default:o(()=>[a(_(ot)),y(" "+s(e.$t("privacy.actions.he")),1)]),_:1})]),_:1})]),default:o(()=>[a(d,{type:"primary"},{icon:o(()=>[a(_(lt))]),default:o(()=>[y(" "+s(e.$t("privacy.actionDropdown")),1)]),_:1})]),_:1})]),_:1})]),a(ke,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:o(()=>[a(w,{xs:12,sm:8,lg:5},{default:o(()=>[a(F,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(U,{title:e.$t("privacy.stats.models"),value:R.value.federatedLearning.totalModels,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:o(()=>[a(_(pe))]),_:1},8,["title","value"])]),_:1})]),_:1}),a(w,{xs:12,sm:8,lg:5},{default:o(()=>[a(F,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(U,{title:e.$t("privacy.stats.avgAccuracy"),value:Fe.value,precision:1,suffix:"%","value-style":{color:R.value.federatedLearning.avgAccuracy>=.8?"#52c41a":"#faad14",fontSize:"20px"}},{prefix:o(()=>[a(_(it))]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),a(w,{xs:12,sm:8,lg:5},{default:o(()=>[a(F,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(U,{title:e.$t("privacy.stats.computations"),value:R.value.mpc.totalComputations,"value-style":{color:"#722ed1",fontSize:"20px"}},{prefix:o(()=>[a(_(ce))]),_:1},8,["title","value"])]),_:1})]),_:1}),a(w,{xs:12,sm:8,lg:5},{default:o(()=>[a(F,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(U,{title:e.$t("privacy.stats.budget"),value:R.value.privacyBudget.remaining,precision:2,"value-style":{color:Te.value,fontSize:"20px"}},{prefix:o(()=>[a(_(Le))]),suffix:o(()=>[f("span",xt,"/ "+s(R.value.privacyBudget.limit),1)]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),a(w,{xs:24,sm:8,lg:4},{default:o(()=>[a(F,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(U,{title:e.$t("privacy.stats.budgetState"),value:R.value.privacyBudget.exhausted?e.$t("privacy.stats.exhausted"):e.$t("privacy.stats.ample"),"value-style":{color:R.value.privacyBudget.exhausted?"#ff4d4f":"#52c41a",fontSize:"20px"}},null,8,["title","value","value-style"])]),_:1})]),_:1})]),_:1}),a(ke,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:o(()=>[a(w,{xs:24,md:8},{default:o(()=>[a(F,{title:e.$t("privacy.catalog.protocols"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"},"body-style":{padding:"12px 16px"}},{default:o(()=>[(u(!0),m(z,null,T(me.value,t=>(u(),m("div",{key:t.id,class:"catalog-item"},[a(N,{color:"purple",style:{"font-family":"monospace"}},{default:o(()=>[y(s(t.id),1)]),_:2},1024),f("span",zt,s(t.name),1),f("span",Lt,s(t.description),1)]))),128))]),_:1},8,["title"])]),_:1}),a(w,{xs:24,md:8},{default:o(()=>[a(F,{title:e.$t("privacy.catalog.dp"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"},"body-style":{padding:"12px 16px"}},{default:o(()=>[(u(!0),m(z,null,T(ye.value,t=>(u(),m("div",{key:t.id,class:"catalog-item"},[a(N,{color:"orange",style:{"font-family":"monospace"}},{default:o(()=>[y(s(t.id),1)]),_:2},1024),f("span",Rt,s(t.name),1),f("span",At,s(t.description),1)]))),128))]),_:1},8,["title"])]),_:1}),a(w,{xs:24,md:8},{default:o(()=>[a(F,{title:e.$t("privacy.catalog.he"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"},"body-style":{padding:"12px 16px"}},{default:o(()=>[(u(!0),m(z,null,T(ve.value,t=>(u(),m("div",{key:t.id,class:"catalog-item"},[a(N,{color:"cyan",style:{"font-family":"monospace"}},{default:o(()=>[y(s(t.id),1)]),_:2},1024),f("span",Mt,s(t.name),1),f("span",jt,s(t.description),1)]))),128))]),_:1},8,["title"])]),_:1})]),_:1}),a(Xe,{activeKey:ie.value,"onUpdate:activeKey":l[3]||(l[3]=t=>ie.value=t),class:"privacy-tabs"},{default:o(()=>[a(Se,{key:"models",tab:e.$t("privacy.tabs.models")},{default:o(()=>[f("div",Ft,[a(H,{value:J.value,"onUpdate:value":l[0]||(l[0]=t=>J.value=t),size:"small","button-style":"solid"},{default:o(()=>[a(P,{value:""},{default:o(()=>[y(s(e.$t("privacy.filter.all")),1)]),_:1}),(u(!0),m(z,null,T(_(st),t=>(u(),S(P,{key:t,value:t},{default:o(()=>[y(s(ge(t)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),a(Ce,{columns:Me.value,"data-source":Oe.value,pagination:{pageSize:20,showTotal:t=>e.$t("privacy.table.totalSuffix",{n:t})},size:"small",loading:L.value,style:{background:"var(--bg-card)"}},{bodyCell:o(({column:t,record:p})=>[t.key==="name"?(u(),m(z,{key:0},[f("span",Tt,s(p.name),1),f("div",Ot,s(p.modelType)+" / "+s(p.architecture),1)],64)):k("",!0),t.key==="status"?(u(),S(N,{key:1,color:Be(p.status)},{default:o(()=>[y(s(ge(p.status)),1)]),_:2},1032,["color"])):k("",!0),t.key==="progress"?(u(),m(z,{key:2},[a($e,{percent:p.totalRounds?Math.round(100*p.currentRound/p.totalRounds):0,size:"small",status:p.status==="failed"?"exception":p.status==="completed"?"success":"active"},null,8,["percent","status"]),f("div",Pt,s(e.$t("privacy.table.rounds",{cur:p.currentRound,total:p.totalRounds})),1)],64)):k("",!0),t.key==="accuracy"?(u(),m(z,{key:3},[f("span",{style:rt({color:we(p.accuracy),fontFamily:"monospace"})},s((p.accuracy*100).toFixed(1))+"% ",5),p.loss!=null?(u(),m("div",Bt," loss "+s(p.loss.toFixed(3)),1)):k("",!0)],64)):k("",!0),t.key==="participants"?(u(),S(N,{key:4,color:"blue",style:{"font-size":"11px"}},{default:o(()=>[y(s(p.participantCount),1)]),_:2},1024)):k("",!0),t.key==="budget"?(u(),m("span",Ut,s(p.privacyBudgetSpent.toFixed(3)),1)):k("",!0),t.key==="updatedAt"?(u(),m("span",wt,s(_(Ae)(p.updatedAt)),1)):k("",!0),t.key==="action"?(u(),m(z,{key:7},[Ne(p)?(u(),S(d,{key:0,size:"small",type:"link",loading:ae.value===p.id,onClick:ze=>Ie(p)},{default:o(()=>[y(s(e.$t("privacy.table.trainOne")),1)]),_:1},8,["loading","onClick"])):k("",!0),p.status!=="failed"&&p.status!=="completed"?(u(),S(We,{key:1,title:e.$t("privacy.table.failConfirm"),"ok-text":e.$t("privacy.table.failOk"),"cancel-text":e.$t("privacy.table.failCancel"),onConfirm:ze=>De(p)},{default:o(()=>[a(d,{size:"small",type:"link",danger:""},{default:o(()=>[y(s(e.$t("privacy.table.failMark")),1)]),_:1})]),_:1},8,["title","ok-text","cancel-text","onConfirm"])):k("",!0)],64)):k("",!0)]),emptyText:o(()=>[f("div",Nt,[a(_(pe),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),y(" "+s(J.value?e.$t("privacy.table.emptyModelsFiltered"):e.$t("privacy.table.emptyModels")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),a(Se,{key:"computations",tab:e.$t("privacy.tabs.computations")},{default:o(()=>[f("div",Et,[a(H,{value:V.value,"onUpdate:value":l[1]||(l[1]=t=>V.value=t),size:"small"},{default:o(()=>[a(P,{value:""},{default:o(()=>[y(s(e.$t("privacy.filter.allProtocols")),1)]),_:1}),(u(!0),m(z,null,T(_(Re),t=>(u(),S(P,{key:t,value:t},{default:o(()=>[y(s(t),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),a(H,{value:Q.value,"onUpdate:value":l[2]||(l[2]=t=>Q.value=t),size:"small"},{default:o(()=>[a(P,{value:""},{default:o(()=>[y(s(e.$t("privacy.filter.allStatuses")),1)]),_:1}),(u(!0),m(z,null,T(_(ut),t=>(u(),S(P,{key:t,value:t},{default:o(()=>[y(s(be(t)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),a(Ce,{columns:je.value,"data-source":Pe.value,pagination:{pageSize:20,showTotal:t=>e.$t("privacy.table.totalSuffix",{n:t})},size:"small",loading:L.value,style:{background:"var(--bg-card)"}},{bodyCell:o(({column:t,record:p})=>[t.key==="type"?(u(),m("span",qt,s(p.computationType),1)):k("",!0),t.key==="protocol"?(u(),S(N,{key:1,color:"purple",style:{"font-family":"monospace"}},{default:o(()=>[y(s(p.protocol),1)]),_:2},1024)):k("",!0),t.key==="progress"?(u(),S($e,{key:2,percent:p.sharesRequired?Math.round(100*p.sharesReceived/p.sharesRequired):0,size:"small",status:p.status==="completed"?"success":"active",format:()=>`${p.sharesReceived}/${p.sharesRequired}`},null,8,["percent","status","format"])):k("",!0),t.key==="status"?(u(),S(N,{key:3,color:Ue(p.status)},{default:o(()=>[y(s(be(p.status)),1)]),_:2},1032,["color"])):k("",!0),t.key==="time"?(u(),m(z,{key:4},[p.computationTimeMs!=null?(u(),m("span",Ht,s(p.computationTimeMs)+" ms ",1)):(u(),m("span",It,"—"))],64)):k("",!0),t.key==="createdAt"?(u(),m("span",Dt,s(_(Ae)(p.createdAt)),1)):k("",!0),t.key==="action"?(u(),m(z,{key:6},[p.status!=="completed"?(u(),S(d,{key:0,size:"small",type:"link",loading:le.value===p.id,onClick:ze=>Je(p)},{default:o(()=>[y(s(e.$t("privacy.table.submitShare")),1)]),_:1},8,["loading","onClick"])):(u(),m("span",Jt," hash "+s(p.resultHash?.slice(0,8)||"—"),1))],64)):k("",!0)]),emptyText:o(()=>[f("div",Kt,[a(_(ce),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),y(" "+s(e.$t("privacy.table.emptyComputations")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"])]),_:1},8,["activeKey"]),a(G,{open:W.value,"onUpdate:open":l[10]||(l[10]=t=>W.value=t),title:e.$t("privacy.model_modal.title"),"confirm-loading":j.value,width:540,"ok-text":e.$t("privacy.model_modal.ok"),"cancel-text":e.$t("privacy.model_modal.cancel"),onOk:qe,onCancel:he},{default:o(()=>[a(Y,{"label-col":{span:6},"wrapper-col":{span:18},style:{"margin-top":"16px"}},{default:o(()=>[a(x,{label:e.$t("privacy.model_modal.nameLabel"),required:""},{default:o(()=>[a(K,{value:c.name,"onUpdate:value":l[4]||(l[4]=t=>c.name=t),placeholder:e.$t("privacy.model_modal.namePlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.model_modal.typeLabel")},{default:o(()=>[a(K,{value:c.modelType,"onUpdate:value":l[5]||(l[5]=t=>c.modelType=t),placeholder:e.$t("privacy.model_modal.typePlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.model_modal.archLabel")},{default:o(()=>[a(K,{value:c.architecture,"onUpdate:value":l[6]||(l[6]=t=>c.architecture=t),placeholder:e.$t("privacy.model_modal.archPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.model_modal.roundsLabel")},{default:o(()=>[a(E,{value:c.rounds,"onUpdate:value":l[7]||(l[7]=t=>c.rounds=t),min:1,max:1e3,style:{width:"100%"}},null,8,["value"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.model_modal.lrLabel")},{default:o(()=>[a(E,{value:c.lr,"onUpdate:value":l[8]||(l[8]=t=>c.lr=t),min:0,max:1,step:.001,style:{width:"100%"}},null,8,["value"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.model_modal.participantsLabel")},{default:o(()=>[a(E,{value:c.participants,"onUpdate:value":l[9]||(l[9]=t=>c.participants=t),min:0,max:1e3,style:{width:"100%"}},null,8,["value"])]),_:1},8,["label"])]),_:1})]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),a(G,{open:X.value,"onUpdate:open":l[15]||(l[15]=t=>X.value=t),title:e.$t("privacy.computation_modal.title"),"confirm-loading":j.value,width:520,"ok-text":e.$t("privacy.computation_modal.ok"),"cancel-text":e.$t("privacy.computation_modal.cancel"),onOk:He,onCancel:_e},{default:o(()=>[a(Y,{"label-col":{span:6},"wrapper-col":{span:18},style:{"margin-top":"16px"}},{default:o(()=>[a(x,{label:e.$t("privacy.computation_modal.typeLabel"),required:""},{default:o(()=>[a(K,{value:$.type,"onUpdate:value":l[11]||(l[11]=t=>$.type=t),placeholder:e.$t("privacy.computation_modal.typePlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.computation_modal.protocolLabel")},{default:o(()=>[a(Ge,{value:$.protocol,"onUpdate:value":l[12]||(l[12]=t=>$.protocol=t)},{default:o(()=>[(u(!0),m(z,null,T(_(Re),t=>(u(),S(Ye,{key:t,value:t},{default:o(()=>[y(s(t),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.computation_modal.participantsLabel")},{default:o(()=>[a(xe,{value:$.participants,"onUpdate:value":l[13]||(l[13]=t=>$.participants=t),placeholder:e.$t("privacy.computation_modal.participantsPlaceholder"),"auto-size":{minRows:2,maxRows:4}},null,8,["value","placeholder"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.computation_modal.thresholdLabel")},{default:o(()=>[a(E,{value:$.threshold,"onUpdate:value":l[14]||(l[14]=t=>$.threshold=t),min:2,max:100,placeholder:e.$t("privacy.computation_modal.thresholdPlaceholder"),style:{width:"100%"}},null,8,["value","placeholder"])]),_:1},8,["label"])]),_:1})]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),a(G,{open:ne.value,"onUpdate:open":l[21]||(l[21]=t=>ne.value=t),title:e.$t("privacy.dp_modal.title"),"confirm-loading":ee.value,width:520,"ok-text":e.$t("privacy.dp_modal.ok"),"cancel-text":e.$t("privacy.dp_modal.cancel"),onOk:Ke},{default:o(()=>[a(Y,{"label-col":{span:6},"wrapper-col":{span:18},style:{"margin-top":"16px"}},{default:o(()=>[a(x,{label:e.$t("privacy.dp_modal.dataLabel"),required:""},{default:o(()=>[a(K,{value:C.data,"onUpdate:value":l[16]||(l[16]=t=>C.data=t),placeholder:e.$t("privacy.dp_modal.dataPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.dp_modal.mechanismLabel")},{default:o(()=>[a(H,{value:C.mechanism,"onUpdate:value":l[17]||(l[17]=t=>C.mechanism=t)},{default:o(()=>[(u(!0),m(z,null,T(_(pt),t=>(u(),S(P,{key:t,value:t},{default:o(()=>[y(s(t),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.dp_modal.epsilonLabel")},{default:o(()=>[a(E,{value:C.epsilon,"onUpdate:value":l[18]||(l[18]=t=>C.epsilon=t),min:0,step:.01,style:{width:"100%"}},null,8,["value"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.dp_modal.deltaLabel")},{default:o(()=>[a(E,{value:C.delta,"onUpdate:value":l[19]||(l[19]=t=>C.delta=t),min:0,step:1e-6,style:{width:"100%"}},null,8,["value"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.dp_modal.sensitivityLabel")},{default:o(()=>[a(E,{value:C.sensitivity,"onUpdate:value":l[20]||(l[20]=t=>C.sensitivity=t),min:0,step:.1,style:{width:"100%"}},null,8,["value"])]),_:1},8,["label"])]),_:1}),M.value?(u(),S(F,{key:0,size:"small",style:{background:"var(--bg-base)","margin-top":"8px"}},{default:o(()=>[M.value.published?(u(),m(z,{key:0},[a(U,{title:e.$t("privacy.dp_modal.noisedTitle"),value:M.value.data,precision:3,"value-style":{color:"#52c41a"}},null,8,["title","value"]),f("div",Vt,[f("div",null,s(e.$t("privacy.dp_modal.spentLine",{n:M.value.budgetSpent.toFixed(3)})),1),f("div",null,s(e.$t("privacy.dp_modal.remainingLine",{n:M.value.budgetRemaining.toFixed(3)})),1),f("div",null,s(e.$t("privacy.dp_modal.mechanismLine",{name:M.value.mechanism,epsilon:M.value.epsilon})),1)])],64)):(u(),S(U,{key:1,title:e.$t("privacy.dp_modal.failedTitle"),value:M.value.reason||"unknown","value-style":{color:"#ff4d4f"}},null,8,["title","value"]))]),_:1})):k("",!0)]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),a(G,{open:re.value,"onUpdate:open":l[25]||(l[25]=t=>re.value=t),title:e.$t("privacy.he_modal.title"),"confirm-loading":te.value,width:500,"ok-text":e.$t("privacy.he_modal.ok"),"cancel-text":e.$t("privacy.he_modal.cancel"),onOk:Ve},{default:o(()=>[a(Y,{"label-col":{span:6},"wrapper-col":{span:18},style:{"margin-top":"16px"}},{default:o(()=>[a(x,{label:e.$t("privacy.he_modal.dataLabel"),required:""},{default:o(()=>[a(xe,{value:A.data,"onUpdate:value":l[22]||(l[22]=t=>A.data=t),placeholder:e.$t("privacy.he_modal.dataPlaceholder"),"auto-size":{minRows:2,maxRows:4}},null,8,["value","placeholder"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.he_modal.operationLabel")},{default:o(()=>[a(H,{value:A.operation,"onUpdate:value":l[23]||(l[23]=t=>A.operation=t)},{default:o(()=>[(u(!0),m(z,null,T(_(dt),t=>(u(),S(P,{key:t,value:t},{default:o(()=>[y(s(t),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.he_modal.schemeLabel")},{default:o(()=>[a(H,{value:A.scheme,"onUpdate:value":l[24]||(l[24]=t=>A.scheme=t)},{default:o(()=>[(u(!0),m(z,null,T(_(ct),t=>(u(),S(P,{key:t,value:t},{default:o(()=>[y(s(t),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"])]),_:1}),O.value?(u(),S(F,{key:0,size:"small",style:{background:"var(--bg-base)","margin-top":"8px"}},{default:o(()=>[a(U,{title:e.$t("privacy.he_modal.resultTitle"),value:O.value.result,"value-style":{color:"#1677ff"}},null,8,["title","value"]),f("div",Qt,[f("div",null,s(e.$t("privacy.he_modal.schemeLine",{name:O.value.scheme})),1),f("div",null,s(e.$t("privacy.he_modal.operationLine",{name:O.value.operation})),1),f("div",null,s(e.$t("privacy.he_modal.inputCountLine",{n:O.value.inputCount})),1),O.value.encrypted?(u(),S(N,{key:0,color:"green",style:{"margin-top":"4px","font-size":"10px"}},{default:o(()=>[y(s(e.$t("privacy.he_modal.encrypted")),1)]),_:1})):k("",!0)])]),_:1})):k("",!0)]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"])])}}},Zt=Ze(Wt,[["__scopeId","data-v-fe89c543"]]);export{Zt as default};