chainlesschain 0.162.29 → 0.162.31
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.
- package/package.json +2 -2
- package/src/assets/web-panel/assets/AIOps-BqWP6FKu.js +1 -0
- package/src/assets/web-panel/assets/AIOps-CSpp7iGY.css +1 -0
- package/src/assets/web-panel/assets/{ActionButton-wRdLFzBQ.js → ActionButton-CXwMgOvX.js} +1 -1
- package/src/assets/web-panel/assets/Analytics-DAebZ4IY.js +3 -0
- package/src/assets/web-panel/assets/Analytics-DJcHjy5J.css +1 -0
- package/src/assets/web-panel/assets/AppLayout-CYsqYoME.js +9 -0
- package/src/assets/web-panel/assets/AppLayout-VlanTjPw.css +1 -0
- package/src/assets/web-panel/assets/Audit-BbTtX1Nf.js +1 -0
- package/src/assets/web-panel/assets/Audit-D8oxP0wr.css +1 -0
- package/src/assets/web-panel/assets/Backup-DgqY2Eb-.js +1 -0
- package/src/assets/web-panel/assets/Backup-Wi9CaP3d.css +1 -0
- package/src/assets/web-panel/assets/BaseInput-Cq2ZuSoO.js +1 -0
- package/src/assets/web-panel/assets/Chat-D2kqpUyO.js +8 -0
- package/src/assets/web-panel/assets/Chat-DDh58PCf.css +1 -0
- package/src/assets/web-panel/assets/ChatBubbleRenderer-C-svYkrC.js +1 -0
- package/src/assets/web-panel/assets/ChatBubbleRenderer-gy5SDGw2.css +1 -0
- package/src/assets/web-panel/assets/{Checkbox-DoGqmF9g.js → Checkbox-_9swHpyc.js} +1 -1
- package/src/assets/web-panel/assets/Codegen-BB08p1fn.css +1 -0
- package/src/assets/web-panel/assets/Codegen-Cr9YbCPl.js +1 -0
- package/src/assets/web-panel/assets/{Col-C-9-jORK.js → Col--wdpCMxx.js} +1 -1
- package/src/assets/web-panel/assets/Community-Cbq1nrpo.css +1 -0
- package/src/assets/web-panel/assets/Community-DuFcVnLu.js +1 -0
- package/src/assets/web-panel/assets/{Compact-CemvxU3z.js → Compact-1yzYeT04.js} +1 -1
- package/src/assets/web-panel/assets/Compliance-Dq3aU9Df.js +1 -0
- package/src/assets/web-panel/assets/Compliance-NoXr2Vof.css +1 -0
- package/src/assets/web-panel/assets/Cowork-BlXJRu6L.css +1 -0
- package/src/assets/web-panel/assets/Cowork-CrWcnIg8.js +6 -0
- package/src/assets/web-panel/assets/Cron-Bh6fKZ0h.js +2 -0
- package/src/assets/web-panel/assets/Crosschain-8ofPaWVW.js +1 -0
- package/src/assets/web-panel/assets/Crosschain-CgRAecoR.css +1 -0
- package/src/assets/web-panel/assets/DID-D3EiYm3w.js +2 -0
- package/src/assets/web-panel/assets/DID-DVsYcgvs.css +1 -0
- package/src/assets/web-panel/assets/Dashboard-BFjEdFne.js +3 -0
- package/src/assets/web-panel/assets/Dashboard-CAPSdFR4.css +1 -0
- package/src/assets/web-panel/assets/Dropdown-pYVPcP6O.js +1 -0
- package/src/assets/web-panel/assets/EmailListRenderer-DTPZPx_S.css +1 -0
- package/src/assets/web-panel/assets/EmailListRenderer-zBPodwJ1.js +1 -0
- package/src/assets/web-panel/assets/FamilyGuardDashboard-CyQTW6PW.js +1 -0
- package/src/assets/web-panel/assets/FamilyGuardDashboard-nd3idUVb.css +1 -0
- package/src/assets/web-panel/assets/Federation-Ctaq3zYq.js +1 -0
- package/src/assets/web-panel/assets/Federation-fGN6iMX_.css +1 -0
- package/src/assets/web-panel/assets/FormItemContext-CWYJCLq1.js +2 -0
- package/src/assets/web-panel/assets/GenericCardRenderer-B1g6t9R9.js +1 -0
- package/src/assets/web-panel/assets/GenericCardRenderer-o85VDYQS.css +1 -0
- package/src/assets/web-panel/assets/{Git-DPuaGtg7.css → Git-BdHhxBWR.css} +1 -1
- package/src/assets/web-panel/assets/Git-DH-v8iwd.js +2 -0
- package/src/assets/web-panel/assets/Governance-DtCS4NDm.css +1 -0
- package/src/assets/web-panel/assets/Governance-jZxXvOs5.js +1 -0
- package/src/assets/web-panel/assets/Inference-D07LRghn.js +1 -0
- package/src/assets/web-panel/assets/Inference-t-w0NgIS.css +1 -0
- package/src/assets/web-panel/assets/KnowledgeGraph-4NU1S2Xm.css +1 -0
- package/src/assets/web-panel/assets/KnowledgeGraph-DnGtRZhx.js +1 -0
- package/src/assets/web-panel/assets/Logs-D2pM9C4W.js +2 -0
- package/src/assets/web-panel/assets/Logs-DQbCaYhL.css +1 -0
- package/src/assets/web-panel/assets/Marketplace-Bvo5cuGa.css +1 -0
- package/src/assets/web-panel/assets/Marketplace-UyIO7C7r.js +1 -0
- package/src/assets/web-panel/assets/McpTools-534Q95Mx.css +1 -0
- package/src/assets/web-panel/assets/McpTools-Bf1gvZPf.js +7 -0
- package/src/assets/web-panel/assets/Memory-C1bWj4RN.js +2 -0
- package/src/assets/web-panel/assets/Memory-CleW_R6V.css +1 -0
- package/src/assets/web-panel/assets/MobileBridge-C_Ot1H_a.js +3 -0
- package/src/assets/web-panel/assets/MobileBridge-zJpPuf4E.css +1 -0
- package/src/assets/web-panel/assets/MobileProjects-BD4alw6-.css +1 -0
- package/src/assets/web-panel/assets/MobileProjects-zr-PpsT_.js +1 -0
- package/src/assets/web-panel/assets/Mtc-CXZGO9Sh.css +1 -0
- package/src/assets/web-panel/assets/Mtc-CnzFUz5J.js +6 -0
- package/src/assets/web-panel/assets/MtcAudit-C1JM8esp.css +1 -0
- package/src/assets/web-panel/assets/MtcAudit-CAAh99wz.js +19 -0
- package/src/assets/web-panel/assets/Multisig-BryR2Jpr.css +1 -0
- package/src/assets/web-panel/assets/Multisig-D6IAg6HE.js +13 -0
- package/src/assets/web-panel/assets/NLProgramming-BFMarxb0.js +1 -0
- package/src/assets/web-panel/assets/NLProgramming-DGDHq6Z9.css +1 -0
- package/src/assets/web-panel/assets/Notes-BKKmMtqV.css +1 -0
- package/src/assets/web-panel/assets/Notes-BRp9ro3t.js +7 -0
- package/src/assets/web-panel/assets/NotificationSettings-C0Au3Cxb.js +1 -0
- package/src/assets/web-panel/assets/NotificationSettings-CG3Kfuef.css +1 -0
- package/src/assets/web-panel/assets/OrderTableRenderer-CfrDjSHT.css +1 -0
- package/src/assets/web-panel/assets/OrderTableRenderer-ISp6btRY.js +1 -0
- package/src/assets/web-panel/assets/Organization-DYoxLBRX.js +4 -0
- package/src/assets/web-panel/assets/Organization-LVvqwG0D.css +1 -0
- package/src/assets/web-panel/assets/{Overflow-BFxt7NlK.js → Overflow-rO8JJWGJ.js} +1 -1
- package/src/assets/web-panel/assets/{OverrideContext-C_4H9tGA.js → OverrideContext-C2r4vyBb.js} +1 -1
- package/src/assets/web-panel/assets/P2P-DJleeXIK.js +2 -0
- package/src/assets/web-panel/assets/P2P-DcFvP7F-.css +1 -0
- package/src/assets/web-panel/assets/PdhVaultBrowser-DM5qghFp.js +7 -0
- package/src/assets/web-panel/assets/PdhVaultBrowser-DZZrUOr1.css +1 -0
- package/src/assets/web-panel/assets/Permissions-D5v4Beya.js +4 -0
- package/src/assets/web-panel/assets/Permissions-DsPE_IQy.css +1 -0
- package/src/assets/web-panel/assets/PersonalDataHub-BhpRlh9D.css +1 -0
- package/src/assets/web-panel/assets/PersonalDataHub-c2ZTX0Pv.js +9 -0
- package/src/assets/web-panel/assets/Pipeline-BItr5CyP.css +1 -0
- package/src/assets/web-panel/assets/Pipeline-Crrkyhpz.js +1 -0
- package/src/assets/web-panel/assets/Privacy-DZVyrJKa.js +1 -0
- package/src/assets/web-panel/assets/Privacy-F_ENsxZk.css +1 -0
- package/src/assets/web-panel/assets/ProjectInit-B86LEzDL.css +1 -0
- package/src/assets/web-panel/assets/ProjectInit-DKg7J0gz.js +2 -0
- package/src/assets/web-panel/assets/ProjectSettings-3ndmTvVH.js +2 -0
- package/src/assets/web-panel/assets/ProjectSettings-DK7KA_iX.css +1 -0
- package/src/assets/web-panel/assets/Projects-CmJeUDBW.css +1 -0
- package/src/assets/web-panel/assets/Projects-ll5wnj2L.js +1 -0
- package/src/assets/web-panel/assets/Providers-BeqBVMhB.js +1 -0
- package/src/assets/web-panel/assets/Providers-C6q_fvea.css +1 -0
- package/src/assets/web-panel/assets/QuickAsk-DKAAxzuA.js +1 -0
- package/src/assets/web-panel/assets/Recommend-Byu7IGei.js +1 -0
- package/src/assets/web-panel/assets/Recommend-D_bf91K6.css +1 -0
- package/src/assets/web-panel/assets/Reputation-BKhWAmCu.js +1 -0
- package/src/assets/web-panel/assets/Reputation-DiOsOleI.css +1 -0
- package/src/assets/web-panel/assets/Row-BFtn11O6.js +1 -0
- package/src/assets/web-panel/assets/RssFeed-CjcbkyUb.css +1 -0
- package/src/assets/web-panel/assets/RssFeed-D5a0PT0k.js +3 -0
- package/src/assets/web-panel/assets/Search-DAkuaZNe.js +1 -0
- package/src/assets/web-panel/assets/Search-Klk29S7C.css +1 -0
- package/src/assets/web-panel/assets/Security-BmrukMHn.css +1 -0
- package/src/assets/web-panel/assets/Security-C79Ml2Ms.js +4 -0
- package/src/assets/web-panel/assets/Services-BBk_jH6-.js +2 -0
- package/src/assets/web-panel/assets/Services-DAnVNhUG.css +1 -0
- package/src/assets/web-panel/assets/{Skeleton-DL5ebkDK.js → Skeleton-Cy0VvL0M.js} +1 -1
- package/src/assets/web-panel/assets/Skills-BUu9owbR.css +1 -0
- package/src/assets/web-panel/assets/Skills-OQNky3uI.js +1 -0
- package/src/assets/web-panel/assets/Sla-CbX1f8xN.js +1 -0
- package/src/assets/web-panel/assets/Sla-sodqCU4a.css +1 -0
- package/src/assets/web-panel/assets/SpeechSettings-BIkoUjws.js +1 -0
- package/src/assets/web-panel/assets/SpeechSettings-CgB9nFyq.css +1 -0
- package/src/assets/web-panel/assets/SyncSettings-B3hJqmBP.css +1 -0
- package/src/assets/web-panel/assets/SyncSettings-DG6Swk7G.js +2 -0
- package/src/assets/web-panel/assets/Tasks-C9R8sgyi.js +1 -0
- package/src/assets/web-panel/assets/Tasks-nbTUVXvt.css +1 -0
- package/src/assets/web-panel/assets/Templates-AaJPeCIz.js +1 -0
- package/src/assets/web-panel/assets/Templates-CpFsKk_l.css +1 -0
- package/src/assets/web-panel/assets/Tenant-MuPJnOjk.css +1 -0
- package/src/assets/web-panel/assets/Tenant-jVFRofww.js +1 -0
- package/src/assets/web-panel/assets/Terminal-DHBMzfK6.js +3 -0
- package/src/assets/web-panel/assets/Terminal-DHoveJwj.css +1 -0
- package/src/assets/web-panel/assets/TimelineRenderer-9RFfOHSI.js +1 -0
- package/src/assets/web-panel/assets/TimelineRenderer-BlTAtkOc.css +1 -0
- package/src/assets/web-panel/assets/Tokens-CynVae-o.css +1 -0
- package/src/assets/web-panel/assets/Tokens-ZTfwuABF.js +1 -0
- package/src/assets/web-panel/assets/{Trigger-Rzs-a8Xf.js → Trigger-Xo7uZNQs.js} +1 -1
- package/src/assets/web-panel/assets/Trust-C-WrW0Fj.css +1 -0
- package/src/assets/web-panel/assets/Trust-C0cTPYvn.js +1 -0
- package/src/assets/web-panel/assets/UkeySign-DmMKio71.js +1 -0
- package/src/assets/web-panel/assets/VideoEditing-BDFghpzP.css +1 -0
- package/src/assets/web-panel/assets/VideoEditing-DP7B-oGT.js +1 -0
- package/src/assets/web-panel/assets/Wallet-B1kZDARo.js +4 -0
- package/src/assets/web-panel/assets/Wallet-DUbpTRcg.css +1 -0
- package/src/assets/web-panel/assets/WebAuthn-Bo5kBx27.js +5 -0
- package/src/assets/web-panel/assets/WebAuthn-CVAFRfCQ.css +1 -0
- package/src/assets/web-panel/assets/WorkflowEditor-429lPWYk.css +1 -0
- package/src/assets/web-panel/assets/WorkflowEditor-DGI9SNHH.js +1 -0
- package/src/assets/web-panel/assets/{_getTag-BVc6NQ_K.js → _getTag-DnrRH4E6.js} +1 -1
- package/src/assets/web-panel/assets/{chat-C7tndXfg.js → chat-y97W1CIG.js} +1 -1
- package/src/assets/web-panel/assets/{collapseMotion-DfnRZex1.js → collapseMotion-mxzzcDsg.js} +1 -1
- package/src/assets/web-panel/assets/{colors-dUAGx-eS.js → colors-DtTNo0sH.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-X13u92RU.js → compact-item-D0q0exuS.js} +1 -1
- package/src/assets/web-panel/assets/createContext-D7pLFs2I.js +1 -0
- package/src/assets/web-panel/assets/{debounce-D9xTw4Sx.js → debounce-CFGTTtN3.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-BDK34w0I.js +1 -0
- package/src/assets/web-panel/assets/echarts-jxgIOFUZ.js +25 -0
- package/src/assets/web-panel/assets/{hasIn-DGFXWm7Y.js → hasIn-CXjG5B2j.js} +1 -1
- package/src/assets/web-panel/assets/{icons--SBOhPAi.js → icons-DP3uiYxy.js} +4 -4
- package/src/assets/web-panel/assets/{index-Deh_HoQ3.js → index-1dwtkcJv.js} +2 -2
- package/src/assets/web-panel/assets/index-4mWZhCzz.js +1 -0
- package/src/assets/web-panel/assets/index-6np5ESBM.js +1 -0
- package/src/assets/web-panel/assets/{index-Bewc5jaO.js → index-8jxbZupG.js} +1 -1
- package/src/assets/web-panel/assets/{index-DW1GR68q.js → index-B3y_4OdG.js} +1 -1
- package/src/assets/web-panel/assets/index-B4dPdrvC.js +1 -0
- package/src/assets/web-panel/assets/index-B6SaRuCI.js +1 -0
- package/src/assets/web-panel/assets/index-B9ekWb3I.js +1 -0
- package/src/assets/web-panel/assets/index-BJUf19Wd.js +73 -0
- package/src/assets/web-panel/assets/index-BO644Q4S.js +21 -0
- package/src/assets/web-panel/assets/index-BPXhU-jp.js +7 -0
- package/src/assets/web-panel/assets/index-BU944DeT.js +31 -0
- package/src/assets/web-panel/assets/index-B_hjkMtX.js +3 -0
- package/src/assets/web-panel/assets/index-BdhEYW2a.js +1 -0
- package/src/assets/web-panel/assets/{index-DBfn83eM.js → index-BgmvrPJH.js} +1 -1
- package/src/assets/web-panel/assets/index-BgyrM0UN.js +19 -0
- package/src/assets/web-panel/assets/{index-Cq-fdWWC.js → index-BnLrbXDA.js} +1 -1
- package/src/assets/web-panel/assets/{index-C54Ydkuz.js → index-BqVjUN8b.js} +4 -4
- package/src/assets/web-panel/assets/index-BzCPx1cq.js +21 -0
- package/src/assets/web-panel/assets/index-CFsPe2N7.js +3 -0
- package/src/assets/web-panel/assets/{index-C14mc-46.js → index-CKrbutAQ.js} +1 -1
- package/src/assets/web-panel/assets/index-CSdhC7Qo.js +1 -0
- package/src/assets/web-panel/assets/{index-BqX3jeij.js → index-Cbqu804A.js} +1 -1
- package/src/assets/web-panel/assets/{index-CvlrcZKy.js → index-CkGFqlYX.js} +4 -4
- package/src/assets/web-panel/assets/{index-CfX1DEtk.css → index-Cq93VfoF.css} +1 -1
- package/src/assets/web-panel/assets/index-Ct6xtKkc.js +1 -0
- package/src/assets/web-panel/assets/index-DY6KLlgG.js +1 -0
- package/src/assets/web-panel/assets/index-D_4WcI1V.js +13 -0
- package/src/assets/web-panel/assets/{index-Ced-t9AY.js → index-DjCawXk1.js} +3 -3
- package/src/assets/web-panel/assets/index-Dr45Nm9V.js +55 -0
- package/src/assets/web-panel/assets/index-EaIfumgW.js +1 -0
- package/src/assets/web-panel/assets/index-POaFzYGS.js +1 -0
- package/src/assets/web-panel/assets/index-TrBGgrwG.js +1 -0
- package/src/assets/web-panel/assets/{index-DrH9uW99.js → index-YWOEx3rP.js} +2 -2
- package/src/assets/web-panel/assets/{index-DZMiVgXE.js → index-_3wPBMKt.js} +1 -1
- package/src/assets/web-panel/assets/{index-CBnkvGxd.js → index-aarO4HT9.js} +1 -1
- package/src/assets/web-panel/assets/index-bVJvqDAz.js +1 -0
- package/src/assets/web-panel/assets/{index-BipKV1Yr.js → index-gFLQe31v.js} +2 -2
- package/src/assets/web-panel/assets/index-kvV0f4tV.js +12 -0
- package/src/assets/web-panel/assets/index-qoB3whR9.js +12 -0
- package/src/assets/web-panel/assets/{initDefaultProps-B8zdOlFC.js → initDefaultProps-BnXISaAa.js} +1 -1
- package/src/assets/web-panel/assets/{isPlainObject-_gz-soRW.js → isPlainObject-BWRMT62c.js} +1 -1
- package/src/assets/web-panel/assets/isSymbol-S5WZT7lS.js +1 -0
- package/src/assets/web-panel/assets/motion-ChY7C0zJ.js +11 -0
- package/src/assets/web-panel/assets/{move-BioqdqDn.js → move-ByFZMFM5.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-Cc3pB9Xm.js → mtc-parser-BbAbUB-9.js} +1 -1
- package/src/assets/web-panel/assets/{omit-C1hn14Vc.js → omit-BYeliY1H.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-DgVG8oMj.js → pickAttrs-B9dcAKnu.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-cJY6hoXZ.js → placementArrow-D3F_txz7.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-DbUdURRx.js → responsiveObserve-ClkwY7wS.js} +1 -1
- package/src/assets/web-panel/assets/{slide-C2OEWnC4.js → slide-BNgy2Eea.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-DghgcGqm.js → statusUtils-Bv3heMCD.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-GoQ7uwU1.js → styleChecker-DVdlHbQm.js} +1 -1
- package/src/assets/web-panel/assets/useFlexGapSupport-alrRY5BK.js +1 -0
- package/src/assets/web-panel/assets/{useFs-CZCJDMup.js → useFs-CcVh0-Vu.js} +1 -1
- package/src/assets/web-panel/assets/{useMergedState-WwedrFR0.js → useMergedState-Cl2q1fes.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-BjAS9b7w.js → usePersonalDataHub-CkkHPhyq.js} +1 -1
- package/src/assets/web-panel/assets/{useRefs-Cdq8EWeF.js → useRefs-DD9q4mOT.js} +1 -1
- package/src/assets/web-panel/assets/{useState-DGS1NOyn.js → useState-BK4hy8Ma.js} +1 -1
- package/src/assets/web-panel/assets/vendor-BvqAck49.js +42 -0
- package/src/assets/web-panel/assets/vnode-DWi0X9WN.js +1 -0
- package/src/assets/web-panel/assets/{zoom-CzyiNxpd.js → zoom-DCbqxxLH.js} +1 -1
- package/src/assets/web-panel/index.html +4 -4
- package/src/commands/agent.js +306 -1
- package/src/commands/ask.js +35 -1
- package/src/commands/checkpoint.js +239 -0
- package/src/commands/cost.js +114 -0
- package/src/commands/session.js +22 -2
- package/src/index.js +4 -0
- package/src/lib/file-checkpoint.js +300 -0
- package/src/lib/llm-pricing.js +227 -0
- package/src/lib/personal-data-hub-wiring.js +30 -0
- package/src/lib/recent-session.js +72 -0
- package/src/lib/session-picker.js +68 -0
- package/src/repl/agent-repl.js +58 -2
- package/src/repl/chat-repl.js +16 -1
- package/src/runtime/agent-core.js +68 -31
- package/src/runtime/fallback-model.js +109 -0
- package/src/runtime/file-ref-expander.js +258 -0
- package/src/runtime/headless-runner.js +576 -0
- package/src/runtime/headless-stream.js +302 -0
- package/src/runtime/policies/agent-policy.js +6 -0
- package/src/runtime/quiet-stdout.js +35 -0
- package/src/runtime/system-prompt.js +60 -0
- package/src/assets/web-panel/assets/AIOps-BWWsdf3s.js +0 -1
- package/src/assets/web-panel/assets/AIOps-Cchx1iXI.css +0 -1
- package/src/assets/web-panel/assets/Analytics-C1-TXmTC.css +0 -1
- package/src/assets/web-panel/assets/Analytics-CU1ellhG.js +0 -3
- package/src/assets/web-panel/assets/AppLayout-9pWRQa_t.css +0 -1
- package/src/assets/web-panel/assets/AppLayout-cXY-mRTd.js +0 -3
- package/src/assets/web-panel/assets/Audit-6ZMsXmrO.css +0 -1
- package/src/assets/web-panel/assets/Audit-CtQuC6zy.js +0 -1
- package/src/assets/web-panel/assets/Backup-CY9QozR7.css +0 -1
- package/src/assets/web-panel/assets/Backup-WeATa8CV.js +0 -1
- package/src/assets/web-panel/assets/BaseInput-BCu2Cejw.js +0 -1
- package/src/assets/web-panel/assets/Chat-Bj0XPlH8.js +0 -7
- package/src/assets/web-panel/assets/Chat-IlrLB9ZV.css +0 -1
- package/src/assets/web-panel/assets/ChatBubbleRenderer-Bpp2sN9W.js +0 -1
- package/src/assets/web-panel/assets/ChatBubbleRenderer-CO908iBt.css +0 -1
- package/src/assets/web-panel/assets/Codegen-BLP7id2a.css +0 -1
- package/src/assets/web-panel/assets/Codegen-PeBhNei5.js +0 -1
- package/src/assets/web-panel/assets/Community-BvaB_Wcs.js +0 -1
- package/src/assets/web-panel/assets/Community-C2RejeOY.css +0 -1
- package/src/assets/web-panel/assets/Compliance-DOys4Ov1.css +0 -1
- package/src/assets/web-panel/assets/Compliance-DjquEqsU.js +0 -1
- package/src/assets/web-panel/assets/Cowork-Bv6Tm40_.js +0 -6
- package/src/assets/web-panel/assets/Cowork-DsOst4XK.css +0 -1
- package/src/assets/web-panel/assets/Cron-D9fPIXV8.js +0 -2
- package/src/assets/web-panel/assets/Crosschain-C0WilDBF.js +0 -1
- package/src/assets/web-panel/assets/Crosschain-C7Le4Pte.css +0 -1
- package/src/assets/web-panel/assets/DID-BX6k3jZi.css +0 -1
- package/src/assets/web-panel/assets/DID-CiGeAI1K.js +0 -2
- package/src/assets/web-panel/assets/Dashboard-MFDcsVcM.css +0 -1
- package/src/assets/web-panel/assets/Dashboard-zqQuizB8.js +0 -3
- package/src/assets/web-panel/assets/Dropdown-_Mjb8yOR.js +0 -1
- package/src/assets/web-panel/assets/EmailListRenderer-C369EVhV.js +0 -1
- package/src/assets/web-panel/assets/EmailListRenderer-CVJ1j3Ll.css +0 -1
- package/src/assets/web-panel/assets/FamilyGuardDashboard-D8WsrCmn.js +0 -1
- package/src/assets/web-panel/assets/FamilyGuardDashboard-Df-D09Q4.css +0 -1
- package/src/assets/web-panel/assets/Federation-CgmfLbx1.css +0 -1
- package/src/assets/web-panel/assets/Federation-Dq7CrAzj.js +0 -1
- package/src/assets/web-panel/assets/FormItemContext-C7TvuLVK.js +0 -1
- package/src/assets/web-panel/assets/GenericCardRenderer-BJUR1Emh.js +0 -1
- package/src/assets/web-panel/assets/GenericCardRenderer-DtJFcJYl.css +0 -1
- package/src/assets/web-panel/assets/Git-B5MdAp15.js +0 -2
- package/src/assets/web-panel/assets/Governance-BIbPWlSM.js +0 -1
- package/src/assets/web-panel/assets/Governance-BoipmXaM.css +0 -1
- package/src/assets/web-panel/assets/Inference-BWxYJF9-.css +0 -1
- package/src/assets/web-panel/assets/Inference-vOz9J05E.js +0 -1
- package/src/assets/web-panel/assets/KnowledgeGraph-B_vUO-Td.js +0 -1
- package/src/assets/web-panel/assets/KnowledgeGraph-CztPDA96.css +0 -1
- package/src/assets/web-panel/assets/Logs-BwPfxX3p.js +0 -2
- package/src/assets/web-panel/assets/Logs-Gf_Mv9Nx.css +0 -1
- package/src/assets/web-panel/assets/Marketplace-Djp5q9dS.css +0 -1
- package/src/assets/web-panel/assets/Marketplace-T5HNwUjX.js +0 -1
- package/src/assets/web-panel/assets/McpTools-CDjHmzxH.css +0 -1
- package/src/assets/web-panel/assets/McpTools-CuKeBPxy.js +0 -5
- package/src/assets/web-panel/assets/Memory-Bcc2hxOA.css +0 -1
- package/src/assets/web-panel/assets/Memory-DmRW_sTE.js +0 -2
- package/src/assets/web-panel/assets/MobileBridge-DK2N_MJA.js +0 -3
- package/src/assets/web-panel/assets/MobileBridge-DwxX55b_.css +0 -1
- package/src/assets/web-panel/assets/MobileProjects-Ceaxrqzc.css +0 -1
- package/src/assets/web-panel/assets/MobileProjects-wl3bXCnJ.js +0 -1
- package/src/assets/web-panel/assets/Mtc-C8e0941i.js +0 -6
- package/src/assets/web-panel/assets/Mtc-DHwbdUqA.css +0 -1
- package/src/assets/web-panel/assets/MtcAudit-B0x8gahq.css +0 -1
- package/src/assets/web-panel/assets/MtcAudit-Cwigy2IR.js +0 -19
- package/src/assets/web-panel/assets/Multisig-BSfh_ncy.js +0 -7
- package/src/assets/web-panel/assets/Multisig-kwPDnXnl.css +0 -1
- package/src/assets/web-panel/assets/NLProgramming-BwzJAfJg.js +0 -1
- package/src/assets/web-panel/assets/NLProgramming-CLOvy-35.css +0 -1
- package/src/assets/web-panel/assets/Notes-COE2q2gD.css +0 -1
- package/src/assets/web-panel/assets/Notes-uilHH6hE.js +0 -7
- package/src/assets/web-panel/assets/NotificationSettings-Co0e0uEO.css +0 -1
- package/src/assets/web-panel/assets/NotificationSettings-DvM3DTPW.js +0 -1
- package/src/assets/web-panel/assets/OrderTableRenderer-BIEm3hZl.js +0 -1
- package/src/assets/web-panel/assets/OrderTableRenderer-BnOISpKI.css +0 -1
- package/src/assets/web-panel/assets/Organization-BX-cIO8M.css +0 -1
- package/src/assets/web-panel/assets/Organization-zxWoIwYM.js +0 -4
- package/src/assets/web-panel/assets/P2P-BsbToYKZ.js +0 -2
- package/src/assets/web-panel/assets/P2P-Cx88UaiD.css +0 -1
- package/src/assets/web-panel/assets/PdhVaultBrowser-B9ZGFpn4.css +0 -1
- package/src/assets/web-panel/assets/PdhVaultBrowser-VU8vfhsS.js +0 -7
- package/src/assets/web-panel/assets/Permissions-C10Sd26B.js +0 -4
- package/src/assets/web-panel/assets/Permissions-C9WlkGl-.css +0 -1
- package/src/assets/web-panel/assets/PersonalDataHub-Bz5u9Gth.css +0 -1
- package/src/assets/web-panel/assets/PersonalDataHub-edJB7VeU.js +0 -2
- package/src/assets/web-panel/assets/Pipeline-DxkXqrH2.css +0 -1
- package/src/assets/web-panel/assets/Pipeline-qNmVxn5A.js +0 -1
- package/src/assets/web-panel/assets/Privacy-CrsfSFKd.css +0 -1
- package/src/assets/web-panel/assets/Privacy-h78XF7eO.js +0 -1
- package/src/assets/web-panel/assets/ProjectInit-C9-vm1no.js +0 -2
- package/src/assets/web-panel/assets/ProjectInit-CteEo-wF.css +0 -1
- package/src/assets/web-panel/assets/ProjectSettings-DpDNsQTb.js +0 -2
- package/src/assets/web-panel/assets/ProjectSettings-pLSae-wy.css +0 -1
- package/src/assets/web-panel/assets/Projects-BX-SG9R4.css +0 -1
- package/src/assets/web-panel/assets/Projects-CwU3W4RD.js +0 -1
- package/src/assets/web-panel/assets/Providers-BNI-WkmA.css +0 -1
- package/src/assets/web-panel/assets/Providers-C3KZlUEI.js +0 -1
- package/src/assets/web-panel/assets/QuickAsk-CILvLGze.js +0 -1
- package/src/assets/web-panel/assets/Recommend-CH6wKzGo.css +0 -1
- package/src/assets/web-panel/assets/Recommend-XfFlk3BY.js +0 -1
- package/src/assets/web-panel/assets/Reputation-BqmWvaMD.js +0 -1
- package/src/assets/web-panel/assets/Reputation-D6VPNEd0.css +0 -1
- package/src/assets/web-panel/assets/Row-BEbjCI_X.js +0 -1
- package/src/assets/web-panel/assets/RssFeed-BlFC20eg.css +0 -1
- package/src/assets/web-panel/assets/RssFeed-CFukIl-a.js +0 -3
- package/src/assets/web-panel/assets/Search-B6RalzTB.css +0 -1
- package/src/assets/web-panel/assets/Search-dVPkf1o2.js +0 -1
- package/src/assets/web-panel/assets/Security-13K57V_v.css +0 -1
- package/src/assets/web-panel/assets/Security-DlRFaUrn.js +0 -4
- package/src/assets/web-panel/assets/Services-C8Qs6KXv.css +0 -1
- package/src/assets/web-panel/assets/Services-DKy7AjpA.js +0 -2
- package/src/assets/web-panel/assets/Skills-BEqnpg2j.js +0 -1
- package/src/assets/web-panel/assets/Skills-BdjRyorN.css +0 -1
- package/src/assets/web-panel/assets/Sla-CZ9_lzPI.js +0 -1
- package/src/assets/web-panel/assets/Sla-K19oOyQc.css +0 -1
- package/src/assets/web-panel/assets/SpeechSettings-DVSY_ehZ.js +0 -1
- package/src/assets/web-panel/assets/SpeechSettings-DYPJTDKz.css +0 -1
- package/src/assets/web-panel/assets/SyncSettings-C6cDrwDR.css +0 -1
- package/src/assets/web-panel/assets/SyncSettings-DgvsRpGt.js +0 -1
- package/src/assets/web-panel/assets/Tasks-BJjN_YEm.css +0 -1
- package/src/assets/web-panel/assets/Tasks-L5qXKsxK.js +0 -1
- package/src/assets/web-panel/assets/Templates-BWTV8-2E.css +0 -1
- package/src/assets/web-panel/assets/Templates-DR4VBx7q.js +0 -1
- package/src/assets/web-panel/assets/Tenant-D3zkSAV0.css +0 -1
- package/src/assets/web-panel/assets/Tenant-jMyaK184.js +0 -1
- package/src/assets/web-panel/assets/Terminal-DA5gjCiE.js +0 -3
- package/src/assets/web-panel/assets/Terminal-G1DrFtKr.css +0 -1
- package/src/assets/web-panel/assets/TimelineRenderer-BM17JHyr.js +0 -1
- package/src/assets/web-panel/assets/TimelineRenderer-DmztdsbF.css +0 -1
- package/src/assets/web-panel/assets/Tokens-BBOdNRHQ.css +0 -1
- package/src/assets/web-panel/assets/Tokens-CCJIrnhi.js +0 -1
- package/src/assets/web-panel/assets/Trust-BHeJEfNG.js +0 -1
- package/src/assets/web-panel/assets/Trust-DeOo0xAh.css +0 -1
- package/src/assets/web-panel/assets/UkeySign-DjcIVRk4.js +0 -1
- package/src/assets/web-panel/assets/VideoEditing-BPhptg3q.js +0 -1
- package/src/assets/web-panel/assets/VideoEditing-DksiizfS.css +0 -1
- package/src/assets/web-panel/assets/Wallet-D_xDgfaz.js +0 -4
- package/src/assets/web-panel/assets/Wallet-gR0ZvZbK.css +0 -1
- package/src/assets/web-panel/assets/WebAuthn-SSh5VhVO.css +0 -1
- package/src/assets/web-panel/assets/WebAuthn-pd961lgM.js +0 -5
- package/src/assets/web-panel/assets/WorkflowEditor-BmXDUZ8M.js +0 -1
- package/src/assets/web-panel/assets/WorkflowEditor-IiwsD8Kh.css +0 -1
- package/src/assets/web-panel/assets/createContext-BBLoTzN8.js +0 -1
- package/src/assets/web-panel/assets/devWarning-CNIS3FrJ.js +0 -1
- package/src/assets/web-panel/assets/echarts-Dj_pBaVI.js +0 -19
- package/src/assets/web-panel/assets/favicon-FSU2gSy6.ico +0 -0
- package/src/assets/web-panel/assets/index-1xUFGcnI.js +0 -21
- package/src/assets/web-panel/assets/index-4BeUpRaU.js +0 -1
- package/src/assets/web-panel/assets/index-AVHrO1io.js +0 -21
- package/src/assets/web-panel/assets/index-B2fc2n_u.js +0 -3
- package/src/assets/web-panel/assets/index-B5aXiiOG.js +0 -1
- package/src/assets/web-panel/assets/index-B78VsLFL.js +0 -1
- package/src/assets/web-panel/assets/index-BECv44dY.js +0 -12
- package/src/assets/web-panel/assets/index-BGn5-2TK.js +0 -1
- package/src/assets/web-panel/assets/index-BM9IHnrf.js +0 -13
- package/src/assets/web-panel/assets/index-BlMshk9V.js +0 -1
- package/src/assets/web-panel/assets/index-BoWoWh9f.js +0 -19
- package/src/assets/web-panel/assets/index-Bt79ud6Y.js +0 -1
- package/src/assets/web-panel/assets/index-CO9Tt0Bo.js +0 -1
- package/src/assets/web-panel/assets/index-CSZvB2uy.js +0 -12
- package/src/assets/web-panel/assets/index-CjeazYU2.js +0 -1
- package/src/assets/web-panel/assets/index-Cw-TEBru.js +0 -1
- package/src/assets/web-panel/assets/index-CyObfnlZ.js +0 -3
- package/src/assets/web-panel/assets/index-D0d2TS5o.js +0 -69
- package/src/assets/web-panel/assets/index-DV3zNhRX.js +0 -1
- package/src/assets/web-panel/assets/index-DnHElN_A.js +0 -7
- package/src/assets/web-panel/assets/index-DspW4reY.js +0 -55
- package/src/assets/web-panel/assets/index-DxUFdvJ5.js +0 -1
- package/src/assets/web-panel/assets/index-La4F-U-s.js +0 -1
- package/src/assets/web-panel/assets/index-azbNWBMo.js +0 -1
- package/src/assets/web-panel/assets/index-squRDiXd.js +0 -31
- package/src/assets/web-panel/assets/isSymbol-DAy2hlR5.js +0 -1
- package/src/assets/web-panel/assets/motion-ChVLXdRp.js +0 -11
- package/src/assets/web-panel/assets/useFlexGapSupport-CzD0s7wN.js +0 -1
- package/src/assets/web-panel/assets/vendor-DhFY8mDK.js +0 -1
- package/src/assets/web-panel/assets/vnode-CnXQ7gJ2.js +0 -1
- package/src/assets/web-panel/assets/warning-Pq00owYb.js +0 -1
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./ChatBubbleRenderer-Bpp2sN9W.js","./index-D0d2TS5o.js","./vendor-DhFY8mDK.js","./icons--SBOhPAi.js","./index-CfX1DEtk.css","./ChatBubbleRenderer-CO908iBt.css","./OrderTableRenderer-BIEm3hZl.js","./OrderTableRenderer-BnOISpKI.css","./TimelineRenderer-BM17JHyr.js","./TimelineRenderer-DmztdsbF.css","./EmailListRenderer-C369EVhV.js","./EmailListRenderer-CVJ1j3Ll.css","./GenericCardRenderer-BJUR1Emh.js","./GenericCardRenderer-DtJFcJYl.css"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{E as W,r as L,f as R,K as _,L as d,M as O,R as b,c as i,u as s,Q as k,S as $,Z as U,F as P,Y as H,$ as K,P as x,N as v,O as h,V as F,o as Z}from"./vendor-DhFY8mDK.js";import{u as J}from"./usePersonalDataHub-BjAS9b7w.js";import{_ as M,e as T,d as z}from"./index-D0d2TS5o.js";import{m as B,ad as X,M as ee,aH as te,y as ne,aF as se,aq as oe,h as re,t as le,d as ae,e as Q,ag as ie,az as ue,R as ce}from"./icons--SBOhPAi.js";const I=Object.freeze({q:"",category:null,adapter:null,subtype:null,since:null,until:null}),N=50,G=300,de=W("pdhBrowser",()=>{const t=L({...I}),e=L([]),o=L(null),c=L(!1),r=L(!1),a=L(null),n=L(null),l=L(!1),m=L({byCategory:{},byAdapter:{},bySubtype:{},total:0});let u=0,S=null;const g=R(()=>e.value.length>0),p=R(()=>o.value!=null);function C(w={}){const y={},f=t.value;return f.q&&f.q.trim()&&(y.q=f.q.trim()),f.category&&(y.category=f.category),f.adapter&&(y.adapter=f.adapter),f.subtype&&(y.subtype=f.subtype),Number.isFinite(f.since)&&(y.since=f.since),Number.isFinite(f.until)&&(y.until=f.until),{...y,...w}}async function j(){const w=++u;c.value=!0,a.value=null;const y=J();try{const[f,D]=await Promise.all([y.searchEvents(C({limit:N})),y.facetCounts({...t.value.q&&t.value.q.trim()?{q:t.value.q.trim()}:{},...Number.isFinite(t.value.since)?{since:t.value.since}:{},...Number.isFinite(t.value.until)?{until:t.value.until}:{}})]);if(w!==u)return;e.value=f.rows||[],o.value=f.nextCursor||null,n.value=f.mode||"like",l.value=!!f.shortQuery,m.value={byCategory:D.byCategory||{},byAdapter:D.byAdapter||{},bySubtype:D.bySubtype||{},total:D.total||0}}catch(f){if(w!==u)return;a.value=f&&f.message?f.message:String(f),e.value=[],o.value=null}finally{w===u&&(c.value=!1)}}async function E(){if(!o.value||r.value)return;r.value=!0,a.value=null;const w=J();try{const y=await w.searchEvents(C({cursor:o.value,limit:N}));e.value=e.value.concat(y.rows||[]),o.value=y.nextCursor||null,n.value=y.mode||n.value}catch(y){a.value=y&&y.message?y.message:String(y)}finally{r.value=!1}}function A(w,y){if(!(w in I))throw new Error(`pdhBrowser.setFilter: unknown key "${w}"`);t.value={...t.value,[w]:y},S&&clearTimeout(S),S=setTimeout(()=>{S=null,j()},G)}function q(w){return t.value={...I,...w},S&&(clearTimeout(S),S=null),j()}function Y(){t.value={...I},e.value=[],o.value=null,a.value=null,m.value={byCategory:{},byAdapter:{},bySubtype:{},total:0}}return{filters:t,results:e,cursor:o,isLoading:c,isAppending:r,error:a,mode:n,shortQuery:l,facets:m,hasResults:g,canLoadMore:p,search:j,loadMore:E,setFilter:A,setFilters:q,reset:Y,PAGE_SIZE:N,SEARCH_DEBOUNCE_MS:G}}),fe=Object.freeze(["chat","social","email","shopping","travel","system","ai-chat","other"]),pe=Object.freeze({chat:"社交聊天",social:"内容平台",email:"邮件",shopping:"支付订单",travel:"出行",system:"系统数据","ai-chat":"AI 对话",other:"其他"});function V(t){return pe[t]||t||"未知"}const me=Object.freeze([["wechat","chat"],["messaging-","chat"],["social-","social"],["email-","email"],["shopping-","shopping"],["alipay-","shopping"],["travel-","travel"],["system-data","system"],["browser-","system"],["vscode","system"],["win-recent","system"],["git-activity","system"],["shell-history","system"],["local-files","system"],["ai-chat-","ai-chat"]]);function ye(t){if(typeof t!="string"||t.length===0)return"other";for(const[e,o]of me)if(e.endsWith("-")||e==="system-data"){if(t.startsWith(e))return o}else if(t===e)return o;return"other"}const ve={class:"pdh-sidebar"},ge=["onClick"],_e={class:"label"},be={__name:"CategorySidebar",props:{selected:{type:String,default:null},facets:{type:Object,default:()=>({byCategory:{},total:0})}},emits:["select"],setup(t){const e=t,o=R(()=>e.facets.total||0),c={chat:re,social:oe,email:se,shopping:ne,travel:te,system:ee,"ai-chat":X,other:B};function r(n){return c[n]||B}function a(n){return n?{backgroundColor:"#fff",color:"#1677ff"}:{backgroundColor:"#f0f0f0",color:"#666"}}return(n,l)=>{const m=_("a-badge");return d(),O("div",ve,[l[2]||(l[2]=b("div",{class:"sidebar-title"},"数据类型",-1)),b("div",{class:U(["cat-item",{active:t.selected===null}]),onClick:l[0]||(l[0]=u=>n.$emit("select",null))},[i(s(B),{class:"icon"}),l[1]||(l[1]=b("span",{class:"label"},"全部",-1)),o.value>0?(d(),k(m,{key:0,count:o.value,"number-style":a(t.selected===null),"overflow-count":9999},null,8,["count","number-style"])):$("",!0)],2),(d(!0),O(P,null,H(s(fe),u=>(d(),O("div",{key:u,class:U(["cat-item",{active:t.selected===u,dim:!t.facets.byCategory[u]}]),onClick:S=>n.$emit("select",u)},[(d(),k(K(r(u)),{class:"icon"})),b("span",_e,x(s(V)(u)),1),t.facets.byCategory[u]?(d(),k(m,{key:0,count:t.facets.byCategory[u],"number-style":a(t.selected===u),"overflow-count":9999},null,8,["count","number-style"])):$("",!0)],10,ge))),128))])}}},he=M(be,[["__scopeId","data-v-0c0dc745"]]),Se={class:"pdh-filter-bar"},Ce={key:1,class:"hint"},we={key:2,class:"hint"},Oe={__name:"SearchFilterBar",props:{filters:{type:Object,required:!0},facets:{type:Object,default:()=>({byAdapter:{}})},isLoading:{type:Boolean,default:!1},mode:{type:String,default:null},shortQuery:{type:Boolean,default:!1}},emits:["set-filter","reset"],setup(t,{emit:e}){const o=t,c=e,r=R(()=>o.filters.category?`在「${o.filters.category}」类目内搜索…`:"搜索关键词(如:支付宝、罗技、Kotlin)…"),a=R(()=>Object.entries(o.facets.byAdapter||{}).sort((p,C)=>C[1]-p[1]).map(([p,C])=>({value:p,label:`${p} (${C})`}))),n=R(()=>!o.filters.since&&!o.filters.until?null:[o.filters.since?new Date(o.filters.since):null,o.filters.until?new Date(o.filters.until):null]),l=R(()=>!!(o.filters.q||o.filters.adapter||o.filters.subtype||o.filters.since||o.filters.until));function m(g){c("set-filter","q",g||"")}function u(g){c("set-filter","q",g||"")}function S(g){if(!g||g.length===0){c("set-filter","since",null),c("set-filter","until",null);return}const[p,C]=g;c("set-filter","since",p?+p:null),c("set-filter","until",C?+C:null)}return(g,p)=>{const C=_("a-input-search"),j=_("a-select"),E=_("a-range-picker"),A=_("a-button");return d(),O("div",Se,[i(C,{value:t.filters.q,placeholder:r.value,"enter-button":"搜索","allow-clear":"",loading:t.isLoading,style:{flex:"1","max-width":"480px"},"onUpdate:value":m,onSearch:u},{prefix:v(()=>[i(s(le))]),_:1},8,["value","placeholder","loading"]),i(j,{value:t.filters.adapter,placeholder:"所有 adapter","allow-clear":"",options:a.value,style:{width:"200px"},"onUpdate:value":p[0]||(p[0]=q=>g.$emit("set-filter","adapter",q||null))},null,8,["value","options"]),i(E,{value:n.value,placeholder:["开始日期","结束日期"],style:{width:"280px"},"onUpdate:value":S},null,8,["value"]),l.value?(d(),k(A,{key:0,type:"link",danger:"",onClick:p[1]||(p[1]=q=>g.$emit("reset"))},{icon:v(()=>[i(s(ae))]),default:v(()=>[p[2]||(p[2]=h(" 清空筛选 ",-1))]),_:1})):$("",!0),t.shortQuery?(d(),O("span",Ce,[i(s(Q)),p[3]||(p[3]=h(" 关键词需至少 3 字 (FTS5 trigram 限制) ",-1))])):t.mode==="like"?(d(),O("span",we,[i(s(Q)),p[4]||(p[4]=h(" 当前为 LIKE 兜底模式 ",-1))])):$("",!0)])}}},ke=M(Oe,[["__scopeId","data-v-44891485"]]),$e={__name:"RendererDispatcher",props:{event:{type:Object,required:!0}},setup(t){const e=F(()=>T(()=>import("./ChatBubbleRenderer-Bpp2sN9W.js"),__vite__mapDeps([0,1,2,3,4,5]),import.meta.url)),o=F(()=>T(()=>import("./OrderTableRenderer-BIEm3hZl.js"),__vite__mapDeps([6,1,2,3,4,7]),import.meta.url)),c=F(()=>T(()=>import("./TimelineRenderer-BM17JHyr.js"),__vite__mapDeps([8,1,2,3,4,9]),import.meta.url)),r=F(()=>T(()=>import("./EmailListRenderer-C369EVhV.js"),__vite__mapDeps([10,1,2,3,4,11]),import.meta.url)),a=F(()=>T(()=>import("./GenericCardRenderer-BJUR1Emh.js"),__vite__mapDeps([12,1,2,3,4,13]),import.meta.url));function n(l){const m=l&&l.source&&l.source.adapter;switch(ye(m)){case"chat":case"ai-chat":return e;case"shopping":return o;case"travel":return c;case"email":return r;default:return a}}return(l,m)=>(d(),k(K(n(t.event)),{event:t.event},null,8,["event"]))}};function Ee(t){return JSON.stringify(t,null,2)}function Le(t){return t.map(e=>JSON.stringify(e)).join(`
|
|
3
|
-
`)+`
|
|
4
|
-
`}function Re(t){const o=["id","subtype","occurredAt","occurredAtIso","actor","place","adapter","summary","contentJson","extraJson"].join(","),c=t.map(r=>{const a=Number.isFinite(r.occurredAt)?r.occurredAt:null,n=a?new Date(a).toISOString():"",l=r.source&&r.source.adapter||"",m=r.content&&(r.content.text||r.content.title||r.content.subject)||"";return[r.id||"",r.subtype||"",a!=null?String(a):"",n,r.actor||"",r.place||"",l,m,r.content?JSON.stringify(r.content):"",r.extra?JSON.stringify(r.extra):""].map(je).join(",")});return[o,...c].join(`
|
|
5
|
-
`)+`
|
|
6
|
-
`}function je(t){const e=String(t??"");return e.includes(",")||e.includes('"')||e.includes(`
|
|
7
|
-
`)||e.includes("\r")?'"'+e.replace(/"/g,'""')+'"':e}function xe(t,e,o="application/octet-stream"){if(typeof window>"u"||typeof document>"u")return e;const c=new Blob([t],{type:o}),r=URL.createObjectURL(c),a=document.createElement("a");return a.href=r,a.download=e,document.body.appendChild(a),a.click(),document.body.removeChild(a),setTimeout(()=>URL.revokeObjectURL(r),1e3),e}function Ae(t,e=null){const o=new Date,c=o.getFullYear(),r=String(o.getMonth()+1).padStart(2,"0"),a=String(o.getDate()).padStart(2,"0"),n=t==="ndjson"?"ndjson":t,l=e?`-${e}`:"";return`pdh-events-${c}-${r}-${a}${l}.${n}`}const Fe={__name:"ExportDropdown",props:{events:{type:Array,required:!0},category:{type:String,default:null}},setup(t){const e=t,o=R(()=>e.events.length>0),c={json:"application/json;charset=utf-8",ndjson:"application/x-ndjson;charset=utf-8",csv:"text/csv;charset=utf-8"};function r(n){switch(n){case"json":return Ee(e.events);case"ndjson":return Le(e.events);case"csv":return Re(e.events);default:throw new Error(`unknown format: ${n}`)}}function a({key:n}){try{const l=r(n),m=Ae(n,e.category);xe(l,m,c[n]),z.success(`已导出 ${e.events.length} 条到 ${m}`)}catch(l){z.error(`导出失败: ${l.message||l}`)}}return(n,l)=>{const m=_("a-button"),u=_("a-menu-item"),S=_("a-menu"),g=_("a-dropdown");return d(),k(g,{disabled:!o.value},{overlay:v(()=>[i(S,{onClick:a},{default:v(()=>[i(u,{key:"json"},{default:v(()=>[...l[0]||(l[0]=[h("JSON (.json)",-1)])]),_:1}),i(u,{key:"ndjson"},{default:v(()=>[...l[1]||(l[1]=[h("NDJSON (.ndjson)",-1)])]),_:1}),i(u,{key:"csv"},{default:v(()=>[...l[2]||(l[2]=[h("CSV (.csv)",-1)])]),_:1})]),_:1})]),default:v(()=>[i(m,{disabled:!o.value},{icon:v(()=>[i(s(ue))]),default:v(()=>[h(" 导出 ("+x(t.events.length)+") ",1),i(s(ie))]),_:1},8,["disabled"])]),_:1},8,["disabled"])}}},Te={class:"pdh-browser-page"},qe={class:"page-header"},De={class:"main-pane"},Ie={class:"results-summary"},Be={key:0},Ne={key:0},Pe={key:1},Ve={class:"loaded-of"},Me={class:"results-list"},Ue={key:2,class:"load-more"},Je={__name:"PdhVaultBrowser",setup(t){const e=de(),o=R(()=>e.filters.q?`没有匹配 "${e.filters.q}" 的事件 — 试试更短的关键词或换个类目`:e.filters.category?`「${V(e.filters.category)}」类目下还没有数据 — 去采集页同步对应 adapter`:"Vault 里还没有数据 — 去「个人数据中台」页面同步任意 adapter");function c(a){e.filters.category=a,e.search()}function r(a,n){e.setFilter(a,n)}return Z(()=>{!e.hasResults&&!e.isLoading&&e.search()}),(a,n)=>{const l=_("a-tag"),m=_("a-button"),u=_("a-space"),S=_("a-col"),g=_("a-spin"),p=_("a-alert"),C=_("a-empty"),j=_("a-row");return d(),O("div",Te,[b("div",qe,[n[6]||(n[6]=b("div",null,[b("h2",{class:"page-title"},"数据浏览器"),b("p",{class:"page-sub"}," Vault 里所有已采集的数据,按类目浏览 / 全文检索 / 时间窗口筛选。 完全离线,不外传。 ")],-1)),i(u,null,{default:v(()=>[s(e).mode==="fts5"?(d(),k(l,{key:0,color:"green"},{default:v(()=>[...n[3]||(n[3]=[h("FTS5 trigram",-1)])]),_:1})):s(e).mode==="like"?(d(),k(l,{key:1,color:"orange"},{default:v(()=>[...n[4]||(n[4]=[h("LIKE 兜底",-1)])]),_:1})):$("",!0),i(Fe,{events:s(e).results,category:s(e).filters.category},null,8,["events","category"]),i(m,{onClick:n[0]||(n[0]=E=>s(e).search()),loading:s(e).isLoading},{icon:v(()=>[i(s(ce))]),default:v(()=>[n[5]||(n[5]=h(" 刷新 ",-1))]),_:1},8,["loading"])]),_:1})]),i(j,{gutter:16,class:"browser-layout"},{default:v(()=>[i(S,{xs:24,sm:24,md:6,lg:5,xl:4},{default:v(()=>[i(he,{selected:s(e).filters.category,facets:s(e).facets,onSelect:c},null,8,["selected","facets"])]),_:1}),i(S,{xs:24,sm:24,md:18,lg:19,xl:20},{default:v(()=>[b("div",De,[i(ke,{filters:s(e).filters,facets:s(e).facets,"is-loading":s(e).isLoading,mode:s(e).mode,"short-query":s(e).shortQuery,onSetFilter:r,onReset:n[1]||(n[1]=E=>{s(e).reset(),s(e).search()})},null,8,["filters","facets","is-loading","mode","short-query"]),b("div",Ie,[s(e).isLoading&&s(e).results.length===0?(d(),O("span",Be,[i(g,{size:"small"}),n[7]||(n[7]=h(" 载入中… ",-1))])):(d(),O(P,{key:1},[b("strong",null,x(s(e).facets.total),1),n[11]||(n[11]=h(" 条事件 ",-1)),s(e).filters.category?(d(),O("span",Ne,[n[8]||(n[8]=h(" / 当前类目 ",-1)),b("strong",null,x(s(V)(s(e).filters.category)),1),b("strong",null,x(s(e).facets.byCategory[s(e).filters.category]||0),1)])):$("",!0),s(e).filters.q?(d(),O("span",Pe,[n[9]||(n[9]=h(' / 关键词 "',-1)),b("em",null,x(s(e).filters.q),1),n[10]||(n[10]=h('"',-1))])):$("",!0),b("span",Ve," / 已显示 "+x(s(e).results.length),1)],64))]),s(e).error?(d(),k(p,{key:0,type:"error","show-icon":"",message:s(e).error,closable:"",style:{margin:"12px 0"}},null,8,["message"])):$("",!0),!s(e).isLoading&&s(e).results.length===0&&!s(e).error?(d(),k(C,{key:1,description:o.value,style:{"margin-top":"40px"}},null,8,["description"])):$("",!0),b("div",Me,[(d(!0),O(P,null,H(s(e).results,(E,A)=>(d(),k($e,{key:`r-${A}-${E.id}`,event:E},null,8,["event"]))),128))]),s(e).canLoadMore?(d(),O("div",Ue,[i(m,{loading:s(e).isAppending,onClick:n[2]||(n[2]=E=>s(e).loadMore()),block:""},{default:v(()=>[...n[12]||(n[12]=[h(" 加载下一页 (50 条) ",-1)])]),_:1},8,["loading"])])):$("",!0)])]),_:1})]),_:1})])}}},Ke=M(Je,[["__scopeId","data-v-b77bf5a7"]]);export{Ke as default};
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import{_ as ue,u as ce,d as J}from"./index-D0d2TS5o.js";import{R as de,W as pe,f as G,a8 as me}from"./icons--SBOhPAi.js";import{o as fe,M as d,R as j,c as l,N as s,r as v,K as u,L as i,O as h,u as I,Q as b,P as _,S as g,F as L,Y as B}from"./vendor-DhFY8mDK.js";const ye={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},ve={key:0,style:{"text-align":"center",padding:"60px"}},_e={key:0,style:{color:"#e0e0e0","font-weight":"500"}},ge={key:1,style:{color:"var(--text-secondary)"}},he={key:0,style:{"margin-top":"16px"}},ke={key:0,style:{"text-align":"center",padding:"60px"}},xe={key:0,style:{color:"var(--text-secondary)","font-size":"12px","font-family":"monospace"}},be={key:1,style:{color:"#e0e0e0"}},we={key:2,style:{color:"var(--text-secondary)"}},Ce={key:4,style:{color:"var(--text-muted)","font-size":"12px"}},Ie={__name:"Permissions",setup(Re){const R=ce(),O=v("roles"),W=v(!1);async function q(){W.value=!0;try{O.value==="roles"?await P():O.value==="audit"&&await V()}finally{W.value=!1}}function Q(t){t==="roles"&&S.value.length===0&&P(),t==="audit"&&A.value.length===0&&V()}const z=v(!1),S=v([]),Y=[{title:"角色名",key:"name",dataIndex:"name",width:"160px"},{title:"描述",key:"description",dataIndex:"description",width:"240px"},{title:"权限",key:"permissions",dataIndex:"permissions"},{title:"用户数",key:"userCount",dataIndex:"userCount",width:"100px"}];async function P(){z.value=!0;try{const{output:t}=await R.execute("auth roles --json",15e3);S.value=K(t,H)}catch(t){J.error("加载角色列表失败: "+t.message)}finally{z.value=!1}}function H(t){const e=[],o=t.split(`
|
|
2
|
-
`);for(const p of o){const n=p.trim();if(!n||n.startsWith("─")||n.match(/^Role/i))continue;const r=n.split(/\s*[|│]\s*/);r.length>=2?e.push({key:e.length,name:r[0]||"-",description:r[1]||"",permissions:r[2]?r[2].split(/[,;\s]+/).filter(Boolean):[],userCount:r[3]&&parseInt(r[3],10)||0}):n.length>2&&e.push({key:e.length,name:n.slice(0,60),description:"",permissions:[],userCount:0})}return e}const C=v(""),w=v(""),M=v(!1),k=v(null),X=["note:read","note:write","admin:*","skill:execute"];async function Z(){if(!(!C.value.trim()||!w.value.trim())){M.value=!0,k.value=null;try{const t=`auth check ${C.value.trim()} "${w.value.trim()}"`,{output:e}=await R.execute(t,15e3),o=e.toLowerCase(),p=o.includes("allow")||o.includes("granted")||o.includes("true")||o.includes("yes"),n=o.includes("denied")||o.includes("reject")||o.includes("false")||o.includes("no permission");k.value={allowed:p&&!n,detail:e.trim()||(p?"用户拥有该权限":"用户没有该权限")}}catch(t){k.value={allowed:!1,detail:"检查失败: "+t.message}}finally{M.value=!1}}}const $=v(!1),A=v([]),E=v([]),ee=[{title:"时间",key:"timestamp",dataIndex:"timestamp",width:"180px"},{title:"事件",key:"event",dataIndex:"event",width:"200px"},{title:"用户",key:"user",dataIndex:"user",width:"120px"},{title:"级别",key:"level",dataIndex:"level",width:"80px"},{title:"详情",key:"detail",dataIndex:"detail",ellipsis:!0}];function te(t){return{info:"blue",warn:"orange",warning:"orange",error:"red",critical:"red"}[(t||"").toLowerCase()]||"default"}async function V(){$.value=!0;try{const[t,e]=await Promise.all([R.execute("audit log --json",15e3),R.execute("audit stats --json",15e3)]);A.value=K(t.output,ae),E.value=se(e.output)}catch(t){J.error("加载审计日志失败: "+t.message)}finally{$.value=!1}}function ae(t){const e=[],o=t.split(`
|
|
3
|
-
`);for(const p of o){const n=p.trim();if(!n||n.startsWith("─")||n.startsWith("Audit")||n.startsWith("Recent"))continue;const r=n.split(/\s*[|│]\s*/);if(r.length>=3){e.push({key:e.length,timestamp:r[0]||"-",event:r[1]||"-",user:r[2]||"-",level:r[3]||"info",detail:r.slice(4).join(" ")||""});continue}const y=n.match(/^(\d{4}-\d{2}-\d{2}[\sT]\d{2}:\d{2}(?::\d{2})?)\s+(.+)/);if(y){const m=y[2],f=m.match(/\b(INFO|WARN|WARNING|ERROR|CRITICAL)\b/i);e.push({key:e.length,timestamp:y[1],event:m.replace(/\b(INFO|WARN|WARNING|ERROR|CRITICAL)\b/i,"").trim().slice(0,80),user:"-",level:f?f[1].toLowerCase():"info",detail:""})}else n.length>3&&!n.match(/^\d+ event/i)&&e.push({key:e.length,timestamp:"-",event:n.slice(0,80),user:"-",level:"info",detail:""})}return e}function se(t){const e=F(t);if(e&&typeof e=="object"&&!Array.isArray(e)){const y=["#1677ff","#52c41a","#faad14","#ff4d4f"];return Object.entries(e).slice(0,4).map(([m,f],x)=>({label:m,value:typeof f=="number"?f:String(f),color:y[x%y.length]}))}const o=[],p=t.split(`
|
|
4
|
-
`),n=["#1677ff","#52c41a","#faad14","#ff4d4f"];let r=0;for(const y of p){const m=y.trim();if(!m||m.startsWith("─")||m.startsWith("Audit"))continue;const f=m.match(/^(.+?)\s*[:=]\s*(.+)$/);if(f){const x=f[1].trim(),N=f[2].trim(),T=N.match(/^(\d+)/);o.push({label:x,value:T?parseInt(T[1],10):N,color:n[r%n.length]}),r++}}return o.length===0&&o.push({label:"总事件数",value:A.value.length,color:"#1677ff"},{label:"状态",value:"就绪",color:"#52c41a"}),o}function F(t){try{const e=t.indexOf("[")!==-1?t.indexOf("["):t.indexOf("{");if(e===-1)return null;const o=t.lastIndexOf("]")!==-1?t.lastIndexOf("]")+1:t.lastIndexOf("}")+1;return JSON.parse(t.slice(e,o))}catch{return null}}function K(t,e){const o=F(t);return Array.isArray(o)?o.map((p,n)=>({key:n,...p})):e(t)}return fe(()=>{P()}),(t,e)=>{const o=u("a-button"),p=u("a-spin"),n=u("a-tag"),r=u("a-empty"),y=u("a-table"),m=u("a-tab-pane"),f=u("a-input"),x=u("a-form-item"),N=u("a-space"),T=u("a-form"),ne=u("a-alert"),U=u("a-card"),le=u("a-statistic"),oe=u("a-col"),ie=u("a-row"),re=u("a-tabs");return i(),d("div",null,[j("div",ye,[e[4]||(e[4]=j("div",null,[j("h2",{class:"page-title"},"权限管理"),j("p",{class:"page-sub"},"角色 / 权限检查 / 审计")],-1)),l(o,{type:"primary",ghost:"",loading:W.value,onClick:q},{icon:s(()=>[l(I(de))]),default:s(()=>[e[3]||(e[3]=h(" 刷新 ",-1))]),_:1},8,["loading"])]),l(re,{activeKey:O.value,"onUpdate:activeKey":e[2]||(e[2]=a=>O.value=a),type:"card",onChange:Q},{default:s(()=>[l(m,{key:"roles"},{tab:s(()=>[l(I(pe)),e[5]||(e[5]=h(" 角色列表 ",-1))]),default:s(()=>[z.value?(i(),d("div",ve,[l(p,{size:"large"})])):(i(),b(y,{key:1,columns:Y,"data-source":S.value,pagination:{pageSize:20,showTotal:a=>`共 ${a} 条`},size:"small",style:{background:"var(--bg-card)"},"row-class-name":()=>"perm-row"},{bodyCell:s(({column:a,record:c})=>[a.key==="name"?(i(),d("span",_e,_(c.name),1)):g("",!0),a.key==="description"?(i(),d("span",ge,_(c.description),1)):g("",!0),a.key==="permissions"?(i(),d(L,{key:2},[(i(!0),d(L,null,B((c.permissions||[]).slice(0,5),D=>(i(),b(n,{key:D,color:"blue",style:{"margin-bottom":"2px"}},{default:s(()=>[h(_(D),1)]),_:2},1024))),128)),(c.permissions||[]).length>5?(i(),b(n,{key:0,color:"default"},{default:s(()=>[h(" +"+_(c.permissions.length-5),1)]),_:2},1024)):g("",!0)],64)):g("",!0),a.key==="userCount"?(i(),b(n,{key:3,color:c.userCount>0?"green":"default"},{default:s(()=>[h(_(c.userCount??0),1)]),_:2},1032,["color"])):g("",!0)]),emptyText:s(()=>[l(r,{description:"暂无角色数据"})]),_:1},8,["data-source","pagination"]))]),_:1}),l(m,{key:"check"},{tab:s(()=>[l(I(G)),e[6]||(e[6]=h(" 权限检查 ",-1))]),default:s(()=>[l(U,{style:{background:"var(--bg-card)","border-color":"var(--border-color)","max-width":"640px"}},{default:s(()=>[l(T,{"label-col":{span:5},"wrapper-col":{span:19}},{default:s(()=>[l(x,{label:"用户 ID",required:""},{default:s(()=>[l(f,{value:C.value,"onUpdate:value":e[0]||(e[0]=a=>C.value=a),placeholder:"输入用户 ID"},null,8,["value"])]),_:1}),l(x,{label:"权限",required:""},{default:s(()=>[l(f,{value:w.value,"onUpdate:value":e[1]||(e[1]=a=>w.value=a),placeholder:"note:read"},null,8,["value"])]),_:1}),l(x,{"wrapper-col":{offset:5,span:19}},{default:s(()=>[l(N,{wrap:""},{default:s(()=>[l(o,{type:"primary",loading:M.value,disabled:!C.value.trim()||!w.value.trim(),onClick:Z},{icon:s(()=>[l(I(G))]),default:s(()=>[e[7]||(e[7]=h(" 检查权限 ",-1))]),_:1},8,["loading","disabled"]),(i(),d(L,null,B(X,a=>l(o,{key:a,size:"small",onClick:c=>w.value=a},{default:s(()=>[h(_(a),1)]),_:2},1032,["onClick"])),64))]),_:1})]),_:1})]),_:1}),k.value!==null?(i(),d("div",he,[l(ne,{message:k.value.allowed?"权限允许":"权限拒绝",description:k.value.detail,type:k.value.allowed?"success":"error","show-icon":""},null,8,["message","description","type"])])):g("",!0)]),_:1})]),_:1}),l(m,{key:"audit"},{tab:s(()=>[l(I(me)),e[8]||(e[8]=h(" 审计日志 ",-1))]),default:s(()=>[l(ie,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:s(()=>[(i(!0),d(L,null,B(E.value,a=>(i(),b(oe,{xs:12,sm:6,key:a.label},{default:s(()=>[l(U,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"},size:"small"},{default:s(()=>[l(le,{title:a.label,value:a.value,"value-style":{color:a.color,fontSize:"20px"}},null,8,["title","value","value-style"])]),_:2},1024)]),_:2},1024))),128))]),_:1}),$.value?(i(),d("div",ke,[l(p,{size:"large"})])):(i(),b(y,{key:1,columns:ee,"data-source":A.value,pagination:{pageSize:20,showTotal:a=>`共 ${a} 条`},size:"small",style:{background:"var(--bg-card)"},"row-class-name":()=>"perm-row"},{bodyCell:s(({column:a,record:c})=>[a.key==="timestamp"?(i(),d("span",xe,_(c.timestamp),1)):g("",!0),a.key==="event"?(i(),d("span",be,_(c.event),1)):g("",!0),a.key==="user"?(i(),d("span",we,_(c.user),1)):g("",!0),a.key==="level"?(i(),b(n,{key:3,color:te(c.level)},{default:s(()=>[h(_(c.level),1)]),_:2},1032,["color"])):g("",!0),a.key==="detail"?(i(),d("span",Ce,_(c.detail),1)):g("",!0)]),emptyText:s(()=>[l(r,{description:"暂无审计日志"})]),_:1},8,["data-source","pagination"]))]),_:1})]),_:1},8,["activeKey"])])}}},Te=ue(Ie,[["__scopeId","data-v-71782e36"]]);export{Te as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
[data-v-71782e36] .perm-row:hover td{background:var(--bg-card-hover)!important}[data-v-71782e36] .ant-tabs-tab{color:var(--text-secondary)!important}[data-v-71782e36] .ant-tabs-tab-active .ant-tabs-tab-btn{color:#1677ff!important}[data-v-71782e36] .ant-card-head{border-color:var(--border-color)!important;color:var(--text-primary)!important}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.hint[data-v-a608230c]{font-size:12px;color:var(--text-color-secondary, #888)}.vendor-card[data-v-a608230c]{cursor:pointer;border:1px solid transparent;transition:border-color .15s}.vendor-card.selected[data-v-a608230c]{border-color:#1677ff}.vendor-head[data-v-a608230c]{display:flex;justify-content:space-between;align-items:center;gap:8px;margin-bottom:4px}.vendor-actions[data-v-a608230c]{margin-top:6px;display:flex;justify-content:flex-end}.kv[data-v-a608230c]{font-size:12px}.howto[data-v-a608230c]{margin:0;padding-left:20px;font-size:13px}.howto li[data-v-a608230c]{margin-bottom:4px}kbd[data-v-a608230c]{background:#f0f0f0;border:1px solid #d9d9d9;border-radius:3px;padding:0 4px;font-family:monospace;font-size:12px}.hint[data-v-c7327e24],.kv[data-v-c7327e24]{font-size:12px;color:var(--text-color-secondary, #888)}.probe-result[data-v-c7327e24]{margin-top:8px}code[data-v-c7327e24]{background:#f0f0f0;padding:1px 4px;border-radius:3px;font-family:monospace;font-size:12px}.pdh-page[data-v-774f91c3]{padding:16px;max-width:1400px;margin:0 auto}.pdh-header[data-v-774f91c3]{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:24px;gap:16px;flex-wrap:wrap}.page-title[data-v-774f91c3]{margin:0 0 4px;font-size:22px;font-weight:600}.page-sub[data-v-774f91c3]{margin:0;color:var(--text-color-secondary, #888);font-size:13px}.kv[data-v-774f91c3]{font-size:13px;color:var(--text-color, #333);line-height:1.6}.kv.hint[data-v-774f91c3]{color:#faad14;font-size:12px;margin-top:4px}.answer[data-v-774f91c3]{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-774f91c3]{color:var(--text-color-secondary, #888);font-size:12px}.json-pre[data-v-774f91c3]{font-size:12px;background:var(--bg-elevated, #fafafa);padding:10px;border-radius:4px;max-height:280px;overflow:auto}.amount-in[data-v-774f91c3]{color:#52c41a;font-weight:600}.amount-out[data-v-774f91c3]{color:#ff4d4f;font-weight:600}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{w as pt,L as s,Q as g,N as a,c as o,M as m,R as p,F as W,Y as ue,Z as ft,P as r,O as n,S as f,a1 as vt,f as me,r as D,K as y,a as ve,a4 as ua,o as da,u as ne,a0 as ca,$ as pa}from"./vendor-DhFY8mDK.js";import{u as Qe}from"./usePersonalDataHub-BjAS9b7w.js";import{_ as Ye,d as v}from"./index-D0d2TS5o.js";import{R as ut,aB as fa,Q as va,al as ma,h as ya,aC as ga,x as _a,aD as ka,aE as ba,z as Aa,q as wa,aF as Ca,a3 as Ea,ad as Ia,aG as Sa,m as ha,e as dt}from"./icons--SBOhPAi.js";const Da={key:0},Oa={class:"vendor-head"},$a={class:"hint"},xa={class:"hint",style:{"margin-top":"4px"}},Pa={key:0,class:"hint",style:{"margin-top":"4px",color:"#ff4d4f"}},La={key:1},Ta={class:"hint"},Ua=["href"],Ma={class:"howto"},Ba=["href"],Na={key:3,style:{"margin-top":"8px"}},Ra={key:2,class:"kv",style:{"margin-top":"4px"}},Ha={key:3,class:"kv",style:{"margin-top":"4px",color:"#ff4d4f"}},Fa={key:2},za={__name:"AIChatWizard",props:{open:{type:Boolean,default:!1},existingAccounts:{type:Array,default:()=>[]}},emits:["update:open","registered"],setup(_e,{emit:Ee}){const A=_e,M=Ee,oe=[{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}],P=Qe(),k=D(1),S=D(null),x=D(""),T=D(null),N=D(null),G=D(null),J=ve({open:!1,probe:!1,register:!1}),U=me(()=>oe.find(w=>w.vendor===S.value)||{}),de=me(()=>k.value===1?"选择一家 AI 服务商":k.value===2?T.value?.fallbackMode==="paste"?"在外部浏览器登录,把 cookie 粘贴到下面":"在内嵌浏览器登录,主进程自动读取 cookie":"校验并写入本地加密 vault"),ye=me(()=>{const w=N.value;return w?w.reason==="UNKNOWN_VENDOR"?"未知厂商 — 请刷新页面或重选":w.reason==="PASTE_REQUIRED"?"请先粘贴 cookie 字符串":w.missingRequired?.length?`缺关键 cookie: ${w.missingRequired.join(", ")}`:w.reason||"cookie 校验失败":""}),L=me(()=>{const w=G.value;return w?w.reason==="REQUIRED_COOKIES_MISSING"?`缺关键 cookie: ${(w.missingRequired||[]).join(", ")}`:w.reason==="VALIDATE_COOKIE_FAILED"?"厂商拒绝该 cookie(可能已过期或被风控)":w.reason==="ADAPTER_THREW"?`Adapter 抛错: ${w.error||"网络错误"}`:w.reason==="UNKNOWN_VENDOR"?"未知厂商":w.reason||"注册失败":"未知错误"});function _(w){return A.existingAccounts.some(u=>u&&u.vendor===w)}function ie(w){return A.existingAccounts.find(u=>u&&u.vendor===w)||null}function V(w){const u=ie(w);return u?u.lastHealth?u.lastHealth.ok?"ok":u.lastHealth.reason==="SPEC_VERSION_MISMATCH"?"mismatch":"fail":"unknown":null}function le(w){const u=ie(w);if(!u||!u.lastHealth||u.lastHealth.ok)return"";const Q=u.lastHealth.reason;return Q?Q==="SPEC_VERSION_MISMATCH"?"cookie 规格已升级,请重新登录":Q==="ADAPTER_THREW"?"上次校验抛错,建议稍后重试":Q==="COOKIE_EXPIRED"?"Cookie 已过期,请重新登录":Q:"Cookie 校验失败,建议重新登录"}async function ce(w){try{(await P.unregisterAichat(w))?.ok&&M("registered",{vendor:w,accountId:null,unregistered:!0})}catch(u){G.value={ok:!1,reason:u?.message||"UNREGISTER_FAILED"}}}function pe(w){S.value=w}async function E(){if(S.value){J.open=!0,T.value=null,N.value=null,x.value="";try{if(T.value=await P.openAichatLogin(S.value),!T.value?.ok)return;k.value=2}catch(w){T.value={ok:!1,reason:w?.message||"OPEN_FAILED"}}finally{J.open=!1}}}async function z(){J.probe=!0,N.value=null;try{const w=x.value.trim(),u=w||void 0;N.value=await P.probeAichatCookies(S.value,u)}catch(w){N.value={ok:!1,reason:w?.message||"PROBE_FAILED"}}finally{J.probe=!1}}async function fe(){if(N.value?.ok){J.register=!0;try{G.value=await P.registerAichatVendor(S.value,N.value.cookies),k.value=3,G.value?.ok&&M("registered",{vendor:S.value,accountId:G.value.accountId})}catch(w){G.value={ok:!1,reason:w?.message||"REGISTER_FAILED"},k.value=3}finally{J.register=!1}}}function $(){k.value=1,S.value=null,x.value="",T.value=null,N.value=null,G.value=null}function Z(){$(),M("update:open",!1)}return pt(()=>A.open,w=>{w&&$()}),(w,u)=>{const Q=y("a-alert"),O=y("a-tag"),ee=y("a-button"),xe=y("a-popconfirm"),Ne=y("a-card"),Ie=y("a-col"),Re=y("a-row"),ke=y("a-collapse-panel"),H=y("a-collapse"),F=y("a-textarea"),h=y("a-form-item"),c=y("a-form"),Pe=y("a-result"),Le=y("a-space"),He=y("a-drawer");return s(),g(He,{open:_e.open,title:"添加 AI 对话账号",placement:"right",width:640,"destroy-on-close":!0,"onUpdate:open":u[4]||(u[4]=B=>M("update:open",B)),onClose:Z},{footer:a(()=>[o(Le,{style:{float:"right"}},{default:a(()=>[k.value>1&&k.value<3?(s(),g(ee,{key:0,onClick:u[3]||(u[3]=B=>k.value=k.value-1)},{default:a(()=>[...u[22]||(u[22]=[n("上一步",-1)])]),_:1})):f("",!0),o(ee,{onClick:Z},{default:a(()=>[...u[23]||(u[23]=[n("取消",-1)])]),_:1}),k.value===1?(s(),g(ee,{key:1,type:"primary",disabled:!S.value,loading:J.open,onClick:E},{default:a(()=>[...u[24]||(u[24]=[n(" 下一步 ",-1)])]),_:1},8,["disabled","loading"])):f("",!0),k.value===2&&T.value?.fallbackMode==="paste"?(s(),g(ee,{key:2,loading:J.probe,disabled:!x.value.trim(),onClick:z},{default:a(()=>[...u[25]||(u[25]=[n(" 检测 cookie ",-1)])]),_:1},8,["loading","disabled"])):f("",!0),k.value===2&&T.value?.fallbackMode!=="paste"?(s(),g(ee,{key:3,loading:J.probe,onClick:z},{default:a(()=>[...u[26]||(u[26]=[n(" 检测 cookie ",-1)])]),_:1},8,["loading"])):f("",!0),k.value===2?(s(),g(ee,{key:4,type:"primary",loading:J.register,disabled:!N.value?.ok,onClick:fe},{default:a(()=>[...u[27]||(u[27]=[n(" 注册 ",-1)])]),_:1},8,["loading","disabled"])):f("",!0)]),_:1})]),default:a(()=>[o(Q,{message:`第 ${k.value} / 3 步`,description:de.value,type:"info","show-icon":"",style:{"margin-bottom":"16px"}},null,8,["message","description"]),k.value===1?(s(),m("div",Da,[u[10]||(u[10]=p("p",{class:"hint"}," 选择要接入的 AI 服务商。登录后将本地读取 cookie 同步对话历史;cookie 仅落本机加密文件,不上传任何云端。 ",-1)),o(Re,{gutter:[12,12]},{default:a(()=>[(s(),m(W,null,ue(oe,B=>o(Ie,{xs:24,sm:12,md:8,key:B.vendor},{default:a(()=>[o(Ne,{size:"small",hoverable:"",class:ft(["vendor-card",{selected:S.value===B.vendor}]),onClick:Fe=>pe(B.vendor)},{default:a(()=>[p("div",Oa,[p("strong",null,r(B.displayName),1),V(B.vendor)==="fail"?(s(),g(O,{key:0,color:"red"},{default:a(()=>[...u[5]||(u[5]=[n("🔴 重新登录",-1)])]),_:1})):V(B.vendor)==="mismatch"?(s(),g(O,{key:1,color:"orange"},{default:a(()=>[...u[6]||(u[6]=[n("⚠ 规格升级",-1)])]),_:1})):V(B.vendor)==="unknown"?(s(),g(O,{key:2,color:"blue"},{default:a(()=>[...u[7]||(u[7]=[n("已接入·待巡检",-1)])]),_:1})):V(B.vendor)==="ok"?(s(),g(O,{key:3,color:"green"},{default:a(()=>[...u[8]||(u[8]=[n("✓ 已接入",-1)])]),_:1})):f("",!0)]),p("div",$a,r(B.notes),1),p("div",xa,[o(O,{color:"default"},{default:a(()=>[n(r(B.requiredCookies.length)+" 必需 cookie",1)]),_:2},1024),o(O,{color:"default"},{default:a(()=>[n("过期约 "+r(B.cookieMaxAgeHintDays)+" 天",1)]),_:2},1024)]),_(B.vendor)&&le(B.vendor)?(s(),m("div",Pa,r(le(B.vendor)),1)):f("",!0),_(B.vendor)?(s(),m("div",{key:1,class:"vendor-actions",onClick:u[0]||(u[0]=vt(()=>{},["stop"]))},[o(xe,{title:"注销该 AI 对话来源?历史事件仍可在 vault 中查询。","ok-text":"注销","cancel-text":"取消",onConfirm:Fe=>ce(B.vendor)},{default:a(()=>[o(ee,{size:"small",type:"text",danger:""},{default:a(()=>[...u[9]||(u[9]=[n("注销",-1)])]),_:1})]),_:1},8,["onConfirm"])])):f("",!0)]),_:2},1032,["class","onClick"])]),_:2},1024)),64))]),_:1})])):f("",!0),k.value===2&&T.value?(s(),m("div",La,[p("p",Ta,[p("strong",null,r(U.value.displayName),1),u[11]||(u[11]=n(" · ",-1)),p("a",{href:T.value.loginUrl,target:"_blank",rel:"noopener noreferrer"},r(T.value.loginUrl),9,Ua)]),T.value.fallbackMode==="paste"?(s(),g(Q,{key:0,message:T.value.helpText||"请在外部浏览器登录后从开发者工具复制全部 cookie 字符串粘贴到下方。",type:"warning","show-icon":"",style:{"margin-bottom":"12px"}},null,8,["message"])):(s(),g(Q,{key:1,message:"桌面端:请在弹出的内嵌浏览器窗口登录后点击 “检测 cookie”。",type:"info","show-icon":"",style:{"margin-bottom":"12px"}})),T.value.fallbackMode==="paste"?(s(),g(H,{key:2,bordered:!1,style:{"margin-bottom":"12px"}},{default:a(()=>[o(ke,{key:"howto",header:"如何获取 cookie 字符串?"},{default:a(()=>[p("ol",Ma,[p("li",null,[u[12]||(u[12]=n("用 Chrome / Edge 打开 ",-1)),p("a",{href:T.value.loginUrl,target:"_blank"},r(T.value.loginUrl),9,Ba)]),u[13]||(u[13]=p("li",null,"完成登录,进入对话页",-1)),u[14]||(u[14]=p("li",null,[n("按 "),p("kbd",null,"F12"),n(" 打开开发者工具 → "),p("strong",null,"Application"),n(" → "),p("strong",null,"Cookies")],-1)),u[15]||(u[15]=p("li",null,"选中域名 → 全选所有 cookie 行 → 用扩展(如 EditThisCookie)导出 “name=value; …” 串",-1)),u[16]||(u[16]=p("li",null,[n("或在 Console 执行 "),p("code",null,"document.cookie"),n(" 复制结果(注意:HTTP-Only cookie 取不到,仍需 Application 面板)")],-1)),u[17]||(u[17]=p("li",null,"粘贴到下方文本框,点 “检测 cookie”",-1))])]),_:1})]),_:1})):f("",!0),o(c,{layout:"vertical"},{default:a(()=>[o(h,{label:"Cookie 字符串"},{default:a(()=>[o(F,{value:x.value,"onUpdate:value":u[1]||(u[1]=B=>x.value=B),rows:6,placeholder:"name1=value1; name2=value2; name3=value3 …",autocomplete:"off"},null,8,["value"])]),_:1})]),_:1}),N.value?(s(),m("div",Na,[N.value.ok?(s(),g(Q,{key:0,type:"success","show-icon":"",message:`已识别 ${N.value.foundRequired.length} 个必需 cookie + ${N.value.foundOptional.length} 个可选 cookie`},null,8,["message"])):(s(),g(Q,{key:1,type:"error","show-icon":"",message:ye.value},null,8,["message"])),N.value.foundRequired?.length?(s(),m("div",Ra," ✓ "+r(N.value.foundRequired.join(", ")),1)):f("",!0),N.value.missingRequired?.length?(s(),m("div",Ha," 缺失: "+r(N.value.missingRequired.join(", ")),1)):f("",!0)])):f("",!0)])):f("",!0),k.value===3?(s(),m("div",Fa,[G.value?.ok?(s(),g(Pe,{key:0,status:"success",title:`${U.value.displayName} 已接入`,"sub-title":`accountId: ${G.value.accountId} · userId: ${G.value.validation?.userId||"匿名"}`},{extra:a(()=>[o(ee,{type:"primary",onClick:Z},{default:a(()=>[...u[18]||(u[18]=[n("完成",-1)])]),_:1}),o(ee,{onClick:$},{default:a(()=>[...u[19]||(u[19]=[n("再加一家",-1)])]),_:1})]),_:1},8,["title","sub-title"])):(s(),g(Pe,{key:1,status:"error",title:"接入失败","sub-title":L.value},{extra:a(()=>[o(ee,{type:"primary",onClick:u[2]||(u[2]=B=>k.value=2)},{default:a(()=>[...u[20]||(u[20]=[n("返回粘贴 cookie",-1)])]),_:1}),o(ee,{onClick:$},{default:a(()=>[...u[21]||(u[21]=[n("选其他厂商",-1)])]),_:1})]),_:1},8,["sub-title"]))])):f("",!0)]),_:1},8,["open"])}}},Ka=Ye(za,[["__scopeId","data-v-a608230c"]]),qa={key:0},Wa={key:0,class:"probe-result"},Va={key:0,class:"kv"},Qa={key:0,class:"kv"},Ya={key:1},Ga={key:2},Xa={key:2,style:{"margin-top":"12px"}},ja={__name:"WechatWizard",props:{open:{type:Boolean,default:!1}},emits:["update:open","registered"],setup(_e,{emit:Ee}){const A=_e,M=Ee,oe=Qe(),P=D(1),k=D(null),S=ve({uin:"",dbPath:"",wechatDataPath:"",forceProvider:null}),x=D(null),T=ve({probe:!1,register:!1}),N=me(()=>P.value===1?"探测设备 + WeChat 版本,确认可用的 keyProvider":P.value===2?"填 UIN 与已 adb-pull 的本地路径":"bootstrap 注册 + 持久化 wechat-accounts.json"),G=me(()=>{const L=x.value;return L?L.reason==="ENV_UNSUPPORTED"?L.message||"env-probe 拒绝 — 请回到第 1 步看 reasons":L.reason==="MD5_NEEDS_WECHAT_DATA_PATH"?"MD5 路径需要 wechatDataPath":L.reason==="FRIDA_NEEDS_WXID"?"Frida 路径需要 account.uin / wxid":L.reason==="ADAPTER_CTOR_FAILED"?`Adapter ctor 抛错: ${L.message||""}`:L.reason==="BOOTSTRAP_THREW"?`Bootstrap 抛错: ${L.message||""}`:L.reason==="UIN_REQUIRED"?"UIN 不能为空":L.message||L.reason||"注册失败":"未知错误"});async function J(){T.probe=!0;try{k.value=await oe.probeWechatEnv()}catch(L){k.value={ok:!1,suggestedKeyProvider:"unsupported",reasons:[L?.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{T.probe=!1}}async function U(){T.register=!0;try{x.value=await oe.registerWechat({account:{uin:S.uin},dbPath:S.dbPath||null,wechatDataPath:S.wechatDataPath||null,keyProviderOverride:S.forceProvider}),P.value=3,x.value?.ok&&M("registered",{uin:S.uin,chosenKeyProvider:x.value.chosenKeyProvider})}catch(L){x.value={ok:!1,reason:"BOOTSTRAP_THREW",message:L?.message||"RPC failed"},P.value=3}finally{T.register=!1}}function de(){P.value=1,k.value=null,S.uin="",S.dbPath="",S.wechatDataPath="",S.forceProvider=null,x.value=null}function ye(){de(),M("update:open",!1)}return pt(()=>A.open,L=>{L&&de()}),(L,_)=>{const ie=y("a-alert"),V=y("a-button"),le=y("a-tag"),ce=y("a-descriptions-item"),pe=y("a-descriptions"),E=y("a-input"),z=y("a-form-item"),fe=y("a-radio"),$=y("a-radio-group"),Z=y("a-form"),w=y("a-result"),u=y("a-space"),Q=y("a-drawer");return s(),g(Q,{open:_e.open,title:"添加 WeChat 账号",placement:"right",width:640,"destroy-on-close":!0,"onUpdate:open":_[8]||(_[8]=O=>M("update:open",O)),onClose:ye},{footer:a(()=>[o(u,{style:{float:"right"}},{default:a(()=>[P.value>1&&P.value<3?(s(),g(V,{key:0,onClick:_[6]||(_[6]=O=>P.value=P.value-1)},{default:a(()=>[..._[21]||(_[21]=[n("上一步",-1)])]),_:1})):f("",!0),o(V,{onClick:ye},{default:a(()=>[..._[22]||(_[22]=[n("取消",-1)])]),_:1}),P.value===1?(s(),g(V,{key:1,type:"primary",disabled:!k.value||k.value.suggestedKeyProvider==="unsupported",onClick:_[7]||(_[7]=O=>P.value=2)},{default:a(()=>[..._[23]||(_[23]=[n(" 下一步 ",-1)])]),_:1},8,["disabled"])):f("",!0),P.value===2?(s(),g(V,{key:2,type:"primary",loading:T.register,disabled:!S.uin||k.value?.suggestedKeyProvider==="md5"&&!S.wechatDataPath,onClick:U},{default:a(()=>[..._[24]||(_[24]=[n(" 注册 ",-1)])]),_:1},8,["loading","disabled"])):f("",!0)]),_:1})]),default:a(()=>[o(ie,{message:`第 ${P.value} / 3 步`,description:N.value,type:"info","show-icon":"",style:{"margin-bottom":"16px"}},null,8,["message","description"]),P.value===1?(s(),m("div",qa,[_[11]||(_[11]=p("p",{class:"hint"},[n(" 请用 USB 连接 Android 设备(开启 USB 调试)。WeChat ≥ 8.0 需要 root + frida-server。 探测仅读取 "),p("code",null,"adb shell"),n(" 命令输出,不写入任何东西。 ")],-1)),o(V,{type:"primary",loading:T.probe,onClick:J,style:{"margin-bottom":"12px"}},{default:a(()=>[..._[9]||(_[9]=[n(" 🔍 探测环境 ",-1)])]),_:1},8,["loading"]),k.value?(s(),m("div",Wa,[o(pe,{column:1,size:"small",bordered:""},{default:a(()=>[o(ce,{label:"suggestedKeyProvider"},{default:a(()=>[o(le,{color:k.value.suggestedKeyProvider==="unsupported"?"red":"green"},{default:a(()=>[n(r(k.value.suggestedKeyProvider),1)]),_:1},8,["color"])]),_:1}),o(ce,{label:"adb 设备"},{default:a(()=>[o(le,{color:k.value.device.reachable?"green":"red"},{default:a(()=>[n(r(k.value.device.reachable?"已连接":"未连接"),1)]),_:1},8,["color"]),k.value.device.serial?(s(),m("span",Va,r(k.value.device.serial)+" · abi="+r(k.value.device.abi||"?"),1)):f("",!0)]),_:1}),o(ce,{label:"root"},{default:a(()=>[o(le,{color:k.value.root.detected?"green":"default"},{default:a(()=>[n(r(k.value.root.detected?"已 root":"未 root"),1)]),_:1},8,["color"]),k.value.root.magiskInstalled?(s(),g(le,{key:0,color:"blue"},{default:a(()=>[..._[10]||(_[10]=[n("Magisk",-1)])]),_:1})):f("",!0)]),_:1}),o(ce,{label:"frida-server"},{default:a(()=>[o(le,{color:k.value.frida.serverRunning?"green":"default"},{default:a(()=>[n(r(k.value.frida.serverRunning?"运行中":"未运行"),1)]),_:1},8,["color"]),k.value.frida.port?(s(),m("span",Qa," :"+r(k.value.frida.port),1)):f("",!0)]),_:1}),o(ce,{label:"WeChat"},{default:a(()=>[o(le,{color:k.value.wechat.installed?"green":"red"},{default:a(()=>[n(r(k.value.wechat.installed?k.value.wechat.versionName:"未安装"),1)]),_:1},8,["color"])]),_:1})]),_:1}),(s(!0),m(W,null,ue(k.value.reasons||[],O=>(s(),g(ie,{key:O,message:O,type:"info","show-icon":"",style:{"margin-top":"8px"}},null,8,["message"]))),128)),(s(!0),m(W,null,ue(k.value.warnings||[],O=>(s(),g(ie,{key:O,message:O,type:"warning","show-icon":"",style:{"margin-top":"8px"}},null,8,["message"]))),128))])):f("",!0)])):f("",!0),P.value===2?(s(),m("div",Ya,[_[16]||(_[16]=p("p",{class:"hint"},[n(" 填写从 adb pull 拉下来的本地路径。MD5 路径(7.x)需要 "),p("code",null,"wechatDataPath"),n("; Frida 路径(8.0+)需要设备运行 frida-server。 ")],-1)),o(Z,{layout:"vertical"},{default:a(()=>[o(z,{label:"UIN / wxid",required:""},{default:a(()=>[o(E,{value:S.uin,"onUpdate:value":_[0]||(_[0]=O=>S.uin=O),placeholder:"WeChat 数字 UIN 或 wxid"},null,8,["value"])]),_:1}),o(z,{label:"dbPath(已拉下的 EnMicroMsg.db 本地路径)"},{default:a(()=>[o(E,{value:S.dbPath,"onUpdate:value":_[1]||(_[1]=O=>S.dbPath=O),placeholder:"C:\\\\users\\\\me\\\\pull\\\\EnMicroMsg.db"},null,8,["value"])]),_:1}),o(z,{label:"wechatDataPath(已拉下的 /data/data/com.tencent.mm/ 目录)"},{default:a(()=>[o(E,{value:S.wechatDataPath,"onUpdate:value":_[2]||(_[2]=O=>S.wechatDataPath=O),placeholder:"C:\\\\users\\\\me\\\\pull\\\\com.tencent.mm"},null,8,["value"]),_[12]||(_[12]=p("div",{class:"hint"},"MD5 路径必填;Frida 路径可空",-1))]),_:1}),o(z,{label:"强制 keyProvider(覆盖 env-probe 建议)"},{default:a(()=>[o($,{value:S.forceProvider,"onUpdate:value":_[3]||(_[3]=O=>S.forceProvider=O)},{default:a(()=>[o(fe,{value:null},{default:a(()=>[..._[13]||(_[13]=[n("自动(推荐)",-1)])]),_:1}),o(fe,{value:"md5"},{default:a(()=>[..._[14]||(_[14]=[n("md5",-1)])]),_:1}),o(fe,{value:"frida"},{default:a(()=>[..._[15]||(_[15]=[n("frida",-1)])]),_:1})]),_:1},8,["value"])]),_:1})]),_:1})])):f("",!0),P.value===3?(s(),m("div",Ga,[x.value?.ok?(s(),g(w,{key:0,status:"success",title:`WeChat 已接入 (uin=${S.uin})`,"sub-title":`provider=${x.value.chosenKeyProvider} · sensitivity=${x.value.sensitivity}`},{extra:a(()=>[o(V,{type:"primary",onClick:ye},{default:a(()=>[..._[17]||(_[17]=[n("完成",-1)])]),_:1}),o(V,{onClick:de},{default:a(()=>[..._[18]||(_[18]=[n("再加一个",-1)])]),_:1})]),_:1},8,["title","sub-title"])):(s(),g(w,{key:1,status:"error",title:"接入失败","sub-title":G.value},ua({_:2},[x.value?.probe?.reasons?.length?{name:"extra",fn:a(()=>[o(V,{onClick:_[4]||(_[4]=O=>P.value=1)},{default:a(()=>[..._[19]||(_[19]=[n("返回检查环境",-1)])]),_:1}),o(V,{onClick:_[5]||(_[5]=O=>P.value=2)},{default:a(()=>[..._[20]||(_[20]=[n("返回修改路径",-1)])]),_:1})]),key:"0"}:void 0]),1032,["sub-title"])),x.value?.probe?.reasons?.length?(s(),m("div",Xa,[(s(!0),m(W,null,ue(x.value.probe.reasons,O=>(s(),g(ie,{key:O,message:O,type:"warning","show-icon":"",style:{"margin-bottom":"4px"}},null,8,["message"]))),128))])):f("",!0)])):f("",!0)]),_:1},8,["open"])}}},Ja=Ye(ja,[["__scopeId","data-v-c7327e24"]]),Za={class:"pdh-page"},eo={class:"pdh-header"},to={class:"kv"},ao={key:0,class:"kv"},oo={key:1,class:"kv"},no={class:"kv"},lo={key:0,class:"kv hint"},so={style:{"margin-top":"12px",display:"flex","justify-content":"space-between","align-items":"center"}},io={key:0,style:{"margin-top":"12px"}},ro={key:1,style:{"margin-top":"12px"}},uo={class:"answer"},co={style:{"margin-top":"8px","font-size":"12px",color:"var(--text-color-secondary, #888)"}},po={key:2,style:{"margin-top":"8px"}},fo={style:{display:"flex","align-items":"center",gap:"8px"}},vo={class:"hint",style:{"margin-top":"4px"}},mo={key:0,style:{"margin-top":"16px"}},yo={class:"json-pre",style:{"max-height":"300px",overflow:"auto"}},go={key:0,style:{"margin-top":"8px"}},_o={key:0,style:{"margin-top":"4px",opacity:"0.85"}},ko={key:1,style:{"margin-top":"4px",color:"#ffb3b3"}},bo={style:{color:"#999","font-size":"12px","margin-left":"2px"}},Ao={key:0,style:{color:"#8c8c8c","font-size":"12px","margin-top":"2px","line-height":"1.4"}},wo={style:{"min-width":"220px"}},Co={style:{color:"#999","font-size":"12px","margin-left":"4px"}},Eo={key:2,style:{"margin-top":"12px"}},Io={class:"kv",style:{"margin-bottom":"4px"}},So={key:0,style:{color:"#faad14"}},ho={key:2,class:"kv hint"},Do={key:3,class:"kv hint",style:{color:"#ff4d4f"}},Oo={key:3,style:{"margin-top":"12px"}},$o={key:2,style:{"margin-top":"8px"}},xo={key:1},Po={style:{"margin-left":"8px"}},Lo={key:3,class:"json-pre"},To={style:{"margin-left":"6px"}},Uo={key:0,style:{"margin-left":"6px"}},Mo={key:0,class:"hint",style:{"margin-top":"4px"}},Bo={key:0,style:{"margin-top":"8px"}},No={style:{"margin-bottom":"12px"}},Ro={class:"hint"},Ho={class:"kv"},Fo={class:"kv",style:{"margin-top":"4px"}},zo={class:"kv"},Ko={key:0,class:"hint",style:{"margin-top":"4px"}},qo={key:1,style:{"font-size":"11px"}},Wo={style:{"font-weight":"600","margin-bottom":"8px"}},Vo={style:{margin:"0","padding-left":"20px","line-height":"1.9"}},Qo={key:0,style:{"margin-top":"6px","font-size":"12px",color:"#52c41a"}},Yo={style:{"font-size":"12px",color:"#999"}},ct="pdh.syncIncludeOptions.v1",Go={__name:"PersonalDataHub",setup(_e,{expose:Ee}){const A=Qe(),M=D(null),oe=D(null),P=D([]),k=D({}),S=D(""),x=D(null),T=D(""),N=D(!1),G=D(!1),J=D([]),U=D(null),de={"system-data-android":{contacts:!0,apps:!0,sms:!0,calls:!0}};function ye(){try{const e=localStorage.getItem(ct);if(!e)return JSON.parse(JSON.stringify(de));const t=JSON.parse(e);return{"system-data-android":{...de["system-data-android"],...t["system-data-android"]||{}}}}catch{return JSON.parse(JSON.stringify(de))}}const L=ve(ye());function _(){try{localStorage.setItem(ct,JSON.stringify(L)),console.log("[PDH-include] persisted:",JSON.stringify(L))}catch(e){console.warn("[PDH-include] persist failed:",e&&e.message)}}const ie=D({}),V={"system-data-android":[{key:"contacts",label:"联系人",hint:"~767 条"},{key:"apps",label:"已安装应用",hint:"~176 个"},{key:"sms",label:"短信内容",hint:"~2400 条 · 高敏感",sensitive:!0},{key:"calls",label:"通话记录",hint:"~18000 条 · 包含号码",sensitive:!0}]};function le(e){return Object.prototype.hasOwnProperty.call(V,e)}function ce(e,t,l){const d=l&&l.target?!!l.target.checked:!!l;console.log("[PDH-include] toggle",e,t,"=>",d),L[e]||(L[e]={}),L[e][t]=d,_()}const pe=D(!1),E=ve({provider:"qq",email:"",authCode:"",host:"",port:993,pdfPasswordHints:{idCardLast6:"",phoneLast6:"",cardLast6:""}}),z=D(null),fe=D(!1),$=D(null),Z=D(null),w=[{name:"analysis.spending",label:"消费分析",icon:ga,description:"总支出 / 商家排行 / 月度趋势"},{name:"analysis.relations",label:"人际关系",icon:_a,description:"与每个人的互动频率 / 主动比例"},{name:"analysis.footprint",label:"足迹",icon:ka,description:"常去地点 / 出行模式"},{name:"analysis.interests",label:"兴趣画像",icon:ba,description:"从购买 / 浏览 / 收藏抽兴趣"},{name:"analysis.timeline",label:"时间线",icon:Aa,description:"跨源事件串成故事"}],u=D(!1),Q=D([]),O=ve({queue:{pending:0},mergeGroups:0,reviewQueue:0}),ee=D(!1),xe=D([]);function Ne(e){e?.unregistered?v.success(`已注销 ${e.vendor}`):v.success(`已接入 ${e.vendor}`),q()}const Ie=D(!1);function Re(e){v.success(`WeChat 已接入 (uin=${e.uin}, provider=${e.chosenKeyProvider})`),q()}const ke=D(!1),H=ve({email:"",zipPassword:"",filePath:""}),F=D(null),h=ve({active:!1,adapter:"",phase:"",mailbox:"",current:0,total:0,attempt:1,errorMessage:""}),c=ve({refresh:!1,ask:!1,addMock:!1,syncAll:!1,sync:{},audit:!1,testEmail:!1,saveEmail:!1,eventDetail:!1,importAlipay:!1,reviewQueue:!1,resolverDrain:!1,skill:!1,bilibiliAdbSync:!1,bilibiliAdbDoctor:!1,douyinAdbSync:!1,weiboAdbSync:!1,xhsAdbSync:!1,toutiaoAdbSync:!1,kuaishouAdbSync:!1,bridgeDoctor:!1}),Pe=D(null);function Le(e){switch(e){case"BRIDGE_UNAVAILABLE":return"adb 未安装或不在 PATH — 请安装 Android Platform Tools 或设置 ADB_PATH 环境变量";case"MODULE_LOAD_FAILED":return"PDH adapter 模块缺失 — 请重装 cc";case"BILIBILI_NO_ROOT":return"手机未 root — Bilibili 正式版 APK 不是 debuggable,需 Magisk root 才能读 Cookies DB";case"BILIBILI_NOT_INSTALLED_OR_NEVER_LOGGED_IN":return"请在手机上安装 Bilibili App 并登录一次,然后重试";case"BILIBILI_COOKIES_INCOMPLETE":return"Cookie 缺关键字段 — 请在手机 Bilibili App 上重新登录";case"BILIBILI_COOKIES_TRUNCATED":return"ADB 流被截断 — 拔插 USB 重试,或检查 `adb logcat` 是否有 MIUI ROM 干扰";case"BILIBILI_NOT_SQLITE":return"ADB 拉回的文件不是 sqlite — 可能 base64 stream 被 MIUI/HyperOS 干扰,拔插 USB 重试";case"BILIBILI_INVALID_UID":return"Cookie 中 DedeUserID 不是正整数 — 请重新登录";default:return"同步失败 — 详见 message 字段"}}function He(e){switch(e){case"BRIDGE_UNAVAILABLE":return"adb 未安装或不在 PATH — 请安装 Android Platform Tools 或设置 ADB_PATH 环境变量";case"MODULE_LOAD_FAILED":return"PDH adapter 模块缺失 — 请重装 cc";case"DOUYIN_NO_ROOT":return"手机未 root — 抖音正式版 APK 不是 debuggable,需 Magisk root 才能读 IM 数据库";case"DOUYIN_NOT_INSTALLED":return"请在手机上安装抖音 App,然后重试";case"DOUYIN_NO_IM_DB":return"抖音 App 已装但未生成 IM 数据库 — 请登录抖音并打开任一聊天会话后重试";case"DOUYIN_MULTIPLE_USERS":return"此手机登录了多个抖音账号 — 请加 --uid <19位数字> 选一个";case"DOUYIN_UID_NOT_FOUND":return"指定的 uid 不在设备上的抖音账号列表里";case"DOUYIN_PULL_FAILED":return"ADB 流传输失败 — 拔插 USB 重试,或检查 `adb logcat` 是否有 MIUI ROM 干扰";case"DOUYIN_NOT_SQLITE":return"拉回的文件不是 sqlite — 可能 base64 stream 被 MIUI/HyperOS 干扰,拔插 USB 重试";default:return"同步失败 — 详见 message 字段"}}function B(e){switch(e){case"BRIDGE_UNAVAILABLE":return"adb 未安装或不在 PATH — 请安装 Android Platform Tools 或设置 ADB_PATH 环境变量";case"MODULE_LOAD_FAILED":return"PDH adapter 模块缺失 — 请重装 cc";case"WEIBO_NO_ROOT":return"手机未 root — 微博正式版 APK 不是 debuggable,需 Magisk root 才能读 Cookies DB";case"WEIBO_NOT_INSTALLED":return"请在手机上安装微博 App 并登录一次,然后重试 (或微博使用了非默认 WebView 数据目录)";case"WEIBO_COOKIES_EMPTY":return"ADB 流返 0 字节 — MIUI/HyperOS silent 失败?拔插 USB 重试";case"WEIBO_COOKIES_TRUNCATED":return"ADB 流被截断 — 拔插 USB 重试,或检查 `adb logcat` 是否有 MIUI ROM 干扰";case"WEIBO_NOT_SQLITE":return"拉回的文件不是 sqlite — 可能 base64 stream 被 MIUI 干扰,拔插 USB 重试";case"WEIBO_BASE64_PARSE":return"base64 解码失败 — adb 终端编码问题,请检查 `chcp 65001`";case"WEIBO_COOKIES_INCOMPLETE":return"SUB cookie 缺失 — 请在手机微博 App 上重新登录";default:return"同步失败 — 详见 message 字段"}}function Fe(e){switch(e){case"BRIDGE_UNAVAILABLE":return"adb 未安装或不在 PATH — 请安装 Android Platform Tools 或设置 ADB_PATH 环境变量";case"MODULE_LOAD_FAILED":return"PDH adapter 模块缺失 — 请重装 cc";case"XHS_NO_ROOT":return"手机未 root — 小红书正式版 APK 不是 debuggable,需 Magisk root 才能读 Cookies DB";case"XHS_NOT_INSTALLED":return"请在手机上安装小红书 App 并登录一次,然后重试";case"XHS_COOKIES_EMPTY":return"ADB 流返 0 字节 — MIUI/HyperOS silent 失败?拔插 USB 重试";case"XHS_COOKIES_TRUNCATED":return"ADB 流被截断 — 拔插 USB 重试,或检查 `adb logcat` 是否有 MIUI ROM 干扰";case"XHS_NOT_SQLITE":return"拉回的文件不是 sqlite — 可能 base64 stream 被 MIUI 干扰,拔插 USB 重试";case"XHS_BASE64_PARSE":return"base64 解码失败 — adb 终端编码问题,请检查 `chcp 65001`";case"XHS_COOKIES_INCOMPLETE":return"a1 或 web_session cookie 缺失 — 请在手机小红书 App 上重新登录 (X-S 签名需要 a1 字段)";default:return"同步失败 — 详见 message 字段"}}async function mt(){if(!c.xhsAdbSync){c.xhsAdbSync=!0;try{const e=await A.xhsAdbSync({});if(!e||!e.ok){const C=e&&e.reason||"SYNC_FAILED",I=Fe(C),R=e&&e.message||"";v.error({content:`Xhs ADB 同步失败:${I}`,description:R,duration:8});return}const t=e.report||{},l=t.xhs||{},d=l.eventCounts||{};l.meFetchFailed?v.warning({content:"Xhs 同步未拉到 user_id — /user/me 返空 data",description:`lastErrorCode=${l.lastErrorCode}, ${l.lastErrorMessage||""}。可能 cookie 已过期或 web_session 缺失,请在手机重新登录。`,duration:10}):l.lastErrorCode===461?v.warning({content:"Xhs X-S 签名被拒 (461) — 部分接口未抓到",description:`命中 ${d.total||0} events。我们的 X-S 算法 best-effort (~60% GET / <30% POST hit),461 在 POST 较常见。稍后重试 (X-S 算法可能 4-8 周 rotate)。`,duration:10}):l.lastErrorCode?v.warning({content:`Xhs 同步部分完成 (${d.total||0} events)`,description:`lastErrorCode=${l.lastErrorCode}, ${l.lastErrorMessage||""}`,duration:8}):v.success(`Xhs 同步成功:notes=${d.note||0} / liked=${d.liked||0} / follow=${d.follow||0} (total=${d.total||0})${l.nickname?" ["+l.nickname+"]":""}`),U.value=t,q()}catch(e){v.error({content:"Xhs ADB 同步异常",description:e&&e.message?e.message:String(e),duration:8})}finally{c.xhsAdbSync=!1}}}function yt(e){switch(e){case"BRIDGE_UNAVAILABLE":return"adb 未安装或不在 PATH — 请安装 Android Platform Tools 或设置 ADB_PATH 环境变量";case"MODULE_LOAD_FAILED":return"PDH adapter 模块缺失 — 请重装 cc";case"TOUTIAO_NO_ROOT":return"手机未 root — 头条正式版 APK 不是 debuggable,需 Magisk root 才能读 Cookies DB";case"TOUTIAO_NOT_INSTALLED":return"请在手机上安装今日头条 App(com.ss.android.article.news,不是极速版)并登录后随便点开一篇文章(让 WebView 写入 cookies),再重试";case"TOUTIAO_COOKIES_EMPTY":return"ADB 流返 0 字节 — MIUI/HyperOS silent 失败?拔插 USB 重试";case"TOUTIAO_COOKIES_TRUNCATED":return"ADB 流被截断 — 拔插 USB 重试,或检查 `adb logcat` 是否有 MIUI ROM 干扰";case"TOUTIAO_NOT_SQLITE":return"拉回的文件不是 sqlite — 可能 base64 stream 被 MIUI 干扰,拔插 USB 重试";case"TOUTIAO_BASE64_PARSE":return"base64 解码失败 — adb 终端编码问题,请检查 `chcp 65001`";case"TOUTIAO_COOKIES_INCOMPLETE":return"sessionid / sessionid_ss cookie 缺失 — 请在手机头条 App 上重新登录";default:return"同步失败 — 详见 message 字段"}}async function gt(){if(!c.toutiaoAdbSync){c.toutiaoAdbSync=!0;try{const e=await A.toutiaoAdbSync({});if(!e||!e.ok){const C=e&&e.reason||"SYNC_FAILED",I=yt(C),R=e&&e.message||"";v.error({content:`Toutiao ADB 同步失败:${I}`,description:R,duration:8});return}const t=e.report||{},l=t.toutiao||{},d=l.eventCounts||{};l.profileFetchFailed?v.warning({content:"Toutiao 同步未拉到 user_id — passport/info/v2 返失败",description:`lastErrorCode=${l.lastErrorCode}, ${l.lastErrorMessage||""}。可能 cookie 已过期或 sessionid 缺失,请在手机重新登录。`,duration:10}):l.signProviderUsed==="none"&&d.feed===0&&d.collection===0&&d.search===0?v.warning({content:`Toutiao 同步仅获取了 profile (${d.profile||0} event)`,description:"当前 web-shell 上下文不支持 _signature 签名(仅 desktop app 提供 ToutiaoSignBridge)。打开桌面 app 同步可获取 feed / collection / search。",duration:12}):l.lastErrorCode?v.warning({content:`Toutiao 同步部分完成 (${d.total||0} events)`,description:`lastErrorCode=${l.lastErrorCode}, ${l.lastErrorMessage||""}`,duration:8}):v.success(`Toutiao 同步成功:profile=${d.profile||0} / feed=${d.feed||0} / collection=${d.collection||0} / search=${d.search||0} (total=${d.total||0})${l.nickname?" ["+l.nickname+"]":""}`),U.value=t,q()}catch(e){v.error({content:"Toutiao ADB 同步异常",description:e&&e.message?e.message:String(e),duration:8})}finally{c.toutiaoAdbSync=!1}}}function _t(e){switch(e){case"BRIDGE_UNAVAILABLE":return"adb 未安装或不在 PATH — 请安装 Android Platform Tools 或设置 ADB_PATH 环境变量";case"MODULE_LOAD_FAILED":return"PDH adapter 模块缺失 — 请重装 cc";case"KUAISHOU_NO_ROOT":return"手机未 root — 快手正式版 APK 不是 debuggable,需 Magisk root 才能读 Cookies DB";case"KUAISHOU_NOT_INSTALLED":return"请在手机上安装快手 App(com.smile.gifmaker,不是极速版 com.kuaishou.nebula)并登录后随便看一个视频(让 WebView 写入 cookies),再重试";case"KUAISHOU_COOKIES_EMPTY":return"ADB 流返 0 字节 — MIUI/HyperOS silent 失败?拔插 USB 重试";case"KUAISHOU_COOKIES_TRUNCATED":return"ADB 流被截断 — 拔插 USB 重试,或检查 `adb logcat` 是否有 MIUI ROM 干扰";case"KUAISHOU_NOT_SQLITE":return"拉回的文件不是 sqlite — 可能 base64 stream 被 MIUI 干扰,拔插 USB 重试";case"KUAISHOU_BASE64_PARSE":return"base64 解码失败 — adb 终端编码问题,请检查 `chcp 65001`";case"KUAISHOU_COOKIES_INCOMPLETE":return"userId / kuaishou.web.cp.api_ph cookie 缺失 — 请在手机快手 App 上重新登录";default:return"同步失败 — 详见 message 字段"}}async function kt(){if(!c.kuaishouAdbSync){c.kuaishouAdbSync=!0;try{const e=await A.kuaishouAdbSync({});if(!e||!e.ok){const C=e&&e.reason||"SYNC_FAILED",I=_t(C),R=e&&e.message||"";v.error({content:`Kuaishou ADB 同步失败:${I}`,description:R,duration:8});return}const t=e.report||{},l=t.kuaishou||{},d=l.eventCounts||{};l.profileFetchFailed?v.warning({content:"Kuaishou 同步 cookie 缺 api_ph payload",description:`lastErrorCode=${l.lastErrorCode}, ${l.lastErrorMessage||""}。可能 cookie 已过期或登录态不完整(仅有 userId 但没有 api_ph),请在手机重新登录。`,duration:10}):l.signProviderUsed==="none"&&d.watch===0&&d.collect===0&&d.search===0?v.warning({content:`Kuaishou 同步仅获取了 profile (${d.profile||0} event)`,description:"当前 web-shell 上下文不支持 __NS_sig3 签名(仅 desktop app 提供 KuaishouSignBridge)。打开桌面 app 同步可获取 watch / collect / search。",duration:12}):l.lastErrorCode?v.warning({content:`Kuaishou 同步部分完成 (${d.total||0} events)`,description:`lastErrorCode=${l.lastErrorCode}, ${l.lastErrorMessage||""}`,duration:8}):v.success(`Kuaishou 同步成功:profile=${d.profile||0} / watch=${d.watch||0} / collect=${d.collect||0} / search=${d.search||0} (total=${d.total||0})${l.nickname?" ["+l.nickname+"]":""}`),U.value=t,q()}catch(e){v.error({content:"Kuaishou ADB 同步异常",description:e&&e.message?e.message:String(e),duration:8})}finally{c.kuaishouAdbSync=!1}}}async function bt(){if(!c.bridgeDoctor){c.bridgeDoctor=!0;try{const e=await A.bridgeDoctor();if(!e||!e.ok){const Y=e&&e.reason||"BRIDGE_DOCTOR_FAILED",te=e&&e.message||"";Y==="MODULE_LOAD_FAILED"?v.error({content:"Bridge doctor 不可用",description:"当前上下文不是 Electron desktop app(cli / web-shell-only 无 sign-bridge 模块)。请从桌面 app 运行此诊断。",duration:10}):v.error({content:`Bridge doctor 失败:${Y}`,description:te,duration:8});return}const t=e.results||{},l=["xhs","toutiao","kuaishou"],d=l.filter(Y=>t[Y]&&t[Y].anyCandidatePresent).length,C=l.length,I=[];for(const Y of l){const te=t[Y];if(!te||!te.ok){I.push(`${Y}: ✗ ${te&&te.error?te.error:"unknown error"}`);continue}const he=te.candidates||{},De=Object.keys(he).filter(Oe=>he[Oe]===!0),ae=Object.keys(he).length,re=te.anyCandidatePresent?"✓":"⚠",Ke=te.anyCandidatePresent?`${De.length}/${ae} candidate(s): ${De.join(", ")}`:`0/${ae} candidates (rotation? 需更新 buildSignScript)`;I.push(`${Y}: ${re} ${Ke} (warmUp=${te.warmUpMs}ms, probe=${te.probeMs}ms)`)}(d===C?v.success:d===0?v.error:v.warning)({content:`Bridge doctor: ${d}/${C} 平台签名可用`,description:I.join(`
|
|
2
|
-
`),duration:15}),Pe.value=e}catch(e){v.error({content:"Bridge doctor 异常",description:e&&e.message?e.message:String(e),duration:8})}finally{c.bridgeDoctor=!1}}}async function At(){if(!c.weiboAdbSync){c.weiboAdbSync=!0;try{const e=await A.weiboAdbSync({});if(!e||!e.ok){const C=e&&e.reason||"SYNC_FAILED",I=B(C),R=e&&e.message||"";v.error({content:`Weibo ADB 同步失败:${I}`,description:R,duration:8});return}const t=e.report||{},l=t.weibo||{},d=l.eventCounts||{};l.uidFetchFailed?v.warning({content:"Weibo 同步未拉到 UID — /api/config 返 login=false",description:`lastErrorCode=${l.lastErrorCode}, ${l.lastErrorMessage||""}。可能 cookie 已过期 (请在手机重新登录) 或微博触发 anti-bot redirect。事件数 0,未入 vault。`,duration:10}):l.lastErrorCode?v.warning({content:`Weibo 同步部分完成 (${d.total||0} events)`,description:`lastErrorCode=${l.lastErrorCode}, ${l.lastErrorMessage||""} — 部分接口受反爬限制,稍后重试可补齐`,duration:8}):v.success(`Weibo 同步成功:posts=${d.post||0} / fav=${d.favourite||0} / follow=${d.follow||0} (total=${d.total||0})`),U.value=t,q()}catch(e){v.error({content:"Weibo ADB 同步异常",description:e&&e.message?e.message:String(e),duration:8})}finally{c.weiboAdbSync=!1}}}async function wt(){if(!c.douyinAdbSync){c.douyinAdbSync=!0;try{const e=await A.douyinAdbSync({});if(!e||!e.ok){const I=e&&e.reason||"SYNC_FAILED",R=He(I),Y=e&&e.message||"";v.error({content:`Douyin ADB 同步失败:${R}`,description:Y,duration:8});return}const t=e.report||{},l=t.douyin||{},d=l.eventCounts||{},C=l.parserDiagnostic||{};if(!C.hadMsgTable&&!C.hadSimpleUserTable)v.warning({content:"Douyin 同步完成但 0 events",description:"msg 和 SIMPLE_USER 表都未在 IM 数据库中找到 — 抖音 App 版本可能用了不同 schema",duration:10});else if(!C.hadMsgTable||!C.hadSimpleUserTable){const I=[];C.hadMsgTable||I.push("msg (私信)"),C.hadSimpleUserTable||I.push("SIMPLE_USER (联系人)"),v.warning({content:`Douyin 部分同步:msg=${d.message||0} contacts=${d.contact||0}`,description:`${I.join("、")} 表未找到,未入库部分数据`,duration:8})}else v.success(`Douyin 同步成功:messages=${d.message||0} contacts=${d.contact||0} (total=${d.total||0})`);U.value=t,q()}catch(e){v.error({content:"Douyin ADB 同步异常",description:e&&e.message?e.message:String(e),duration:8})}finally{c.douyinAdbSync=!1}}}async function Ct(){if(!c.bilibiliAdbDoctor){c.bilibiliAdbDoctor=!0;try{const e=await A.bilibiliAdbDoctor();if(!e||!e.ok){const l=e&&e.reason||"PROBE_FAILED",d=Le(l),C=e&&e.message||"";v.error({content:`Bilibili 诊断失败:${d}`,description:C,duration:8});return}const t=e.cookieDiagnostic||{};t.hadEncrypted?v.warning({content:`Bilibili 环境就绪 (uid=${e.uid}) — 但发现 Keystore 加密 cookie`,description:`cookies 数=${t.cookieCount||"?"}; 部分行使用 Android Keystore 加密 (跳过)。可能是较新 Bilibili App + Android 14+。可继续同步,但可能数据不全。`,duration:10}):v.success(`Bilibili 环境就绪 — uid=${e.uid}, 找到 ${t.cookieCount||"?"} 个 cookie,可以同步`)}catch(e){v.error({content:"Bilibili 诊断异常",description:e&&e.message?e.message:String(e),duration:8})}finally{c.bilibiliAdbDoctor=!1}}}async function Et(){if(!c.bilibiliAdbSync){c.bilibiliAdbSync=!0;try{const e=await A.bilibiliAdbSync({});if(!e||!e.ok){const C=e&&e.reason||"SYNC_FAILED",I=Le(C),R=e&&e.message||"";v.error({content:`Bilibili ADB 同步失败:${I}`,description:R,duration:8});return}const t=e.report||{},l=t.bilibili||{},d=l.eventCounts||{};l.lastErrorCode?v.warning({content:`Bilibili 同步部分完成 (${d.total||0} events)`,description:`lastErrorCode=${l.lastErrorCode}, ${l.lastErrorMessage||""} — 部分接口受反爬限制,稍后重试可补齐`,duration:8}):v.success(`Bilibili 同步成功:history=${d.history||0} / fav=${d.favourite||0} / dyn=${d.dynamic||0} / follow=${d.follow||0} (total=${d.total||0})`),U.value=t,q()}catch(e){v.error({content:"Bilibili ADB 同步异常",description:e&&e.message?e.message:String(e),duration:8})}finally{c.bilibiliAdbSync=!1}}}const It=[{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 X(e){return k.value[e]||null}const be=D(!1),K=D(null);function St(e){const t=X(e);K.value=t||{name:e,status:"needs_setup",guide:null},be.value=!0}const ht={ready:"green",needs_setup:"orange",unavailable:"default",error:"red"};function Ge(e){return ht[e]||"default"}const Dt={ready:"可采集",needs_setup:"待配置",unavailable:"不支持",error:"异常"};function Xe(e){return e?Dt[e.status]||e.status:"检测中"}const Ot={local:"本机直采",snapshot:"需手机采集",device:"需 root/本地解密",credential:"需登录授权",platform:"平台限制"};function je(e){return Ot[e]||e||""}const $t=new Set(["apple-health","alipay-bill","finance-alipay","netease-music","wechat-pc","qq-pc","dingtalk-pc","feishu-pc","social-douyin","messaging-telegram","messaging-whatsapp","travel-amap"]),xt=new Set(["wechat-pc","qq-pc","dingtalk-pc","feishu-pc"]),Pt=new Set(["weread"]);function Ae(e){return e?Pt.has(e.name)?"cookie":$t.has(e.name)?"file":e.category==="local"?"sync":"snapshot":"snapshot"}function Lt(e){const t=Ae(e);return t==="file"?"📂 选择文件采集":t==="cookie"?"🔑 登录采集":t==="sync"?"⚡ 立即采集":"立即同步"}async function Je(e){const t=X(e),l=Ae(t);if(l==="file"){const d=await A.pickFile({title:`选择 ${t&&t.guide?t.guide.displayName:e} 的数据文件`});if(!d){v.info("已取消选择文件");return}let C;xt.has(e)&&(C=window.prompt("如该数据库已解密为明文,直接确定即可;若为加密库请粘贴 64 位十六进制密钥:")||void 0),await Ut(e,d,C)}else if(l==="cookie"){const d=window.prompt("粘贴登录态 Cookie(在已登录的网页 DevTools → Application → Cookies 复制,或整条 Cookie 请求头):");if(!d||!d.trim()){v.info("已取消");return}await Tt(e,d.trim())}else await Ft(e),be.value=!1}async function Tt(e,t){c.sync[e]=!0,Te(e);try{const l={cookie:t};typeof A.syncAdapterStream=="function"?U.value=await A.syncAdapterStream(e,l,Ue):U.value=await A.syncAdapter(e,l);const d=U.value&&U.value.entityCounts||{},C=(d.events||0)+(d.persons||0)+(d.items||0)+(d.topics||0);v.success(`采集完成:${e} 入库 ${C} 条`),be.value=!1,await q()}catch(l){v.error(`采集 ${e} 失败: ${l.message}`)}finally{c.sync[e]=!1,h.active=!1}}async function Ut(e,t,l){c.sync[e]=!0,Te(e);try{const d={inputPath:t};l&&(d.key=l),typeof A.syncAdapterStream=="function"?U.value=await A.syncAdapterStream(e,d,Ue):U.value=await A.syncAdapter(e,d);const C=U.value&&U.value.entityCounts||{},I=(C.events||0)+(C.persons||0)+(C.items||0)+(C.topics||0);v.success(`采集完成:${e} 入库 ${I} 条`),be.value=!1,await q()}catch(d){v.error(`采集 ${e} 失败: ${d.message}`)}finally{c.sync[e]=!1,h.active=!1}}const Se=me(()=>{const e=P.value||[];if(!e.length)return null;let t=0;for(const l of e){const d=X(l.name);d&&d.ready&&(t+=1)}return{ready:t,total:e.length}}),Mt=[{title:"时间",key:"at",dataIndex:"at",width:170},{title:"动作",dataIndex:"action",key:"action",width:200},{title:"详情",key:"details"}],Bt=[{title:"日期",key:"occurredAt",width:100},{title:"描述",dataIndex:"description",key:"description"},{title:"金额",key:"amount",width:140,align:"right"}];function Nt(e){return e==="high"?"red":e==="medium"?"orange":"default"}function Rt(e){if(!e)return"";const t=e.entityCounts||{},l=`events=${t.events??0} persons=${t.persons??0} | raw=${e.rawCount??0} invalid=${e.invalidCount??0} | KG triples=${e.kgTripleCount??0} RAG docs=${e.ragDocCount??0} | ${e.durationMs??0}ms`;return e.error?`${l} · 错误: ${e.error}`:l}async function q(){c.refresh=!0;try{M.value=await A.health(),oe.value=await A.stats(),P.value=await A.listAdapters();try{const e=await A.adapterReadiness(),t={};for(const l of Array.isArray(e)?e:[])t[l.name]=l;k.value=t}catch{}try{xe.value=await A.listAichatAccounts()}catch{}}catch(e){v.error("刷新失败: "+e.message)}finally{c.refresh=!1}}async function Ze(){if(S.value.trim()){c.ask=!0,T.value="",x.value=null;try{x.value=await A.ask(S.value.trim(),{acceptNonLocal:N.value})}catch(e){T.value=e.message}finally{c.ask=!1}}}async function Ht(){c.addMock=!0;try{await A.registerMock({count:30,seed:Date.now()%1e3}),await q(),v.success("MockAdapter 已注册(30 条 mock 数据 ready 同步)")}catch(e){v.error("注册失败: "+e.message)}finally{c.addMock=!1}}function Te(e=""){h.active=!0,h.adapter=e,h.phase="starting",h.mailbox="",h.current=0,h.total=0,h.attempt=1,h.errorMessage=""}function Ue(e){e&&(e.adapter&&(h.adapter=e.adapter),e.phase&&(h.phase=e.phase),typeof e.current=="number"&&(h.current=e.current),typeof e.total=="number"&&(h.total=e.total),typeof e.attempt=="number"&&(h.attempt=e.attempt),e.mailbox&&(h.mailbox=e.mailbox),e.phase==="error"&&(h.errorMessage=e.message||"sync error"))}async function Ft(e){c.sync[e]=!0,Te(e);try{const t=L[e],l=t?{include:{...t}}:{};typeof A.syncAdapterStream=="function"?U.value=await A.syncAdapterStream(e,l,Ue):U.value=await A.syncAdapter(e,l),await q()}catch(t){v.error(`同步 ${e} 失败: ${t.message}`)}finally{c.sync[e]=!1,h.active=!1}}async function zt(){c.syncAll=!0,Te("(all)");try{const e=typeof A.syncAllStream=="function"?await A.syncAllStream({},Ue):await A.syncAll();U.value=e?.[e.length-1]||null,await q(),v.success(`已同步 ${e?.length||0} 个 adapter`)}catch(e){v.error("同步失败: "+e.message)}finally{c.syncAll=!1,h.active=!1}}async function Kt(e){try{await A.unregister(e),await q()}catch(t){v.error("移除失败: "+t.message)}}async function qt(e){if(e){c.audit=!0;try{J.value=await A.recentAudit({limit:200})}catch(t){v.error("审计日志加载失败: "+t.message)}finally{c.audit=!1}}}const Me=me(()=>!(!E.email||!E.email.includes("@")||!E.authCode||E.authCode.length<4||E.provider==="custom"&&!E.host));function Wt(e){return{qq:"QQ: 邮箱 → 设置 → 账户 → IMAP/SMTP → 开启 → 生成授权码",163:"163: 邮箱 → 设置 → POP3/SMTP/IMAP → 开启 IMAP/SMTP 服务 → 授权密码",189:"189: 设置 → 第三方客户端授权码",outlook:"Outlook: account.microsoft.com/security → App password",gmail:"Gmail: myaccount.google.com/apppasswords (需开启 2FA)",custom:"联系你的邮箱管理员获取 IMAP 端点 + app-password"}[e]||"请输入服务商授权码(不是登录密码)"}function et(){E.provider="qq",E.email="",E.authCode="",E.host="",E.port=993,E.pdfPasswordHints={idCardLast6:"",phoneLast6:"",cardLast6:""},z.value=null}function tt(){const e={provider:E.provider,email:E.email.trim(),authCode:E.authCode};return E.provider==="custom"&&(e.host=E.host.trim(),e.port=E.port||993,e.secure=!0),e}function Vt(){const e={};for(const t of Object.keys(E.pdfPasswordHints)){const l=E.pdfPasswordHints[t];typeof l=="string"&&l.trim().length>0&&(e[t]=l.trim())}return Object.keys(e).length>0?e:null}async function Qt(){if(Me.value){c.testEmail=!0,z.value=null;try{z.value=await A.testEmailAuth(tt())}catch(e){z.value={ok:!1,error:e.message}}finally{c.testEmail=!1}}}async function Yt(){if(!(!Me.value||!z.value?.ok)){c.saveEmail=!0;try{const e={},t=Vt();t&&(e.pdfPasswordHints=t),await A.registerEmail(tt(),e),v.success("邮箱账号已注册"),pe.value=!1,et(),await q()}catch(e){v.error("保存失败: "+e.message)}finally{c.saveEmail=!1}}}const at=me(()=>!(!H.email||!H.email.includes("@")||!H.filePath||H.filePath.length<3));function Gt(){H.email="",H.zipPassword="",H.filePath="",F.value=null}async function Xt(){if(at.value){c.importAlipay=!0,F.value=null;try{await A.registerAlipay({email:H.email.trim(),zipPassword:H.zipPassword||void 0});const t=/\.zip$/i.test(H.filePath)?{zipPath:H.filePath,zipPassword:H.zipPassword||void 0}:{csvPath:H.filePath};F.value=await A.importAlipayBill(t),F.value?.status==="ok"?(v.success(`导入成功 — ${F.value.entityCounts?.events||0} 笔交易`),await q()):v.error("导入失败: "+(F.value?.error||F.value?.status))}catch(e){F.value={status:"error",error:e.message},v.error("导入失败: "+e.message)}finally{c.importAlipay=!1}}}async function ot(e){if(e){c.eventDetail=!0,fe.value=!0;try{$.value=await A.eventDetail(e)}catch(t){$.value=null,v.error("事件详情加载失败: "+t.message)}finally{c.eventDetail=!1}}}Ee({showEventDetail:ot});async function jt(e){c.skill=!0,Z.value=null;try{Z.value=await A.runSkill(e,{})}catch(t){v.error(`${e} 失败: ${t.message}`)}finally{c.skill=!1}}async function Be(){c.reviewQueue=!0;try{Q.value=await A.reviewQueueList(50);const e=await A.resolverStats();Object.assign(O,e)}catch(e){v.error("待消歧加载失败: "+e.message)}finally{c.reviewQueue=!1}}async function Jt(){u.value=!0,await Be()}async function ze(e,t){try{await A.reviewDecision(e,t),v.success(`已记录决策: ${t}`),await Be()}catch(l){v.error("决策失败: "+l.message)}}async function Zt(){c.resolverDrain=!0;try{const e=await A.resolverDrain(20);v.success(`drain 完成 — same=${e.same} different=${e.different} review=${e.review}`),await Be()}catch(e){v.error("drain 失败: "+e.message)}finally{c.resolverDrain=!1}}async function ea(){try{const e=await A.resolverStats();Object.assign(O,e)}catch{}}return da(()=>{q(),ea()}),(e,t)=>{const l=y("a-button"),d=y("a-badge"),C=y("a-space"),I=y("a-tag"),R=y("a-card"),Y=y("a-col"),te=y("a-row"),he=y("a-textarea"),De=y("a-checkbox"),ae=y("a-alert"),re=y("a-divider"),Ke=y("a-spin"),Oe=y("a-tooltip"),ta=y("a-popover"),aa=y("a-popconfirm"),qe=y("a-table"),We=y("a-empty"),nt=y("a-progress"),we=y("a-select-option"),oa=y("a-select"),se=y("a-form-item"),ge=y("a-input"),lt=y("a-input-password"),na=y("a-input-number"),st=y("a-form"),Ce=y("a-drawer"),$e=y("a-descriptions-item"),la=y("a-descriptions"),sa=y("a-list-item-meta"),it=y("a-list-item"),rt=y("a-list"),ia=y("a-collapse-panel"),ra=y("a-collapse");return s(),m("div",Za,[p("div",eo,[t[32]||(t[32]=p("div",null,[p("h2",{class:"page-title"},"个人数据中台"),p("p",{class:"page-sub"}," 让数据回归个人 — 各 app 数据本地加密落盘,本地 LLM 跨源分析,零云端外传。 ")],-1)),o(C,null,{default:a(()=>[o(l,{loading:c.refresh,onClick:q},{icon:a(()=>[o(ne(ut))]),default:a(()=>[t[29]||(t[29]=n(" 刷新 ",-1))]),_:1},8,["loading"]),o(d,{count:O.reviewQueue,offset:[0,0]},{default:a(()=>[o(l,{type:"primary",ghost:"",onClick:Jt},{icon:a(()=>[o(ne(fa))]),default:a(()=>[t[30]||(t[30]=n(" 待消歧 ",-1))]),_:1})]),_:1},8,["count"]),o(l,{type:"primary",ghost:"",onClick:t[0]||(t[0]=i=>G.value=!0)},{icon:a(()=>[o(ne(va))]),default:a(()=>[t[31]||(t[31]=n(" 审计日志 ",-1))]),_:1})]),_:1})]),o(te,{gutter:16,style:{"margin-bottom":"16px"}},{default:a(()=>[o(Y,{xs:24,sm:12,md:6},{default:a(()=>[o(R,{size:"small",title:"Vault"},{extra:a(()=>[o(I,{color:M.value?.vault?.ok?"green":"red"},{default:a(()=>[n(r(M.value?.vault?.ok?"正常":"未就绪"),1)]),_:1},8,["color"])]),default:a(()=>[p("div",to,"schema v"+r(M.value?.vault?.schemaVersion??"?"),1),oe.value?.vault?(s(),m("div",ao," 事件 "+r(oe.value.vault.events)+" · 联系人 "+r(oe.value.vault.persons),1)):f("",!0),oe.value?.vault?(s(),m("div",oo," 地点 "+r(oe.value.vault.places)+" · 商品 "+r(oe.value.vault.items)+" · 主题 "+r(oe.value.vault.topics),1)):f("",!0)]),_:1})]),_:1}),o(Y,{xs:24,sm:12,md:6},{default:a(()=>[o(R,{size:"small",title:"本地 LLM"},{extra:a(()=>[o(I,{color:M.value?.llm?.ok?M.value.llm.isLocal?"green":"orange":"red"},{default:a(()=>[n(r(M.value?.llm?.ok?M.value.llm.isLocal?"本地":"非本地":"未就绪"),1)]),_:1},8,["color"])]),default:a(()=>[p("div",no,r(M.value?.llm?.name||"—"),1),M.value?.llm?.ok&&!M.value.llm.isLocal?(s(),m("div",lo," ⚠️ 非本地 — ask 会被隐私 gate 拒绝,除非显式 acceptNonLocal ")):f("",!0)]),_:1})]),_:1}),o(Y,{xs:24,sm:12,md:6},{default:a(()=>[o(R,{size:"small",title:"KG 索引"},{extra:a(()=>[o(I,{color:M.value?.kgSink?.ok?"green":"default"},{default:a(()=>[n(r(M.value?.kgSink?.ok?"已连接":"不可用"),1)]),_:1},8,["color"])]),default:a(()=>[t[33]||(t[33]=p("div",{class:"kv"},"events / persons → cc knowledge-graph 实体 + 关系",-1))]),_:1})]),_:1}),o(Y,{xs:24,sm:12,md:6},{default:a(()=>[o(R,{size:"small",title:"RAG 索引"},{extra:a(()=>[o(I,{color:M.value?.ragSink?.ok?"green":"default"},{default:a(()=>[n(r(M.value?.ragSink?.ok?"已连接":"不可用"),1)]),_:1},8,["color"])]),default:a(()=>[t[34]||(t[34]=p("div",{class:"kv"},"文本 → BM25(vector 留待后续 phase)",-1))]),_:1})]),_:1})]),_:1}),o(R,{style:{"margin-bottom":"16px"}},{title:a(()=>[o(C,null,{default:a(()=>[o(ne(ya)),t[35]||(t[35]=p("span",null,"问我数据",-1))]),_:1})]),default:a(()=>[o(he,{value:S.value,"onUpdate:value":t[1]||(t[1]=i=>S.value=i),rows:2,placeholder:"例:上个月在淘宝总共花了多少?/我妈生日那周买了啥送哪儿?",onKeydown:ca(vt(Ze,["exact","prevent"]),["enter"])},null,8,["value","onKeydown"]),p("div",so,[o(De,{checked:N.value,"onUpdate:checked":t[2]||(t[2]=i=>N.value=i)},{default:a(()=>[...t[36]||(t[36]=[n("允许非本地 LLM (volcengine / anthropic 等)",-1)])]),_:1},8,["checked"]),o(l,{type:"primary",loading:c.ask,disabled:!S.value.trim(),onClick:Ze},{icon:a(()=>[o(ne(ma))]),default:a(()=>[t[37]||(t[37]=n(" 提问 ",-1))]),_:1},8,["loading","disabled"])]),T.value?(s(),m("div",io,[o(ae,{type:"error","show-icon":"",message:T.value},null,8,["message"])])):f("",!0),x.value?(s(),m("div",ro,[x.value.warning==="no-facts"?(s(),g(ae,{key:0,type:"warning","show-icon":"",message:"vault 里没找到匹配的事件('no-facts')—— 先同步几个 adapter 让数据进 vault",style:{"margin-bottom":"12px"}})):x.value.warning==="hallucinated-citations"?(s(),g(ae,{key:1,type:"warning","show-icon":"",message:`LLM 引用了 ${x.value.hallucinatedCitations?.length||0} 个不存在的 event id —— 模型在编造`,style:{"margin-bottom":"12px"}},null,8,["message"])):f("",!0),p("div",uo,r(x.value.answer),1),p("div",co," 引用 "+r(x.value.citations?.length||0)+" 条事实 · "+r(x.value.facts?.length||0)+" facts 入 prompt · "+r(x.value.durationMs)+"ms · "+r(x.value.model),1),x.value.citations?.length?(s(),m("div",po,[t[38]||(t[38]=p("span",{style:{"font-size":"12px",color:"var(--text-color-secondary, #888)"}},"事件链接(点击查看明细 / PDF 解密结果):",-1)),o(C,{style:{"margin-top":"4px"},wrap:""},{default:a(()=>[(s(!0),m(W,null,ue(x.value.citations,i=>(s(),g(I,{key:i,color:"blue",style:{cursor:"pointer"},onClick:b=>ot(i)},{default:a(()=>[n(r(i),1)]),_:2},1032,["onClick"]))),128))]),_:1})])):f("",!0)])):f("",!0)]),_:1}),o(R,{style:{"margin-bottom":"16px"}},{title:a(()=>[o(C,null,{default:a(()=>[o(ne(wa)),t[39]||(t[39]=p("span",null,"分析 skill (Phase 11)",-1))]),_:1})]),extra:a(()=>[o(I,{color:"purple"},{default:a(()=>[...t[40]||(t[40]=[n("5 内置",-1)])]),_:1})]),default:a(()=>[o(te,{gutter:[12,12]},{default:a(()=>[(s(),m(W,null,ue(w,i=>o(Y,{xs:24,sm:12,md:8,key:i.name},{default:a(()=>[o(R,{size:"small",hoverable:"",onClick:b=>jt(i.name)},{default:a(()=>[p("div",fo,[(s(),g(pa(i.icon),{style:{"font-size":"18px",color:"#722ed1"}})),p("strong",null,r(i.label),1)]),p("div",vo,r(i.description),1)]),_:2},1032,["onClick"])]),_:2},1024)),64))]),_:1}),Z.value?(s(),m("div",mo,[o(re,{plain:"",orientation:"left"},{default:a(()=>[n(r(Z.value.skill)+" 结果",1)]),_:1}),o(Ke,{spinning:c.skill},{default:a(()=>[p("pre",yo,r(JSON.stringify(Z.value,null,2)),1),Z.value.llm_commentary||Z.value.llm_narrative?(s(),m("div",go,[o(ae,{type:"info",message:Z.value.llm_commentary||Z.value.llm_narrative},null,8,["message"])])):f("",!0)]),_:1},8,["spinning"])])):f("",!0)]),_:1}),o(R,{style:{"margin-bottom":"16px"}},{title:a(()=>[o(C,null,{default:a(()=>[o(ne(ha)),t[41]||(t[41]=p("span",null,"Adapters",-1)),Se.value?(s(),g(I,{key:0,color:Se.value.ready===Se.value.total?"green":"orange"},{default:a(()=>[n(r(Se.value.ready)+"/"+r(Se.value.total)+" 可采集 ",1)]),_:1},8,["color"])):f("",!0)]),_:1})]),extra:a(()=>[o(C,null,{default:a(()=>[o(l,{onClick:t[3]||(t[3]=i=>pe.value=!0)},{icon:a(()=>[o(ne(Ca))]),default:a(()=>[t[42]||(t[42]=n(" 添加邮箱账号 ",-1))]),_:1}),o(l,{onClick:t[4]||(t[4]=i=>ke.value=!0)},{icon:a(()=>[o(ne(Ea))]),default:a(()=>[t[43]||(t[43]=n(" 导入支付宝账单 ",-1))]),_:1}),o(l,{onClick:t[5]||(t[5]=i=>ee.value=!0)},{icon:a(()=>[o(ne(Ia))]),default:a(()=>[t[44]||(t[44]=n(" 添加 AI 对话账号 ",-1))]),_:1}),o(l,{onClick:t[6]||(t[6]=i=>Ie.value=!0)},{icon:a(()=>[o(ne(Sa))]),default:a(()=>[t[45]||(t[45]=n(" 添加 WeChat ",-1))]),_:1}),o(l,{onClick:Ct,loading:c.bilibiliAdbDoctor},{default:a(()=>[...t[46]||(t[46]=[n(" 诊断 Bilibili ADB ",-1)])]),_:1},8,["loading"]),o(l,{onClick:Et,loading:c.bilibiliAdbSync},{default:a(()=>[...t[47]||(t[47]=[n(" 通过 PC ADB 同步 Bilibili ",-1)])]),_:1},8,["loading"]),o(l,{onClick:At,loading:c.weiboAdbSync},{default:a(()=>[...t[48]||(t[48]=[n(" 通过 PC ADB 同步 Weibo ",-1)])]),_:1},8,["loading"]),o(l,{onClick:mt,loading:c.xhsAdbSync},{default:a(()=>[...t[49]||(t[49]=[n(" 通过 PC ADB 同步 Xhs ",-1)])]),_:1},8,["loading"]),o(l,{onClick:gt,loading:c.toutiaoAdbSync},{default:a(()=>[...t[50]||(t[50]=[n(" 通过 PC ADB 同步 Toutiao ",-1)])]),_:1},8,["loading"]),o(l,{onClick:kt,loading:c.kuaishouAdbSync},{default:a(()=>[...t[51]||(t[51]=[n(" 通过 PC ADB 同步 Kuaishou ",-1)])]),_:1},8,["loading"]),o(l,{onClick:bt,loading:c.bridgeDoctor},{default:a(()=>[...t[52]||(t[52]=[n(" 诊断签名 Bridges ",-1)])]),_:1},8,["loading"]),o(l,{onClick:wt,loading:c.douyinAdbSync},{default:a(()=>[...t[53]||(t[53]=[n(" 通过 PC ADB 同步 Douyin ",-1)])]),_:1},8,["loading"]),o(l,{onClick:Ht,loading:c.addMock},{default:a(()=>[...t[54]||(t[54]=[n(" 注册 MockAdapter(开发) ",-1)])]),_:1},8,["loading"]),o(l,{type:"primary",onClick:zt,loading:c.syncAll,disabled:!P.value.length},{default:a(()=>[...t[55]||(t[55]=[n(" 同步全部 ",-1)])]),_:1},8,["loading","disabled"])]),_:1})]),default:a(()=>[P.value.length?(s(),g(qe,{key:0,columns:It,"data-source":P.value,pagination:!1,"row-key":i=>i.name,size:"middle"},{bodyCell:a(({column:i,record:b})=>[i.key==="readiness"?(s(),m(W,{key:0},[X(b.name)?(s(),m(W,{key:0},[o(Oe,null,{title:a(()=>[p("div",null,r(X(b.name).message),1),X(b.name).actionHint?(s(),m("div",_o," → "+r(X(b.name).actionHint),1)):f("",!0),X(b.name).lastError?(s(),m("div",ko," 上次同步错误: "+r(X(b.name).lastError),1)):f("",!0)]),default:a(()=>[o(I,{color:Ge(X(b.name).status)},{default:a(()=>[n(r(Xe(X(b.name))),1)]),_:2},1032,["color"])]),_:2},1024),p("span",bo,r(je(X(b.name).category)),1),X(b.name).ready?f("",!0):(s(),m("div",Ao,r(X(b.name).message),1))],64)):(s(),g(I,{key:1,color:"default"},{default:a(()=>[...t[56]||(t[56]=[n("检测中",-1)])]),_:1}))],64)):i.key==="sensitivity"?(s(),m(W,{key:1},[o(I,{color:Nt(b.sensitivity)},{default:a(()=>[n(r(b.sensitivity),1)]),_:2},1032,["color"]),b.legalGate?(s(),g(I,{key:0,color:"red",style:{"margin-left":"4px"}},{default:a(()=>[...t[57]||(t[57]=[n("需法律确认",-1)])]),_:1})):f("",!0)],64)):i.key==="capabilities"?(s(!0),m(W,{key:2},ue(b.capabilities,j=>(s(),g(I,{key:j,style:{"margin-right":"4px"}},{default:a(()=>[n(r(j),1)]),_:2},1024))),128)):i.key==="actions"?(s(),g(C,{key:3},{default:a(()=>[o(l,{size:"small",type:"link",onClick:j=>St(b.name)},{default:a(()=>[...t[58]||(t[58]=[n(" 如何导入 ",-1)])]),_:1},8,["onClick"]),o(l,{size:"small",type:"primary",title:Ae(X(b.name)||b)==="file"?"选择文件采集":"采集入库",loading:c.sync[b.name],onClick:j=>Je(b.name)},{default:a(()=>[n(r(Ae(X(b.name)||b)==="file"?"📂 采集":"采集"),1)]),_:2},1032,["title","loading","onClick"]),le(b.name)?(s(),g(ta,{key:0,open:ie.value[b.name],"onUpdate:open":j=>ie.value[b.name]=j,trigger:"click",placement:"left",title:`${b.name} 采集范围`},{content:a(()=>[p("div",wo,[(s(!0),m(W,null,ue(V[b.name],j=>(s(),m("div",{key:j.key,style:{margin:"6px 0"}},[o(De,{checked:L[b.name][j.key]!==!1,onChange:Ve=>ce(b.name,j.key,Ve)},{default:a(()=>[n(r(j.label)+" ",1),p("span",Co,r(j.hint),1),j.sensitive?(s(),g(I,{key:0,color:"orange",size:"small",style:{"margin-left":"4px"}},{default:a(()=>[...t[59]||(t[59]=[n("敏感",-1)])]),_:1})):f("",!0)]),_:2},1032,["checked","onChange"])]))),128)),t[60]||(t[60]=p("div",{style:{"margin-top":"8px","font-size":"11px",color:"#999"}}," 取消勾选的数据本次同步不会拉取入库 ",-1))])]),default:a(()=>[o(l,{size:"small",title:"选择采集范围"},{default:a(()=>[...t[61]||(t[61]=[n("⚙",-1)])]),_:1})]),_:2},1032,["open","onUpdate:open","title"])):f("",!0),o(aa,{title:`从注册表移除 ${b.name}?(vault 数据不会删除)`,onConfirm:j=>Kt(b.name)},{default:a(()=>[o(l,{size:"small",danger:""},{default:a(()=>[...t[62]||(t[62]=[n("移除",-1)])]),_:1})]),_:1},8,["title","onConfirm"])]),_:2},1024)):f("",!0)]),_:1},8,["data-source","row-key"])):(s(),g(We,{key:1,description:"无已注册 adapter — 点上方按钮注册 MockAdapter 看效果"})),h.active?(s(),m("div",Eo,[o(R,{size:"small",bordered:!0},{default:a(()=>[p("div",Io,[t[63]||(t[63]=p("strong",null,"同步进行中",-1)),n(" · "+r(h.adapter)+" · "+r(h.phase||"...")+" ",1),h.attempt&&h.attempt>1?(s(),m("span",So," (重试 #"+r(h.attempt)+") ",1)):f("",!0)]),h.total>0?(s(),g(nt,{key:0,percent:Math.round(h.current/h.total*100),status:h.errorMessage?"exception":"active",size:"small"},null,8,["percent","status"])):(s(),g(nt,{key:1,percent:0,status:"active",size:"small"})),h.mailbox?(s(),m("div",ho," 邮箱 "+r(h.mailbox)+" · "+r(h.current)+" / "+r(h.total),1)):f("",!0),h.errorMessage?(s(),m("div",Do,r(h.errorMessage),1)):f("",!0)]),_:1})])):f("",!0),U.value?(s(),m("div",Oo,[o(ae,{type:U.value.status==="ok"?"success":"error","show-icon":"",message:`同步 ${U.value.adapter}: ${U.value.status}`,description:Rt(U.value)},null,8,["type","message","description"])])):f("",!0)]),_:1}),o(Ce,{open:pe.value,"onUpdate:open":t[16]||(t[16]=i=>pe.value=i),title:"添加邮箱账号",placement:"right",width:"560","destroy-on-close":!0,onClose:et},{footer:a(()=>[o(C,null,{default:a(()=>[o(l,{onClick:t[15]||(t[15]=i=>pe.value=!1)},{default:a(()=>[...t[73]||(t[73]=[n("取消",-1)])]),_:1}),o(l,{loading:c.testEmail,disabled:!Me.value,onClick:Qt},{default:a(()=>[...t[74]||(t[74]=[n(" 测试连接 ",-1)])]),_:1},8,["loading","disabled"]),o(l,{type:"primary",loading:c.saveEmail,disabled:!Me.value||!z.value?.ok,onClick:Yt},{default:a(()=>[...t[75]||(t[75]=[n(" 保存并注册 ",-1)])]),_:1},8,["loading","disabled"])]),_:1})]),default:a(()=>[o(ae,{message:"数据回归个人 — 凭证落本地加密文件(与 vault 主密钥同目录),同步动作 100% 本地。",type:"info","show-icon":"",style:{"margin-bottom":"16px"}}),o(st,{layout:"vertical",model:E},{default:a(()=>[o(se,{label:"邮箱服务商",required:""},{default:a(()=>[o(oa,{value:E.provider,"onUpdate:value":t[7]||(t[7]=i=>E.provider=i),placeholder:"选择服务商"},{default:a(()=>[o(we,{value:"qq"},{default:a(()=>[...t[64]||(t[64]=[n("QQ 邮箱 (imap.qq.com)",-1)])]),_:1}),o(we,{value:"163"},{default:a(()=>[...t[65]||(t[65]=[n("网易邮箱 163/126",-1)])]),_:1}),o(we,{value:"189"},{default:a(()=>[...t[66]||(t[66]=[n("189 邮箱",-1)])]),_:1}),o(we,{value:"outlook"},{default:a(()=>[...t[67]||(t[67]=[n("Outlook / Hotmail",-1)])]),_:1}),o(we,{value:"gmail"},{default:a(()=>[...t[68]||(t[68]=[n("Gmail",-1)])]),_:1}),o(we,{value:"custom"},{default:a(()=>[...t[69]||(t[69]=[n("自定义 IMAP",-1)])]),_:1})]),_:1},8,["value"])]),_:1}),o(se,{label:"邮箱地址",required:""},{default:a(()=>[o(ge,{value:E.email,"onUpdate:value":t[8]||(t[8]=i=>E.email=i),placeholder:"you@qq.com",autocomplete:"off"},null,8,["value"])]),_:1}),o(se,{required:""},{label:a(()=>[o(C,null,{default:a(()=>[t[70]||(t[70]=p("span",null,"授权码(非登录密码)",-1)),o(Oe,{title:Wt(E.provider)},{default:a(()=>[o(ne(dt),{style:{color:"#888"}})]),_:1},8,["title"])]),_:1})]),default:a(()=>[o(lt,{value:E.authCode,"onUpdate:value":t[9]||(t[9]=i=>E.authCode=i),placeholder:"例:QQ 邮箱 设置 → 账户 → 开启 IMAP/SMTP → 生成的授权码",autocomplete:"off"},null,8,["value"])]),_:1}),E.provider==="custom"?(s(),g(se,{key:0,label:"IMAP host"},{default:a(()=>[o(ge,{value:E.host,"onUpdate:value":t[10]||(t[10]=i=>E.host=i),placeholder:"mail.example.com"},null,8,["value"])]),_:1})):f("",!0),E.provider==="custom"?(s(),g(se,{key:1,label:"端口"},{default:a(()=>[o(na,{value:E.port,"onUpdate:value":t[11]||(t[11]=i=>E.port=i),min:1,max:65535,"default-value":993},null,8,["value"])]),_:1})):f("",!0),o(re,{orientation:"left",plain:""},{default:a(()=>[...t[71]||(t[71]=[n("PDF 账单解密提示(可选)",-1)])]),_:1}),t[72]||(t[72]=p("p",{class:"hint"},"银行 PDF 月结大多加密;提供几个常用候选项让 Phase 5.5 自动解锁:",-1)),o(se,{label:"身份证后 6 位"},{default:a(()=>[o(ge,{value:E.pdfPasswordHints.idCardLast6,"onUpdate:value":t[12]||(t[12]=i=>E.pdfPasswordHints.idCardLast6=i),placeholder:"123456",autocomplete:"off"},null,8,["value"])]),_:1}),o(se,{label:"手机后 6 位"},{default:a(()=>[o(ge,{value:E.pdfPasswordHints.phoneLast6,"onUpdate:value":t[13]||(t[13]=i=>E.pdfPasswordHints.phoneLast6=i),placeholder:"123456",autocomplete:"off"},null,8,["value"])]),_:1}),o(se,{label:"信用卡尾 6 位"},{default:a(()=>[o(ge,{value:E.pdfPasswordHints.cardLast6,"onUpdate:value":t[14]||(t[14]=i=>E.pdfPasswordHints.cardLast6=i),placeholder:"123456",autocomplete:"off"},null,8,["value"])]),_:1}),z.value?(s(),m("div",$o,[o(ae,{type:z.value.ok?"success":"error","show-icon":"",message:z.value.ok?"凭证有效 — 可以保存":`认证失败: ${z.value.reason||z.value.error}`},null,8,["type","message"])])):f("",!0)]),_:1},8,["model"])]),_:1},8,["open"]),o(Ce,{open:fe.value,"onUpdate:open":t[17]||(t[17]=i=>fe.value=i),title:$.value?`事件 ${$.value.event.id}`:"加载中...",placement:"right",width:"640","destroy-on-close":!0},{default:a(()=>[$.value?(s(),m(W,{key:0},[o(la,{column:1,size:"small",bordered:""},{default:a(()=>[o($e,{label:"类型"},{default:a(()=>[n(r($.value.event.subtype),1)]),_:1}),o($e,{label:"发生于"},{default:a(()=>[n(r(new Date($.value.event.occurredAt).toLocaleString()),1)]),_:1}),o($e,{label:"actor"},{default:a(()=>[n(r($.value.event.actor),1)]),_:1}),$.value.event.content?.title?(s(),g($e,{key:0,label:"标题"},{default:a(()=>[n(r($.value.event.content.title),1)]),_:1})):f("",!0),$.value.event.source?.adapter?(s(),g($e,{key:1,label:"来源 adapter"},{default:a(()=>[n(r($.value.event.source.adapter)+" @ v"+r($.value.event.source.adapterVersion),1)]),_:1})):f("",!0)]),_:1}),$.value.classification?(s(),g(re,{key:0,orientation:"left",plain:""},{default:a(()=>[...t[76]||(t[76]=[n("分类",-1)])]),_:1})):f("",!0),$.value.classification?(s(),m("div",xo,[o(I,{color:"blue"},{default:a(()=>[n(r($.value.classification.category),1)]),_:1}),o(I,null,{default:a(()=>[n(r($.value.classification.layer),1)]),_:1}),p("span",Po,"置信 "+r(Math.round(($.value.classification.confidence||0)*100))+"%",1)])):f("",!0),$.value.extraction?(s(),g(re,{key:2,orientation:"left",plain:""},{default:a(()=>[n("结构化字段("+r($.value.extraction.template)+")",1)]),_:1})):f("",!0),$.value.extraction?(s(),m("pre",Lo,r(JSON.stringify($.value.extraction.fields,null,2)),1)):f("",!0),$.value.extraction?.pdfExtraction?(s(),g(re,{key:4,orientation:"left",plain:""},{default:a(()=>[...t[77]||(t[77]=[n("PDF 解密 / 解析",-1)])]),_:1})):f("",!0),$.value.extraction?.pdfExtraction?(s(),g(rt,{key:5,"data-source":$.value.extraction.pdfExtraction,size:"small"},{renderItem:a(({item:i})=>[o(it,null,{default:a(()=>[o(sa,{title:i.filename},{description:a(()=>[p("div",null,[o(I,{color:i.decrypted?"green":"red"},{default:a(()=>[n(r(i.decrypted?"已解密":"解密失败"),1)]),_:2},1032,["color"]),p("span",To,"尝试 "+r(i.attempted)+" 次",1),i.transactionsExtracted!=null?(s(),m("span",Uo," · 提取 "+r(i.transactionsExtracted)+" 条交易 ",1)):f("",!0)]),i.error?(s(),m("div",Mo,r(i.error),1)):f("",!0)]),_:2},1032,["title"])]),_:2},1024)]),_:1},8,["data-source"])):f("",!0),$.value.extraction?.fields?.transactions?.length?(s(),m(W,{key:6},[o(re,{orientation:"left",plain:""},{default:a(()=>[...t[78]||(t[78]=[n("交易明细",-1)])]),_:1}),o(qe,{columns:Bt,"data-source":$.value.extraction.fields.transactions,pagination:{pageSize:10,size:"small"},"row-key":(i,b)=>b,size:"small"},{bodyCell:a(({column:i,record:b})=>[i.key==="occurredAt"?(s(),m(W,{key:0},[n(r(new Date(b.occurredAtMs).toLocaleDateString()),1)],64)):i.key==="amount"?(s(),m("span",{key:1,class:ft(b.amount.direction==="in"?"amount-in":"amount-out")},r(b.amount.direction==="in"?"+":"-")+r(b.amount.value.toFixed(2))+" "+r(b.amount.currency),3)):f("",!0)]),_:1},8,["data-source","row-key"])],64)):f("",!0)],64)):(s(),g(We,{key:1,description:"无事件数据"}))]),_:1},8,["open","title"]),o(Ce,{open:ke.value,"onUpdate:open":t[22]||(t[22]=i=>ke.value=i),title:"导入支付宝账单",placement:"right",width:"560","destroy-on-close":!0,onClose:Gt},{footer:a(()=>[o(C,null,{default:a(()=>[o(l,{onClick:t[21]||(t[21]=i=>ke.value=!1)},{default:a(()=>[...t[84]||(t[84]=[n("关闭",-1)])]),_:1}),o(l,{type:"primary",loading:c.importAlipay,disabled:!at.value,onClick:Xt},{default:a(()=>[...t[85]||(t[85]=[n(" 注册账户 + 导入 ",-1)])]),_:1},8,["loading","disabled"])]),_:1})]),default:a(()=>[o(ae,{message:"支付宝官方导出 CSV — 服务器侧全量、稳定无风控。3 分钟拿到 12 个月流水。",type:"info","show-icon":"",style:{"margin-bottom":"16px"}}),o(ra,{bordered:!1,style:{"margin-bottom":"12px"}},{default:a(()=>[o(ia,{header:"如何导出账单(首次必看)"},{default:a(()=>[...t[79]||(t[79]=[p("ol",{style:{"padding-left":"18px","font-size":"13px"}},[p("li",null,"支付宝 app → 我的 → 账单 → 右上角 ⋯"),p("li",null,'点 "开具交易流水证明"'),p("li",null,"选月份范围(最长 12 个月)"),p("li",null,'用途选 "个人对账"'),p("li",null,"发送到你的绑定邮箱"),p("li",null,[n("从邮箱下载 "),p("code",null,"alipay_record_*.zip")]),p("li",null,"解压密码 = 你的身份证后 6 位")],-1)])]),_:1})]),_:1}),o(st,{layout:"vertical",model:H},{default:a(()=>[o(se,{label:"支付宝绑定邮箱(账户标识)",required:""},{default:a(()=>[o(ge,{value:H.email,"onUpdate:value":t[18]||(t[18]=i=>H.email=i),placeholder:"alipay-bound@example.com",autocomplete:"off"},null,8,["value"])]),_:1}),o(se,null,{label:a(()=>[o(C,null,{default:a(()=>[t[80]||(t[80]=p("span",null,"ZIP 密码(身份证后 6 位)",-1)),o(Oe,{title:"支付宝 ZIP 默认密码 = 身份证号后 6 位。也支持自定义密码。"},{default:a(()=>[o(ne(dt),{style:{color:"#888"}})]),_:1})]),_:1})]),default:a(()=>[o(lt,{value:H.zipPassword,"onUpdate:value":t[19]||(t[19]=i=>H.zipPassword=i),placeholder:"例:123456",autocomplete:"off"},null,8,["value"]),t[81]||(t[81]=p("div",{class:"hint",style:{"margin-top":"4px"}}," 空白则解析时再问,或导入的 ZIP 未加密。 ",-1))]),_:1}),o(re,{orientation:"left",plain:""},{default:a(()=>[...t[82]||(t[82]=[n("选择文件",-1)])]),_:1}),o(se,{label:"ZIP 或 CSV 文件路径"},{default:a(()=>[o(ge,{value:H.filePath,"onUpdate:value":t[20]||(t[20]=i=>H.filePath=i),placeholder:"C:\\\\Users\\\\you\\\\Downloads\\\\alipay_record_xxx.zip","allow-clear":""},null,8,["value"]),t[83]||(t[83]=p("div",{class:"hint",style:{"margin-top":"4px"}}," 桌面版可通过 Electron 文件选择器自动填充;web-shell 复制完整路径。 ",-1))]),_:1}),F.value?(s(),m("div",Bo,[o(ae,{type:F.value.status==="ok"?"success":"error","show-icon":"",message:F.value.status==="ok"?`导入成功 — ${F.value.entityCounts?.events||0} 笔交易`:`导入失败: ${F.value.error||F.value.status}`,description:F.value.status==="ok"?`${F.value.entityCounts?.persons||0} 个交易对方 · ${F.value.kgTripleCount||0} KG triples · ${F.value.durationMs||0}ms`:null},null,8,["type","message","description"])])):f("",!0)]),_:1},8,["model"])]),_:1},8,["open"]),o(Ce,{open:u.value,"onUpdate:open":t[23]||(t[23]=i=>u.value=i),title:"待消歧(EntityResolver 模糊判定)",placement:"right",width:"640","destroy-on-close":!0},{default:a(()=>[Q.value.length===0&&!c.reviewQueue?(s(),g(ae,{key:0,type:"success","show-icon":"",message:"无待消歧 pair — 所有跨源 Person 已确定。",style:{"margin-bottom":"12px"}})):f("",!0),p("div",No,[o(C,null,{default:a(()=>[o(l,{loading:c.reviewQueue,onClick:Be},{icon:a(()=>[o(ne(ut))]),default:a(()=>[t[86]||(t[86]=n(" 刷新 ",-1))]),_:1},8,["loading"]),o(l,{loading:c.resolverDrain,onClick:Zt},{default:a(()=>[...t[87]||(t[87]=[n(" 手动 drain 队列 ",-1)])]),_:1},8,["loading"]),p("span",Ro," queue: "+r(O.queue?.pending||0)+" pending · "+r(O.mergeGroups||0)+" groups ",1)]),_:1})]),o(rt,{"data-source":Q.value,pagination:{pageSize:5,size:"small"},size:"small"},{renderItem:a(({item:i})=>[o(it,null,{default:a(()=>[o(R,{size:"small",style:{width:"100%"}},{default:a(()=>[p("div",Ho,[p("strong",null,"Pair #"+r(i.id),1),i.embed_sim?(s(),g(I,{key:0,color:"blue",style:{"margin-left":"8px"}},{default:a(()=>[n(" sim "+r(Number(i.embed_sim).toFixed(2)),1)]),_:2},1024)):f("",!0),i.llm_verdict?(s(),g(I,{key:1,color:i.llm_verdict==="yes"?"green":i.llm_verdict==="no"?"red":"orange",style:{"margin-left":"4px"}},{default:a(()=>[n(" LLM: "+r(i.llm_verdict),1)]),_:2},1032,["color"])):f("",!0)]),p("div",Fo,"A: "+r(i.a_person_id),1),p("div",zo,"B: "+r(i.b_person_id),1),i.llm_reason?(s(),m("div",Ko," LLM 理由: "+r(i.llm_reason),1)):f("",!0),o(C,{style:{"margin-top":"8px"}},{default:a(()=>[o(l,{size:"small",type:"primary",onClick:b=>ze(i.id,"same")},{default:a(()=>[...t[88]||(t[88]=[n("同一人",-1)])]),_:1},8,["onClick"]),o(l,{size:"small",danger:"",onClick:b=>ze(i.id,"different")},{default:a(()=>[...t[89]||(t[89]=[n("不同人",-1)])]),_:1},8,["onClick"]),o(l,{size:"small",onClick:b=>ze(i.id,"skip")},{default:a(()=>[...t[90]||(t[90]=[n("跳过",-1)])]),_:1},8,["onClick"])]),_:2},1024)]),_:2},1024)]),_:2},1024)]),_:1},8,["data-source"])]),_:1},8,["open"]),o(Ce,{open:G.value,"onUpdate:open":t[24]||(t[24]=i=>G.value=i),title:"审计日志(数据 lineage)",placement:"right",width:"600",onAfterOpenChange:qt},{default:a(()=>[o(qe,{columns:Mt,"data-source":J.value,pagination:{pageSize:20,size:"small"},"row-key":i=>i.id,size:"small"},{bodyCell:a(({column:i,record:b})=>[i.key==="at"?(s(),m(W,{key:0},[n(r(new Date(b.at).toLocaleString()),1)],64)):i.key==="details"?(s(),m("code",qo,r(b.details||"—"),1)):f("",!0)]),_:1},8,["data-source","row-key"])]),_:1},8,["open"]),o(Ka,{open:ee.value,"onUpdate:open":t[25]||(t[25]=i=>ee.value=i),"existing-accounts":xe.value,onRegistered:Ne},null,8,["open","existing-accounts"]),o(Ja,{open:Ie.value,"onUpdate:open":t[26]||(t[26]=i=>Ie.value=i),onRegistered:Re},null,8,["open"]),o(Ce,{open:be.value,"onUpdate:open":t[28]||(t[28]=i=>be.value=i),title:K.value&&K.value.guide?`如何导入:${K.value.guide.displayName}`:"如何导入",width:"520",placement:"right"},{default:a(()=>[K.value&&K.value.guide?(s(),m(W,{key:0},[o(C,{style:{"margin-bottom":"12px"},wrap:""},{default:a(()=>[o(I,{color:Ge(K.value.status)},{default:a(()=>[n(r(Xe(K.value)),1)]),_:1},8,["color"]),o(I,null,{default:a(()=>[n(r(je(K.value.guide.category)),1)]),_:1})]),_:1}),o(ae,{type:"info",message:K.value.guide.summary,"show-icon":"",style:{"margin-bottom":"8px"}},null,8,["message"]),!K.value.ready&&K.value.message?(s(),g(ae,{key:0,type:"warning",message:`当前状态:${K.value.message}`,"show-icon":"",style:{"margin-bottom":"16px"}},null,8,["message"])):f("",!0),(s(!0),m(W,null,ue(K.value.guide.methods,(i,b)=>(s(),m("div",{key:b,style:{"margin-bottom":"20px"}},[p("div",Wo,[n(r(i.label)+" ",1),i.recommended?(s(),g(I,{key:0,color:"green",style:{"margin-left":"6px"}},{default:a(()=>[...t[91]||(t[91]=[n("推荐",-1)])]),_:1})):f("",!0)]),p("ol",Vo,[(s(!0),m(W,null,ue(i.steps,(j,Ve)=>(s(),m("li",{key:Ve},r(j),1))),128))]),i.note?(s(),m("div",Qo,r(i.note),1)):f("",!0)]))),128)),o(re,{style:{margin:"12px 0"}}),o(C,null,{default:a(()=>[o(l,{type:"primary",size:"large",loading:c.sync[K.value.name],onClick:t[27]||(t[27]=i=>Je(K.value.name))},{default:a(()=>[n(r(Lt(K.value)),1)]),_:1},8,["loading"]),p("span",Yo,r(Ae(K.value)==="file"?"选择导出/解密好的文件,自动入库":Ae(K.value)==="sync"?"直接读取本机数据入库":"完成上述步骤后点此入库"),1)]),_:1})],64)):(s(),g(We,{key:1,description:"该数据源暂无导入指引"}))]),_:1},8,["open","title"])])}}},en=Ye(Go,[["__scopeId","data-v-774f91c3"]]);export{en as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.page-title[data-v-8e02619c]{margin:0;color:var(--text-primary);font-size:22px;font-weight:600}.page-sub[data-v-8e02619c]{margin:4px 0 0;color:var(--text-secondary);font-size:13px}.pipeline-tabs[data-v-8e02619c] .ant-tabs-nav{margin-bottom:16px}.filter-bar[data-v-8e02619c]{display:flex;align-items:center;gap:12px;margin-bottom:12px;flex-wrap:wrap}.stage-flow[data-v-8e02619c]{display:flex;align-items:center;gap:6px;flex-wrap:wrap}.stage-pill[data-v-8e02619c]{display:inline-flex;align-items:center;gap:6px;padding:4px 10px;border-radius:14px;background:#1677ff1f;color:#1677ff;font-size:12px;font-weight:500;border:1px solid rgba(22,119,255,.25)}.stage-pill.is-gate[data-v-8e02619c]{background:#faad1426;color:#faad14;border-color:#faad144d}.stage-idx[data-v-8e02619c]{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;background:currentColor;color:#fff!important;border-radius:50%;font-size:10px;font-weight:700}.stage-pill.is-gate .stage-idx[data-v-8e02619c]{background:#faad14}.stage-arrow[data-v-8e02619c]{color:var(--text-muted);font-size:11px}.gate-icon[data-v-8e02619c]{font-size:11px}.tpl-stages[data-v-8e02619c]{display:flex;gap:4px;flex-wrap:wrap}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{_ as Ye,u as Ze,b as Qe,d as C}from"./index-D0d2TS5o.js";import{s as Se}from"./community-parser-CO25nZFt.js";import{R as Xe,as as et,H as ye,aq as tt,a6 as lt,l as at,Z as ve,W as V,aU as nt,f as it,L as st,d as ot,z as rt}from"./icons--SBOhPAi.js";import{o as pt,M as b,R as S,P as p,c as i,N as a,Q as m,S as y,K as v,r as $,L as r,O as f,u as c,F as z,Y as L,Z as ut,f as te,a as ct}from"./vendor-DhFY8mDK.js";function H(t){const o=Se(t);if(!o)return null;try{return JSON.parse(o)}catch{}const n=o.match(/\{[\s\S]*\}|\[[\s\S]*\]/);if(!n)return null;try{return JSON.parse(n[0])}catch{return null}}const Ae=Object.freeze(["pending","running","paused","completed","failed","cancelled"]),dt=Object.freeze(["pending","running","gate-waiting","completed","failed","skipped"]),be=Object.freeze(["requirement","architecture","code-generation","testing","code-review","deploy","monitoring"]),le=Object.freeze(["feature","bugfix","refactor","security-audit"]),ft=Object.freeze(["git-pr","docker","npm-publish","local","staging","custom"]),_e=Object.freeze(["code-review","deploy"]);function N(t,o=0){return typeof t=="number"&&Number.isFinite(t)?t:o}function ke(t){if(!t)return{noDb:!1,error:""};const o=Se(t),n=/No database/i.test(o);return{noDb:n,error:n?"No database":""}}function gt(t,o=0){if(!t||typeof t!="object")return null;const n=t.id||"";return n?{key:n,id:n,pipelineId:String(t.pipelineId||""),stageIndex:N(t.stageIndex,o),name:String(t.name||""),status:String(t.status||"pending").toLowerCase(),gateRequired:!!t.gateRequired,gateApproved:!!t.gateApproved,gateRejectReason:t.gateRejectReason||"",input:t.input??null,output:t.output??null,errorMessage:t.errorMessage||"",startedAt:t.startedAt??null,completedAt:t.completedAt??null,_idx:o}:null}function mt(t,o=0){if(!t||typeof t!="object")return null;const n=t.id||"";if(!n)return null;const g=Array.isArray(t.stages)?t.stages.map(gt).filter(Boolean):[];return{key:n,id:n,name:t.name||"",template:String(t.template||""),config:t.config??null,status:String(t.status||"pending").toLowerCase(),currentStage:N(t.currentStage,0),result:t.result??null,errorMessage:t.errorMessage||"",createdAt:t.createdAt??null,updatedAt:t.updatedAt??null,startedAt:t.startedAt??null,completedAt:t.completedAt??null,stages:g,_idx:o}}function yt(t){const o=H(t);return Array.isArray(o)?o.map(mt).filter(Boolean):[]}function vt(t,o=0){if(!t||typeof t!="object")return null;const n=t.id||"";return n?{key:n,id:n,pipelineId:String(t.pipelineId||""),strategy:String(t.strategy||"").toLowerCase(),config:t.config??null,status:String(t.status||"pending").toLowerCase(),result:t.result??null,errorMessage:t.errorMessage||"",rolledBackAt:t.rolledBackAt??null,rollbackReason:t.rollbackReason||"",createdAt:t.createdAt??null,completedAt:t.completedAt??null,_idx:o}:null}function bt(t){const o=H(t);return Array.isArray(o)?o.map(vt).filter(Boolean):[]}function _t(t,o=0){if(!t||typeof t!="object")return null;const n=t.name||"";return n?{key:n,name:n,description:String(t.description||""),stages:Array.isArray(t.stages)?t.stages.filter(g=>typeof g=="string"):[],gateStages:Array.isArray(t.gateStages)?t.gateStages.filter(g=>typeof g=="string"):[],_idx:o}:null}function kt(t){const o=H(t);return Array.isArray(o)?o.map(_t).filter(Boolean):[]}const St={totalPipelines:0,pipelinesByTemplate:{},pipelinesByStatus:{},totalStages:0,stagesByStatus:{},totalArtifacts:0,totalDeploys:0,deploysByStrategy:{}};function At(t){const o=JSON.parse(JSON.stringify(St));for(const g of le)o.pipelinesByTemplate[g]=0;for(const g of Ae)o.pipelinesByStatus[g]=0;for(const g of dt)o.stagesByStatus[g]=0;for(const g of ft)o.deploysByStrategy[g]=0;const n=H(t);if(!n||typeof n!="object"||Array.isArray(n))return o;if(o.totalPipelines=N(n.totalPipelines,0),o.totalStages=N(n.totalStages,0),o.totalArtifacts=N(n.totalArtifacts,0),o.totalDeploys=N(n.totalDeploys,0),n.pipelinesByTemplate&&typeof n.pipelinesByTemplate=="object")for(const[g,_]of Object.entries(n.pipelinesByTemplate))typeof _=="number"&&Number.isFinite(_)&&(o.pipelinesByTemplate[g]=_);if(n.pipelinesByStatus&&typeof n.pipelinesByStatus=="object")for(const[g,_]of Object.entries(n.pipelinesByStatus))typeof _=="number"&&Number.isFinite(_)&&(o.pipelinesByStatus[g]=_);if(n.stagesByStatus&&typeof n.stagesByStatus=="object")for(const[g,_]of Object.entries(n.stagesByStatus))typeof _=="number"&&Number.isFinite(_)&&(o.stagesByStatus[g]=_);if(n.deploysByStrategy&&typeof n.deploysByStrategy=="object")for(const[g,_]of Object.entries(n.deploysByStrategy))typeof _=="number"&&Number.isFinite(_)&&(o.deploysByStrategy[g]=_);return o}function j(t){if(t==null||t==="")return"—";const o=typeof t=="number"?new Date(t):new Date(String(t));return isNaN(o.getTime())?String(t):o.toLocaleString("zh-CN",{hour12:!1})}const $t={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},xt={class:"page-title"},ht={class:"page-sub"},zt={class:"stage-flow"},Ct={class:"stage-idx"},Bt={class:"filter-bar"},Tt={style:{color:"var(--text-primary)","font-weight":"500"}},Pt={style:{color:"var(--text-secondary)","font-size":"11px","font-family":"monospace","margin-top":"2px"}},Ot={key:1,style:{color:"var(--text-muted)"}},Lt={key:5,style:{color:"var(--text-secondary)","font-size":"11px"}},Dt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},jt={key:0,style:{color:"var(--text-primary)","font-family":"monospace","font-size":"12px"}},Nt={key:3,style:{color:"var(--text-secondary)","font-size":"11px"}},Rt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},Et={style:{color:"var(--text-secondary)","font-size":"12px",margin:"0 0 10px"}},Ft={class:"tpl-stages"},Mt={key:0,style:{"padding-top":"8px"}},Jt={style:{color:"var(--text-primary)","font-size":"13px",margin:"20px 0 10px"}},It={style:{display:"flex","align-items":"center",gap:"8px","flex-wrap":"wrap"}},Ut={style:{color:"var(--text-primary)","font-weight":"500"}},wt={key:0,style:{color:"#52c41a","margin-left":"4px"}},qt={key:0,style:{color:"#ff4d4f","font-size":"11px","margin-top":"4px"}},Gt={key:1,style:{color:"var(--text-secondary)","font-size":"11px","margin-top":"2px"}},Kt={key:0},Vt={__name:"Pipeline",setup(t){const o=Ze(),{t:n}=Qe(),g=$(!1),_=$(!1),ae=$([]),ne=$([]),ie=$([]),T=$({totalPipelines:0,pipelinesByTemplate:{},pipelinesByStatus:{},totalStages:0,stagesByStatus:{},totalArtifacts:0,totalDeploys:0,deploysByStrategy:{}}),W=$({noDb:!1,error:""}),se=$("pipelines"),R=$(""),E=$(""),I=$(!1),Y=$(!1),k=ct({template:"feature",name:"",configJson:""}),A=$(null),$e=te(()=>[{title:n("pipeline.cols.name"),key:"name"},{title:n("pipeline.cols.template"),key:"template",width:"110px"},{title:n("pipeline.cols.progress"),key:"progress",width:"160px"},{title:n("pipeline.cols.currentStage"),key:"currentStage",width:"140px"},{title:n("pipeline.cols.status"),key:"status",width:"110px"},{title:n("pipeline.cols.createdAt"),key:"createdAt",width:"160px"},{title:n("pipeline.cols.action"),key:"action",width:"260px"}]),xe=te(()=>[{title:n("pipeline.cols.pipeline"),key:"pipeline",width:"180px"},{title:n("pipeline.cols.strategy"),key:"strategy",width:"120px"},{title:n("pipeline.cols.status"),key:"status",width:"110px"},{title:n("pipeline.cols.createdAt"),key:"createdAt"}]),he=te(()=>{let e=ae.value;return R.value&&(e=e.filter(s=>s.template===R.value)),E.value&&(e=e.filter(s=>s.status===E.value)),e});function F(e){const s=`pipeline.templateLabels.${e}`,d=n(s);return d===s?e:d}function Z(e){return{feature:"green",bugfix:"red",refactor:"purple","security-audit":"volcano"}[e]||"default"}function U(e){const s=`pipeline.stageLabels.${e}`,d=n(s);return d===s?e:d}function Q(e){const s=`pipeline.pipelineStatusLabels.${e}`,d=n(s);return d===s?e:d}function oe(e){return{pending:"default",running:"processing",paused:"orange",completed:"green",failed:"red",cancelled:"default"}[e]||"default"}function ze(e){const s=`pipeline.stageStatusLabels.${e}`,d=n(s);return d===s?e:d}function re(e){return{pending:"default",running:"processing","gate-waiting":"gold",completed:"green",failed:"red",skipped:"default"}[e]||"default"}function Ce(e){const s=`pipeline.deployStatusLabels.${e}`,d=n(s);return d===s?e:d}function Be(e){return{pending:"default",running:"processing",succeeded:"green",failed:"red","rolled-back":"orange"}[e]||"default"}function Te(e){return{"git-pr":"blue",docker:"cyan","npm-publish":"magenta",local:"default",staging:"orange",custom:"purple"}[e]||"default"}function Pe(e){return{pending:"gray",running:"blue","gate-waiting":"gold",completed:"green",failed:"red",skipped:"gray"}[e]||"gray"}function pe(e){if(!e.stages.length)return 0;const s=e.stages.filter(d=>d.status==="completed").length;return Math.round(100*s/e.stages.length)}function w(e){if(!e.stages.length)return null;const s=Math.min(e.currentStage,e.stages.length-1);return e.stages[s]||null}function Oe(e){if(e.status!=="running")return!1;const s=w(e);return s&&s.status==="gate-waiting"&&s.gateRequired&&!s.gateApproved}function Le(e){return e.status==="pending"||e.status==="running"||e.status==="paused"}async function q(){g.value=!0,W.value={noDb:!1,error:""};try{const[e,s,d,x]=await Promise.all([o.execute("pipeline list",1e4).catch(()=>({output:""})),o.execute("pipeline deploys",1e4).catch(()=>({output:""})),o.execute("pipeline templates",8e3).catch(()=>({output:""})),o.execute("pipeline stats",8e3).catch(()=>({output:""}))]),G=[e,s,x].map(B=>ke(B.output)).find(B=>B.noDb);G&&(W.value=G),ae.value=yt(e.output),ne.value=bt(s.output),ie.value=kt(d.output),T.value=At(x.output)}catch(e){C.error(n("pipeline.msg.loadFailed")+": "+(e?.message||e))}finally{g.value=!1}}async function De(){if(!k.template){C.warning(n("pipeline.msg.selectTemplate"));return}if(k.configJson.trim())try{JSON.parse(k.configJson)}catch{C.warning(n("pipeline.msg.badConfigJson"));return}_.value=!0;try{const e=[`pipeline create --template ${k.template}`];k.name.trim()&&e.push(`--name "${k.name.trim().replace(/"/g,'\\"')}"`),k.configJson.trim()&&e.push(`--config '${k.configJson.trim().replace(/'/g,"'\\''")}'`);const{output:s}=await o.execute(e.join(" "),1e4);if(ke(s).noDb){C.error(n("pipeline.msg.needCcInit"));return}if(/error|Error|失败/i.test(s)&&!/"id"/.test(s)){C.error(n("pipeline.msg.createFailed")+": "+s.slice(0,120));return}C.success(n("pipeline.msg.createSuccess")),I.value=!1,ue(),await q()}catch(e){C.error(n("pipeline.msg.createFailed")+": "+(e?.message||e))}finally{_.value=!1}}async function je(e){await M(e,`pipeline start ${e.id}`,n("pipeline.msg.started"))}async function Ne(e){await M(e,`pipeline pause ${e.id}`,n("pipeline.msg.paused"))}async function Re(e){await M(e,`pipeline resume ${e.id}`,n("pipeline.msg.resumed"))}async function Ee(e){await M(e,`pipeline approve ${e.id}`,n("pipeline.msg.gateApproved"))}async function Fe(e){await M(e,`pipeline cancel ${e.id}`,n("pipeline.msg.cancelled"))}async function M(e,s,d){try{const{output:x}=await o.execute(s,8e3);if(/error|Error|失败/i.test(x)&&!/"id"/.test(x)){C.error(n("pipeline.msg.actionFailed")+": "+x.slice(0,120));return}C.success(d),await q()}catch(x){C.error(n("pipeline.msg.actionFailed")+": "+(x?.message||x))}}function Me(e){A.value=e,Y.value=!0}function ue(){k.template="feature",k.name="",k.configJson=""}return pt(q),(e,s)=>{const d=v("a-button"),x=v("a-space"),G=v("a-alert"),B=v("a-statistic"),P=v("a-card"),D=v("a-col"),ce=v("a-row"),K=v("a-radio-button"),de=v("a-radio-group"),h=v("a-tag"),fe=v("a-progress"),Je=v("a-popconfirm"),ge=v("a-table"),X=v("a-tab-pane"),Ie=v("a-tabs"),Ue=v("a-select-option"),we=v("a-select"),ee=v("a-form-item"),qe=v("a-input"),Ge=v("a-textarea"),Ke=v("a-form"),me=v("a-modal"),J=v("a-descriptions-item"),Ve=v("a-descriptions"),He=v("a-timeline-item"),We=v("a-timeline");return r(),b("div",null,[S("div",$t,[S("div",null,[S("h2",xt,p(e.$t("pipeline.title")),1),S("p",ht,p(e.$t("pipeline.subtitle")),1)]),i(x,null,{default:a(()=>[i(d,{loading:g.value,onClick:q},{icon:a(()=>[i(c(Xe))]),default:a(()=>[f(" "+p(e.$t("pipeline.refresh")),1)]),_:1},8,["loading"]),i(d,{type:"primary",onClick:s[0]||(s[0]=l=>I.value=!0)},{icon:a(()=>[i(c(et))]),default:a(()=>[f(" "+p(e.$t("pipeline.create")),1)]),_:1})]),_:1})]),W.value.noDb?(r(),m(G,{key:0,type:"info","show-icon":"",message:e.$t("pipeline.noDb.message"),description:e.$t("pipeline.noDb.description"),style:{"margin-bottom":"16px"}},null,8,["message","description"])):y("",!0),i(ce,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:a(()=>[i(D,{xs:12,sm:8,lg:5},{default:a(()=>[i(P,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[i(B,{title:e.$t("pipeline.stats.totalPipelines"),value:T.value.totalPipelines,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:a(()=>[i(c(ye))]),_:1},8,["title","value"])]),_:1})]),_:1}),i(D,{xs:12,sm:8,lg:5},{default:a(()=>[i(P,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[i(B,{title:e.$t("pipeline.stats.running"),value:T.value.pipelinesByStatus.running||0,"value-style":{color:(T.value.pipelinesByStatus.running||0)>0?"#52c41a":"#888",fontSize:"20px"}},{prefix:a(()=>[i(c(tt))]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),i(D,{xs:12,sm:8,lg:5},{default:a(()=>[i(P,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[i(B,{title:e.$t("pipeline.stats.totalStages"),value:T.value.totalStages,"value-style":{color:"#722ed1",fontSize:"20px"}},{prefix:a(()=>[i(c(lt))]),_:1},8,["title","value"])]),_:1})]),_:1}),i(D,{xs:12,sm:8,lg:5},{default:a(()=>[i(P,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[i(B,{title:e.$t("pipeline.stats.totalArtifacts"),value:T.value.totalArtifacts,"value-style":{color:"#13c2c2",fontSize:"20px"}},{prefix:a(()=>[i(c(at))]),_:1},8,["title","value"])]),_:1})]),_:1}),i(D,{xs:24,sm:8,lg:4},{default:a(()=>[i(P,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[i(B,{title:e.$t("pipeline.stats.totalDeploys"),value:T.value.totalDeploys,"value-style":{color:"#faad14",fontSize:"20px"}},{prefix:a(()=>[i(c(ve))]),_:1},8,["title","value"])]),_:1})]),_:1})]),_:1}),i(P,{title:e.$t("pipeline.stagesCardTitle"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"},"body-style":{padding:"12px 16px"}},{default:a(()=>[S("div",zt,[(r(!0),b(z,null,L(c(be),(l,u)=>(r(),b(z,{key:l},[S("span",{class:ut(["stage-pill",{"is-gate":c(_e).includes(l)}])},[S("span",Ct,p(u+1),1),f(" "+p(U(l))+" ",1),c(_e).includes(l)?(r(),m(c(V),{key:0,class:"gate-icon"})):y("",!0)],2),u<c(be).length-1?(r(),m(c(nt),{key:0,class:"stage-arrow"})):y("",!0)],64))),128))])]),_:1},8,["title"]),i(Ie,{activeKey:se.value,"onUpdate:activeKey":s[3]||(s[3]=l=>se.value=l),class:"pipeline-tabs"},{default:a(()=>[i(X,{key:"pipelines",tab:e.$t("pipeline.tabs.pipelines")},{default:a(()=>[S("div",Bt,[i(de,{value:R.value,"onUpdate:value":s[1]||(s[1]=l=>R.value=l),size:"small","button-style":"solid"},{default:a(()=>[i(K,{value:""},{default:a(()=>[f(p(e.$t("pipeline.filters.allTemplates")),1)]),_:1}),(r(!0),b(z,null,L(c(le),l=>(r(),m(K,{key:l,value:l},{default:a(()=>[f(p(F(l)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),i(de,{value:E.value,"onUpdate:value":s[2]||(s[2]=l=>E.value=l),size:"small"},{default:a(()=>[i(K,{value:""},{default:a(()=>[f(p(e.$t("pipeline.filters.allStatuses")),1)]),_:1}),(r(!0),b(z,null,L(c(Ae),l=>(r(),m(K,{key:l,value:l},{default:a(()=>[f(p(Q(l)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),i(ge,{columns:$e.value,"data-source":he.value,pagination:{pageSize:20,showTotal:l=>e.$t("pipeline.table.totalSuffix",{n:l})},size:"small",loading:g.value,style:{background:"var(--bg-card)"}},{bodyCell:a(({column:l,record:u})=>[l.key==="name"?(r(),b(z,{key:0},[S("span",Tt,p(u.name||e.$t("pipeline.table.unnamed")),1),S("div",Pt,p(u.id.slice(0,16)),1)],64)):y("",!0),l.key==="template"?(r(),m(h,{key:1,color:Z(u.template)},{default:a(()=>[f(p(F(u.template)),1)]),_:2},1032,["color"])):y("",!0),l.key==="progress"?(r(),m(fe,{key:2,percent:pe(u),size:"small",status:u.status==="failed"?"exception":u.status==="completed"?"success":"active",format:()=>`${u.currentStage}/${u.stages.length}`},null,8,["percent","status","format"])):y("",!0),l.key==="currentStage"?(r(),b(z,{key:3},[w(u)?(r(),m(h,{key:0,color:re(w(u).status)},{default:a(()=>[f(p(U(w(u).name)),1)]),_:2},1032,["color"])):(r(),b("span",Ot,"—"))],64)):y("",!0),l.key==="status"?(r(),m(h,{key:4,color:oe(u.status)},{default:a(()=>[f(p(Q(u.status)),1)]),_:2},1032,["color"])):y("",!0),l.key==="createdAt"?(r(),b("span",Lt,p(c(j)(u.createdAt)),1)):y("",!0),l.key==="action"?(r(),b(z,{key:6},[i(d,{size:"small",type:"link",onClick:O=>Me(u)},{default:a(()=>[f(p(e.$t("pipeline.table.actions.details")),1)]),_:1},8,["onClick"]),u.status==="pending"?(r(),m(d,{key:0,size:"small",type:"link",onClick:O=>je(u)},{default:a(()=>[f(p(e.$t("pipeline.table.actions.start")),1)]),_:1},8,["onClick"])):y("",!0),u.status==="running"?(r(),m(d,{key:1,size:"small",type:"link",onClick:O=>Ne(u)},{default:a(()=>[f(p(e.$t("pipeline.table.actions.pause")),1)]),_:1},8,["onClick"])):y("",!0),u.status==="paused"?(r(),m(d,{key:2,size:"small",type:"link",onClick:O=>Re(u)},{default:a(()=>[f(p(e.$t("pipeline.table.actions.resume")),1)]),_:1},8,["onClick"])):y("",!0),Oe(u)?(r(),m(d,{key:3,size:"small",type:"link",style:{color:"#52c41a"},onClick:O=>Ee(u)},{default:a(()=>[f(p(e.$t("pipeline.table.actions.approveGate")),1)]),_:1},8,["onClick"])):y("",!0),Le(u)?(r(),m(Je,{key:4,title:e.$t("pipeline.table.cancelConfirm"),"ok-text":e.$t("pipeline.table.cancelOk"),"cancel-text":e.$t("pipeline.table.cancelBack"),onConfirm:O=>Fe(u)},{default:a(()=>[i(d,{size:"small",type:"link",danger:""},{default:a(()=>[f(p(e.$t("pipeline.table.actions.cancel")),1)]),_:1})]),_:1},8,["title","ok-text","cancel-text","onConfirm"])):y("",!0)],64)):y("",!0)]),emptyText:a(()=>[S("div",Dt,[i(c(ye),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),f(" "+p(R.value||E.value?e.$t("pipeline.table.emptyFiltered"):e.$t("pipeline.table.empty")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),i(X,{key:"deploys",tab:e.$t("pipeline.tabs.deploys")},{default:a(()=>[i(ge,{columns:xe.value,"data-source":ne.value,pagination:{pageSize:20,showTotal:l=>e.$t("pipeline.table.totalSuffix",{n:l})},size:"small",loading:g.value,style:{background:"var(--bg-card)"}},{bodyCell:a(({column:l,record:u})=>[l.key==="pipeline"?(r(),b("span",jt,p(u.pipelineId.slice(0,12)),1)):y("",!0),l.key==="strategy"?(r(),m(h,{key:1,color:Te(u.strategy),style:{"font-family":"monospace"}},{default:a(()=>[f(p(u.strategy),1)]),_:2},1032,["color"])):y("",!0),l.key==="status"?(r(),m(h,{key:2,color:Be(u.status)},{default:a(()=>[f(p(Ce(u.status)),1)]),_:2},1032,["color"])):y("",!0),l.key==="createdAt"?(r(),b("span",Nt,p(c(j)(u.createdAt)),1)):y("",!0)]),emptyText:a(()=>[S("div",Rt,[i(c(ve),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),f(" "+p(e.$t("pipeline.table.emptyDeploys")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),i(X,{key:"templates",tab:e.$t("pipeline.tabs.templates")},{default:a(()=>[i(ce,{gutter:[16,16]},{default:a(()=>[(r(!0),b(z,null,L(ie.value,l=>(r(),m(D,{key:l.name,xs:24,sm:12,lg:12},{default:a(()=>[i(P,{title:F(l.name),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{extra:a(()=>[i(h,{color:Z(l.name)},{default:a(()=>[f(p(l.name),1)]),_:2},1032,["color"])]),default:a(()=>[S("p",Et,p(l.description),1),S("div",Ft,[(r(!0),b(z,null,L(l.stages,(u,O)=>(r(),m(h,{key:u,color:l.gateStages.includes(u)?"gold":"blue",style:{"font-size":"11px"}},{default:a(()=>[f(p(O+1)+". "+p(U(u))+" ",1),l.gateStages.includes(u)?(r(),m(c(V),{key:0,style:{"font-size":"10px","margin-left":"2px"}})):y("",!0)]),_:2},1032,["color"]))),128))])]),_:2},1032,["title"])]),_:2},1024))),128))]),_:1})]),_:1},8,["tab"])]),_:1},8,["activeKey"]),i(me,{open:I.value,"onUpdate:open":s[7]||(s[7]=l=>I.value=l),title:e.$t("pipeline.create_modal.title"),"confirm-loading":_.value,width:540,"ok-text":e.$t("pipeline.create_modal.ok"),"cancel-text":e.$t("pipeline.create_modal.cancel"),onOk:De,onCancel:ue},{default:a(()=>[i(Ke,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:a(()=>[i(ee,{label:e.$t("pipeline.create_modal.templateLabel"),required:""},{default:a(()=>[i(we,{value:k.template,"onUpdate:value":s[4]||(s[4]=l=>k.template=l)},{default:a(()=>[(r(!0),b(z,null,L(c(le),l=>(r(),m(Ue,{key:l,value:l},{default:a(()=>[f(p(F(l)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"]),i(ee,{label:e.$t("pipeline.create_modal.nameLabel")},{default:a(()=>[i(qe,{value:k.name,"onUpdate:value":s[5]||(s[5]=l=>k.name=l),placeholder:e.$t("pipeline.create_modal.namePlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),i(ee,{label:e.$t("pipeline.create_modal.configLabel")},{default:a(()=>[i(Ge,{value:k.configJson,"onUpdate:value":s[6]||(s[6]=l=>k.configJson=l),placeholder:e.$t("pipeline.create_modal.configPlaceholder"),"auto-size":{minRows:2,maxRows:5}},null,8,["value","placeholder"])]),_:1},8,["label"])]),_:1})]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),i(me,{open:Y.value,"onUpdate:open":s[8]||(s[8]=l=>Y.value=l),title:e.$t("pipeline.details.title",{label:A.value?.name||A.value?.id?.slice(0,12)||""}),width:780,footer:null},{default:a(()=>[A.value?(r(),b("div",Mt,[i(Ve,{column:2,size:"small",bordered:""},{default:a(()=>[i(J,{label:e.$t("pipeline.details.template")},{default:a(()=>[i(h,{color:Z(A.value.template)},{default:a(()=>[f(p(F(A.value.template)),1)]),_:1},8,["color"])]),_:1},8,["label"]),i(J,{label:e.$t("pipeline.details.status")},{default:a(()=>[i(h,{color:oe(A.value.status)},{default:a(()=>[f(p(Q(A.value.status)),1)]),_:1},8,["color"])]),_:1},8,["label"]),i(J,{label:e.$t("pipeline.details.progress"),span:2},{default:a(()=>[i(fe,{percent:pe(A.value),status:A.value.status==="failed"?"exception":A.value.status==="completed"?"success":"active",size:"small"},null,8,["percent","status"])]),_:1},8,["label"]),i(J,{label:e.$t("pipeline.details.createdAt")},{default:a(()=>[f(p(c(j)(A.value.createdAt)),1)]),_:1},8,["label"]),i(J,{label:e.$t("pipeline.details.startedAt")},{default:a(()=>[f(p(c(j)(A.value.startedAt)),1)]),_:1},8,["label"])]),_:1}),S("h4",Jt,p(e.$t("pipeline.details.stagesHeader")),1),i(We,{mode:"left"},{default:a(()=>[(r(!0),b(z,null,L(A.value.stages,l=>(r(),m(He,{key:l.id,color:Pe(l.status)},{dot:a(()=>[l.status==="completed"?(r(),m(c(it),{key:0,style:{color:"#52c41a"}})):l.status==="running"?(r(),m(c(st),{key:1,style:{color:"#1677ff"}})):l.status==="failed"?(r(),m(c(ot),{key:2,style:{color:"#ff4d4f"}})):l.status==="gate-waiting"?(r(),m(c(V),{key:3,style:{color:"#faad14"}})):(r(),m(c(rt),{key:4,style:{color:"var(--text-muted)"}}))]),default:a(()=>[S("div",It,[S("span",Ut,p(l.stageIndex+1)+". "+p(U(l.name)),1),i(h,{color:re(l.status),style:{"font-size":"11px"}},{default:a(()=>[f(p(ze(l.status)),1)]),_:2},1032,["color"]),l.gateRequired?(r(),m(h,{key:0,color:"gold",style:{"font-size":"10px"}},{default:a(()=>[i(c(V)),f(" "+p(e.$t("pipeline.details.needsApproval"))+" ",1),l.gateApproved?(r(),b("span",wt,p(e.$t("pipeline.details.approved")),1)):y("",!0)]),_:2},1024)):y("",!0)]),l.errorMessage?(r(),b("div",qt,p(e.$t("pipeline.details.errorPrefix"))+" "+p(l.errorMessage),1)):y("",!0),l.startedAt?(r(),b("div",Gt,[f(p(c(j)(l.startedAt))+" ",1),l.completedAt?(r(),b("span",Kt," → "+p(c(j)(l.completedAt)),1)):y("",!0)])):y("",!0)]),_:2},1032,["color"]))),128))]),_:1})])):y("",!0)]),_:1},8,["open","title"])])}}},Qt=Ye(Vt,[["__scopeId","data-v-8e02619c"]]);export{Qt as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.page-title[data-v-fe89c543]{margin:0;color:var(--text-primary);font-size:22px;font-weight:600}.page-sub[data-v-fe89c543]{margin:4px 0 0;color:var(--text-secondary);font-size:13px}.privacy-tabs[data-v-fe89c543] .ant-tabs-nav{margin-bottom:16px}.filter-bar[data-v-fe89c543]{display:flex;align-items:center;gap:12px;margin-bottom:12px;flex-wrap:wrap}.catalog-item[data-v-fe89c543]{display:flex;align-items:baseline;gap:8px;margin-bottom:6px;font-size:12px}.catalog-item[data-v-fe89c543]:last-child{margin-bottom:0}.catalog-name[data-v-fe89c543]{color:var(--text-primary);font-weight:500}.catalog-desc[data-v-fe89c543]{color:var(--text-secondary);font-size:11px;margin-left:auto}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{_ as Ze,u as et,b as tt,d as v}from"./index-D0d2TS5o.js";import{s as at}from"./community-parser-CO25nZFt.js";import{R as lt,as as ot,a0 as pe,H as ce,W as Le,O as it,a$ as nt}from"./icons--SBOhPAi.js";import{o as rt,M as m,R as f,P as s,c as a,N as o,K as g,r as h,L as u,O as y,u as _,F as z,Y as O,Q as C,S as k,_ as st,f as I,a as Z}from"./vendor-DhFY8mDK.js";function J(i){const r=at(i);if(!r)return null;try{return JSON.parse(r)}catch{}const n=r.match(/\{[\s\S]*\}|\[[\s\S]*\]/);if(!n)return null;try{return JSON.parse(n[0])}catch{return null}}const ut=Object.freeze(["initializing","training","aggregating","completed","failed"]),pt=Object.freeze(["pending","computing","completed"]),Re=Object.freeze(["shamir","beaver","gmw"]),ct=Object.freeze(["laplace","gaussian","exponential"]),dt=Object.freeze(["paillier","bfv","ckks"]),mt=Object.freeze(["sum","product","mean","count"]);function b(i,r=0){return typeof i=="number"&&Number.isFinite(i)?i:r}function yt(i,r=0){if(!i||typeof i!="object")return null;const n=i.id||"";return n?{key:n,id:n,name:String(i.name||n),description:String(i.description||""),_idx:r}:null}function de(i){const r=J(i);return Array.isArray(r)?r.map(yt).filter(Boolean):[]}function vt(i,r=0){if(!i||typeof i!="object")return null;const n=i.id||"";return n?{key:n,id:n,name:String(i.name||""),modelType:i.modelType??i.model_type??"neural_network",architecture:String(i.architecture||""),status:String(i.status||"initializing").toLowerCase(),currentRound:b(i.currentRound??i.current_round,0),totalRounds:b(i.totalRounds??i.total_rounds,0),participantCount:b(i.participantCount??i.participant_count,0),accuracy:b(i.accuracy,0),loss:i.loss==null?null:b(i.loss,null),learningRate:b(i.learningRate??i.learning_rate,0),aggregationStrategy:i.aggregationStrategy??i.aggregation_strategy??"",privacyBudgetSpent:b(i.privacyBudgetSpent??i.privacy_budget_spent,0),createdAt:i.createdAt??i.created_at??null,updatedAt:i.updatedAt??i.updated_at??null,_idx:r}:null}function ft(i){const r=J(i);return Array.isArray(r)?r.map(vt).filter(Boolean):[]}function gt(i,r=0){if(!i||typeof i!="object")return null;const n=i.id||"";if(!n)return null;let L=i.participantIds??i.participant_ids??[];if(typeof L=="string")try{L=JSON.parse(L)}catch{L=[]}return Array.isArray(L)||(L=[]),{key:n,id:n,computationType:i.computationType??i.computation_type??"",protocol:String(i.protocol||"shamir").toLowerCase(),participantCount:b(i.participantCount??i.participant_count,0),participantIds:L,resultHash:i.resultHash??i.result_hash??null,status:String(i.status||"pending").toLowerCase(),sharesReceived:b(i.sharesReceived??i.shares_received,0),sharesRequired:b(i.sharesRequired??i.shares_required,0),computationTimeMs:i.computationTimeMs??i.computation_time_ms??null,errorMessage:i.errorMessage??i.error_message??"",createdAt:i.createdAt??i.created_at??null,completedAt:i.completedAt??i.completed_at??null,_idx:r}}function bt(i){const r=J(i);return Array.isArray(r)?r.map(gt).filter(Boolean):[]}function ht(i){const r=J(i);return!r||typeof r!="object"||Array.isArray(r)?null:{published:!!r.published,reason:r.reason||null,data:r.data??null,epsilon:b(r.epsilon,0),delta:b(r.delta,0),mechanism:String(r.mechanism||""),budgetSpent:b(r.budgetSpent??r.budget_spent,0),budgetRemaining:b(r.budgetRemaining??r.budget_remaining,0)}}function _t(i){const r=J(i);return!r||typeof r!="object"||Array.isArray(r)?null:{result:r.result??null,operation:String(r.operation||""),scheme:String(r.scheme||""),inputCount:b(r.inputCount??r.input_count,0),encrypted:r.encrypted!==!1}}const kt={privacyBudget:{spent:0,limit:0,remaining:0,exhausted:!1},federatedLearning:{totalModels:0,completed:0,training:0,avgAccuracy:0},mpc:{totalComputations:0,completed:0,pending:0,byProtocol:{}}};function $t(i){const r=JSON.parse(JSON.stringify(kt)),n=J(i);if(!n||typeof n!="object"||Array.isArray(n))return r;if(n.privacyBudget&&typeof n.privacyBudget=="object"&&(r.privacyBudget.spent=b(n.privacyBudget.spent,0),r.privacyBudget.limit=b(n.privacyBudget.limit,0),r.privacyBudget.remaining=b(n.privacyBudget.remaining,0),r.privacyBudget.exhausted=!!n.privacyBudget.exhausted),n.federatedLearning&&typeof n.federatedLearning=="object"&&(r.federatedLearning.totalModels=b(n.federatedLearning.totalModels,0),r.federatedLearning.completed=b(n.federatedLearning.completed,0),r.federatedLearning.training=b(n.federatedLearning.training,0),r.federatedLearning.avgAccuracy=b(n.federatedLearning.avgAccuracy,0)),n.mpc&&typeof n.mpc=="object"&&(r.mpc.totalComputations=b(n.mpc.totalComputations,0),r.mpc.completed=b(n.mpc.completed,0),r.mpc.pending=b(n.mpc.pending,0),n.mpc.byProtocol&&typeof n.mpc.byProtocol=="object"))for(const[L,j]of Object.entries(n.mpc.byProtocol))typeof j=="number"&&Number.isFinite(j)&&(r.mpc.byProtocol[L]=j);return r}function Ae(i){if(i==null||i==="")return"—";const r=typeof i=="number"?new Date(i):new Date(String(i));return isNaN(r.getTime())?String(i):r.toLocaleString("zh-CN",{hour12:!1})}const St={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},Ct={class:"page-title"},xt={class:"page-sub"},zt={style:{"font-size":"11px",color:"var(--text-secondary)"}},Lt={class:"catalog-name"},Rt={class:"catalog-desc"},At={class:"catalog-name"},Mt={class:"catalog-desc"},jt={class:"catalog-name"},Ft={class:"catalog-desc"},Ot={class:"filter-bar"},Tt={style:{color:"var(--text-primary)","font-weight":"500"}},Pt={style:{color:"var(--text-secondary)","font-size":"11px","margin-top":"2px"}},Bt={style:{"font-size":"11px",color:"var(--text-secondary)"}},Ut={key:0,style:{"font-size":"11px",color:"var(--text-secondary)"}},wt={key:5,style:{"font-family":"monospace",color:"var(--text-secondary)"}},Nt={key:6,style:{color:"var(--text-secondary)","font-size":"11px"}},Et={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},qt={class:"filter-bar"},Ht={key:0,style:{color:"var(--text-primary)","font-family":"monospace","font-weight":"500"}},It={key:0,style:{"font-family":"monospace",color:"var(--text-secondary)","font-size":"12px"}},Jt={key:1,style:{color:"var(--text-muted)"}},Dt={key:5,style:{color:"var(--text-secondary)","font-size":"11px"}},Kt={key:1,style:{color:"var(--text-muted)","font-size":"11px","font-family":"monospace"}},Vt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},Wt={style:{"margin-top":"12px","font-size":"12px",color:"var(--text-secondary)"}},Qt={style:{"margin-top":"12px","font-size":"12px",color:"var(--text-secondary)"}},Yt={__name:"Privacy",setup(i){const r=et(),{t:n}=tt(),L=h(!1),j=h(!1),ee=h(!1),te=h(!1),ae=h(""),le=h(""),me=h([]),ye=h([]),ve=h([]),oe=h([]),fe=h([]),R=h({privacyBudget:{spent:0,limit:0,remaining:0,exhausted:!1},federatedLearning:{totalModels:0,completed:0,training:0,avgAccuracy:0},mpc:{totalComputations:0,completed:0,pending:0,byProtocol:{}}}),ie=h("models"),D=h(""),V=h(""),W=h(""),Q=h(!1),Y=h(!1),ne=h(!1),re=h(!1),c=Z({name:"",modelType:"",architecture:"",rounds:10,lr:.01,participants:0}),$=Z({type:"",protocol:"shamir",participants:"",threshold:null}),S=Z({data:"",mechanism:"laplace",epsilon:.1,delta:1e-5,sensitivity:1}),A=Z({data:"",operation:"sum",scheme:"paillier"}),M=h(null),T=h(null),Me=I(()=>[{title:n("privacy.modelCols.name"),key:"name"},{title:n("privacy.modelCols.status"),key:"status",width:"120px"},{title:n("privacy.modelCols.progress"),key:"progress",width:"160px"},{title:n("privacy.modelCols.accuracy"),key:"accuracy",width:"110px"},{title:n("privacy.modelCols.participants"),key:"participants",width:"90px"},{title:n("privacy.modelCols.budget"),key:"budget",width:"100px"},{title:n("privacy.modelCols.updatedAt"),key:"updatedAt",width:"160px"},{title:n("privacy.modelCols.action"),key:"action",width:"180px"}]),je=I(()=>[{title:n("privacy.computationCols.type"),key:"type",width:"160px"},{title:n("privacy.computationCols.protocol"),key:"protocol",width:"100px"},{title:n("privacy.computationCols.progress"),key:"progress"},{title:n("privacy.computationCols.status"),key:"status",width:"110px"},{title:n("privacy.computationCols.time"),key:"time",width:"110px"},{title:n("privacy.computationCols.createdAt"),key:"createdAt",width:"160px"},{title:n("privacy.computationCols.action"),key:"action",width:"160px"}]),Fe=I(()=>R.value.federatedLearning.avgAccuracy*100),Oe=I(()=>{const e=R.value.privacyBudget.remaining,l=R.value.privacyBudget.limit;if(l===0)return"#888";const d=e/l;return d<.2?"#ff4d4f":d<.5?"#faad14":"#52c41a"}),Te=I(()=>D.value?oe.value.filter(e=>e.status===D.value):oe.value),Pe=I(()=>{let e=fe.value;return V.value&&(e=e.filter(l=>l.protocol===V.value)),W.value&&(e=e.filter(l=>l.status===W.value)),e});function ge(e){const l=`privacy.flStatusLabels.${e}`,d=n(l);return d===l?e:d}function Be(e){return{initializing:"default",training:"processing",aggregating:"cyan",completed:"green",failed:"red"}[e]||"default"}function be(e){const l=`privacy.mpcStatusLabels.${e}`,d=n(l);return d===l?e:d}function Ue(e){return{pending:"default",computing:"processing",completed:"green"}[e]||"default"}function we(e){return e>=.85?"#52c41a":e>=.6?"#faad14":"#ff4d4f"}function Ne(e){return e.status==="initializing"||e.status==="training"||e.status==="aggregating"}function Ee({key:e}){e==="model"?Q.value=!0:e==="computation"?Y.value=!0:e==="dp"?(M.value=null,ne.value=!0):e==="he"&&(T.value=null,re.value=!0)}async function B(){L.value=!0;try{const[e,l,d,q,se,ue]=await Promise.all([r.execute("privacy protocols --json",8e3).catch(()=>({output:""})),r.execute("privacy dp-mechanisms --json",8e3).catch(()=>({output:""})),r.execute("privacy he-schemes --json",8e3).catch(()=>({output:""})),r.execute("privacy models --limit 100 --json",1e4).catch(()=>({output:""})),r.execute("privacy computations --limit 100 --json",1e4).catch(()=>({output:""})),r.execute("privacy report --json",8e3).catch(()=>({output:""}))]);me.value=de(e.output),ye.value=de(l.output),ve.value=de(d.output),oe.value=ft(q.output),fe.value=bt(se.output),R.value=$t(ue.output)}catch(e){v.error(n("privacy.msg.loadFailed")+": "+(e?.message||e))}finally{L.value=!1}}async function qe(){if(!c.name.trim()){v.warning(n("privacy.msg.modelNameEmpty"));return}j.value=!0;try{const e=[`privacy create-model "${c.name.trim().replace(/"/g,'\\"')}"`];c.modelType.trim()&&e.push(`--type "${c.modelType.trim().replace(/"/g,'\\"')}"`),c.architecture.trim()&&e.push(`--arch "${c.architecture.trim().replace(/"/g,'\\"')}"`),c.rounds!=null&&e.push(`--rounds ${c.rounds}`),c.lr!=null&&e.push(`--lr ${c.lr}`),c.participants!=null&&e.push(`--participants ${c.participants}`),e.push("--json");const{output:l}=await r.execute(e.join(" "),12e3);if(/error|失败/i.test(l)&&!/"modelId"/.test(l)){v.error(n("privacy.msg.modelCreateFailed")+": "+l.slice(0,120));return}v.success(n("privacy.msg.modelCreateSuccess")),Q.value=!1,he(),await B()}catch(e){v.error(n("privacy.msg.modelCreateFailed")+": "+(e?.message||e))}finally{j.value=!1}}async function He(){if(!$.type.trim()){v.warning(n("privacy.msg.computationTypeEmpty"));return}j.value=!0;try{const e=[`privacy create-computation "${$.type.trim().replace(/"/g,'\\"')}"`];if(e.push(`--protocol ${$.protocol}`),$.participants.trim()){const d=$.participants.split(/[,\s]+/).filter(Boolean).join(",");d&&e.push(`--participants "${d}"`)}$.threshold!=null&&e.push(`--threshold ${$.threshold}`),e.push("--json");const{output:l}=await r.execute(e.join(" "),1e4);if(/error|失败|invalid/i.test(l)&&!/"computationId"/.test(l)){v.error(n("privacy.msg.computationCreateFailed")+": "+l.slice(0,120));return}v.success(n("privacy.msg.computationCreateSuccess")),Y.value=!1,_e(),ie.value="computations",await B()}catch(e){v.error(n("privacy.msg.computationCreateFailed")+": "+(e?.message||e))}finally{j.value=!1}}async function Ie(e){ae.value=e.id;try{const{output:l}=await r.execute(`privacy train ${e.id} --json`,12e3);if(/error|失败/i.test(l)&&!/"trained"/.test(l)){v.error(n("privacy.msg.trainFailed")+": "+l.slice(0,120));return}v.success(n("privacy.msg.trainSuccess")),await B()}catch(l){v.error(n("privacy.msg.trainFailed")+": "+(l?.message||l))}finally{ae.value=""}}async function Je(e){try{const{output:l}=await r.execute(`privacy fail-model ${e.id} --json`,8e3);if(/error/i.test(l)&&!/"failed"/.test(l)){v.error(n("privacy.msg.failMarkFailed")+": "+l.slice(0,120));return}v.success(n("privacy.msg.failMarkSuccess")),await B()}catch(l){v.error(n("privacy.msg.failMarkFailed")+": "+(l?.message||l))}}async function De(e){le.value=e.id;try{const{output:l}=await r.execute(`privacy submit-share ${e.id} --json`,1e4);if(/error|失败/i.test(l)&&!/"submitted"/.test(l)){v.error(n("privacy.msg.submitFailed")+": "+l.slice(0,120));return}v.success(n("privacy.msg.submitSuccess")),await B()}catch(l){v.error(n("privacy.msg.submitFailed")+": "+(l?.message||l))}finally{le.value=""}}async function Ke(){if(!S.data.trim()){v.warning(n("privacy.msg.dataEmpty"));return}ee.value=!0,M.value=null;try{const e=["privacy dp-publish"];e.push(`--data ${JSON.stringify(S.data.trim())}`),e.push(`--mechanism ${S.mechanism}`),S.epsilon!=null&&e.push(`--epsilon ${S.epsilon}`),S.delta!=null&&e.push(`--delta ${S.delta}`),S.sensitivity!=null&&e.push(`--sensitivity ${S.sensitivity}`),e.push("--json");const{output:l}=await r.execute(e.join(" "),1e4),d=ht(l);if(!d){v.error(n("privacy.msg.dpFailed")+": "+l.slice(0,120));return}M.value=d,d.published?(v.success(n("privacy.msg.dpSuccess")),await B()):v.warning(n("privacy.msg.dpRejected",{reason:d.reason||"unknown"}))}catch(e){v.error(n("privacy.msg.dpFailed")+": "+(e?.message||e))}finally{ee.value=!1}}async function Ve(){if(!A.data.trim()){v.warning(n("privacy.msg.dataEmpty"));return}try{JSON.parse(A.data)}catch{v.warning(n("privacy.msg.dataInvalidJson"));return}te.value=!0,T.value=null;try{const e=["privacy he-query"];e.push(`--data ${JSON.stringify(A.data.trim())}`),e.push(`--operation ${A.operation}`),e.push(`--scheme ${A.scheme}`),e.push("--json");const{output:l}=await r.execute(e.join(" "),1e4),d=_t(l);if(!d){v.error(n("privacy.msg.heFailed")+": "+l.slice(0,120));return}T.value=d,v.success(n("privacy.msg.heSuccess",{scheme:d.scheme,op:d.operation}))}catch(e){v.error(n("privacy.msg.heFailed")+": "+(e?.message||e))}finally{te.value=!1}}function he(){c.name="",c.modelType="",c.architecture="",c.rounds=10,c.lr=.01,c.participants=0}function _e(){$.type="",$.protocol="shamir",$.participants="",$.threshold=null}return rt(B),(e,l)=>{const d=g("a-button"),q=g("a-menu-item"),se=g("a-menu"),ue=g("a-dropdown"),We=g("a-space"),U=g("a-statistic"),F=g("a-card"),w=g("a-col"),ke=g("a-row"),N=g("a-tag"),P=g("a-radio-button"),H=g("a-radio-group"),$e=g("a-progress"),Qe=g("a-popconfirm"),Se=g("a-table"),Ce=g("a-tab-pane"),Ye=g("a-tabs"),K=g("a-input"),x=g("a-form-item"),E=g("a-input-number"),G=g("a-form"),X=g("a-modal"),Ge=g("a-select-option"),Xe=g("a-select"),xe=g("a-textarea");return u(),m("div",null,[f("div",St,[f("div",null,[f("h2",Ct,s(e.$t("privacy.title")),1),f("p",xt,s(e.$t("privacy.subtitle")),1)]),a(We,null,{default:o(()=>[a(d,{loading:L.value,onClick:B},{icon:o(()=>[a(_(lt))]),default:o(()=>[y(" "+s(e.$t("privacy.refresh")),1)]),_:1},8,["loading"]),a(ue,{trigger:["click"]},{overlay:o(()=>[a(se,{onClick:Ee},{default:o(()=>[a(q,{key:"model"},{default:o(()=>[a(_(pe)),y(" "+s(e.$t("privacy.actions.model")),1)]),_:1}),a(q,{key:"computation"},{default:o(()=>[a(_(ce)),y(" "+s(e.$t("privacy.actions.computation")),1)]),_:1}),a(q,{key:"dp"},{default:o(()=>[a(_(Le)),y(" "+s(e.$t("privacy.actions.dp")),1)]),_:1}),a(q,{key:"he"},{default:o(()=>[a(_(it)),y(" "+s(e.$t("privacy.actions.he")),1)]),_:1})]),_:1})]),default:o(()=>[a(d,{type:"primary"},{icon:o(()=>[a(_(ot))]),default:o(()=>[y(" "+s(e.$t("privacy.actionDropdown")),1)]),_:1})]),_:1})]),_:1})]),a(ke,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:o(()=>[a(w,{xs:12,sm:8,lg:5},{default:o(()=>[a(F,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(U,{title:e.$t("privacy.stats.models"),value:R.value.federatedLearning.totalModels,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:o(()=>[a(_(pe))]),_:1},8,["title","value"])]),_:1})]),_:1}),a(w,{xs:12,sm:8,lg:5},{default:o(()=>[a(F,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(U,{title:e.$t("privacy.stats.avgAccuracy"),value:Fe.value,precision:1,suffix:"%","value-style":{color:R.value.federatedLearning.avgAccuracy>=.8?"#52c41a":"#faad14",fontSize:"20px"}},{prefix:o(()=>[a(_(nt))]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),a(w,{xs:12,sm:8,lg:5},{default:o(()=>[a(F,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(U,{title:e.$t("privacy.stats.computations"),value:R.value.mpc.totalComputations,"value-style":{color:"#722ed1",fontSize:"20px"}},{prefix:o(()=>[a(_(ce))]),_:1},8,["title","value"])]),_:1})]),_:1}),a(w,{xs:12,sm:8,lg:5},{default:o(()=>[a(F,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(U,{title:e.$t("privacy.stats.budget"),value:R.value.privacyBudget.remaining,precision:2,"value-style":{color:Oe.value,fontSize:"20px"}},{prefix:o(()=>[a(_(Le))]),suffix:o(()=>[f("span",zt,"/ "+s(R.value.privacyBudget.limit),1)]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),a(w,{xs:24,sm:8,lg:4},{default:o(()=>[a(F,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(U,{title:e.$t("privacy.stats.budgetState"),value:R.value.privacyBudget.exhausted?e.$t("privacy.stats.exhausted"):e.$t("privacy.stats.ample"),"value-style":{color:R.value.privacyBudget.exhausted?"#ff4d4f":"#52c41a",fontSize:"20px"}},null,8,["title","value","value-style"])]),_:1})]),_:1})]),_:1}),a(ke,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:o(()=>[a(w,{xs:24,md:8},{default:o(()=>[a(F,{title:e.$t("privacy.catalog.protocols"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"},"body-style":{padding:"12px 16px"}},{default:o(()=>[(u(!0),m(z,null,O(me.value,t=>(u(),m("div",{key:t.id,class:"catalog-item"},[a(N,{color:"purple",style:{"font-family":"monospace"}},{default:o(()=>[y(s(t.id),1)]),_:2},1024),f("span",Lt,s(t.name),1),f("span",Rt,s(t.description),1)]))),128))]),_:1},8,["title"])]),_:1}),a(w,{xs:24,md:8},{default:o(()=>[a(F,{title:e.$t("privacy.catalog.dp"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"},"body-style":{padding:"12px 16px"}},{default:o(()=>[(u(!0),m(z,null,O(ye.value,t=>(u(),m("div",{key:t.id,class:"catalog-item"},[a(N,{color:"orange",style:{"font-family":"monospace"}},{default:o(()=>[y(s(t.id),1)]),_:2},1024),f("span",At,s(t.name),1),f("span",Mt,s(t.description),1)]))),128))]),_:1},8,["title"])]),_:1}),a(w,{xs:24,md:8},{default:o(()=>[a(F,{title:e.$t("privacy.catalog.he"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"},"body-style":{padding:"12px 16px"}},{default:o(()=>[(u(!0),m(z,null,O(ve.value,t=>(u(),m("div",{key:t.id,class:"catalog-item"},[a(N,{color:"cyan",style:{"font-family":"monospace"}},{default:o(()=>[y(s(t.id),1)]),_:2},1024),f("span",jt,s(t.name),1),f("span",Ft,s(t.description),1)]))),128))]),_:1},8,["title"])]),_:1})]),_:1}),a(Ye,{activeKey:ie.value,"onUpdate:activeKey":l[3]||(l[3]=t=>ie.value=t),class:"privacy-tabs"},{default:o(()=>[a(Ce,{key:"models",tab:e.$t("privacy.tabs.models")},{default:o(()=>[f("div",Ot,[a(H,{value:D.value,"onUpdate:value":l[0]||(l[0]=t=>D.value=t),size:"small","button-style":"solid"},{default:o(()=>[a(P,{value:""},{default:o(()=>[y(s(e.$t("privacy.filter.all")),1)]),_:1}),(u(!0),m(z,null,O(_(ut),t=>(u(),C(P,{key:t,value:t},{default:o(()=>[y(s(ge(t)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),a(Se,{columns:Me.value,"data-source":Te.value,pagination:{pageSize:20,showTotal:t=>e.$t("privacy.table.totalSuffix",{n:t})},size:"small",loading:L.value,style:{background:"var(--bg-card)"}},{bodyCell:o(({column:t,record:p})=>[t.key==="name"?(u(),m(z,{key:0},[f("span",Tt,s(p.name),1),f("div",Pt,s(p.modelType)+" / "+s(p.architecture),1)],64)):k("",!0),t.key==="status"?(u(),C(N,{key:1,color:Be(p.status)},{default:o(()=>[y(s(ge(p.status)),1)]),_:2},1032,["color"])):k("",!0),t.key==="progress"?(u(),m(z,{key:2},[a($e,{percent:p.totalRounds?Math.round(100*p.currentRound/p.totalRounds):0,size:"small",status:p.status==="failed"?"exception":p.status==="completed"?"success":"active"},null,8,["percent","status"]),f("div",Bt,s(e.$t("privacy.table.rounds",{cur:p.currentRound,total:p.totalRounds})),1)],64)):k("",!0),t.key==="accuracy"?(u(),m(z,{key:3},[f("span",{style:st({color:we(p.accuracy),fontFamily:"monospace"})},s((p.accuracy*100).toFixed(1))+"% ",5),p.loss!=null?(u(),m("div",Ut," loss "+s(p.loss.toFixed(3)),1)):k("",!0)],64)):k("",!0),t.key==="participants"?(u(),C(N,{key:4,color:"blue",style:{"font-size":"11px"}},{default:o(()=>[y(s(p.participantCount),1)]),_:2},1024)):k("",!0),t.key==="budget"?(u(),m("span",wt,s(p.privacyBudgetSpent.toFixed(3)),1)):k("",!0),t.key==="updatedAt"?(u(),m("span",Nt,s(_(Ae)(p.updatedAt)),1)):k("",!0),t.key==="action"?(u(),m(z,{key:7},[Ne(p)?(u(),C(d,{key:0,size:"small",type:"link",loading:ae.value===p.id,onClick:ze=>Ie(p)},{default:o(()=>[y(s(e.$t("privacy.table.trainOne")),1)]),_:1},8,["loading","onClick"])):k("",!0),p.status!=="failed"&&p.status!=="completed"?(u(),C(Qe,{key:1,title:e.$t("privacy.table.failConfirm"),"ok-text":e.$t("privacy.table.failOk"),"cancel-text":e.$t("privacy.table.failCancel"),onConfirm:ze=>Je(p)},{default:o(()=>[a(d,{size:"small",type:"link",danger:""},{default:o(()=>[y(s(e.$t("privacy.table.failMark")),1)]),_:1})]),_:1},8,["title","ok-text","cancel-text","onConfirm"])):k("",!0)],64)):k("",!0)]),emptyText:o(()=>[f("div",Et,[a(_(pe),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),y(" "+s(D.value?e.$t("privacy.table.emptyModelsFiltered"):e.$t("privacy.table.emptyModels")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),a(Ce,{key:"computations",tab:e.$t("privacy.tabs.computations")},{default:o(()=>[f("div",qt,[a(H,{value:V.value,"onUpdate:value":l[1]||(l[1]=t=>V.value=t),size:"small"},{default:o(()=>[a(P,{value:""},{default:o(()=>[y(s(e.$t("privacy.filter.allProtocols")),1)]),_:1}),(u(!0),m(z,null,O(_(Re),t=>(u(),C(P,{key:t,value:t},{default:o(()=>[y(s(t),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),a(H,{value:W.value,"onUpdate:value":l[2]||(l[2]=t=>W.value=t),size:"small"},{default:o(()=>[a(P,{value:""},{default:o(()=>[y(s(e.$t("privacy.filter.allStatuses")),1)]),_:1}),(u(!0),m(z,null,O(_(pt),t=>(u(),C(P,{key:t,value:t},{default:o(()=>[y(s(be(t)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),a(Se,{columns:je.value,"data-source":Pe.value,pagination:{pageSize:20,showTotal:t=>e.$t("privacy.table.totalSuffix",{n:t})},size:"small",loading:L.value,style:{background:"var(--bg-card)"}},{bodyCell:o(({column:t,record:p})=>[t.key==="type"?(u(),m("span",Ht,s(p.computationType),1)):k("",!0),t.key==="protocol"?(u(),C(N,{key:1,color:"purple",style:{"font-family":"monospace"}},{default:o(()=>[y(s(p.protocol),1)]),_:2},1024)):k("",!0),t.key==="progress"?(u(),C($e,{key:2,percent:p.sharesRequired?Math.round(100*p.sharesReceived/p.sharesRequired):0,size:"small",status:p.status==="completed"?"success":"active",format:()=>`${p.sharesReceived}/${p.sharesRequired}`},null,8,["percent","status","format"])):k("",!0),t.key==="status"?(u(),C(N,{key:3,color:Ue(p.status)},{default:o(()=>[y(s(be(p.status)),1)]),_:2},1032,["color"])):k("",!0),t.key==="time"?(u(),m(z,{key:4},[p.computationTimeMs!=null?(u(),m("span",It,s(p.computationTimeMs)+" ms ",1)):(u(),m("span",Jt,"—"))],64)):k("",!0),t.key==="createdAt"?(u(),m("span",Dt,s(_(Ae)(p.createdAt)),1)):k("",!0),t.key==="action"?(u(),m(z,{key:6},[p.status!=="completed"?(u(),C(d,{key:0,size:"small",type:"link",loading:le.value===p.id,onClick:ze=>De(p)},{default:o(()=>[y(s(e.$t("privacy.table.submitShare")),1)]),_:1},8,["loading","onClick"])):(u(),m("span",Kt," hash "+s(p.resultHash?.slice(0,8)||"—"),1))],64)):k("",!0)]),emptyText:o(()=>[f("div",Vt,[a(_(ce),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),y(" "+s(e.$t("privacy.table.emptyComputations")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"])]),_:1},8,["activeKey"]),a(X,{open:Q.value,"onUpdate:open":l[10]||(l[10]=t=>Q.value=t),title:e.$t("privacy.model_modal.title"),"confirm-loading":j.value,width:540,"ok-text":e.$t("privacy.model_modal.ok"),"cancel-text":e.$t("privacy.model_modal.cancel"),onOk:qe,onCancel:he},{default:o(()=>[a(G,{"label-col":{span:6},"wrapper-col":{span:18},style:{"margin-top":"16px"}},{default:o(()=>[a(x,{label:e.$t("privacy.model_modal.nameLabel"),required:""},{default:o(()=>[a(K,{value:c.name,"onUpdate:value":l[4]||(l[4]=t=>c.name=t),placeholder:e.$t("privacy.model_modal.namePlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.model_modal.typeLabel")},{default:o(()=>[a(K,{value:c.modelType,"onUpdate:value":l[5]||(l[5]=t=>c.modelType=t),placeholder:e.$t("privacy.model_modal.typePlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.model_modal.archLabel")},{default:o(()=>[a(K,{value:c.architecture,"onUpdate:value":l[6]||(l[6]=t=>c.architecture=t),placeholder:e.$t("privacy.model_modal.archPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.model_modal.roundsLabel")},{default:o(()=>[a(E,{value:c.rounds,"onUpdate:value":l[7]||(l[7]=t=>c.rounds=t),min:1,max:1e3,style:{width:"100%"}},null,8,["value"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.model_modal.lrLabel")},{default:o(()=>[a(E,{value:c.lr,"onUpdate:value":l[8]||(l[8]=t=>c.lr=t),min:0,max:1,step:.001,style:{width:"100%"}},null,8,["value"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.model_modal.participantsLabel")},{default:o(()=>[a(E,{value:c.participants,"onUpdate:value":l[9]||(l[9]=t=>c.participants=t),min:0,max:1e3,style:{width:"100%"}},null,8,["value"])]),_:1},8,["label"])]),_:1})]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),a(X,{open:Y.value,"onUpdate:open":l[15]||(l[15]=t=>Y.value=t),title:e.$t("privacy.computation_modal.title"),"confirm-loading":j.value,width:520,"ok-text":e.$t("privacy.computation_modal.ok"),"cancel-text":e.$t("privacy.computation_modal.cancel"),onOk:He,onCancel:_e},{default:o(()=>[a(G,{"label-col":{span:6},"wrapper-col":{span:18},style:{"margin-top":"16px"}},{default:o(()=>[a(x,{label:e.$t("privacy.computation_modal.typeLabel"),required:""},{default:o(()=>[a(K,{value:$.type,"onUpdate:value":l[11]||(l[11]=t=>$.type=t),placeholder:e.$t("privacy.computation_modal.typePlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.computation_modal.protocolLabel")},{default:o(()=>[a(Xe,{value:$.protocol,"onUpdate:value":l[12]||(l[12]=t=>$.protocol=t)},{default:o(()=>[(u(!0),m(z,null,O(_(Re),t=>(u(),C(Ge,{key:t,value:t},{default:o(()=>[y(s(t),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.computation_modal.participantsLabel")},{default:o(()=>[a(xe,{value:$.participants,"onUpdate:value":l[13]||(l[13]=t=>$.participants=t),placeholder:e.$t("privacy.computation_modal.participantsPlaceholder"),"auto-size":{minRows:2,maxRows:4}},null,8,["value","placeholder"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.computation_modal.thresholdLabel")},{default:o(()=>[a(E,{value:$.threshold,"onUpdate:value":l[14]||(l[14]=t=>$.threshold=t),min:2,max:100,placeholder:e.$t("privacy.computation_modal.thresholdPlaceholder"),style:{width:"100%"}},null,8,["value","placeholder"])]),_:1},8,["label"])]),_:1})]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),a(X,{open:ne.value,"onUpdate:open":l[21]||(l[21]=t=>ne.value=t),title:e.$t("privacy.dp_modal.title"),"confirm-loading":ee.value,width:520,"ok-text":e.$t("privacy.dp_modal.ok"),"cancel-text":e.$t("privacy.dp_modal.cancel"),onOk:Ke},{default:o(()=>[a(G,{"label-col":{span:6},"wrapper-col":{span:18},style:{"margin-top":"16px"}},{default:o(()=>[a(x,{label:e.$t("privacy.dp_modal.dataLabel"),required:""},{default:o(()=>[a(K,{value:S.data,"onUpdate:value":l[16]||(l[16]=t=>S.data=t),placeholder:e.$t("privacy.dp_modal.dataPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.dp_modal.mechanismLabel")},{default:o(()=>[a(H,{value:S.mechanism,"onUpdate:value":l[17]||(l[17]=t=>S.mechanism=t)},{default:o(()=>[(u(!0),m(z,null,O(_(ct),t=>(u(),C(P,{key:t,value:t},{default:o(()=>[y(s(t),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.dp_modal.epsilonLabel")},{default:o(()=>[a(E,{value:S.epsilon,"onUpdate:value":l[18]||(l[18]=t=>S.epsilon=t),min:0,step:.01,style:{width:"100%"}},null,8,["value"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.dp_modal.deltaLabel")},{default:o(()=>[a(E,{value:S.delta,"onUpdate:value":l[19]||(l[19]=t=>S.delta=t),min:0,step:1e-6,style:{width:"100%"}},null,8,["value"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.dp_modal.sensitivityLabel")},{default:o(()=>[a(E,{value:S.sensitivity,"onUpdate:value":l[20]||(l[20]=t=>S.sensitivity=t),min:0,step:.1,style:{width:"100%"}},null,8,["value"])]),_:1},8,["label"])]),_:1}),M.value?(u(),C(F,{key:0,size:"small",style:{background:"var(--bg-base)","margin-top":"8px"}},{default:o(()=>[M.value.published?(u(),m(z,{key:0},[a(U,{title:e.$t("privacy.dp_modal.noisedTitle"),value:M.value.data,precision:3,"value-style":{color:"#52c41a"}},null,8,["title","value"]),f("div",Wt,[f("div",null,s(e.$t("privacy.dp_modal.spentLine",{n:M.value.budgetSpent.toFixed(3)})),1),f("div",null,s(e.$t("privacy.dp_modal.remainingLine",{n:M.value.budgetRemaining.toFixed(3)})),1),f("div",null,s(e.$t("privacy.dp_modal.mechanismLine",{name:M.value.mechanism,epsilon:M.value.epsilon})),1)])],64)):(u(),C(U,{key:1,title:e.$t("privacy.dp_modal.failedTitle"),value:M.value.reason||"unknown","value-style":{color:"#ff4d4f"}},null,8,["title","value"]))]),_:1})):k("",!0)]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),a(X,{open:re.value,"onUpdate:open":l[25]||(l[25]=t=>re.value=t),title:e.$t("privacy.he_modal.title"),"confirm-loading":te.value,width:500,"ok-text":e.$t("privacy.he_modal.ok"),"cancel-text":e.$t("privacy.he_modal.cancel"),onOk:Ve},{default:o(()=>[a(G,{"label-col":{span:6},"wrapper-col":{span:18},style:{"margin-top":"16px"}},{default:o(()=>[a(x,{label:e.$t("privacy.he_modal.dataLabel"),required:""},{default:o(()=>[a(xe,{value:A.data,"onUpdate:value":l[22]||(l[22]=t=>A.data=t),placeholder:e.$t("privacy.he_modal.dataPlaceholder"),"auto-size":{minRows:2,maxRows:4}},null,8,["value","placeholder"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.he_modal.operationLabel")},{default:o(()=>[a(H,{value:A.operation,"onUpdate:value":l[23]||(l[23]=t=>A.operation=t)},{default:o(()=>[(u(!0),m(z,null,O(_(mt),t=>(u(),C(P,{key:t,value:t},{default:o(()=>[y(s(t),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.he_modal.schemeLabel")},{default:o(()=>[a(H,{value:A.scheme,"onUpdate:value":l[24]||(l[24]=t=>A.scheme=t)},{default:o(()=>[(u(!0),m(z,null,O(_(dt),t=>(u(),C(P,{key:t,value:t},{default:o(()=>[y(s(t),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"])]),_:1}),T.value?(u(),C(F,{key:0,size:"small",style:{background:"var(--bg-base)","margin-top":"8px"}},{default:o(()=>[a(U,{title:e.$t("privacy.he_modal.resultTitle"),value:T.value.result,"value-style":{color:"#1677ff"}},null,8,["title","value"]),f("div",Qt,[f("div",null,s(e.$t("privacy.he_modal.schemeLine",{name:T.value.scheme})),1),f("div",null,s(e.$t("privacy.he_modal.operationLine",{name:T.value.operation})),1),f("div",null,s(e.$t("privacy.he_modal.inputCountLine",{n:T.value.inputCount})),1),T.value.encrypted?(u(),C(N,{key:0,color:"green",style:{"margin-top":"4px","font-size":"10px"}},{default:o(()=>[y(s(e.$t("privacy.he_modal.encrypted")),1)]),_:1})):k("",!0)])]),_:1})):k("",!0)]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"])])}}},ta=Ze(Yt,[["__scopeId","data-v-fe89c543"]]);export{ta as default};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{_ as se,b as le,u as re,d as T}from"./index-D0d2TS5o.js";import{u as ne}from"./useFs-CZCJDMup.js";import{R as ie,f as $,j as S,_ as B,an as H,ar as A}from"./icons--SBOhPAi.js";import{o as ce,M as m,R as d,P as l,u as e,c as a,N as o,Q as _,S as y,r as v,K as g,a as de,L as r,O as b,F as K,Y as Q,Z as ue,$ as pe,_ as fe,f as me}from"./vendor-DhFY8mDK.js";import"./useShellMode-CgR0wCYM.js";const ve={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},ge={class:"page-title"},_e={class:"page-sub"},ye={key:0,style:{"margin-top":"6px",color:"var(--text-muted)","font-size":"11px"}},xe={key:0,style:{"margin-top":"6px",color:"var(--text-muted)","font-size":"11px",overflow:"hidden","text-overflow":"ellipsis","white-space":"nowrap"}},be={key:0,style:{"margin-top":"6px",color:"var(--text-muted)","font-size":"11px"}},he={style:{"font-family":"monospace",color:"#ccc"}},je={style:{display:"flex","align-items":"flex-start",gap:"10px"}},ke={style:{flex:"1","min-width":"0"}},we={style:{"font-weight":"500",color:"#e0e0e0","font-size":"14px","font-family":"monospace","margin-bottom":"4px"}},Ce={style:{color:"var(--text-secondary)","font-size":"12px","line-height":"1.5"}},ze={key:0,style:{"margin-top":"8px","text-align":"right"}},De={style:{"margin-top":"16px",display:"flex","align-items":"center",gap:"12px","flex-wrap":"wrap"}},Pe={key:1,style:{color:"var(--text-secondary)","font-size":"12px"}},Se={key:0,style:{"margin-top":"12px",padding:"10px 12px",background:"var(--bg-base)",border:"1px solid var(--border-color)","border-radius":"6px","font-size":"12px",display:"flex","align-items":"center",gap:"10px"}},Fe={style:{"font-family":"monospace",color:"var(--text-secondary)",flex:"1",overflow:"hidden","text-overflow":"ellipsis","white-space":"nowrap"}},Le={style:{margin:"0","font-size":"12px","white-space":"pre-wrap","max-height":"200px","overflow-y":"auto"}},Me={key:0,style:{"text-align":"center",padding:"30px"}},Re={style:{color:"var(--text-muted)","margin-top":"8px"}},Ie={key:1},Oe={style:{background:"var(--bg-base)",border:"1px solid var(--border-color)","border-radius":"6px",padding:"12px",color:"#aaa","font-size":"12px","max-height":"400px","overflow-y":"auto","white-space":"pre-wrap"}},Te={__name:"ProjectInit",setup($e){const{t}=le(),z=re(),U=ne(),F=v(!1),L=v(!1),D=v(!1),M=v(!1),h=v(""),w=v(""),j=v(null),R=v(!1),I=v([]),p=v(null),k=v(!1),n=de({running:!1,edition:"",llmProvider:"",llmModel:"",setupDone:!1,setupDate:""}),W=[{name:"code-project",icon:B},{name:"medical-triage",icon:A},{name:"agriculture-expert",icon:S},{name:"general-assistant",icon:$},{name:"ai-media-creator",icon:S},{name:"ai-doc-creator",icon:B}],N=me(()=>W.map(s=>({...s,description:t(`projects.templates.${s.name}`)})));function Y(s){n.running=s.includes("Desktop app running")||s.includes("Running");const u=s.match(/Edition:\s+(\S+)/i);u&&(n.edition=u[1]);const c=s.match(/LLM:\s+(\S+)\s+\(([^)]+)\)/i);if(c)n.llmProvider=c[1],n.llmModel=c[2];else{const i=s.match(/LLM:\s+(\S+)/i);i&&(n.llmProvider=i[1])}n.setupDone=s.includes("Setup completed");const x=s.match(/Setup completed \(([^)]+)\)/i);if(x)try{n.setupDate=new Date(x[1]).toLocaleDateString("zh-CN")}catch{n.setupDate=""}}function Z(s){const u=[],c=s.split(`
|
|
2
|
-
`);for(const x of c){const i=x.match(/^\s*(\S+)\s*[=:]\s*(.+)$/);i&&u.push({key:i[1].trim(),value:i[2].trim()})}I.value=u,R.value=u.length>0}async function O(){F.value=!0;try{const[s,u]=await Promise.all([z.execute("status",15e3),z.execute("config list",15e3)]);Y(s.output),Z(u.output)}catch(s){console.error("refresh failed:",s)}finally{F.value=!1}}async function q(){if(h.value){if(p.value&&k.value){T.info(t("projects.messages.alreadyProjectInfo"));return}L.value=!0,j.value=null;try{let s=`init --template ${h.value} --yes`;p.value&&(s+=` --cwd "${p.value}"`);const{output:u,exitCode:c}=await z.execute(s,3e4);j.value={success:c===0,output:u},c===0&&(p.value&&(k.value=!0),await O())}catch(s){j.value={success:!1,output:t("projects.messages.initFailed",{err:s.message})}}finally{L.value=!1}}}async function G(){M.value=!0;try{const s=await U.pickDirectory({title:t("projects.folder.pickerTitle")});if(s.unsupported){T.warning(t("projects.messages.browserUnsupported"));return}if(s.canceled)return;p.value=s.path,k.value=s.initialized}catch(s){T.error(t("projects.messages.pickFolderFailed",{err:s.message}))}finally{M.value=!1}}function J(){p.value=null,k.value=!1}async function X(){D.value=!0,w.value="";try{const{output:s}=await z.execute("doctor",3e4);w.value=s}catch(s){w.value=t("projects.messages.doctorFailed",{err:s.message})}finally{D.value=!1}}return ce(O),(s,u)=>{const c=g("a-button"),x=g("a-statistic"),i=g("a-card"),C=g("a-col"),E=g("a-row"),ee=g("a-descriptions-item"),te=g("a-descriptions"),P=g("a-tag"),V=g("a-alert"),oe=g("a-spin"),ae=g("a-empty");return r(),m("div",null,[d("div",ve,[d("div",null,[d("h2",ge,l(e(t)("projects.title")),1),d("p",_e,l(e(t)("projects.subtitle")),1)]),a(c,{type:"primary",ghost:"",loading:F.value,onClick:O},{icon:o(()=>[a(e(ie))]),default:o(()=>[b(" "+l(e(t)("projects.refresh")),1)]),_:1},8,["loading"])]),a(E,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:o(()=>[a(C,{xs:24,sm:12,lg:6},{default:o(()=>[a(i,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(x,{title:e(t)("projects.stats.system"),value:n.running?e(t)("projects.stats.running"):e(t)("projects.stats.notRunning"),"value-style":{color:n.running?"#52c41a":"#888",fontSize:"16px"}},{prefix:o(()=>[a(e($))]),_:1},8,["title","value","value-style"]),n.edition?(r(),m("div",ye,l(e(t)("projects.stats.editionPrefix",{edition:n.edition})),1)):y("",!0)]),_:1})]),_:1}),a(C,{xs:24,sm:12,lg:6},{default:o(()=>[a(i,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(x,{title:e(t)("projects.stats.llmProvider"),value:n.llmProvider||e(t)("projects.stats.notConfigured"),"value-style":{color:n.llmProvider?"#1677ff":"#888",fontSize:"16px"}},{prefix:o(()=>[a(e(S))]),_:1},8,["title","value","value-style"]),n.llmModel?(r(),m("div",xe,l(n.llmModel),1)):y("",!0)]),_:1})]),_:1}),a(C,{xs:24,sm:12,lg:6},{default:o(()=>[a(i,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(x,{title:e(t)("projects.stats.init"),value:n.setupDone?e(t)("projects.stats.done"):e(t)("projects.stats.notDone"),"value-style":{color:n.setupDone?"#52c41a":"#faad14",fontSize:"16px"}},{prefix:o(()=>[a(e($))]),_:1},8,["title","value","value-style"]),n.setupDate?(r(),m("div",be,l(n.setupDate),1)):y("",!0)]),_:1})]),_:1}),a(C,{xs:24,sm:12,lg:6},{default:o(()=>[a(i,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(x,{title:e(t)("projects.stats.config"),value:R.value?e(t)("projects.stats.loaded"):e(t)("projects.stats.notLoaded"),"value-style":{color:R.value?"#52c41a":"#888",fontSize:"16px"}},{prefix:o(()=>[a(e(B))]),_:1},8,["title","value","value-style"])]),_:1})]),_:1})]),_:1}),I.value.length?(r(),_(i,{key:0,title:e(t)("projects.configCardTitle"),style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"}},{default:o(()=>[a(te,{column:{xs:1,sm:2,lg:3},bordered:"",size:"small"},{default:o(()=>[(r(!0),m(K,null,Q(I.value,f=>(r(),_(ee,{key:f.key,label:f.key},{default:o(()=>[d("span",he,l(f.value),1)]),_:2},1032,["label"]))),128))]),_:1})]),_:1},8,["title"])):y("",!0),a(i,{title:e(t)("projects.initCardTitle"),style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"}},{extra:o(()=>[a(P,{color:"blue"},{default:o(()=>[b(l(e(t)("projects.templateCount",{count:N.value.length})),1)]),_:1})]),default:o(()=>[a(E,{gutter:[16,16]},{default:o(()=>[(r(!0),m(K,null,Q(N.value,f=>(r(),_(C,{key:f.name,xs:24,sm:12,lg:8},{default:o(()=>[a(i,{size:"small",hoverable:"",class:ue(["template-card",{"template-selected":h.value===f.name}]),style:{background:"var(--bg-card)","border-color":"var(--border-color)",cursor:"pointer"},onClick:Be=>h.value=f.name},{default:o(()=>[d("div",je,[(r(),_(pe(f.icon),{style:{"font-size":"24px",color:"#1677ff","flex-shrink":"0","margin-top":"2px"}})),d("div",ke,[d("div",we,l(f.name),1),d("div",Ce,l(f.description),1)])]),h.value===f.name?(r(),m("div",ze,[a(P,{color:"green"},{default:o(()=>[b(l(e(t)("projects.selected")),1)]),_:1})])):y("",!0)]),_:2},1032,["class","onClick"])]),_:2},1024))),128))]),_:1}),d("div",De,[a(c,{type:"primary",loading:L.value,disabled:!h.value||p.value&&k.value,onClick:q},{icon:o(()=>[a(e(S))]),default:o(()=>[b(" "+l(p.value?e(t)("projects.actions.initInFolder"):e(t)("projects.actions.initCwd")),1)]),_:1},8,["loading","disabled"]),a(c,{loading:M.value,onClick:G},{icon:o(()=>[a(e(H))]),default:o(()=>[b(" "+l(e(t)("projects.actions.pickFolder")),1)]),_:1},8,["loading"]),p.value?(r(),_(c,{key:0,size:"small",type:"text",onClick:J},{default:o(()=>[b(l(e(t)("projects.actions.clear")),1)]),_:1})):y("",!0),h.value?(r(),m("span",Pe,l(e(t)("projects.actions.templatePrefix",{name:h.value})),1)):y("",!0)]),p.value?(r(),m("div",Se,[a(e(H),{style:fe({color:k.value?"#52c41a":"#1677ff"})},null,8,["style"]),d("span",Fe,l(p.value),1),k.value?(r(),_(P,{key:0,color:"green"},{default:o(()=>[b(l(e(t)("projects.folder.alreadyProject")),1)]),_:1})):(r(),_(P,{key:1,color:"blue"},{default:o(()=>[b(l(e(t)("projects.folder.pendingInit")),1)]),_:1}))])):y("",!0),p.value&&k.value?(r(),_(V,{key:1,type:"info","show-icon":"",style:{"margin-top":"12px"},message:e(t)("projects.folder.alreadyMessage"),description:e(t)("projects.folder.alreadyDescription")},null,8,["message","description"])):y("",!0),j.value?(r(),_(V,{key:2,message:j.value.success?e(t)("projects.initResult.success"):e(t)("projects.initResult.failure"),type:j.value.success?"success":"error","show-icon":"",closable:"",style:{"margin-top":"16px"},onClose:u[0]||(u[0]=f=>j.value=null)},{description:o(()=>[d("pre",Le,l(j.value.output),1)]),_:1},8,["message","type"])):y("",!0)]),_:1},8,["title"]),a(i,{title:e(t)("projects.doctor.cardTitle"),style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{extra:o(()=>[a(c,{loading:D.value,onClick:X,style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:o(()=>[a(e(A))]),default:o(()=>[b(" "+l(e(t)("projects.doctor.runButton")),1)]),_:1},8,["loading"])]),default:o(()=>[D.value?(r(),m("div",Me,[a(oe),d("div",Re,l(e(t)("projects.doctor.runningHint")),1)])):w.value?(r(),m("div",Ie,[d("pre",Oe,l(w.value),1)])):(r(),_(ae,{key:2,description:e(t)("projects.doctor.emptyHint")},null,8,["description"]))]),_:1},8,["title"])])}}},Ke=se(Te,[["__scopeId","data-v-c641f2a0"]]);export{Ke as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.template-card[data-v-c641f2a0]{transition:border-color .2s,box-shadow .2s}.template-card[data-v-c641f2a0]:hover{border-color:#1677ff!important}.template-selected[data-v-c641f2a0]{border-color:#1677ff!important;box-shadow:0 0 0 2px #1677ff26}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{_ as R,u as V,d as k}from"./index-D0d2TS5o.js";import{R as A,F as E}from"./icons--SBOhPAi.js";import{a as L,r as P,o as T,M as O,R as v,c as a,N as l,K as i,L as M,O as B,u as I,Q as D,S as N,f as W}from"./vendor-DhFY8mDK.js";const c=Object.freeze({rootPath:"",maxSizeMB:1e3,autoSync:!1,syncIntervalSeconds:300});function K(s){if(!s)return null;const e=s.trim();try{return JSON.parse(e)}catch{const o=e.match(/(\{[\s\S]*\}|\[[\s\S]*\])/);if(!o)return null;try{return JSON.parse(o[1])}catch{return null}}}function $(s){if(typeof s=="boolean")return s;const e=String(s).trim().toLowerCase();return e==="true"||e==="1"||e==="yes"||e==="on"}function j(s,e){if(typeof s=="number"&&Number.isFinite(s))return s;const o=parseFloat(s);return Number.isFinite(o)?o:e}function Q(s){const e={...c};if(!s)return e;const o=s.trim();if(!o||/key not found/i.test(o))return e;const n=K(o);if(n&&typeof n=="object"&&!Array.isArray(n))return n.rootPath!==void 0&&(e.rootPath=String(n.rootPath||"")),n.maxSizeMB!==void 0&&(e.maxSizeMB=j(n.maxSizeMB,c.maxSizeMB)),n.autoSync!==void 0&&(e.autoSync=$(n.autoSync)),n.syncIntervalSeconds!==void 0&&(e.syncIntervalSeconds=j(n.syncIntervalSeconds,c.syncIntervalSeconds)),e;const r=o.split(`
|
|
2
|
-
`);for(const u of r){const p=u.trim().match(/^(?:project\.)?(rootPath|maxSizeMB|autoSync|syncIntervalSeconds)\s*[=:]\s*(.+)$/i);if(!p)continue;const b=p[1],g=p[2].trim();b==="rootPath"?e.rootPath=g:b==="maxSizeMB"?e.maxSizeMB=j(g,c.maxSizeMB):b==="autoSync"?e.autoSync=$(g):b==="syncIntervalSeconds"&&(e.syncIntervalSeconds=j(g,c.syncIntervalSeconds))}return e}function F(s,e){const o={};for(const n of Object.keys(c))s[n]!==e[n]&&(o[n]=e[n]);return o}const q={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},G={style:{color:"var(--text-primary)"}},H={key:0,style:{color:"#faad14","font-size":"12px","margin-left":"8px"}},X={__name:"ProjectSettings",setup(s){const e=V(),o=P(!1),n=P(!1),r=L({...c}),u=P({...c}),h=W(()=>Object.keys(F(u.value,r)).length>0);async function p(){o.value=!0;try{const{output:d}=await e.execute("config get project",1e4),t=Q(d);Object.assign(r,t),u.value={...t}}catch(d){/key not found/i.test(d.message)?(Object.assign(r,c),u.value={...c}):k.error("加载配置失败: "+d.message)}finally{o.value=!1}}function b(){Object.assign(r,u.value)}async function g(){const d=F(u.value,r),t=Object.keys(d);if(t.length===0){k.info("没有需要保存的修改");return}n.value=!0;let f=0,S=0;for(const _ of t){const m=d[_],w=String(m).replace(/"/g,'\\"'),z=`config set project.${_} "${w}"`;try{const{output:x,exitCode:C}=await e.execute(z,1e4);C!==0||/error|failed|失败/i.test(x)?(S++,k.error(`保存 ${_} 失败: ${x.slice(0,80)}`)):f++}catch(x){S++,k.error(`保存 ${_} 失败: ${x.message}`)}}n.value=!1,S===0?(k.success(`保存成功(${f} 项)`),u.value={...r}):f>0&&(k.warning(`部分保存成功:${f} 成功 / ${S} 失败`),await p())}return T(()=>{p()}),(d,t)=>{const f=i("a-button"),S=i("a-alert"),_=i("a-input"),m=i("a-form-item"),w=i("a-input-number"),z=i("a-switch"),x=i("a-space"),C=i("a-form"),U=i("a-spin"),J=i("a-card");return M(),O("div",null,[v("div",q,[t[5]||(t[5]=v("div",null,[v("h2",{class:"page-title"},"项目存储配置"),v("p",{class:"page-sub"},"根目录 / 配额 / 自动同步")],-1)),a(f,{loading:o.value,onClick:p},{icon:l(()=>[a(I(A))]),default:l(()=>[t[4]||(t[4]=B(" 刷新 ",-1))]),_:1},8,["loading"])]),a(S,{message:"仅 Web 模式",description:"目录选择器(原生文件对话框)仅在桌面端可用,本页面需手动输入路径。修改根目录后需重启桌面应用生效;web 端只影响后端配置文件。",type:"info","show-icon":"",closable:"",style:{"margin-bottom":"16px"}}),a(J,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{title:l(()=>[v("span",G,[a(I(E),{style:{"margin-right":"8px"}}),t[6]||(t[6]=B("项目存储 ",-1))])]),default:l(()=>[a(U,{spinning:o.value},{default:l(()=>[a(C,{"label-col":{span:6},"wrapper-col":{span:18},style:{"max-width":"720px"}},{default:l(()=>[a(m,{label:"项目根目录"},{extra:l(()=>[...t[7]||(t[7]=[v("span",{style:{color:"var(--text-muted)","font-size":"11px"}}," 需绝对路径;修改后重启桌面应用生效 ",-1)])]),default:l(()=>[a(_,{value:r.rootPath,"onUpdate:value":t[0]||(t[0]=y=>r.rootPath=y),placeholder:"项目文件存储的根目录绝对路径",disabled:n.value},null,8,["value","disabled"])]),_:1}),a(m,{label:"最大项目大小"},{default:l(()=>[a(w,{value:r.maxSizeMB,"onUpdate:value":t[1]||(t[1]=y=>r.maxSizeMB=y),min:100,max:1e4,step:100,"addon-after":"MB",style:{width:"220px"},disabled:n.value},null,8,["value","disabled"])]),_:1}),a(m,{label:"自动同步"},{default:l(()=>[a(z,{checked:r.autoSync,"onUpdate:checked":t[2]||(t[2]=y=>r.autoSync=y),disabled:n.value},null,8,["checked","disabled"]),t[8]||(t[8]=v("span",{style:{"margin-left":"12px",color:"var(--text-secondary)","font-size":"12px"}}," 自动同步项目到后端服务器 ",-1))]),_:1}),r.autoSync?(M(),D(m,{key:0,label:"同步间隔"},{default:l(()=>[a(w,{value:r.syncIntervalSeconds,"onUpdate:value":t[3]||(t[3]=y=>r.syncIntervalSeconds=y),min:60,max:3600,step:60,"addon-after":"秒",style:{width:"220px"},disabled:n.value},null,8,["value","disabled"])]),_:1})):N("",!0),a(m,{"wrapper-col":{offset:6,span:18}},{default:l(()=>[a(x,null,{default:l(()=>[a(f,{onClick:b,disabled:n.value||o.value},{default:l(()=>[...t[9]||(t[9]=[B(" 重置 ",-1)])]),_:1},8,["disabled"]),a(f,{type:"primary",loading:n.value,disabled:!h.value,onClick:g},{default:l(()=>[...t[10]||(t[10]=[B(" 保存配置 ",-1)])]),_:1},8,["loading","disabled"]),h.value?(M(),O("span",H," 有未保存的修改 ")):N("",!0)]),_:1})]),_:1})]),_:1})]),_:1},8,["spinning"])]),_:1})])}}},te=R(X,[["__scopeId","data-v-17603429"]]);export{te as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
[data-v-17603429] .ant-card-head{border-color:var(--border-color)!important;color:var(--text-primary)!important}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.page-title[data-v-e27c9ce1]{margin:0 0 4px;font-size:20px}.page-sub[data-v-e27c9ce1]{margin:0;color:#888;font-size:13px}
|