chainlesschain 0.166.142 → 0.166.143

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (169) hide show
  1. package/README.md +107 -2
  2. package/package.json +2 -2
  3. package/src/assets/linux-subreaper/linux-arm64/manifest.json +1 -1
  4. package/src/assets/linux-subreaper/linux-x64/manifest.json +1 -1
  5. package/src/assets/web-panel/assets/{AIOps-BefmcZw2.js → AIOps-DNySV2Kf.js} +1 -1
  6. package/src/assets/web-panel/assets/{ActionButton-BBlS9rmj.js → ActionButton-ByFuxJsa.js} +1 -1
  7. package/src/assets/web-panel/assets/{Analytics-DfNjXT9e.js → Analytics-ETbdywk5.js} +1 -1
  8. package/src/assets/web-panel/assets/{AppLayout-CIBZPPMS.js → AppLayout-CuHekZaP.js} +2 -2
  9. package/src/assets/web-panel/assets/{Artifacts-CE66rTTZ.js → Artifacts-BJJq2BDq.js} +1 -1
  10. package/src/assets/web-panel/assets/{Audit-DOC8Lt8U.js → Audit-DXrietv8.js} +1 -1
  11. package/src/assets/web-panel/assets/{BackgroundAgents-9TMG041Q.js → BackgroundAgents-CFB1fxsr.js} +1 -1
  12. package/src/assets/web-panel/assets/{Backup-us3KWb9F.js → Backup-VLtflRmp.js} +1 -1
  13. package/src/assets/web-panel/assets/{BaseInput-D6Q95Wr5.js → BaseInput-BbqBaS2r.js} +1 -1
  14. package/src/assets/web-panel/assets/{Chat-BPrM5ARp.js → Chat-t0g7BXL8.js} +1 -1
  15. package/src/assets/web-panel/assets/{ChatBubbleRenderer-Drs9vSc4.js → ChatBubbleRenderer-JNFsjV0j.js} +1 -1
  16. package/src/assets/web-panel/assets/{Checkbox-DqZGMV0o.js → Checkbox-BCSclHQb.js} +1 -1
  17. package/src/assets/web-panel/assets/{Codegen-CmolL6wr.js → Codegen-BcyINEHT.js} +1 -1
  18. package/src/assets/web-panel/assets/{Col-BwHSmoYQ.js → Col-C-0WNlwS.js} +1 -1
  19. package/src/assets/web-panel/assets/{Community-DGWqobpd.js → Community-DxZeoORX.js} +1 -1
  20. package/src/assets/web-panel/assets/{Compact-t_yy09-r.js → Compact-BNnX4jpz.js} +1 -1
  21. package/src/assets/web-panel/assets/{Compliance-D0S8-EsN.js → Compliance-KnjHtn9C.js} +1 -1
  22. package/src/assets/web-panel/assets/{Cowork-Y1LiuRwP.js → Cowork-CDyCrhbX.js} +1 -1
  23. package/src/assets/web-panel/assets/{Cron-FTqEw7QV.js → Cron-DxpS3D1G.js} +1 -1
  24. package/src/assets/web-panel/assets/{Crosschain-C3rPZ4Qu.js → Crosschain-BSzTZYyc.js} +1 -1
  25. package/src/assets/web-panel/assets/{DID-Ba2zySM-.js → DID-Bfj9Vdne.js} +1 -1
  26. package/src/assets/web-panel/assets/{Dashboard-D6xyN2ND.js → Dashboard-CcERVdgo.js} +2 -2
  27. package/src/assets/web-panel/assets/{Dropdown-BF4QuXJw.js → Dropdown-BtYXAz6E.js} +1 -1
  28. package/src/assets/web-panel/assets/{EmailListRenderer-s9dUxq14.js → EmailListRenderer-fdCMeGXU.js} +1 -1
  29. package/src/assets/web-panel/assets/{EvolutionSettings-CoAKOfqZ.js → EvolutionSettings-LHxhcuF2.js} +1 -1
  30. package/src/assets/web-panel/assets/{FamilyGuardDashboard-CEznwH1c.js → FamilyGuardDashboard-MIgtLsos.js} +1 -1
  31. package/src/assets/web-panel/assets/{Federation-rIzOt8-a.js → Federation-9-TOztwa.js} +1 -1
  32. package/src/assets/web-panel/assets/{FormItemContext-BARFiExr.js → FormItemContext-BKcwEE6w.js} +1 -1
  33. package/src/assets/web-panel/assets/{GenericCardRenderer-DI0A4swS.js → GenericCardRenderer-DJBPVUK2.js} +1 -1
  34. package/src/assets/web-panel/assets/{Git-DdmysND4.js → Git-C_XYISjG.js} +1 -1
  35. package/src/assets/web-panel/assets/{Governance-DrdhwUz2.js → Governance-DWsbPrwq.js} +1 -1
  36. package/src/assets/web-panel/assets/{Inference-Scm8tumd.js → Inference-D0_bYket.js} +1 -1
  37. package/src/assets/web-panel/assets/{KnowledgeGraph-_6bgPs4W.js → KnowledgeGraph-BoA3VQlw.js} +1 -1
  38. package/src/assets/web-panel/assets/{Logs-DW_v7bSo.js → Logs-LEGItChf.js} +1 -1
  39. package/src/assets/web-panel/assets/{MarkdownRenderer-7JABuv1j.js → MarkdownRenderer-DOHVc-Uw.js} +1 -1
  40. package/src/assets/web-panel/assets/{Marketplace-0h3YSvME.js → Marketplace-BKovl9NH.js} +1 -1
  41. package/src/assets/web-panel/assets/{McpTools-Byrg0Y3e.js → McpTools-D61ktoGb.js} +1 -1
  42. package/src/assets/web-panel/assets/{Memory-Cyoq-o29.js → Memory-CllorS0l.js} +1 -1
  43. package/src/assets/web-panel/assets/{MobileBridge-ISIlploU.js → MobileBridge-D-dJ78bk.js} +1 -1
  44. package/src/assets/web-panel/assets/{MobileProjects-04EncaRx.js → MobileProjects-CaxMKkd3.js} +1 -1
  45. package/src/assets/web-panel/assets/{Mtc-BMzkpyOF.js → Mtc-qEc62Qsx.js} +1 -1
  46. package/src/assets/web-panel/assets/{MtcAudit-Cx7BR5sz.js → MtcAudit-BY68jOZJ.js} +1 -1
  47. package/src/assets/web-panel/assets/{Multisig-D4pmkSX4.js → Multisig-eCCR8ELt.js} +1 -1
  48. package/src/assets/web-panel/assets/{NLProgramming-CCfaaWNu.js → NLProgramming-VtGv8pky.js} +1 -1
  49. package/src/assets/web-panel/assets/{Notes-Mq-1ZyaH.js → Notes-CPkYQySe.js} +1 -1
  50. package/src/assets/web-panel/assets/{NotificationSettings-rzf5V1TR.js → NotificationSettings-BuAvlHUu.js} +1 -1
  51. package/src/assets/web-panel/assets/{OrderTableRenderer-OREUs5ue.js → OrderTableRenderer-CLf_HAGv.js} +1 -1
  52. package/src/assets/web-panel/assets/{Organization-BQfOATgw.js → Organization-DjujhMbD.js} +1 -1
  53. package/src/assets/web-panel/assets/{Overflow-D7Pa6aaA.js → Overflow-RznznTS4.js} +1 -1
  54. package/src/assets/web-panel/assets/{P2P-CaJ79ZsC.js → P2P-DSa5ot0t.js} +1 -1
  55. package/src/assets/web-panel/assets/{PdhVaultBrowser-CtimQQN3.js → PdhVaultBrowser-oSEh6vkf.js} +2 -2
  56. package/src/assets/web-panel/assets/{Permissions-AzmmkLZ0.js → Permissions-CdOZguX9.js} +1 -1
  57. package/src/assets/web-panel/assets/{PersonalDataHub-BRU8ME7z.js → PersonalDataHub-B4--6iEF.js} +1 -1
  58. package/src/assets/web-panel/assets/{Pipeline-BnNqutXh.js → Pipeline-BnI57jE8.js} +1 -1
  59. package/src/assets/web-panel/assets/{Privacy-gMyZcxsz.js → Privacy-C8MId3ad.js} +1 -1
  60. package/src/assets/web-panel/assets/{ProjectInit-CkK-Fvr0.js → ProjectInit-DPGyYO8a.js} +1 -1
  61. package/src/assets/web-panel/assets/{ProjectSettings-CGY_uiIX.js → ProjectSettings-qBMqaJaO.js} +1 -1
  62. package/src/assets/web-panel/assets/{Projects-DBNC7xXG.js → Projects-Bq87Syce.js} +1 -1
  63. package/src/assets/web-panel/assets/{Providers-BVgWawtE.js → Providers-CVuG9Ugf.js} +1 -1
  64. package/src/assets/web-panel/assets/{QrScannerModal-DZILESCa.js → QrScannerModal-C94c8m3q.js} +1 -1
  65. package/src/assets/web-panel/assets/{QuickAsk-DwRBzFWW.js → QuickAsk-BvfsXZ8s.js} +1 -1
  66. package/src/assets/web-panel/assets/{Recommend-B3VxvUih.js → Recommend-CoezBYH9.js} +1 -1
  67. package/src/assets/web-panel/assets/{RemoteSession-DM74lufU.js → RemoteSession-CcYC4v3u.js} +1 -1
  68. package/src/assets/web-panel/assets/{Reputation-DOOEuGHh.js → Reputation-diDbL4cO.js} +1 -1
  69. package/src/assets/web-panel/assets/{Row-BZJYAo0S.js → Row-5qp3_fNS.js} +1 -1
  70. package/src/assets/web-panel/assets/{RssFeed-CYw44jcD.js → RssFeed-BCsMvpV4.js} +1 -1
  71. package/src/assets/web-panel/assets/{Search-CbypjDNG.js → Search-Br9nVxOp.js} +1 -1
  72. package/src/assets/web-panel/assets/{Security-0rSBDrXh.js → Security-BdOUzRfA.js} +1 -1
  73. package/src/assets/web-panel/assets/{Services-kqP79CBD.js → Services-Cp9TqzyN.js} +1 -1
  74. package/src/assets/web-panel/assets/{Skeleton-BjxvGVfI.js → Skeleton-DSdWsUMR.js} +1 -1
  75. package/src/assets/web-panel/assets/{Skills-SOoWyPCO.js → Skills-DRczAMTe.js} +1 -1
  76. package/src/assets/web-panel/assets/{Sla-kdRVAT19.js → Sla-B6G_Vd8N.js} +1 -1
  77. package/src/assets/web-panel/assets/{SpeechSettings-DILtcMaJ.js → SpeechSettings-BCcLx5x4.js} +1 -1
  78. package/src/assets/web-panel/assets/{SyncSettings-C98Jauc4.js → SyncSettings-BFhwtxCp.js} +1 -1
  79. package/src/assets/web-panel/assets/{Tasks-Bw-KaQAs.js → Tasks-DGRE6VHO.js} +1 -1
  80. package/src/assets/web-panel/assets/{Templates-CDJ027Hd.js → Templates-CJkJRFzd.js} +1 -1
  81. package/src/assets/web-panel/assets/{Tenant-BqNV62UA.js → Tenant-CAOv6p00.js} +1 -1
  82. package/src/assets/web-panel/assets/{Terminal-B8aQ3GLO.js → Terminal-CDrwwrKj.js} +1 -1
  83. package/src/assets/web-panel/assets/{TimelineRenderer-BSpccq11.js → TimelineRenderer-DI0YE2SN.js} +1 -1
  84. package/src/assets/web-panel/assets/{Tokens-BbGMoFO6.js → Tokens-DmqWTZSG.js} +1 -1
  85. package/src/assets/web-panel/assets/{Trigger-D75Mawa_.js → Trigger-CkXkhmjk.js} +1 -1
  86. package/src/assets/web-panel/assets/{Trust-BiK_Pk05.js → Trust-U8YJLcoJ.js} +1 -1
  87. package/src/assets/web-panel/assets/{UkeySign-Dv2xX_b9.js → UkeySign-BLTozMmr.js} +1 -1
  88. package/src/assets/web-panel/assets/{VideoEditing-CdBWfeEE.js → VideoEditing-DHKyFlZa.js} +1 -1
  89. package/src/assets/web-panel/assets/{Wallet-Cvrp4agg.js → Wallet-DapBxIQt.js} +1 -1
  90. package/src/assets/web-panel/assets/{WebAuthn-D0Htlf3v.js → WebAuthn-CkvG3yOr.js} +1 -1
  91. package/src/assets/web-panel/assets/{WorkflowEditor-nuUBOHIF.js → WorkflowEditor-cNLsinXP.js} +1 -1
  92. package/src/assets/web-panel/assets/{chat-C6MLShIo.js → chat-BzgkgfMC.js} +1 -1
  93. package/src/assets/web-panel/assets/{colors-9G5FqFOC.js → colors-BPpVKQsb.js} +1 -1
  94. package/src/assets/web-panel/assets/{compact-item-0M49EurU.js → compact-item-zepznuTv.js} +1 -1
  95. package/src/assets/web-panel/assets/{createContext-CiDDLED_.js → createContext-BRto-SQH.js} +1 -1
  96. package/src/assets/web-panel/assets/{hasIn-wZvUczmn.js → hasIn-CqsmU_n6.js} +1 -1
  97. package/src/assets/web-panel/assets/{index-B0JZ_ccM.js → index-B-bNzvdU.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-B_XOMujL.js → index-B0Z6rfV-.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-DwX9cOL6.js → index-B9_jRD2e.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-DwUOiN8M.js → index-BEXKES7V.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-8jz-X3xg.js → index-BGHd4D8F.js} +1 -1
  102. package/src/assets/web-panel/assets/{index-BVV2mBbo.js → index-BLwY9y0X.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-qJcOtd8J.js → index-B_l6gfDh.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-B6TAOS4G.js → index-BeBxP1M6.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-C63qiwQz.js → index-BeSzdB7x.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-k0BVfcwQ.js → index-BuBnM6Kz.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-BXIY2BIN.js → index-Bz7pG8z3.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-D51V5vmz.js → index-CBI-7Q3W.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-BWTcG128.js → index-CTk9gY88.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-sBsJaBmM.js → index-CdHXVSZ4.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-Dclwd_lj.js → index-CmPnDXx4.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-BlcOkfzz.js → index-CnezE05k.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-DOxTmc3k.js → index-CwkhrUmw.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-Cs66y4oC.js → index-CzoKAiyT.js} +3 -3
  115. package/src/assets/web-panel/assets/{index-BzeA3eRQ.js → index-DDPmr5Yr.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-CdaLWIz-.js → index-DEbAW3Ec.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-DvWRS-s7.js → index-DJSn3owP.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-DN9t1qjW.js → index-DKa_jSfj.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-BTCIIdoS.js → index-DUclk35X.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-BmS2P_eX.js → index-DXkw-nt5.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-CoxzvhoN.js → index-D_-w4KkD.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-Cz1SAgnb.js → index-D_asIcU7.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-BfwJm0DU.js → index-Df_CY0We.js} +1 -1
  124. package/src/assets/web-panel/assets/{index-JhfNEldK.js → index-Dnvj_XU-.js} +1 -1
  125. package/src/assets/web-panel/assets/index-DruOFzuF.js +1 -0
  126. package/src/assets/web-panel/assets/{index-D9J_tLGk.js → index-DvGttIXQ.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-DcZxOXd8.js → index-JrVhUwyh.js} +1 -1
  128. package/src/assets/web-panel/assets/{index-CdUmgLxP.js → index-LVvzNdPa.js} +1 -1
  129. package/src/assets/web-panel/assets/{index-CTy9gD3m.js → index-Q5sAV7wp.js} +1 -1
  130. package/src/assets/web-panel/assets/{index-CtbFv3Et.js → index-S8fkzbQ_.js} +1 -1
  131. package/src/assets/web-panel/assets/{index-BCfxxScC.js → index-Z6DBe2RU.js} +1 -1
  132. package/src/assets/web-panel/assets/{index-dJ_V_Fqy.js → index-faHHtBKj.js} +1 -1
  133. package/src/assets/web-panel/assets/index-hhOrZ6HO.js +1 -0
  134. package/src/assets/web-panel/assets/{index-DeHSwWVG.js → index-w36TkwyO.js} +1 -1
  135. package/src/assets/web-panel/assets/{index-D2wN6VIq.js → index-wbvZayBb.js} +1 -1
  136. package/src/assets/web-panel/assets/{initDefaultProps-DyIyjurJ.js → initDefaultProps-BlhbrsQk.js} +1 -1
  137. package/src/assets/web-panel/assets/{motion-B2D0PuTM.js → motion-UZx12NPM.js} +1 -1
  138. package/src/assets/web-panel/assets/{move-B22T5MnN.js → move-BTby5W4q.js} +1 -1
  139. package/src/assets/web-panel/assets/{mtc-parser-i4b7HNzF.js → mtc-parser-BOOaGiCg.js} +1 -1
  140. package/src/assets/web-panel/assets/{omit-ByNIr_gz.js → omit-BVylGzEr.js} +1 -1
  141. package/src/assets/web-panel/assets/{pickAttrs-_xP2RvxA.js → pickAttrs-Cp3Nflbr.js} +1 -1
  142. package/src/assets/web-panel/assets/{placementArrow-CVDvzK0z.js → placementArrow-BVXYvwH2.js} +1 -1
  143. package/src/assets/web-panel/assets/{responsiveObserve-CI1toXJ_.js → responsiveObserve-C67SbpBN.js} +1 -1
  144. package/src/assets/web-panel/assets/{slide-2_VosSRQ.js → slide-CnBvM22R.js} +1 -1
  145. package/src/assets/web-panel/assets/{statusUtils-CMiWWrZC.js → statusUtils-T8fy53tf.js} +1 -1
  146. package/src/assets/web-panel/assets/{styleChecker-DY8wTVCe.js → styleChecker-Bf7i4nlm.js} +1 -1
  147. package/src/assets/web-panel/assets/{useFlexGapSupport-DkdcgIyl.js → useFlexGapSupport-BUKk7jqw.js} +1 -1
  148. package/src/assets/web-panel/assets/{useFs-gpl11PEF.js → useFs-T5lg6SpD.js} +1 -1
  149. package/src/assets/web-panel/assets/{usePersonalDataHub-DqnQ0H9y.js → usePersonalDataHub-Brvye8Tg.js} +1 -1
  150. package/src/assets/web-panel/assets/{vnode-CgY9xUvr.js → vnode-CK992ojP.js} +1 -1
  151. package/src/assets/web-panel/assets/{zoom-Ch0jan5_.js → zoom-CcABB_97.js} +1 -1
  152. package/src/assets/web-panel/index.html +1 -1
  153. package/src/command-help-index.json +1 -1
  154. package/src/commands/goal.js +211 -177
  155. package/src/commands/setup.js +17 -0
  156. package/src/data/changelog.json +14 -1
  157. package/src/lib/llm-onboarding-catalog.json +4 -3
  158. package/src/lib/plugin-runtime/cli-goal-capabilities.js +1 -0
  159. package/src/lib/plugin-runtime/cli-goal-draft-request.js +24 -10
  160. package/src/lib/plugin-runtime/cli-goal-drafts.js +77 -30
  161. package/src/lib/plugin-runtime/examples/goal-task-creator/README.md +60 -0
  162. package/src/lib/plugin-runtime/examples/goal-task-creator/plugin.json +13 -0
  163. package/src/lib/plugin-runtime/examples/project-delivery-assistant/README.md +47 -14
  164. package/src/lib/plugin-runtime/examples/project-delivery-assistant/plugin.json +8 -7
  165. package/src/lib/plugin-runtime/goal-extensions.js +1 -0
  166. package/src/lib/project-goal-connection.js +15 -3
  167. package/src/lib/project-goal-draft-connection.js +18 -11
  168. package/src/assets/web-panel/assets/index-C101Sec6.js +0 -1
  169. package/src/assets/web-panel/assets/index-D23TaGOp.js +0 -1
