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
@@ -1 +0,0 @@
1
- import{r as b,I as f,J as h,U as d,S as R,V as E,c as n,K as c,o as N,P as k,F as V,Q as O,R as B}from"./vendor-Bn1JzzAn.js";import{u as j,_ as D,d as S}from"./index-k7QsBwyo.js";import{u as F}from"./useShellMode-CgR0wCYM.js";import{R as L}from"./icons-DG5UD-6K.js";const p={enabled:!0,sound:!0,badge:!0,desktop:!0};function x(s){if(s&&s.ok===!1)throw new Error(s.error||"notification-settings handler failed");return s?.result??s}const u={settings:b({...p})};function T(){const s=j(),t=F().isEmbedded;async function _(){if(!t)return u.settings.value={...p},u.settings.value;const a=await s.sendRaw({type:"notification-settings.get"},1e4),o=x(a);if(o?.success===!1)throw new Error(o.error||"notification-settings.get failed");return u.settings.value={...p,...o?.settings||{}},u.settings.value}async function e(a){if(!a||typeof a!="object")throw new Error("patch is required");if(!t)throw new Error("通知设置仅在嵌入式 web-shell 中可写");const o=await s.sendRaw({type:"notification-settings.update",settings:a},1e4),i=x(o);if(i?.success===!1)throw new Error(i.error||"notification-settings.update failed");return u.settings.value={...p,...i?.settings||{}},u.settings.value}return{settings:u.settings,isEmbedded:t,load:_,update:e,DEFAULTS:p}}const A={__name:"NotificationSettings",setup(s,{expose:t}){t();const{settings:_,isEmbedded:e,load:a,update:o}=T(),i=b(!1),l=b(!1),g=b("");async function v(){i.value=!0;try{await a()}catch(m){S.error("加载失败: "+(m?.message||String(m)))}finally{i.value=!1}}async function y(m,r){if(e){l.value=!0;try{await o({[m]:r}),g.value=new Date().toLocaleTimeString(),S.success("已保存")}catch(C){S.error("保存失败: "+(C?.message||String(C))),await a().catch(()=>{})}finally{l.value=!1}}}N(v);const w={settings:_,isEmbedded:e,load:a,update:o,loading:i,saving:l,lastSaved:g,reload:v,onToggle:y,ref:b,onMounted:N,get message(){return S},get ReloadOutlined(){return L},get useNotificationSettings(){return T}};return Object.defineProperty(w,"__isScriptSetup",{enumerable:!1,value:!0}),w}},I={class:"footer-row"},J={key:0,class:"last-saved"};function M(s,t,_,e,a,o){const i=f("a-alert"),l=f("a-switch"),g=f("a-form-item"),v=f("a-form"),y=f("a-divider"),w=f("a-button"),m=f("a-card");return k(),h("div",null,[t[9]||(t[9]=d("div",{class:"page-head"},[d("div",null,[d("h2",{class:"page-title"},"通知设置"),d("p",{class:"page-sub"},"控制应用通知行为 · 与桌面 V5/V6 设置同源")])],-1)),e.isEmbedded?E("v-if",!0):(k(),R(i,{key:0,type:"info","show-icon":"",style:{"margin-bottom":"16px"},message:"浏览器模式只读",description:"纯浏览器没有 Electron AppConfig 后端,本页只能展示默认值。请使用桌面壳 (cc desktop) 写入。"})),n(m,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:c(()=>[n(v,{layout:"horizontal","label-col":{span:6},"wrapper-col":{span:18}},{default:c(()=>[n(g,{label:"启用通知"},{default:c(()=>[n(l,{checked:e.settings.enabled,disabled:!e.isEmbedded||e.saving,onChange:t[0]||(t[0]=r=>e.onToggle("enabled",r))},null,8,["checked","disabled"]),t[4]||(t[4]=d("span",{class:"hint"},"关闭后所有通知静默",-1))]),_:1}),e.settings.enabled?(k(),h(V,{key:0},[n(g,{label:"通知声音"},{default:c(()=>[n(l,{checked:e.settings.sound,disabled:!e.isEmbedded||e.saving,onChange:t[1]||(t[1]=r=>e.onToggle("sound",r))},null,8,["checked","disabled"]),t[5]||(t[5]=d("span",{class:"hint"},"桌面通知伴随系统提示音",-1))]),_:1}),n(g,{label:"角标提示"},{default:c(()=>[n(l,{checked:e.settings.badge,disabled:!e.isEmbedded||e.saving,onChange:t[2]||(t[2]=r=>e.onToggle("badge",r))},null,8,["checked","disabled"]),t[6]||(t[6]=d("span",{class:"hint"},"在应用图标 / 任务栏角标显示未读数",-1))]),_:1}),n(g,{label:"桌面通知"},{default:c(()=>[n(l,{checked:e.settings.desktop,disabled:!e.isEmbedded||e.saving,onChange:t[3]||(t[3]=r=>e.onToggle("desktop",r))},null,8,["checked","disabled"]),t[7]||(t[7]=d("span",{class:"hint"},"系统级 toast (Windows / macOS / Linux 原生通知)",-1))]),_:1})],64)):E("v-if",!0)]),_:1}),n(y),d("div",I,[n(w,{loading:e.loading,onClick:e.reload},{icon:c(()=>[n(e.ReloadOutlined)]),default:c(()=>[t[8]||(t[8]=O(" 重新加载 ",-1))]),_:1},8,["loading"]),e.lastSaved?(k(),h("span",J,"最近保存: "+B(e.lastSaved),1)):E("v-if",!0)])]),_:1})])}const z=D(A,[["render",M],["__scopeId","data-v-ae0392e9"],["__file","/tmp/cc-web-panel-j3HnbJ/repo/packages/web-panel/src/views/NotificationSettings.vue"]]);export{z as default};
@@ -1 +0,0 @@
1
- .order-card[data-v-5ed5524d]{padding:12px 16px;background:#fff;border:1px solid #f0f0f0;border-radius:8px;margin-bottom:8px}.head[data-v-5ed5524d]{display:flex;gap:8px;align-items:center;margin-bottom:8px;padding-bottom:8px;border-bottom:1px dashed #f0f0f0}.time[data-v-5ed5524d]{font-size:12px;color:#999;font-variant-numeric:tabular-nums}.row[data-v-5ed5524d]{display:flex;gap:12px;padding:4px 0;font-size:13px}.row .key[data-v-5ed5524d]{width:70px;color:#999;flex-shrink:0}.row .val[data-v-5ed5524d]{color:#333;word-break:break-word}.row.amount-row .amount[data-v-5ed5524d]{font-weight:600;color:#d48806;font-size:15px}.row .mono[data-v-5ed5524d]{font-family:ui-monospace,SF Mono,Consolas,monospace;font-size:12px;color:#666}
@@ -1 +0,0 @@
1
- import{I as w,P as l,J as u,U as s,R as n,c as i,K as v,Q as _,V as g,b as a}from"./vendor-Bn1JzzAn.js";import{_ as S}from"./index-k7QsBwyo.js";import"./icons-DG5UD-6K.js";const k={__name:"OrderTableRenderer",props:{event:{type:Object,required:!0}},setup(p,{expose:r}){r();const o=p,e=a(()=>o.event.content||{}),d=a(()=>o.event.extra||{}),m=a(()=>d.value.merchant||e.value.merchant||e.value.counterparty||"—"),c=a(()=>e.value.title||e.value.name||e.value.itemName||e.value.text||"—"),y=a(()=>{const t=e.value.amount??e.value.price??e.value.total;return t==null?"—":`${e.value.currency||"¥"} ${typeof t=="number"?t.toFixed(2):t}`}),T=a(()=>d.value.orderNo||e.value.orderNo||e.value.orderId),f=a(()=>e.value.status||e.value.state),b=a(()=>{const t=(f.value||"").toLowerCase();return t.includes("成功")||t.includes("succe")||t.includes("paid")?"green":t.includes("退")||t.includes("refund")?"orange":t.includes("失败")||t.includes("fail")?"red":"default"}),h=a(()=>{if(!o.event.occurredAt)return"";const t=new Date(o.event.occurredAt);return`${t.getFullYear()}-${String(t.getMonth()+1).padStart(2,"0")}-${String(t.getDate()).padStart(2,"0")} ${String(t.getHours()).padStart(2,"0")}:${String(t.getMinutes()).padStart(2,"0")}`}),x={props:o,c:e,e:d,merchantText:m,itemText:c,amountText:y,orderNo:T,statusText:f,statusColor:b,formattedTime:h,computed:a};return Object.defineProperty(x,"__isScriptSetup",{enumerable:!1,value:!0}),x}},N={class:"order-card"},C={class:"head"},O={class:"time"},V={class:"row"},R={class:"val"},j={class:"row"},B={class:"val"},D={class:"row amount-row"},I={class:"val amount"},A={key:0,class:"row"},F={class:"val mono"},H={key:1,class:"row"};function J(p,r,o,e,d,m){const c=w("a-tag");return l(),u("div",N,[s("div",C,[s("span",O,n(e.formattedTime),1),i(c,{color:"gold"},{default:v(()=>[_(n(o.event.source.adapter),1)]),_:1}),i(c,null,{default:v(()=>[_(n(o.event.subtype),1)]),_:1})]),s("div",V,[r[0]||(r[0]=s("span",{class:"key"},"商户",-1)),s("span",R,n(e.merchantText),1)]),s("div",j,[r[1]||(r[1]=s("span",{class:"key"},"商品/项目",-1)),s("span",B,n(e.itemText),1)]),s("div",D,[r[2]||(r[2]=s("span",{class:"key"},"金额",-1)),s("span",I,n(e.amountText),1)]),e.orderNo?(l(),u("div",A,[r[3]||(r[3]=s("span",{class:"key"},"单号",-1)),s("span",F,n(e.orderNo),1)])):g("v-if",!0),e.statusText?(l(),u("div",H,[r[4]||(r[4]=s("span",{class:"key"},"状态",-1)),i(c,{color:e.statusColor},{default:v(()=>[_(n(e.statusText),1)]),_:1},8,["color"])])):g("v-if",!0)])}const K=S(k,[["render",J],["__scopeId","data-v-5ed5524d"],["__file","/tmp/cc-web-panel-j3HnbJ/repo/packages/web-panel/src/components/pdh/renderers/OrderTableRenderer.vue"]]);export{K as default};
@@ -1,4 +0,0 @@
1
- import{I as z,J as v,U as P,R as d,c as t,K as n,o as be,b as S,r as m,P as c,Q as _,V as f,S as O,F as _e,a2 as we}from"./vendor-Bn1JzzAn.js";import{_ as Fe,b as ze,u as xe,t as q,d as u}from"./index-k7QsBwyo.js";import{b as qe,ak as Ne,at as De,R as Re,A as Be,aQ as Ve,O as Je}from"./icons-DG5UD-6K.js";const We={__name:"Organization",setup(ke,{expose:s}){s();const{t:r}=ze(),e=xe(),N=m("orgs"),J=m(!1);async function I(){J.value=!0;try{N.value==="orgs"?await A():N.value==="members"?(await A(),C.value&&(await E(),await H())):N.value==="approvals"&&await F()}finally{J.value=!1}}function D(o){o==="orgs"&&k.value.length===0&&A(),o==="members"&&k.value.length===0&&A(),o==="approvals"&&G.value.length===0&&F()}const L=m(!1),k=m([]),j=m(!1),M=m(!1),h=m(""),R=m(""),U=m(!1),x=m(!1),w=m({}),T=m(""),B=S(()=>[{title:r("organization.orgColumns.id"),key:"id",dataIndex:"id",width:"100px"},{title:r("organization.orgColumns.name"),key:"name",dataIndex:"name",width:"180px"},{title:r("organization.orgColumns.owner"),key:"owner",dataIndex:"owner",width:"140px"},{title:r("organization.orgColumns.description"),key:"description",dataIndex:"description",ellipsis:!0},{title:r("organization.orgColumns.memberCount"),key:"memberCount",dataIndex:"memberCount",width:"90px"}]),V=S(()=>k.value.map(o=>({label:o.name,value:o.id})));async function A(){L.value=!0;try{const{output:o}=await e.execute("org list --json",15e3),i=q(o);Array.isArray(i)?k.value=i.map((l,p)=>({key:l.id||p,id:l.id||"-",name:l.name||"-",owner:l.owner||"-",description:l.description||"",memberCount:l.memberCount??l.members??0})):k.value=W(o)}catch(o){u.error(r("organization.messages.loadOrgsFailed",{err:o.message}))}finally{L.value=!1}}function W(o){const i=[],l=o.split(`
2
- `);for(const p of l){const y=p.trim();if(!y||y.startsWith("─")||y.match(/^\d+ org/i))continue;const b=y.split(/\s*[|│]\s*/);b.length>=3&&i.push({key:i.length,id:b[0]||"-",name:b[1]||"-",owner:b[2]||"-",description:b[3]||"",memberCount:parseInt(b[4],10)||0})}return i}async function a(){if(!h.value.trim()){u.warning(r("organization.messages.orgNameRequired"));return}M.value=!0;try{const o=h.value.trim().replace(/"/g,'\\"'),i=R.value.trim().replace(/"/g,'\\"');let l=`org create "${o}" --json`;i&&(l=`org create "${o}" --description "${i}" --json`);const{output:p}=await e.execute(l,2e4);p.includes("error")||p.includes("失败")?u.error(r("organization.messages.orgCreateFailed",{err:p.slice(0,120)})):(u.success(r("organization.messages.orgCreateOk")),j.value=!1,h.value="",R.value="",await A())}catch(o){u.error(r("organization.messages.orgCreateFailed",{err:o.message}))}finally{M.value=!1}}async function g(o){w.value={...o},T.value="",U.value=!0,x.value=!0;try{const{output:i}=await e.execute(`org show ${o.id} --json`,15e3),l=q(i);l&&typeof l=="object"?(w.value={id:l.id||o.id,name:l.name||o.name,owner:l.owner||o.owner,description:l.description||o.description,memberCount:l.memberCount??l.members??o.memberCount,createdAt:l.createdAt||l.created||""},T.value=JSON.stringify(l,null,2)):T.value=i}catch(i){T.value=r("organization.messages.loadDetailFailed",{err:i.message})}finally{x.value=!1}}const C=m(null),Z=m(!1),$=m([]),ee=m(!1),ae=m([]),ge=m(!1),te=m(!1),K=m(""),oe=m(""),ne=m("member"),pe=m(!1),le=m(!1),Q=m(""),ie=m(""),re=m(""),he=S(()=>[{label:r("organization.members.roleAdmin"),value:"admin"},{label:r("organization.members.roleMember"),value:"member"},{label:r("organization.members.roleViewer"),value:"viewer"}]),Ce=S(()=>[{title:r("organization.memberColumns.userId"),key:"userId",dataIndex:"userId",width:"160px"},{title:r("organization.memberColumns.name"),key:"name",dataIndex:"name",width:"140px"},{title:r("organization.memberColumns.role"),key:"role",dataIndex:"role",width:"100px"},{title:r("organization.memberColumns.joinedAt"),key:"joinedAt",dataIndex:"joinedAt",width:"180px"}]),Oe=S(()=>[{title:r("organization.teamColumns.name"),key:"name",dataIndex:"name",width:"180px"},{title:r("organization.teamColumns.description"),key:"description",dataIndex:"description",ellipsis:!0},{title:r("organization.teamColumns.lead"),key:"lead",dataIndex:"lead",width:"140px"}]);function Te(o){return{admin:"gold",member:"blue",viewer:"default",owner:"purple"}[(o||"").toLowerCase()]||"default"}async function Ie(){C.value&&await Promise.all([E(),H()])}async function E(){if(C.value){Z.value=!0;try{const{output:o}=await e.execute(`org members ${C.value} --json`,15e3),i=q(o);Array.isArray(i)?$.value=i.map((l,p)=>({key:l.userId||l.id||p,userId:l.userId||l.id||"-",name:l.name||l.displayName||"-",role:l.role||"member",joinedAt:l.joinedAt||l.joined||"-"})):$.value=ue(o)}catch(o){u.error(r("organization.messages.loadMembersFailed",{err:o.message}))}finally{Z.value=!1}}}function ue(o){const i=[],l=o.split(`
3
- `);for(const p of l){const y=p.trim();if(!y||y.startsWith("─")||y.match(/^\d+ member/i))continue;const b=y.split(/\s*[|│]\s*/);b.length>=3&&i.push({key:i.length,userId:b[0]||"-",name:b[1]||"-",role:b[2]||"member",joinedAt:b[3]||"-"})}return i}async function H(){if(C.value){ee.value=!0;try{const{output:o}=await e.execute(`org teams ${C.value} --json`,15e3),i=q(o);Array.isArray(i)?ae.value=i.map((l,p)=>({key:l.id||l.name||p,name:l.name||"-",description:l.description||"",lead:l.lead||l.leader||"-"})):ae.value=[]}catch(o){u.error(r("organization.messages.loadTeamsFailed",{err:o.message}))}finally{ee.value=!1}}}async function Le(){if(!K.value.trim()){u.warning(r("organization.messages.userIdRequired"));return}te.value=!0;try{const o=K.value.trim().replace(/"/g,'\\"'),i=oe.value.trim().replace(/"/g,'\\"');let l=`org invite ${C.value} ${o} --role ${ne.value}`;i&&(l+=` --name "${i}"`);const{output:p}=await e.execute(l,2e4);p.includes("error")||p.includes("失败")?u.error(r("organization.messages.inviteFailed",{err:p.slice(0,120)})):(u.success(r("organization.messages.inviteOk")),ge.value=!1,K.value="",oe.value="",ne.value="member",await E())}catch(o){u.error(r("organization.messages.inviteFailed",{err:o.message}))}finally{te.value=!1}}async function Ae(){if(!Q.value.trim()){u.warning(r("organization.messages.teamNameRequired"));return}le.value=!0;try{const o=Q.value.trim().replace(/"/g,'\\"'),i=ie.value.trim().replace(/"/g,'\\"'),l=re.value.trim().replace(/"/g,'\\"');let p=`org teams ${C.value} create "${o}"`;i&&(p+=` --description "${i}"`),l&&(p+=` --lead "${l}"`);const{output:y}=await e.execute(p,2e4);y.includes("error")||y.includes("失败")?u.error(r("organization.messages.teamCreateFailed",{err:y.slice(0,120)})):(u.success(r("organization.messages.teamCreateOk")),pe.value=!1,Q.value="",ie.value="",re.value="",await H())}catch(o){u.error(r("organization.messages.teamCreateFailed",{err:o.message}))}finally{le.value=!1}}const se=m(!1),G=m([]),ve=m(!1),de=m(!1),X=m(null),Y=m(""),me=m(""),ce=m(""),je=S(()=>[{title:r("organization.approvalColumns.id"),key:"id",dataIndex:"id",width:"100px"},{title:r("organization.approvalColumns.title"),key:"title",dataIndex:"title",width:"200px"},{title:r("organization.approvalColumns.type"),key:"type",dataIndex:"type",width:"120px"},{title:r("organization.approvalColumns.requester"),key:"requester",dataIndex:"requester",width:"140px"},{title:r("organization.approvalColumns.status"),key:"status",dataIndex:"status",width:"100px"},{title:r("organization.approvalColumns.actions"),key:"actions",width:"180px"}]);function Me(o){return{pending:"orange",approved:"green",rejected:"red"}[(o||"").toLowerCase()]||"default"}async function F(){se.value=!0;try{const{output:o}=await e.execute("org approvals --json",15e3),i=q(o);Array.isArray(i)?G.value=i.map((l,p)=>({key:l.id||p,id:l.id||"-",title:l.title||"-",type:l.type||"-",requester:l.requester||l.requestedBy||"-",status:l.status||"pending",_approving:!1,_rejecting:!1})):G.value=fe(o)}catch(o){u.error(r("organization.messages.loadApprovalsFailed",{err:o.message}))}finally{se.value=!1}}function fe(o){const i=[],l=o.split(`
4
- `);for(const p of l){const y=p.trim();if(!y||y.startsWith("─")||y.match(/^\d+ approval/i))continue;const b=y.split(/\s*[|│]\s*/);b.length>=4&&i.push({key:i.length,id:b[0]||"-",title:b[1]||"-",type:b[2]||"-",requester:b[3]||"-",status:b[4]||"pending",_approving:!1,_rejecting:!1})}return i}async function Ue(o){o._approving=!0;try{const{output:i}=await e.execute(`org approve ${o.id}`,15e3);i.includes("error")||i.includes("失败")?u.error(r("organization.messages.approveFailed",{err:i.slice(0,120)})):(u.success(r("organization.messages.approveOk")),await F())}catch(i){u.error(r("organization.messages.approveFailed",{err:i.message}))}finally{o._approving=!1}}async function Pe(o){o._rejecting=!0;try{const{output:i}=await e.execute(`org reject ${o.id}`,15e3);i.includes("error")||i.includes("失败")?u.error(r("organization.messages.rejectFailed",{err:i.slice(0,120)})):(u.success(r("organization.messages.rejectOk")),await F())}catch(i){u.error(r("organization.messages.rejectFailed",{err:i.message}))}finally{o._rejecting=!1}}async function Se(){if(!X.value){u.warning(r("organization.messages.orgRequired"));return}if(!Y.value.trim()){u.warning(r("organization.messages.approvalTitleRequired"));return}de.value=!0;try{const o=Y.value.trim().replace(/"/g,'\\"'),i=me.value.trim().replace(/"/g,'\\"'),l=ce.value.trim().replace(/"/g,'\\"');let p=`org approve --submit --org ${X.value} --title "${o}"`;i&&(p+=` --type "${i}"`),l&&(p+=` --description "${l}"`);const{output:y}=await e.execute(p,2e4);y.includes("error")||y.includes("失败")?u.error(r("organization.messages.submitFailed",{err:y.slice(0,120)})):(u.success(r("organization.messages.submitOk")),ve.value=!1,X.value=null,Y.value="",me.value="",ce.value="",await F())}catch(o){u.error(r("organization.messages.submitFailed",{err:o.message}))}finally{de.value=!1}}be(()=>{A()});const ye={t:r,ws:e,activeTab:N,refreshing:J,refreshCurrentTab:I,onTabChange:D,orgLoading:L,orgList:k,showCreateOrgModal:j,creatingOrg:M,newOrgName:h,newOrgDesc:R,showDetailModal:U,detailLoading:x,detailOrg:w,detailRaw:T,orgColumns:B,orgSelectOptions:V,loadOrgList:A,parseOrgListText:W,createOrg:a,showOrgDetail:g,selectedOrgId:C,memberLoading:Z,memberList:$,teamLoading:ee,teamList:ae,showInviteModal:ge,inviting:te,inviteUserId:K,inviteName:oe,inviteRole:ne,showCreateTeamModal:pe,creatingTeam:le,newTeamName:Q,newTeamDesc:ie,newTeamLead:re,roleOptions:he,memberColumns:Ce,teamColumns:Oe,roleColor:Te,onOrgSelected:Ie,loadMembers:E,parseMemberListText:ue,loadTeams:H,inviteMember:Le,createTeam:Ae,approvalLoading:se,approvalList:G,showSubmitApprovalModal:ve,submittingApproval:de,approvalOrgId:X,approvalTitle:Y,approvalType:me,approvalDescription:ce,approvalColumns:je,approvalStatusColor:Me,loadApprovals:F,parseApprovalListText:fe,approveItem:Ue,rejectItem:Pe,submitApproval:Se,ref:m,computed:S,onMounted:be,get useI18n(){return ze},get TeamOutlined(){return Je},get UserAddOutlined(){return Ve},get AuditOutlined(){return Be},get ReloadOutlined(){return Re},get PlusOutlined(){return De},get CheckOutlined(){return Ne},get CloseOutlined(){return qe},get message(){return u},get useWsStore(){return xe},get tryParseJson(){return q}};return Object.defineProperty(ye,"__isScriptSetup",{enumerable:!1,value:!0}),ye}},Ke={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},Qe={class:"page-title"},Ee={class:"page-sub"},He={key:0,style:{"text-align":"center",padding:"60px"}},Ge={key:0,style:{color:"var(--text-secondary)","font-family":"monospace","font-size":"12px"}},Xe={key:1,style:{color:"#1677ff"}},Ye={key:2,style:{color:"var(--text-secondary)"}},Ze={key:3,style:{color:"var(--text-muted)","font-size":"12px"}},$e={key:0,style:{"text-align":"center",padding:"40px"}},ea={key:1},aa={style:{"font-family":"monospace",color:"#ccc"}},ta={key:0,style:{"white-space":"pre-wrap","word-break":"break-all",color:"var(--text-secondary)","font-size":"11px",background:"var(--bg-base)",padding:"12px","border-radius":"6px",border:"1px solid var(--border-color)","max-height":"300px","overflow-y":"auto"}},oa={style:{"margin-bottom":"16px",display:"flex","align-items":"center",gap:"12px"}},na={key:0,style:{"text-align":"center",padding:"60px"}},la={key:0,style:{color:"var(--text-secondary)","font-family":"monospace","font-size":"12px"}},ia={key:1,style:{color:"#e0e0e0"}},ra={key:3,style:{color:"var(--text-secondary)","font-size":"12px"}},sa={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"12px"}},da={style:{color:"var(--text-primary)",margin:"0","font-size":"15px"}},ma={key:0,style:{"text-align":"center",padding:"40px"}},ca={key:0,style:{color:"#e0e0e0"}},ga={key:1,style:{color:"var(--text-muted)","font-size":"12px"}},pa={key:2,style:{color:"var(--text-secondary)"}},ua={key:0,style:{"text-align":"center",padding:"60px"}},va={key:0,style:{color:"var(--text-secondary)","font-family":"monospace","font-size":"12px"}},fa={key:1,style:{color:"#e0e0e0"}},ya={key:3,style:{color:"var(--text-secondary)"}},ba={key:1,style:{color:"var(--text-muted)","font-size":"12px"}};function _a(ke,s,r,e,N,J){const I=z("a-button"),D=z("a-space"),L=z("a-spin"),k=z("a-tag"),j=z("a-empty"),M=z("a-table"),h=z("a-descriptions-item"),R=z("a-descriptions"),U=z("a-modal"),x=z("a-input"),w=z("a-form-item"),T=z("a-form"),B=z("a-tab-pane"),V=z("a-select"),A=z("a-textarea"),W=z("a-tabs");return c(),v("div",null,[P("div",Ke,[P("div",null,[P("h2",Qe,d(e.t("organization.title")),1),P("p",Ee,d(e.t("organization.subtitle")),1)]),t(I,{type:"primary",ghost:"",loading:e.refreshing,onClick:e.refreshCurrentTab},{icon:n(()=>[t(e.ReloadOutlined)]),default:n(()=>[_(" "+d(e.t("organization.refresh")),1)]),_:1},8,["loading"])]),t(W,{activeKey:e.activeTab,"onUpdate:activeKey":s[22]||(s[22]=a=>e.activeTab=a),type:"card",onChange:e.onTabChange},{default:n(()=>[f(" Tab 1: Organization List "),t(B,{key:"orgs"},{tab:n(()=>[t(e.TeamOutlined),_(" "+d(e.t("organization.tabs.orgs")),1)]),default:n(()=>[t(D,{style:{"margin-bottom":"16px"}},{default:n(()=>[t(I,{type:"primary",onClick:s[0]||(s[0]=a=>e.showCreateOrgModal=!0)},{icon:n(()=>[t(e.PlusOutlined)]),default:n(()=>[_(" "+d(e.t("organization.orgs.createButton")),1)]),_:1})]),_:1}),e.orgLoading?(c(),v("div",He,[t(L,{size:"large"})])):(c(),O(M,{key:1,columns:e.orgColumns,"data-source":e.orgList,pagination:{pageSize:20,showTotal:a=>e.t("organization.totals.rows",{count:a})},size:"small",style:{background:"var(--bg-card)"},"row-class-name":()=>"org-row","custom-row":a=>({onClick:()=>e.showOrgDetail(a)})},{bodyCell:n(({column:a,record:g})=>[a.key==="id"?(c(),v("span",Ge,d(g.id),1)):f("v-if",!0),a.key==="name"?(c(),v("a",Xe,d(g.name),1)):f("v-if",!0),a.key==="owner"?(c(),v("span",Ye,d(g.owner),1)):f("v-if",!0),a.key==="description"?(c(),v("span",Ze,d(g.description),1)):f("v-if",!0),a.key==="memberCount"?(c(),O(k,{key:4,color:"blue"},{default:n(()=>[_(d(g.memberCount),1)]),_:2},1024)):f("v-if",!0)]),emptyText:n(()=>[t(j,{description:e.t("organization.orgs.emptyText")},null,8,["description"])]),_:1},8,["columns","data-source","pagination","custom-row"])),t(U,{open:e.showDetailModal,"onUpdate:open":s[1]||(s[1]=a=>e.showDetailModal=a),title:e.t("organization.orgs.detailTitle",{name:e.detailOrg.name||""}),footer:null,width:"640px"},{default:n(()=>[e.detailLoading?(c(),v("div",$e,[t(L)])):(c(),v("div",ea,[t(R,{column:1,bordered:"",size:"small",style:{"margin-bottom":"16px"}},{default:n(()=>[t(h,{label:e.t("organization.orgs.detailLabels.id")},{default:n(()=>[P("span",aa,d(e.detailOrg.id),1)]),_:1},8,["label"]),t(h,{label:e.t("organization.orgs.detailLabels.name")},{default:n(()=>[_(d(e.detailOrg.name),1)]),_:1},8,["label"]),t(h,{label:e.t("organization.orgs.detailLabels.owner")},{default:n(()=>[_(d(e.detailOrg.owner),1)]),_:1},8,["label"]),t(h,{label:e.t("organization.orgs.detailLabels.description")},{default:n(()=>[_(d(e.detailOrg.description||"-"),1)]),_:1},8,["label"]),t(h,{label:e.t("organization.orgs.detailLabels.memberCount")},{default:n(()=>[_(d(e.detailOrg.memberCount),1)]),_:1},8,["label"]),e.detailOrg.createdAt?(c(),O(h,{key:0,label:e.t("organization.orgs.detailLabels.createdAt")},{default:n(()=>[_(d(e.detailOrg.createdAt),1)]),_:1},8,["label"])):f("v-if",!0)]),_:1}),e.detailRaw?(c(),v("pre",ta,d(e.detailRaw),1)):f("v-if",!0)]))]),_:1},8,["open","title"]),t(U,{open:e.showCreateOrgModal,"onUpdate:open":s[4]||(s[4]=a=>e.showCreateOrgModal=a),title:e.t("organization.orgs.createTitle"),"confirm-loading":e.creatingOrg,onOk:e.createOrg,"ok-text":e.t("organization.orgs.createOk"),"cancel-text":e.t("common.cancel")},{default:n(()=>[t(T,{"label-col":{span:4},"wrapper-col":{span:20},style:{"margin-top":"16px"}},{default:n(()=>[t(w,{label:e.t("organization.orgs.nameLabel"),required:""},{default:n(()=>[t(x,{value:e.newOrgName,"onUpdate:value":s[2]||(s[2]=a=>e.newOrgName=a),placeholder:e.t("organization.orgs.namePlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),t(w,{label:e.t("organization.orgs.descriptionLabel")},{default:n(()=>[t(x,{value:e.newOrgDesc,"onUpdate:value":s[3]||(s[3]=a=>e.newOrgDesc=a),placeholder:e.t("organization.orgs.descriptionPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"])]),_:1})]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"])]),_:1}),f(" Tab 2: Member Management "),t(B,{key:"members"},{tab:n(()=>[t(e.UserAddOutlined),_(" "+d(e.t("organization.tabs.members")),1)]),default:n(()=>[P("div",oa,[t(V,{value:e.selectedOrgId,"onUpdate:value":s[5]||(s[5]=a=>e.selectedOrgId=a),placeholder:e.t("organization.members.selectPlaceholder"),style:{width:"280px"},options:e.orgSelectOptions,onChange:e.onOrgSelected},null,8,["value","placeholder","options"]),t(I,{type:"primary",disabled:!e.selectedOrgId,onClick:s[6]||(s[6]=a=>e.showInviteModal=!0)},{icon:n(()=>[t(e.UserAddOutlined)]),default:n(()=>[_(" "+d(e.t("organization.members.inviteButton")),1)]),_:1},8,["disabled"])]),e.memberLoading?(c(),v("div",na,[t(L,{size:"large"})])):e.selectedOrgId?(c(),O(M,{key:1,columns:e.memberColumns,"data-source":e.memberList,pagination:{pageSize:20,showTotal:a=>e.t("organization.totals.rows",{count:a})},size:"small",style:{background:"var(--bg-card)","margin-bottom":"24px"},"row-class-name":()=>"org-row"},{bodyCell:n(({column:a,record:g})=>[a.key==="userId"?(c(),v("span",la,d(g.userId),1)):f("v-if",!0),a.key==="name"?(c(),v("span",ia,d(g.name),1)):f("v-if",!0),a.key==="role"?(c(),O(k,{key:2,color:e.roleColor(g.role)},{default:n(()=>[_(d(g.role),1)]),_:2},1032,["color"])):f("v-if",!0),a.key==="joinedAt"?(c(),v("span",ra,d(g.joinedAt),1)):f("v-if",!0)]),emptyText:n(()=>[t(j,{description:e.t("organization.members.emptyMembers")},null,8,["description"])]),_:1},8,["columns","data-source","pagination"])):(c(),O(j,{key:2,description:e.t("organization.members.selectFirst"),style:{padding:"60px 0"}},null,8,["description"])),e.selectedOrgId?(c(),v(_e,{key:3},[P("div",sa,[P("h3",da,d(e.t("organization.members.teamsTitle")),1),t(I,{size:"small",onClick:s[7]||(s[7]=a=>e.showCreateTeamModal=!0)},{icon:n(()=>[t(e.PlusOutlined)]),default:n(()=>[_(" "+d(e.t("organization.members.createTeamButton")),1)]),_:1})]),e.teamLoading?(c(),v("div",ma,[t(L)])):(c(),O(M,{key:1,columns:e.teamColumns,"data-source":e.teamList,pagination:!1,size:"small",style:{background:"var(--bg-card)"},"row-class-name":()=>"org-row"},{bodyCell:n(({column:a,record:g})=>[a.key==="name"?(c(),v("span",ca,d(g.name),1)):f("v-if",!0),a.key==="description"?(c(),v("span",ga,d(g.description),1)):f("v-if",!0),a.key==="lead"?(c(),v("span",pa,d(g.lead),1)):f("v-if",!0)]),emptyText:n(()=>[t(j,{description:e.t("organization.members.emptyTeams")},null,8,["description"])]),_:1},8,["columns","data-source"]))],64)):f("v-if",!0),t(U,{open:e.showInviteModal,"onUpdate:open":s[11]||(s[11]=a=>e.showInviteModal=a),title:e.t("organization.members.inviteTitle"),"confirm-loading":e.inviting,onOk:e.inviteMember,"ok-text":e.t("organization.members.inviteOk"),"cancel-text":e.t("common.cancel")},{default:n(()=>[t(T,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:n(()=>[t(w,{label:e.t("organization.members.userIdLabel"),required:""},{default:n(()=>[t(x,{value:e.inviteUserId,"onUpdate:value":s[8]||(s[8]=a=>e.inviteUserId=a),placeholder:e.t("organization.members.userIdPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),t(w,{label:e.t("organization.members.nameLabel")},{default:n(()=>[t(x,{value:e.inviteName,"onUpdate:value":s[9]||(s[9]=a=>e.inviteName=a),placeholder:e.t("organization.members.namePlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),t(w,{label:e.t("organization.members.roleLabel")},{default:n(()=>[t(V,{value:e.inviteRole,"onUpdate:value":s[10]||(s[10]=a=>e.inviteRole=a),options:e.roleOptions},null,8,["value","options"])]),_:1},8,["label"])]),_:1})]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),t(U,{open:e.showCreateTeamModal,"onUpdate:open":s[15]||(s[15]=a=>e.showCreateTeamModal=a),title:e.t("organization.members.createTeamTitle"),"confirm-loading":e.creatingTeam,onOk:e.createTeam,"ok-text":e.t("organization.members.createTeamOk"),"cancel-text":e.t("common.cancel")},{default:n(()=>[t(T,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:n(()=>[t(w,{label:e.t("organization.members.teamNameLabel"),required:""},{default:n(()=>[t(x,{value:e.newTeamName,"onUpdate:value":s[12]||(s[12]=a=>e.newTeamName=a),placeholder:e.t("organization.members.teamNamePlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),t(w,{label:e.t("organization.members.teamDescLabel")},{default:n(()=>[t(x,{value:e.newTeamDesc,"onUpdate:value":s[13]||(s[13]=a=>e.newTeamDesc=a),placeholder:e.t("organization.members.teamDescPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),t(w,{label:e.t("organization.members.teamLeadLabel")},{default:n(()=>[t(x,{value:e.newTeamLead,"onUpdate:value":s[14]||(s[14]=a=>e.newTeamLead=a),placeholder:e.t("organization.members.teamLeadPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"])]),_:1})]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"])]),_:1}),f(" Tab 3: Approval Management "),t(B,{key:"approvals"},{tab:n(()=>[t(e.AuditOutlined),_(" "+d(e.t("organization.tabs.approvals")),1)]),default:n(()=>[t(D,{style:{"margin-bottom":"16px"}},{default:n(()=>[t(I,{type:"primary",onClick:s[16]||(s[16]=a=>e.showSubmitApprovalModal=!0)},{icon:n(()=>[t(e.PlusOutlined)]),default:n(()=>[_(" "+d(e.t("organization.approvals.submitButton")),1)]),_:1})]),_:1}),e.approvalLoading?(c(),v("div",ua,[t(L,{size:"large"})])):(c(),O(M,{key:1,columns:e.approvalColumns,"data-source":e.approvalList,pagination:{pageSize:20,showTotal:a=>e.t("organization.totals.rows",{count:a})},size:"small",style:{background:"var(--bg-card)"},"row-class-name":()=>"org-row"},{bodyCell:n(({column:a,record:g})=>[a.key==="id"?(c(),v("span",va,d(g.id),1)):f("v-if",!0),a.key==="title"?(c(),v("span",fa,d(g.title),1)):f("v-if",!0),a.key==="type"?(c(),O(k,{key:2,color:"blue"},{default:n(()=>[_(d(g.type),1)]),_:2},1024)):f("v-if",!0),a.key==="requester"?(c(),v("span",ya,d(g.requester),1)):f("v-if",!0),a.key==="status"?(c(),O(k,{key:4,color:e.approvalStatusColor(g.status)},{default:n(()=>[_(d(g.status),1)]),_:2},1032,["color"])):f("v-if",!0),a.key==="actions"?(c(),v(_e,{key:5},[(g.status||"").toLowerCase()==="pending"?(c(),O(D,{key:0},{default:n(()=>[t(I,{type:"primary",size:"small",loading:g._approving,onClick:we(C=>e.approveItem(g),["stop"])},{icon:n(()=>[t(e.CheckOutlined)]),default:n(()=>[_(" "+d(e.t("organization.approvals.approve")),1)]),_:1},8,["loading","onClick"]),t(I,{danger:"",size:"small",loading:g._rejecting,onClick:we(C=>e.rejectItem(g),["stop"])},{icon:n(()=>[t(e.CloseOutlined)]),default:n(()=>[_(" "+d(e.t("organization.approvals.reject")),1)]),_:1},8,["loading","onClick"])]),_:2},1024)):(c(),v("span",ba,"-"))],64)):f("v-if",!0)]),emptyText:n(()=>[t(j,{description:e.t("organization.approvals.emptyText")},null,8,["description"])]),_:1},8,["columns","data-source","pagination"])),t(U,{open:e.showSubmitApprovalModal,"onUpdate:open":s[21]||(s[21]=a=>e.showSubmitApprovalModal=a),title:e.t("organization.approvals.submitTitle"),"confirm-loading":e.submittingApproval,onOk:e.submitApproval,"ok-text":e.t("organization.approvals.submitOk"),"cancel-text":e.t("common.cancel")},{default:n(()=>[t(T,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:n(()=>[t(w,{label:e.t("organization.approvals.orgLabel"),required:""},{default:n(()=>[t(V,{value:e.approvalOrgId,"onUpdate:value":s[17]||(s[17]=a=>e.approvalOrgId=a),placeholder:e.t("organization.approvals.orgPlaceholder"),options:e.orgSelectOptions},null,8,["value","placeholder","options"])]),_:1},8,["label"]),t(w,{label:e.t("organization.approvals.titleLabel"),required:""},{default:n(()=>[t(x,{value:e.approvalTitle,"onUpdate:value":s[18]||(s[18]=a=>e.approvalTitle=a),placeholder:e.t("organization.approvals.titlePlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),t(w,{label:e.t("organization.approvals.typeLabel")},{default:n(()=>[t(x,{value:e.approvalType,"onUpdate:value":s[19]||(s[19]=a=>e.approvalType=a),placeholder:e.t("organization.approvals.typePlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),t(w,{label:e.t("organization.approvals.descLabel")},{default:n(()=>[t(A,{value:e.approvalDescription,"onUpdate:value":s[20]||(s[20]=a=>e.approvalDescription=a),placeholder:e.t("organization.approvals.descPlaceholder"),rows:3},null,8,["value","placeholder"])]),_:1},8,["label"])]),_:1})]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"])]),_:1})]),_:1},8,["activeKey"])])}const ka=Fe(We,[["render",_a],["__scopeId","data-v-4900dc74"],["__file","/tmp/cc-web-panel-j3HnbJ/repo/packages/web-panel/src/views/Organization.vue"]]);export{ka as default};
@@ -1 +0,0 @@
1
- [data-v-4900dc74] .org-row:hover td{background:var(--bg-card-hover)!important}[data-v-4900dc74] .ant-tabs-tab{color:var(--text-secondary)!important}[data-v-4900dc74] .ant-tabs-tab-active .ant-tabs-tab-btn{color:#1677ff!important}[data-v-4900dc74] .ant-card-head{border-color:var(--border-color)!important;color:var(--text-primary)!important}
@@ -1 +0,0 @@
1
- [data-v-f34183d8] .ant-table{background:transparent}[data-v-f34183d8] .ant-select-selector{background:var(--bg-card)!important;border-color:var(--border-color)!important}
@@ -1,2 +0,0 @@
1
- import{I as d,J as y,U as u,R as l,c as t,K as a,V as p,o as Y,b as $,r,P as i,Q as g,S as O,F as ee,Z as re}from"./vendor-Bn1JzzAn.js";import{_ as se,b as te,u as ne}from"./index-k7QsBwyo.js";import{M as ie,R as ce,at as de,am as pe,S as ue}from"./icons-DG5UD-6K.js";const ye={__name:"P2P",setup(ae,{expose:c}){c();const{t:s}=te(),e=ne(),z=r(!1),T=r(""),f=r([]),L=$(()=>[{title:s("p2p.peerColumns.name"),key:"name"},{title:s("p2p.peerColumns.id"),key:"id"},{title:s("p2p.peerColumns.status"),key:"status"},{title:s("p2p.peerColumns.action"),key:"action",width:100}]);async function k(){z.value=!0,T.value="";try{const{output:n}=await e.execute("p2p peers",15e3);f.value=R(n)}catch(n){T.value=s("p2p.messages.loadPeersFailed",{err:n.message})}finally{z.value=!1}}function R(n){if(!n||n.includes("No peers")||n.includes("no peers"))return[];const N=n.split(`
2
- `).filter(U=>U.trim()),P=[];for(const U of N){const I=U.match(/^\s*(\S+)\s+(.+?)\s+(connected|online|offline|disconnected)\s*$/i);if(I){P.push({id:I[1],name:I[2].trim(),connected:/connected|online/i.test(I[3])});continue}const V=U.match(/^\s*((?:12D3|Qm)\S{10,})\s*(.*)$/);if(V){const X=V[2].trim();P.push({id:V[1],name:X||V[1].slice(0,12),connected:/connected|online/i.test(X)})}}return P}const D=r(!1),M=r(!1),m=r(""),_=r("");async function C(){if(m.value.trim()){M.value=!0,_.value="";try{const{output:n}=await e.execute(`p2p pair "${m.value.trim()}"`,3e4);_.value=n,await k()}catch(n){_.value=s("p2p.messages.pairFailed",{err:n.message})}finally{M.value=!1}}}const E=r(!1),S=r(!1),b=r(void 0),w=r(""),x=r("");function o(n){b.value=n.id,w.value="",x.value="",E.value=!0}async function v(){if(!(!b.value||!w.value.trim())){S.value=!0,x.value="";try{const{output:n}=await e.execute(`p2p send ${b.value} "${w.value.trim()}"`,15e3);x.value=n||s("p2p.send.messageDefault")}catch(n){x.value=s("p2p.messages.sendFailed",{err:n.message})}finally{S.value=!1}}}const B=r(!1),j=r(""),A=r(!1),J=r(""),H=r(0),K=r(""),h=r(""),Q=r(!1),W=r(!1);async function F(){B.value=!0,j.value="";try{const{output:n}=await e.execute("sync status",15e3);Z(n)}catch(n){j.value=s("p2p.messages.loadSyncFailed",{err:n.message})}finally{B.value=!1}}function Z(n){if(!n){J.value=s("p2p.sync.unknown");return}A.value=/synced|online|up.to.date/i.test(n),J.value=A.value?s("p2p.sync.synced"):s("p2p.sync.notSynced");const N=n.match(/pending[:\s]+(\d+)/i);H.value=N?parseInt(N[1]):0;const P=n.match(/last[:\s]+(.+)/i);P&&(K.value=P[1].trim())}async function oe(){Q.value=!0,h.value="";try{const{output:n}=await e.execute("sync push",3e4);h.value=n||s("p2p.sync.pushDefault"),await F()}catch(n){h.value=s("p2p.messages.pushFailed",{err:n.message})}finally{Q.value=!1}}async function le(){W.value=!0,h.value="";try{const{output:n}=await e.execute("sync pull",3e4);h.value=n||s("p2p.sync.pullDefault"),await F()}catch(n){h.value=s("p2p.messages.pullFailed",{err:n.message})}finally{W.value=!1}}async function q(){await Promise.all([k(),F()])}Y(q);const G={t:s,ws:e,peersLoading:z,peersError:T,peers:f,peerColumns:L,loadPeers:k,parsePeersOutput:R,showPairModal:D,pairLoading:M,pairDeviceName:m,pairResult:_,doPair:C,showSendModal:E,sendLoading:S,sendTarget:b,sendMessage:w,sendResult:x,openSendTo:o,doSend:v,syncLoading:B,syncError:j,syncOnline:A,syncStatusText:J,syncPending:H,lastSyncTime:K,syncOutput:h,pushLoading:Q,pullLoading:W,loadSync:F,parseSyncStatus:Z,syncPush:oe,syncPull:le,refreshAll:q,ref:r,computed:$,onMounted:Y,get useI18n(){return te},get SyncOutlined(){return ue},get SendOutlined(){return pe},get PlusOutlined(){return de},get ReloadOutlined(){return ce},get MobileOutlined(){return ie},get useWsStore(){return ne}};return Object.defineProperty(G,"__isScriptSetup",{enumerable:!1,value:!0}),G}},ve={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},fe={class:"page-title"},me={class:"page-sub"},ge={key:0,style:{"text-align":"center",padding:"30px"}},_e={key:2,style:{"font-family":"monospace",color:"var(--text-muted)","font-size":"12px"}},be={key:3,style:{"margin-top":"12px",color:"#ff4d4f","font-size":"12px"}},xe={key:0,style:{"text-align":"center",padding:"30px"}},he={key:0,style:{"margin-top":"16px"}},ke={style:{color:"var(--text-secondary)","font-size":"11px","margin-bottom":"6px"}},Se={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"}},we={key:2,style:{"margin-top":"12px",color:"#ff4d4f","font-size":"12px"}},Pe={style:{"margin-bottom":"12px",color:"var(--text-secondary)"}},Oe={key:0,style:{"margin-top":"12px"}},Le={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"}},Me={style:{"margin-bottom":"8px",color:"var(--text-secondary)"}},Ce={style:{"margin-bottom":"8px",color:"var(--text-secondary)"}},ze={key:0,style:{"margin-top":"12px"}},Te={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"}};function Re(ae,c,s,e,z,T){const f=d("a-button"),L=d("a-space"),k=d("a-spin"),R=d("a-empty"),D=d("a-tag"),M=d("a-table"),m=d("a-card"),_=d("a-statistic"),C=d("a-col"),E=d("a-row"),S=d("a-input"),b=d("a-modal"),w=d("a-select-option"),x=d("a-select");return i(),y("div",null,[u("div",ve,[u("div",null,[u("h2",fe,l(e.t("p2p.title")),1),u("p",me,l(e.t("p2p.subtitle")),1)]),t(f,{type:"primary",ghost:"",loading:e.peersLoading,onClick:e.refreshAll},{icon:a(()=>[t(e.ReloadOutlined)]),default:a(()=>[g(" "+l(e.t("p2p.refresh")),1)]),_:1},8,["loading"])]),p(" P2P Devices Section "),t(m,{title:e.t("p2p.peers.cardTitle"),style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"}},{extra:a(()=>[t(L,null,{default:a(()=>[t(f,{size:"small",onClick:c[0]||(c[0]=o=>e.showPairModal=!0),style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:a(()=>[t(e.PlusOutlined)]),default:a(()=>[g(" "+l(e.t("p2p.peers.pairButton")),1)]),_:1}),t(f,{size:"small",onClick:c[1]||(c[1]=o=>e.showSendModal=!0),disabled:e.peers.length===0,style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:a(()=>[t(e.SendOutlined)]),default:a(()=>[g(" "+l(e.t("p2p.peers.sendButton")),1)]),_:1},8,["disabled"])]),_:1})]),default:a(()=>[e.peersLoading?(i(),y("div",ge,[t(k)])):e.peers.length===0?(i(),O(R,{key:1,description:e.t("p2p.peers.emptyText")},null,8,["description"])):(i(),O(M,{key:2,columns:e.peerColumns,"data-source":e.peers,pagination:!1,size:"small","row-key":"id"},{bodyCell:a(({column:o,record:v})=>[o.key==="status"?(i(),O(D,{key:0,color:v.connected?"green":"default"},{default:a(()=>[g(l(v.connected?e.t("p2p.peers.online"):e.t("p2p.peers.offline")),1)]),_:2},1032,["color"])):p("v-if",!0),o.key==="name"?(i(),O(L,{key:1},{default:a(()=>[t(e.MobileOutlined,{style:{color:"var(--text-muted)"}}),u("span",null,l(v.name||v.id),1)]),_:2},1024)):p("v-if",!0),o.key==="id"?(i(),y("span",_e,l(v.id.length>16?v.id.slice(0,16)+"...":v.id),1)):p("v-if",!0),o.key==="action"?(i(),O(f,{key:3,size:"small",type:"link",onClick:B=>e.openSendTo(v)},{default:a(()=>[t(e.SendOutlined),g(" "+l(e.t("p2p.peers.rowSend")),1)]),_:1},8,["onClick"])):p("v-if",!0)]),_:1},8,["columns","data-source"])),e.peersError?(i(),y("div",be,l(e.peersError),1)):p("v-if",!0)]),_:1},8,["title"]),p(" Sync Section "),t(m,{title:e.t("p2p.sync.cardTitle"),style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{extra:a(()=>[t(D,{color:e.syncOnline?"green":"default"},{default:a(()=>[g(l(e.syncOnline?e.t("p2p.sync.synced"):e.t("p2p.sync.notSynced")),1)]),_:1},8,["color"])]),default:a(()=>[e.syncLoading?(i(),y("div",xe,[t(k)])):(i(),y(ee,{key:1},[t(E,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:a(()=>[t(C,{xs:24,sm:8},{default:a(()=>[t(m,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(_,{title:e.t("p2p.sync.statusLabel"),value:e.syncStatusText,"value-style":{color:e.syncOnline?"#52c41a":"#888",fontSize:"16px"}},{prefix:a(()=>[t(e.SyncOutlined)]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),t(C,{xs:24,sm:8},{default:a(()=>[t(m,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(_,{title:e.t("p2p.sync.pendingLabel"),value:e.syncPending,"value-style":{color:e.syncPending>0?"#faad14":"#52c41a",fontSize:"16px"}},{prefix:a(()=>[t(e.SyncOutlined)]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),t(C,{xs:24,sm:8},{default:a(()=>[t(m,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(_,{title:e.t("p2p.sync.lastSyncLabel"),value:e.lastSyncTime||e.t("p2p.sync.noLastSync"),"value-style":{color:"var(--text-secondary)",fontSize:"16px"}},{prefix:a(()=>[t(e.SyncOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1})]),_:1}),t(L,null,{default:a(()=>[t(f,{loading:e.pushLoading,onClick:e.syncPush,style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:a(()=>[t(e.SyncOutlined)]),default:a(()=>[g(" "+l(e.t("p2p.sync.pushButton")),1)]),_:1},8,["loading"]),t(f,{loading:e.pullLoading,onClick:e.syncPull,style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:a(()=>[t(e.SyncOutlined)]),default:a(()=>[g(" "+l(e.t("p2p.sync.pullButton")),1)]),_:1},8,["loading"])]),_:1}),e.syncOutput?(i(),y("div",he,[u("div",ke,l(e.t("p2p.sync.outputLabel")),1),u("pre",Se,l(e.syncOutput),1)])):p("v-if",!0)],64)),e.syncError?(i(),y("div",we,l(e.syncError),1)):p("v-if",!0)]),_:1},8,["title"]),p(" Pair Modal "),t(b,{open:e.showPairModal,"onUpdate:open":c[3]||(c[3]=o=>e.showPairModal=o),title:e.t("p2p.pair.title"),"confirm-loading":e.pairLoading,onOk:e.doPair,"ok-text":e.t("p2p.pair.ok"),"cancel-text":e.t("common.cancel")},{default:a(()=>[u("div",Pe,l(e.t("p2p.pair.intro")),1),t(S,{value:e.pairDeviceName,"onUpdate:value":c[2]||(c[2]=o=>e.pairDeviceName=o),placeholder:e.t("p2p.pair.placeholder"),onPressEnter:e.doPair},null,8,["value","placeholder"]),e.pairResult?(i(),y("div",Oe,[u("pre",Le,l(e.pairResult),1)])):p("v-if",!0)]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),p(" Send Modal "),t(b,{open:e.showSendModal,"onUpdate:open":c[6]||(c[6]=o=>e.showSendModal=o),title:e.t("p2p.send.title"),"confirm-loading":e.sendLoading,onOk:e.doSend,"ok-text":e.t("p2p.send.ok"),"cancel-text":e.t("common.cancel")},{default:a(()=>[u("div",Me,l(e.t("p2p.send.targetLabel")),1),t(x,{value:e.sendTarget,"onUpdate:value":c[4]||(c[4]=o=>e.sendTarget=o),style:{width:"100%","margin-bottom":"16px"},placeholder:e.t("p2p.send.targetPlaceholder")},{default:a(()=>[(i(!0),y(ee,null,re(e.peers,o=>(i(),O(w,{key:o.id,value:o.id},{default:a(()=>[g(l(o.name||o.id),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value","placeholder"]),u("div",Ce,l(e.t("p2p.send.messageLabel")),1),t(S,{value:e.sendMessage,"onUpdate:value":c[5]||(c[5]=o=>e.sendMessage=o),placeholder:e.t("p2p.send.messagePlaceholder"),onPressEnter:e.doSend},null,8,["value","placeholder"]),e.sendResult?(i(),y("div",ze,[u("pre",Te,l(e.sendResult),1)])):p("v-if",!0)]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"])])}const Fe=se(ye,[["render",Re],["__scopeId","data-v-f34183d8"],["__file","/tmp/cc-web-panel-j3HnbJ/repo/packages/web-panel/src/views/P2P.vue"]]);export{Fe as default};
@@ -1,7 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./ChatBubbleRenderer-DSg2Xs8G.js","./vendor-Bn1JzzAn.js","./index-k7QsBwyo.js","./icons-DG5UD-6K.js","./index-Cq93VfoF.css","./ChatBubbleRenderer-gy5SDGw2.css","./OrderTableRenderer-IfNpXT2R.js","./OrderTableRenderer-CfrDjSHT.css","./TimelineRenderer-DThrBYj8.js","./TimelineRenderer-BlTAtkOc.css","./EmailListRenderer-Bm01soCN.js","./EmailListRenderer-DTPZPx_S.css","./GenericCardRenderer-DgITtFRv.js","./GenericCardRenderer-o85VDYQS.css"])))=>i.map(i=>d[i]);
2
- import{E as ue,r as R,b as w,I as g,P as u,J as O,U as v,c,S as C,V as E,_ as J,F as V,Z as se,a0 as ae,R as j,K as m,Q as b,W as L,o as M}from"./vendor-Bn1JzzAn.js";import{u as U}from"./usePersonalDataHub-B-q2ElB0.js";import{_ as D,e as F,d as P}from"./index-k7QsBwyo.js";import{aa as q,ag as H,M as Q,aI as z,v as G,aH as K,aq as W,ac as Y,e as de,d as fe,k as pe,ai as me,aA as _e,R as ye}from"./icons-DG5UD-6K.js";import"./useShellMode-CgR0wCYM.js";const I=Object.freeze({q:"",category:null,adapter:null,subtype:null,since:null,until:null}),B=50,Z=300,X=ue("pdhBrowser",()=>{const r=R({...I}),t=R([]),n=R(null),e=R(!1),o=R(!1),a=R(null),l=R(null),s=R(!1),i=R({byCategory:{},byAdapter:{},bySubtype:{},total:0});let d=0,_=null;const x=w(()=>t.value.length>0),A=w(()=>n.value!=null);function h(S={}){const p={},f=r.value;return f.q&&f.q.trim()&&(p.q=f.q.trim()),f.category&&(p.category=f.category),f.adapter&&(p.adapter=f.adapter),f.subtype&&(p.subtype=f.subtype),Number.isFinite(f.since)&&(p.since=f.since),Number.isFinite(f.until)&&(p.until=f.until),{...p,...S}}async function y(){const S=++d;e.value=!0,a.value=null;const p=U();try{const[f,T]=await Promise.all([p.searchEvents(h({limit:B})),p.facetCounts({...r.value.q&&r.value.q.trim()?{q:r.value.q.trim()}:{},...Number.isFinite(r.value.since)?{since:r.value.since}:{},...Number.isFinite(r.value.until)?{until:r.value.until}:{}})]);if(S!==d)return;t.value=f.rows||[],n.value=f.nextCursor||null,l.value=f.mode||"like",s.value=!!f.shortQuery,i.value={byCategory:T.byCategory||{},byAdapter:T.byAdapter||{},bySubtype:T.bySubtype||{},total:T.total||0}}catch(f){if(S!==d)return;a.value=f&&f.message?f.message:String(f),t.value=[],n.value=null}finally{S===d&&(e.value=!1)}}async function k(){if(!n.value||o.value)return;o.value=!0,a.value=null;const S=U();try{const p=await S.searchEvents(h({cursor:n.value,limit:B}));t.value=t.value.concat(p.rows||[]),n.value=p.nextCursor||null,l.value=p.mode||l.value}catch(p){a.value=p&&p.message?p.message:String(p)}finally{o.value=!1}}function le(S,p){if(!(S in I))throw new Error(`pdhBrowser.setFilter: unknown key "${S}"`);r.value={...r.value,[S]:p},_&&clearTimeout(_),_=setTimeout(()=>{_=null,y()},Z)}function ie(S){return r.value={...I,...S},_&&(clearTimeout(_),_=null),y()}function ce(){r.value={...I},t.value=[],n.value=null,a.value=null,i.value={byCategory:{},byAdapter:{},bySubtype:{},total:0}}return{filters:r,results:t,cursor:n,isLoading:e,isAppending:o,error:a,mode:l,shortQuery:s,facets:i,hasResults:x,canLoadMore:A,search:y,loadMore:k,setFilter:le,setFilters:ie,reset:ce,PAGE_SIZE:B,SEARCH_DEBOUNCE_MS:Z}}),ge=Object.freeze(["chat","social","email","shopping","travel","system","ai-chat","other"]),ve=Object.freeze({chat:"社交聊天",social:"内容平台",email:"邮件",shopping:"支付订单",travel:"出行",system:"系统数据","ai-chat":"AI 对话",other:"其他"});function N(r){return ve[r]||r||"未知"}const be=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 $(r){if(typeof r!="string"||r.length===0)return"other";for(const[t,n]of be)if(t.endsWith("-")||t==="system-data"){if(r.startsWith(t))return n}else if(r===t)return n;return"other"}const he={__name:"CategorySidebar",props:{selected:{type:String,default:null},facets:{type:Object,default:()=>({byCategory:{},total:0})}},emits:["select"],setup(r,{expose:t}){t();const n=r,e=w(()=>n.facets.total||0),o={chat:Y,social:W,email:K,shopping:G,travel:z,system:Q,"ai-chat":H,other:q};function a(i){return o[i]||q}function l(i){return i?{backgroundColor:"#fff",color:"#1677ff"}:{backgroundColor:"#f0f0f0",color:"#666"}}const s={props:n,total:e,ICONS:o,iconFor:a,badgeStyle:l,computed:w,get AppstoreOutlined(){return q},get MessageOutlined(){return Y},get PlayCircleOutlined(){return W},get MailOutlined(){return K},get ShoppingOutlined(){return G},get CarOutlined(){return z},get MobileOutlined(){return Q},get RobotOutlined(){return H},get CATEGORIES(){return ge},get categoryLabel(){return N}};return Object.defineProperty(s,"__isScriptSetup",{enumerable:!1,value:!0}),s}},Se={class:"pdh-sidebar"},Oe=["onClick"],we={class:"label"};function Ce(r,t,n,e,o,a){const l=g("a-badge");return u(),O("div",Se,[t[2]||(t[2]=v("div",{class:"sidebar-title"},"数据类型",-1)),v("div",{class:J(["cat-item",{active:n.selected===null}]),onClick:t[0]||(t[0]=s=>r.$emit("select",null))},[c(e.AppstoreOutlined,{class:"icon"}),t[1]||(t[1]=v("span",{class:"label"},"全部",-1)),e.total>0?(u(),C(l,{key:0,count:e.total,"number-style":e.badgeStyle(n.selected===null),"overflow-count":9999},null,8,["count","number-style"])):E("v-if",!0)],2),(u(!0),O(V,null,se(e.CATEGORIES,s=>(u(),O("div",{key:s,class:J(["cat-item",{active:n.selected===s,dim:!n.facets.byCategory[s]}]),onClick:i=>r.$emit("select",s)},[(u(),C(ae(e.iconFor(s)),{class:"icon"})),v("span",we,j(e.categoryLabel(s)),1),n.facets.byCategory[s]?(u(),C(l,{key:0,count:n.facets.byCategory[s],"number-style":e.badgeStyle(n.selected===s),"overflow-count":9999},null,8,["count","number-style"])):E("v-if",!0)],10,Oe))),128))])}const ke=D(he,[["render",Ce],["__scopeId","data-v-6b62a22e"],["__file","/tmp/cc-web-panel-j3HnbJ/repo/packages/web-panel/src/components/pdh/CategorySidebar.vue"]]),Ee={__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(r,{expose:t,emit:n}){t();const e=r,o=n,a=w(()=>e.filters.category?`在「${e.filters.category}」类目内搜索…`:"搜索关键词(如:支付宝、罗技、Kotlin)…"),l=w(()=>Object.entries(e.facets.byAdapter||{}).sort((y,k)=>k[1]-y[1]).map(([y,k])=>({value:y,label:`${y} (${k})`}))),s=w(()=>!e.filters.since&&!e.filters.until?null:[e.filters.since?new Date(e.filters.since):null,e.filters.until?new Date(e.filters.until):null]),i=w(()=>!!(e.filters.q||e.filters.adapter||e.filters.subtype||e.filters.since||e.filters.until));function d(h){o("set-filter","q",h||"")}function _(h){o("set-filter","q",h||"")}function x(h){if(!h||h.length===0){o("set-filter","since",null),o("set-filter","until",null);return}const[y,k]=h;o("set-filter","since",y?+y:null),o("set-filter","until",k?+k:null)}const A={props:e,emit:o,placeholderText:a,adapterOptions:l,dateRangeValue:s,hasActiveFilters:i,onQInput:d,onSearch:_,onDateChange:x,computed:w,get SearchOutlined(){return pe},get CloseCircleOutlined(){return fe},get InfoCircleOutlined(){return de}};return Object.defineProperty(A,"__isScriptSetup",{enumerable:!1,value:!0}),A}},Re={class:"pdh-filter-bar"},je={key:1,class:"hint"},xe={key:2,class:"hint"};function Ae(r,t,n,e,o,a){const l=g("a-input-search"),s=g("a-select"),i=g("a-range-picker"),d=g("a-button");return u(),O("div",Re,[c(l,{value:n.filters.q,placeholder:e.placeholderText,"enter-button":"搜索","allow-clear":"",loading:n.isLoading,style:{flex:"1","max-width":"480px"},"onUpdate:value":e.onQInput,onSearch:e.onSearch},{prefix:m(()=>[c(e.SearchOutlined)]),_:1},8,["value","placeholder","loading"]),c(s,{value:n.filters.adapter,placeholder:"所有 adapter","allow-clear":"",options:e.adapterOptions,style:{width:"200px"},"onUpdate:value":t[0]||(t[0]=_=>r.$emit("set-filter","adapter",_||null))},null,8,["value","options"]),c(i,{value:e.dateRangeValue,placeholder:["开始日期","结束日期"],style:{width:"280px"},"onUpdate:value":e.onDateChange},null,8,["value"]),e.hasActiveFilters?(u(),C(d,{key:0,type:"link",danger:"",onClick:t[1]||(t[1]=_=>r.$emit("reset"))},{icon:m(()=>[c(e.CloseCircleOutlined)]),default:m(()=>[t[2]||(t[2]=b(" 清空筛选 ",-1))]),_:1})):E("v-if",!0),n.shortQuery?(u(),O("span",je,[c(e.InfoCircleOutlined),t[3]||(t[3]=b(" 关键词需至少 3 字 (FTS5 trigram 限制) ",-1))])):n.mode==="like"?(u(),O("span",xe,[c(e.InfoCircleOutlined),t[4]||(t[4]=b(" 当前为 LIKE 兜底模式 ",-1))])):E("v-if",!0)])}const Le=D(Ee,[["render",Ae],["__scopeId","data-v-d7cce6e9"],["__file","/tmp/cc-web-panel-j3HnbJ/repo/packages/web-panel/src/components/pdh/SearchFilterBar.vue"]]),Fe={__name:"RendererDispatcher",props:{event:{type:Object,required:!0}},setup(r,{expose:t}){t();const n=L(()=>F(()=>import("./ChatBubbleRenderer-DSg2Xs8G.js"),__vite__mapDeps([0,1,2,3,4,5]),import.meta.url)),e=L(()=>F(()=>import("./OrderTableRenderer-IfNpXT2R.js"),__vite__mapDeps([6,1,2,3,4,7]),import.meta.url)),o=L(()=>F(()=>import("./TimelineRenderer-DThrBYj8.js"),__vite__mapDeps([8,1,2,3,4,9]),import.meta.url)),a=L(()=>F(()=>import("./EmailListRenderer-Bm01soCN.js"),__vite__mapDeps([10,1,2,3,4,11]),import.meta.url)),l=L(()=>F(()=>import("./GenericCardRenderer-DgITtFRv.js"),__vite__mapDeps([12,1,2,3,4,13]),import.meta.url));function s(d){const _=d&&d.source&&d.source.adapter;switch($(_)){case"chat":case"ai-chat":return n;case"shopping":return e;case"travel":return o;case"email":return a;default:return l}}const i={ChatBubbleRenderer:n,OrderTableRenderer:e,TimelineRenderer:o,EmailListRenderer:a,GenericCardRenderer:l,rendererFor:s,defineAsyncComponent:L,get getCategory(){return $}};return Object.defineProperty(i,"__isScriptSetup",{enumerable:!1,value:!0}),i}};function De(r,t,n,e,o,a){return u(),C(ae(e.rendererFor(n.event)),{event:n.event},null,8,["event"])}const Te=D(Fe,[["render",De],["__file","/tmp/cc-web-panel-j3HnbJ/repo/packages/web-panel/src/components/pdh/renderers/RendererDispatcher.vue"]]);function ee(r){return JSON.stringify(r,null,2)}function te(r){return r.map(t=>JSON.stringify(t)).join(`
3
- `)+`
4
- `}function ne(r){const n=["id","subtype","occurredAt","occurredAtIso","actor","place","adapter","summary","contentJson","extraJson"].join(","),e=r.map(o=>{const a=Number.isFinite(o.occurredAt)?o.occurredAt:null,l=a?new Date(a).toISOString():"",s=o.source&&o.source.adapter||"",i=o.content&&(o.content.text||o.content.title||o.content.subject)||"";return[o.id||"",o.subtype||"",a!=null?String(a):"",l,o.actor||"",o.place||"",s,i,o.content?JSON.stringify(o.content):"",o.extra?JSON.stringify(o.extra):""].map(Ie).join(",")});return[n,...e].join(`
5
- `)+`
6
- `}function Ie(r){const t=String(r??"");return t.includes(",")||t.includes('"')||t.includes(`
7
- `)||t.includes("\r")?'"'+t.replace(/"/g,'""')+'"':t}function re(r,t,n="application/octet-stream"){if(typeof window>"u"||typeof document>"u")return t;const e=new Blob([r],{type:n}),o=URL.createObjectURL(e),a=document.createElement("a");return a.href=o,a.download=t,document.body.appendChild(a),a.click(),document.body.removeChild(a),setTimeout(()=>URL.revokeObjectURL(o),1e3),t}function oe(r,t=null){const n=new Date,e=n.getFullYear(),o=String(n.getMonth()+1).padStart(2,"0"),a=String(n.getDate()).padStart(2,"0"),l=r==="ndjson"?"ndjson":r,s=t?`-${t}`:"";return`pdh-events-${e}-${o}-${a}${s}.${l}`}const Pe={__name:"ExportDropdown",props:{events:{type:Array,required:!0},category:{type:String,default:null}},setup(r,{expose:t}){t();const n=r,e=w(()=>n.events.length>0),o={json:"application/json;charset=utf-8",ndjson:"application/x-ndjson;charset=utf-8",csv:"text/csv;charset=utf-8"};function a(i){switch(i){case"json":return ee(n.events);case"ndjson":return te(n.events);case"csv":return ne(n.events);default:throw new Error(`unknown format: ${i}`)}}function l({key:i}){try{const d=a(i),_=oe(i,n.category);re(d,_,o[i]),P.success(`已导出 ${n.events.length} 条到 ${_}`)}catch(d){P.error(`导出失败: ${d.message||d}`)}}const s={props:n,hasResults:e,MIME:o,serialize:a,onClick:l,computed:w,get DownloadOutlined(){return _e},get DownOutlined(){return me},get message(){return P},get eventsToJson(){return ee},get eventsToNdjson(){return te},get eventsToCsv(){return ne},get downloadAs(){return re},get suggestFilename(){return oe}};return Object.defineProperty(s,"__isScriptSetup",{enumerable:!1,value:!0}),s}};function qe(r,t,n,e,o,a){const l=g("a-button"),s=g("a-menu-item"),i=g("a-menu"),d=g("a-dropdown");return u(),C(d,{disabled:!e.hasResults},{overlay:m(()=>[c(i,{onClick:e.onClick},{default:m(()=>[c(s,{key:"json"},{default:m(()=>[...t[0]||(t[0]=[b("JSON (.json)",-1)])]),_:1}),c(s,{key:"ndjson"},{default:m(()=>[...t[1]||(t[1]=[b("NDJSON (.ndjson)",-1)])]),_:1}),c(s,{key:"csv"},{default:m(()=>[...t[2]||(t[2]=[b("CSV (.csv)",-1)])]),_:1})]),_:1})]),default:m(()=>[c(l,{disabled:!e.hasResults},{icon:m(()=>[c(e.DownloadOutlined)]),default:m(()=>[b(" 导出 ("+j(n.events.length)+") ",1),c(e.DownOutlined)]),_:1},8,["disabled"])]),_:1},8,["disabled"])}const Be=D(Pe,[["render",qe],["__file","/tmp/cc-web-panel-j3HnbJ/repo/packages/web-panel/src/components/pdh/ExportDropdown.vue"]]),Ve={__name:"PdhVaultBrowser",setup(r,{expose:t}){t();const n=X(),e=w(()=>n.filters.q?`没有匹配 "${n.filters.q}" 的事件 — 试试更短的关键词或换个类目`:n.filters.category?`「${N(n.filters.category)}」类目下还没有数据 — 去采集页同步对应 adapter`:"Vault 里还没有数据 — 去「个人数据中台」页面同步任意 adapter");function o(s){n.filters.category=s,n.search()}function a(s,i){n.setFilter(s,i)}M(()=>{!n.hasResults&&!n.isLoading&&n.search()});const l={store:n,emptyHint:e,onCategorySelect:o,onSetFilter:a,onMounted:M,computed:w,get ReloadOutlined(){return ye},get usePdhBrowserStore(){return X},get categoryLabel(){return N},CategorySidebar:ke,SearchFilterBar:Le,RendererDispatcher:Te,ExportDropdown:Be};return Object.defineProperty(l,"__isScriptSetup",{enumerable:!1,value:!0}),l}},Ne={class:"pdh-browser-page"},Je={class:"page-header"},Me={class:"main-pane"},Ue={class:"results-summary"},He={key:0},Qe={key:0},ze={key:1},Ge={class:"loaded-of"},Ke={class:"results-list"},We={key:2,class:"load-more"};function Ye(r,t,n,e,o,a){const l=g("a-tag"),s=g("a-button"),i=g("a-space"),d=g("a-col"),_=g("a-spin"),x=g("a-alert"),A=g("a-empty"),h=g("a-row");return u(),O("div",Ne,[v("div",Je,[t[6]||(t[6]=v("div",null,[v("h2",{class:"page-title"},"数据浏览器"),v("p",{class:"page-sub"}," Vault 里所有已采集的数据,按类目浏览 / 全文检索 / 时间窗口筛选。 完全离线,不外传。 ")],-1)),c(i,null,{default:m(()=>[e.store.mode==="fts5"?(u(),C(l,{key:0,color:"green"},{default:m(()=>[...t[3]||(t[3]=[b("FTS5 trigram",-1)])]),_:1})):e.store.mode==="like"?(u(),C(l,{key:1,color:"orange"},{default:m(()=>[...t[4]||(t[4]=[b("LIKE 兜底",-1)])]),_:1})):E("v-if",!0),c(e.ExportDropdown,{events:e.store.results,category:e.store.filters.category},null,8,["events","category"]),c(s,{onClick:t[0]||(t[0]=y=>e.store.search()),loading:e.store.isLoading},{icon:m(()=>[c(e.ReloadOutlined)]),default:m(()=>[t[5]||(t[5]=b(" 刷新 ",-1))]),_:1},8,["loading"])]),_:1})]),c(h,{gutter:16,class:"browser-layout"},{default:m(()=>[c(d,{xs:24,sm:24,md:6,lg:5,xl:4},{default:m(()=>[c(e.CategorySidebar,{selected:e.store.filters.category,facets:e.store.facets,onSelect:e.onCategorySelect},null,8,["selected","facets"])]),_:1}),c(d,{xs:24,sm:24,md:18,lg:19,xl:20},{default:m(()=>[v("div",Me,[c(e.SearchFilterBar,{filters:e.store.filters,facets:e.store.facets,"is-loading":e.store.isLoading,mode:e.store.mode,"short-query":e.store.shortQuery,onSetFilter:e.onSetFilter,onReset:t[1]||(t[1]=y=>{e.store.reset(),e.store.search()})},null,8,["filters","facets","is-loading","mode","short-query"]),v("div",Ue,[e.store.isLoading&&e.store.results.length===0?(u(),O("span",He,[c(_,{size:"small"}),t[7]||(t[7]=b(" 载入中… ",-1))])):(u(),O(V,{key:1},[v("strong",null,j(e.store.facets.total),1),t[11]||(t[11]=b(" 条事件 ",-1)),e.store.filters.category?(u(),O("span",Qe,[t[8]||(t[8]=b(" / 当前类目 ",-1)),v("strong",null,j(e.categoryLabel(e.store.filters.category)),1),v("strong",null,j(e.store.facets.byCategory[e.store.filters.category]||0),1)])):E("v-if",!0),e.store.filters.q?(u(),O("span",ze,[t[9]||(t[9]=b(' / 关键词 "',-1)),v("em",null,j(e.store.filters.q),1),t[10]||(t[10]=b('"',-1))])):E("v-if",!0),v("span",Ge," / 已显示 "+j(e.store.results.length),1)],64))]),e.store.error?(u(),C(x,{key:0,type:"error","show-icon":"",message:e.store.error,closable:"",style:{margin:"12px 0"}},null,8,["message"])):E("v-if",!0),!e.store.isLoading&&e.store.results.length===0&&!e.store.error?(u(),C(A,{key:1,description:e.emptyHint,style:{"margin-top":"40px"}},null,8,["description"])):E("v-if",!0),v("div",Ke,[(u(!0),O(V,null,se(e.store.results,(y,k)=>(u(),C(e.RendererDispatcher,{key:`r-${k}-${y.id}`,event:y},null,8,["event"]))),128))]),e.store.canLoadMore?(u(),O("div",We,[c(s,{loading:e.store.isAppending,onClick:t[2]||(t[2]=y=>e.store.loadMore()),block:""},{default:m(()=>[...t[12]||(t[12]=[b(" 加载下一页 (50 条) ",-1)])]),_:1},8,["loading"])])):E("v-if",!0)])]),_:1})]),_:1})])}const nt=D(Ve,[["render",Ye],["__scopeId","data-v-0f7c02cd"],["__file","/tmp/cc-web-panel-j3HnbJ/repo/packages/web-panel/src/views/PdhVaultBrowser.vue"]]);export{nt as default};
@@ -1 +0,0 @@
1
- .pdh-sidebar[data-v-6b62a22e]{background:#fff;border-radius:8px;padding:12px 8px;border:1px solid #f0f0f0}.sidebar-title[data-v-6b62a22e]{font-size:12px;color:#999;padding:4px 8px 8px;font-weight:600;letter-spacing:.5px}.cat-item[data-v-6b62a22e]{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-6b62a22e]:hover{background:#f5f5f5}.cat-item.active[data-v-6b62a22e]{background:#1677ff;color:#fff}.cat-item.dim[data-v-6b62a22e]{opacity:.45}.cat-item .icon[data-v-6b62a22e]{font-size:16px}.cat-item .label[data-v-6b62a22e]{flex:1;font-size:14px}.pdh-filter-bar[data-v-d7cce6e9]{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-d7cce6e9]{font-size:12px;color:#999;display:flex;align-items:center;gap:4px}.pdh-browser-page[data-v-0f7c02cd]{padding:16px;height:100%;background:#f5f5f5;overflow-y:auto}.page-header[data-v-0f7c02cd]{display:flex;align-items:flex-start;justify-content:space-between;margin-bottom:16px}.page-title[data-v-0f7c02cd]{margin:0 0 4px;font-size:18px}.page-sub[data-v-0f7c02cd]{margin:0;color:#999;font-size:13px}.browser-layout[data-v-0f7c02cd]{align-items:flex-start}.main-pane[data-v-0f7c02cd]{display:flex;flex-direction:column;gap:12px}.results-summary[data-v-0f7c02cd]{font-size:13px;color:#666;padding:4px 4px 8px}.results-summary .loaded-of[data-v-0f7c02cd]{margin-left:8px;color:#999}.load-more[data-v-0f7c02cd]{margin-top:12px}
@@ -1,4 +0,0 @@
1
- import{I as m,J as p,U as E,c as n,K as a,o as ee,r as y,P as i,Q as k,V as f,S as R,R as v,F as J,Z as q}from"./vendor-Bn1JzzAn.js";import{_ as ne,u as te,d as G,t as Z}from"./index-k7QsBwyo.js";import{R as se,A as oe,f as le,Z as ie}from"./icons-DG5UD-6K.js";const re={__name:"Permissions",setup(ae,{expose:r}){r();const I=te(),e=y("roles"),z=y(!1);async function H(){z.value=!0;try{e.value==="roles"?await w():e.value==="audit"&&await u()}finally{z.value=!1}}function S(s){s==="roles"&&b.value.length===0&&w(),s==="audit"&&P.value.length===0&&u()}const O=y(!1),b=y([]),U=[{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 w(){O.value=!0;try{const{output:s}=await I.execute("auth roles --json",15e3);b.value=K(s,A)}catch(s){G.error("加载角色列表失败: "+s.message)}finally{O.value=!1}}function A(s){const o=[],c=s.split(`
2
- `);for(const _ of c){const l=_.trim();if(!l||l.startsWith("─")||l.match(/^Role/i))continue;const d=l.split(/\s*[|│]\s*/);d.length>=2?o.push({key:o.length,name:d[0]||"-",description:d[1]||"",permissions:d[2]?d[2].split(/[,;\s]+/).filter(Boolean):[],userCount:d[3]&&parseInt(d[3],10)||0}):l.length>2&&o.push({key:o.length,name:l.slice(0,60),description:"",permissions:[],userCount:0})}return o}const T=y(""),C=y(""),j=y(!1),L=y(null),M=["note:read","note:write","admin:*","skill:execute"];async function V(){if(!(!T.value.trim()||!C.value.trim())){j.value=!0,L.value=null;try{const s=`auth check ${T.value.trim()} "${C.value.trim()}"`,{output:o}=await I.execute(s,15e3),c=o.toLowerCase(),_=c.includes("allow")||c.includes("granted")||c.includes("true")||c.includes("yes"),l=c.includes("denied")||c.includes("reject")||c.includes("false")||c.includes("no permission");L.value={allowed:_&&!l,detail:o.trim()||(_?"用户拥有该权限":"用户没有该权限")}}catch(s){L.value={allowed:!1,detail:"检查失败: "+s.message}}finally{j.value=!1}}}const N=y(!1),P=y([]),B=y([]),F=[{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 t(s){return{info:"blue",warn:"orange",warning:"orange",error:"red",critical:"red"}[(s||"").toLowerCase()]||"default"}async function u(){N.value=!0;try{const[s,o]=await Promise.all([I.execute("audit log --json",15e3),I.execute("audit stats --json",15e3)]);P.value=K(s.output,W),B.value=Q(o.output)}catch(s){G.error("加载审计日志失败: "+s.message)}finally{N.value=!1}}function W(s){const o=[],c=s.split(`
3
- `);for(const _ of c){const l=_.trim();if(!l||l.startsWith("─")||l.startsWith("Audit")||l.startsWith("Recent"))continue;const d=l.split(/\s*[|│]\s*/);if(d.length>=3){o.push({key:o.length,timestamp:d[0]||"-",event:d[1]||"-",user:d[2]||"-",level:d[3]||"info",detail:d.slice(4).join(" ")||""});continue}const x=l.match(/^(\d{4}-\d{2}-\d{2}[\sT]\d{2}:\d{2}(?::\d{2})?)\s+(.+)/);if(x){const h=x[2],g=h.match(/\b(INFO|WARN|WARNING|ERROR|CRITICAL)\b/i);o.push({key:o.length,timestamp:x[1],event:h.replace(/\b(INFO|WARN|WARNING|ERROR|CRITICAL)\b/i,"").trim().slice(0,80),user:"-",level:g?g[1].toLowerCase():"info",detail:""})}else l.length>3&&!l.match(/^\d+ event/i)&&o.push({key:o.length,timestamp:"-",event:l.slice(0,80),user:"-",level:"info",detail:""})}return o}function Q(s){const o=Z(s);if(o&&typeof o=="object"&&!Array.isArray(o)){const x=["#1677ff","#52c41a","#faad14","#ff4d4f"];return Object.entries(o).slice(0,4).map(([h,g],D)=>({label:h,value:typeof g=="number"?g:String(g),color:x[D%x.length]}))}const c=[],_=s.split(`
4
- `),l=["#1677ff","#52c41a","#faad14","#ff4d4f"];let d=0;for(const x of _){const h=x.trim();if(!h||h.startsWith("─")||h.startsWith("Audit"))continue;const g=h.match(/^(.+?)\s*[:=]\s*(.+)$/);if(g){const D=g[1].trim(),Y=g[2].trim(),$=Y.match(/^(\d+)/);c.push({label:D,value:$?parseInt($[1],10):Y,color:l[d%l.length]}),d++}}return c.length===0&&c.push({label:"总事件数",value:P.value.length,color:"#1677ff"},{label:"状态",value:"就绪",color:"#52c41a"}),c}function K(s,o){const c=Z(s);return Array.isArray(c)?c.map((_,l)=>({key:l,..._})):o(s)}ee(()=>{w()});const X={ws:I,activeTab:e,refreshing:z,refreshCurrentTab:H,onTabChange:S,rolesLoading:O,rolesList:b,rolesColumns:U,loadRoles:w,parseRolesText:A,checkUserId:T,checkPermission:C,checking:j,checkResult:L,quickPermissions:M,doCheck:V,auditLoading:N,auditEvents:P,auditStats:B,auditColumns:F,levelColor:t,loadAudit:u,parseAuditLogText:W,parseAuditStatsOutput:Q,parseJsonOutput:K,ref:y,onMounted:ee,get LockOutlined(){return ie},get CheckCircleOutlined(){return le},get AuditOutlined(){return oe},get ReloadOutlined(){return se},get message(){return G},get useWsStore(){return te},get tryParseJson(){return Z}};return Object.defineProperty(X,"__isScriptSetup",{enumerable:!1,value:!0}),X}},ce={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},ue={key:0,style:{"text-align":"center",padding:"60px"}},de={key:0,style:{color:"#e0e0e0","font-weight":"500"}},me={key:1,style:{color:"var(--text-secondary)"}},pe={key:0,style:{"margin-top":"16px"}},fe={key:0,style:{"text-align":"center",padding:"60px"}},ye={key:0,style:{color:"var(--text-secondary)","font-size":"12px","font-family":"monospace"}},ve={key:1,style:{color:"#e0e0e0"}},_e={key:2,style:{color:"var(--text-secondary)"}},ge={key:4,style:{color:"var(--text-muted)","font-size":"12px"}};function ke(ae,r,I,e,z,H){const S=m("a-button"),O=m("a-spin"),b=m("a-tag"),U=m("a-empty"),w=m("a-table"),A=m("a-tab-pane"),T=m("a-input"),C=m("a-form-item"),j=m("a-space"),L=m("a-form"),M=m("a-alert"),V=m("a-card"),N=m("a-statistic"),P=m("a-col"),B=m("a-row"),F=m("a-tabs");return i(),p("div",null,[E("div",ce,[r[4]||(r[4]=E("div",null,[E("h2",{class:"page-title"},"权限管理"),E("p",{class:"page-sub"},"角色 / 权限检查 / 审计")],-1)),n(S,{type:"primary",ghost:"",loading:e.refreshing,onClick:e.refreshCurrentTab},{icon:a(()=>[n(e.ReloadOutlined)]),default:a(()=>[r[3]||(r[3]=k(" 刷新 ",-1))]),_:1},8,["loading"])]),n(F,{activeKey:e.activeTab,"onUpdate:activeKey":r[2]||(r[2]=t=>e.activeTab=t),type:"card",onChange:e.onTabChange},{default:a(()=>[f(" Tab 1: Roles "),n(A,{key:"roles"},{tab:a(()=>[n(e.LockOutlined),r[5]||(r[5]=k(" 角色列表 ",-1))]),default:a(()=>[e.rolesLoading?(i(),p("div",ue,[n(O,{size:"large"})])):(i(),R(w,{key:1,columns:e.rolesColumns,"data-source":e.rolesList,pagination:{pageSize:20,showTotal:t=>`共 ${t} 条`},size:"small",style:{background:"var(--bg-card)"},"row-class-name":()=>"perm-row"},{bodyCell:a(({column:t,record:u})=>[t.key==="name"?(i(),p("span",de,v(u.name),1)):f("v-if",!0),t.key==="description"?(i(),p("span",me,v(u.description),1)):f("v-if",!0),t.key==="permissions"?(i(),p(J,{key:2},[(i(!0),p(J,null,q((u.permissions||[]).slice(0,5),W=>(i(),R(b,{key:W,color:"blue",style:{"margin-bottom":"2px"}},{default:a(()=>[k(v(W),1)]),_:2},1024))),128)),(u.permissions||[]).length>5?(i(),R(b,{key:0,color:"default"},{default:a(()=>[k(" +"+v(u.permissions.length-5),1)]),_:2},1024)):f("v-if",!0)],64)):f("v-if",!0),t.key==="userCount"?(i(),R(b,{key:3,color:u.userCount>0?"green":"default"},{default:a(()=>[k(v(u.userCount??0),1)]),_:2},1032,["color"])):f("v-if",!0)]),emptyText:a(()=>[n(U,{description:"暂无角色数据"})]),_:1},8,["data-source","pagination"]))]),_:1}),f(" Tab 2: Permission Check "),n(A,{key:"check"},{tab:a(()=>[n(e.CheckCircleOutlined),r[6]||(r[6]=k(" 权限检查 ",-1))]),default:a(()=>[n(V,{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(C,{label:"用户 ID",required:""},{default:a(()=>[n(T,{value:e.checkUserId,"onUpdate:value":r[0]||(r[0]=t=>e.checkUserId=t),placeholder:"输入用户 ID"},null,8,["value"])]),_:1}),n(C,{label:"权限",required:""},{default:a(()=>[n(T,{value:e.checkPermission,"onUpdate:value":r[1]||(r[1]=t=>e.checkPermission=t),placeholder:"note:read"},null,8,["value"])]),_:1}),n(C,{"wrapper-col":{offset:5,span:19}},{default:a(()=>[n(j,{wrap:""},{default:a(()=>[n(S,{type:"primary",loading:e.checking,disabled:!e.checkUserId.trim()||!e.checkPermission.trim(),onClick:e.doCheck},{icon:a(()=>[n(e.CheckCircleOutlined)]),default:a(()=>[r[7]||(r[7]=k(" 检查权限 ",-1))]),_:1},8,["loading","disabled"]),(i(),p(J,null,q(e.quickPermissions,t=>n(S,{key:t,size:"small",onClick:u=>e.checkPermission=t},{default:a(()=>[k(v(t),1)]),_:2},1032,["onClick"])),64))]),_:1})]),_:1})]),_:1}),e.checkResult!==null?(i(),p("div",pe,[n(M,{message:e.checkResult.allowed?"权限允许":"权限拒绝",description:e.checkResult.detail,type:e.checkResult.allowed?"success":"error","show-icon":""},null,8,["message","description","type"])])):f("v-if",!0)]),_:1})]),_:1}),f(" Tab 3: Audit Logs "),n(A,{key:"audit"},{tab:a(()=>[n(e.AuditOutlined),r[8]||(r[8]=k(" 审计日志 ",-1))]),default:a(()=>[n(B,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:a(()=>[(i(!0),p(J,null,q(e.auditStats,t=>(i(),R(P,{xs:12,sm:6,key:t.label},{default:a(()=>[n(V,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"},size:"small"},{default:a(()=>[n(N,{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}),e.auditLoading?(i(),p("div",fe,[n(O,{size:"large"})])):(i(),R(w,{key:1,columns:e.auditColumns,"data-source":e.auditEvents,pagination:{pageSize:20,showTotal:t=>`共 ${t} 条`},size:"small",style:{background:"var(--bg-card)"},"row-class-name":()=>"perm-row"},{bodyCell:a(({column:t,record:u})=>[t.key==="timestamp"?(i(),p("span",ye,v(u.timestamp),1)):f("v-if",!0),t.key==="event"?(i(),p("span",ve,v(u.event),1)):f("v-if",!0),t.key==="user"?(i(),p("span",_e,v(u.user),1)):f("v-if",!0),t.key==="level"?(i(),R(b,{key:3,color:e.levelColor(u.level)},{default:a(()=>[k(v(u.level),1)]),_:2},1032,["color"])):f("v-if",!0),t.key==="detail"?(i(),p("span",ge,v(u.detail),1)):f("v-if",!0)]),emptyText:a(()=>[n(U,{description:"暂无审计日志"})]),_:1},8,["data-source","pagination"]))]),_:1})]),_:1},8,["activeKey"])])}const we=ne(re,[["render",ke],["__scopeId","data-v-73bcb987"],["__file","/tmp/cc-web-panel-j3HnbJ/repo/packages/web-panel/src/views/Permissions.vue"]]);export{we as default};
@@ -1 +0,0 @@
1
- [data-v-73bcb987] .perm-row:hover td{background:var(--bg-card-hover)!important}[data-v-73bcb987] .ant-tabs-tab{color:var(--text-secondary)!important}[data-v-73bcb987] .ant-tabs-tab-active .ant-tabs-tab-btn{color:#1677ff!important}[data-v-73bcb987] .ant-card-head{border-color:var(--border-color)!important;color:var(--text-primary)!important}
@@ -1 +0,0 @@
1
- .hint[data-v-4ed94be5]{font-size:12px;color:var(--text-color-secondary, #888)}.vendor-card[data-v-4ed94be5]{cursor:pointer;border:1px solid transparent;transition:border-color .15s}.vendor-card.selected[data-v-4ed94be5]{border-color:#1677ff}.vendor-head[data-v-4ed94be5]{display:flex;justify-content:space-between;align-items:center;gap:8px;margin-bottom:4px}.vendor-actions[data-v-4ed94be5]{margin-top:6px;display:flex;justify-content:flex-end}.kv[data-v-4ed94be5]{font-size:12px}.howto[data-v-4ed94be5]{margin:0;padding-left:20px;font-size:13px}.howto li[data-v-4ed94be5]{margin-bottom:4px}kbd[data-v-4ed94be5]{background:#f0f0f0;border:1px solid #d9d9d9;border-radius:3px;padding:0 4px;font-family:monospace;font-size:12px}.hint[data-v-2f50c8a7],.kv[data-v-2f50c8a7]{font-size:12px;color:var(--text-color-secondary, #888)}.probe-result[data-v-2f50c8a7]{margin-top:8px}code[data-v-2f50c8a7]{background:#f0f0f0;padding:1px 4px;border-radius:3px;font-family:monospace;font-size:12px}.pdh-page[data-v-92d13942]{padding:16px;max-width:1400px;margin:0 auto}.pdh-header[data-v-92d13942]{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:24px;gap:16px;flex-wrap:wrap}.page-title[data-v-92d13942]{margin:0 0 4px;font-size:22px;font-weight:600}.page-sub[data-v-92d13942]{margin:0;color:var(--text-color-secondary, #888);font-size:13px}.kv[data-v-92d13942]{font-size:13px;color:var(--text-color, #333);line-height:1.6}.kv.hint[data-v-92d13942]{color:#faad14;font-size:12px;margin-top:4px}.answer[data-v-92d13942]{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-92d13942]{color:var(--text-color-secondary, #888);font-size:12px}.json-pre[data-v-92d13942]{font-size:12px;background:var(--bg-elevated, #fafafa);padding:10px;border-radius:4px;max-height:280px;overflow:auto}.amount-in[data-v-92d13942]{color:#52c41a;font-weight:600}.amount-out[data-v-92d13942]{color:#ff4d4f;font-weight:600}
@@ -1,9 +0,0 @@
1
- import{I as _,P as i,S as b,K as o,c as a,J as h,U as k,F as V,Z as re,_ as Ht,R as p,Q as l,V as m,a2 as Kt,w as ve,b as J,a as ne,r as T,f as Ct,a5 as In,o as wt,a1 as Dn,a0 as En}from"./vendor-Bn1JzzAn.js";import{u as ke}from"./usePersonalDataHub-B-q2ElB0.js";import{_ as Le,d as y}from"./index-k7QsBwyo.js";import{aD as St,O as It,aE as Dt,aF as Et,a1 as Rt,aG as Rn,ag as Pn,p as Tn,aC as xn,W as Ln,e as Un,aH as Mn,aa as Bn,am as Nn,ac as zn,n as Fn,R as Hn}from"./icons-DG5UD-6K.js";import"./useShellMode-CgR0wCYM.js";const W=Object.freeze({SYNC:"sync",FILE:"file",DIRECTORY:"directory",COOKIE:"cookie",OAUTH:"oauth",ADB:"adb",SETUP:"setup"}),Kn=new Set(["social-bilibili","social-weibo","social-douyin","social-xiaohongshu","social-toutiao","social-kuaishou"]),Wt=new Set(["travel-didi-consumer"]),Wn=new Set(["sync:file-import","sync:snapshot","sync:sqlite"]),jn=new Set(["sync:cookie","sync:cookie-api"]),Pt=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})])})}),qn=new Set(["NO_KEY_PROVIDER","EMPTY_KEY","KEY_PROVIDER_THREW","ENV_UNSUPPORTED","CUSTOM_FETCH_REQUIRED"]);function ue(r){return Array.isArray(r?.capabilities)?r.capabilities:[]}function Pe(r){return!r||!ue(r).includes("sync:oauth-api")||!Object.prototype.hasOwnProperty.call(Pt,r.name)?null:Pt[r.name]}function _e(r){if(!r||typeof r!="object")return W.SETUP;if(Kn.has(r.name))return W.ADB;const t=ue(r);return t.includes("sync:scan-directory")?W.DIRECTORY:r.ready===!0?W.SYNC:qn.has(r.reason)?W.SETUP:t.some(u=>jn.has(u))||Wt.has(r.name)&&t.includes("sync:custom-cookie-api")?W.COOKIE:Pe(r)?W.OAUTH:t.includes("sync:scan-directory")||t.includes("sync:export-directory")||t.includes("sync:profile-directory")?W.DIRECTORY:t.some(u=>Wn.has(u))?W.FILE:r.ready==null&&r.category==="local"?W.SYNC:W.SETUP}function Tt(r){switch(_e(r)){case W.FILE:return"📂 选择文件采集";case W.DIRECTORY:return ue(r).includes("sync:scan-directory")?"📁 选择扫描目录":ue(r).includes("sync:profile-directory")?"📁 选择配置目录":"📁 选择导出目录";case W.COOKIE:return"🔑 登录采集";case W.OAUTH:return"🔐 OAuth 授权采集";case W.ADB:return"📱 USB 一键采集";case W.SYNC:return"⚡ 立即采集";default:return"查看采集步骤"}}function xt(r){switch(_e(r)){case W.FILE:return"📂 采集";case W.DIRECTORY:return"📁 采集";case W.COOKIE:return"🔑 采集";case W.OAUTH:return"🔐 授权采集";case W.ADB:return"📱 采集";case W.SYNC:return"采集";default:return"查看步骤"}}function Lt(r){if(_e(r)===W.COOKIE&&Te(r))return"粘贴登录 Cookie、稳定账号标识和本次使用的滴滴 HTTPS 订单接口后采集入库";switch(_e(r)){case W.FILE:return"选择导出或解密好的文件,自动入库";case W.DIRECTORY:return ue(r).includes("sync:scan-directory")?"选择本地目录,仅采集其中的文件活动元数据":ue(r).includes("sync:profile-directory")?"选择本地配置目录,读取其中的数据文件":"选择本地导出目录,递归扫描支持的文件";case W.COOKIE:return"粘贴当前登录 Cookie 后采集入库";case W.OAUTH:return"临时输入官方 OAuth 凭据后采集;凭据不会保存到本地配置、数据中台或同步水位";case W.ADB:return"连接已授权的 Android 手机后自动采集";case W.SYNC:return"复用当前配置,直接采集入库";default:return"先按上述步骤完成采集配置"}}function Te(r){return Wt.has(r?.name)}function ce(r,t,{normalize:u=!1}={}){if(typeof r!="string")return"";const e=(u?r.normalize("NFKC"):r).trim();return!e||e.length>t||/[\0\r\n]/u.test(e)?"":e}function je(r,t={}){if(!Pe(r))return null;const u=ce(t.accessToken,16*1024),e=ce(t.accountId,1024,{normalize:!0});if(!u||!e)return null;if(r.name==="doc-baidu-netdisk"){const R=ce(t.dir,4096,{normalize:!0});return/^\/apps\/[^/\0\r\n]+(?:\/[^\0\r\n]*)?$/u.test(R)?{accessToken:u,accountId:e,dir:R,recursive:t.recursive!==!1}:null}if(r.name==="doc-wps"){const R=ce(t.driveId,1024,{normalize:!0}),P=ce(t.parentId,1024,{normalize:!0})||"0",g=ce(t.appId,1024,{normalize:!0}),S=ce(t.appKey,16*1024);return!R||!!g!=!!S?null:{accessToken:u,accountId:e,driveId:R,parentId:P,recursive:t.recursive!==!1,...g?{appId:g,appKey:S}:{}}}return null}function Ut(r,t,u,e){const R=typeof t=="string"?t.trim():"",P=typeof u=="string"?u.trim():"";if(!R||!P)return null;const g={cookie:R,accountId:P};if(!Te(r))return g;const S=typeof e=="string"?e.trim():"";if(!S)return null;try{const v=new URL(S);if(v.protocol!=="https:"||v.username||v.password||v.hash||v.port&&v.port!=="443"||!(v.hostname==="xiaojukeji.com"||v.hostname.endsWith(".xiaojukeji.com")))return null;g.sourceUrl=v.href}catch{return null}return g}function Mt(r,t,u){if(typeof t!="string"||t.length===0)return null;const e=ue(r);if(e.includes("sync:scan-directory"))return{roots:[t]};if(e.includes("sync:profile-directory"))return{profilePath:t};if(e.includes("sync:export-directory")){const R=typeof u=="string"?u.trim():"";return R?{exportDir:t,accountId:R}:null}return null}function Vn(r="数据"){return`当前 Web/CLI 宿主不支持原生目录选择器。
2
- 请手动输入运行 ChainlessChain 主机上的绝对${r}目录路径(不是浏览器所在设备的路径)。该目录将由主机端直接读取;留空取消:`}function Yn(r){return typeof r!="string"||r.length===0?!1:r.startsWith("/")||/^[A-Za-z]:[\\/]/u.test(r)}async function Bt({pickDirectoryResult:r,prompt:t,title:u,directoryKind:e}){const R=await r({title:u});if(R?.status==="selected")return{...R,manual:!1};if(R?.status==="cancelled")return{status:"cancelled",path:null,manual:!1};const P=t(Vn(e));return typeof P!="string"||P.length===0?{status:"cancelled",path:null,manual:!0}:Yn(P)?{status:"selected",path:P,manual:!0}:{status:"invalid",path:null,manual:!0,reason:"HOST_ABSOLUTE_PATH_REQUIRED"}}const Qn=Object.freeze(["events","persons","places","items","topics"]);function ae(r){return Number.isFinite(r)&&r>0?r:0}function qe(r){return Number.isFinite(r)&&r>0?r:null}function Re(r){return Number.isFinite(r)&&r>=0?r:null}function Gn(r){const t=r?.entityCounts;return!t||typeof t!="object"?0:Qn.reduce((u,e)=>u+ae(t[e]),0)}function se(r){const t=!!r&&typeof r=="object",u=t&&typeof r.status=="string"?r.status:"invalid",e=Gn(r),R=ae(r?.rawCount),P=ae(r?.archivedRawCount),g=ae(r?.archiveFailureCount),S=ae(r?.invalidCount),v=r?.watermarkDeferred===!0,O=typeof r?.checkpointCommitted=="boolean"?r.checkpointCommitted:null,x={archivedRawCount:P,archiveFailureCount:g,checkpointCommitted:O},U={pageBudget:qe(r?.pageBudget),nextPageBudget:qe(r?.nextPageBudget),scanDeferredCount:ae(r?.scanDeferredCount),watermarkLookbackMs:ae(r?.watermarkLookbackMs),collectionSinceWatermark:typeof r?.collectionSinceWatermark=="string"?r.collectionSinceWatermark:null},N={attemptCount:ae(r?.attemptCount),retryCount:ae(r?.retryCount),totalRetryDelayMs:ae(r?.totalRetryDelayMs),retryExhausted:r?.retryExhausted===!0,retryAfterMs:qe(r?.retryAfterMs),rateLimitReason:typeof r?.rateLimitReason=="string"?r.rateLimitReason:null,rateLimitRemainingMinute:Re(r?.rateLimitRemainingMinute),rateLimitRemainingDay:Re(r?.rateLimitRemainingDay),sourceRequestCount:ae(r?.sourceRequestCount),sourceRequestThrottleMs:ae(r?.sourceRequestThrottleMs),sourceRequestRateLimitRemainingMinute:Re(r?.sourceRequestRateLimitRemainingMinute),sourceRequestRateLimitRemainingDay:Re(r?.sourceRequestRateLimitRemainingDay)};return t&&u==="skipped"?{kind:"skipped",level:"info",completed:!0,status:u,total:e,rawCount:R,...x,...U,...N,invalidCount:S,error:null,skipReason:r.skipReason||"NOT_READY",skipMessage:r.skipMessage||"来源当前未就绪"}:!t||u!=="ok"?{kind:"failed",level:"error",completed:!1,status:u,total:e,rawCount:R,...x,...U,...N,invalidCount:S,error:t&&typeof r.error=="string"&&r.error.trim()||(u==="invalid"?"未收到有效同步报告":`同步状态:${u}`)}:v||g>0||O===!1||S>0||R>0&&e===0?{kind:"partial",level:"warning",completed:!0,status:u,total:e,rawCount:R,...x,...U,...N,invalidCount:S,watermarkDeferred:v,error:null}:e===0?{kind:"empty",level:"info",completed:!0,status:u,total:e,rawCount:R,...x,...U,...N,invalidCount:S,error:null}:{kind:"success",level:"success",completed:!0,status:u,total:e,rawCount:R,...x,...U,...N,invalidCount:S,watermarkDeferred:v,error:null}}function Nt(r){if(!Array.isArray(r))return{level:"error",completed:!1,totalReports:0,totalEntities:0,success:0,empty:0,partial:0,skipped:0,failed:1,analyses:[]};const t=r.map(se),u={level:"success",completed:!0,totalReports:t.length,totalEntities:t.reduce((e,R)=>e+R.total,0),success:t.filter(e=>e.kind==="success").length,empty:t.filter(e=>e.kind==="empty").length,partial:t.filter(e=>e.kind==="partial").length,skipped:t.filter(e=>e.kind==="skipped").length,failed:t.filter(e=>e.kind==="failed").length,analyses:t};return u.failed>0?(u.level=u.failed===u.totalReports?"error":"warning",u.completed=!1):u.partial>0?u.level="warning":(u.skipped>0||u.success===0)&&(u.level="info"),u}function zt(r){return!Array.isArray(r)||r.length===0?null:r.find(t=>se(t).kind==="failed")||r.find(t=>se(t).kind==="partial")||r.find(t=>se(t).kind==="skipped")||r[r.length-1]}const xe=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})])}),Qe=Object.freeze(Object.fromEntries(Object.entries(xe).map(([r,t])=>[r,Object.freeze(Object.fromEntries(t.map(({key:u})=>[u,!0])))])));function Ve(){return Object.fromEntries(Object.entries(Qe).map(([r,t])=>[r,{...t}]))}function Ft(r,t){const u=xe[r];if(!u)return{};const e=t?.[r]||{};return{include:Object.fromEntries(u.map(({key:P})=>[P,e[P]!==!1]))}}const Xn={__name:"AIChatWizard",props:{open:{type:Boolean,default:!1},existingAccounts:{type:Array,default:()=>[]}},emits:["update:open","registered"],setup(r,{expose:t,emit:u}){t();const e=r,R=u,P=[{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}],g=ke(),S=T(1),v=T(null),O=T(""),x=T(null),U=T(null),N=T(null),M=ne({open:!1,probe:!1,register:!1}),Y=J(()=>P.find(E=>E.vendor===v.value)||{}),z=J(()=>S.value===1?"选择一家 AI 服务商":S.value===2?x.value?.fallbackMode==="paste"?"在外部浏览器登录,把 cookie 粘贴到下面":"在内嵌浏览器登录,主进程自动读取 cookie":"校验并写入本地加密 vault"),B=J(()=>{const E=U.value;return E?E.reason==="UNKNOWN_VENDOR"?"未知厂商 — 请刷新页面或重选":E.reason==="PASTE_REQUIRED"?"请先粘贴 cookie 字符串":E.missingRequired?.length?`缺关键 cookie: ${E.missingRequired.join(", ")}`:E.reason||"cookie 校验失败":""}),G=J(()=>{const E=N.value;return E?E.reason==="REQUIRED_COOKIES_MISSING"?`缺关键 cookie: ${(E.missingRequired||[]).join(", ")}`:E.reason==="VALIDATE_COOKIE_FAILED"?"厂商拒绝该 cookie(可能已过期或被风控)":E.reason==="ADAPTER_THREW"?`Adapter 抛错: ${E.error||"网络错误"}`:E.reason==="UNKNOWN_VENDOR"?"未知厂商":E.reason||"注册失败":"未知错误"});function H(E){return e.existingAccounts.some(K=>K&&K.vendor===E)}function F(E){return e.existingAccounts.find(K=>K&&K.vendor===E)||null}function ie(E){const K=F(E);return K?K.lastHealth?K.lastHealth.ok?"ok":K.lastHealth.reason==="SPEC_VERSION_MISMATCH"?"mismatch":"fail":"unknown":null}function D(E){const K=F(E);if(!K||!K.lastHealth||K.lastHealth.ok)return"";const Z=K.lastHealth.reason;return Z?Z==="SPEC_VERSION_MISMATCH"?"cookie 规格已升级,请重新登录":Z==="ADAPTER_THREW"?"上次校验抛错,建议稍后重试":Z==="COOKIE_EXPIRED"?"Cookie 已过期,请重新登录":Z:"Cookie 校验失败,建议重新登录"}async function $(E){try{(await g.unregisterAichat(E))?.ok&&R("registered",{vendor:E,accountId:null,unregistered:!0})}catch(K){N.value={ok:!1,reason:K?.message||"UNREGISTER_FAILED"}}}function de(E){v.value=E}async function oe(){if(v.value){M.open=!0,x.value=null,U.value=null,O.value="";try{if(x.value=await g.openAichatLogin(v.value),!x.value?.ok)return;S.value=2}catch(E){x.value={ok:!1,reason:E?.message||"OPEN_FAILED"}}finally{M.open=!1}}}async function be(){M.probe=!0,U.value=null;try{const E=O.value.trim(),K=E||void 0;U.value=await g.probeAichatCookies(v.value,K)}catch(E){U.value={ok:!1,reason:E?.message||"PROBE_FAILED"}}finally{M.probe=!1}}async function X(){if(U.value?.ok){M.register=!0;try{N.value=await g.registerAichatVendor(v.value,U.value.cookies),S.value=3,N.value?.ok&&R("registered",{vendor:v.value,accountId:N.value.accountId})}catch(E){N.value={ok:!1,reason:E?.message||"REGISTER_FAILED"},S.value=3}finally{M.register=!1}}}function ee(){S.value=1,v.value=null,O.value="",x.value=null,U.value=null,N.value=null}function le(){ee(),R("update:open",!1)}ve(()=>e.open,E=>{E&&ee()});const fe={props:e,emit:R,vendors:P,hub:g,step:S,selectedVendor:v,cookieHeader:O,openResult:x,probeResult:U,registerResult:N,loading:M,currentVendorMeta:Y,stepDescription:z,probeFailMessage:B,registerFailMessage:G,isRegistered:H,_entry:F,healthOf:ie,healthReasonOf:D,onUnregister:$,pickVendor:de,startLoginFlow:oe,runProbe:be,runRegister:X,restartFlow:ee,resetWizard:le,ref:T,reactive:ne,computed:J,watch:ve,get usePersonalDataHub(){return ke}};return Object.defineProperty(fe,"__isScriptSetup",{enumerable:!1,value:!0}),fe}},Jn={key:0},Zn={class:"vendor-head"},$n={class:"hint"},eo={class:"hint",style:{"margin-top":"4px"}},to={key:0,class:"hint",style:{"margin-top":"4px",color:"#ff4d4f"}},no={key:1},oo={class:"hint"},ao=["href"],ro={class:"howto"},io=["href"],lo={key:3,style:{"margin-top":"8px"}},so={key:2,class:"kv",style:{"margin-top":"4px"}},co={key:3,class:"kv",style:{"margin-top":"4px",color:"#ff4d4f"}},uo={key:2};function fo(r,t,u,e,R,P){const g=_("a-alert"),S=_("a-tag"),v=_("a-button"),O=_("a-popconfirm"),x=_("a-card"),U=_("a-col"),N=_("a-row"),M=_("a-collapse-panel"),Y=_("a-collapse"),z=_("a-textarea"),B=_("a-form-item"),G=_("a-form"),H=_("a-result"),F=_("a-space"),ie=_("a-drawer");return i(),b(ie,{open:u.open,title:"添加 AI 对话账号",placement:"right",width:640,"destroy-on-close":!0,"onUpdate:open":t[4]||(t[4]=D=>e.emit("update:open",D)),onClose:e.resetWizard},{footer:o(()=>[a(F,{style:{float:"right"}},{default:o(()=>[e.step>1&&e.step<3?(i(),b(v,{key:0,onClick:t[3]||(t[3]=D=>e.step=e.step-1)},{default:o(()=>[...t[22]||(t[22]=[l("上一步",-1)])]),_:1})):m("v-if",!0),a(v,{onClick:e.resetWizard},{default:o(()=>[...t[23]||(t[23]=[l("取消",-1)])]),_:1}),e.step===1?(i(),b(v,{key:1,type:"primary",disabled:!e.selectedVendor,loading:e.loading.open,onClick:e.startLoginFlow},{default:o(()=>[...t[24]||(t[24]=[l(" 下一步 ",-1)])]),_:1},8,["disabled","loading"])):m("v-if",!0),e.step===2&&e.openResult?.fallbackMode==="paste"?(i(),b(v,{key:2,loading:e.loading.probe,disabled:!e.cookieHeader.trim(),onClick:e.runProbe},{default:o(()=>[...t[25]||(t[25]=[l(" 检测 cookie ",-1)])]),_:1},8,["loading","disabled"])):m("v-if",!0),e.step===2&&e.openResult?.fallbackMode!=="paste"?(i(),b(v,{key:3,loading:e.loading.probe,onClick:e.runProbe},{default:o(()=>[...t[26]||(t[26]=[l(" 检测 cookie ",-1)])]),_:1},8,["loading"])):m("v-if",!0),e.step===2?(i(),b(v,{key:4,type:"primary",loading:e.loading.register,disabled:!e.probeResult?.ok,onClick:e.runRegister},{default:o(()=>[...t[27]||(t[27]=[l(" 注册 ",-1)])]),_:1},8,["loading","disabled"])):m("v-if",!0)]),_:1})]),default:o(()=>[a(g,{message:`第 ${e.step} / 3 步`,description:e.stepDescription,type:"info","show-icon":"",style:{"margin-bottom":"16px"}},null,8,["message","description"]),e.step===1?(i(),h("div",Jn,[t[10]||(t[10]=k("p",{class:"hint"}," 选择要接入的 AI 服务商。登录后将本地读取 cookie 同步对话历史;cookie 仅落本机加密文件,不上传任何云端。 ",-1)),a(N,{gutter:[12,12]},{default:o(()=>[(i(),h(V,null,re(e.vendors,D=>a(U,{xs:24,sm:12,md:8,key:D.vendor},{default:o(()=>[a(x,{size:"small",hoverable:"",class:Ht(["vendor-card",{selected:e.selectedVendor===D.vendor}]),onClick:$=>e.pickVendor(D.vendor)},{default:o(()=>[k("div",Zn,[k("strong",null,p(D.displayName),1),e.healthOf(D.vendor)==="fail"?(i(),b(S,{key:0,color:"red"},{default:o(()=>[...t[5]||(t[5]=[l("🔴 重新登录",-1)])]),_:1})):e.healthOf(D.vendor)==="mismatch"?(i(),b(S,{key:1,color:"orange"},{default:o(()=>[...t[6]||(t[6]=[l("⚠ 规格升级",-1)])]),_:1})):e.healthOf(D.vendor)==="unknown"?(i(),b(S,{key:2,color:"blue"},{default:o(()=>[...t[7]||(t[7]=[l("已接入·待巡检",-1)])]),_:1})):e.healthOf(D.vendor)==="ok"?(i(),b(S,{key:3,color:"green"},{default:o(()=>[...t[8]||(t[8]=[l("✓ 已接入",-1)])]),_:1})):m("v-if",!0)]),k("div",$n,p(D.notes),1),k("div",eo,[a(S,{color:"default"},{default:o(()=>[l(p(D.requiredCookies.length)+" 必需 cookie",1)]),_:2},1024),a(S,{color:"default"},{default:o(()=>[l("过期约 "+p(D.cookieMaxAgeHintDays)+" 天",1)]),_:2},1024)]),e.isRegistered(D.vendor)&&e.healthReasonOf(D.vendor)?(i(),h("div",to,p(e.healthReasonOf(D.vendor)),1)):m("v-if",!0),e.isRegistered(D.vendor)?(i(),h("div",{key:1,class:"vendor-actions",onClick:t[0]||(t[0]=Kt(()=>{},["stop"]))},[a(O,{title:"注销该 AI 对话来源?历史事件仍可在 vault 中查询。","ok-text":"注销","cancel-text":"取消",onConfirm:$=>e.onUnregister(D.vendor)},{default:o(()=>[a(v,{size:"small",type:"text",danger:""},{default:o(()=>[...t[9]||(t[9]=[l("注销",-1)])]),_:1})]),_:1},8,["onConfirm"])])):m("v-if",!0)]),_:2},1032,["class","onClick"])]),_:2},1024)),64))]),_:1})])):m("v-if",!0),e.step===2&&e.openResult?(i(),h("div",no,[k("p",oo,[k("strong",null,p(e.currentVendorMeta.displayName),1),t[11]||(t[11]=l(" · ",-1)),k("a",{href:e.openResult.loginUrl,target:"_blank",rel:"noopener noreferrer"},p(e.openResult.loginUrl),9,ao)]),e.openResult.fallbackMode==="paste"?(i(),b(g,{key:0,message:e.openResult.helpText||"请在外部浏览器登录后从开发者工具复制全部 cookie 字符串粘贴到下方。",type:"warning","show-icon":"",style:{"margin-bottom":"12px"}},null,8,["message"])):(i(),b(g,{key:1,message:"桌面端:请在弹出的内嵌浏览器窗口登录后点击 “检测 cookie”。",type:"info","show-icon":"",style:{"margin-bottom":"12px"}})),e.openResult.fallbackMode==="paste"?(i(),b(Y,{key:2,bordered:!1,style:{"margin-bottom":"12px"}},{default:o(()=>[a(M,{key:"howto",header:"如何获取 cookie 字符串?"},{default:o(()=>[k("ol",ro,[k("li",null,[t[12]||(t[12]=l("用 Chrome / Edge 打开 ",-1)),k("a",{href:e.openResult.loginUrl,target:"_blank"},p(e.openResult.loginUrl),9,io)]),t[13]||(t[13]=k("li",null,"完成登录,进入对话页",-1)),t[14]||(t[14]=k("li",null,[l("按 "),k("kbd",null,"F12"),l(" 打开开发者工具 → "),k("strong",null,"Application"),l(" → "),k("strong",null,"Cookies")],-1)),t[15]||(t[15]=k("li",null,"选中域名 → 全选所有 cookie 行 → 用扩展(如 EditThisCookie)导出 “name=value; …” 串",-1)),t[16]||(t[16]=k("li",null,[l("或在 Console 执行 "),k("code",null,"document.cookie"),l(" 复制结果(注意:HTTP-Only cookie 取不到,仍需 Application 面板)")],-1)),t[17]||(t[17]=k("li",null,"粘贴到下方文本框,点 “检测 cookie”",-1))])]),_:1})]),_:1})):m("v-if",!0),a(G,{layout:"vertical"},{default:o(()=>[a(B,{label:"Cookie 字符串"},{default:o(()=>[a(z,{value:e.cookieHeader,"onUpdate:value":t[1]||(t[1]=D=>e.cookieHeader=D),rows:6,placeholder:"name1=value1; name2=value2; name3=value3 …",autocomplete:"off"},null,8,["value"])]),_:1})]),_:1}),e.probeResult?(i(),h("div",lo,[e.probeResult.ok?(i(),b(g,{key:0,type:"success","show-icon":"",message:`已识别 ${e.probeResult.foundRequired.length} 个必需 cookie + ${e.probeResult.foundOptional.length} 个可选 cookie`},null,8,["message"])):(i(),b(g,{key:1,type:"error","show-icon":"",message:e.probeFailMessage},null,8,["message"])),e.probeResult.foundRequired?.length?(i(),h("div",so," ✓ "+p(e.probeResult.foundRequired.join(", ")),1)):m("v-if",!0),e.probeResult.missingRequired?.length?(i(),h("div",co," 缺失: "+p(e.probeResult.missingRequired.join(", ")),1)):m("v-if",!0)])):m("v-if",!0)])):m("v-if",!0),e.step===3?(i(),h("div",uo,[e.registerResult?.ok?(i(),b(H,{key:0,status:"success",title:`${e.currentVendorMeta.displayName} 已接入`,"sub-title":`accountId: ${e.registerResult.accountId} · userId: ${e.registerResult.validation?.userId||"匿名"}`},{extra:o(()=>[a(v,{type:"primary",onClick:e.resetWizard},{default:o(()=>[...t[18]||(t[18]=[l("完成",-1)])]),_:1}),a(v,{onClick:e.restartFlow},{default:o(()=>[...t[19]||(t[19]=[l("再加一家",-1)])]),_:1})]),_:1},8,["title","sub-title"])):(i(),b(H,{key:1,status:"error",title:"接入失败","sub-title":e.registerFailMessage},{extra:o(()=>[a(v,{type:"primary",onClick:t[2]||(t[2]=D=>e.step=2)},{default:o(()=>[...t[20]||(t[20]=[l("返回粘贴 cookie",-1)])]),_:1}),a(v,{onClick:e.restartFlow},{default:o(()=>[...t[21]||(t[21]=[l("选其他厂商",-1)])]),_:1})]),_:1},8,["sub-title"]))])):m("v-if",!0)]),_:1},8,["open"])}const po=Le(Xn,[["render",fo],["__scopeId","data-v-4ed94be5"],["__file","/tmp/cc-web-panel-j3HnbJ/repo/packages/web-panel/src/components/AIChatWizard.vue"]]),mo={__name:"PdhOAuthCollectorDrawer",props:{open:{type:Boolean,default:!1},source:{type:Object,default:null}},emits:["update:open","collect"],setup(r,{expose:t,emit:u}){t();const e=r,R=u,P=ne({accessToken:"",accountId:"",dir:"",driveId:"",parentId:"0",appId:"",appKey:"",recursive:!0}),g=J(()=>Pe(e.source)),S=J(()=>e.source?.name==="doc-baidu-netdisk"?"百度网盘 OAuth 采集":e.source?.name==="doc-wps"?"WPS OAuth 采集":"OAuth 授权采集"),v=J(()=>je(e.source,P)!==null);function O(){P.accessToken="",P.accountId="",P.dir="",P.driveId="",P.parentId="0",P.appId="",P.appKey="",P.recursive=!0}function x(){O(),R("update:open",!1)}function U(){const M=je(e.source,P);if(!M)return;const Y=e.source.name;O(),R("update:open",!1),R("collect",{name:Y,options:M})}ve(()=>[e.open,e.source?.name],([M])=>{M&&O()}),Ct(O);const N={props:e,emit:R,form:P,spec:g,title:S,canSubmit:v,resetForm:O,close:x,submit:U,computed:J,onBeforeUnmount:Ct,reactive:ne,watch:ve,get oauthCollectionOptions(){return je},get oauthCollectionSpec(){return Pe}};return Object.defineProperty(N,"__isScriptSetup",{enumerable:!1,value:!0}),N}};function yo(r,t,u,e,R,P){const g=_("a-alert"),S=_("a-input-password"),v=_("a-input"),O=_("a-form-item"),x=_("a-checkbox"),U=_("a-form"),N=_("a-empty"),M=_("a-button"),Y=_("a-space"),z=_("a-drawer");return i(),b(z,{open:u.open,title:e.title,placement:"right",width:"520","destroy-on-close":!0,onClose:e.close},{footer:o(()=>[a(Y,null,{default:o(()=>[a(M,{onClick:e.close},{default:o(()=>[...t[2]||(t[2]=[l("取消",-1)])]),_:1}),a(M,{type:"primary",disabled:!e.canSubmit,onClick:e.submit},{default:o(()=>[...t[3]||(t[3]=[l(" 开始采集 ",-1)])]),_:1},8,["disabled"])]),_:1})]),default:o(()=>[a(g,{type:"info","show-icon":"",message:"凭据仅用于本次官方 API 采集",description:"access token 与 App Key 不会写入本地配置、数据中台、审计日志或同步水位。提交后表单会立即清空。",style:{"margin-bottom":"16px"}}),e.spec?(i(),b(U,{key:0,layout:"vertical",model:e.form},{default:o(()=>[(i(!0),h(V,null,re(e.spec.fields,B=>(i(),b(O,{key:B.key,label:B.label,required:B.required===!0},{default:o(()=>[B.secret?(i(),b(S,{key:0,value:e.form[B.key],"onUpdate:value":G=>e.form[B.key]=G,"data-field":B.key,placeholder:B.placeholder,autocomplete:"new-password",spellcheck:!1},null,8,["value","onUpdate:value","data-field","placeholder"])):(i(),b(v,{key:1,value:e.form[B.key],"onUpdate:value":G=>e.form[B.key]=G,"data-field":B.key,placeholder:B.placeholder,autocomplete:"off",spellcheck:!1},null,8,["value","onUpdate:value","data-field","placeholder"]))]),_:2},1032,["label","required"]))),128)),a(O,{label:"扫描范围"},{default:o(()=>[a(x,{checked:e.form.recursive,"onUpdate:checked":t[0]||(t[0]=B=>e.form.recursive=B)},{default:o(()=>[...t[1]||(t[1]=[l(" 递归采集子目录 ",-1)])]),_:1},8,["checked"])]),_:1}),u.source?.name==="doc-wps"?(i(),b(g,{key:0,type:"warning","show-icon":"",message:"App ID 与 App Key 必须同时填写或同时留空"})):m("v-if",!0)]),_:1},8,["model"])):(i(),b(N,{key:1,description:"该来源没有可用的 OAuth 采集配置"}))]),_:1},8,["open","title"])}const go=Le(mo,[["render",yo],["__file","/tmp/cc-web-panel-j3HnbJ/repo/packages/web-panel/src/components/PdhOAuthCollectorDrawer.vue"]]),vo={__name:"WechatWizard",props:{open:{type:Boolean,default:!1}},emits:["update:open","registered"],setup(r,{expose:t,emit:u}){t();const e=r,R=u,P=ke(),g=T(1),S=T(null),v=ne({uin:"",dbPath:"",wechatDataPath:"",forceProvider:null}),O=T(null),x=ne({probe:!1,register:!1}),U=J(()=>g.value===1?"探测设备 + WeChat 版本,确认可用的 keyProvider":g.value===2?"填 UIN 与已 adb-pull 的本地路径":"bootstrap 注册 + 持久化 wechat-accounts.json"),N=J(()=>{const H=O.value;return H?H.reason==="ENV_UNSUPPORTED"?H.message||"env-probe 拒绝 — 请回到第 1 步看 reasons":H.reason==="MD5_NEEDS_WECHAT_DATA_PATH"?"MD5 路径需要 wechatDataPath":H.reason==="FRIDA_NEEDS_WXID"?"Frida 路径需要 account.uin / wxid":H.reason==="ADAPTER_CTOR_FAILED"?`Adapter ctor 抛错: ${H.message||""}`:H.reason==="BOOTSTRAP_THREW"?`Bootstrap 抛错: ${H.message||""}`:H.reason==="UIN_REQUIRED"?"UIN 不能为空":H.message||H.reason||"注册失败":"未知错误"});async function M(){x.probe=!0;try{S.value=await P.probeWechatEnv()}catch(H){S.value={ok:!1,suggestedKeyProvider:"unsupported",reasons:[H?.message||"probe failed"],device:{reachable:!1},root:{detected:!1,magiskInstalled:!1},frida:{serverRunning:!1,port:null},wechat:{installed:!1,versionName:null,majorVersion:null},warnings:[]}}finally{x.probe=!1}}async function Y(){x.register=!0;try{O.value=await P.registerWechat({account:{uin:v.uin},dbPath:v.dbPath||null,wechatDataPath:v.wechatDataPath||null,keyProviderOverride:v.forceProvider}),g.value=3,O.value?.ok&&R("registered",{uin:v.uin,chosenKeyProvider:O.value.chosenKeyProvider})}catch(H){O.value={ok:!1,reason:"BOOTSTRAP_THREW",message:H?.message||"RPC failed"},g.value=3}finally{x.register=!1}}function z(){g.value=1,S.value=null,v.uin="",v.dbPath="",v.wechatDataPath="",v.forceProvider=null,O.value=null}function B(){z(),R("update:open",!1)}ve(()=>e.open,H=>{H&&z()});const G={props:e,emit:R,hub:P,step:g,probe:S,form:v,registerResult:O,loading:x,stepDescription:U,registerFailMessage:N,runProbe:M,runRegister:Y,restartFlow:z,resetWizard:B,ref:T,reactive:ne,computed:J,watch:ve,get usePersonalDataHub(){return ke}};return Object.defineProperty(G,"__isScriptSetup",{enumerable:!1,value:!0}),G}},ko={key:0},_o={key:0,class:"probe-result"},bo={key:0,class:"kv"},ho={key:0,class:"kv"},Ao={key:1},Oo={key:2},Co={key:2,style:{"margin-top":"12px"}};function wo(r,t,u,e,R,P){const g=_("a-alert"),S=_("a-button"),v=_("a-tag"),O=_("a-descriptions-item"),x=_("a-descriptions"),U=_("a-input"),N=_("a-form-item"),M=_("a-radio"),Y=_("a-radio-group"),z=_("a-form"),B=_("a-result"),G=_("a-space"),H=_("a-drawer");return i(),b(H,{open:u.open,title:"添加 WeChat 账号",placement:"right",width:640,"destroy-on-close":!0,"onUpdate:open":t[8]||(t[8]=F=>e.emit("update:open",F)),onClose:e.resetWizard},{footer:o(()=>[a(G,{style:{float:"right"}},{default:o(()=>[e.step>1&&e.step<3?(i(),b(S,{key:0,onClick:t[6]||(t[6]=F=>e.step=e.step-1)},{default:o(()=>[...t[21]||(t[21]=[l("上一步",-1)])]),_:1})):m("v-if",!0),a(S,{onClick:e.resetWizard},{default:o(()=>[...t[22]||(t[22]=[l("取消",-1)])]),_:1}),e.step===1?(i(),b(S,{key:1,type:"primary",disabled:!e.probe||e.probe.suggestedKeyProvider==="unsupported",onClick:t[7]||(t[7]=F=>e.step=2)},{default:o(()=>[...t[23]||(t[23]=[l(" 下一步 ",-1)])]),_:1},8,["disabled"])):m("v-if",!0),e.step===2?(i(),b(S,{key:2,type:"primary",loading:e.loading.register,disabled:!e.form.uin||e.probe?.suggestedKeyProvider==="md5"&&!e.form.wechatDataPath,onClick:e.runRegister},{default:o(()=>[...t[24]||(t[24]=[l(" 注册 ",-1)])]),_:1},8,["loading","disabled"])):m("v-if",!0)]),_:1})]),default:o(()=>[a(g,{message:`第 ${e.step} / 3 步`,description:e.stepDescription,type:"info","show-icon":"",style:{"margin-bottom":"16px"}},null,8,["message","description"]),e.step===1?(i(),h("div",ko,[t[11]||(t[11]=k("p",{class:"hint"},[l(" 请用 USB 连接 Android 设备(开启 USB 调试)。WeChat ≥ 8.0 需要 root + frida-server。 探测仅读取 "),k("code",null,"adb shell"),l(" 命令输出,不写入任何东西。 ")],-1)),a(S,{type:"primary",loading:e.loading.probe,onClick:e.runProbe,style:{"margin-bottom":"12px"}},{default:o(()=>[...t[9]||(t[9]=[l(" 🔍 探测环境 ",-1)])]),_:1},8,["loading"]),e.probe?(i(),h("div",_o,[a(x,{column:1,size:"small",bordered:""},{default:o(()=>[a(O,{label:"suggestedKeyProvider"},{default:o(()=>[a(v,{color:e.probe.suggestedKeyProvider==="unsupported"?"red":"green"},{default:o(()=>[l(p(e.probe.suggestedKeyProvider),1)]),_:1},8,["color"])]),_:1}),a(O,{label:"adb 设备"},{default:o(()=>[a(v,{color:e.probe.device.reachable?"green":"red"},{default:o(()=>[l(p(e.probe.device.reachable?"已连接":"未连接"),1)]),_:1},8,["color"]),e.probe.device.serial?(i(),h("span",bo,p(e.probe.device.serial)+" · abi="+p(e.probe.device.abi||"?"),1)):m("v-if",!0)]),_:1}),a(O,{label:"root"},{default:o(()=>[a(v,{color:e.probe.root.detected?"green":"default"},{default:o(()=>[l(p(e.probe.root.detected?"已 root":"未 root"),1)]),_:1},8,["color"]),e.probe.root.magiskInstalled?(i(),b(v,{key:0,color:"blue"},{default:o(()=>[...t[10]||(t[10]=[l("Magisk",-1)])]),_:1})):m("v-if",!0)]),_:1}),a(O,{label:"frida-server"},{default:o(()=>[a(v,{color:e.probe.frida.serverRunning?"green":"default"},{default:o(()=>[l(p(e.probe.frida.serverRunning?"运行中":"未运行"),1)]),_:1},8,["color"]),e.probe.frida.port?(i(),h("span",ho," :"+p(e.probe.frida.port),1)):m("v-if",!0)]),_:1}),a(O,{label:"WeChat"},{default:o(()=>[a(v,{color:e.probe.wechat.installed?"green":"red"},{default:o(()=>[l(p(e.probe.wechat.installed?e.probe.wechat.versionName:"未安装"),1)]),_:1},8,["color"])]),_:1})]),_:1}),(i(!0),h(V,null,re(e.probe.reasons||[],F=>(i(),b(g,{key:F,message:F,type:"info","show-icon":"",style:{"margin-top":"8px"}},null,8,["message"]))),128)),(i(!0),h(V,null,re(e.probe.warnings||[],F=>(i(),b(g,{key:F,message:F,type:"warning","show-icon":"",style:{"margin-top":"8px"}},null,8,["message"]))),128))])):m("v-if",!0)])):m("v-if",!0),e.step===2?(i(),h("div",Ao,[t[16]||(t[16]=k("p",{class:"hint"},[l(" 填写从 adb pull 拉下来的本地路径。MD5 路径(7.x)需要 "),k("code",null,"wechatDataPath"),l("; Frida 路径(8.0+)需要设备运行 frida-server。 ")],-1)),a(z,{layout:"vertical"},{default:o(()=>[a(N,{label:"UIN / wxid",required:""},{default:o(()=>[a(U,{value:e.form.uin,"onUpdate:value":t[0]||(t[0]=F=>e.form.uin=F),placeholder:"WeChat 数字 UIN 或 wxid"},null,8,["value"])]),_:1}),a(N,{label:"dbPath(已拉下的 EnMicroMsg.db 本地路径)"},{default:o(()=>[a(U,{value:e.form.dbPath,"onUpdate:value":t[1]||(t[1]=F=>e.form.dbPath=F),placeholder:"C:\\\\users\\\\me\\\\pull\\\\EnMicroMsg.db"},null,8,["value"])]),_:1}),a(N,{label:"wechatDataPath(已拉下的 /data/data/com.tencent.mm/ 目录)"},{default:o(()=>[a(U,{value:e.form.wechatDataPath,"onUpdate:value":t[2]||(t[2]=F=>e.form.wechatDataPath=F),placeholder:"C:\\\\users\\\\me\\\\pull\\\\com.tencent.mm"},null,8,["value"]),t[12]||(t[12]=k("div",{class:"hint"},"MD5 路径必填;Frida 路径可空",-1))]),_:1}),a(N,{label:"强制 keyProvider(覆盖 env-probe 建议)"},{default:o(()=>[a(Y,{value:e.form.forceProvider,"onUpdate:value":t[3]||(t[3]=F=>e.form.forceProvider=F)},{default:o(()=>[a(M,{value:null},{default:o(()=>[...t[13]||(t[13]=[l("自动(推荐)",-1)])]),_:1}),a(M,{value:"md5"},{default:o(()=>[...t[14]||(t[14]=[l("md5",-1)])]),_:1}),a(M,{value:"frida"},{default:o(()=>[...t[15]||(t[15]=[l("frida",-1)])]),_:1})]),_:1},8,["value"])]),_:1})]),_:1})])):m("v-if",!0),e.step===3?(i(),h("div",Oo,[e.registerResult?.ok?(i(),b(B,{key:0,status:"success",title:`WeChat 已接入 (uin=${e.form.uin})`,"sub-title":`provider=${e.registerResult.chosenKeyProvider} · sensitivity=${e.registerResult.sensitivity}`},{extra:o(()=>[a(S,{type:"primary",onClick:e.resetWizard},{default:o(()=>[...t[17]||(t[17]=[l("完成",-1)])]),_:1}),a(S,{onClick:e.restartFlow},{default:o(()=>[...t[18]||(t[18]=[l("再加一个",-1)])]),_:1})]),_:1},8,["title","sub-title"])):(i(),b(B,{key:1,status:"error",title:"接入失败","sub-title":e.registerFailMessage},In({_:2},[e.registerResult?.probe?.reasons?.length?{name:"extra",fn:o(()=>[a(S,{onClick:t[4]||(t[4]=F=>e.step=1)},{default:o(()=>[...t[19]||(t[19]=[l("返回检查环境",-1)])]),_:1}),a(S,{onClick:t[5]||(t[5]=F=>e.step=2)},{default:o(()=>[...t[20]||(t[20]=[l("返回修改路径",-1)])]),_:1})]),key:"0"}:void 0]),1032,["sub-title"])),e.registerResult?.probe?.reasons?.length?(i(),h("div",Co,[(i(!0),h(V,null,re(e.registerResult.probe.reasons,F=>(i(),b(g,{key:F,message:F,type:"warning","show-icon":"",style:{"margin-bottom":"4px"}},null,8,["message"]))),128))])):m("v-if",!0)])):m("v-if",!0)]),_:1},8,["open"])}const So=Le(vo,[["render",wo],["__scopeId","data-v-2f50c8a7"],["__file","/tmp/cc-web-panel-j3HnbJ/repo/packages/web-panel/src/components/WechatWizard.vue"]]),Ye="pdh.syncIncludeOptions.v1",Io={__name:"PersonalDataHub",setup(r,{expose:t}){const u=ke(),e=T(null),R=T(null),P=T([]),g=T({}),S=T(""),v=T(null),O=T(""),x=T(!1),U=T(!1),N=T([]),M=T(null);function Y(){try{const n=localStorage.getItem(Ye);if(!n)return Ve();const c=JSON.parse(n);return{"system-data-android":{...Qe["system-data-android"],...c["system-data-android"]||{}}}}catch{return Ve()}}const z=ne(Y());function B(){try{localStorage.setItem(Ye,JSON.stringify(z)),console.log("[PDH-include] persisted:",JSON.stringify(z))}catch(n){console.warn("[PDH-include] persist failed:",n&&n.message)}}const G=T({});function H(n){return Object.prototype.hasOwnProperty.call(xe,n)}function F(n,c,d){const f=d&&d.target?!!d.target.checked:!!d;console.log("[PDH-include] toggle",n,c,"=>",f),z[n]||(z[n]={}),z[n][c]=f,B()}const ie=T(!1),D=ne({provider:"qq",email:"",authCode:"",host:"",port:993,pdfPasswordHints:{idCardLast6:"",phoneLast6:"",cardLast6:""}}),$=T(null),de=T(!1),oe=T(null),be=T([]),X=T(!1),ee=T(null),le=T(null),fe=[{name:"analysis.spending",label:"消费分析",icon:St,description:"总支出 / 商家排行 / 月度趋势"},{name:"analysis.relations",label:"人际关系",icon:It,description:"与每个人的互动频率 / 主动比例"},{name:"analysis.footprint",label:"足迹",icon:Dt,description:"常去地点 / 出行模式"},{name:"analysis.interests",label:"兴趣画像",icon:Et,description:"从购买 / 浏览 / 收藏抽兴趣"},{name:"analysis.timeline",label:"时间线",icon:Rt,description:"跨源事件串成故事"}],E=T(!1),K=T([]),Z=ne({queue:{pending:0},mergeGroups:0,reviewQueue:0}),Ue=T(!1),Ce=T([]);function we(n){n?.unregistered?y.success(`已注销 ${n.vendor}`):y.success(`已接入 ${n.vendor}`),j()}const Se=T(!1);function Me(n){y.success(`WeChat 已接入 (uin=${n.uin}, provider=${n.chosenKeyProvider})`),j()}const Be=T(!1),s=ne({email:"",zipPassword:"",filePath:""}),C=T(null),w=ne({active:!1,batchMode:!1,adapter:"",phase:"",mailbox:"",current:0,total:0,attempt:1,errorMessage:""}),A=ne({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}),Ge=T(null);function Ne(n){switch(n){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 Xe(n){switch(n){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 Je(n){switch(n){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 Ze(n){switch(n){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 $e(){if(!A.xhsAdbSync){A.xhsAdbSync=!0;try{const n=await u.xhsAdbSync({});if(!n||!n.ok){const I=n&&n.reason||"SYNC_FAILED",L=Ze(I),q=n&&n.message||"";y.error({content:`Xhs ADB 同步失败:${L}`,description:q,duration:8});return}const c=n.report||{},d=c.xhs||{},f=d.eventCounts||{};d.meFetchFailed?y.warning({content:"Xhs 同步未拉到 user_id — /user/me 返空 data",description:`lastErrorCode=${d.lastErrorCode}, ${d.lastErrorMessage||""}。可能 cookie 已过期或 web_session 缺失,请在手机重新登录。`,duration:10}):d.lastErrorCode===461?y.warning({content:"Xhs X-S 签名被拒 (461) — 部分接口未抓到",description:`命中 ${f.total||0} events。我们的 X-S 算法 best-effort (~60% GET / <30% POST hit),461 在 POST 较常见。稍后重试 (X-S 算法可能 4-8 周 rotate)。`,duration:10}):d.lastErrorCode?y.warning({content:`Xhs 同步部分完成 (${f.total||0} events)`,description:`lastErrorCode=${d.lastErrorCode}, ${d.lastErrorMessage||""}`,duration:8}):y.success(`Xhs 同步成功:notes=${f.note||0} / liked=${f.liked||0} / follow=${f.follow||0} (total=${f.total||0})${d.nickname?" ["+d.nickname+"]":""}`),M.value=c,j()}catch(n){y.error({content:"Xhs ADB 同步异常",description:n&&n.message?n.message:String(n),duration:8})}finally{A.xhsAdbSync=!1}}}function et(n){switch(n){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 tt(){if(!A.toutiaoAdbSync){A.toutiaoAdbSync=!0;try{const n=await u.toutiaoAdbSync({});if(!n||!n.ok){const I=n&&n.reason||"SYNC_FAILED",L=et(I),q=n&&n.message||"";y.error({content:`Toutiao ADB 同步失败:${L}`,description:q,duration:8});return}const c=n.report||{},d=c.toutiao||{},f=d.eventCounts||{};d.profileFetchFailed?y.warning({content:"Toutiao 同步未拉到 user_id — passport/info/v2 返失败",description:`lastErrorCode=${d.lastErrorCode}, ${d.lastErrorMessage||""}。可能 cookie 已过期或 sessionid 缺失,请在手机重新登录。`,duration:10}):d.signProviderUsed==="none"&&f.feed===0&&f.collection===0&&f.search===0?y.warning({content:`Toutiao 同步仅获取了 profile (${f.profile||0} event)`,description:"当前 web-shell 上下文不支持 _signature 签名(仅 desktop app 提供 ToutiaoSignBridge)。打开桌面 app 同步可获取 feed / collection / search。",duration:12}):d.lastErrorCode?y.warning({content:`Toutiao 同步部分完成 (${f.total||0} events)`,description:`lastErrorCode=${d.lastErrorCode}, ${d.lastErrorMessage||""}`,duration:8}):y.success(`Toutiao 同步成功:profile=${f.profile||0} / feed=${f.feed||0} / collection=${f.collection||0} / search=${f.search||0} (total=${f.total||0})${d.nickname?" ["+d.nickname+"]":""}`),M.value=c,j()}catch(n){y.error({content:"Toutiao ADB 同步异常",description:n&&n.message?n.message:String(n),duration:8})}finally{A.toutiaoAdbSync=!1}}}function nt(n){switch(n){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 ot(){if(!A.kuaishouAdbSync){A.kuaishouAdbSync=!0;try{const n=await u.kuaishouAdbSync({});if(!n||!n.ok){const I=n&&n.reason||"SYNC_FAILED",L=nt(I),q=n&&n.message||"";y.error({content:`Kuaishou ADB 同步失败:${L}`,description:q,duration:8});return}const c=n.report||{},d=c.kuaishou||{},f=d.eventCounts||{};d.profileFetchFailed?y.warning({content:"Kuaishou 同步 cookie 缺 api_ph payload",description:`lastErrorCode=${d.lastErrorCode}, ${d.lastErrorMessage||""}。可能 cookie 已过期或登录态不完整(仅有 userId 但没有 api_ph),请在手机重新登录。`,duration:10}):d.signProviderUsed==="none"&&f.watch===0&&f.collect===0&&f.search===0?y.warning({content:`Kuaishou 同步仅获取了 profile (${f.profile||0} event)`,description:"当前 web-shell 上下文不支持 __NS_sig3 签名(仅 desktop app 提供 KuaishouSignBridge)。打开桌面 app 同步可获取 watch / collect / search。",duration:12}):d.lastErrorCode?y.warning({content:`Kuaishou 同步部分完成 (${f.total||0} events)`,description:`lastErrorCode=${d.lastErrorCode}, ${d.lastErrorMessage||""}`,duration:8}):y.success(`Kuaishou 同步成功:profile=${f.profile||0} / watch=${f.watch||0} / collect=${f.collect||0} / search=${f.search||0} (total=${f.total||0})${d.nickname?" ["+d.nickname+"]":""}`),M.value=c,j()}catch(n){y.error({content:"Kuaishou ADB 同步异常",description:n&&n.message?n.message:String(n),duration:8})}finally{A.kuaishouAdbSync=!1}}}async function jt(){if(!A.bridgeDoctor){A.bridgeDoctor=!0;try{const n=await u.bridgeDoctor();if(!n||!n.ok){const Q=n&&n.reason||"BRIDGE_DOCTOR_FAILED",te=n&&n.message||"";Q==="MODULE_LOAD_FAILED"?y.error({content:"Bridge doctor 不可用",description:"当前上下文不是 Electron desktop app(cli / web-shell-only 无 sign-bridge 模块)。请从桌面 app 运行此诊断。",duration:10}):y.error({content:`Bridge doctor 失败:${Q}`,description:te,duration:8});return}const c=n.results||{},d=["xhs","toutiao","kuaishou"],f=d.filter(Q=>c[Q]&&c[Q].anyCandidatePresent).length,I=d.length,L=[];for(const Q of d){const te=c[Q];if(!te||!te.ok){L.push(`${Q}: ✗ ${te&&te.error?te.error:"unknown error"}`);continue}const Ae=te.candidates||{},Oe=Object.keys(Ae).filter(Sn=>Ae[Sn]===!0),ge=Object.keys(Ae).length,Cn=te.anyCandidatePresent?"✓":"⚠",wn=te.anyCandidatePresent?`${Oe.length}/${ge} candidate(s): ${Oe.join(", ")}`:`0/${ge} candidates (rotation? 需更新 buildSignScript)`;L.push(`${Q}: ${Cn} ${wn} (warmUp=${te.warmUpMs}ms, probe=${te.probeMs}ms)`)}(f===I?y.success:f===0?y.error:y.warning)({content:`Bridge doctor: ${f}/${I} 平台签名可用`,description:L.join(`
3
- `),duration:15}),Ge.value=n}catch(n){y.error({content:"Bridge doctor 异常",description:n&&n.message?n.message:String(n),duration:8})}finally{A.bridgeDoctor=!1}}}async function at(){if(!A.weiboAdbSync){A.weiboAdbSync=!0;try{const n=await u.weiboAdbSync({});if(!n||!n.ok){const I=n&&n.reason||"SYNC_FAILED",L=Je(I),q=n&&n.message||"";y.error({content:`Weibo ADB 同步失败:${L}`,description:q,duration:8});return}const c=n.report||{},d=c.weibo||{},f=d.eventCounts||{};d.uidFetchFailed?y.warning({content:"Weibo 同步未拉到 UID — /api/config 返 login=false",description:`lastErrorCode=${d.lastErrorCode}, ${d.lastErrorMessage||""}。可能 cookie 已过期 (请在手机重新登录) 或微博触发 anti-bot redirect。事件数 0,未入 vault。`,duration:10}):d.lastErrorCode?y.warning({content:`Weibo 同步部分完成 (${f.total||0} events)`,description:`lastErrorCode=${d.lastErrorCode}, ${d.lastErrorMessage||""} — 部分接口受反爬限制,稍后重试可补齐`,duration:8}):y.success(`Weibo 同步成功:posts=${f.post||0} / fav=${f.favourite||0} / follow=${f.follow||0} (total=${f.total||0})`),M.value=c,j()}catch(n){y.error({content:"Weibo ADB 同步异常",description:n&&n.message?n.message:String(n),duration:8})}finally{A.weiboAdbSync=!1}}}async function rt(){if(!A.douyinAdbSync){A.douyinAdbSync=!0;try{const n=await u.douyinAdbSync({});if(!n||!n.ok){const L=n&&n.reason||"SYNC_FAILED",q=Xe(L),Q=n&&n.message||"";y.error({content:`Douyin ADB 同步失败:${q}`,description:Q,duration:8});return}const c=n.report||{},d=c.douyin||{},f=d.eventCounts||{},I=d.parserDiagnostic||{};if(!I.hadMsgTable&&!I.hadSimpleUserTable)y.warning({content:"Douyin 同步完成但 0 events",description:"msg 和 SIMPLE_USER 表都未在 IM 数据库中找到 — 抖音 App 版本可能用了不同 schema",duration:10});else if(!I.hadMsgTable||!I.hadSimpleUserTable){const L=[];I.hadMsgTable||L.push("msg (私信)"),I.hadSimpleUserTable||L.push("SIMPLE_USER (联系人)"),y.warning({content:`Douyin 部分同步:msg=${f.message||0} contacts=${f.contact||0}`,description:`${L.join("、")} 表未找到,未入库部分数据`,duration:8})}else y.success(`Douyin 同步成功:messages=${f.message||0} contacts=${f.contact||0} (total=${f.total||0})`);M.value=c,j()}catch(n){y.error({content:"Douyin ADB 同步异常",description:n&&n.message?n.message:String(n),duration:8})}finally{A.douyinAdbSync=!1}}}async function qt(){if(!A.bilibiliAdbDoctor){A.bilibiliAdbDoctor=!0;try{const n=await u.bilibiliAdbDoctor();if(!n||!n.ok){const d=n&&n.reason||"PROBE_FAILED",f=Ne(d),I=n&&n.message||"";y.error({content:`Bilibili 诊断失败:${f}`,description:I,duration:8});return}const c=n.cookieDiagnostic||{};c.hadEncrypted?y.warning({content:`Bilibili 环境就绪 (uid=${n.uid}) — 但发现 Keystore 加密 cookie`,description:`cookies 数=${c.cookieCount||"?"}; 部分行使用 Android Keystore 加密 (跳过)。可能是较新 Bilibili App + Android 14+。可继续同步,但可能数据不全。`,duration:10}):y.success(`Bilibili 环境就绪 — uid=${n.uid}, 找到 ${c.cookieCount||"?"} 个 cookie,可以同步`)}catch(n){y.error({content:"Bilibili 诊断异常",description:n&&n.message?n.message:String(n),duration:8})}finally{A.bilibiliAdbDoctor=!1}}}async function it(){if(!A.bilibiliAdbSync){A.bilibiliAdbSync=!0;try{const n=await u.bilibiliAdbSync({});if(!n||!n.ok){const I=n&&n.reason||"SYNC_FAILED",L=Ne(I),q=n&&n.message||"";y.error({content:`Bilibili ADB 同步失败:${L}`,description:q,duration:8});return}const c=n.report||{},d=c.bilibili||{},f=d.eventCounts||{};d.lastErrorCode?y.warning({content:`Bilibili 同步部分完成 (${f.total||0} events)`,description:`lastErrorCode=${d.lastErrorCode}, ${d.lastErrorMessage||""} — 部分接口受反爬限制,稍后重试可补齐`,duration:8}):y.success(`Bilibili 同步成功:history=${f.history||0} / fav=${f.favourite||0} / dyn=${f.dynamic||0} / follow=${f.follow||0} (total=${f.total||0})`),M.value=c,j()}catch(n){y.error({content:"Bilibili ADB 同步异常",description:n&&n.message?n.message:String(n),duration:8})}finally{A.bilibiliAdbSync=!1}}}const Vt=[{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 ze(n){return g.value[n]||null}function Ie(n){const c=P.value.find(f=>f.name===n)||{},d=ze(n)||{};return{...c,...d,name:n,capabilities:d.capabilities||c.capabilities||[]}}const pe=T(!1),De=T(null);function Fe(n){De.value=Ie(n),pe.value=!0}async function Yt(){const n=De.value?.name;await j(),n&&(De.value=Ie(n))}const lt={ready:"green",needs_setup:"orange",unavailable:"default",error:"red"};function Qt(n){return lt[n]||"default"}const st={ready:"可采集",needs_setup:"待配置",unavailable:"不支持",error:"异常"};function Gt(n){return n?st[n.status]||n.status:"检测中"}const dt={local:"本机直采",snapshot:"需手机采集",device:"需 root/本地解密",credential:"需登录授权",platform:"平台限制"};function Xt(n){return dt[n]||n||""}const ct=new Set(["wechat-pc","qq-pc","dingtalk-pc","feishu-pc","messaging-whatsapp"]),ut=new Set(["alipay-bill"]),ft=Object.freeze({"social-bilibili":it,"social-weibo":at,"social-douyin":rt,"social-xiaohongshu":$e,"social-toutiao":tt,"social-kuaishou":ot});function pt(n){return _e(n)}function Jt(n){return Tt(n)}function Zt(n){return xt(n)}function $t(n){return Lt(n)}async function en(n){const c=Ie(n),d=pt(c);if(d==="file"){const f=await u.pickFile({title:`选择 ${c&&c.guide?c.guide.displayName:n} 的数据文件`});if(!f){y.info("已取消选择文件");return}let I,L;ct.has(n)?I=window.prompt("如数据库已解密为明文,直接确定即可;若为加密库,请粘贴密钥或输入密钥文件路径:")||void 0:ut.has(n)&&/\.zip$/i.test(f)&&(L=window.prompt("请输入支付宝账单 ZIP 密码;如该 ZIP 未加密可直接确定:")||void 0),await mt(n,f,{key:I,zipPassword:L})}else if(d==="directory"){const f=Array.isArray(c?.capabilities)?c.capabilities:[],I=f.includes("sync:scan-directory"),L=!I&&f.includes("sync:profile-directory"),q=I?"扫描":L?"配置":"导出",Q=await Bt({pickDirectoryResult:ge=>u.pickDirectoryResult(ge),prompt:ge=>window.prompt(ge),title:`选择 ${c&&c.guide?c.guide.displayName:n} 的本地${q}目录`,directoryKind:q});if(Q.status==="cancelled"){y.info(Q.manual?"已取消输入主机目录":"已取消选择目录");return}if(Q.status==="invalid"){y.warning("请输入 ChainlessChain 主机上的绝对目录路径;相对路径不会用于采集");return}const te=Q.path;Q.manual&&y.info("将从运行 ChainlessChain 的主机读取手工指定目录");const Ae=L||I?null:(window.prompt("请输入一个稳定的本地账号标识,用于隔离同步水位(原文不会写入数据中台):")||"").trim(),Oe=Mt(c,te,Ae);if(!Oe){y.info("已取消:需要本地账号标识才能安全隔离同步水位");return}await yt(n,Oe)}else if(d==="cookie"){const f=window.prompt("粘贴登录态 Cookie(在已登录的网页 DevTools → Application → Cookies 复制,或整条 Cookie 请求头):");if(!f||!f.trim()){y.info("已取消");return}const I=window.prompt("输入该平台账号的稳定标识(若接口需要用户名/UID,请填写真实平台标识;否则可用本地别名。只会持久化其哈希同步水位):");if(!I||!I.trim()){y.info("已取消:需要账号标识才能安全隔离同步水位");return}let L;if(Te(c)&&(L=window.prompt("粘贴本次授权会话中捕获的滴滴订单接口 HTTPS URL(仅允许 xiaojukeji.com 官方域名,不会保存):"),!L||!L.trim())){y.info("已取消:该数据源需要本次使用的 HTTPS 订单接口");return}const q=Ut(c,f,I,L);if(!q){y.error("采集参数无效:请检查 Cookie、账号标识和 HTTPS 接口");return}await He(n,q)}else if(d==="oauth")ee.value=c,X.value=!0;else if(d==="adb"){const f=ft[n];if(!f){Fe(n);return}A.sync[n]=!0;try{await f()}finally{A.sync[n]=!1}}else d==="sync"?(await vt(n))?.completed&&(pe.value=!1):Fe(n)}async function tn({name:n,options:c}){await He(n,c)}async function He(n,c){A.sync[n]=!0,me(n);try{let d;typeof u.syncAdapterStream=="function"?d=await u.syncAdapterStream(n,c,ye):d=await u.syncAdapter(n,c),he(n,d,"采集").completed&&(pe.value=!1),await j()}catch(d){y.error(`采集 ${n} 失败: ${d.message}`)}finally{A.sync[n]=!1,w.active=!1}}async function mt(n,c,d={}){A.sync[n]=!0,me(n);try{const f={inputPath:c};d.key&&(f.key=d.key),d.zipPassword&&(f.zipPassword=d.zipPassword);let I;typeof u.syncAdapterStream=="function"?I=await u.syncAdapterStream(n,f,ye):I=await u.syncAdapter(n,f),he(n,I,"采集").completed&&(pe.value=!1),await j()}catch(f){y.error(`采集 ${n} 失败: ${f.message}`)}finally{A.sync[n]=!1,w.active=!1}}async function yt(n,c){A.sync[n]=!0,me(n);try{const d={...c};let f;typeof u.syncAdapterStream=="function"?f=await u.syncAdapterStream(n,d,ye):f=await u.syncAdapter(n,d),he(n,f,"采集").completed&&(pe.value=!1),await j()}catch(d){y.error(`采集 ${n} 失败: ${d.message}`)}finally{A.sync[n]=!1,w.active=!1}}const nn=J(()=>{const n=P.value||[];if(!n.length)return null;let c=0;for(const d of n){const f=ze(d.name);f&&f.ready&&(c+=1)}return{ready:c,total:n.length}}),on=[{title:"时间",key:"at",dataIndex:"at",width:170},{title:"动作",dataIndex:"action",key:"action",width:200},{title:"详情",key:"details"}],an=[{title:"日期",key:"occurredAt",width:100},{title:"描述",dataIndex:"description",key:"description"},{title:"金额",key:"amount",width:140,align:"right"}];function rn(n){return n==="high"?"red":n==="medium"?"orange":"default"}function ln(n){if(!n)return"";if(n.status==="skipped")return`${n.skipReason||"NOT_READY"}:${n.skipMessage||"来源当前未就绪"}`;const c=n.entityCounts||{},d=`events=${c.events??0} persons=${c.persons??0} places=${c.places??0} items=${c.items??0} topics=${c.topics??0} | raw=${n.rawCount??0} invalid=${n.invalidCount??0} | KG triples=${n.kgTripleCount??0} RAG docs=${n.ragDocCount??0} | ${n.durationMs??0}ms`;return n.error?`${d} · 错误: ${n.error}`:d}function sn(n){return se(n).level}function dn(n){const c=se(n),d=n?.adapter||"未知来源",f={success:"成功",empty:"无新数据",partial:"部分有效",skipped:"已跳过",failed:"失败"}[c.kind];return`同步 ${d}: ${f}`}function he(n,c,d="同步"){const f=c&&typeof c=="object"?c:{adapter:n,status:"error",rawCount:0,invalidCount:0,entityCounts:{},error:"未收到有效同步报告"};M.value=f;const I=se(f),L=f.adapter||n;if(I.kind==="failed")y.error(`${d} ${L} 失败:${I.error}`);else if(I.kind==="skipped")y.info(`${d}已跳过:${L},${I.skipMessage}`);else if(I.kind==="partial"){const q=I.watermarkDeferred?`本次入库 ${I.total} 条,但分页窗口尚未扫描完,水位未推进;扩大采集窗口后可安全续扫`:I.total>0?`入库 ${I.total} 条,${I.invalidCount} 条无效`:`读取 ${I.rawCount} 条,但没有形成有效数据`;y.warning(`${d}部分完成:${L},${q}`)}else I.kind==="empty"?y.info(`${d}完成:${L},未发现新数据`):y.success(`${d}完成:${L} 入库 ${I.total} 条`);return I}function gt(n){const c=Nt(n);M.value=zt(n);const d=`同步 ${c.totalReports} 个来源:${c.success} 成功,${c.empty} 无新数据,${c.partial} 部分有效,${c.skipped} 已跳过,${c.failed} 失败,共入库 ${c.totalEntities} 条`;return c.level==="error"?y.error(d):c.level==="warning"?y.warning(d):c.level==="info"?y.info(d):y.success(d),c}async function j(){A.refresh=!0;try{e.value=await u.health(),R.value=await u.stats(),P.value=await u.listAdapters();try{const n=await u.adapterReadiness(),c={};for(const d of Array.isArray(n)?n:[])c[d.name]=d;g.value=c}catch{}try{Ce.value=await u.listAichatAccounts()}catch{}}catch(n){y.error("刷新失败: "+n.message)}finally{A.refresh=!1}}async function cn(){if(S.value.trim()){A.ask=!0,O.value="",v.value=null;try{v.value=await u.ask(S.value.trim(),{acceptNonLocal:x.value})}catch(n){O.value=n.message}finally{A.ask=!1}}}async function un(){A.addMock=!0;try{await u.registerMock({count:30,seed:Date.now()%1e3}),await j(),y.success("MockAdapter 已注册(30 条 mock 数据 ready 同步)")}catch(n){y.error("注册失败: "+n.message)}finally{A.addMock=!1}}function me(n="",c=!1){w.active=!0,w.batchMode=c,w.adapter=n,w.phase="starting",w.mailbox="",w.current=0,w.total=0,w.attempt=1,w.errorMessage=""}function ye(n){if(n){if(n.kind==="sync.batch.start"){w.batchMode=!0,w.adapter="(all)",w.phase="preparing",w.current=n.current||0,w.total=n.total||0;return}if(n.kind==="sync.batch.progress"){w.batchMode=!0,w.adapter=n.adapter||"(all)",w.phase=n.status||"completed",w.current=n.current||0,w.total=n.total||w.total;return}if(n.kind==="sync.batch.done"){w.batchMode=!0,w.adapter="(all)",w.phase="done",w.current=n.current||0,w.total=n.total||w.total;return}n.adapter&&(w.adapter=n.adapter),n.phase&&(w.phase=n.phase),w.batchMode||(typeof n.current=="number"&&(w.current=n.current),typeof n.total=="number"&&(w.total=n.total)),typeof n.attempt=="number"&&(w.attempt=n.attempt),n.mailbox&&(w.mailbox=n.mailbox),n.phase==="error"&&(w.errorMessage=n.message||"sync error")}}async function vt(n){A.sync[n]=!0,me(n);try{const c=Ft(n,z);let d;typeof u.syncAdapterStream=="function"?d=await u.syncAdapterStream(n,c,ye):d=await u.syncAdapter(n,c);const f=he(n,d);return await j(),f}catch(c){return y.error(`同步 ${n} 失败: ${c.message}`),null}finally{A.sync[n]=!1,w.active=!1}}async function fn(){A.syncAll=!0,me("(all)",!0);try{const n=typeof u.syncAllStream=="function"?await u.syncAllStream({readyOnly:!0},ye):await u.syncAll({readyOnly:!0});gt(n),await j()}catch(n){y.error("同步失败: "+n.message)}finally{A.syncAll=!1,w.active=!1}}async function pn(n){try{await u.unregister(n),await j()}catch(c){y.error("移除失败: "+c.message)}}async function mn(n){if(n){A.audit=!0;try{N.value=await u.recentAudit({limit:200})}catch(c){y.error("审计日志加载失败: "+c.message)}finally{A.audit=!1}}}const Ke=J(()=>!(!D.email||!D.email.includes("@")||!D.authCode||D.authCode.length<4||D.provider==="custom"&&!D.host));function yn(n){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"}[n]||"请输入服务商授权码(不是登录密码)"}function kt(){D.provider="qq",D.email="",D.authCode="",D.host="",D.port=993,D.pdfPasswordHints={idCardLast6:"",phoneLast6:"",cardLast6:""},$.value=null}function We(){const n={provider:D.provider,email:D.email.trim(),authCode:D.authCode};return D.provider==="custom"&&(n.host=D.host.trim(),n.port=D.port||993,n.secure=!0),n}function _t(){const n={};for(const c of Object.keys(D.pdfPasswordHints)){const d=D.pdfPasswordHints[c];typeof d=="string"&&d.trim().length>0&&(n[c]=d.trim())}return Object.keys(n).length>0?n:null}async function gn(){if(Ke.value){A.testEmail=!0,$.value=null;try{$.value=await u.testEmailAuth(We())}catch(n){$.value={ok:!1,error:n.message}}finally{A.testEmail=!1}}}async function vn(){if(!(!Ke.value||!$.value?.ok)){A.saveEmail=!0;try{const n={},c=_t();c&&(n.pdfPasswordHints=c),await u.registerEmail(We(),n),y.success("邮箱账号已注册"),ie.value=!1,kt(),await j()}catch(n){y.error("保存失败: "+n.message)}finally{A.saveEmail=!1}}}const bt=J(()=>!(!s.email||!s.email.includes("@")||!s.filePath||s.filePath.length<3));function kn(){s.email="",s.zipPassword="",s.filePath="",C.value=null}async function _n(){if(bt.value){A.importAlipay=!0,C.value=null;try{await u.registerAlipay({email:s.email.trim(),zipPassword:s.zipPassword||void 0});const c=/\.zip$/i.test(s.filePath)?{zipPath:s.filePath,zipPassword:s.zipPassword||void 0}:{csvPath:s.filePath};C.value=await u.importAlipayBill(c),C.value?.status==="ok"?(y.success(`导入成功 — ${C.value.entityCounts?.events||0} 笔交易`),await j()):y.error("导入失败: "+(C.value?.error||C.value?.status))}catch(n){C.value={status:"error",error:n.message},y.error("导入失败: "+n.message)}finally{A.importAlipay=!1}}}async function ht(n){if(n){A.eventDetail=!0,de.value=!0;try{oe.value=await u.eventDetail(n)}catch(c){oe.value=null,y.error("事件详情加载失败: "+c.message)}finally{A.eventDetail=!1}}}t({showEventDetail:ht});async function bn(n){A.skill=!0,le.value=null;try{le.value=await u.runSkill(n,{})}catch(c){y.error(`${n} 失败: ${c.message}`)}finally{A.skill=!1}}async function Ee(){A.reviewQueue=!0;try{K.value=await u.reviewQueueList(50);const n=await u.resolverStats();Object.assign(Z,n)}catch(n){y.error("待消歧加载失败: "+n.message)}finally{A.reviewQueue=!1}}async function hn(){E.value=!0,await Ee()}async function An(n,c){try{await u.reviewDecision(n,c),y.success(`已记录决策: ${c}`),await Ee()}catch(d){y.error("决策失败: "+d.message)}}async function On(){A.resolverDrain=!0;try{const n=await u.resolverDrain(20);y.success(`drain 完成 — same=${n.same} different=${n.different} review=${n.review}`),await Ee()}catch(n){y.error("drain 失败: "+n.message)}finally{A.resolverDrain=!1}}async function At(){try{const n=await u.resolverStats();Object.assign(Z,n)}catch{}}wt(()=>{j(),At()});const Ot={hub:u,health:e,stats:R,adapters:P,readinessMap:g,askInput:S,askResult:v,askError:O,acceptNonLocal:x,auditOpen:U,auditRows:N,lastSync:M,SYNC_INCLUDE_STORAGE_KEY:Ye,_loadSyncInclude:Y,syncIncludeOptions:z,persistSyncInclude:B,includePopoverOpen:G,adapterHasIncludeToggles:H,onIncludeKindToggle:F,emailConfigOpen:ie,emailForm:D,emailTestResult:$,eventDetailOpen:de,eventDetail:oe,emailAccounts:be,oauthCollectorOpen:X,oauthCollectorTarget:ee,skillResult:le,analysisSkills:fe,reviewQueueOpen:E,reviewRows:K,resolverStats:Z,aichatWizardOpen:Ue,aichatAccounts:Ce,onAichatRegistered:we,wechatWizardOpen:Se,onWechatRegistered:Me,alipayConfigOpen:Be,alipayForm:s,alipayResult:C,syncProgress:w,loading:A,bridgeDoctorReport:Ge,bilibiliReasonMessage:Ne,douyinReasonMessage:Xe,weiboReasonMessage:Je,xhsReasonMessage:Ze,xhsAdbSync:$e,toutiaoReasonMessage:et,toutiaoAdbSync:tt,kuaishouReasonMessage:nt,kuaishouAdbSync:ot,bridgeDoctor:jt,weiboAdbSync:at,douyinAdbSync:rt,bilibiliAdbDoctor:qt,bilibiliAdbSync:it,adapterColumns:Vt,readinessOf:ze,adapterDescriptor:Ie,guideDrawerOpen:pe,guideTarget:De,openGuide:Fe,recheckGuideTarget:Yt,READINESS_STATUS_COLOR:lt,readinessStatusColor:Qt,READINESS_STATUS_LABEL:st,readinessStatusLabel:Gt,READINESS_CATEGORY_LABEL:dt,readinessCategoryLabel:Xt,KEYED_FILE_ADAPTERS:ct,PASSWORD_FILE_ADAPTERS:ut,ADB_COLLECT_ACTIONS:ft,collectMode:pt,collectActionLabel:Jt,collectButtonLabel:Zt,collectActionDescription:$t,oneClickCollect:en,collectViaOAuth:tn,collectViaRuntimeOptions:He,collectViaFile:mt,collectViaDirectory:yt,readinessSummary:nn,auditColumns:on,transactionColumns:an,sensitivityColor:rn,syncSummary:ln,syncAlertType:sn,syncAlertMessage:dn,presentSyncReport:he,presentSyncAll:gt,refresh:j,ask:cn,addMock:un,resetSyncProgress:me,handleSyncEvent:ye,syncOne:vt,syncAll:fn,unregisterAdapter:pn,loadAudit:mn,emailFormValid:Ke,providerAuthHint:yn,resetEmailForm:kt,buildEmailAccountPayload:We,buildPdfHints:_t,testEmailAuth:gn,saveEmail:vn,alipayFormValid:bt,resetAlipayForm:kn,importAlipay:_n,showEventDetail:ht,runSkill:bn,loadReviewQueue:Ee,openReviewQueue:hn,decideReview:An,drainResolver:On,loadResolverStats:At,ref:T,reactive:ne,onMounted:wt,computed:J,get message(){return y},get ReloadOutlined(){return Hn},get FileSearchOutlined(){return Fn},get MessageOutlined(){return zn},get SendOutlined(){return Nn},get AppstoreOutlined(){return Bn},get MailOutlined(){return Mn},get InfoCircleOutlined(){return Un},get WalletOutlined(){return Ln},get LinkOutlined(){return xn},get BulbOutlined(){return Tn},get DollarOutlined(){return St},get TeamOutlined(){return It},get EnvironmentOutlined(){return Dt},get HeartOutlined(){return Et},get ClockCircleOutlined(){return Rt},get RobotOutlined(){return Pn},get WechatOutlined(){return Rn},get usePersonalDataHub(){return ke},get resolveCollectionMode(){return _e},get getCollectionActionLabel(){return Tt},get getCollectionButtonLabel(){return xt},get getCollectionActionDescription(){return Lt},get cookieCollectionOptions(){return Ut},get directoryCollectionOptions(){return Mt},get requiresExplicitSourceUrl(){return Te},get chooseHostDirectory(){return Bt},get analyzeSyncReport(){return se},get analyzeSyncReports(){return Nt},get selectImportantSyncReport(){return zt},get buildSyncIncludeOptions(){return Ft},get createDefaultSyncInclude(){return Ve},get DEFAULT_SYNC_INCLUDE(){return Qe},get INCLUDE_KIND_META(){return xe},AIChatWizard:po,PdhOAuthCollectorDrawer:go,WechatWizard:So};return Object.defineProperty(Ot,"__isScriptSetup",{enumerable:!1,value:!0}),Ot}},Do={class:"pdh-page"},Eo={class:"pdh-header"},Ro={class:"kv"},Po={key:0,class:"kv"},To={key:1,class:"kv"},xo={class:"kv"},Lo={key:0,class:"kv hint"},Uo={style:{"margin-top":"12px",display:"flex","justify-content":"space-between","align-items":"center"}},Mo={key:0,style:{"margin-top":"12px"}},Bo={key:1,style:{"margin-top":"12px"}},No={class:"answer"},zo={style:{"margin-top":"8px","font-size":"12px",color:"var(--text-color-secondary, #888)"}},Fo={key:2,style:{"margin-top":"8px"}},Ho={style:{display:"flex","align-items":"center",gap:"8px"}},Ko={class:"hint",style:{"margin-top":"4px"}},Wo={key:0,style:{"margin-top":"16px"}},jo={class:"json-pre",style:{"max-height":"300px",overflow:"auto"}},qo={key:0,style:{"margin-top":"8px"}},Vo={key:0,style:{"margin-top":"4px",opacity:"0.85"}},Yo={key:1,style:{"margin-top":"4px",color:"#ffb3b3"}},Qo={style:{color:"#999","font-size":"12px","margin-left":"2px"}},Go={key:0,style:{color:"#8c8c8c","font-size":"12px","margin-top":"2px","line-height":"1.4"}},Xo={style:{"min-width":"220px"}},Jo={style:{color:"#999","font-size":"12px","margin-left":"4px"}},Zo={key:2,style:{"margin-top":"12px"}},$o={class:"kv",style:{"margin-bottom":"4px"}},ea={key:0,style:{color:"#faad14"}},ta={key:2,class:"kv hint"},na={key:3,class:"kv hint",style:{color:"#ff4d4f"}},oa={key:3,style:{"margin-top":"12px"}},aa={key:2,style:{"margin-top":"8px"}},ra={key:1},ia={style:{"margin-left":"8px"}},la={key:3,class:"json-pre"},sa={style:{"margin-left":"6px"}},da={key:0,style:{"margin-left":"6px"}},ca={key:0,class:"hint",style:{"margin-top":"4px"}},ua={key:0,style:{"margin-top":"8px"}},fa={style:{"margin-bottom":"12px"}},pa={class:"hint"},ma={class:"kv"},ya={class:"kv",style:{"margin-top":"4px"}},ga={class:"kv"},va={key:0,class:"hint",style:{"margin-top":"4px"}},ka={key:1,style:{"font-size":"11px"}},_a={style:{"font-weight":"600","margin-bottom":"8px"}},ba={style:{margin:"0","padding-left":"20px","line-height":"1.9"}},ha={key:0,style:{"margin-top":"6px","font-size":"12px",color:"#52c41a"}},Aa={style:{"font-size":"12px",color:"#999"}};function Oa(r,t,u,e,R,P){const g=_("a-button"),S=_("a-badge"),v=_("a-space"),O=_("a-tag"),x=_("a-card"),U=_("a-col"),N=_("a-row"),M=_("a-textarea"),Y=_("a-checkbox"),z=_("a-alert"),B=_("a-divider"),G=_("a-spin"),H=_("a-tooltip"),F=_("a-popover"),ie=_("a-popconfirm"),D=_("a-table"),$=_("a-empty"),de=_("a-progress"),oe=_("a-select-option"),be=_("a-select"),X=_("a-form-item"),ee=_("a-input"),le=_("a-input-password"),fe=_("a-input-number"),E=_("a-form"),K=_("a-drawer"),Z=_("a-descriptions-item"),Ue=_("a-descriptions"),Ce=_("a-list-item-meta"),we=_("a-list-item"),Se=_("a-list"),Me=_("a-collapse-panel"),Be=_("a-collapse");return i(),h("div",Do,[m(" Page header "),k("div",Eo,[t[33]||(t[33]=k("div",null,[k("h2",{class:"page-title"},"个人数据中台"),k("p",{class:"page-sub"}," 让数据回归个人 — 各 app 数据本地加密落盘,本地 LLM 跨源分析,零云端外传。 ")],-1)),a(v,null,{default:o(()=>[a(g,{loading:e.loading.refresh,onClick:e.refresh},{icon:o(()=>[a(e.ReloadOutlined)]),default:o(()=>[t[30]||(t[30]=l(" 刷新 ",-1))]),_:1},8,["loading"]),a(S,{count:e.resolverStats.reviewQueue,offset:[0,0]},{default:o(()=>[a(g,{type:"primary",ghost:"",onClick:e.openReviewQueue},{icon:o(()=>[a(e.LinkOutlined)]),default:o(()=>[t[31]||(t[31]=l(" 待消歧 ",-1))]),_:1})]),_:1},8,["count"]),a(g,{type:"primary",ghost:"",onClick:t[0]||(t[0]=s=>e.auditOpen=!0)},{icon:o(()=>[a(e.FileSearchOutlined)]),default:o(()=>[t[32]||(t[32]=l(" 审计日志 ",-1))]),_:1})]),_:1})]),m(" Health row "),a(N,{gutter:16,style:{"margin-bottom":"16px"}},{default:o(()=>[a(U,{xs:24,sm:12,md:6},{default:o(()=>[a(x,{size:"small",title:"Vault"},{extra:o(()=>[a(O,{color:e.health?.vault?.ok?"green":"red"},{default:o(()=>[l(p(e.health?.vault?.ok?"正常":"未就绪"),1)]),_:1},8,["color"])]),default:o(()=>[k("div",Ro," schema v"+p(e.health?.vault?.schemaVersion??"?"),1),e.stats?.vault?(i(),h("div",Po," 事件 "+p(e.stats.vault.events)+" · 联系人 "+p(e.stats.vault.persons),1)):m("v-if",!0),e.stats?.vault?(i(),h("div",To," 地点 "+p(e.stats.vault.places)+" · 商品 "+p(e.stats.vault.items)+" · 主题 "+p(e.stats.vault.topics),1)):m("v-if",!0)]),_:1})]),_:1}),a(U,{xs:24,sm:12,md:6},{default:o(()=>[a(x,{size:"small",title:"本地 LLM"},{extra:o(()=>[a(O,{color:e.health?.llm?.ok?e.health.llm.isLocal?"green":"orange":"red"},{default:o(()=>[l(p(e.health?.llm?.ok?e.health.llm.isLocal?"本地":"非本地":"未就绪"),1)]),_:1},8,["color"])]),default:o(()=>[k("div",xo,p(e.health?.llm?.name||"—"),1),e.health?.llm?.ok&&!e.health.llm.isLocal?(i(),h("div",Lo," ⚠️ 非本地 — ask 会被隐私 gate 拒绝,除非显式 acceptNonLocal ")):m("v-if",!0)]),_:1})]),_:1}),a(U,{xs:24,sm:12,md:6},{default:o(()=>[a(x,{size:"small",title:"KG 索引"},{extra:o(()=>[a(O,{color:e.health?.kgSink?.ok?"green":"default"},{default:o(()=>[l(p(e.health?.kgSink?.ok?"已连接":"不可用"),1)]),_:1},8,["color"])]),default:o(()=>[t[34]||(t[34]=k("div",{class:"kv"}," events / persons → cc knowledge-graph 实体 + 关系 ",-1))]),_:1})]),_:1}),a(U,{xs:24,sm:12,md:6},{default:o(()=>[a(x,{size:"small",title:"RAG 索引"},{extra:o(()=>[a(O,{color:e.health?.ragSink?.ok?"green":"default"},{default:o(()=>[l(p(e.health?.ragSink?.ok?"已连接":"不可用"),1)]),_:1},8,["color"])]),default:o(()=>[t[35]||(t[35]=k("div",{class:"kv"},"文本 → BM25(vector 留待后续 phase)",-1))]),_:1})]),_:1})]),_:1}),m(" Ask box "),a(x,{style:{"margin-bottom":"16px"}},{title:o(()=>[a(v,null,{default:o(()=>[a(e.MessageOutlined),t[36]||(t[36]=k("span",null,"问我数据",-1))]),_:1})]),default:o(()=>[a(M,{value:e.askInput,"onUpdate:value":t[1]||(t[1]=s=>e.askInput=s),rows:2,placeholder:"例:上个月在淘宝总共花了多少?/我妈生日那周买了啥送哪儿?",onKeydown:Dn(Kt(e.ask,["exact","prevent"]),["enter"])},null,8,["value","onKeydown"]),k("div",Uo,[a(Y,{checked:e.acceptNonLocal,"onUpdate:checked":t[2]||(t[2]=s=>e.acceptNonLocal=s)},{default:o(()=>[...t[37]||(t[37]=[l("允许非本地 LLM (volcengine / anthropic 等)",-1)])]),_:1},8,["checked"]),a(g,{type:"primary",loading:e.loading.ask,disabled:!e.askInput.trim(),onClick:e.ask},{icon:o(()=>[a(e.SendOutlined)]),default:o(()=>[t[38]||(t[38]=l(" 提问 ",-1))]),_:1},8,["loading","disabled"])]),e.askError?(i(),h("div",Mo,[a(z,{type:"error","show-icon":"",message:e.askError},null,8,["message"])])):m("v-if",!0),e.askResult?(i(),h("div",Bo,[e.askResult.warning==="no-facts"?(i(),b(z,{key:0,type:"warning","show-icon":"",message:"vault 里没找到匹配的事件('no-facts')—— 先同步几个 adapter 让数据进 vault",style:{"margin-bottom":"12px"}})):e.askResult.warning==="hallucinated-citations"?(i(),b(z,{key:1,type:"warning","show-icon":"",message:`LLM 引用了 ${e.askResult.hallucinatedCitations?.length||0} 个不存在的 event id —— 模型在编造`,style:{"margin-bottom":"12px"}},null,8,["message"])):m("v-if",!0),k("div",No,p(e.askResult.answer),1),k("div",zo," 引用 "+p(e.askResult.citations?.length||0)+" 条事实 · "+p(e.askResult.facts?.length||0)+" facts 入 prompt · "+p(e.askResult.durationMs)+"ms · "+p(e.askResult.model),1),e.askResult.citations?.length?(i(),h("div",Fo,[t[39]||(t[39]=k("span",{style:{"font-size":"12px",color:"var(--text-color-secondary, #888)"}},"事件链接(点击查看明细 / PDF 解密结果):",-1)),a(v,{style:{"margin-top":"4px"},wrap:""},{default:o(()=>[(i(!0),h(V,null,re(e.askResult.citations,s=>(i(),b(O,{key:s,color:"blue",style:{cursor:"pointer"},onClick:C=>e.showEventDetail(s)},{default:o(()=>[l(p(s),1)]),_:2},1032,["onClick"]))),128))]),_:1})])):m("v-if",!0)])):m("v-if",!0)]),_:1}),m(" Phase 11 — Analysis Skills cards "),a(x,{style:{"margin-bottom":"16px"}},{title:o(()=>[a(v,null,{default:o(()=>[a(e.BulbOutlined),t[40]||(t[40]=k("span",null,"分析 skill (Phase 11)",-1))]),_:1})]),extra:o(()=>[a(O,{color:"purple"},{default:o(()=>[...t[41]||(t[41]=[l("5 内置",-1)])]),_:1})]),default:o(()=>[a(N,{gutter:[12,12]},{default:o(()=>[(i(),h(V,null,re(e.analysisSkills,s=>a(U,{xs:24,sm:12,md:8,key:s.name},{default:o(()=>[a(x,{size:"small",hoverable:"",onClick:C=>e.runSkill(s.name)},{default:o(()=>[k("div",Ho,[(i(),b(En(s.icon),{style:{"font-size":"18px",color:"#722ed1"}})),k("strong",null,p(s.label),1)]),k("div",Ko,p(s.description),1)]),_:2},1032,["onClick"])]),_:2},1024)),64))]),_:1}),e.skillResult?(i(),h("div",Wo,[a(B,{plain:"",orientation:"left"},{default:o(()=>[l(p(e.skillResult.skill)+" 结果",1)]),_:1}),a(G,{spinning:e.loading.skill},{default:o(()=>[k("pre",jo,p(JSON.stringify(e.skillResult,null,2)),1),e.skillResult.llm_commentary||e.skillResult.llm_narrative?(i(),h("div",qo,[a(z,{type:"info",message:e.skillResult.llm_commentary||e.skillResult.llm_narrative},null,8,["message"])])):m("v-if",!0)]),_:1},8,["spinning"])])):m("v-if",!0)]),_:1}),m(" Adapters "),a(x,{style:{"margin-bottom":"16px"}},{title:o(()=>[a(v,null,{default:o(()=>[a(e.AppstoreOutlined),t[42]||(t[42]=k("span",null,"Adapters",-1)),e.readinessSummary?(i(),b(O,{key:0,color:e.readinessSummary.ready===e.readinessSummary.total?"green":"orange"},{default:o(()=>[l(p(e.readinessSummary.ready)+"/"+p(e.readinessSummary.total)+" 可采集 ",1)]),_:1},8,["color"])):m("v-if",!0)]),_:1})]),extra:o(()=>[a(v,null,{default:o(()=>[a(g,{onClick:t[3]||(t[3]=s=>e.emailConfigOpen=!0)},{icon:o(()=>[a(e.MailOutlined)]),default:o(()=>[t[43]||(t[43]=l(" 添加邮箱账号 ",-1))]),_:1}),a(g,{onClick:t[4]||(t[4]=s=>e.alipayConfigOpen=!0)},{icon:o(()=>[a(e.WalletOutlined)]),default:o(()=>[t[44]||(t[44]=l(" 导入支付宝账单 ",-1))]),_:1}),a(g,{onClick:t[5]||(t[5]=s=>e.aichatWizardOpen=!0)},{icon:o(()=>[a(e.RobotOutlined)]),default:o(()=>[t[45]||(t[45]=l(" 添加 AI 对话账号 ",-1))]),_:1}),a(g,{onClick:t[6]||(t[6]=s=>e.wechatWizardOpen=!0)},{icon:o(()=>[a(e.WechatOutlined)]),default:o(()=>[t[46]||(t[46]=l(" 添加 WeChat ",-1))]),_:1}),a(g,{onClick:e.bilibiliAdbDoctor,loading:e.loading.bilibiliAdbDoctor},{default:o(()=>[...t[47]||(t[47]=[l(" 诊断 Bilibili ADB ",-1)])]),_:1},8,["loading"]),a(g,{onClick:e.bilibiliAdbSync,loading:e.loading.bilibiliAdbSync},{default:o(()=>[...t[48]||(t[48]=[l(" 通过 PC ADB 同步 Bilibili ",-1)])]),_:1},8,["loading"]),a(g,{onClick:e.weiboAdbSync,loading:e.loading.weiboAdbSync},{default:o(()=>[...t[49]||(t[49]=[l(" 通过 PC ADB 同步 Weibo ",-1)])]),_:1},8,["loading"]),a(g,{onClick:e.xhsAdbSync,loading:e.loading.xhsAdbSync},{default:o(()=>[...t[50]||(t[50]=[l(" 通过 PC ADB 同步 Xhs ",-1)])]),_:1},8,["loading"]),a(g,{onClick:e.toutiaoAdbSync,loading:e.loading.toutiaoAdbSync},{default:o(()=>[...t[51]||(t[51]=[l(" 通过 PC ADB 同步 Toutiao ",-1)])]),_:1},8,["loading"]),a(g,{onClick:e.kuaishouAdbSync,loading:e.loading.kuaishouAdbSync},{default:o(()=>[...t[52]||(t[52]=[l(" 通过 PC ADB 同步 Kuaishou ",-1)])]),_:1},8,["loading"]),a(g,{onClick:e.bridgeDoctor,loading:e.loading.bridgeDoctor},{default:o(()=>[...t[53]||(t[53]=[l(" 诊断签名 Bridges ",-1)])]),_:1},8,["loading"]),a(g,{onClick:e.douyinAdbSync,loading:e.loading.douyinAdbSync},{default:o(()=>[...t[54]||(t[54]=[l(" 通过 PC ADB 同步 Douyin ",-1)])]),_:1},8,["loading"]),a(g,{onClick:e.addMock,loading:e.loading.addMock},{default:o(()=>[...t[55]||(t[55]=[l(" 注册 MockAdapter(开发) ",-1)])]),_:1},8,["loading"]),a(g,{type:"primary",onClick:e.syncAll,loading:e.loading.syncAll,disabled:!e.adapters.length},{default:o(()=>[...t[56]||(t[56]=[l(" 同步全部 ",-1)])]),_:1},8,["loading","disabled"])]),_:1})]),default:o(()=>[e.adapters.length?(i(),b(D,{key:0,columns:e.adapterColumns,"data-source":e.adapters,pagination:!1,"row-key":s=>s.name,size:"middle"},{bodyCell:o(({column:s,record:C})=>[s.key==="readiness"?(i(),h(V,{key:0},[e.readinessOf(C.name)?(i(),h(V,{key:0},[a(H,null,{title:o(()=>[k("div",null,p(e.readinessOf(C.name).message),1),e.readinessOf(C.name).actionHint?(i(),h("div",Vo," → "+p(e.readinessOf(C.name).actionHint),1)):m("v-if",!0),e.readinessOf(C.name).lastError?(i(),h("div",Yo," 上次同步错误: "+p(e.readinessOf(C.name).lastError),1)):m("v-if",!0)]),default:o(()=>[a(O,{color:e.readinessStatusColor(e.readinessOf(C.name).status)},{default:o(()=>[l(p(e.readinessStatusLabel(e.readinessOf(C.name))),1)]),_:2},1032,["color"])]),_:2},1024),k("span",Qo,p(e.readinessCategoryLabel(e.readinessOf(C.name).category)),1),m(` inline reason for the non-ready rows so the user doesn't
4
- have to hover to learn why a source can't collect `),e.readinessOf(C.name).ready?m("v-if",!0):(i(),h("div",Go,p(e.readinessOf(C.name).message),1))],64)):(i(),b(O,{key:1,color:"default"},{default:o(()=>[...t[57]||(t[57]=[l("检测中",-1)])]),_:1}))],64)):s.key==="sensitivity"?(i(),h(V,{key:1},[a(O,{color:e.sensitivityColor(C.sensitivity)},{default:o(()=>[l(p(C.sensitivity),1)]),_:2},1032,["color"]),C.legalGate?(i(),b(O,{key:0,color:"red",style:{"margin-left":"4px"}},{default:o(()=>[...t[58]||(t[58]=[l("需法律确认",-1)])]),_:1})):m("v-if",!0)],64)):s.key==="capabilities"?(i(!0),h(V,{key:2},re(C.capabilities,w=>(i(),b(O,{key:w,style:{"margin-right":"4px"}},{default:o(()=>[l(p(w),1)]),_:2},1024))),128)):s.key==="actions"?(i(),b(v,{key:3},{default:o(()=>[a(g,{size:"small",type:"link",onClick:w=>e.openGuide(C.name)},{default:o(()=>[...t[59]||(t[59]=[l(" 如何导入 ",-1)])]),_:1},8,["onClick"]),m(` Capability/readiness-driven primary action: file picker,
5
- Cookie prompt, dedicated ADB pull, direct sync, or guide. `),a(g,{size:"small",type:"primary",title:e.collectActionLabel(e.adapterDescriptor(C.name)),loading:e.loading.sync[C.name],onClick:w=>e.oneClickCollect(C.name)},{default:o(()=>[l(p(e.collectButtonLabel(e.adapterDescriptor(C.name))),1)]),_:2},1032,["title","loading","onClick"]),m(` Per-kind include toggles (only adapters with multi-kind
6
- bridge output show this — currently just system-data-android).
7
- Popover content is a checkbox group writing into
8
- syncIncludeOptions[record.name]; changes auto-persist to
9
- localStorage so the user's privacy choice survives reloads. `),e.adapterHasIncludeToggles(C.name)?(i(),b(F,{key:0,open:e.includePopoverOpen[C.name],"onUpdate:open":w=>e.includePopoverOpen[C.name]=w,trigger:"click",placement:"left",title:`${C.name} 采集范围`},{content:o(()=>[k("div",Xo,[(i(!0),h(V,null,re(e.INCLUDE_KIND_META[C.name],w=>(i(),h("div",{key:w.key,style:{margin:"6px 0"}},[a(Y,{checked:e.syncIncludeOptions[C.name][w.key]!==!1,onChange:A=>e.onIncludeKindToggle(C.name,w.key,A)},{default:o(()=>[l(p(w.label)+" ",1),k("span",Jo,p(w.hint),1),w.sensitive?(i(),b(O,{key:0,color:"orange",size:"small",style:{"margin-left":"4px"}},{default:o(()=>[...t[60]||(t[60]=[l("敏感",-1)])]),_:1})):m("v-if",!0)]),_:2},1032,["checked","onChange"])]))),128)),t[61]||(t[61]=k("div",{style:{"margin-top":"8px","font-size":"11px",color:"#999"}}," 取消勾选的数据本次同步不会拉取入库 ",-1))])]),default:o(()=>[a(g,{size:"small",title:"选择采集范围"},{default:o(()=>[...t[62]||(t[62]=[l("⚙",-1)])]),_:1})]),_:2},1032,["open","onUpdate:open","title"])):m("v-if",!0),a(ie,{title:`从注册表移除 ${C.name}?(vault 数据不会删除)`,onConfirm:w=>e.unregisterAdapter(C.name)},{default:o(()=>[a(g,{size:"small",danger:""},{default:o(()=>[...t[63]||(t[63]=[l("移除",-1)])]),_:1})]),_:1},8,["title","onConfirm"])]),_:2},1024)):m("v-if",!0)]),_:1},8,["data-source","row-key"])):(i(),b($,{key:1,description:"无已注册 adapter — 点上方按钮注册 MockAdapter 看效果"})),e.syncProgress.active?(i(),h("div",Zo,[a(x,{size:"small",bordered:!0},{default:o(()=>[k("div",$o,[t[64]||(t[64]=k("strong",null,"同步进行中",-1)),l(" · "+p(e.syncProgress.adapter)+" · "+p(e.syncProgress.phase||"...")+" ",1),e.syncProgress.attempt&&e.syncProgress.attempt>1?(i(),h("span",ea," (重试 #"+p(e.syncProgress.attempt)+") ",1)):m("v-if",!0)]),e.syncProgress.total>0?(i(),b(de,{key:0,percent:Math.round(e.syncProgress.current/e.syncProgress.total*100),status:e.syncProgress.errorMessage?"exception":"active",size:"small"},null,8,["percent","status"])):(i(),b(de,{key:1,percent:0,status:"active",size:"small"})),e.syncProgress.mailbox?(i(),h("div",ta," 邮箱 "+p(e.syncProgress.mailbox)+" · "+p(e.syncProgress.current)+" / "+p(e.syncProgress.total),1)):m("v-if",!0),e.syncProgress.errorMessage?(i(),h("div",na,p(e.syncProgress.errorMessage),1)):m("v-if",!0)]),_:1})])):m("v-if",!0),e.lastSync?(i(),h("div",oa,[a(z,{type:e.syncAlertType(e.lastSync),"show-icon":"",message:e.syncAlertMessage(e.lastSync),description:e.syncSummary(e.lastSync)},null,8,["type","message","description"])])):m("v-if",!0)]),_:1}),m(" Email config drawer (Phase 5.6) "),a(e.PdhOAuthCollectorDrawer,{open:e.oauthCollectorOpen,"onUpdate:open":t[7]||(t[7]=s=>e.oauthCollectorOpen=s),source:e.oauthCollectorTarget,onCollect:e.collectViaOAuth},null,8,["open","source"]),a(K,{open:e.emailConfigOpen,"onUpdate:open":t[17]||(t[17]=s=>e.emailConfigOpen=s),title:"添加邮箱账号",placement:"right",width:"560","destroy-on-close":!0,onClose:e.resetEmailForm},{footer:o(()=>[a(v,null,{default:o(()=>[a(g,{onClick:t[16]||(t[16]=s=>e.emailConfigOpen=!1)},{default:o(()=>[...t[74]||(t[74]=[l("取消",-1)])]),_:1}),a(g,{loading:e.loading.testEmail,disabled:!e.emailFormValid,onClick:e.testEmailAuth},{default:o(()=>[...t[75]||(t[75]=[l(" 测试连接 ",-1)])]),_:1},8,["loading","disabled"]),a(g,{type:"primary",loading:e.loading.saveEmail,disabled:!e.emailFormValid||!e.emailTestResult?.ok,onClick:e.saveEmail},{default:o(()=>[...t[76]||(t[76]=[l(" 保存并注册 ",-1)])]),_:1},8,["loading","disabled"])]),_:1})]),default:o(()=>[a(z,{message:"数据回归个人 — 凭证落本地加密文件(与 vault 主密钥同目录),同步动作 100% 本地。",type:"info","show-icon":"",style:{"margin-bottom":"16px"}}),a(E,{layout:"vertical",model:e.emailForm},{default:o(()=>[a(X,{label:"邮箱服务商",required:""},{default:o(()=>[a(be,{value:e.emailForm.provider,"onUpdate:value":t[8]||(t[8]=s=>e.emailForm.provider=s),placeholder:"选择服务商"},{default:o(()=>[a(oe,{value:"qq"},{default:o(()=>[...t[65]||(t[65]=[l("QQ 邮箱 (imap.qq.com)",-1)])]),_:1}),a(oe,{value:"163"},{default:o(()=>[...t[66]||(t[66]=[l("网易邮箱 163/126",-1)])]),_:1}),a(oe,{value:"189"},{default:o(()=>[...t[67]||(t[67]=[l("189 邮箱",-1)])]),_:1}),a(oe,{value:"outlook"},{default:o(()=>[...t[68]||(t[68]=[l("Outlook / Hotmail",-1)])]),_:1}),a(oe,{value:"gmail"},{default:o(()=>[...t[69]||(t[69]=[l("Gmail",-1)])]),_:1}),a(oe,{value:"custom"},{default:o(()=>[...t[70]||(t[70]=[l("自定义 IMAP",-1)])]),_:1})]),_:1},8,["value"])]),_:1}),a(X,{label:"邮箱地址",required:""},{default:o(()=>[a(ee,{value:e.emailForm.email,"onUpdate:value":t[9]||(t[9]=s=>e.emailForm.email=s),placeholder:"you@qq.com",autocomplete:"off"},null,8,["value"])]),_:1}),a(X,{required:""},{label:o(()=>[a(v,null,{default:o(()=>[t[71]||(t[71]=k("span",null,"授权码(非登录密码)",-1)),a(H,{title:e.providerAuthHint(e.emailForm.provider)},{default:o(()=>[a(e.InfoCircleOutlined,{style:{color:"#888"}})]),_:1},8,["title"])]),_:1})]),default:o(()=>[a(le,{value:e.emailForm.authCode,"onUpdate:value":t[10]||(t[10]=s=>e.emailForm.authCode=s),placeholder:"例:QQ 邮箱 设置 → 账户 → 开启 IMAP/SMTP → 生成的授权码",autocomplete:"off"},null,8,["value"])]),_:1}),e.emailForm.provider==="custom"?(i(),b(X,{key:0,label:"IMAP host"},{default:o(()=>[a(ee,{value:e.emailForm.host,"onUpdate:value":t[11]||(t[11]=s=>e.emailForm.host=s),placeholder:"mail.example.com"},null,8,["value"])]),_:1})):m("v-if",!0),e.emailForm.provider==="custom"?(i(),b(X,{key:1,label:"端口"},{default:o(()=>[a(fe,{value:e.emailForm.port,"onUpdate:value":t[12]||(t[12]=s=>e.emailForm.port=s),min:1,max:65535,"default-value":993},null,8,["value"])]),_:1})):m("v-if",!0),a(B,{orientation:"left",plain:""},{default:o(()=>[...t[72]||(t[72]=[l("PDF 账单解密提示(可选)",-1)])]),_:1}),t[73]||(t[73]=k("p",{class:"hint"}," 银行 PDF 月结大多加密;提供几个常用候选项让 Phase 5.5 自动解锁: ",-1)),a(X,{label:"身份证后 6 位"},{default:o(()=>[a(ee,{value:e.emailForm.pdfPasswordHints.idCardLast6,"onUpdate:value":t[13]||(t[13]=s=>e.emailForm.pdfPasswordHints.idCardLast6=s),placeholder:"123456",autocomplete:"off"},null,8,["value"])]),_:1}),a(X,{label:"手机后 6 位"},{default:o(()=>[a(ee,{value:e.emailForm.pdfPasswordHints.phoneLast6,"onUpdate:value":t[14]||(t[14]=s=>e.emailForm.pdfPasswordHints.phoneLast6=s),placeholder:"123456",autocomplete:"off"},null,8,["value"])]),_:1}),a(X,{label:"信用卡尾 6 位"},{default:o(()=>[a(ee,{value:e.emailForm.pdfPasswordHints.cardLast6,"onUpdate:value":t[15]||(t[15]=s=>e.emailForm.pdfPasswordHints.cardLast6=s),placeholder:"123456",autocomplete:"off"},null,8,["value"])]),_:1}),e.emailTestResult?(i(),h("div",aa,[a(z,{type:e.emailTestResult.ok?"success":"error","show-icon":"",message:e.emailTestResult.ok?"凭证有效 — 可以保存":`认证失败: ${e.emailTestResult.reason||e.emailTestResult.error}`},null,8,["type","message"])])):m("v-if",!0)]),_:1},8,["model"])]),_:1},8,["open"]),m(" Event detail drawer (Phase 5.6) "),a(K,{open:e.eventDetailOpen,"onUpdate:open":t[18]||(t[18]=s=>e.eventDetailOpen=s),title:e.eventDetail?`事件 ${e.eventDetail.event.id}`:"加载中...",placement:"right",width:"640","destroy-on-close":!0},{default:o(()=>[e.eventDetail?(i(),h(V,{key:0},[a(Ue,{column:1,size:"small",bordered:""},{default:o(()=>[a(Z,{label:"类型"},{default:o(()=>[l(p(e.eventDetail.event.subtype),1)]),_:1}),a(Z,{label:"发生于"},{default:o(()=>[l(p(new Date(e.eventDetail.event.occurredAt).toLocaleString()),1)]),_:1}),a(Z,{label:"actor"},{default:o(()=>[l(p(e.eventDetail.event.actor),1)]),_:1}),e.eventDetail.event.content?.title?(i(),b(Z,{key:0,label:"标题"},{default:o(()=>[l(p(e.eventDetail.event.content.title),1)]),_:1})):m("v-if",!0),e.eventDetail.event.source?.adapter?(i(),b(Z,{key:1,label:"来源 adapter"},{default:o(()=>[l(p(e.eventDetail.event.source.adapter)+" @ v"+p(e.eventDetail.event.source.adapterVersion),1)]),_:1})):m("v-if",!0)]),_:1}),e.eventDetail.classification?(i(),b(B,{key:0,orientation:"left",plain:""},{default:o(()=>[...t[77]||(t[77]=[l("分类",-1)])]),_:1})):m("v-if",!0),e.eventDetail.classification?(i(),h("div",ra,[a(O,{color:"blue"},{default:o(()=>[l(p(e.eventDetail.classification.category),1)]),_:1}),a(O,null,{default:o(()=>[l(p(e.eventDetail.classification.layer),1)]),_:1}),k("span",ia,"置信 "+p(Math.round((e.eventDetail.classification.confidence||0)*100))+"%",1)])):m("v-if",!0),e.eventDetail.extraction?(i(),b(B,{key:2,orientation:"left",plain:""},{default:o(()=>[l("结构化字段("+p(e.eventDetail.extraction.template)+")",1)]),_:1})):m("v-if",!0),e.eventDetail.extraction?(i(),h("pre",la,p(JSON.stringify(e.eventDetail.extraction.fields,null,2)),1)):m("v-if",!0),e.eventDetail.extraction?.pdfExtraction?(i(),b(B,{key:4,orientation:"left",plain:""},{default:o(()=>[...t[78]||(t[78]=[l("PDF 解密 / 解析",-1)])]),_:1})):m("v-if",!0),e.eventDetail.extraction?.pdfExtraction?(i(),b(Se,{key:5,"data-source":e.eventDetail.extraction.pdfExtraction,size:"small"},{renderItem:o(({item:s})=>[a(we,null,{default:o(()=>[a(Ce,{title:s.filename},{description:o(()=>[k("div",null,[a(O,{color:s.decrypted?"green":"red"},{default:o(()=>[l(p(s.decrypted?"已解密":"解密失败"),1)]),_:2},1032,["color"]),k("span",sa,"尝试 "+p(s.attempted)+" 次",1),s.transactionsExtracted!=null?(i(),h("span",da," · 提取 "+p(s.transactionsExtracted)+" 条交易 ",1)):m("v-if",!0)]),s.error?(i(),h("div",ca,p(s.error),1)):m("v-if",!0)]),_:2},1032,["title"])]),_:2},1024)]),_:1},8,["data-source"])):m("v-if",!0),e.eventDetail.extraction?.fields?.transactions?.length?(i(),h(V,{key:6},[a(B,{orientation:"left",plain:""},{default:o(()=>[...t[79]||(t[79]=[l("交易明细",-1)])]),_:1}),a(D,{columns:e.transactionColumns,"data-source":e.eventDetail.extraction.fields.transactions,pagination:{pageSize:10,size:"small"},"row-key":(s,C)=>C,size:"small"},{bodyCell:o(({column:s,record:C})=>[s.key==="occurredAt"?(i(),h(V,{key:0},[l(p(new Date(C.occurredAtMs).toLocaleDateString()),1)],64)):s.key==="amount"?(i(),h("span",{key:1,class:Ht(C.amount.direction==="in"?"amount-in":"amount-out")},p(C.amount.direction==="in"?"+":"-")+p(C.amount.value.toFixed(2))+" "+p(C.amount.currency),3)):m("v-if",!0)]),_:1},8,["data-source","row-key"])],64)):m("v-if",!0)],64)):(i(),b($,{key:1,description:"无事件数据"}))]),_:1},8,["open","title"]),m(" Alipay import drawer (Phase 6) "),a(K,{open:e.alipayConfigOpen,"onUpdate:open":t[23]||(t[23]=s=>e.alipayConfigOpen=s),title:"导入支付宝账单",placement:"right",width:"560","destroy-on-close":!0,onClose:e.resetAlipayForm},{footer:o(()=>[a(v,null,{default:o(()=>[a(g,{onClick:t[22]||(t[22]=s=>e.alipayConfigOpen=!1)},{default:o(()=>[...t[85]||(t[85]=[l("关闭",-1)])]),_:1}),a(g,{type:"primary",loading:e.loading.importAlipay,disabled:!e.alipayFormValid,onClick:e.importAlipay},{default:o(()=>[...t[86]||(t[86]=[l(" 注册账户 + 导入 ",-1)])]),_:1},8,["loading","disabled"])]),_:1})]),default:o(()=>[a(z,{message:"支付宝官方导出 CSV — 服务器侧全量、稳定无风控。3 分钟拿到 12 个月流水。",type:"info","show-icon":"",style:{"margin-bottom":"16px"}}),a(Be,{bordered:!1,style:{"margin-bottom":"12px"}},{default:o(()=>[a(Me,{header:"如何导出账单(首次必看)"},{default:o(()=>[...t[80]||(t[80]=[k("ol",{style:{"padding-left":"18px","font-size":"13px"}},[k("li",null,"支付宝 app → 我的 → 账单 → 右上角 ⋯"),k("li",null,'点 "开具交易流水证明"'),k("li",null,"选月份范围(最长 12 个月)"),k("li",null,'用途选 "个人对账"'),k("li",null,"发送到你的绑定邮箱"),k("li",null,[l("从邮箱下载 "),k("code",null,"alipay_record_*.zip")]),k("li",null,"解压密码 = 你的身份证后 6 位")],-1)])]),_:1})]),_:1}),a(E,{layout:"vertical",model:e.alipayForm},{default:o(()=>[a(X,{label:"支付宝绑定邮箱(账户标识)",required:""},{default:o(()=>[a(ee,{value:e.alipayForm.email,"onUpdate:value":t[19]||(t[19]=s=>e.alipayForm.email=s),placeholder:"alipay-bound@example.com",autocomplete:"off"},null,8,["value"])]),_:1}),a(X,null,{label:o(()=>[a(v,null,{default:o(()=>[t[81]||(t[81]=k("span",null,"ZIP 密码(身份证后 6 位)",-1)),a(H,{title:"支付宝 ZIP 默认密码 = 身份证号后 6 位。也支持自定义密码。"},{default:o(()=>[a(e.InfoCircleOutlined,{style:{color:"#888"}})]),_:1})]),_:1})]),default:o(()=>[a(le,{value:e.alipayForm.zipPassword,"onUpdate:value":t[20]||(t[20]=s=>e.alipayForm.zipPassword=s),placeholder:"例:123456",autocomplete:"off"},null,8,["value"]),t[82]||(t[82]=k("div",{class:"hint",style:{"margin-top":"4px"}}," 空白则解析时再问,或导入的 ZIP 未加密。 ",-1))]),_:1}),a(B,{orientation:"left",plain:""},{default:o(()=>[...t[83]||(t[83]=[l("选择文件",-1)])]),_:1}),a(X,{label:"ZIP 或 CSV 文件路径"},{default:o(()=>[a(ee,{value:e.alipayForm.filePath,"onUpdate:value":t[21]||(t[21]=s=>e.alipayForm.filePath=s),placeholder:"C:\\\\Users\\\\you\\\\Downloads\\\\alipay_record_xxx.zip","allow-clear":""},null,8,["value"]),t[84]||(t[84]=k("div",{class:"hint",style:{"margin-top":"4px"}}," 桌面版可通过 Electron 文件选择器自动填充;web-shell 复制完整路径。 ",-1))]),_:1}),e.alipayResult?(i(),h("div",ua,[a(z,{type:e.alipayResult.status==="ok"?"success":"error","show-icon":"",message:e.alipayResult.status==="ok"?`导入成功 — ${e.alipayResult.entityCounts?.events||0} 笔交易`:`导入失败: ${e.alipayResult.error||e.alipayResult.status}`,description:e.alipayResult.status==="ok"?`${e.alipayResult.entityCounts?.persons||0} 个交易对方 · ${e.alipayResult.kgTripleCount||0} KG triples · ${e.alipayResult.durationMs||0}ms`:null},null,8,["type","message","description"])])):m("v-if",!0)]),_:1},8,["model"])]),_:1},8,["open"]),m(" Phase 8.7 — Review queue drawer (待消歧) "),a(K,{open:e.reviewQueueOpen,"onUpdate:open":t[24]||(t[24]=s=>e.reviewQueueOpen=s),title:"待消歧(EntityResolver 模糊判定)",placement:"right",width:"640","destroy-on-close":!0},{default:o(()=>[e.reviewRows.length===0&&!e.loading.reviewQueue?(i(),b(z,{key:0,type:"success","show-icon":"",message:"无待消歧 pair — 所有跨源 Person 已确定。",style:{"margin-bottom":"12px"}})):m("v-if",!0),k("div",fa,[a(v,null,{default:o(()=>[a(g,{loading:e.loading.reviewQueue,onClick:e.loadReviewQueue},{icon:o(()=>[a(e.ReloadOutlined)]),default:o(()=>[t[87]||(t[87]=l(" 刷新 ",-1))]),_:1},8,["loading"]),a(g,{loading:e.loading.resolverDrain,onClick:e.drainResolver},{default:o(()=>[...t[88]||(t[88]=[l(" 手动 drain 队列 ",-1)])]),_:1},8,["loading"]),k("span",pa," queue: "+p(e.resolverStats.queue?.pending||0)+" pending · "+p(e.resolverStats.mergeGroups||0)+" groups ",1)]),_:1})]),a(Se,{"data-source":e.reviewRows,pagination:{pageSize:5,size:"small"},size:"small"},{renderItem:o(({item:s})=>[a(we,null,{default:o(()=>[a(x,{size:"small",style:{width:"100%"}},{default:o(()=>[k("div",ma,[k("strong",null,"Pair #"+p(s.id),1),s.embed_sim?(i(),b(O,{key:0,color:"blue",style:{"margin-left":"8px"}},{default:o(()=>[l(" sim "+p(Number(s.embed_sim).toFixed(2)),1)]),_:2},1024)):m("v-if",!0),s.llm_verdict?(i(),b(O,{key:1,color:s.llm_verdict==="yes"?"green":s.llm_verdict==="no"?"red":"orange",style:{"margin-left":"4px"}},{default:o(()=>[l(" LLM: "+p(s.llm_verdict),1)]),_:2},1032,["color"])):m("v-if",!0)]),k("div",ya," A: "+p(s.a_person_id),1),k("div",ga,"B: "+p(s.b_person_id),1),s.llm_reason?(i(),h("div",va," LLM 理由: "+p(s.llm_reason),1)):m("v-if",!0),a(v,{style:{"margin-top":"8px"}},{default:o(()=>[a(g,{size:"small",type:"primary",onClick:C=>e.decideReview(s.id,"same")},{default:o(()=>[...t[89]||(t[89]=[l("同一人",-1)])]),_:1},8,["onClick"]),a(g,{size:"small",danger:"",onClick:C=>e.decideReview(s.id,"different")},{default:o(()=>[...t[90]||(t[90]=[l("不同人",-1)])]),_:1},8,["onClick"]),a(g,{size:"small",onClick:C=>e.decideReview(s.id,"skip")},{default:o(()=>[...t[91]||(t[91]=[l("跳过",-1)])]),_:1},8,["onClick"])]),_:2},1024)]),_:2},1024)]),_:2},1024)]),_:1},8,["data-source"])]),_:1},8,["open"]),m(" Audit drawer "),a(K,{open:e.auditOpen,"onUpdate:open":t[25]||(t[25]=s=>e.auditOpen=s),title:"审计日志(数据 lineage)",placement:"right",width:"600",onAfterOpenChange:e.loadAudit},{default:o(()=>[a(D,{columns:e.auditColumns,"data-source":e.auditRows,pagination:{pageSize:20,size:"small"},"row-key":s=>s.id,size:"small"},{bodyCell:o(({column:s,record:C})=>[s.key==="at"?(i(),h(V,{key:0},[l(p(new Date(C.at).toLocaleString()),1)],64)):s.key==="details"?(i(),h("code",ka,p(C.details||"—"),1)):m("v-if",!0)]),_:1},8,["data-source","row-key"])]),_:1},8,["open"]),m(" Phase 10.3 — AIChat WebView 鉴权向导 "),a(e.AIChatWizard,{open:e.aichatWizardOpen,"onUpdate:open":t[26]||(t[26]=s=>e.aichatWizardOpen=s),"existing-accounts":e.aichatAccounts,onRegistered:e.onAichatRegistered},null,8,["open","existing-accounts"]),m(" Phase 12.6.10 — WeChat env-probe + register 向导 "),a(e.WechatWizard,{open:e.wechatWizardOpen,"onUpdate:open":t[27]||(t[27]=s=>e.wechatWizardOpen=s),onRegistered:e.onWechatRegistered},null,8,["open"]),m(" 如何导入 — per-source onboarding guide "),a(K,{open:e.guideDrawerOpen,"onUpdate:open":t[29]||(t[29]=s=>e.guideDrawerOpen=s),title:e.guideTarget&&e.guideTarget.guide?`如何导入:${e.guideTarget.guide.displayName}`:"如何导入",width:"520",placement:"right"},{default:o(()=>[e.guideTarget&&e.guideTarget.guide?(i(),h(V,{key:0},[a(v,{style:{"margin-bottom":"12px"},wrap:""},{default:o(()=>[a(O,{color:e.readinessStatusColor(e.guideTarget.status)},{default:o(()=>[l(p(e.readinessStatusLabel(e.guideTarget)),1)]),_:1},8,["color"]),a(O,null,{default:o(()=>[l(p(e.readinessCategoryLabel(e.guideTarget.guide.category)),1)]),_:1})]),_:1}),a(z,{type:"info",message:e.guideTarget.guide.summary,"show-icon":"",style:{"margin-bottom":"8px"}},null,8,["message"]),!e.guideTarget.ready&&e.guideTarget.message?(i(),b(z,{key:0,type:"warning",message:`当前状态:${e.guideTarget.message}`,"show-icon":"",style:{"margin-bottom":"16px"}},null,8,["message"])):m("v-if",!0),(i(!0),h(V,null,re(e.guideTarget.guide.methods,(s,C)=>(i(),h("div",{key:C,style:{"margin-bottom":"20px"}},[k("div",_a,[l(p(s.label)+" ",1),s.recommended?(i(),b(O,{key:0,color:"green",style:{"margin-left":"6px"}},{default:o(()=>[...t[92]||(t[92]=[l("推荐",-1)])]),_:1})):m("v-if",!0)]),k("ol",ba,[(i(!0),h(V,null,re(s.steps,(w,A)=>(i(),h("li",{key:A},p(w),1))),128))]),s.note?(i(),h("div",ha,p(s.note),1)):m("v-if",!0)]))),128)),a(B,{style:{margin:"12px 0"}}),a(v,null,{default:o(()=>[e.collectMode(e.guideTarget)!=="setup"?(i(),b(g,{key:0,type:"primary",size:"large",loading:e.loading.sync[e.guideTarget.name],onClick:t[28]||(t[28]=s=>e.oneClickCollect(e.guideTarget.name))},{default:o(()=>[l(p(e.collectActionLabel(e.guideTarget)),1)]),_:1},8,["loading"])):(i(),b(g,{key:1,type:"primary",size:"large",loading:e.loading.refresh,onClick:e.recheckGuideTarget},{default:o(()=>[...t[93]||(t[93]=[l(" 重新检测 ",-1)])]),_:1},8,["loading"])),k("span",Aa,p(e.collectActionDescription(e.guideTarget)),1)]),_:1})],64)):(i(),b($,{key:1,description:"该数据源暂无导入指引"}))]),_:1},8,["open","title"])])}const Ea=Le(Io,[["render",Oa],["__scopeId","data-v-92d13942"],["__file","/tmp/cc-web-panel-j3HnbJ/repo/packages/web-panel/src/views/PersonalDataHub.vue"]]);export{Ea as default};
@@ -1 +0,0 @@
1
- .page-title[data-v-ee23c547]{margin:0;color:var(--text-primary);font-size:22px;font-weight:600}.page-sub[data-v-ee23c547]{margin:4px 0 0;color:var(--text-secondary);font-size:13px}.pipeline-tabs[data-v-ee23c547] .ant-tabs-nav{margin-bottom:16px}.filter-bar[data-v-ee23c547]{display:flex;align-items:center;gap:12px;margin-bottom:12px;flex-wrap:wrap}.stage-flow[data-v-ee23c547]{display:flex;align-items:center;gap:6px;flex-wrap:wrap}.stage-pill[data-v-ee23c547]{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-ee23c547]{background:#faad1426;color:#faad14;border-color:#faad144d}.stage-idx[data-v-ee23c547]{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-ee23c547]{background:#faad14}.stage-arrow[data-v-ee23c547]{color:var(--text-muted);font-size:11px}.gate-icon[data-v-ee23c547]{font-size:11px}.tpl-stages[data-v-ee23c547]{display:flex;gap:4px;flex-wrap:wrap}