@@ -1 +1 @@
1
- import{t as D,_ as Ze,u as et,b as tt,d as v}from"./index-Cs66y4oC.js";import{R as at,at as lt,a1 as pe,H as ce,X as Le,Q as ot,b0 as it}from"./icons-DlxlFL4g.js";import{o as nt,M as m,R as f,P as s,c as a,N as o,K as g,r as h,L as u,O as y,u as _,F as z,Y as T,Q as S,S as k,_ as rt,f as I,a as Z}from"./vendor-BXcBOG8b.js";const st=Object.freeze(["initializing","training","aggregating","completed","failed"]),ut=Object.freeze(["pending","computing","completed"]),Re=Object.freeze(["shamir","beaver","gmw"]),pt=Object.freeze(["laplace","gaussian","exponential"]),ct=Object.freeze(["paillier","bfv","ckks"]),dt=Object.freeze(["sum","product","mean","count"]);function b(i,r=0){return typeof i=="number"&&Number.isFinite(i)?i:r}function mt(i,r=0){if(!i||typeof i!="object")return null;const n=i.id||"";return n?{key:n,id:n,name:String(i.name||n),description:String(i.description||""),_idx:r}:null}function de(i){const r=D(i);return Array.isArray(r)?r.map(mt).filter(Boolean):[]}function yt(i,r=0){if(!i||typeof i!="object")return null;const n=i.id||"";return n?{key:n,id:n,name:String(i.name||""),modelType:i.modelType??i.model_type??"neural_network",architecture:String(i.architecture||""),status:String(i.status||"initializing").toLowerCase(),currentRound:b(i.currentRound??i.current_round,0),totalRounds:b(i.totalRounds??i.total_rounds,0),participantCount:b(i.participantCount??i.participant_count,0),accuracy:b(i.accuracy,0),loss:i.loss==null?null:b(i.loss,null),learningRate:b(i.learningRate??i.learning_rate,0),aggregationStrategy:i.aggregationStrategy??i.aggregation_strategy??"",privacyBudgetSpent:b(i.privacyBudgetSpent??i.privacy_budget_spent,0),createdAt:i.createdAt??i.created_at??null,updatedAt:i.updatedAt??i.updated_at??null,_idx:r}:null}function vt(i){const r=D(i);return Array.isArray(r)?r.map(yt).filter(Boolean):[]}function ft(i,r=0){if(!i||typeof i!="object")return null;const n=i.id||"";if(!n)return null;let L=i.participantIds??i.participant_ids??[];if(typeof L=="string")try{L=JSON.parse(L)}catch{L=[]}return Array.isArray(L)||(L=[]),{key:n,id:n,computationType:i.computationType??i.computation_type??"",protocol:String(i.protocol||"shamir").toLowerCase(),participantCount:b(i.participantCount??i.participant_count,0),participantIds:L,resultHash:i.resultHash??i.result_hash??null,status:String(i.status||"pending").toLowerCase(),sharesReceived:b(i.sharesReceived??i.shares_received,0),sharesRequired:b(i.sharesRequired??i.shares_required,0),computationTimeMs:i.computationTimeMs??i.computation_time_ms??null,errorMessage:i.errorMessage??i.error_message??"",createdAt:i.createdAt??i.created_at??null,completedAt:i.completedAt??i.completed_at??null,_idx:r}}function gt(i){const r=D(i);return Array.isArray(r)?r.map(ft).filter(Boolean):[]}function bt(i){const r=D(i);return!r||typeof r!="object"||Array.isArray(r)?null:{published:!!r.published,reason:r.reason||null,data:r.data??null,epsilon:b(r.epsilon,0),delta:b(r.delta,0),mechanism:String(r.mechanism||""),budgetSpent:b(r.budgetSpent??r.budget_spent,0),budgetRemaining:b(r.budgetRemaining??r.budget_remaining,0)}}function ht(i){const r=D(i);return!r||typeof r!="object"||Array.isArray(r)?null:{result:r.result??null,operation:String(r.operation||""),scheme:String(r.scheme||""),inputCount:b(r.inputCount??r.input_count,0),encrypted:r.encrypted!==!1}}const _t={privacyBudget:{spent:0,limit:0,remaining:0,exhausted:!1},federatedLearning:{totalModels:0,completed:0,training:0,avgAccuracy:0},mpc:{totalComputations:0,completed:0,pending:0,byProtocol:{}}};function kt(i){const r=JSON.parse(JSON.stringify(_t)),n=D(i);if(!n||typeof n!="object"||Array.isArray(n))return r;if(n.privacyBudget&&typeof n.privacyBudget=="object"&&(r.privacyBudget.spent=b(n.privacyBudget.spent,0),r.privacyBudget.limit=b(n.privacyBudget.limit,0),r.privacyBudget.remaining=b(n.privacyBudget.remaining,0),r.privacyBudget.exhausted=!!n.privacyBudget.exhausted),n.federatedLearning&&typeof n.federatedLearning=="object"&&(r.federatedLearning.totalModels=b(n.federatedLearning.totalModels,0),r.federatedLearning.completed=b(n.federatedLearning.completed,0),r.federatedLearning.training=b(n.federatedLearning.training,0),r.federatedLearning.avgAccuracy=b(n.federatedLearning.avgAccuracy,0)),n.mpc&&typeof n.mpc=="object"&&(r.mpc.totalComputations=b(n.mpc.totalComputations,0),r.mpc.completed=b(n.mpc.completed,0),r.mpc.pending=b(n.mpc.pending,0),n.mpc.byProtocol&&typeof n.mpc.byProtocol=="object"))for(const[L,j]of Object.entries(n.mpc.byProtocol))typeof j=="number"&&Number.isFinite(j)&&(r.mpc.byProtocol[L]=j);return r}function Ae(i){if(i==null||i==="")return"—";const r=typeof i=="number"?new Date(i):new Date(String(i));return isNaN(r.getTime())?String(i):r.toLocaleString("zh-CN",{hour12:!1})}const $t={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},Ct={class:"page-title"},St={class:"page-sub"},xt={style:{"font-size":"11px",color:"var(--text-secondary)"}},zt={class:"catalog-name"},Lt={class:"catalog-desc"},Rt={class:"catalog-name"},At={class:"catalog-desc"},Mt={class:"catalog-name"},jt={class:"catalog-desc"},Ft={class:"filter-bar"},Tt={style:{color:"var(--text-primary)","font-weight":"500"}},Ot={style:{color:"var(--text-secondary)","font-size":"11px","margin-top":"2px"}},Pt={style:{"font-size":"11px",color:"var(--text-secondary)"}},Bt={key:0,style:{"font-size":"11px",color:"var(--text-secondary)"}},Ut={key:5,style:{"font-family":"monospace",color:"var(--text-secondary)"}},wt={key:6,style:{color:"var(--text-secondary)","font-size":"11px"}},Nt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},Et={class:"filter-bar"},qt={key:0,style:{color:"var(--text-primary)","font-family":"monospace","font-weight":"500"}},Ht={key:0,style:{"font-family":"monospace",color:"var(--text-secondary)","font-size":"12px"}},It={key:1,style:{color:"var(--text-muted)"}},Dt={key:5,style:{color:"var(--text-secondary)","font-size":"11px"}},Jt={key:1,style:{color:"var(--text-muted)","font-size":"11px","font-family":"monospace"}},Kt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},Vt={style:{"margin-top":"12px","font-size":"12px",color:"var(--text-secondary)"}},Qt={style:{"margin-top":"12px","font-size":"12px",color:"var(--text-secondary)"}},Wt={__name:"Privacy",setup(i){const r=et(),{t:n}=tt(),L=h(!1),j=h(!1),ee=h(!1),te=h(!1),ae=h(""),le=h(""),me=h([]),ye=h([]),ve=h([]),oe=h([]),fe=h([]),R=h({privacyBudget:{spent:0,limit:0,remaining:0,exhausted:!1},federatedLearning:{totalModels:0,completed:0,training:0,avgAccuracy:0},mpc:{totalComputations:0,completed:0,pending:0,byProtocol:{}}}),ie=h("models"),J=h(""),V=h(""),Q=h(""),W=h(!1),X=h(!1),ne=h(!1),re=h(!1),c=Z({name:"",modelType:"",architecture:"",rounds:10,lr:.01,participants:0}),$=Z({type:"",protocol:"shamir",participants:"",threshold:null}),C=Z({data:"",mechanism:"laplace",epsilon:.1,delta:1e-5,sensitivity:1}),A=Z({data:"",operation:"sum",scheme:"paillier"}),M=h(null),O=h(null),Me=I(()=>[{title:n("privacy.modelCols.name"),key:"name"},{title:n("privacy.modelCols.status"),key:"status",width:"120px"},{title:n("privacy.modelCols.progress"),key:"progress",width:"160px"},{title:n("privacy.modelCols.accuracy"),key:"accuracy",width:"110px"},{title:n("privacy.modelCols.participants"),key:"participants",width:"90px"},{title:n("privacy.modelCols.budget"),key:"budget",width:"100px"},{title:n("privacy.modelCols.updatedAt"),key:"updatedAt",width:"160px"},{title:n("privacy.modelCols.action"),key:"action",width:"180px"}]),je=I(()=>[{title:n("privacy.computationCols.type"),key:"type",width:"160px"},{title:n("privacy.computationCols.protocol"),key:"protocol",width:"100px"},{title:n("privacy.computationCols.progress"),key:"progress"},{title:n("privacy.computationCols.status"),key:"status",width:"110px"},{title:n("privacy.computationCols.time"),key:"time",width:"110px"},{title:n("privacy.computationCols.createdAt"),key:"createdAt",width:"160px"},{title:n("privacy.computationCols.action"),key:"action",width:"160px"}]),Fe=I(()=>R.value.federatedLearning.avgAccuracy*100),Te=I(()=>{const e=R.value.privacyBudget.remaining,l=R.value.privacyBudget.limit;if(l===0)return"#888";const d=e/l;return d<.2?"#ff4d4f":d<.5?"#faad14":"#52c41a"}),Oe=I(()=>J.value?oe.value.filter(e=>e.status===J.value):oe.value),Pe=I(()=>{let e=fe.value;return V.value&&(e=e.filter(l=>l.protocol===V.value)),Q.value&&(e=e.filter(l=>l.status===Q.value)),e});function ge(e){const l=`privacy.flStatusLabels.${e}`,d=n(l);return d===l?e:d}function Be(e){return{initializing:"default",training:"processing",aggregating:"cyan",completed:"green",failed:"red"}[e]||"default"}function be(e){const l=`privacy.mpcStatusLabels.${e}`,d=n(l);return d===l?e:d}function Ue(e){return{pending:"default",computing:"processing",completed:"green"}[e]||"default"}function we(e){return e>=.85?"#52c41a":e>=.6?"#faad14":"#ff4d4f"}function Ne(e){return e.status==="initializing"||e.status==="training"||e.status==="aggregating"}function Ee({key:e}){e==="model"?W.value=!0:e==="computation"?X.value=!0:e==="dp"?(M.value=null,ne.value=!0):e==="he"&&(O.value=null,re.value=!0)}async function B(){L.value=!0;try{const[e,l,d,q,se,ue]=await Promise.all([r.execute("privacy protocols --json",8e3).catch(()=>({output:""})),r.execute("privacy dp-mechanisms --json",8e3).catch(()=>({output:""})),r.execute("privacy he-schemes --json",8e3).catch(()=>({output:""})),r.execute("privacy models --limit 100 --json",1e4).catch(()=>({output:""})),r.execute("privacy computations --limit 100 --json",1e4).catch(()=>({output:""})),r.execute("privacy report --json",8e3).catch(()=>({output:""}))]);me.value=de(e.output),ye.value=de(l.output),ve.value=de(d.output),oe.value=vt(q.output),fe.value=gt(se.output),R.value=kt(ue.output)}catch(e){v.error(n("privacy.msg.loadFailed")+": "+(e?.message||e))}finally{L.value=!1}}async function qe(){if(!c.name.trim()){v.warning(n("privacy.msg.modelNameEmpty"));return}j.value=!0;try{const e=[`privacy create-model "${c.name.trim().replace(/"/g,'\\"')}"`];c.modelType.trim()&&e.push(`--type "${c.modelType.trim().replace(/"/g,'\\"')}"`),c.architecture.trim()&&e.push(`--arch "${c.architecture.trim().replace(/"/g,'\\"')}"`),c.rounds!=null&&e.push(`--rounds ${c.rounds}`),c.lr!=null&&e.push(`--lr ${c.lr}`),c.participants!=null&&e.push(`--participants ${c.participants}`),e.push("--json");const{output:l}=await r.execute(e.join(" "),12e3);if(/error|失败/i.test(l)&&!/"modelId"/.test(l)){v.error(n("privacy.msg.modelCreateFailed")+": "+l.slice(0,120));return}v.success(n("privacy.msg.modelCreateSuccess")),W.value=!1,he(),await B()}catch(e){v.error(n("privacy.msg.modelCreateFailed")+": "+(e?.message||e))}finally{j.value=!1}}async function He(){if(!$.type.trim()){v.warning(n("privacy.msg.computationTypeEmpty"));return}j.value=!0;try{const e=[`privacy create-computation "${$.type.trim().replace(/"/g,'\\"')}"`];if(e.push(`--protocol ${$.protocol}`),$.participants.trim()){const d=$.participants.split(/[,\s]+/).filter(Boolean).join(",");d&&e.push(`--participants "${d}"`)}$.threshold!=null&&e.push(`--threshold ${$.threshold}`),e.push("--json");const{output:l}=await r.execute(e.join(" "),1e4);if(/error|失败|invalid/i.test(l)&&!/"computationId"/.test(l)){v.error(n("privacy.msg.computationCreateFailed")+": "+l.slice(0,120));return}v.success(n("privacy.msg.computationCreateSuccess")),X.value=!1,_e(),ie.value="computations",await B()}catch(e){v.error(n("privacy.msg.computationCreateFailed")+": "+(e?.message||e))}finally{j.value=!1}}async function Ie(e){ae.value=e.id;try{const{output:l}=await r.execute(`privacy train ${e.id} --json`,12e3);if(/error|失败/i.test(l)&&!/"trained"/.test(l)){v.error(n("privacy.msg.trainFailed")+": "+l.slice(0,120));return}v.success(n("privacy.msg.trainSuccess")),await B()}catch(l){v.error(n("privacy.msg.trainFailed")+": "+(l?.message||l))}finally{ae.value=""}}async function De(e){try{const{output:l}=await r.execute(`privacy fail-model ${e.id} --json`,8e3);if(/error/i.test(l)&&!/"failed"/.test(l)){v.error(n("privacy.msg.failMarkFailed")+": "+l.slice(0,120));return}v.success(n("privacy.msg.failMarkSuccess")),await B()}catch(l){v.error(n("privacy.msg.failMarkFailed")+": "+(l?.message||l))}}async function Je(e){le.value=e.id;try{const{output:l}=await r.execute(`privacy submit-share ${e.id} --json`,1e4);if(/error|失败/i.test(l)&&!/"submitted"/.test(l)){v.error(n("privacy.msg.submitFailed")+": "+l.slice(0,120));return}v.success(n("privacy.msg.submitSuccess")),await B()}catch(l){v.error(n("privacy.msg.submitFailed")+": "+(l?.message||l))}finally{le.value=""}}async function Ke(){if(!C.data.trim()){v.warning(n("privacy.msg.dataEmpty"));return}ee.value=!0,M.value=null;try{const e=["privacy dp-publish"];e.push(`--data ${JSON.stringify(C.data.trim())}`),e.push(`--mechanism ${C.mechanism}`),C.epsilon!=null&&e.push(`--epsilon ${C.epsilon}`),C.delta!=null&&e.push(`--delta ${C.delta}`),C.sensitivity!=null&&e.push(`--sensitivity ${C.sensitivity}`),e.push("--json");const{output:l}=await r.execute(e.join(" "),1e4),d=bt(l);if(!d){v.error(n("privacy.msg.dpFailed")+": "+l.slice(0,120));return}M.value=d,d.published?(v.success(n("privacy.msg.dpSuccess")),await B()):v.warning(n("privacy.msg.dpRejected",{reason:d.reason||"unknown"}))}catch(e){v.error(n("privacy.msg.dpFailed")+": "+(e?.message||e))}finally{ee.value=!1}}async function Ve(){if(!A.data.trim()){v.warning(n("privacy.msg.dataEmpty"));return}try{JSON.parse(A.data)}catch{v.warning(n("privacy.msg.dataInvalidJson"));return}te.value=!0,O.value=null;try{const e=["privacy he-query"];e.push(`--data ${JSON.stringify(A.data.trim())}`),e.push(`--operation ${A.operation}`),e.push(`--scheme ${A.scheme}`),e.push("--json");const{output:l}=await r.execute(e.join(" "),1e4),d=ht(l);if(!d){v.error(n("privacy.msg.heFailed")+": "+l.slice(0,120));return}O.value=d,v.success(n("privacy.msg.heSuccess",{scheme:d.scheme,op:d.operation}))}catch(e){v.error(n("privacy.msg.heFailed")+": "+(e?.message||e))}finally{te.value=!1}}function he(){c.name="",c.modelType="",c.architecture="",c.rounds=10,c.lr=.01,c.participants=0}function _e(){$.type="",$.protocol="shamir",$.participants="",$.threshold=null}return nt(B),(e,l)=>{const d=g("a-button"),q=g("a-menu-item"),se=g("a-menu"),ue=g("a-dropdown"),Qe=g("a-space"),U=g("a-statistic"),F=g("a-card"),w=g("a-col"),ke=g("a-row"),N=g("a-tag"),P=g("a-radio-button"),H=g("a-radio-group"),$e=g("a-progress"),We=g("a-popconfirm"),Ce=g("a-table"),Se=g("a-tab-pane"),Xe=g("a-tabs"),K=g("a-input"),x=g("a-form-item"),E=g("a-input-number"),Y=g("a-form"),G=g("a-modal"),Ye=g("a-select-option"),Ge=g("a-select"),xe=g("a-textarea");return u(),m("div",null,[f("div",$t,[f("div",null,[f("h2",Ct,s(e.$t("privacy.title")),1),f("p",St,s(e.$t("privacy.subtitle")),1)]),a(Qe,null,{default:o(()=>[a(d,{loading:L.value,onClick:B},{icon:o(()=>[a(_(at))]),default:o(()=>[y(" "+s(e.$t("privacy.refresh")),1)]),_:1},8,["loading"]),a(ue,{trigger:["click"]},{overlay:o(()=>[a(se,{onClick:Ee},{default:o(()=>[a(q,{key:"model"},{default:o(()=>[a(_(pe)),y(" "+s(e.$t("privacy.actions.model")),1)]),_:1}),a(q,{key:"computation"},{default:o(()=>[a(_(ce)),y(" "+s(e.$t("privacy.actions.computation")),1)]),_:1}),a(q,{key:"dp"},{default:o(()=>[a(_(Le)),y(" "+s(e.$t("privacy.actions.dp")),1)]),_:1}),a(q,{key:"he"},{default:o(()=>[a(_(ot)),y(" "+s(e.$t("privacy.actions.he")),1)]),_:1})]),_:1})]),default:o(()=>[a(d,{type:"primary"},{icon:o(()=>[a(_(lt))]),default:o(()=>[y(" "+s(e.$t("privacy.actionDropdown")),1)]),_:1})]),_:1})]),_:1})]),a(ke,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:o(()=>[a(w,{xs:12,sm:8,lg:5},{default:o(()=>[a(F,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(U,{title:e.$t("privacy.stats.models"),value:R.value.federatedLearning.totalModels,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:o(()=>[a(_(pe))]),_:1},8,["title","value"])]),_:1})]),_:1}),a(w,{xs:12,sm:8,lg:5},{default:o(()=>[a(F,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(U,{title:e.$t("privacy.stats.avgAccuracy"),value:Fe.value,precision:1,suffix:"%","value-style":{color:R.value.federatedLearning.avgAccuracy>=.8?"#52c41a":"#faad14",fontSize:"20px"}},{prefix:o(()=>[a(_(it))]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),a(w,{xs:12,sm:8,lg:5},{default:o(()=>[a(F,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(U,{title:e.$t("privacy.stats.computations"),value:R.value.mpc.totalComputations,"value-style":{color:"#722ed1",fontSize:"20px"}},{prefix:o(()=>[a(_(ce))]),_:1},8,["title","value"])]),_:1})]),_:1}),a(w,{xs:12,sm:8,lg:5},{default:o(()=>[a(F,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(U,{title:e.$t("privacy.stats.budget"),value:R.value.privacyBudget.remaining,precision:2,"value-style":{color:Te.value,fontSize:"20px"}},{prefix:o(()=>[a(_(Le))]),suffix:o(()=>[f("span",xt,"/ "+s(R.value.privacyBudget.limit),1)]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),a(w,{xs:24,sm:8,lg:4},{default:o(()=>[a(F,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(U,{title:e.$t("privacy.stats.budgetState"),value:R.value.privacyBudget.exhausted?e.$t("privacy.stats.exhausted"):e.$t("privacy.stats.ample"),"value-style":{color:R.value.privacyBudget.exhausted?"#ff4d4f":"#52c41a",fontSize:"20px"}},null,8,["title","value","value-style"])]),_:1})]),_:1})]),_:1}),a(ke,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:o(()=>[a(w,{xs:24,md:8},{default:o(()=>[a(F,{title:e.$t("privacy.catalog.protocols"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"},"body-style":{padding:"12px 16px"}},{default:o(()=>[(u(!0),m(z,null,T(me.value,t=>(u(),m("div",{key:t.id,class:"catalog-item"},[a(N,{color:"purple",style:{"font-family":"monospace"}},{default:o(()=>[y(s(t.id),1)]),_:2},1024),f("span",zt,s(t.name),1),f("span",Lt,s(t.description),1)]))),128))]),_:1},8,["title"])]),_:1}),a(w,{xs:24,md:8},{default:o(()=>[a(F,{title:e.$t("privacy.catalog.dp"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"},"body-style":{padding:"12px 16px"}},{default:o(()=>[(u(!0),m(z,null,T(ye.value,t=>(u(),m("div",{key:t.id,class:"catalog-item"},[a(N,{color:"orange",style:{"font-family":"monospace"}},{default:o(()=>[y(s(t.id),1)]),_:2},1024),f("span",Rt,s(t.name),1),f("span",At,s(t.description),1)]))),128))]),_:1},8,["title"])]),_:1}),a(w,{xs:24,md:8},{default:o(()=>[a(F,{title:e.$t("privacy.catalog.he"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"},"body-style":{padding:"12px 16px"}},{default:o(()=>[(u(!0),m(z,null,T(ve.value,t=>(u(),m("div",{key:t.id,class:"catalog-item"},[a(N,{color:"cyan",style:{"font-family":"monospace"}},{default:o(()=>[y(s(t.id),1)]),_:2},1024),f("span",Mt,s(t.name),1),f("span",jt,s(t.description),1)]))),128))]),_:1},8,["title"])]),_:1})]),_:1}),a(Xe,{activeKey:ie.value,"onUpdate:activeKey":l[3]||(l[3]=t=>ie.value=t),class:"privacy-tabs"},{default:o(()=>[a(Se,{key:"models",tab:e.$t("privacy.tabs.models")},{default:o(()=>[f("div",Ft,[a(H,{value:J.value,"onUpdate:value":l[0]||(l[0]=t=>J.value=t),size:"small","button-style":"solid"},{default:o(()=>[a(P,{value:""},{default:o(()=>[y(s(e.$t("privacy.filter.all")),1)]),_:1}),(u(!0),m(z,null,T(_(st),t=>(u(),S(P,{key:t,value:t},{default:o(()=>[y(s(ge(t)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),a(Ce,{columns:Me.value,"data-source":Oe.value,pagination:{pageSize:20,showTotal:t=>e.$t("privacy.table.totalSuffix",{n:t})},size:"small",loading:L.value,style:{background:"var(--bg-card)"}},{bodyCell:o(({column:t,record:p})=>[t.key==="name"?(u(),m(z,{key:0},[f("span",Tt,s(p.name),1),f("div",Ot,s(p.modelType)+" / "+s(p.architecture),1)],64)):k("",!0),t.key==="status"?(u(),S(N,{key:1,color:Be(p.status)},{default:o(()=>[y(s(ge(p.status)),1)]),_:2},1032,["color"])):k("",!0),t.key==="progress"?(u(),m(z,{key:2},[a($e,{percent:p.totalRounds?Math.round(100*p.currentRound/p.totalRounds):0,size:"small",status:p.status==="failed"?"exception":p.status==="completed"?"success":"active"},null,8,["percent","status"]),f("div",Pt,s(e.$t("privacy.table.rounds",{cur:p.currentRound,total:p.totalRounds})),1)],64)):k("",!0),t.key==="accuracy"?(u(),m(z,{key:3},[f("span",{style:rt({color:we(p.accuracy),fontFamily:"monospace"})},s((p.accuracy*100).toFixed(1))+"% ",5),p.loss!=null?(u(),m("div",Bt," loss "+s(p.loss.toFixed(3)),1)):k("",!0)],64)):k("",!0),t.key==="participants"?(u(),S(N,{key:4,color:"blue",style:{"font-size":"11px"}},{default:o(()=>[y(s(p.participantCount),1)]),_:2},1024)):k("",!0),t.key==="budget"?(u(),m("span",Ut,s(p.privacyBudgetSpent.toFixed(3)),1)):k("",!0),t.key==="updatedAt"?(u(),m("span",wt,s(_(Ae)(p.updatedAt)),1)):k("",!0),t.key==="action"?(u(),m(z,{key:7},[Ne(p)?(u(),S(d,{key:0,size:"small",type:"link",loading:ae.value===p.id,onClick:ze=>Ie(p)},{default:o(()=>[y(s(e.$t("privacy.table.trainOne")),1)]),_:1},8,["loading","onClick"])):k("",!0),p.status!=="failed"&&p.status!=="completed"?(u(),S(We,{key:1,title:e.$t("privacy.table.failConfirm"),"ok-text":e.$t("privacy.table.failOk"),"cancel-text":e.$t("privacy.table.failCancel"),onConfirm:ze=>De(p)},{default:o(()=>[a(d,{size:"small",type:"link",danger:""},{default:o(()=>[y(s(e.$t("privacy.table.failMark")),1)]),_:1})]),_:1},8,["title","ok-text","cancel-text","onConfirm"])):k("",!0)],64)):k("",!0)]),emptyText:o(()=>[f("div",Nt,[a(_(pe),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),y(" "+s(J.value?e.$t("privacy.table.emptyModelsFiltered"):e.$t("privacy.table.emptyModels")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),a(Se,{key:"computations",tab:e.$t("privacy.tabs.computations")},{default:o(()=>[f("div",Et,[a(H,{value:V.value,"onUpdate:value":l[1]||(l[1]=t=>V.value=t),size:"small"},{default:o(()=>[a(P,{value:""},{default:o(()=>[y(s(e.$t("privacy.filter.allProtocols")),1)]),_:1}),(u(!0),m(z,null,T(_(Re),t=>(u(),S(P,{key:t,value:t},{default:o(()=>[y(s(t),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),a(H,{value:Q.value,"onUpdate:value":l[2]||(l[2]=t=>Q.value=t),size:"small"},{default:o(()=>[a(P,{value:""},{default:o(()=>[y(s(e.$t("privacy.filter.allStatuses")),1)]),_:1}),(u(!0),m(z,null,T(_(ut),t=>(u(),S(P,{key:t,value:t},{default:o(()=>[y(s(be(t)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),a(Ce,{columns:je.value,"data-source":Pe.value,pagination:{pageSize:20,showTotal:t=>e.$t("privacy.table.totalSuffix",{n:t})},size:"small",loading:L.value,style:{background:"var(--bg-card)"}},{bodyCell:o(({column:t,record:p})=>[t.key==="type"?(u(),m("span",qt,s(p.computationType),1)):k("",!0),t.key==="protocol"?(u(),S(N,{key:1,color:"purple",style:{"font-family":"monospace"}},{default:o(()=>[y(s(p.protocol),1)]),_:2},1024)):k("",!0),t.key==="progress"?(u(),S($e,{key:2,percent:p.sharesRequired?Math.round(100*p.sharesReceived/p.sharesRequired):0,size:"small",status:p.status==="completed"?"success":"active",format:()=>`${p.sharesReceived}/${p.sharesRequired}`},null,8,["percent","status","format"])):k("",!0),t.key==="status"?(u(),S(N,{key:3,color:Ue(p.status)},{default:o(()=>[y(s(be(p.status)),1)]),_:2},1032,["color"])):k("",!0),t.key==="time"?(u(),m(z,{key:4},[p.computationTimeMs!=null?(u(),m("span",Ht,s(p.computationTimeMs)+" ms ",1)):(u(),m("span",It,"—"))],64)):k("",!0),t.key==="createdAt"?(u(),m("span",Dt,s(_(Ae)(p.createdAt)),1)):k("",!0),t.key==="action"?(u(),m(z,{key:6},[p.status!=="completed"?(u(),S(d,{key:0,size:"small",type:"link",loading:le.value===p.id,onClick:ze=>Je(p)},{default:o(()=>[y(s(e.$t("privacy.table.submitShare")),1)]),_:1},8,["loading","onClick"])):(u(),m("span",Jt," hash "+s(p.resultHash?.slice(0,8)||"—"),1))],64)):k("",!0)]),emptyText:o(()=>[f("div",Kt,[a(_(ce),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),y(" "+s(e.$t("privacy.table.emptyComputations")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"])]),_:1},8,["activeKey"]),a(G,{open:W.value,"onUpdate:open":l[10]||(l[10]=t=>W.value=t),title:e.$t("privacy.model_modal.title"),"confirm-loading":j.value,width:540,"ok-text":e.$t("privacy.model_modal.ok"),"cancel-text":e.$t("privacy.model_modal.cancel"),onOk:qe,onCancel:he},{default:o(()=>[a(Y,{"label-col":{span:6},"wrapper-col":{span:18},style:{"margin-top":"16px"}},{default:o(()=>[a(x,{label:e.$t("privacy.model_modal.nameLabel"),required:""},{default:o(()=>[a(K,{value:c.name,"onUpdate:value":l[4]||(l[4]=t=>c.name=t),placeholder:e.$t("privacy.model_modal.namePlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.model_modal.typeLabel")},{default:o(()=>[a(K,{value:c.modelType,"onUpdate:value":l[5]||(l[5]=t=>c.modelType=t),placeholder:e.$t("privacy.model_modal.typePlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.model_modal.archLabel")},{default:o(()=>[a(K,{value:c.architecture,"onUpdate:value":l[6]||(l[6]=t=>c.architecture=t),placeholder:e.$t("privacy.model_modal.archPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.model_modal.roundsLabel")},{default:o(()=>[a(E,{value:c.rounds,"onUpdate:value":l[7]||(l[7]=t=>c.rounds=t),min:1,max:1e3,style:{width:"100%"}},null,8,["value"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.model_modal.lrLabel")},{default:o(()=>[a(E,{value:c.lr,"onUpdate:value":l[8]||(l[8]=t=>c.lr=t),min:0,max:1,step:.001,style:{width:"100%"}},null,8,["value"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.model_modal.participantsLabel")},{default:o(()=>[a(E,{value:c.participants,"onUpdate:value":l[9]||(l[9]=t=>c.participants=t),min:0,max:1e3,style:{width:"100%"}},null,8,["value"])]),_:1},8,["label"])]),_:1})]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),a(G,{open:X.value,"onUpdate:open":l[15]||(l[15]=t=>X.value=t),title:e.$t("privacy.computation_modal.title"),"confirm-loading":j.value,width:520,"ok-text":e.$t("privacy.computation_modal.ok"),"cancel-text":e.$t("privacy.computation_modal.cancel"),onOk:He,onCancel:_e},{default:o(()=>[a(Y,{"label-col":{span:6},"wrapper-col":{span:18},style:{"margin-top":"16px"}},{default:o(()=>[a(x,{label:e.$t("privacy.computation_modal.typeLabel"),required:""},{default:o(()=>[a(K,{value:$.type,"onUpdate:value":l[11]||(l[11]=t=>$.type=t),placeholder:e.$t("privacy.computation_modal.typePlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.computation_modal.protocolLabel")},{default:o(()=>[a(Ge,{value:$.protocol,"onUpdate:value":l[12]||(l[12]=t=>$.protocol=t)},{default:o(()=>[(u(!0),m(z,null,T(_(Re),t=>(u(),S(Ye,{key:t,value:t},{default:o(()=>[y(s(t),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.computation_modal.participantsLabel")},{default:o(()=>[a(xe,{value:$.participants,"onUpdate:value":l[13]||(l[13]=t=>$.participants=t),placeholder:e.$t("privacy.computation_modal.participantsPlaceholder"),"auto-size":{minRows:2,maxRows:4}},null,8,["value","placeholder"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.computation_modal.thresholdLabel")},{default:o(()=>[a(E,{value:$.threshold,"onUpdate:value":l[14]||(l[14]=t=>$.threshold=t),min:2,max:100,placeholder:e.$t("privacy.computation_modal.thresholdPlaceholder"),style:{width:"100%"}},null,8,["value","placeholder"])]),_:1},8,["label"])]),_:1})]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),a(G,{open:ne.value,"onUpdate:open":l[21]||(l[21]=t=>ne.value=t),title:e.$t("privacy.dp_modal.title"),"confirm-loading":ee.value,width:520,"ok-text":e.$t("privacy.dp_modal.ok"),"cancel-text":e.$t("privacy.dp_modal.cancel"),onOk:Ke},{default:o(()=>[a(Y,{"label-col":{span:6},"wrapper-col":{span:18},style:{"margin-top":"16px"}},{default:o(()=>[a(x,{label:e.$t("privacy.dp_modal.dataLabel"),required:""},{default:o(()=>[a(K,{value:C.data,"onUpdate:value":l[16]||(l[16]=t=>C.data=t),placeholder:e.$t("privacy.dp_modal.dataPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.dp_modal.mechanismLabel")},{default:o(()=>[a(H,{value:C.mechanism,"onUpdate:value":l[17]||(l[17]=t=>C.mechanism=t)},{default:o(()=>[(u(!0),m(z,null,T(_(pt),t=>(u(),S(P,{key:t,value:t},{default:o(()=>[y(s(t),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.dp_modal.epsilonLabel")},{default:o(()=>[a(E,{value:C.epsilon,"onUpdate:value":l[18]||(l[18]=t=>C.epsilon=t),min:0,step:.01,style:{width:"100%"}},null,8,["value"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.dp_modal.deltaLabel")},{default:o(()=>[a(E,{value:C.delta,"onUpdate:value":l[19]||(l[19]=t=>C.delta=t),min:0,step:1e-6,style:{width:"100%"}},null,8,["value"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.dp_modal.sensitivityLabel")},{default:o(()=>[a(E,{value:C.sensitivity,"onUpdate:value":l[20]||(l[20]=t=>C.sensitivity=t),min:0,step:.1,style:{width:"100%"}},null,8,["value"])]),_:1},8,["label"])]),_:1}),M.value?(u(),S(F,{key:0,size:"small",style:{background:"var(--bg-base)","margin-top":"8px"}},{default:o(()=>[M.value.published?(u(),m(z,{key:0},[a(U,{title:e.$t("privacy.dp_modal.noisedTitle"),value:M.value.data,precision:3,"value-style":{color:"#52c41a"}},null,8,["title","value"]),f("div",Vt,[f("div",null,s(e.$t("privacy.dp_modal.spentLine",{n:M.value.budgetSpent.toFixed(3)})),1),f("div",null,s(e.$t("privacy.dp_modal.remainingLine",{n:M.value.budgetRemaining.toFixed(3)})),1),f("div",null,s(e.$t("privacy.dp_modal.mechanismLine",{name:M.value.mechanism,epsilon:M.value.epsilon})),1)])],64)):(u(),S(U,{key:1,title:e.$t("privacy.dp_modal.failedTitle"),value:M.value.reason||"unknown","value-style":{color:"#ff4d4f"}},null,8,["title","value"]))]),_:1})):k("",!0)]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),a(G,{open:re.value,"onUpdate:open":l[25]||(l[25]=t=>re.value=t),title:e.$t("privacy.he_modal.title"),"confirm-loading":te.value,width:500,"ok-text":e.$t("privacy.he_modal.ok"),"cancel-text":e.$t("privacy.he_modal.cancel"),onOk:Ve},{default:o(()=>[a(Y,{"label-col":{span:6},"wrapper-col":{span:18},style:{"margin-top":"16px"}},{default:o(()=>[a(x,{label:e.$t("privacy.he_modal.dataLabel"),required:""},{default:o(()=>[a(xe,{value:A.data,"onUpdate:value":l[22]||(l[22]=t=>A.data=t),placeholder:e.$t("privacy.he_modal.dataPlaceholder"),"auto-size":{minRows:2,maxRows:4}},null,8,["value","placeholder"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.he_modal.operationLabel")},{default:o(()=>[a(H,{value:A.operation,"onUpdate:value":l[23]||(l[23]=t=>A.operation=t)},{default:o(()=>[(u(!0),m(z,null,T(_(dt),t=>(u(),S(P,{key:t,value:t},{default:o(()=>[y(s(t),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.he_modal.schemeLabel")},{default:o(()=>[a(H,{value:A.scheme,"onUpdate:value":l[24]||(l[24]=t=>A.scheme=t)},{default:o(()=>[(u(!0),m(z,null,T(_(ct),t=>(u(),S(P,{key:t,value:t},{default:o(()=>[y(s(t),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"])]),_:1}),O.value?(u(),S(F,{key:0,size:"small",style:{background:"var(--bg-base)","margin-top":"8px"}},{default:o(()=>[a(U,{title:e.$t("privacy.he_modal.resultTitle"),value:O.value.result,"value-style":{color:"#1677ff"}},null,8,["title","value"]),f("div",Qt,[f("div",null,s(e.$t("privacy.he_modal.schemeLine",{name:O.value.scheme})),1),f("div",null,s(e.$t("privacy.he_modal.operationLine",{name:O.value.operation})),1),f("div",null,s(e.$t("privacy.he_modal.inputCountLine",{n:O.value.inputCount})),1),O.value.encrypted?(u(),S(N,{key:0,color:"green",style:{"margin-top":"4px","font-size":"10px"}},{default:o(()=>[y(s(e.$t("privacy.he_modal.encrypted")),1)]),_:1})):k("",!0)])]),_:1})):k("",!0)]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"])])}}},Zt=Ze(Wt,[["__scopeId","data-v-fe89c543"]]);export{Zt as default};
1
+ import{t as D,_ as Ze,u as et,b as tt,d as v}from"./index-CzoKAiyT.js";import{R as at,at as lt,a1 as pe,H as ce,X as Le,Q as ot,b0 as it}from"./icons-DlxlFL4g.js";import{o as nt,M as m,R as f,P as s,c as a,N as o,K as g,r as h,L as u,O as y,u as _,F as z,Y as T,Q as S,S as k,_ as rt,f as I,a as Z}from"./vendor-BXcBOG8b.js";const st=Object.freeze(["initializing","training","aggregating","completed","failed"]),ut=Object.freeze(["pending","computing","completed"]),Re=Object.freeze(["shamir","beaver","gmw"]),pt=Object.freeze(["laplace","gaussian","exponential"]),ct=Object.freeze(["paillier","bfv","ckks"]),dt=Object.freeze(["sum","product","mean","count"]);function b(i,r=0){return typeof i=="number"&&Number.isFinite(i)?i:r}function mt(i,r=0){if(!i||typeof i!="object")return null;const n=i.id||"";return n?{key:n,id:n,name:String(i.name||n),description:String(i.description||""),_idx:r}:null}function de(i){const r=D(i);return Array.isArray(r)?r.map(mt).filter(Boolean):[]}function yt(i,r=0){if(!i||typeof i!="object")return null;const n=i.id||"";return n?{key:n,id:n,name:String(i.name||""),modelType:i.modelType??i.model_type??"neural_network",architecture:String(i.architecture||""),status:String(i.status||"initializing").toLowerCase(),currentRound:b(i.currentRound??i.current_round,0),totalRounds:b(i.totalRounds??i.total_rounds,0),participantCount:b(i.participantCount??i.participant_count,0),accuracy:b(i.accuracy,0),loss:i.loss==null?null:b(i.loss,null),learningRate:b(i.learningRate??i.learning_rate,0),aggregationStrategy:i.aggregationStrategy??i.aggregation_strategy??"",privacyBudgetSpent:b(i.privacyBudgetSpent??i.privacy_budget_spent,0),createdAt:i.createdAt??i.created_at??null,updatedAt:i.updatedAt??i.updated_at??null,_idx:r}:null}function vt(i){const r=D(i);return Array.isArray(r)?r.map(yt).filter(Boolean):[]}function ft(i,r=0){if(!i||typeof i!="object")return null;const n=i.id||"";if(!n)return null;let L=i.participantIds??i.participant_ids??[];if(typeof L=="string")try{L=JSON.parse(L)}catch{L=[]}return Array.isArray(L)||(L=[]),{key:n,id:n,computationType:i.computationType??i.computation_type??"",protocol:String(i.protocol||"shamir").toLowerCase(),participantCount:b(i.participantCount??i.participant_count,0),participantIds:L,resultHash:i.resultHash??i.result_hash??null,status:String(i.status||"pending").toLowerCase(),sharesReceived:b(i.sharesReceived??i.shares_received,0),sharesRequired:b(i.sharesRequired??i.shares_required,0),computationTimeMs:i.computationTimeMs??i.computation_time_ms??null,errorMessage:i.errorMessage??i.error_message??"",createdAt:i.createdAt??i.created_at??null,completedAt:i.completedAt??i.completed_at??null,_idx:r}}function gt(i){const r=D(i);return Array.isArray(r)?r.map(ft).filter(Boolean):[]}function bt(i){const r=D(i);return!r||typeof r!="object"||Array.isArray(r)?null:{published:!!r.published,reason:r.reason||null,data:r.data??null,epsilon:b(r.epsilon,0),delta:b(r.delta,0),mechanism:String(r.mechanism||""),budgetSpent:b(r.budgetSpent??r.budget_spent,0),budgetRemaining:b(r.budgetRemaining??r.budget_remaining,0)}}function ht(i){const r=D(i);return!r||typeof r!="object"||Array.isArray(r)?null:{result:r.result??null,operation:String(r.operation||""),scheme:String(r.scheme||""),inputCount:b(r.inputCount??r.input_count,0),encrypted:r.encrypted!==!1}}const _t={privacyBudget:{spent:0,limit:0,remaining:0,exhausted:!1},federatedLearning:{totalModels:0,completed:0,training:0,avgAccuracy:0},mpc:{totalComputations:0,completed:0,pending:0,byProtocol:{}}};function kt(i){const r=JSON.parse(JSON.stringify(_t)),n=D(i);if(!n||typeof n!="object"||Array.isArray(n))return r;if(n.privacyBudget&&typeof n.privacyBudget=="object"&&(r.privacyBudget.spent=b(n.privacyBudget.spent,0),r.privacyBudget.limit=b(n.privacyBudget.limit,0),r.privacyBudget.remaining=b(n.privacyBudget.remaining,0),r.privacyBudget.exhausted=!!n.privacyBudget.exhausted),n.federatedLearning&&typeof n.federatedLearning=="object"&&(r.federatedLearning.totalModels=b(n.federatedLearning.totalModels,0),r.federatedLearning.completed=b(n.federatedLearning.completed,0),r.federatedLearning.training=b(n.federatedLearning.training,0),r.federatedLearning.avgAccuracy=b(n.federatedLearning.avgAccuracy,0)),n.mpc&&typeof n.mpc=="object"&&(r.mpc.totalComputations=b(n.mpc.totalComputations,0),r.mpc.completed=b(n.mpc.completed,0),r.mpc.pending=b(n.mpc.pending,0),n.mpc.byProtocol&&typeof n.mpc.byProtocol=="object"))for(const[L,j]of Object.entries(n.mpc.byProtocol))typeof j=="number"&&Number.isFinite(j)&&(r.mpc.byProtocol[L]=j);return r}function Ae(i){if(i==null||i==="")return"—";const r=typeof i=="number"?new Date(i):new Date(String(i));return isNaN(r.getTime())?String(i):r.toLocaleString("zh-CN",{hour12:!1})}const $t={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},Ct={class:"page-title"},St={class:"page-sub"},xt={style:{"font-size":"11px",color:"var(--text-secondary)"}},zt={class:"catalog-name"},Lt={class:"catalog-desc"},Rt={class:"catalog-name"},At={class:"catalog-desc"},Mt={class:"catalog-name"},jt={class:"catalog-desc"},Ft={class:"filter-bar"},Tt={style:{color:"var(--text-primary)","font-weight":"500"}},Ot={style:{color:"var(--text-secondary)","font-size":"11px","margin-top":"2px"}},Pt={style:{"font-size":"11px",color:"var(--text-secondary)"}},Bt={key:0,style:{"font-size":"11px",color:"var(--text-secondary)"}},Ut={key:5,style:{"font-family":"monospace",color:"var(--text-secondary)"}},wt={key:6,style:{color:"var(--text-secondary)","font-size":"11px"}},Nt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},Et={class:"filter-bar"},qt={key:0,style:{color:"var(--text-primary)","font-family":"monospace","font-weight":"500"}},Ht={key:0,style:{"font-family":"monospace",color:"var(--text-secondary)","font-size":"12px"}},It={key:1,style:{color:"var(--text-muted)"}},Dt={key:5,style:{color:"var(--text-secondary)","font-size":"11px"}},Jt={key:1,style:{color:"var(--text-muted)","font-size":"11px","font-family":"monospace"}},Kt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},Vt={style:{"margin-top":"12px","font-size":"12px",color:"var(--text-secondary)"}},Qt={style:{"margin-top":"12px","font-size":"12px",color:"var(--text-secondary)"}},Wt={__name:"Privacy",setup(i){const r=et(),{t:n}=tt(),L=h(!1),j=h(!1),ee=h(!1),te=h(!1),ae=h(""),le=h(""),me=h([]),ye=h([]),ve=h([]),oe=h([]),fe=h([]),R=h({privacyBudget:{spent:0,limit:0,remaining:0,exhausted:!1},federatedLearning:{totalModels:0,completed:0,training:0,avgAccuracy:0},mpc:{totalComputations:0,completed:0,pending:0,byProtocol:{}}}),ie=h("models"),J=h(""),V=h(""),Q=h(""),W=h(!1),X=h(!1),ne=h(!1),re=h(!1),c=Z({name:"",modelType:"",architecture:"",rounds:10,lr:.01,participants:0}),$=Z({type:"",protocol:"shamir",participants:"",threshold:null}),C=Z({data:"",mechanism:"laplace",epsilon:.1,delta:1e-5,sensitivity:1}),A=Z({data:"",operation:"sum",scheme:"paillier"}),M=h(null),O=h(null),Me=I(()=>[{title:n("privacy.modelCols.name"),key:"name"},{title:n("privacy.modelCols.status"),key:"status",width:"120px"},{title:n("privacy.modelCols.progress"),key:"progress",width:"160px"},{title:n("privacy.modelCols.accuracy"),key:"accuracy",width:"110px"},{title:n("privacy.modelCols.participants"),key:"participants",width:"90px"},{title:n("privacy.modelCols.budget"),key:"budget",width:"100px"},{title:n("privacy.modelCols.updatedAt"),key:"updatedAt",width:"160px"},{title:n("privacy.modelCols.action"),key:"action",width:"180px"}]),je=I(()=>[{title:n("privacy.computationCols.type"),key:"type",width:"160px"},{title:n("privacy.computationCols.protocol"),key:"protocol",width:"100px"},{title:n("privacy.computationCols.progress"),key:"progress"},{title:n("privacy.computationCols.status"),key:"status",width:"110px"},{title:n("privacy.computationCols.time"),key:"time",width:"110px"},{title:n("privacy.computationCols.createdAt"),key:"createdAt",width:"160px"},{title:n("privacy.computationCols.action"),key:"action",width:"160px"}]),Fe=I(()=>R.value.federatedLearning.avgAccuracy*100),Te=I(()=>{const e=R.value.privacyBudget.remaining,l=R.value.privacyBudget.limit;if(l===0)return"#888";const d=e/l;return d<.2?"#ff4d4f":d<.5?"#faad14":"#52c41a"}),Oe=I(()=>J.value?oe.value.filter(e=>e.status===J.value):oe.value),Pe=I(()=>{let e=fe.value;return V.value&&(e=e.filter(l=>l.protocol===V.value)),Q.value&&(e=e.filter(l=>l.status===Q.value)),e});function ge(e){const l=`privacy.flStatusLabels.${e}`,d=n(l);return d===l?e:d}function Be(e){return{initializing:"default",training:"processing",aggregating:"cyan",completed:"green",failed:"red"}[e]||"default"}function be(e){const l=`privacy.mpcStatusLabels.${e}`,d=n(l);return d===l?e:d}function Ue(e){return{pending:"default",computing:"processing",completed:"green"}[e]||"default"}function we(e){return e>=.85?"#52c41a":e>=.6?"#faad14":"#ff4d4f"}function Ne(e){return e.status==="initializing"||e.status==="training"||e.status==="aggregating"}function Ee({key:e}){e==="model"?W.value=!0:e==="computation"?X.value=!0:e==="dp"?(M.value=null,ne.value=!0):e==="he"&&(O.value=null,re.value=!0)}async function B(){L.value=!0;try{const[e,l,d,q,se,ue]=await Promise.all([r.execute("privacy protocols --json",8e3).catch(()=>({output:""})),r.execute("privacy dp-mechanisms --json",8e3).catch(()=>({output:""})),r.execute("privacy he-schemes --json",8e3).catch(()=>({output:""})),r.execute("privacy models --limit 100 --json",1e4).catch(()=>({output:""})),r.execute("privacy computations --limit 100 --json",1e4).catch(()=>({output:""})),r.execute("privacy report --json",8e3).catch(()=>({output:""}))]);me.value=de(e.output),ye.value=de(l.output),ve.value=de(d.output),oe.value=vt(q.output),fe.value=gt(se.output),R.value=kt(ue.output)}catch(e){v.error(n("privacy.msg.loadFailed")+": "+(e?.message||e))}finally{L.value=!1}}async function qe(){if(!c.name.trim()){v.warning(n("privacy.msg.modelNameEmpty"));return}j.value=!0;try{const e=[`privacy create-model "${c.name.trim().replace(/"/g,'\\"')}"`];c.modelType.trim()&&e.push(`--type "${c.modelType.trim().replace(/"/g,'\\"')}"`),c.architecture.trim()&&e.push(`--arch "${c.architecture.trim().replace(/"/g,'\\"')}"`),c.rounds!=null&&e.push(`--rounds ${c.rounds}`),c.lr!=null&&e.push(`--lr ${c.lr}`),c.participants!=null&&e.push(`--participants ${c.participants}`),e.push("--json");const{output:l}=await r.execute(e.join(" "),12e3);if(/error|失败/i.test(l)&&!/"modelId"/.test(l)){v.error(n("privacy.msg.modelCreateFailed")+": "+l.slice(0,120));return}v.success(n("privacy.msg.modelCreateSuccess")),W.value=!1,he(),await B()}catch(e){v.error(n("privacy.msg.modelCreateFailed")+": "+(e?.message||e))}finally{j.value=!1}}async function He(){if(!$.type.trim()){v.warning(n("privacy.msg.computationTypeEmpty"));return}j.value=!0;try{const e=[`privacy create-computation "${$.type.trim().replace(/"/g,'\\"')}"`];if(e.push(`--protocol ${$.protocol}`),$.participants.trim()){const d=$.participants.split(/[,\s]+/).filter(Boolean).join(",");d&&e.push(`--participants "${d}"`)}$.threshold!=null&&e.push(`--threshold ${$.threshold}`),e.push("--json");const{output:l}=await r.execute(e.join(" "),1e4);if(/error|失败|invalid/i.test(l)&&!/"computationId"/.test(l)){v.error(n("privacy.msg.computationCreateFailed")+": "+l.slice(0,120));return}v.success(n("privacy.msg.computationCreateSuccess")),X.value=!1,_e(),ie.value="computations",await B()}catch(e){v.error(n("privacy.msg.computationCreateFailed")+": "+(e?.message||e))}finally{j.value=!1}}async function Ie(e){ae.value=e.id;try{const{output:l}=await r.execute(`privacy train ${e.id} --json`,12e3);if(/error|失败/i.test(l)&&!/"trained"/.test(l)){v.error(n("privacy.msg.trainFailed")+": "+l.slice(0,120));return}v.success(n("privacy.msg.trainSuccess")),await B()}catch(l){v.error(n("privacy.msg.trainFailed")+": "+(l?.message||l))}finally{ae.value=""}}async function De(e){try{const{output:l}=await r.execute(`privacy fail-model ${e.id} --json`,8e3);if(/error/i.test(l)&&!/"failed"/.test(l)){v.error(n("privacy.msg.failMarkFailed")+": "+l.slice(0,120));return}v.success(n("privacy.msg.failMarkSuccess")),await B()}catch(l){v.error(n("privacy.msg.failMarkFailed")+": "+(l?.message||l))}}async function Je(e){le.value=e.id;try{const{output:l}=await r.execute(`privacy submit-share ${e.id} --json`,1e4);if(/error|失败/i.test(l)&&!/"submitted"/.test(l)){v.error(n("privacy.msg.submitFailed")+": "+l.slice(0,120));return}v.success(n("privacy.msg.submitSuccess")),await B()}catch(l){v.error(n("privacy.msg.submitFailed")+": "+(l?.message||l))}finally{le.value=""}}async function Ke(){if(!C.data.trim()){v.warning(n("privacy.msg.dataEmpty"));return}ee.value=!0,M.value=null;try{const e=["privacy dp-publish"];e.push(`--data ${JSON.stringify(C.data.trim())}`),e.push(`--mechanism ${C.mechanism}`),C.epsilon!=null&&e.push(`--epsilon ${C.epsilon}`),C.delta!=null&&e.push(`--delta ${C.delta}`),C.sensitivity!=null&&e.push(`--sensitivity ${C.sensitivity}`),e.push("--json");const{output:l}=await r.execute(e.join(" "),1e4),d=bt(l);if(!d){v.error(n("privacy.msg.dpFailed")+": "+l.slice(0,120));return}M.value=d,d.published?(v.success(n("privacy.msg.dpSuccess")),await B()):v.warning(n("privacy.msg.dpRejected",{reason:d.reason||"unknown"}))}catch(e){v.error(n("privacy.msg.dpFailed")+": "+(e?.message||e))}finally{ee.value=!1}}async function Ve(){if(!A.data.trim()){v.warning(n("privacy.msg.dataEmpty"));return}try{JSON.parse(A.data)}catch{v.warning(n("privacy.msg.dataInvalidJson"));return}te.value=!0,O.value=null;try{const e=["privacy he-query"];e.push(`--data ${JSON.stringify(A.data.trim())}`),e.push(`--operation ${A.operation}`),e.push(`--scheme ${A.scheme}`),e.push("--json");const{output:l}=await r.execute(e.join(" "),1e4),d=ht(l);if(!d){v.error(n("privacy.msg.heFailed")+": "+l.slice(0,120));return}O.value=d,v.success(n("privacy.msg.heSuccess",{scheme:d.scheme,op:d.operation}))}catch(e){v.error(n("privacy.msg.heFailed")+": "+(e?.message||e))}finally{te.value=!1}}function he(){c.name="",c.modelType="",c.architecture="",c.rounds=10,c.lr=.01,c.participants=0}function _e(){$.type="",$.protocol="shamir",$.participants="",$.threshold=null}return nt(B),(e,l)=>{const d=g("a-button"),q=g("a-menu-item"),se=g("a-menu"),ue=g("a-dropdown"),Qe=g("a-space"),U=g("a-statistic"),F=g("a-card"),w=g("a-col"),ke=g("a-row"),N=g("a-tag"),P=g("a-radio-button"),H=g("a-radio-group"),$e=g("a-progress"),We=g("a-popconfirm"),Ce=g("a-table"),Se=g("a-tab-pane"),Xe=g("a-tabs"),K=g("a-input"),x=g("a-form-item"),E=g("a-input-number"),Y=g("a-form"),G=g("a-modal"),Ye=g("a-select-option"),Ge=g("a-select"),xe=g("a-textarea");return u(),m("div",null,[f("div",$t,[f("div",null,[f("h2",Ct,s(e.$t("privacy.title")),1),f("p",St,s(e.$t("privacy.subtitle")),1)]),a(Qe,null,{default:o(()=>[a(d,{loading:L.value,onClick:B},{icon:o(()=>[a(_(at))]),default:o(()=>[y(" "+s(e.$t("privacy.refresh")),1)]),_:1},8,["loading"]),a(ue,{trigger:["click"]},{overlay:o(()=>[a(se,{onClick:Ee},{default:o(()=>[a(q,{key:"model"},{default:o(()=>[a(_(pe)),y(" "+s(e.$t("privacy.actions.model")),1)]),_:1}),a(q,{key:"computation"},{default:o(()=>[a(_(ce)),y(" "+s(e.$t("privacy.actions.computation")),1)]),_:1}),a(q,{key:"dp"},{default:o(()=>[a(_(Le)),y(" "+s(e.$t("privacy.actions.dp")),1)]),_:1}),a(q,{key:"he"},{default:o(()=>[a(_(ot)),y(" "+s(e.$t("privacy.actions.he")),1)]),_:1})]),_:1})]),default:o(()=>[a(d,{type:"primary"},{icon:o(()=>[a(_(lt))]),default:o(()=>[y(" "+s(e.$t("privacy.actionDropdown")),1)]),_:1})]),_:1})]),_:1})]),a(ke,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:o(()=>[a(w,{xs:12,sm:8,lg:5},{default:o(()=>[a(F,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(U,{title:e.$t("privacy.stats.models"),value:R.value.federatedLearning.totalModels,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:o(()=>[a(_(pe))]),_:1},8,["title","value"])]),_:1})]),_:1}),a(w,{xs:12,sm:8,lg:5},{default:o(()=>[a(F,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(U,{title:e.$t("privacy.stats.avgAccuracy"),value:Fe.value,precision:1,suffix:"%","value-style":{color:R.value.federatedLearning.avgAccuracy>=.8?"#52c41a":"#faad14",fontSize:"20px"}},{prefix:o(()=>[a(_(it))]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),a(w,{xs:12,sm:8,lg:5},{default:o(()=>[a(F,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(U,{title:e.$t("privacy.stats.computations"),value:R.value.mpc.totalComputations,"value-style":{color:"#722ed1",fontSize:"20px"}},{prefix:o(()=>[a(_(ce))]),_:1},8,["title","value"])]),_:1})]),_:1}),a(w,{xs:12,sm:8,lg:5},{default:o(()=>[a(F,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(U,{title:e.$t("privacy.stats.budget"),value:R.value.privacyBudget.remaining,precision:2,"value-style":{color:Te.value,fontSize:"20px"}},{prefix:o(()=>[a(_(Le))]),suffix:o(()=>[f("span",xt,"/ "+s(R.value.privacyBudget.limit),1)]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),a(w,{xs:24,sm:8,lg:4},{default:o(()=>[a(F,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(U,{title:e.$t("privacy.stats.budgetState"),value:R.value.privacyBudget.exhausted?e.$t("privacy.stats.exhausted"):e.$t("privacy.stats.ample"),"value-style":{color:R.value.privacyBudget.exhausted?"#ff4d4f":"#52c41a",fontSize:"20px"}},null,8,["title","value","value-style"])]),_:1})]),_:1})]),_:1}),a(ke,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:o(()=>[a(w,{xs:24,md:8},{default:o(()=>[a(F,{title:e.$t("privacy.catalog.protocols"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"},"body-style":{padding:"12px 16px"}},{default:o(()=>[(u(!0),m(z,null,T(me.value,t=>(u(),m("div",{key:t.id,class:"catalog-item"},[a(N,{color:"purple",style:{"font-family":"monospace"}},{default:o(()=>[y(s(t.id),1)]),_:2},1024),f("span",zt,s(t.name),1),f("span",Lt,s(t.description),1)]))),128))]),_:1},8,["title"])]),_:1}),a(w,{xs:24,md:8},{default:o(()=>[a(F,{title:e.$t("privacy.catalog.dp"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"},"body-style":{padding:"12px 16px"}},{default:o(()=>[(u(!0),m(z,null,T(ye.value,t=>(u(),m("div",{key:t.id,class:"catalog-item"},[a(N,{color:"orange",style:{"font-family":"monospace"}},{default:o(()=>[y(s(t.id),1)]),_:2},1024),f("span",Rt,s(t.name),1),f("span",At,s(t.description),1)]))),128))]),_:1},8,["title"])]),_:1}),a(w,{xs:24,md:8},{default:o(()=>[a(F,{title:e.$t("privacy.catalog.he"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"},"body-style":{padding:"12px 16px"}},{default:o(()=>[(u(!0),m(z,null,T(ve.value,t=>(u(),m("div",{key:t.id,class:"catalog-item"},[a(N,{color:"cyan",style:{"font-family":"monospace"}},{default:o(()=>[y(s(t.id),1)]),_:2},1024),f("span",Mt,s(t.name),1),f("span",jt,s(t.description),1)]))),128))]),_:1},8,["title"])]),_:1})]),_:1}),a(Xe,{activeKey:ie.value,"onUpdate:activeKey":l[3]||(l[3]=t=>ie.value=t),class:"privacy-tabs"},{default:o(()=>[a(Se,{key:"models",tab:e.$t("privacy.tabs.models")},{default:o(()=>[f("div",Ft,[a(H,{value:J.value,"onUpdate:value":l[0]||(l[0]=t=>J.value=t),size:"small","button-style":"solid"},{default:o(()=>[a(P,{value:""},{default:o(()=>[y(s(e.$t("privacy.filter.all")),1)]),_:1}),(u(!0),m(z,null,T(_(st),t=>(u(),S(P,{key:t,value:t},{default:o(()=>[y(s(ge(t)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),a(Ce,{columns:Me.value,"data-source":Oe.value,pagination:{pageSize:20,showTotal:t=>e.$t("privacy.table.totalSuffix",{n:t})},size:"small",loading:L.value,style:{background:"var(--bg-card)"}},{bodyCell:o(({column:t,record:p})=>[t.key==="name"?(u(),m(z,{key:0},[f("span",Tt,s(p.name),1),f("div",Ot,s(p.modelType)+" / "+s(p.architecture),1)],64)):k("",!0),t.key==="status"?(u(),S(N,{key:1,color:Be(p.status)},{default:o(()=>[y(s(ge(p.status)),1)]),_:2},1032,["color"])):k("",!0),t.key==="progress"?(u(),m(z,{key:2},[a($e,{percent:p.totalRounds?Math.round(100*p.currentRound/p.totalRounds):0,size:"small",status:p.status==="failed"?"exception":p.status==="completed"?"success":"active"},null,8,["percent","status"]),f("div",Pt,s(e.$t("privacy.table.rounds",{cur:p.currentRound,total:p.totalRounds})),1)],64)):k("",!0),t.key==="accuracy"?(u(),m(z,{key:3},[f("span",{style:rt({color:we(p.accuracy),fontFamily:"monospace"})},s((p.accuracy*100).toFixed(1))+"% ",5),p.loss!=null?(u(),m("div",Bt," loss "+s(p.loss.toFixed(3)),1)):k("",!0)],64)):k("",!0),t.key==="participants"?(u(),S(N,{key:4,color:"blue",style:{"font-size":"11px"}},{default:o(()=>[y(s(p.participantCount),1)]),_:2},1024)):k("",!0),t.key==="budget"?(u(),m("span",Ut,s(p.privacyBudgetSpent.toFixed(3)),1)):k("",!0),t.key==="updatedAt"?(u(),m("span",wt,s(_(Ae)(p.updatedAt)),1)):k("",!0),t.key==="action"?(u(),m(z,{key:7},[Ne(p)?(u(),S(d,{key:0,size:"small",type:"link",loading:ae.value===p.id,onClick:ze=>Ie(p)},{default:o(()=>[y(s(e.$t("privacy.table.trainOne")),1)]),_:1},8,["loading","onClick"])):k("",!0),p.status!=="failed"&&p.status!=="completed"?(u(),S(We,{key:1,title:e.$t("privacy.table.failConfirm"),"ok-text":e.$t("privacy.table.failOk"),"cancel-text":e.$t("privacy.table.failCancel"),onConfirm:ze=>De(p)},{default:o(()=>[a(d,{size:"small",type:"link",danger:""},{default:o(()=>[y(s(e.$t("privacy.table.failMark")),1)]),_:1})]),_:1},8,["title","ok-text","cancel-text","onConfirm"])):k("",!0)],64)):k("",!0)]),emptyText:o(()=>[f("div",Nt,[a(_(pe),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),y(" "+s(J.value?e.$t("privacy.table.emptyModelsFiltered"):e.$t("privacy.table.emptyModels")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),a(Se,{key:"computations",tab:e.$t("privacy.tabs.computations")},{default:o(()=>[f("div",Et,[a(H,{value:V.value,"onUpdate:value":l[1]||(l[1]=t=>V.value=t),size:"small"},{default:o(()=>[a(P,{value:""},{default:o(()=>[y(s(e.$t("privacy.filter.allProtocols")),1)]),_:1}),(u(!0),m(z,null,T(_(Re),t=>(u(),S(P,{key:t,value:t},{default:o(()=>[y(s(t),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),a(H,{value:Q.value,"onUpdate:value":l[2]||(l[2]=t=>Q.value=t),size:"small"},{default:o(()=>[a(P,{value:""},{default:o(()=>[y(s(e.$t("privacy.filter.allStatuses")),1)]),_:1}),(u(!0),m(z,null,T(_(ut),t=>(u(),S(P,{key:t,value:t},{default:o(()=>[y(s(be(t)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),a(Ce,{columns:je.value,"data-source":Pe.value,pagination:{pageSize:20,showTotal:t=>e.$t("privacy.table.totalSuffix",{n:t})},size:"small",loading:L.value,style:{background:"var(--bg-card)"}},{bodyCell:o(({column:t,record:p})=>[t.key==="type"?(u(),m("span",qt,s(p.computationType),1)):k("",!0),t.key==="protocol"?(u(),S(N,{key:1,color:"purple",style:{"font-family":"monospace"}},{default:o(()=>[y(s(p.protocol),1)]),_:2},1024)):k("",!0),t.key==="progress"?(u(),S($e,{key:2,percent:p.sharesRequired?Math.round(100*p.sharesReceived/p.sharesRequired):0,size:"small",status:p.status==="completed"?"success":"active",format:()=>`${p.sharesReceived}/${p.sharesRequired}`},null,8,["percent","status","format"])):k("",!0),t.key==="status"?(u(),S(N,{key:3,color:Ue(p.status)},{default:o(()=>[y(s(be(p.status)),1)]),_:2},1032,["color"])):k("",!0),t.key==="time"?(u(),m(z,{key:4},[p.computationTimeMs!=null?(u(),m("span",Ht,s(p.computationTimeMs)+" ms ",1)):(u(),m("span",It,"—"))],64)):k("",!0),t.key==="createdAt"?(u(),m("span",Dt,s(_(Ae)(p.createdAt)),1)):k("",!0),t.key==="action"?(u(),m(z,{key:6},[p.status!=="completed"?(u(),S(d,{key:0,size:"small",type:"link",loading:le.value===p.id,onClick:ze=>Je(p)},{default:o(()=>[y(s(e.$t("privacy.table.submitShare")),1)]),_:1},8,["loading","onClick"])):(u(),m("span",Jt," hash "+s(p.resultHash?.slice(0,8)||"—"),1))],64)):k("",!0)]),emptyText:o(()=>[f("div",Kt,[a(_(ce),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),y(" "+s(e.$t("privacy.table.emptyComputations")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"])]),_:1},8,["activeKey"]),a(G,{open:W.value,"onUpdate:open":l[10]||(l[10]=t=>W.value=t),title:e.$t("privacy.model_modal.title"),"confirm-loading":j.value,width:540,"ok-text":e.$t("privacy.model_modal.ok"),"cancel-text":e.$t("privacy.model_modal.cancel"),onOk:qe,onCancel:he},{default:o(()=>[a(Y,{"label-col":{span:6},"wrapper-col":{span:18},style:{"margin-top":"16px"}},{default:o(()=>[a(x,{label:e.$t("privacy.model_modal.nameLabel"),required:""},{default:o(()=>[a(K,{value:c.name,"onUpdate:value":l[4]||(l[4]=t=>c.name=t),placeholder:e.$t("privacy.model_modal.namePlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.model_modal.typeLabel")},{default:o(()=>[a(K,{value:c.modelType,"onUpdate:value":l[5]||(l[5]=t=>c.modelType=t),placeholder:e.$t("privacy.model_modal.typePlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.model_modal.archLabel")},{default:o(()=>[a(K,{value:c.architecture,"onUpdate:value":l[6]||(l[6]=t=>c.architecture=t),placeholder:e.$t("privacy.model_modal.archPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.model_modal.roundsLabel")},{default:o(()=>[a(E,{value:c.rounds,"onUpdate:value":l[7]||(l[7]=t=>c.rounds=t),min:1,max:1e3,style:{width:"100%"}},null,8,["value"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.model_modal.lrLabel")},{default:o(()=>[a(E,{value:c.lr,"onUpdate:value":l[8]||(l[8]=t=>c.lr=t),min:0,max:1,step:.001,style:{width:"100%"}},null,8,["value"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.model_modal.participantsLabel")},{default:o(()=>[a(E,{value:c.participants,"onUpdate:value":l[9]||(l[9]=t=>c.participants=t),min:0,max:1e3,style:{width:"100%"}},null,8,["value"])]),_:1},8,["label"])]),_:1})]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),a(G,{open:X.value,"onUpdate:open":l[15]||(l[15]=t=>X.value=t),title:e.$t("privacy.computation_modal.title"),"confirm-loading":j.value,width:520,"ok-text":e.$t("privacy.computation_modal.ok"),"cancel-text":e.$t("privacy.computation_modal.cancel"),onOk:He,onCancel:_e},{default:o(()=>[a(Y,{"label-col":{span:6},"wrapper-col":{span:18},style:{"margin-top":"16px"}},{default:o(()=>[a(x,{label:e.$t("privacy.computation_modal.typeLabel"),required:""},{default:o(()=>[a(K,{value:$.type,"onUpdate:value":l[11]||(l[11]=t=>$.type=t),placeholder:e.$t("privacy.computation_modal.typePlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.computation_modal.protocolLabel")},{default:o(()=>[a(Ge,{value:$.protocol,"onUpdate:value":l[12]||(l[12]=t=>$.protocol=t)},{default:o(()=>[(u(!0),m(z,null,T(_(Re),t=>(u(),S(Ye,{key:t,value:t},{default:o(()=>[y(s(t),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.computation_modal.participantsLabel")},{default:o(()=>[a(xe,{value:$.participants,"onUpdate:value":l[13]||(l[13]=t=>$.participants=t),placeholder:e.$t("privacy.computation_modal.participantsPlaceholder"),"auto-size":{minRows:2,maxRows:4}},null,8,["value","placeholder"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.computation_modal.thresholdLabel")},{default:o(()=>[a(E,{value:$.threshold,"onUpdate:value":l[14]||(l[14]=t=>$.threshold=t),min:2,max:100,placeholder:e.$t("privacy.computation_modal.thresholdPlaceholder"),style:{width:"100%"}},null,8,["value","placeholder"])]),_:1},8,["label"])]),_:1})]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),a(G,{open:ne.value,"onUpdate:open":l[21]||(l[21]=t=>ne.value=t),title:e.$t("privacy.dp_modal.title"),"confirm-loading":ee.value,width:520,"ok-text":e.$t("privacy.dp_modal.ok"),"cancel-text":e.$t("privacy.dp_modal.cancel"),onOk:Ke},{default:o(()=>[a(Y,{"label-col":{span:6},"wrapper-col":{span:18},style:{"margin-top":"16px"}},{default:o(()=>[a(x,{label:e.$t("privacy.dp_modal.dataLabel"),required:""},{default:o(()=>[a(K,{value:C.data,"onUpdate:value":l[16]||(l[16]=t=>C.data=t),placeholder:e.$t("privacy.dp_modal.dataPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.dp_modal.mechanismLabel")},{default:o(()=>[a(H,{value:C.mechanism,"onUpdate:value":l[17]||(l[17]=t=>C.mechanism=t)},{default:o(()=>[(u(!0),m(z,null,T(_(pt),t=>(u(),S(P,{key:t,value:t},{default:o(()=>[y(s(t),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.dp_modal.epsilonLabel")},{default:o(()=>[a(E,{value:C.epsilon,"onUpdate:value":l[18]||(l[18]=t=>C.epsilon=t),min:0,step:.01,style:{width:"100%"}},null,8,["value"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.dp_modal.deltaLabel")},{default:o(()=>[a(E,{value:C.delta,"onUpdate:value":l[19]||(l[19]=t=>C.delta=t),min:0,step:1e-6,style:{width:"100%"}},null,8,["value"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.dp_modal.sensitivityLabel")},{default:o(()=>[a(E,{value:C.sensitivity,"onUpdate:value":l[20]||(l[20]=t=>C.sensitivity=t),min:0,step:.1,style:{width:"100%"}},null,8,["value"])]),_:1},8,["label"])]),_:1}),M.value?(u(),S(F,{key:0,size:"small",style:{background:"var(--bg-base)","margin-top":"8px"}},{default:o(()=>[M.value.published?(u(),m(z,{key:0},[a(U,{title:e.$t("privacy.dp_modal.noisedTitle"),value:M.value.data,precision:3,"value-style":{color:"#52c41a"}},null,8,["title","value"]),f("div",Vt,[f("div",null,s(e.$t("privacy.dp_modal.spentLine",{n:M.value.budgetSpent.toFixed(3)})),1),f("div",null,s(e.$t("privacy.dp_modal.remainingLine",{n:M.value.budgetRemaining.toFixed(3)})),1),f("div",null,s(e.$t("privacy.dp_modal.mechanismLine",{name:M.value.mechanism,epsilon:M.value.epsilon})),1)])],64)):(u(),S(U,{key:1,title:e.$t("privacy.dp_modal.failedTitle"),value:M.value.reason||"unknown","value-style":{color:"#ff4d4f"}},null,8,["title","value"]))]),_:1})):k("",!0)]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),a(G,{open:re.value,"onUpdate:open":l[25]||(l[25]=t=>re.value=t),title:e.$t("privacy.he_modal.title"),"confirm-loading":te.value,width:500,"ok-text":e.$t("privacy.he_modal.ok"),"cancel-text":e.$t("privacy.he_modal.cancel"),onOk:Ve},{default:o(()=>[a(Y,{"label-col":{span:6},"wrapper-col":{span:18},style:{"margin-top":"16px"}},{default:o(()=>[a(x,{label:e.$t("privacy.he_modal.dataLabel"),required:""},{default:o(()=>[a(xe,{value:A.data,"onUpdate:value":l[22]||(l[22]=t=>A.data=t),placeholder:e.$t("privacy.he_modal.dataPlaceholder"),"auto-size":{minRows:2,maxRows:4}},null,8,["value","placeholder"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.he_modal.operationLabel")},{default:o(()=>[a(H,{value:A.operation,"onUpdate:value":l[23]||(l[23]=t=>A.operation=t)},{default:o(()=>[(u(!0),m(z,null,T(_(dt),t=>(u(),S(P,{key:t,value:t},{default:o(()=>[y(s(t),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.he_modal.schemeLabel")},{default:o(()=>[a(H,{value:A.scheme,"onUpdate:value":l[24]||(l[24]=t=>A.scheme=t)},{default:o(()=>[(u(!0),m(z,null,T(_(ct),t=>(u(),S(P,{key:t,value:t},{default:o(()=>[y(s(t),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"])]),_:1}),O.value?(u(),S(F,{key:0,size:"small",style:{background:"var(--bg-base)","margin-top":"8px"}},{default:o(()=>[a(U,{title:e.$t("privacy.he_modal.resultTitle"),value:O.value.result,"value-style":{color:"#1677ff"}},null,8,["title","value"]),f("div",Qt,[f("div",null,s(e.$t("privacy.he_modal.schemeLine",{name:O.value.scheme})),1),f("div",null,s(e.$t("privacy.he_modal.operationLine",{name:O.value.operation})),1),f("div",null,s(e.$t("privacy.he_modal.inputCountLine",{n:O.value.inputCount})),1),O.value.encrypted?(u(),S(N,{key:0,color:"green",style:{"margin-top":"4px","font-size":"10px"}},{default:o(()=>[y(s(e.$t("privacy.he_modal.encrypted")),1)]),_:1})):k("",!0)])]),_:1})):k("",!0)]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"])])}}},Zt=Ze(Wt,[["__scopeId","data-v-fe89c543"]]);export{Zt as default};
@@ -1,2 +1,2 @@
1
- import{_ as se,b as le,u as re,d as T}from"./index-Cs66y4oC.js";import{u as ne}from"./useFs-gpl11PEF.js";import{R as ie,f as $,j as S,$ as B,ao as H,as as A}from"./icons-DlxlFL4g.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-BXcBOG8b.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(`
1
+ import{_ as se,b as le,u as re,d as T}from"./index-CzoKAiyT.js";import{u as ne}from"./useFs-T5lg6SpD.js";import{R as ie,f as $,j as S,$ as B,ao as H,as as A}from"./icons-DlxlFL4g.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-BXcBOG8b.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
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,2 +1,2 @@
1
- import{t as V,_ as A,u as E,d as k}from"./index-Cs66y4oC.js";import{R as L,F as T}from"./icons-DlxlFL4g.js";import{a as D,r as M,o as J,M as h,R as v,c as o,N as r,K as i,L as I,O as B,u as O,Q as W,S as $,f as K}from"./vendor-BXcBOG8b.js";const c=Object.freeze({rootPath:"",maxSizeMB:1e3,autoSync:!1,syncIntervalSeconds:300});function N(l){if(typeof l=="boolean")return l;const t=String(l).trim().toLowerCase();return t==="true"||t==="1"||t==="yes"||t==="on"}function j(l,t){if(typeof l=="number"&&Number.isFinite(l))return l;const s=parseFloat(l);return Number.isFinite(s)?s:t}function Q(l){const t={...c};if(!l)return t;const s=l.trim();if(!s||/key not found/i.test(s))return t;const n=V(s);if(n&&typeof n=="object"&&!Array.isArray(n))return n.rootPath!==void 0&&(t.rootPath=String(n.rootPath||"")),n.maxSizeMB!==void 0&&(t.maxSizeMB=j(n.maxSizeMB,c.maxSizeMB)),n.autoSync!==void 0&&(t.autoSync=N(n.autoSync)),n.syncIntervalSeconds!==void 0&&(t.syncIntervalSeconds=j(n.syncIntervalSeconds,c.syncIntervalSeconds)),t;const a=s.split(`
1
+ import{t as V,_ as A,u as E,d as k}from"./index-CzoKAiyT.js";import{R as L,F as T}from"./icons-DlxlFL4g.js";import{a as D,r as M,o as J,M as h,R as v,c as o,N as r,K as i,L as I,O as B,u as O,Q as W,S as $,f as K}from"./vendor-BXcBOG8b.js";const c=Object.freeze({rootPath:"",maxSizeMB:1e3,autoSync:!1,syncIntervalSeconds:300});function N(l){if(typeof l=="boolean")return l;const t=String(l).trim().toLowerCase();return t==="true"||t==="1"||t==="yes"||t==="on"}function j(l,t){if(typeof l=="number"&&Number.isFinite(l))return l;const s=parseFloat(l);return Number.isFinite(s)?s:t}function Q(l){const t={...c};if(!l)return t;const s=l.trim();if(!s||/key not found/i.test(s))return t;const n=V(s);if(n&&typeof n=="object"&&!Array.isArray(n))return n.rootPath!==void 0&&(t.rootPath=String(n.rootPath||"")),n.maxSizeMB!==void 0&&(t.maxSizeMB=j(n.maxSizeMB,c.maxSizeMB)),n.autoSync!==void 0&&(t.autoSync=N(n.autoSync)),n.syncIntervalSeconds!==void 0&&(t.syncIntervalSeconds=j(n.syncIntervalSeconds,c.syncIntervalSeconds)),t;const a=s.split(`
2
2
  `);for(const u of a){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"?t.rootPath=g:b==="maxSizeMB"?t.maxSizeMB=j(g,c.maxSizeMB):b==="autoSync"?t.autoSync=N(g):b==="syncIntervalSeconds"&&(t.syncIntervalSeconds=j(g,c.syncIntervalSeconds))}return t}function F(l,t){const s={};for(const n of Object.keys(c))l[n]!==t[n]&&(s[n]=t[n]);return s}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(l){const t=E(),s=M(!1),n=M(!1),a=D({...c}),u=M({...c}),z=K(()=>Object.keys(F(u.value,a)).length>0);async function p(){s.value=!0;try{const{output:d}=await t.execute("config get project",1e4),e=Q(d);Object.assign(a,e),u.value={...e}}catch(d){/key not found/i.test(d.message)?(Object.assign(a,c),u.value={...c}):k.error("加载配置失败: "+d.message)}finally{s.value=!1}}function b(){Object.assign(a,u.value)}async function g(){const d=F(u.value,a),e=Object.keys(d);if(e.length===0){k.info("没有需要保存的修改");return}n.value=!0;let f=0,_=0;for(const S of e){const m=d[S],w=String(m).replace(/"/g,'\\"'),C=`config set project.${S} "${w}"`;try{const{output:x,exitCode:P}=await t.execute(C,1e4);P!==0||/error|failed|失败/i.test(x)?(_++,k.error(`保存 ${S} 失败: ${x.slice(0,80)}`)):f++}catch(x){_++,k.error(`保存 ${S} 失败: ${x.message}`)}}n.value=!1,_===0?(k.success(`保存成功(${f} 项)`),u.value={...a}):f>0&&(k.warning(`部分保存成功:${f} 成功 / ${_} 失败`),await p())}return J(()=>{p()}),(d,e)=>{const f=i("a-button"),_=i("a-alert"),S=i("a-input"),m=i("a-form-item"),w=i("a-input-number"),C=i("a-switch"),x=i("a-space"),P=i("a-form"),U=i("a-spin"),R=i("a-card");return I(),h("div",null,[v("div",q,[e[5]||(e[5]=v("div",null,[v("h2",{class:"page-title"},"项目存储配置"),v("p",{class:"page-sub"},"根目录 / 配额 / 自动同步")],-1)),o(f,{loading:s.value,onClick:p},{icon:r(()=>[o(O(L))]),default:r(()=>[e[4]||(e[4]=B(" 刷新 ",-1))]),_:1},8,["loading"])]),o(_,{message:"仅 Web 模式",description:"目录选择器(原生文件对话框)仅在桌面端可用,本页面需手动输入路径。修改根目录后需重启桌面应用生效;web 端只影响后端配置文件。",type:"info","show-icon":"",closable:"",style:{"margin-bottom":"16px"}}),o(R,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{title:r(()=>[v("span",G,[o(O(T),{style:{"margin-right":"8px"}}),e[6]||(e[6]=B("项目存储 ",-1))])]),default:r(()=>[o(U,{spinning:s.value},{default:r(()=>[o(P,{"label-col":{span:6},"wrapper-col":{span:18},style:{"max-width":"720px"}},{default:r(()=>[o(m,{label:"项目根目录"},{extra:r(()=>[...e[7]||(e[7]=[v("span",{style:{color:"var(--text-muted)","font-size":"11px"}}," 需绝对路径;修改后重启桌面应用生效 ",-1)])]),default:r(()=>[o(S,{value:a.rootPath,"onUpdate:value":e[0]||(e[0]=y=>a.rootPath=y),placeholder:"项目文件存储的根目录绝对路径",disabled:n.value},null,8,["value","disabled"])]),_:1}),o(m,{label:"最大项目大小"},{default:r(()=>[o(w,{value:a.maxSizeMB,"onUpdate:value":e[1]||(e[1]=y=>a.maxSizeMB=y),min:100,max:1e4,step:100,"addon-after":"MB",style:{width:"220px"},disabled:n.value},null,8,["value","disabled"])]),_:1}),o(m,{label:"自动同步"},{default:r(()=>[o(C,{checked:a.autoSync,"onUpdate:checked":e[2]||(e[2]=y=>a.autoSync=y),disabled:n.value},null,8,["checked","disabled"]),e[8]||(e[8]=v("span",{style:{"margin-left":"12px",color:"var(--text-secondary)","font-size":"12px"}}," 自动同步项目到后端服务器 ",-1))]),_:1}),a.autoSync?(I(),W(m,{key:0,label:"同步间隔"},{default:r(()=>[o(w,{value:a.syncIntervalSeconds,"onUpdate:value":e[3]||(e[3]=y=>a.syncIntervalSeconds=y),min:60,max:3600,step:60,"addon-after":"秒",style:{width:"220px"},disabled:n.value},null,8,["value","disabled"])]),_:1})):$("",!0),o(m,{"wrapper-col":{offset:6,span:18}},{default:r(()=>[o(x,null,{default:r(()=>[o(f,{onClick:b,disabled:n.value||s.value},{default:r(()=>[...e[9]||(e[9]=[B(" 重置 ",-1)])]),_:1},8,["disabled"]),o(f,{type:"primary",loading:n.value,disabled:!z.value,onClick:g},{default:r(()=>[...e[10]||(e[10]=[B(" 保存配置 ",-1)])]),_:1},8,["loading","disabled"]),z.value?(I(),h("span",H," 有未保存的修改 ")):$("",!0)]),_:1})]),_:1})]),_:1})]),_:1},8,["spinning"])]),_:1})])}}},te=A(X,[["__scopeId","data-v-17603429"]]);export{te as default};
@@ -1 +1 @@
1
- import{o as Ee,M as x,R as C,P as i,u as k,O as n,c as t,N as a,Q as w,S as A,K as r,r as d,f as ie,L as c,F as de,a1 as Te}from"./vendor-BXcBOG8b.js";import{_ as qe,b as Me,u as Ve,d as u}from"./index-Cs66y4oC.js";import{u as We}from"./useShellMode-CgR0wCYM.js";import{R as Je,at as Ke,F as Qe,f as Ge,l as He,aN as Xe,aO as Ye,aP as Ze}from"./icons-DlxlFL4g.js";const et={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},tt={class:"page-title"},at={class:"page-sub"},lt={class:"filter-bar",style:{"margin-bottom":"12px",display:"flex",gap:"12px","align-items":"center"}},ot={key:0,style:{"font-size":"12px",color:"#888"}},nt={key:0,style:{color:"#888","font-size":"12px"}},rt={key:0},st={key:1,style:{color:"#888"}},ut=["onClick"],it={key:0,style:{color:"#888","font-size":"12px"}},dt={__name:"Projects",setup(ct){const{t:ce}=Me(),oe=Ve(),{isEmbedded:fe}=We();async function _(l,e,te,m=8e3){if(fe){const b=await oe.sendRaw({...e,type:l},m);if(!b?.ok){const j=b?.error;throw new Error(typeof j=="string"?j:j?.message||`${l} failed`)}return b.result}return oe.executeJson(te,m)}const S=d(!1),F=d([]),L=d(""),N=d(""),h=d(!1),s=d(null),O=d([]),P=d(!1),B=d(!1),G=d(!1),f=d({name:"",description:"",type:"document",rootPath:""}),pe=[{title:"ID",key:"id",width:110},{title:"名称",key:"name"},{title:"类型",key:"project_type",width:120},{title:"状态",key:"status",width:100},{title:"同步",key:"sync_status",width:100},{title:"更新",key:"updated_at",width:160},{title:"操作",key:"actions",width:180,fixed:"right"}],H=ie(()=>{const l={active:0,draft:0,completed:0,archived:0};for(const e of F.value)l[e.status]!==void 0&&(l[e.status]+=1);return l}),ve=ie(()=>F.value.filter(l=>!(L.value&&l.status!==L.value||N.value&&!l.name.toLowerCase().includes(N.value.toLowerCase()))));function ne(l){switch(l){case"active":return"green";case"draft":return"default";case"completed":return"cyan";case"archived":return"gold";default:return"default"}}function re(l){switch(l){case"synced":return"green";case"pending":return"orange";case"conflict":return"red";case"error":return"red";default:return"default"}}function X(l){return!l&&l!==0?"-":new Date(typeof l=="number"?l:parseInt(l,10)).toLocaleString("zh-CN",{hour12:!1})}async function $(){S.value=!0;try{const l=await _("project.list",{limit:500},"project list --limit 500 --json",1e4);F.value=Array.isArray(l?.projects)?l.projects:Array.isArray(l)?l:[]}catch(l){u.error("加载失败: "+(l.message||l)),F.value=[]}finally{S.value=!1}}function _e(l){return{onClick:()=>se(l)}}async function se(l){s.value=l,h.value=!0,P.value=!0,O.value=[];try{const e=await _("project.listFiles",{projectId:l.id,limit:200},`project list-files ${l.id} --json`,8e3);O.value=Array.isArray(e?.files)?e.files:[]}catch{O.value=[]}finally{P.value=!1}}async function me(l){try{(await _("project.delete",{id:l.id},`project delete ${l.id} --json`,8e3))?.ok?(u.success(`已删除项目 '${l.name}'`),h.value=!1,await $()):u.error("删除失败")}catch(e){u.error(e.message||String(e))}}function ye(){f.value={name:"",description:"",type:"document",rootPath:""},B.value=!0}async function ge(){if(!f.value.name.trim()){u.warning("请输入项目名称");return}G.value=!0;try{const l=await _("project.init",{name:f.value.name.trim(),description:f.value.description||null,projectType:f.value.type,rootPath:f.value.rootPath||null},`project init "${f.value.name.trim()}" --type ${f.value.type} --json`,8e3);l?.id?(u.success(`已创建项目 '${l.name}'`),B.value=!1,await $()):u.error("创建失败")}catch(l){u.error(l.message||String(l))}finally{G.value=!1}}const E=d(!1),Y=d(!1),g=d({path:"",content:""}),T=d(!1),Z=d(!1),I=d({path:""}),q=d(!1),D=d(null),M=d(""),ee=d(!1);function ke(){g.value={path:"",content:""},E.value=!0}function we(){I.value={path:""},T.value=!0}async function V(){if(s.value){P.value=!0;try{const l=await _("project.listFiles",{projectId:s.value.id,limit:200},`project list-files ${s.value.id} --json`,8e3);O.value=Array.isArray(l?.files)?l.files:[]}catch(l){u.error("刷新文件失败: "+(l.message||l))}finally{P.value=!1}}}async function be(){if(!g.value.path.trim()){u.warning("请输入文件路径");return}if(s.value){Y.value=!0;try{const l=await _("project.createFile",{projectId:s.value.id,filePath:g.value.path.trim(),content:g.value.content||""},`project create-file ${s.value.id} "${g.value.path.trim()}" --json`,8e3);l?.id?(u.success(`已创建文件 '${l.file_name}'`),E.value=!1,await V(),await $()):u.error("创建文件失败")}catch(l){u.error(l.message||String(l))}finally{Y.value=!1}}}async function je(){if(!I.value.path.trim()){u.warning("请输入文件夹路径");return}if(s.value){Z.value=!0;try{const l=await _("project.createFolder",{projectId:s.value.id,folderPath:I.value.path.trim()},`project create-folder ${s.value.id} "${I.value.path.trim()}" --json`,8e3);l?.id?(u.success(`已创建文件夹 '${l.file_name}'`),T.value=!1,await V(),await $()):u.error("创建文件夹失败")}catch(l){u.error(l.message||String(l))}finally{Z.value=!1}}}async function xe(l){try{(await _("project.deleteFile",{fileId:l.id},`project delete-file ${l.id} --json`,8e3))?.deleted?(u.success(`已删除 '${l.file_name}'`),await V(),await $()):u.error("删除失败")}catch(e){u.error(e.message||String(e))}}async function Ce(l){if(l.is_folder){u.info("文件夹无内容可编辑");return}try{const e=await _("project.getFile",{fileId:l.id},`project get-file ${l.id} --json`,8e3);D.value=l,M.value=e?.content||"",q.value=!0}catch(e){u.error("读取文件失败: "+(e.message||e))}}async function Fe(){if(D.value){ee.value=!0;try{(await _("project.writeFile",{fileId:D.value.id,content:M.value},`project write-file ${D.value.id} --json`,8e3))?.id?(u.success("已保存"),q.value=!1,await V()):u.error("保存失败")}catch(l){u.error(l.message||String(l))}finally{ee.value=!1}}}return Ee(()=>{$()}),(l,e)=>{const te=r("router-link"),m=r("a-button"),b=r("a-space"),j=r("a-statistic"),W=r("a-card"),J=r("a-col"),$e=r("a-row"),R=r("a-radio-button"),ze=r("a-radio-group"),Se=r("a-input-search"),Oe=r("a-alert"),U=r("a-tag"),ue=r("a-popconfirm"),Pe=r("a-table"),v=r("a-descriptions-item"),Ie=r("a-descriptions"),Ue=r("a-divider"),Ae=r("a-empty"),De=r("a-list-item"),Re=r("a-list"),Le=r("a-spin"),Ne=r("a-drawer"),K=r("a-input"),z=r("a-form-item"),ae=r("a-textarea"),le=r("a-form"),Q=r("a-modal"),y=r("a-select-option"),he=r("a-select");return c(),x("div",null,[C("div",et,[C("div",null,[C("h2",tt,i(k(ce)("projects.title")),1),C("p",at,[e[17]||(e[17]=n("桌面 / CLI / 手机 三端共享同一份项目数据,Phase 3d sync 自动同步 (",-1)),t(te,{to:"/project-init"},{default:a(()=>[...e[16]||(e[16]=[n("项目初始化 / 环境设置",-1)])]),_:1}),e[18]||(e[18]=n(")",-1))])]),t(b,null,{default:a(()=>[t(m,{loading:S.value,onClick:$},{icon:a(()=>[t(k(Je))]),default:a(()=>[e[19]||(e[19]=n(" 刷新 ",-1))]),_:1},8,["loading"]),t(m,{type:"primary",onClick:ye},{icon:a(()=>[t(k(Ke))]),default:a(()=>[e[20]||(e[20]=n(" 新建项目 ",-1))]),_:1})]),_:1})]),t($e,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:a(()=>[t(J,{xs:12,sm:8,lg:6},{default:a(()=>[t(W,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(j,{title:"总项目",value:F.value.length,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:a(()=>[t(k(Qe))]),_:1},8,["value"])]),_:1})]),_:1}),t(J,{xs:12,sm:8,lg:6},{default:a(()=>[t(W,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(j,{title:"活跃",value:H.value.active,"value-style":{color:"#52c41a",fontSize:"20px"}},{prefix:a(()=>[t(k(Ge))]),_:1},8,["value"])]),_:1})]),_:1}),t(J,{xs:12,sm:8,lg:6},{default:a(()=>[t(W,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(j,{title:"草稿",value:H.value.draft,"value-style":{color:"#8c8c8c",fontSize:"20px"}},{prefix:a(()=>[t(k(He))]),_:1},8,["value"])]),_:1})]),_:1}),t(J,{xs:12,sm:8,lg:6},{default:a(()=>[t(W,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(j,{title:"已完成",value:H.value.completed,"value-style":{color:"#13c2c2",fontSize:"20px"}},{prefix:a(()=>[t(k(Xe))]),_:1},8,["value"])]),_:1})]),_:1})]),_:1}),C("div",lt,[t(ze,{value:L.value,"onUpdate:value":e[0]||(e[0]=o=>L.value=o),size:"small","button-style":"solid"},{default:a(()=>[t(R,{value:""},{default:a(()=>[...e[21]||(e[21]=[n("全部",-1)])]),_:1}),t(R,{value:"active"},{default:a(()=>[...e[22]||(e[22]=[n("活跃",-1)])]),_:1}),t(R,{value:"draft"},{default:a(()=>[...e[23]||(e[23]=[n("草稿",-1)])]),_:1}),t(R,{value:"completed"},{default:a(()=>[...e[24]||(e[24]=[n("已完成",-1)])]),_:1}),t(R,{value:"archived"},{default:a(()=>[...e[25]||(e[25]=[n("已归档",-1)])]),_:1})]),_:1},8,["value"]),t(Se,{value:N.value,"onUpdate:value":e[1]||(e[1]=o=>N.value=o),placeholder:"按名称过滤",style:{"max-width":"260px"},"allow-clear":""},null,8,["value"])]),!F.value.length&&!S.value?(c(),w(Oe,{key:0,type:"info",message:"还没有项目",description:'运行 `cc project init <name>` 或点击右上角"新建项目"按钮创建。桌面 / CLI / 手机三端共享同一份数据。',"show-icon":"",style:{"margin-bottom":"16px"}})):A("",!0),F.value.length||S.value?(c(),w(Pe,{key:1,columns:pe,"data-source":ve.value,loading:S.value,pagination:{pageSize:20,showSizeChanger:!0},"row-key":"id","custom-row":_e},{bodyCell:a(({column:o,record:p})=>[o.key==="id"?(c(),x("code",ot,i(p.id.slice(0,8))+"…",1)):o.key==="name"?(c(),x(de,{key:1},[C("strong",null,i(p.name),1),p.description?(c(),x("div",nt,i(p.description),1)):A("",!0)],64)):o.key==="project_type"?(c(),w(U,{key:2},{default:a(()=>[n(i(p.project_type),1)]),_:2},1024)):o.key==="status"?(c(),w(U,{key:3,color:ne(p.status)},{default:a(()=>[n(i(p.status),1)]),_:2},1032,["color"])):o.key==="sync_status"?(c(),w(U,{key:4,color:re(p.sync_status)},{default:a(()=>[n(i(p.sync_status||"unknown"),1)]),_:2},1032,["color"])):o.key==="updated_at"?(c(),x(de,{key:5},[n(i(X(p.updated_at)),1)],64)):o.key==="actions"?(c(),w(b,{key:6,onClick:e[2]||(e[2]=Te(()=>{},["stop"]))},{default:a(()=>[t(m,{size:"small",onClick:Be=>se(p)},{default:a(()=>[...e[26]||(e[26]=[n("详情",-1)])]),_:1},8,["onClick"]),t(ue,{title:`删除项目 '${p.name}' ?`,"ok-text":"删除","ok-type":"danger","cancel-text":"取消",onConfirm:Be=>me(p)},{default:a(()=>[t(m,{size:"small",danger:""},{default:a(()=>[...e[27]||(e[27]=[n("删除",-1)])]),_:1})]),_:1},8,["title","onConfirm"])]),_:2},1024)):A("",!0)]),_:1},8,["data-source","loading"])):A("",!0),t(Ne,{open:h.value,"onUpdate:open":e[3]||(e[3]=o=>h.value=o),title:s.value?.name||"项目详情",width:"640",placement:"right"},{default:a(()=>[s.value?(c(),w(Ie,{key:0,column:1,bordered:"",size:"small"},{default:a(()=>[t(v,{label:"ID"},{default:a(()=>[C("code",null,i(s.value.id),1)]),_:1}),t(v,{label:"名称"},{default:a(()=>[n(i(s.value.name),1)]),_:1}),t(v,{label:"描述"},{default:a(()=>[n(i(s.value.description||"-"),1)]),_:1}),t(v,{label:"类型"},{default:a(()=>[t(U,null,{default:a(()=>[n(i(s.value.project_type),1)]),_:1})]),_:1}),t(v,{label:"状态"},{default:a(()=>[t(U,{color:ne(s.value.status)},{default:a(()=>[n(i(s.value.status),1)]),_:1},8,["color"])]),_:1}),t(v,{label:"同步状态"},{default:a(()=>[t(U,{color:re(s.value.sync_status)},{default:a(()=>[n(i(s.value.sync_status||"unknown"),1)]),_:1},8,["color"])]),_:1}),t(v,{label:"用户"},{default:a(()=>[n(i(s.value.user_id),1)]),_:1}),t(v,{label:"根路径"},{default:a(()=>[s.value.root_path?(c(),x("code",rt,i(s.value.root_path),1)):(c(),x("span",st,"(无)"))]),_:1}),t(v,{label:"文件数"},{default:a(()=>[n(i(s.value.file_count||0),1)]),_:1}),t(v,{label:"创建"},{default:a(()=>[n(i(X(s.value.created_at)),1)]),_:1}),t(v,{label:"更新"},{default:a(()=>[n(i(X(s.value.updated_at)),1)]),_:1})]),_:1})):A("",!0),t(Ue,null,{default:a(()=>[...e[28]||(e[28]=[n("文件",-1)])]),_:1}),t(b,{style:{"margin-bottom":"12px"}},{default:a(()=>[t(m,{size:"small",type:"primary",disabled:!s.value,onClick:ke},{default:a(()=>[t(k(Ye)),e[29]||(e[29]=n(" 新建文件 ",-1))]),_:1},8,["disabled"]),t(m,{size:"small",disabled:!s.value,onClick:we},{default:a(()=>[t(k(Ze)),e[30]||(e[30]=n(" 新建文件夹 ",-1))]),_:1},8,["disabled"])]),_:1}),t(Le,{spinning:P.value},{default:a(()=>[!O.value.length&&!P.value?(c(),w(Ae,{key:0,description:"无文件 (点上方按钮新建)"})):(c(),w(Re,{key:1,size:"small","data-source":O.value},{renderItem:a(({item:o})=>[t(De,null,{extra:a(()=>[t(b,null,{default:a(()=>[o.file_size?(c(),x("span",it,i(o.file_size)+" B",1)):A("",!0),t(ue,{title:`删除 ${o.is_folder?"文件夹":"文件"} '${o.file_name}' ?`,"ok-text":"删除","ok-type":"danger","cancel-text":"取消",onConfirm:p=>xe(o)},{default:a(()=>[t(m,{size:"small",danger:""},{default:a(()=>[...e[31]||(e[31]=[n("×",-1)])]),_:1})]),_:1},8,["title","onConfirm"])]),_:2},1024)]),default:a(()=>[C("span",{style:{cursor:"pointer"},onClick:p=>Ce(o)},i(o.is_folder?"📁":"📄")+" "+i(o.file_path),9,ut)]),_:2},1024)]),_:1},8,["data-source"]))]),_:1},8,["spinning"])]),_:1},8,["open","title"]),t(Q,{open:E.value,"onUpdate:open":e[6]||(e[6]=o=>E.value=o),title:"新建文件","confirm-loading":Y.value,"ok-text":"创建","cancel-text":"取消",onOk:be},{default:a(()=>[t(le,{layout:"vertical"},{default:a(()=>[t(z,{label:"文件路径(项目内)",required:""},{default:a(()=>[t(K,{value:g.value.path,"onUpdate:value":e[4]||(e[4]=o=>g.value.path=o),placeholder:"例如 README.md 或 src/main.kt"},null,8,["value"])]),_:1}),t(z,{label:"初始内容(可选)"},{default:a(()=>[t(ae,{value:g.value.content,"onUpdate:value":e[5]||(e[5]=o=>g.value.content=o),rows:6,placeholder:"留空创建空文件"},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"]),t(Q,{open:T.value,"onUpdate:open":e[8]||(e[8]=o=>T.value=o),title:"新建文件夹","confirm-loading":Z.value,"ok-text":"创建","cancel-text":"取消",onOk:je},{default:a(()=>[t(le,{layout:"vertical"},{default:a(()=>[t(z,{label:"文件夹路径(项目内)",required:""},{default:a(()=>[t(K,{value:I.value.path,"onUpdate:value":e[7]||(e[7]=o=>I.value.path=o),placeholder:"例如 src/utils"},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"]),t(Q,{open:q.value,"onUpdate:open":e[10]||(e[10]=o=>q.value=o),title:`编辑 ${D.value?.file_name||""}`,"confirm-loading":ee.value,"ok-text":"保存","cancel-text":"取消",onOk:Fe,width:"720"},{default:a(()=>[t(ae,{value:M.value,"onUpdate:value":e[9]||(e[9]=o=>M.value=o),rows:18,"auto-size":{minRows:12,maxRows:24},style:{"font-family":"monospace"}},null,8,["value"])]),_:1},8,["open","title","confirm-loading"]),t(Q,{open:B.value,"onUpdate:open":e[15]||(e[15]=o=>B.value=o),title:"新建项目","confirm-loading":G.value,"ok-text":"创建","cancel-text":"取消",onOk:ge},{default:a(()=>[t(le,{layout:"vertical"},{default:a(()=>[t(z,{label:"项目名称",required:""},{default:a(()=>[t(K,{value:f.value.name,"onUpdate:value":e[11]||(e[11]=o=>f.value.name=o),placeholder:"例如:旅行计划-上海"},null,8,["value"])]),_:1}),t(z,{label:"描述"},{default:a(()=>[t(ae,{value:f.value.description,"onUpdate:value":e[12]||(e[12]=o=>f.value.description=o),rows:2},null,8,["value"])]),_:1}),t(z,{label:"类型"},{default:a(()=>[t(he,{value:f.value.type,"onUpdate:value":e[13]||(e[13]=o=>f.value.type=o)},{default:a(()=>[t(y,{value:"document"},{default:a(()=>[...e[32]||(e[32]=[n("文档 (document)",-1)])]),_:1}),t(y,{value:"data"},{default:a(()=>[...e[33]||(e[33]=[n("数据 (data)",-1)])]),_:1}),t(y,{value:"web"},{default:a(()=>[...e[34]||(e[34]=[n("Web",-1)])]),_:1}),t(y,{value:"app"},{default:a(()=>[...e[35]||(e[35]=[n("应用 (app)",-1)])]),_:1}),t(y,{value:"presentation"},{default:a(()=>[...e[36]||(e[36]=[n("演示文稿",-1)])]),_:1}),t(y,{value:"spreadsheet"},{default:a(()=>[...e[37]||(e[37]=[n("表格",-1)])]),_:1}),t(y,{value:"design"},{default:a(()=>[...e[38]||(e[38]=[n("设计",-1)])]),_:1}),t(y,{value:"code"},{default:a(()=>[...e[39]||(e[39]=[n("代码",-1)])]),_:1}),t(y,{value:"workflow"},{default:a(()=>[...e[40]||(e[40]=[n("工作流",-1)])]),_:1}),t(y,{value:"knowledge"},{default:a(()=>[...e[41]||(e[41]=[n("知识库",-1)])]),_:1})]),_:1},8,["value"])]),_:1}),t(z,{label:"根路径 (可选)"},{default:a(()=>[t(K,{value:f.value.rootPath,"onUpdate:value":e[14]||(e[14]=o=>f.value.rootPath=o),placeholder:"留空则仅元数据"},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"])])}}},mt=qe(dt,[["__scopeId","data-v-e27c9ce1"]]);export{mt as default};
1
+ import{o as Ee,M as x,R as C,P as i,u as k,O as n,c as t,N as a,Q as w,S as A,K as r,r as d,f as ie,L as c,F as de,a1 as Te}from"./vendor-BXcBOG8b.js";import{_ as qe,b as Me,u as Ve,d as u}from"./index-CzoKAiyT.js";import{u as We}from"./useShellMode-CgR0wCYM.js";import{R as Je,at as Ke,F as Qe,f as Ge,l as He,aN as Xe,aO as Ye,aP as Ze}from"./icons-DlxlFL4g.js";const et={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},tt={class:"page-title"},at={class:"page-sub"},lt={class:"filter-bar",style:{"margin-bottom":"12px",display:"flex",gap:"12px","align-items":"center"}},ot={key:0,style:{"font-size":"12px",color:"#888"}},nt={key:0,style:{color:"#888","font-size":"12px"}},rt={key:0},st={key:1,style:{color:"#888"}},ut=["onClick"],it={key:0,style:{color:"#888","font-size":"12px"}},dt={__name:"Projects",setup(ct){const{t:ce}=Me(),oe=Ve(),{isEmbedded:fe}=We();async function _(l,e,te,m=8e3){if(fe){const b=await oe.sendRaw({...e,type:l},m);if(!b?.ok){const j=b?.error;throw new Error(typeof j=="string"?j:j?.message||`${l} failed`)}return b.result}return oe.executeJson(te,m)}const S=d(!1),F=d([]),L=d(""),N=d(""),h=d(!1),s=d(null),O=d([]),P=d(!1),B=d(!1),G=d(!1),f=d({name:"",description:"",type:"document",rootPath:""}),pe=[{title:"ID",key:"id",width:110},{title:"名称",key:"name"},{title:"类型",key:"project_type",width:120},{title:"状态",key:"status",width:100},{title:"同步",key:"sync_status",width:100},{title:"更新",key:"updated_at",width:160},{title:"操作",key:"actions",width:180,fixed:"right"}],H=ie(()=>{const l={active:0,draft:0,completed:0,archived:0};for(const e of F.value)l[e.status]!==void 0&&(l[e.status]+=1);return l}),ve=ie(()=>F.value.filter(l=>!(L.value&&l.status!==L.value||N.value&&!l.name.toLowerCase().includes(N.value.toLowerCase()))));function ne(l){switch(l){case"active":return"green";case"draft":return"default";case"completed":return"cyan";case"archived":return"gold";default:return"default"}}function re(l){switch(l){case"synced":return"green";case"pending":return"orange";case"conflict":return"red";case"error":return"red";default:return"default"}}function X(l){return!l&&l!==0?"-":new Date(typeof l=="number"?l:parseInt(l,10)).toLocaleString("zh-CN",{hour12:!1})}async function $(){S.value=!0;try{const l=await _("project.list",{limit:500},"project list --limit 500 --json",1e4);F.value=Array.isArray(l?.projects)?l.projects:Array.isArray(l)?l:[]}catch(l){u.error("加载失败: "+(l.message||l)),F.value=[]}finally{S.value=!1}}function _e(l){return{onClick:()=>se(l)}}async function se(l){s.value=l,h.value=!0,P.value=!0,O.value=[];try{const e=await _("project.listFiles",{projectId:l.id,limit:200},`project list-files ${l.id} --json`,8e3);O.value=Array.isArray(e?.files)?e.files:[]}catch{O.value=[]}finally{P.value=!1}}async function me(l){try{(await _("project.delete",{id:l.id},`project delete ${l.id} --json`,8e3))?.ok?(u.success(`已删除项目 '${l.name}'`),h.value=!1,await $()):u.error("删除失败")}catch(e){u.error(e.message||String(e))}}function ye(){f.value={name:"",description:"",type:"document",rootPath:""},B.value=!0}async function ge(){if(!f.value.name.trim()){u.warning("请输入项目名称");return}G.value=!0;try{const l=await _("project.init",{name:f.value.name.trim(),description:f.value.description||null,projectType:f.value.type,rootPath:f.value.rootPath||null},`project init "${f.value.name.trim()}" --type ${f.value.type} --json`,8e3);l?.id?(u.success(`已创建项目 '${l.name}'`),B.value=!1,await $()):u.error("创建失败")}catch(l){u.error(l.message||String(l))}finally{G.value=!1}}const E=d(!1),Y=d(!1),g=d({path:"",content:""}),T=d(!1),Z=d(!1),I=d({path:""}),q=d(!1),D=d(null),M=d(""),ee=d(!1);function ke(){g.value={path:"",content:""},E.value=!0}function we(){I.value={path:""},T.value=!0}async function V(){if(s.value){P.value=!0;try{const l=await _("project.listFiles",{projectId:s.value.id,limit:200},`project list-files ${s.value.id} --json`,8e3);O.value=Array.isArray(l?.files)?l.files:[]}catch(l){u.error("刷新文件失败: "+(l.message||l))}finally{P.value=!1}}}async function be(){if(!g.value.path.trim()){u.warning("请输入文件路径");return}if(s.value){Y.value=!0;try{const l=await _("project.createFile",{projectId:s.value.id,filePath:g.value.path.trim(),content:g.value.content||""},`project create-file ${s.value.id} "${g.value.path.trim()}" --json`,8e3);l?.id?(u.success(`已创建文件 '${l.file_name}'`),E.value=!1,await V(),await $()):u.error("创建文件失败")}catch(l){u.error(l.message||String(l))}finally{Y.value=!1}}}async function je(){if(!I.value.path.trim()){u.warning("请输入文件夹路径");return}if(s.value){Z.value=!0;try{const l=await _("project.createFolder",{projectId:s.value.id,folderPath:I.value.path.trim()},`project create-folder ${s.value.id} "${I.value.path.trim()}" --json`,8e3);l?.id?(u.success(`已创建文件夹 '${l.file_name}'`),T.value=!1,await V(),await $()):u.error("创建文件夹失败")}catch(l){u.error(l.message||String(l))}finally{Z.value=!1}}}async function xe(l){try{(await _("project.deleteFile",{fileId:l.id},`project delete-file ${l.id} --json`,8e3))?.deleted?(u.success(`已删除 '${l.file_name}'`),await V(),await $()):u.error("删除失败")}catch(e){u.error(e.message||String(e))}}async function Ce(l){if(l.is_folder){u.info("文件夹无内容可编辑");return}try{const e=await _("project.getFile",{fileId:l.id},`project get-file ${l.id} --json`,8e3);D.value=l,M.value=e?.content||"",q.value=!0}catch(e){u.error("读取文件失败: "+(e.message||e))}}async function Fe(){if(D.value){ee.value=!0;try{(await _("project.writeFile",{fileId:D.value.id,content:M.value},`project write-file ${D.value.id} --json`,8e3))?.id?(u.success("已保存"),q.value=!1,await V()):u.error("保存失败")}catch(l){u.error(l.message||String(l))}finally{ee.value=!1}}}return Ee(()=>{$()}),(l,e)=>{const te=r("router-link"),m=r("a-button"),b=r("a-space"),j=r("a-statistic"),W=r("a-card"),J=r("a-col"),$e=r("a-row"),R=r("a-radio-button"),ze=r("a-radio-group"),Se=r("a-input-search"),Oe=r("a-alert"),U=r("a-tag"),ue=r("a-popconfirm"),Pe=r("a-table"),v=r("a-descriptions-item"),Ie=r("a-descriptions"),Ue=r("a-divider"),Ae=r("a-empty"),De=r("a-list-item"),Re=r("a-list"),Le=r("a-spin"),Ne=r("a-drawer"),K=r("a-input"),z=r("a-form-item"),ae=r("a-textarea"),le=r("a-form"),Q=r("a-modal"),y=r("a-select-option"),he=r("a-select");return c(),x("div",null,[C("div",et,[C("div",null,[C("h2",tt,i(k(ce)("projects.title")),1),C("p",at,[e[17]||(e[17]=n("桌面 / CLI / 手机 三端共享同一份项目数据,Phase 3d sync 自动同步 (",-1)),t(te,{to:"/project-init"},{default:a(()=>[...e[16]||(e[16]=[n("项目初始化 / 环境设置",-1)])]),_:1}),e[18]||(e[18]=n(")",-1))])]),t(b,null,{default:a(()=>[t(m,{loading:S.value,onClick:$},{icon:a(()=>[t(k(Je))]),default:a(()=>[e[19]||(e[19]=n(" 刷新 ",-1))]),_:1},8,["loading"]),t(m,{type:"primary",onClick:ye},{icon:a(()=>[t(k(Ke))]),default:a(()=>[e[20]||(e[20]=n(" 新建项目 ",-1))]),_:1})]),_:1})]),t($e,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:a(()=>[t(J,{xs:12,sm:8,lg:6},{default:a(()=>[t(W,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(j,{title:"总项目",value:F.value.length,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:a(()=>[t(k(Qe))]),_:1},8,["value"])]),_:1})]),_:1}),t(J,{xs:12,sm:8,lg:6},{default:a(()=>[t(W,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(j,{title:"活跃",value:H.value.active,"value-style":{color:"#52c41a",fontSize:"20px"}},{prefix:a(()=>[t(k(Ge))]),_:1},8,["value"])]),_:1})]),_:1}),t(J,{xs:12,sm:8,lg:6},{default:a(()=>[t(W,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(j,{title:"草稿",value:H.value.draft,"value-style":{color:"#8c8c8c",fontSize:"20px"}},{prefix:a(()=>[t(k(He))]),_:1},8,["value"])]),_:1})]),_:1}),t(J,{xs:12,sm:8,lg:6},{default:a(()=>[t(W,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(j,{title:"已完成",value:H.value.completed,"value-style":{color:"#13c2c2",fontSize:"20px"}},{prefix:a(()=>[t(k(Xe))]),_:1},8,["value"])]),_:1})]),_:1})]),_:1}),C("div",lt,[t(ze,{value:L.value,"onUpdate:value":e[0]||(e[0]=o=>L.value=o),size:"small","button-style":"solid"},{default:a(()=>[t(R,{value:""},{default:a(()=>[...e[21]||(e[21]=[n("全部",-1)])]),_:1}),t(R,{value:"active"},{default:a(()=>[...e[22]||(e[22]=[n("活跃",-1)])]),_:1}),t(R,{value:"draft"},{default:a(()=>[...e[23]||(e[23]=[n("草稿",-1)])]),_:1}),t(R,{value:"completed"},{default:a(()=>[...e[24]||(e[24]=[n("已完成",-1)])]),_:1}),t(R,{value:"archived"},{default:a(()=>[...e[25]||(e[25]=[n("已归档",-1)])]),_:1})]),_:1},8,["value"]),t(Se,{value:N.value,"onUpdate:value":e[1]||(e[1]=o=>N.value=o),placeholder:"按名称过滤",style:{"max-width":"260px"},"allow-clear":""},null,8,["value"])]),!F.value.length&&!S.value?(c(),w(Oe,{key:0,type:"info",message:"还没有项目",description:'运行 `cc project init <name>` 或点击右上角"新建项目"按钮创建。桌面 / CLI / 手机三端共享同一份数据。',"show-icon":"",style:{"margin-bottom":"16px"}})):A("",!0),F.value.length||S.value?(c(),w(Pe,{key:1,columns:pe,"data-source":ve.value,loading:S.value,pagination:{pageSize:20,showSizeChanger:!0},"row-key":"id","custom-row":_e},{bodyCell:a(({column:o,record:p})=>[o.key==="id"?(c(),x("code",ot,i(p.id.slice(0,8))+"…",1)):o.key==="name"?(c(),x(de,{key:1},[C("strong",null,i(p.name),1),p.description?(c(),x("div",nt,i(p.description),1)):A("",!0)],64)):o.key==="project_type"?(c(),w(U,{key:2},{default:a(()=>[n(i(p.project_type),1)]),_:2},1024)):o.key==="status"?(c(),w(U,{key:3,color:ne(p.status)},{default:a(()=>[n(i(p.status),1)]),_:2},1032,["color"])):o.key==="sync_status"?(c(),w(U,{key:4,color:re(p.sync_status)},{default:a(()=>[n(i(p.sync_status||"unknown"),1)]),_:2},1032,["color"])):o.key==="updated_at"?(c(),x(de,{key:5},[n(i(X(p.updated_at)),1)],64)):o.key==="actions"?(c(),w(b,{key:6,onClick:e[2]||(e[2]=Te(()=>{},["stop"]))},{default:a(()=>[t(m,{size:"small",onClick:Be=>se(p)},{default:a(()=>[...e[26]||(e[26]=[n("详情",-1)])]),_:1},8,["onClick"]),t(ue,{title:`删除项目 '${p.name}' ?`,"ok-text":"删除","ok-type":"danger","cancel-text":"取消",onConfirm:Be=>me(p)},{default:a(()=>[t(m,{size:"small",danger:""},{default:a(()=>[...e[27]||(e[27]=[n("删除",-1)])]),_:1})]),_:1},8,["title","onConfirm"])]),_:2},1024)):A("",!0)]),_:1},8,["data-source","loading"])):A("",!0),t(Ne,{open:h.value,"onUpdate:open":e[3]||(e[3]=o=>h.value=o),title:s.value?.name||"项目详情",width:"640",placement:"right"},{default:a(()=>[s.value?(c(),w(Ie,{key:0,column:1,bordered:"",size:"small"},{default:a(()=>[t(v,{label:"ID"},{default:a(()=>[C("code",null,i(s.value.id),1)]),_:1}),t(v,{label:"名称"},{default:a(()=>[n(i(s.value.name),1)]),_:1}),t(v,{label:"描述"},{default:a(()=>[n(i(s.value.description||"-"),1)]),_:1}),t(v,{label:"类型"},{default:a(()=>[t(U,null,{default:a(()=>[n(i(s.value.project_type),1)]),_:1})]),_:1}),t(v,{label:"状态"},{default:a(()=>[t(U,{color:ne(s.value.status)},{default:a(()=>[n(i(s.value.status),1)]),_:1},8,["color"])]),_:1}),t(v,{label:"同步状态"},{default:a(()=>[t(U,{color:re(s.value.sync_status)},{default:a(()=>[n(i(s.value.sync_status||"unknown"),1)]),_:1},8,["color"])]),_:1}),t(v,{label:"用户"},{default:a(()=>[n(i(s.value.user_id),1)]),_:1}),t(v,{label:"根路径"},{default:a(()=>[s.value.root_path?(c(),x("code",rt,i(s.value.root_path),1)):(c(),x("span",st,"(无)"))]),_:1}),t(v,{label:"文件数"},{default:a(()=>[n(i(s.value.file_count||0),1)]),_:1}),t(v,{label:"创建"},{default:a(()=>[n(i(X(s.value.created_at)),1)]),_:1}),t(v,{label:"更新"},{default:a(()=>[n(i(X(s.value.updated_at)),1)]),_:1})]),_:1})):A("",!0),t(Ue,null,{default:a(()=>[...e[28]||(e[28]=[n("文件",-1)])]),_:1}),t(b,{style:{"margin-bottom":"12px"}},{default:a(()=>[t(m,{size:"small",type:"primary",disabled:!s.value,onClick:ke},{default:a(()=>[t(k(Ye)),e[29]||(e[29]=n(" 新建文件 ",-1))]),_:1},8,["disabled"]),t(m,{size:"small",disabled:!s.value,onClick:we},{default:a(()=>[t(k(Ze)),e[30]||(e[30]=n(" 新建文件夹 ",-1))]),_:1},8,["disabled"])]),_:1}),t(Le,{spinning:P.value},{default:a(()=>[!O.value.length&&!P.value?(c(),w(Ae,{key:0,description:"无文件 (点上方按钮新建)"})):(c(),w(Re,{key:1,size:"small","data-source":O.value},{renderItem:a(({item:o})=>[t(De,null,{extra:a(()=>[t(b,null,{default:a(()=>[o.file_size?(c(),x("span",it,i(o.file_size)+" B",1)):A("",!0),t(ue,{title:`删除 ${o.is_folder?"文件夹":"文件"} '${o.file_name}' ?`,"ok-text":"删除","ok-type":"danger","cancel-text":"取消",onConfirm:p=>xe(o)},{default:a(()=>[t(m,{size:"small",danger:""},{default:a(()=>[...e[31]||(e[31]=[n("×",-1)])]),_:1})]),_:1},8,["title","onConfirm"])]),_:2},1024)]),default:a(()=>[C("span",{style:{cursor:"pointer"},onClick:p=>Ce(o)},i(o.is_folder?"📁":"📄")+" "+i(o.file_path),9,ut)]),_:2},1024)]),_:1},8,["data-source"]))]),_:1},8,["spinning"])]),_:1},8,["open","title"]),t(Q,{open:E.value,"onUpdate:open":e[6]||(e[6]=o=>E.value=o),title:"新建文件","confirm-loading":Y.value,"ok-text":"创建","cancel-text":"取消",onOk:be},{default:a(()=>[t(le,{layout:"vertical"},{default:a(()=>[t(z,{label:"文件路径(项目内)",required:""},{default:a(()=>[t(K,{value:g.value.path,"onUpdate:value":e[4]||(e[4]=o=>g.value.path=o),placeholder:"例如 README.md 或 src/main.kt"},null,8,["value"])]),_:1}),t(z,{label:"初始内容(可选)"},{default:a(()=>[t(ae,{value:g.value.content,"onUpdate:value":e[5]||(e[5]=o=>g.value.content=o),rows:6,placeholder:"留空创建空文件"},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"]),t(Q,{open:T.value,"onUpdate:open":e[8]||(e[8]=o=>T.value=o),title:"新建文件夹","confirm-loading":Z.value,"ok-text":"创建","cancel-text":"取消",onOk:je},{default:a(()=>[t(le,{layout:"vertical"},{default:a(()=>[t(z,{label:"文件夹路径(项目内)",required:""},{default:a(()=>[t(K,{value:I.value.path,"onUpdate:value":e[7]||(e[7]=o=>I.value.path=o),placeholder:"例如 src/utils"},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"]),t(Q,{open:q.value,"onUpdate:open":e[10]||(e[10]=o=>q.value=o),title:`编辑 ${D.value?.file_name||""}`,"confirm-loading":ee.value,"ok-text":"保存","cancel-text":"取消",onOk:Fe,width:"720"},{default:a(()=>[t(ae,{value:M.value,"onUpdate:value":e[9]||(e[9]=o=>M.value=o),rows:18,"auto-size":{minRows:12,maxRows:24},style:{"font-family":"monospace"}},null,8,["value"])]),_:1},8,["open","title","confirm-loading"]),t(Q,{open:B.value,"onUpdate:open":e[15]||(e[15]=o=>B.value=o),title:"新建项目","confirm-loading":G.value,"ok-text":"创建","cancel-text":"取消",onOk:ge},{default:a(()=>[t(le,{layout:"vertical"},{default:a(()=>[t(z,{label:"项目名称",required:""},{default:a(()=>[t(K,{value:f.value.name,"onUpdate:value":e[11]||(e[11]=o=>f.value.name=o),placeholder:"例如:旅行计划-上海"},null,8,["value"])]),_:1}),t(z,{label:"描述"},{default:a(()=>[t(ae,{value:f.value.description,"onUpdate:value":e[12]||(e[12]=o=>f.value.description=o),rows:2},null,8,["value"])]),_:1}),t(z,{label:"类型"},{default:a(()=>[t(he,{value:f.value.type,"onUpdate:value":e[13]||(e[13]=o=>f.value.type=o)},{default:a(()=>[t(y,{value:"document"},{default:a(()=>[...e[32]||(e[32]=[n("文档 (document)",-1)])]),_:1}),t(y,{value:"data"},{default:a(()=>[...e[33]||(e[33]=[n("数据 (data)",-1)])]),_:1}),t(y,{value:"web"},{default:a(()=>[...e[34]||(e[34]=[n("Web",-1)])]),_:1}),t(y,{value:"app"},{default:a(()=>[...e[35]||(e[35]=[n("应用 (app)",-1)])]),_:1}),t(y,{value:"presentation"},{default:a(()=>[...e[36]||(e[36]=[n("演示文稿",-1)])]),_:1}),t(y,{value:"spreadsheet"},{default:a(()=>[...e[37]||(e[37]=[n("表格",-1)])]),_:1}),t(y,{value:"design"},{default:a(()=>[...e[38]||(e[38]=[n("设计",-1)])]),_:1}),t(y,{value:"code"},{default:a(()=>[...e[39]||(e[39]=[n("代码",-1)])]),_:1}),t(y,{value:"workflow"},{default:a(()=>[...e[40]||(e[40]=[n("工作流",-1)])]),_:1}),t(y,{value:"knowledge"},{default:a(()=>[...e[41]||(e[41]=[n("知识库",-1)])]),_:1})]),_:1},8,["value"])]),_:1}),t(z,{label:"根路径 (可选)"},{default:a(()=>[t(K,{value:f.value.rootPath,"onUpdate:value":e[14]||(e[14]=o=>f.value.rootPath=o),placeholder:"留空则仅元数据"},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"])])}}},mt=qe(dt,[["__scopeId","data-v-e27c9ce1"]]);export{mt as default};
@@ -1 +1 @@
1
- import{E as Z,r as h,o as J,M as T,R as r,c as a,N as l,u as f,Q as w,S as z,F as X,Y as ee,K as c,a as te,L as m,O as y,P as K,Z as oe}from"./vendor-BXcBOG8b.js";import{u as M,_ as ae,d as b}from"./index-Cs66y4oC.js";import{a as se,b as le,c as re}from"./parsers-YNLm7sQ0.js";import{R as E}from"./icons-DlxlFL4g.js";const ne=Z("providers",()=>{const x=h(!1),n=h(null),d=h([]),U=h([]),p=h(null);async function C(){const v=M();x.value=!0;try{const{output:_}=await v.execute("llm providers",15e3);d.value=se(_);const g=d.value.find(P=>P.active);g&&(p.value=g.name);const{output:k}=await v.execute("llm models",15e3);U.value=le(k)}catch(_){console.error("Failed to load providers:",_)}finally{x.value=!1}}async function t(v){await M().execute(`llm switch ${v}`,1e4),d.value.forEach(g=>g.active=g.name===v),p.value=v}async function u(v){const _=M();n.value=v;try{const{output:g,exitCode:k}=await _.execute("llm test",3e4),P=d.value.find(L=>L.name===v);return P&&(P.status=k===0?"ok":"error"),k===0}catch{const g=d.value.find(k=>k.name===v);return g&&(g.status="error"),!1}finally{n.value=null}}return{loading:x,testing:n,providers:d,localModels:U,activeProvider:p,loadProviders:C,switchProvider:t,testProvider:u}});async function ie(x,n){if(!x||typeof x.sendRaw!="function")throw new Error("WebSocket configuration API is unavailable");if(typeof n!="string"||n.length===0)throw new Error("API Key cannot be empty");const d=await x.sendRaw({type:"config-set-secret",key:"llm.apiKey",value:n},15e3);if(d?.success!==!0)throw new Error(d?.message||"API Key save failed");return d}const de={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},ue={key:1,style:{"text-align":"center",padding:"60px"}},ce={key:2},pe={class:"providers-grid"},me={style:{display:"flex","align-items":"center",gap:"12px","margin-bottom":"12px"}},ve={style:{"font-size":"24px"}},fe={style:{flex:"1"}},ge={style:{color:"#e0e0e0","font-weight":"500"}},ye={style:{color:"var(--text-secondary)","font-size":"11px","font-family":"monospace"}},be={style:{display:"flex",gap:"8px","justify-content":"flex-end"}},xe={key:0,style:{"margin-top":"24px"}},_e={style:{color:"#ccc","font-family":"monospace","font-size":"13px"}},ke={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"16px"}},we={class:"config-grid"},he={style:{display:"flex","align-items":"center",gap:"12px"}},Ue={style:{display:"flex",gap:"12px","justify-content":"flex-end","margin-top":"16px"}},Pe={__name:"Providers",setup(x){const n=ne(),d=M(),U=h(!1),p=h(!1),C=h(!1),t=te({provider:void 0,model:"",apiKey:"",baseUrl:"",temperature:.7,maxTokens:4096});let u={};const v=["ollama","openai","anthropic","volcengine","deepseek","gemini","groq","mistral","custom","zhipu"],_={ollama:"Ollama(本地)",openai:"OpenAI",anthropic:"Anthropic",volcengine:"火山引擎(豆包)",deepseek:"DeepSeek",gemini:"Google Gemini",groq:"Groq",mistral:"Mistral",custom:"Custom(自定义)",zhipu:"智谱 AI"},g=v.map(s=>({value:s,label:_[s]||s}));async function k(s){try{await n.switchProvider(s),b.success(`已切换到 ${s}`)}catch(e){b.error(`切换失败: ${e.message}`)}}async function P(s){await n.testProvider(s)?b.success(`${s} 连接正常`):b.warning(`${s} 连接失败,请检查配置`)}async function L(){U.value=!0;try{const{output:s}=await d.execute("config list",15e3),e=re(s);e.provider&&(t.provider=e.provider),e.model&&(t.model=e.model),e.apiKey&&(t.apiKey=e.apiKey),e.baseUrl&&(t.baseUrl=e.baseUrl),e.temperature!==void 0&&(t.temperature=e.temperature),e.maxTokens!==void 0&&(t.maxTokens=e.maxTokens),u={provider:e.provider??"",model:e.model??"",apiKey:e.apiKey??"",baseUrl:e.baseUrl??"",temperature:e.temperature??t.temperature,maxTokens:e.maxTokens??t.maxTokens},b.success("配置已加载")}catch(s){b.error(`加载配置失败: ${s.message}`)}finally{U.value=!1}}async function B(){p.value=!0;const s=[],e=[];try{if(t.provider&&t.provider!==u.provider)try{await d.execute(`config set llm.provider ${t.provider}`,1e4),e.push("provider")}catch(i){s.push(`provider: ${i.message}`)}if(t.model&&t.model!==u.model)try{await d.execute(`config set llm.model ${t.model}`,1e4),e.push("model")}catch(i){s.push(`model: ${i.message}`)}if(t.apiKey&&t.apiKey!==u.apiKey)try{await ie(d,t.apiKey),e.push("apiKey")}catch(i){s.push(`apiKey: ${i.message}`)}if(t.baseUrl!==void 0&&t.baseUrl!==u.baseUrl)try{await d.execute(`config set llm.baseUrl ${t.baseUrl}`,1e4),e.push("baseUrl")}catch(i){s.push(`baseUrl: ${i.message}`)}if(t.temperature!==u.temperature)try{await d.execute(`config set llm.temperature ${t.temperature}`,1e4),e.push("temperature")}catch(i){s.push(`temperature: ${i.message}`)}if(t.maxTokens!==u.maxTokens)try{await d.execute(`config set llm.maxTokens ${t.maxTokens}`,1e4),e.push("maxTokens")}catch(i){s.push(`maxTokens: ${i.message}`)}s.length>0?b.warning(`部分配置保存失败: ${s.join("; ")}`):e.length>0?(b.success(`已保存 ${e.length} 项配置`),u={...t},(e.includes("apiKey")||e.includes("provider")||e.includes("baseUrl")||e.includes("model"))&&(C.value=!0),e.includes("provider")&&n.loadProviders()):b.info("没有检测到配置变更")}catch(i){b.error(`保存配置失败: ${i.message}`)}finally{p.value=!1}}function F(){t.provider=u.provider||void 0,t.model=u.model||"",t.apiKey=u.apiKey||"",t.baseUrl=u.baseUrl||"",t.temperature=u.temperature??.7,t.maxTokens=u.maxTokens??4096}return J(()=>{n.loadProviders(),L()}),(s,e)=>{const i=c("a-button"),I=c("a-alert"),N=c("a-spin"),A=c("a-tag"),R=c("a-badge"),S=c("a-card"),V=c("a-list-item"),q=c("a-list"),G=c("a-divider"),D=c("a-select"),$=c("a-form-item"),O=c("a-input"),W=c("a-input-password"),H=c("a-slider"),j=c("a-input-number"),Q=c("a-form");return m(),T("div",null,[r("div",de,[e[10]||(e[10]=r("div",null,[r("h2",{class:"page-title"},"LLM 配置"),r("p",{class:"page-sub"},"管理 AI 服务提供商")],-1)),a(i,{type:"primary",ghost:"",loading:f(n).loading,onClick:e[0]||(e[0]=o=>f(n).loadProviders())},{icon:l(()=>[a(f(E))]),default:l(()=>[e[9]||(e[9]=y(" 刷新 ",-1))]),_:1},8,["loading"])]),f(n).activeProvider?(m(),w(I,{key:0,type:"success",style:{"margin-bottom":"20px",background:"rgba(41,162,112,.08)","border-color":"rgba(41,162,112,.3)"},"show-icon":""},{message:l(()=>[r("span",null,[e[11]||(e[11]=y("当前激活:",-1)),r("strong",null,K(f(n).activeProvider),1)])]),_:1})):z("",!0),f(n).loading?(m(),T("div",ue,[a(N,{size:"large"}),e[12]||(e[12]=r("div",{style:{color:"var(--text-muted)","margin-top":"12px"}},"加载 LLM 信息中...",-1))])):(m(),T("div",ce,[r("div",pe,[(m(!0),T(X,null,ee(f(n).providers,o=>(m(),w(S,{key:o.name,class:oe(["provider-card",{active:o.active}]),style:{background:"var(--bg-card)"},size:"small"},{default:l(()=>[r("div",me,[r("span",ve,K(o.icon),1),r("div",fe,[r("div",ge,K(o.label),1),r("div",ye,K(o.name),1)]),r("div",null,[o.active?(m(),w(A,{key:0,color:"green"},{default:l(()=>[...e[13]||(e[13]=[y("活跃",-1)])]),_:1})):o.status==="ok"?(m(),w(R,{key:1,status:"success",text:""})):o.status==="error"?(m(),w(R,{key:2,status:"error",text:""})):z("",!0)])]),r("div",be,[a(i,{size:"small",style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"},loading:f(n).testing===o.name,onClick:Y=>P(o.name)},{default:l(()=>[...e[14]||(e[14]=[y(" 测试 ",-1)])]),_:1},8,["loading","onClick"]),o.active?(m(),w(A,{key:1,color:"green",style:{margin:"0","line-height":"24px"}},{default:l(()=>[...e[16]||(e[16]=[y("当前",-1)])]),_:1})):(m(),w(i,{key:0,size:"small",type:"primary",ghost:"",onClick:Y=>k(o.name)},{default:l(()=>[...e[15]||(e[15]=[y(" 切换 ",-1)])]),_:1},8,["onClick"]))])]),_:2},1032,["class"]))),128))]),f(n).localModels.length?(m(),T("div",xe,[e[17]||(e[17]=r("h3",{style:{color:"#ccc","font-size":"15px","margin-bottom":"12px"}}," 本地模型(Ollama) ",-1)),a(q,{"data-source":f(n).localModels,size:"small",style:{background:"var(--bg-card)","border-radius":"8px",border:"1px solid var(--border-color)"}},{renderItem:l(({item:o})=>[a(V,{style:{padding:"10px 16px","border-color":"#252525"}},{actions:l(()=>[a(A,{color:"cyan",style:{"font-size":"10px"}},{default:l(()=>[y(K(o.size||"local"),1)]),_:2},1024)]),default:l(()=>[r("span",_e,K(o.name),1)]),_:2},1024)]),_:1},8,["data-source"])])):z("",!0),a(G,{style:{"border-color":"var(--border-color)",margin:"32px 0 24px"}}),C.value?(m(),w(I,{key:1,type:"warning","show-icon":"",closable:"",style:{"margin-bottom":"16px"},message:"配置已保存,但当前聊天会话仍在用旧 key",description:"桌面端的 LLM 会话只在新建会话时重读配置。请新建一个 Chat,或重启应用,新 key/Provider 才会生效。",onClose:e[1]||(e[1]=o=>C.value=!1)})):z("",!0),r("div",ke,[e[19]||(e[19]=r("h3",{class:"section-title"},"LLM 参数设置",-1)),a(i,{size:"small",loading:U.value,onClick:L,style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:l(()=>[a(f(E))]),default:l(()=>[e[18]||(e[18]=y(" 加载配置 ",-1))]),_:1},8,["loading"])]),a(S,{class:"config-card",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:l(()=>[a(Q,{model:t,layout:"vertical",class:"config-form"},{default:l(()=>[r("div",we,[a($,{label:"Provider(提供商)"},{default:l(()=>[a(D,{value:t.provider,"onUpdate:value":e[2]||(e[2]=o=>t.provider=o),placeholder:"选择 LLM 提供商",options:f(g),style:{width:"100%"},disabled:p.value},null,8,["value","options","disabled"])]),_:1}),a($,{label:"Model(模型名称)"},{default:l(()=>[a(O,{value:t.model,"onUpdate:value":e[3]||(e[3]=o=>t.model=o),placeholder:"例如 doubao-seed-1-6-251015","allow-clear":"",disabled:p.value},null,8,["value","disabled"])]),_:1}),a($,{label:"API Key"},{default:l(()=>[a(W,{value:t.apiKey,"onUpdate:value":e[4]||(e[4]=o=>t.apiKey=o),placeholder:"输入 API Key",disabled:p.value},null,8,["value","disabled"])]),_:1}),a($,{label:"Base URL"},{default:l(()=>[a(O,{value:t.baseUrl,"onUpdate:value":e[5]||(e[5]=o=>t.baseUrl=o),placeholder:"例如 https://ark.cn-beijing.volces.com/api/v3","allow-clear":"",disabled:p.value},null,8,["value","disabled"])]),_:1}),a($,{label:"Temperature(温度)"},{default:l(()=>[r("div",he,[a(H,{value:t.temperature,"onUpdate:value":e[6]||(e[6]=o=>t.temperature=o),min:0,max:2,step:.1,style:{flex:"1"},disabled:p.value},null,8,["value","disabled"]),a(j,{value:t.temperature,"onUpdate:value":e[7]||(e[7]=o=>t.temperature=o),min:0,max:2,step:.1,precision:1,style:{width:"80px"},disabled:p.value},null,8,["value","disabled"])])]),_:1}),a($,{label:"Max Tokens(最大输出长度)"},{default:l(()=>[a(j,{value:t.maxTokens,"onUpdate:value":e[8]||(e[8]=o=>t.maxTokens=o),min:256,max:128e3,step:256,style:{width:"100%"},placeholder:"4096",disabled:p.value},null,8,["value","disabled"])]),_:1})]),r("div",Ue,[a(i,{onClick:F,disabled:p.value,style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{default:l(()=>[...e[20]||(e[20]=[y(" 重置 ",-1)])]),_:1},8,["disabled"]),a(i,{type:"primary",loading:p.value,onClick:B},{default:l(()=>[...e[21]||(e[21]=[y(" 保存配置 ",-1)])]),_:1},8,["loading"])])]),_:1},8,["model"])]),_:1})]))])}}},Le=ae(Pe,[["__scopeId","data-v-92b4cdf3"]]);export{Le as default};
1
+ import{E as Z,r as h,o as J,M as T,R as r,c as a,N as l,u as f,Q as w,S as z,F as X,Y as ee,K as c,a as te,L as m,O as y,P as K,Z as oe}from"./vendor-BXcBOG8b.js";import{u as M,_ as ae,d as b}from"./index-CzoKAiyT.js";import{a as se,b as le,c as re}from"./parsers-YNLm7sQ0.js";import{R as E}from"./icons-DlxlFL4g.js";const ne=Z("providers",()=>{const x=h(!1),n=h(null),d=h([]),U=h([]),p=h(null);async function C(){const v=M();x.value=!0;try{const{output:_}=await v.execute("llm providers",15e3);d.value=se(_);const g=d.value.find(P=>P.active);g&&(p.value=g.name);const{output:k}=await v.execute("llm models",15e3);U.value=le(k)}catch(_){console.error("Failed to load providers:",_)}finally{x.value=!1}}async function t(v){await M().execute(`llm switch ${v}`,1e4),d.value.forEach(g=>g.active=g.name===v),p.value=v}async function u(v){const _=M();n.value=v;try{const{output:g,exitCode:k}=await _.execute("llm test",3e4),P=d.value.find(L=>L.name===v);return P&&(P.status=k===0?"ok":"error"),k===0}catch{const g=d.value.find(k=>k.name===v);return g&&(g.status="error"),!1}finally{n.value=null}}return{loading:x,testing:n,providers:d,localModels:U,activeProvider:p,loadProviders:C,switchProvider:t,testProvider:u}});async function ie(x,n){if(!x||typeof x.sendRaw!="function")throw new Error("WebSocket configuration API is unavailable");if(typeof n!="string"||n.length===0)throw new Error("API Key cannot be empty");const d=await x.sendRaw({type:"config-set-secret",key:"llm.apiKey",value:n},15e3);if(d?.success!==!0)throw new Error(d?.message||"API Key save failed");return d}const de={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},ue={key:1,style:{"text-align":"center",padding:"60px"}},ce={key:2},pe={class:"providers-grid"},me={style:{display:"flex","align-items":"center",gap:"12px","margin-bottom":"12px"}},ve={style:{"font-size":"24px"}},fe={style:{flex:"1"}},ge={style:{color:"#e0e0e0","font-weight":"500"}},ye={style:{color:"var(--text-secondary)","font-size":"11px","font-family":"monospace"}},be={style:{display:"flex",gap:"8px","justify-content":"flex-end"}},xe={key:0,style:{"margin-top":"24px"}},_e={style:{color:"#ccc","font-family":"monospace","font-size":"13px"}},ke={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"16px"}},we={class:"config-grid"},he={style:{display:"flex","align-items":"center",gap:"12px"}},Ue={style:{display:"flex",gap:"12px","justify-content":"flex-end","margin-top":"16px"}},Pe={__name:"Providers",setup(x){const n=ne(),d=M(),U=h(!1),p=h(!1),C=h(!1),t=te({provider:void 0,model:"",apiKey:"",baseUrl:"",temperature:.7,maxTokens:4096});let u={};const v=["ollama","openai","anthropic","volcengine","deepseek","gemini","groq","mistral","custom","zhipu"],_={ollama:"Ollama(本地)",openai:"OpenAI",anthropic:"Anthropic",volcengine:"火山引擎(豆包)",deepseek:"DeepSeek",gemini:"Google Gemini",groq:"Groq",mistral:"Mistral",custom:"Custom(自定义)",zhipu:"智谱 AI"},g=v.map(s=>({value:s,label:_[s]||s}));async function k(s){try{await n.switchProvider(s),b.success(`已切换到 ${s}`)}catch(e){b.error(`切换失败: ${e.message}`)}}async function P(s){await n.testProvider(s)?b.success(`${s} 连接正常`):b.warning(`${s} 连接失败,请检查配置`)}async function L(){U.value=!0;try{const{output:s}=await d.execute("config list",15e3),e=re(s);e.provider&&(t.provider=e.provider),e.model&&(t.model=e.model),e.apiKey&&(t.apiKey=e.apiKey),e.baseUrl&&(t.baseUrl=e.baseUrl),e.temperature!==void 0&&(t.temperature=e.temperature),e.maxTokens!==void 0&&(t.maxTokens=e.maxTokens),u={provider:e.provider??"",model:e.model??"",apiKey:e.apiKey??"",baseUrl:e.baseUrl??"",temperature:e.temperature??t.temperature,maxTokens:e.maxTokens??t.maxTokens},b.success("配置已加载")}catch(s){b.error(`加载配置失败: ${s.message}`)}finally{U.value=!1}}async function B(){p.value=!0;const s=[],e=[];try{if(t.provider&&t.provider!==u.provider)try{await d.execute(`config set llm.provider ${t.provider}`,1e4),e.push("provider")}catch(i){s.push(`provider: ${i.message}`)}if(t.model&&t.model!==u.model)try{await d.execute(`config set llm.model ${t.model}`,1e4),e.push("model")}catch(i){s.push(`model: ${i.message}`)}if(t.apiKey&&t.apiKey!==u.apiKey)try{await ie(d,t.apiKey),e.push("apiKey")}catch(i){s.push(`apiKey: ${i.message}`)}if(t.baseUrl!==void 0&&t.baseUrl!==u.baseUrl)try{await d.execute(`config set llm.baseUrl ${t.baseUrl}`,1e4),e.push("baseUrl")}catch(i){s.push(`baseUrl: ${i.message}`)}if(t.temperature!==u.temperature)try{await d.execute(`config set llm.temperature ${t.temperature}`,1e4),e.push("temperature")}catch(i){s.push(`temperature: ${i.message}`)}if(t.maxTokens!==u.maxTokens)try{await d.execute(`config set llm.maxTokens ${t.maxTokens}`,1e4),e.push("maxTokens")}catch(i){s.push(`maxTokens: ${i.message}`)}s.length>0?b.warning(`部分配置保存失败: ${s.join("; ")}`):e.length>0?(b.success(`已保存 ${e.length} 项配置`),u={...t},(e.includes("apiKey")||e.includes("provider")||e.includes("baseUrl")||e.includes("model"))&&(C.value=!0),e.includes("provider")&&n.loadProviders()):b.info("没有检测到配置变更")}catch(i){b.error(`保存配置失败: ${i.message}`)}finally{p.value=!1}}function F(){t.provider=u.provider||void 0,t.model=u.model||"",t.apiKey=u.apiKey||"",t.baseUrl=u.baseUrl||"",t.temperature=u.temperature??.7,t.maxTokens=u.maxTokens??4096}return J(()=>{n.loadProviders(),L()}),(s,e)=>{const i=c("a-button"),I=c("a-alert"),N=c("a-spin"),A=c("a-tag"),R=c("a-badge"),S=c("a-card"),V=c("a-list-item"),q=c("a-list"),G=c("a-divider"),D=c("a-select"),$=c("a-form-item"),O=c("a-input"),W=c("a-input-password"),H=c("a-slider"),j=c("a-input-number"),Q=c("a-form");return m(),T("div",null,[r("div",de,[e[10]||(e[10]=r("div",null,[r("h2",{class:"page-title"},"LLM 配置"),r("p",{class:"page-sub"},"管理 AI 服务提供商")],-1)),a(i,{type:"primary",ghost:"",loading:f(n).loading,onClick:e[0]||(e[0]=o=>f(n).loadProviders())},{icon:l(()=>[a(f(E))]),default:l(()=>[e[9]||(e[9]=y(" 刷新 ",-1))]),_:1},8,["loading"])]),f(n).activeProvider?(m(),w(I,{key:0,type:"success",style:{"margin-bottom":"20px",background:"rgba(41,162,112,.08)","border-color":"rgba(41,162,112,.3)"},"show-icon":""},{message:l(()=>[r("span",null,[e[11]||(e[11]=y("当前激活:",-1)),r("strong",null,K(f(n).activeProvider),1)])]),_:1})):z("",!0),f(n).loading?(m(),T("div",ue,[a(N,{size:"large"}),e[12]||(e[12]=r("div",{style:{color:"var(--text-muted)","margin-top":"12px"}},"加载 LLM 信息中...",-1))])):(m(),T("div",ce,[r("div",pe,[(m(!0),T(X,null,ee(f(n).providers,o=>(m(),w(S,{key:o.name,class:oe(["provider-card",{active:o.active}]),style:{background:"var(--bg-card)"},size:"small"},{default:l(()=>[r("div",me,[r("span",ve,K(o.icon),1),r("div",fe,[r("div",ge,K(o.label),1),r("div",ye,K(o.name),1)]),r("div",null,[o.active?(m(),w(A,{key:0,color:"green"},{default:l(()=>[...e[13]||(e[13]=[y("活跃",-1)])]),_:1})):o.status==="ok"?(m(),w(R,{key:1,status:"success",text:""})):o.status==="error"?(m(),w(R,{key:2,status:"error",text:""})):z("",!0)])]),r("div",be,[a(i,{size:"small",style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"},loading:f(n).testing===o.name,onClick:Y=>P(o.name)},{default:l(()=>[...e[14]||(e[14]=[y(" 测试 ",-1)])]),_:1},8,["loading","onClick"]),o.active?(m(),w(A,{key:1,color:"green",style:{margin:"0","line-height":"24px"}},{default:l(()=>[...e[16]||(e[16]=[y("当前",-1)])]),_:1})):(m(),w(i,{key:0,size:"small",type:"primary",ghost:"",onClick:Y=>k(o.name)},{default:l(()=>[...e[15]||(e[15]=[y(" 切换 ",-1)])]),_:1},8,["onClick"]))])]),_:2},1032,["class"]))),128))]),f(n).localModels.length?(m(),T("div",xe,[e[17]||(e[17]=r("h3",{style:{color:"#ccc","font-size":"15px","margin-bottom":"12px"}}," 本地模型(Ollama) ",-1)),a(q,{"data-source":f(n).localModels,size:"small",style:{background:"var(--bg-card)","border-radius":"8px",border:"1px solid var(--border-color)"}},{renderItem:l(({item:o})=>[a(V,{style:{padding:"10px 16px","border-color":"#252525"}},{actions:l(()=>[a(A,{color:"cyan",style:{"font-size":"10px"}},{default:l(()=>[y(K(o.size||"local"),1)]),_:2},1024)]),default:l(()=>[r("span",_e,K(o.name),1)]),_:2},1024)]),_:1},8,["data-source"])])):z("",!0),a(G,{style:{"border-color":"var(--border-color)",margin:"32px 0 24px"}}),C.value?(m(),w(I,{key:1,type:"warning","show-icon":"",closable:"",style:{"margin-bottom":"16px"},message:"配置已保存,但当前聊天会话仍在用旧 key",description:"桌面端的 LLM 会话只在新建会话时重读配置。请新建一个 Chat,或重启应用,新 key/Provider 才会生效。",onClose:e[1]||(e[1]=o=>C.value=!1)})):z("",!0),r("div",ke,[e[19]||(e[19]=r("h3",{class:"section-title"},"LLM 参数设置",-1)),a(i,{size:"small",loading:U.value,onClick:L,style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:l(()=>[a(f(E))]),default:l(()=>[e[18]||(e[18]=y(" 加载配置 ",-1))]),_:1},8,["loading"])]),a(S,{class:"config-card",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:l(()=>[a(Q,{model:t,layout:"vertical",class:"config-form"},{default:l(()=>[r("div",we,[a($,{label:"Provider(提供商)"},{default:l(()=>[a(D,{value:t.provider,"onUpdate:value":e[2]||(e[2]=o=>t.provider=o),placeholder:"选择 LLM 提供商",options:f(g),style:{width:"100%"},disabled:p.value},null,8,["value","options","disabled"])]),_:1}),a($,{label:"Model(模型名称)"},{default:l(()=>[a(O,{value:t.model,"onUpdate:value":e[3]||(e[3]=o=>t.model=o),placeholder:"例如 doubao-seed-1-6-251015","allow-clear":"",disabled:p.value},null,8,["value","disabled"])]),_:1}),a($,{label:"API Key"},{default:l(()=>[a(W,{value:t.apiKey,"onUpdate:value":e[4]||(e[4]=o=>t.apiKey=o),placeholder:"输入 API Key",disabled:p.value},null,8,["value","disabled"])]),_:1}),a($,{label:"Base URL"},{default:l(()=>[a(O,{value:t.baseUrl,"onUpdate:value":e[5]||(e[5]=o=>t.baseUrl=o),placeholder:"例如 https://ark.cn-beijing.volces.com/api/v3","allow-clear":"",disabled:p.value},null,8,["value","disabled"])]),_:1}),a($,{label:"Temperature(温度)"},{default:l(()=>[r("div",he,[a(H,{value:t.temperature,"onUpdate:value":e[6]||(e[6]=o=>t.temperature=o),min:0,max:2,step:.1,style:{flex:"1"},disabled:p.value},null,8,["value","disabled"]),a(j,{value:t.temperature,"onUpdate:value":e[7]||(e[7]=o=>t.temperature=o),min:0,max:2,step:.1,precision:1,style:{width:"80px"},disabled:p.value},null,8,["value","disabled"])])]),_:1}),a($,{label:"Max Tokens(最大输出长度)"},{default:l(()=>[a(j,{value:t.maxTokens,"onUpdate:value":e[8]||(e[8]=o=>t.maxTokens=o),min:256,max:128e3,step:256,style:{width:"100%"},placeholder:"4096",disabled:p.value},null,8,["value","disabled"])]),_:1})]),r("div",Ue,[a(i,{onClick:F,disabled:p.value,style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{default:l(()=>[...e[20]||(e[20]=[y(" 重置 ",-1)])]),_:1},8,["disabled"]),a(i,{type:"primary",loading:p.value,onClick:B},{default:l(()=>[...e[21]||(e[21]=[y(" 保存配置 ",-1)])]),_:1},8,["loading"])])]),_:1},8,["model"])]),_:1})]))])}}},Le=ae(Pe,[["__scopeId","data-v-92b4cdf3"]]);export{Le as default};