chainlesschain 0.162.2 → 0.162.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (151) hide show
  1. package/package.json +2 -1
  2. package/src/assets/web-panel/.build-hash +1 -1
  3. package/src/assets/web-panel/assets/{AIOps-D69_XwQf.js → AIOps-BXQ92dvI.js} +1 -1
  4. package/src/assets/web-panel/assets/{ActionButton-COVVHNnK.js → ActionButton-DjmolmAS.js} +1 -1
  5. package/src/assets/web-panel/assets/{Analytics-m0Cuoraq.js → Analytics-LUUOS78B.js} +2 -2
  6. package/src/assets/web-panel/assets/{AppLayout-BEZq_CS0.css → AppLayout-BLCe1k8m.css} +1 -1
  7. package/src/assets/web-panel/assets/AppLayout-DeAq-Waa.js +3 -0
  8. package/src/assets/web-panel/assets/{Audit-DB5RNs9K.js → Audit-De_86BpN.js} +1 -1
  9. package/src/assets/web-panel/assets/{Backup-DD9SgVtq.js → Backup-CAqIbrb5.js} +1 -1
  10. package/src/assets/web-panel/assets/{BaseInput-CS2Y4V0O.js → BaseInput-CwTVDavS.js} +1 -1
  11. package/src/assets/web-panel/assets/{Chat-Cvw48zqw.js → Chat-BnihAKiI.js} +1 -1
  12. package/src/assets/web-panel/assets/{Checkbox-DElRJpAL.js → Checkbox-BDrCuC9m.js} +1 -1
  13. package/src/assets/web-panel/assets/{Codegen-CHdMYssy.js → Codegen-DWqN0jpL.js} +1 -1
  14. package/src/assets/web-panel/assets/{Col-BDk4BXjN.js → Col-B7rIr4g3.js} +1 -1
  15. package/src/assets/web-panel/assets/{Community-ByDrN94M.js → Community-YYEO8SY3.js} +1 -1
  16. package/src/assets/web-panel/assets/{Compact-D4E0roed.js → Compact-DZHWn-_j.js} +1 -1
  17. package/src/assets/web-panel/assets/Compliance-CCYzk_rt.js +1 -0
  18. package/src/assets/web-panel/assets/{Cowork-CMn6mzHv.js → Cowork-D9G6khOx.js} +3 -3
  19. package/src/assets/web-panel/assets/{Cron-CARdrrMM.js → Cron-IbwddEeZ.js} +2 -2
  20. package/src/assets/web-panel/assets/{Crosschain-2pnRIGVn.js → Crosschain-Bct133LN.js} +1 -1
  21. package/src/assets/web-panel/assets/{DID-BRo55XlY.js → DID-32J0mXoS.js} +2 -2
  22. package/src/assets/web-panel/assets/{Dashboard-DfNjjw7V.js → Dashboard-TaPAK2WV.js} +2 -2
  23. package/src/assets/web-panel/assets/{Dropdown-BDTTlG70.js → Dropdown-Df4hUeIm.js} +1 -1
  24. package/src/assets/web-panel/assets/{Federation-CKkeJ169.js → Federation-C0xfKoZr.js} +1 -1
  25. package/src/assets/web-panel/assets/{FormItemContext-C6DJ0oHT.js → FormItemContext-CoacTa1H.js} +1 -1
  26. package/src/assets/web-panel/assets/{Git-DDQd8pDl.js → Git-DZZF1lrY.js} +2 -2
  27. package/src/assets/web-panel/assets/{Governance-DZTuAASB.js → Governance-Bo-P_BP3.js} +1 -1
  28. package/src/assets/web-panel/assets/{Inference-CIbj0XmL.js → Inference-agx6qPl9.js} +1 -1
  29. package/src/assets/web-panel/assets/KnowledgeGraph-Dc8YZGiO.js +1 -0
  30. package/src/assets/web-panel/assets/{Logs-BrLBwq1m.js → Logs-njAOFc0W.js} +1 -1
  31. package/src/assets/web-panel/assets/{Marketplace-q9X5VK92.js → Marketplace-Yu-RUTN2.js} +1 -1
  32. package/src/assets/web-panel/assets/{McpTools-DfxuLN57.js → McpTools-BuzdmOwR.js} +1 -1
  33. package/src/assets/web-panel/assets/{Memory-DND9vjBx.js → Memory-DJyWxXM0.js} +2 -2
  34. package/src/assets/web-panel/assets/{MobileBridge-Ba2jSFl0.js → MobileBridge-CIKfLcfn.js} +1 -1
  35. package/src/assets/web-panel/assets/{MobileProjects-CdclN769.js → MobileProjects-B1OZ0_b1.js} +1 -1
  36. package/src/assets/web-panel/assets/{Mtc-BNKpFjlY.js → Mtc-CJHI9qG0.js} +4 -4
  37. package/src/assets/web-panel/assets/{MtcAudit-BlZJm1Tf.js → MtcAudit-cSrqcG3H.js} +1 -1
  38. package/src/assets/web-panel/assets/{Multisig-DcX0uBmT.js → Multisig-DTVo9GFR.js} +2 -2
  39. package/src/assets/web-panel/assets/{NLProgramming-dDIA3V_a.js → NLProgramming-NqfB2jLI.js} +1 -1
  40. package/src/assets/web-panel/assets/{Notes-BDsTuZ5O.js → Notes-MuMFfs67.js} +3 -3
  41. package/src/assets/web-panel/assets/{NotificationSettings-DzGuAAKt.js → NotificationSettings-B5ECNQNW.js} +1 -1
  42. package/src/assets/web-panel/assets/{Organization-DFfncYaU.js → Organization-Dn98sbrZ.js} +4 -4
  43. package/src/assets/web-panel/assets/{Overflow-O5JDtvyx.js → Overflow-Sl5FJV2c.js} +1 -1
  44. package/src/assets/web-panel/assets/{P2P-BTLl5rnf.js → P2P-58-TvQSE.js} +2 -2
  45. package/src/assets/web-panel/assets/{Permissions-M-jmJa1X.js → Permissions-BFtHCNck.js} +4 -4
  46. package/src/assets/web-panel/assets/PersonalDataHub-CVH9NAfL.css +1 -0
  47. package/src/assets/web-panel/assets/PersonalDataHub-Cu--XeWZ.js +1 -0
  48. package/src/assets/web-panel/assets/{Pipeline-DyXoKp_J.js → Pipeline-DWt_M98L.js} +1 -1
  49. package/src/assets/web-panel/assets/{Privacy-Cvv_9eBQ.js → Privacy-BUX3yRZc.js} +1 -1
  50. package/src/assets/web-panel/assets/{ProjectInit-BS2s_sxy.js → ProjectInit-wYWMWfxy.js} +2 -2
  51. package/src/assets/web-panel/assets/{ProjectSettings-CGfEpOL1.js → ProjectSettings-CIRbqu0F.js} +1 -1
  52. package/src/assets/web-panel/assets/{Projects-BkuTxL3o.js → Projects-CDFkiEL3.js} +1 -1
  53. package/src/assets/web-panel/assets/{Providers-CkhZ5eii.js → Providers-CnPu1q45.js} +1 -1
  54. package/src/assets/web-panel/assets/{QuickAsk-CvGT4zj2.js → QuickAsk-mwOI7Tc-.js} +1 -1
  55. package/src/assets/web-panel/assets/{Recommend-C-gDvXw6.js → Recommend-Ct6SM2HV.js} +1 -1
  56. package/src/assets/web-panel/assets/{Reputation-5zAdCzHT.js → Reputation-D7D6rp3d.js} +1 -1
  57. package/src/assets/web-panel/assets/{Row-BsuDvMpO.js → Row-CX03nw4D.js} +1 -1
  58. package/src/assets/web-panel/assets/{RssFeed-2QQb8p5X.js → RssFeed-BRyNIOp0.js} +3 -3
  59. package/src/assets/web-panel/assets/{Search-CFT_6Ljj.js → Search-Dh-jwNaq.js} +1 -1
  60. package/src/assets/web-panel/assets/{Security-BrK_KNJK.js → Security-C53OqK_S.js} +3 -3
  61. package/src/assets/web-panel/assets/Services-nXK7991F.js +2 -0
  62. package/src/assets/web-panel/assets/{Skeleton--WjfL2Ay.js → Skeleton-mVGGUSnx.js} +1 -1
  63. package/src/assets/web-panel/assets/{Skills-1GWFYMGg.js → Skills-AVICQyr7.js} +1 -1
  64. package/src/assets/web-panel/assets/{Sla-508cBkmT.js → Sla-BO-jiswJ.js} +1 -1
  65. package/src/assets/web-panel/assets/{SpeechSettings-DIeNRX6V.js → SpeechSettings-CQ73BtGw.js} +1 -1
  66. package/src/assets/web-panel/assets/{SyncSettings-BQDW6gsX.js → SyncSettings-ozTu_ihm.js} +1 -1
  67. package/src/assets/web-panel/assets/{Tasks-D39SBKyi.js → Tasks-CwTiFnau.js} +1 -1
  68. package/src/assets/web-panel/assets/{Templates-tsObCBe6.js → Templates-PJ-SYUEg.js} +1 -1
  69. package/src/assets/web-panel/assets/{Tenant-Ccpw-S6R.js → Tenant-DeckYbHe.js} +1 -1
  70. package/src/assets/web-panel/assets/Terminal-CIn4gdxj.js +3 -0
  71. package/src/assets/web-panel/assets/Tokens-Bc40cdFh.js +1 -0
  72. package/src/assets/web-panel/assets/{Trigger-D4yonKuU.js → Trigger-BERtmWcc.js} +1 -1
  73. package/src/assets/web-panel/assets/{Trust-DHDcLjma.js → Trust-_ktoDZt-.js} +1 -1
  74. package/src/assets/web-panel/assets/{UkeySign-DBpW0j1p.js → UkeySign-DecT3_Zy.js} +1 -1
  75. package/src/assets/web-panel/assets/{VideoEditing-BPr_46Py.js → VideoEditing-AqPQa7a7.js} +1 -1
  76. package/src/assets/web-panel/assets/{Wallet-4lfplIJV.js → Wallet-CL303fn9.js} +4 -4
  77. package/src/assets/web-panel/assets/{WebAuthn-DI13wkez.js → WebAuthn-Bwy0YO-u.js} +4 -4
  78. package/src/assets/web-panel/assets/{WorkflowEditor-CYbHpkQy.js → WorkflowEditor-Bbewn3S4.js} +1 -1
  79. package/src/assets/web-panel/assets/{chat-BOH4vNJ7.js → chat-CDIxA8Km.js} +1 -1
  80. package/src/assets/web-panel/assets/{colors-qxXJ45GU.js → colors-rQIxLS12.js} +1 -1
  81. package/src/assets/web-panel/assets/{compact-item-Cjb446yk.js → compact-item-1jZiKenx.js} +1 -1
  82. package/src/assets/web-panel/assets/{createContext-CulBut34.js → createContext-B3FjOuaT.js} +1 -1
  83. package/src/assets/web-panel/assets/{hasIn-DCnwRrNq.js → hasIn-dZ195iTN.js} +1 -1
  84. package/src/assets/web-panel/assets/{icons-DY9VpXfa.js → icons-BFHq5fEF.js} +1 -1
  85. package/src/assets/web-panel/assets/{index-C7reeGYU.js → index--NxZmEUk.js} +1 -1
  86. package/src/assets/web-panel/assets/{index-BAy0ks7N.js → index-19d37fVJ.js} +4 -4
  87. package/src/assets/web-panel/assets/{index-CRsnuDGC.js → index-AHCOz9NC.js} +1 -1
  88. package/src/assets/web-panel/assets/{index-CV_vlbaU.js → index-BByVZ5fI.js} +1 -1
  89. package/src/assets/web-panel/assets/{index-CjJUQvIU.js → index-BC6wcYy3.js} +1 -1
  90. package/src/assets/web-panel/assets/{index-Bp4_7Kow.js → index-BDZd1181.js} +1 -1
  91. package/src/assets/web-panel/assets/{index-DG1F9RZd.js → index-BOiuM69x.js} +1 -1
  92. package/src/assets/web-panel/assets/{index-DpzjQM4w.js → index-Bq8fsYQ6.js} +1 -1
  93. package/src/assets/web-panel/assets/{index-DC38ymaH.js → index-Br6-EXdw.js} +1 -1
  94. package/src/assets/web-panel/assets/{index-BA8bUOYK.js → index-BsUXzEb2.js} +1 -1
  95. package/src/assets/web-panel/assets/{index-CW7a8O5w.js → index-BwIwGE8Y.js} +1 -1
  96. package/src/assets/web-panel/assets/{index-D80IlXq1.js → index-Bx15E0JQ.js} +1 -1
  97. package/src/assets/web-panel/assets/{index-BOFep_rA.js → index-BxnEM3za.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-C_029Hie.js → index-C0YzTiiB.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-BKNbteyC.js → index-C3SVypM3.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-D3bXm2aZ.js → index-C3rYUvdl.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-PP5MLidC.js → index-C4jmdcCs.js} +1 -1
  102. package/src/assets/web-panel/assets/index-C5Ifo5EH.js +1 -0
  103. package/src/assets/web-panel/assets/{index-Bb1KdW4J.js → index-C8IGQbfQ.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-BBWR20mC.js → index-CDL_WWYl.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-DQXojJvN.js → index-CDkCJPtr.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-hca2ku7U.js → index-D0DtKH7N.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-DkYY9W4x.js → index-D3QDmYBa.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-oGqObYfs.js → index-DP5rV4eS.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-BCr0xH2Q.js → index-DQXt91YA.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-Cv2hQG7c.js → index-DRIQpe4j.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-C3ImsNgP.js → index-DWJ5GzxU.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-BO-vFfxc.js → index-Dvg5ymRK.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-SHmkRPZ_.js → index-DxwYB7eB.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-Clxp_Rc0.js → index-U5Y4YNZC.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-DNooejFX.js → index-XDvSQBl5.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-cP5FNe0q.js → index-aaHXeryL.js} +1 -1
  117. package/src/assets/web-panel/assets/index-efjrWv6y.js +1 -0
  118. package/src/assets/web-panel/assets/{index-DK5iJriy.js → index-hNSGbn-4.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-6xtj6SRQ.js → index-kg4NgBuP.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-Civlun-X.js → index-lSnZsO_d.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-XMsNvoaz.js → index-sygYO1j4.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-D6-3yvOU.js → index-uL0KmFyf.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-CFw2RtQ_.js → index-xKOyC0Cx.js} +1 -1
  124. package/src/assets/web-panel/assets/{initDefaultProps-Dp93Vlbv.js → initDefaultProps-GbvcoqYL.js} +1 -1
  125. package/src/assets/web-panel/assets/{motion-yBy7l6Td.js → motion-VM5YQ6Mf.js} +1 -1
  126. package/src/assets/web-panel/assets/{move-P6GgC8ZU.js → move-CJvGLYlg.js} +1 -1
  127. package/src/assets/web-panel/assets/{omit-BMF4_2X_.js → omit-3oHJWwWB.js} +1 -1
  128. package/src/assets/web-panel/assets/{pickAttrs-C1bUV-iL.js → pickAttrs-BWBtl13u.js} +1 -1
  129. package/src/assets/web-panel/assets/{placementArrow-CpNGMWxW.js → placementArrow-CVESPqrs.js} +1 -1
  130. package/src/assets/web-panel/assets/{responsiveObserve-Bt3UzGUn.js → responsiveObserve-BOvUPufq.js} +1 -1
  131. package/src/assets/web-panel/assets/{slide-B5t0Lgse.js → slide-W_P685Dw.js} +1 -1
  132. package/src/assets/web-panel/assets/{statusUtils-nHmUS8yg.js → statusUtils-BnIQmxwT.js} +1 -1
  133. package/src/assets/web-panel/assets/{styleChecker-DgazP1mu.js → styleChecker-BMXx5Ie5.js} +1 -1
  134. package/src/assets/web-panel/assets/{useFlexGapSupport-BQ4jJS_s.js → useFlexGapSupport-DSJ4Pl17.js} +1 -1
  135. package/src/assets/web-panel/assets/{useFs-C8aeIQfU.js → useFs-BPbHm7Yn.js} +1 -1
  136. package/src/assets/web-panel/assets/{vnode-DMH0ymoP.js → vnode-HDTJKu2B.js} +1 -1
  137. package/src/assets/web-panel/assets/{zoom-DRmMxFNC.js → zoom-BqKDJys9.js} +1 -1
  138. package/src/assets/web-panel/index.html +2 -2
  139. package/src/commands/ui.js +21 -3
  140. package/src/gateways/ws/message-dispatcher.js +68 -0
  141. package/src/gateways/ws/personal-data-hub-protocol.js +264 -0
  142. package/src/lib/personal-data-hub-wiring.js +425 -0
  143. package/src/runtime/agent-runtime.js +85 -11
  144. package/src/assets/web-panel/assets/AppLayout-BzzvYjpq.js +0 -3
  145. package/src/assets/web-panel/assets/Compliance-DCkF4hfd.js +0 -1
  146. package/src/assets/web-panel/assets/KnowledgeGraph-nTHxy0Fw.js +0 -1
  147. package/src/assets/web-panel/assets/Services-DAmjLm-1.js +0 -2
  148. package/src/assets/web-panel/assets/Terminal-CgFg09NA.js +0 -3
  149. package/src/assets/web-panel/assets/Tokens-BBWOiqLq.js +0 -1
  150. package/src/assets/web-panel/assets/index-B0YFQoW_.js +0 -1
  151. package/src/assets/web-panel/assets/index-BX7snsTz.js +0 -1
@@ -1 +1 @@
1
- import{_ as Qe,u as We,b as Xe,d as z}from"./index-BAy0ks7N.js";import{s as Se}from"./community-parser-CO25nZFt.js";import{R as Ze,aq as et,y as me,ao as tt,a4 as lt,l as at,X as ve,U as V,aP as nt,f as it,L as st,d as ot,x as rt}from"./icons-DY9VpXfa.js";import{o as pt,M as b,R as S,P as p,c as i,N as a,Q as y,S as m,K as v,r as $,L as r,O as f,u as c,F as C,Y as L,Z as ut,f as te,a as ct}from"./vendor-M5lGV-wr.js";function Y(t){const o=Se(t);if(!o)return null;try{return JSON.parse(o)}catch{}const n=o.match(/\{[\s\S]*\}|\[[\s\S]*\]/);if(!n)return null;try{return JSON.parse(n[0])}catch{return null}}const Ae=Object.freeze(["pending","running","paused","completed","failed","cancelled"]),dt=Object.freeze(["pending","running","gate-waiting","completed","failed","skipped"]),be=Object.freeze(["requirement","architecture","code-generation","testing","code-review","deploy","monitoring"]),le=Object.freeze(["feature","bugfix","refactor","security-audit"]),ft=Object.freeze(["git-pr","docker","npm-publish","local","staging","custom"]),_e=Object.freeze(["code-review","deploy"]);function N(t,o=0){return typeof t=="number"&&Number.isFinite(t)?t:o}function ke(t){if(!t)return{noDb:!1,error:""};const o=Se(t),n=/No database/i.test(o);return{noDb:n,error:n?"No database":""}}function gt(t,o=0){if(!t||typeof t!="object")return null;const n=t.id||"";return n?{key:n,id:n,pipelineId:String(t.pipelineId||""),stageIndex:N(t.stageIndex,o),name:String(t.name||""),status:String(t.status||"pending").toLowerCase(),gateRequired:!!t.gateRequired,gateApproved:!!t.gateApproved,gateRejectReason:t.gateRejectReason||"",input:t.input??null,output:t.output??null,errorMessage:t.errorMessage||"",startedAt:t.startedAt??null,completedAt:t.completedAt??null,_idx:o}:null}function yt(t,o=0){if(!t||typeof t!="object")return null;const n=t.id||"";if(!n)return null;const g=Array.isArray(t.stages)?t.stages.map(gt).filter(Boolean):[];return{key:n,id:n,name:t.name||"",template:String(t.template||""),config:t.config??null,status:String(t.status||"pending").toLowerCase(),currentStage:N(t.currentStage,0),result:t.result??null,errorMessage:t.errorMessage||"",createdAt:t.createdAt??null,updatedAt:t.updatedAt??null,startedAt:t.startedAt??null,completedAt:t.completedAt??null,stages:g,_idx:o}}function mt(t){const o=Y(t);return Array.isArray(o)?o.map(yt).filter(Boolean):[]}function vt(t,o=0){if(!t||typeof t!="object")return null;const n=t.id||"";return n?{key:n,id:n,pipelineId:String(t.pipelineId||""),strategy:String(t.strategy||"").toLowerCase(),config:t.config??null,status:String(t.status||"pending").toLowerCase(),result:t.result??null,errorMessage:t.errorMessage||"",rolledBackAt:t.rolledBackAt??null,rollbackReason:t.rollbackReason||"",createdAt:t.createdAt??null,completedAt:t.completedAt??null,_idx:o}:null}function bt(t){const o=Y(t);return Array.isArray(o)?o.map(vt).filter(Boolean):[]}function _t(t,o=0){if(!t||typeof t!="object")return null;const n=t.name||"";return n?{key:n,name:n,description:String(t.description||""),stages:Array.isArray(t.stages)?t.stages.filter(g=>typeof g=="string"):[],gateStages:Array.isArray(t.gateStages)?t.gateStages.filter(g=>typeof g=="string"):[],_idx:o}:null}function kt(t){const o=Y(t);return Array.isArray(o)?o.map(_t).filter(Boolean):[]}const St={totalPipelines:0,pipelinesByTemplate:{},pipelinesByStatus:{},totalStages:0,stagesByStatus:{},totalArtifacts:0,totalDeploys:0,deploysByStrategy:{}};function At(t){const o=JSON.parse(JSON.stringify(St));for(const g of le)o.pipelinesByTemplate[g]=0;for(const g of Ae)o.pipelinesByStatus[g]=0;for(const g of dt)o.stagesByStatus[g]=0;for(const g of ft)o.deploysByStrategy[g]=0;const n=Y(t);if(!n||typeof n!="object"||Array.isArray(n))return o;if(o.totalPipelines=N(n.totalPipelines,0),o.totalStages=N(n.totalStages,0),o.totalArtifacts=N(n.totalArtifacts,0),o.totalDeploys=N(n.totalDeploys,0),n.pipelinesByTemplate&&typeof n.pipelinesByTemplate=="object")for(const[g,_]of Object.entries(n.pipelinesByTemplate))typeof _=="number"&&Number.isFinite(_)&&(o.pipelinesByTemplate[g]=_);if(n.pipelinesByStatus&&typeof n.pipelinesByStatus=="object")for(const[g,_]of Object.entries(n.pipelinesByStatus))typeof _=="number"&&Number.isFinite(_)&&(o.pipelinesByStatus[g]=_);if(n.stagesByStatus&&typeof n.stagesByStatus=="object")for(const[g,_]of Object.entries(n.stagesByStatus))typeof _=="number"&&Number.isFinite(_)&&(o.stagesByStatus[g]=_);if(n.deploysByStrategy&&typeof n.deploysByStrategy=="object")for(const[g,_]of Object.entries(n.deploysByStrategy))typeof _=="number"&&Number.isFinite(_)&&(o.deploysByStrategy[g]=_);return o}function j(t){if(t==null||t==="")return"—";const o=typeof t=="number"?new Date(t):new Date(String(t));return isNaN(o.getTime())?String(t):o.toLocaleString("zh-CN",{hour12:!1})}const $t={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},xt={class:"page-title"},ht={class:"page-sub"},Ct={class:"stage-flow"},zt={class:"stage-idx"},Bt={class:"filter-bar"},Tt={style:{color:"var(--text-primary)","font-weight":"500"}},Pt={style:{color:"var(--text-secondary)","font-size":"11px","font-family":"monospace","margin-top":"2px"}},Ot={key:1,style:{color:"var(--text-muted)"}},Lt={key:5,style:{color:"var(--text-secondary)","font-size":"11px"}},Dt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},jt={key:0,style:{color:"var(--text-primary)","font-family":"monospace","font-size":"12px"}},Nt={key:3,style:{color:"var(--text-secondary)","font-size":"11px"}},Rt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},Et={style:{color:"var(--text-secondary)","font-size":"12px",margin:"0 0 10px"}},Ft={class:"tpl-stages"},Mt={key:0,style:{"padding-top":"8px"}},Jt={style:{color:"var(--text-primary)","font-size":"13px",margin:"20px 0 10px"}},It={style:{display:"flex","align-items":"center",gap:"8px","flex-wrap":"wrap"}},Ut={style:{color:"var(--text-primary)","font-weight":"500"}},wt={key:0,style:{color:"#52c41a","margin-left":"4px"}},qt={key:0,style:{color:"#ff4d4f","font-size":"11px","margin-top":"4px"}},Gt={key:1,style:{color:"var(--text-secondary)","font-size":"11px","margin-top":"2px"}},Kt={key:0},Vt={__name:"Pipeline",setup(t){const o=We(),{t:n}=Xe(),g=$(!1),_=$(!1),ae=$([]),ne=$([]),ie=$([]),T=$({totalPipelines:0,pipelinesByTemplate:{},pipelinesByStatus:{},totalStages:0,stagesByStatus:{},totalArtifacts:0,totalDeploys:0,deploysByStrategy:{}}),H=$({noDb:!1,error:""}),se=$("pipelines"),R=$(""),E=$(""),I=$(!1),Q=$(!1),k=ct({template:"feature",name:"",configJson:""}),A=$(null),$e=te(()=>[{title:n("pipeline.cols.name"),key:"name"},{title:n("pipeline.cols.template"),key:"template",width:"110px"},{title:n("pipeline.cols.progress"),key:"progress",width:"160px"},{title:n("pipeline.cols.currentStage"),key:"currentStage",width:"140px"},{title:n("pipeline.cols.status"),key:"status",width:"110px"},{title:n("pipeline.cols.createdAt"),key:"createdAt",width:"160px"},{title:n("pipeline.cols.action"),key:"action",width:"260px"}]),xe=te(()=>[{title:n("pipeline.cols.pipeline"),key:"pipeline",width:"180px"},{title:n("pipeline.cols.strategy"),key:"strategy",width:"120px"},{title:n("pipeline.cols.status"),key:"status",width:"110px"},{title:n("pipeline.cols.createdAt"),key:"createdAt"}]),he=te(()=>{let e=ae.value;return R.value&&(e=e.filter(s=>s.template===R.value)),E.value&&(e=e.filter(s=>s.status===E.value)),e});function F(e){const s=`pipeline.templateLabels.${e}`,d=n(s);return d===s?e:d}function W(e){return{feature:"green",bugfix:"red",refactor:"purple","security-audit":"volcano"}[e]||"default"}function U(e){const s=`pipeline.stageLabels.${e}`,d=n(s);return d===s?e:d}function X(e){const s=`pipeline.pipelineStatusLabels.${e}`,d=n(s);return d===s?e:d}function oe(e){return{pending:"default",running:"processing",paused:"orange",completed:"green",failed:"red",cancelled:"default"}[e]||"default"}function Ce(e){const s=`pipeline.stageStatusLabels.${e}`,d=n(s);return d===s?e:d}function re(e){return{pending:"default",running:"processing","gate-waiting":"gold",completed:"green",failed:"red",skipped:"default"}[e]||"default"}function ze(e){const s=`pipeline.deployStatusLabels.${e}`,d=n(s);return d===s?e:d}function Be(e){return{pending:"default",running:"processing",succeeded:"green",failed:"red","rolled-back":"orange"}[e]||"default"}function Te(e){return{"git-pr":"blue",docker:"cyan","npm-publish":"magenta",local:"default",staging:"orange",custom:"purple"}[e]||"default"}function Pe(e){return{pending:"gray",running:"blue","gate-waiting":"gold",completed:"green",failed:"red",skipped:"gray"}[e]||"gray"}function pe(e){if(!e.stages.length)return 0;const s=e.stages.filter(d=>d.status==="completed").length;return Math.round(100*s/e.stages.length)}function w(e){if(!e.stages.length)return null;const s=Math.min(e.currentStage,e.stages.length-1);return e.stages[s]||null}function Oe(e){if(e.status!=="running")return!1;const s=w(e);return s&&s.status==="gate-waiting"&&s.gateRequired&&!s.gateApproved}function Le(e){return e.status==="pending"||e.status==="running"||e.status==="paused"}async function q(){g.value=!0,H.value={noDb:!1,error:""};try{const[e,s,d,x]=await Promise.all([o.execute("pipeline list",1e4).catch(()=>({output:""})),o.execute("pipeline deploys",1e4).catch(()=>({output:""})),o.execute("pipeline templates",8e3).catch(()=>({output:""})),o.execute("pipeline stats",8e3).catch(()=>({output:""}))]),G=[e,s,x].map(B=>ke(B.output)).find(B=>B.noDb);G&&(H.value=G),ae.value=mt(e.output),ne.value=bt(s.output),ie.value=kt(d.output),T.value=At(x.output)}catch(e){z.error(n("pipeline.msg.loadFailed")+": "+(e?.message||e))}finally{g.value=!1}}async function De(){if(!k.template){z.warning(n("pipeline.msg.selectTemplate"));return}if(k.configJson.trim())try{JSON.parse(k.configJson)}catch{z.warning(n("pipeline.msg.badConfigJson"));return}_.value=!0;try{const e=[`pipeline create --template ${k.template}`];k.name.trim()&&e.push(`--name "${k.name.trim().replace(/"/g,'\\"')}"`),k.configJson.trim()&&e.push(`--config '${k.configJson.trim().replace(/'/g,"'\\''")}'`);const{output:s}=await o.execute(e.join(" "),1e4);if(ke(s).noDb){z.error(n("pipeline.msg.needCcInit"));return}if(/error|Error|失败/i.test(s)&&!/"id"/.test(s)){z.error(n("pipeline.msg.createFailed")+": "+s.slice(0,120));return}z.success(n("pipeline.msg.createSuccess")),I.value=!1,ue(),await q()}catch(e){z.error(n("pipeline.msg.createFailed")+": "+(e?.message||e))}finally{_.value=!1}}async function je(e){await M(e,`pipeline start ${e.id}`,n("pipeline.msg.started"))}async function Ne(e){await M(e,`pipeline pause ${e.id}`,n("pipeline.msg.paused"))}async function Re(e){await M(e,`pipeline resume ${e.id}`,n("pipeline.msg.resumed"))}async function Ee(e){await M(e,`pipeline approve ${e.id}`,n("pipeline.msg.gateApproved"))}async function Fe(e){await M(e,`pipeline cancel ${e.id}`,n("pipeline.msg.cancelled"))}async function M(e,s,d){try{const{output:x}=await o.execute(s,8e3);if(/error|Error|失败/i.test(x)&&!/"id"/.test(x)){z.error(n("pipeline.msg.actionFailed")+": "+x.slice(0,120));return}z.success(d),await q()}catch(x){z.error(n("pipeline.msg.actionFailed")+": "+(x?.message||x))}}function Me(e){A.value=e,Q.value=!0}function ue(){k.template="feature",k.name="",k.configJson=""}return pt(q),(e,s)=>{const d=v("a-button"),x=v("a-space"),G=v("a-alert"),B=v("a-statistic"),P=v("a-card"),D=v("a-col"),ce=v("a-row"),K=v("a-radio-button"),de=v("a-radio-group"),h=v("a-tag"),fe=v("a-progress"),Je=v("a-popconfirm"),ge=v("a-table"),Z=v("a-tab-pane"),Ie=v("a-tabs"),Ue=v("a-select-option"),we=v("a-select"),ee=v("a-form-item"),qe=v("a-input"),Ge=v("a-textarea"),Ke=v("a-form"),ye=v("a-modal"),J=v("a-descriptions-item"),Ve=v("a-descriptions"),Ye=v("a-timeline-item"),He=v("a-timeline");return r(),b("div",null,[S("div",$t,[S("div",null,[S("h2",xt,p(e.$t("pipeline.title")),1),S("p",ht,p(e.$t("pipeline.subtitle")),1)]),i(x,null,{default:a(()=>[i(d,{loading:g.value,onClick:q},{icon:a(()=>[i(c(Ze))]),default:a(()=>[f(" "+p(e.$t("pipeline.refresh")),1)]),_:1},8,["loading"]),i(d,{type:"primary",onClick:s[0]||(s[0]=l=>I.value=!0)},{icon:a(()=>[i(c(et))]),default:a(()=>[f(" "+p(e.$t("pipeline.create")),1)]),_:1})]),_:1})]),H.value.noDb?(r(),y(G,{key:0,type:"info","show-icon":"",message:e.$t("pipeline.noDb.message"),description:e.$t("pipeline.noDb.description"),style:{"margin-bottom":"16px"}},null,8,["message","description"])):m("",!0),i(ce,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:a(()=>[i(D,{xs:12,sm:8,lg:5},{default:a(()=>[i(P,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[i(B,{title:e.$t("pipeline.stats.totalPipelines"),value:T.value.totalPipelines,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:a(()=>[i(c(me))]),_:1},8,["title","value"])]),_:1})]),_:1}),i(D,{xs:12,sm:8,lg:5},{default:a(()=>[i(P,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[i(B,{title:e.$t("pipeline.stats.running"),value:T.value.pipelinesByStatus.running||0,"value-style":{color:(T.value.pipelinesByStatus.running||0)>0?"#52c41a":"#888",fontSize:"20px"}},{prefix:a(()=>[i(c(tt))]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),i(D,{xs:12,sm:8,lg:5},{default:a(()=>[i(P,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[i(B,{title:e.$t("pipeline.stats.totalStages"),value:T.value.totalStages,"value-style":{color:"#722ed1",fontSize:"20px"}},{prefix:a(()=>[i(c(lt))]),_:1},8,["title","value"])]),_:1})]),_:1}),i(D,{xs:12,sm:8,lg:5},{default:a(()=>[i(P,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[i(B,{title:e.$t("pipeline.stats.totalArtifacts"),value:T.value.totalArtifacts,"value-style":{color:"#13c2c2",fontSize:"20px"}},{prefix:a(()=>[i(c(at))]),_:1},8,["title","value"])]),_:1})]),_:1}),i(D,{xs:24,sm:8,lg:4},{default:a(()=>[i(P,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[i(B,{title:e.$t("pipeline.stats.totalDeploys"),value:T.value.totalDeploys,"value-style":{color:"#faad14",fontSize:"20px"}},{prefix:a(()=>[i(c(ve))]),_:1},8,["title","value"])]),_:1})]),_:1})]),_:1}),i(P,{title:e.$t("pipeline.stagesCardTitle"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"},"body-style":{padding:"12px 16px"}},{default:a(()=>[S("div",Ct,[(r(!0),b(C,null,L(c(be),(l,u)=>(r(),b(C,{key:l},[S("span",{class:ut(["stage-pill",{"is-gate":c(_e).includes(l)}])},[S("span",zt,p(u+1),1),f(" "+p(U(l))+" ",1),c(_e).includes(l)?(r(),y(c(V),{key:0,class:"gate-icon"})):m("",!0)],2),u<c(be).length-1?(r(),y(c(nt),{key:0,class:"stage-arrow"})):m("",!0)],64))),128))])]),_:1},8,["title"]),i(Ie,{activeKey:se.value,"onUpdate:activeKey":s[3]||(s[3]=l=>se.value=l),class:"pipeline-tabs"},{default:a(()=>[i(Z,{key:"pipelines",tab:e.$t("pipeline.tabs.pipelines")},{default:a(()=>[S("div",Bt,[i(de,{value:R.value,"onUpdate:value":s[1]||(s[1]=l=>R.value=l),size:"small","button-style":"solid"},{default:a(()=>[i(K,{value:""},{default:a(()=>[f(p(e.$t("pipeline.filters.allTemplates")),1)]),_:1}),(r(!0),b(C,null,L(c(le),l=>(r(),y(K,{key:l,value:l},{default:a(()=>[f(p(F(l)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),i(de,{value:E.value,"onUpdate:value":s[2]||(s[2]=l=>E.value=l),size:"small"},{default:a(()=>[i(K,{value:""},{default:a(()=>[f(p(e.$t("pipeline.filters.allStatuses")),1)]),_:1}),(r(!0),b(C,null,L(c(Ae),l=>(r(),y(K,{key:l,value:l},{default:a(()=>[f(p(X(l)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),i(ge,{columns:$e.value,"data-source":he.value,pagination:{pageSize:20,showTotal:l=>e.$t("pipeline.table.totalSuffix",{n:l})},size:"small",loading:g.value,style:{background:"var(--bg-card)"}},{bodyCell:a(({column:l,record:u})=>[l.key==="name"?(r(),b(C,{key:0},[S("span",Tt,p(u.name||e.$t("pipeline.table.unnamed")),1),S("div",Pt,p(u.id.slice(0,16)),1)],64)):m("",!0),l.key==="template"?(r(),y(h,{key:1,color:W(u.template)},{default:a(()=>[f(p(F(u.template)),1)]),_:2},1032,["color"])):m("",!0),l.key==="progress"?(r(),y(fe,{key:2,percent:pe(u),size:"small",status:u.status==="failed"?"exception":u.status==="completed"?"success":"active",format:()=>`${u.currentStage}/${u.stages.length}`},null,8,["percent","status","format"])):m("",!0),l.key==="currentStage"?(r(),b(C,{key:3},[w(u)?(r(),y(h,{key:0,color:re(w(u).status)},{default:a(()=>[f(p(U(w(u).name)),1)]),_:2},1032,["color"])):(r(),b("span",Ot,"—"))],64)):m("",!0),l.key==="status"?(r(),y(h,{key:4,color:oe(u.status)},{default:a(()=>[f(p(X(u.status)),1)]),_:2},1032,["color"])):m("",!0),l.key==="createdAt"?(r(),b("span",Lt,p(c(j)(u.createdAt)),1)):m("",!0),l.key==="action"?(r(),b(C,{key:6},[i(d,{size:"small",type:"link",onClick:O=>Me(u)},{default:a(()=>[f(p(e.$t("pipeline.table.actions.details")),1)]),_:1},8,["onClick"]),u.status==="pending"?(r(),y(d,{key:0,size:"small",type:"link",onClick:O=>je(u)},{default:a(()=>[f(p(e.$t("pipeline.table.actions.start")),1)]),_:1},8,["onClick"])):m("",!0),u.status==="running"?(r(),y(d,{key:1,size:"small",type:"link",onClick:O=>Ne(u)},{default:a(()=>[f(p(e.$t("pipeline.table.actions.pause")),1)]),_:1},8,["onClick"])):m("",!0),u.status==="paused"?(r(),y(d,{key:2,size:"small",type:"link",onClick:O=>Re(u)},{default:a(()=>[f(p(e.$t("pipeline.table.actions.resume")),1)]),_:1},8,["onClick"])):m("",!0),Oe(u)?(r(),y(d,{key:3,size:"small",type:"link",style:{color:"#52c41a"},onClick:O=>Ee(u)},{default:a(()=>[f(p(e.$t("pipeline.table.actions.approveGate")),1)]),_:1},8,["onClick"])):m("",!0),Le(u)?(r(),y(Je,{key:4,title:e.$t("pipeline.table.cancelConfirm"),"ok-text":e.$t("pipeline.table.cancelOk"),"cancel-text":e.$t("pipeline.table.cancelBack"),onConfirm:O=>Fe(u)},{default:a(()=>[i(d,{size:"small",type:"link",danger:""},{default:a(()=>[f(p(e.$t("pipeline.table.actions.cancel")),1)]),_:1})]),_:1},8,["title","ok-text","cancel-text","onConfirm"])):m("",!0)],64)):m("",!0)]),emptyText:a(()=>[S("div",Dt,[i(c(me),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),f(" "+p(R.value||E.value?e.$t("pipeline.table.emptyFiltered"):e.$t("pipeline.table.empty")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),i(Z,{key:"deploys",tab:e.$t("pipeline.tabs.deploys")},{default:a(()=>[i(ge,{columns:xe.value,"data-source":ne.value,pagination:{pageSize:20,showTotal:l=>e.$t("pipeline.table.totalSuffix",{n:l})},size:"small",loading:g.value,style:{background:"var(--bg-card)"}},{bodyCell:a(({column:l,record:u})=>[l.key==="pipeline"?(r(),b("span",jt,p(u.pipelineId.slice(0,12)),1)):m("",!0),l.key==="strategy"?(r(),y(h,{key:1,color:Te(u.strategy),style:{"font-family":"monospace"}},{default:a(()=>[f(p(u.strategy),1)]),_:2},1032,["color"])):m("",!0),l.key==="status"?(r(),y(h,{key:2,color:Be(u.status)},{default:a(()=>[f(p(ze(u.status)),1)]),_:2},1032,["color"])):m("",!0),l.key==="createdAt"?(r(),b("span",Nt,p(c(j)(u.createdAt)),1)):m("",!0)]),emptyText:a(()=>[S("div",Rt,[i(c(ve),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),f(" "+p(e.$t("pipeline.table.emptyDeploys")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),i(Z,{key:"templates",tab:e.$t("pipeline.tabs.templates")},{default:a(()=>[i(ce,{gutter:[16,16]},{default:a(()=>[(r(!0),b(C,null,L(ie.value,l=>(r(),y(D,{key:l.name,xs:24,sm:12,lg:12},{default:a(()=>[i(P,{title:F(l.name),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{extra:a(()=>[i(h,{color:W(l.name)},{default:a(()=>[f(p(l.name),1)]),_:2},1032,["color"])]),default:a(()=>[S("p",Et,p(l.description),1),S("div",Ft,[(r(!0),b(C,null,L(l.stages,(u,O)=>(r(),y(h,{key:u,color:l.gateStages.includes(u)?"gold":"blue",style:{"font-size":"11px"}},{default:a(()=>[f(p(O+1)+". "+p(U(u))+" ",1),l.gateStages.includes(u)?(r(),y(c(V),{key:0,style:{"font-size":"10px","margin-left":"2px"}})):m("",!0)]),_:2},1032,["color"]))),128))])]),_:2},1032,["title"])]),_:2},1024))),128))]),_:1})]),_:1},8,["tab"])]),_:1},8,["activeKey"]),i(ye,{open:I.value,"onUpdate:open":s[7]||(s[7]=l=>I.value=l),title:e.$t("pipeline.create_modal.title"),"confirm-loading":_.value,width:540,"ok-text":e.$t("pipeline.create_modal.ok"),"cancel-text":e.$t("pipeline.create_modal.cancel"),onOk:De,onCancel:ue},{default:a(()=>[i(Ke,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:a(()=>[i(ee,{label:e.$t("pipeline.create_modal.templateLabel"),required:""},{default:a(()=>[i(we,{value:k.template,"onUpdate:value":s[4]||(s[4]=l=>k.template=l)},{default:a(()=>[(r(!0),b(C,null,L(c(le),l=>(r(),y(Ue,{key:l,value:l},{default:a(()=>[f(p(F(l)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"]),i(ee,{label:e.$t("pipeline.create_modal.nameLabel")},{default:a(()=>[i(qe,{value:k.name,"onUpdate:value":s[5]||(s[5]=l=>k.name=l),placeholder:e.$t("pipeline.create_modal.namePlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),i(ee,{label:e.$t("pipeline.create_modal.configLabel")},{default:a(()=>[i(Ge,{value:k.configJson,"onUpdate:value":s[6]||(s[6]=l=>k.configJson=l),placeholder:e.$t("pipeline.create_modal.configPlaceholder"),"auto-size":{minRows:2,maxRows:5}},null,8,["value","placeholder"])]),_:1},8,["label"])]),_:1})]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),i(ye,{open:Q.value,"onUpdate:open":s[8]||(s[8]=l=>Q.value=l),title:e.$t("pipeline.details.title",{label:A.value?.name||A.value?.id?.slice(0,12)||""}),width:780,footer:null},{default:a(()=>[A.value?(r(),b("div",Mt,[i(Ve,{column:2,size:"small",bordered:""},{default:a(()=>[i(J,{label:e.$t("pipeline.details.template")},{default:a(()=>[i(h,{color:W(A.value.template)},{default:a(()=>[f(p(F(A.value.template)),1)]),_:1},8,["color"])]),_:1},8,["label"]),i(J,{label:e.$t("pipeline.details.status")},{default:a(()=>[i(h,{color:oe(A.value.status)},{default:a(()=>[f(p(X(A.value.status)),1)]),_:1},8,["color"])]),_:1},8,["label"]),i(J,{label:e.$t("pipeline.details.progress"),span:2},{default:a(()=>[i(fe,{percent:pe(A.value),status:A.value.status==="failed"?"exception":A.value.status==="completed"?"success":"active",size:"small"},null,8,["percent","status"])]),_:1},8,["label"]),i(J,{label:e.$t("pipeline.details.createdAt")},{default:a(()=>[f(p(c(j)(A.value.createdAt)),1)]),_:1},8,["label"]),i(J,{label:e.$t("pipeline.details.startedAt")},{default:a(()=>[f(p(c(j)(A.value.startedAt)),1)]),_:1},8,["label"])]),_:1}),S("h4",Jt,p(e.$t("pipeline.details.stagesHeader")),1),i(He,{mode:"left"},{default:a(()=>[(r(!0),b(C,null,L(A.value.stages,l=>(r(),y(Ye,{key:l.id,color:Pe(l.status)},{dot:a(()=>[l.status==="completed"?(r(),y(c(it),{key:0,style:{color:"#52c41a"}})):l.status==="running"?(r(),y(c(st),{key:1,style:{color:"#1677ff"}})):l.status==="failed"?(r(),y(c(ot),{key:2,style:{color:"#ff4d4f"}})):l.status==="gate-waiting"?(r(),y(c(V),{key:3,style:{color:"#faad14"}})):(r(),y(c(rt),{key:4,style:{color:"var(--text-muted)"}}))]),default:a(()=>[S("div",It,[S("span",Ut,p(l.stageIndex+1)+". "+p(U(l.name)),1),i(h,{color:re(l.status),style:{"font-size":"11px"}},{default:a(()=>[f(p(Ce(l.status)),1)]),_:2},1032,["color"]),l.gateRequired?(r(),y(h,{key:0,color:"gold",style:{"font-size":"10px"}},{default:a(()=>[i(c(V)),f(" "+p(e.$t("pipeline.details.needsApproval"))+" ",1),l.gateApproved?(r(),b("span",wt,p(e.$t("pipeline.details.approved")),1)):m("",!0)]),_:2},1024)):m("",!0)]),l.errorMessage?(r(),b("div",qt,p(e.$t("pipeline.details.errorPrefix"))+" "+p(l.errorMessage),1)):m("",!0),l.startedAt?(r(),b("div",Gt,[f(p(c(j)(l.startedAt))+" ",1),l.completedAt?(r(),b("span",Kt," → "+p(c(j)(l.completedAt)),1)):m("",!0)])):m("",!0)]),_:2},1032,["color"]))),128))]),_:1})])):m("",!0)]),_:1},8,["open","title"])])}}},Xt=Qe(Vt,[["__scopeId","data-v-8e02619c"]]);export{Xt as default};
1
+ import{_ as He,u as We,b as Ze,d as C}from"./index-19d37fVJ.js";import{s as Se}from"./community-parser-CO25nZFt.js";import{R as Xe,ar as et,z as me,ap as tt,a5 as lt,l as at,Y as ve,V as K,aQ as nt,f as it,L as st,d as ot,y as rt}from"./icons-BFHq5fEF.js";import{o as pt,M as b,R as S,P as p,c as i,N as a,Q as y,S as m,K as v,r as $,L as r,O as f,u as c,F as z,Y as L,Z as ut,f as te,a as ct}from"./vendor-M5lGV-wr.js";function Y(t){const o=Se(t);if(!o)return null;try{return JSON.parse(o)}catch{}const n=o.match(/\{[\s\S]*\}|\[[\s\S]*\]/);if(!n)return null;try{return JSON.parse(n[0])}catch{return null}}const Ae=Object.freeze(["pending","running","paused","completed","failed","cancelled"]),dt=Object.freeze(["pending","running","gate-waiting","completed","failed","skipped"]),be=Object.freeze(["requirement","architecture","code-generation","testing","code-review","deploy","monitoring"]),le=Object.freeze(["feature","bugfix","refactor","security-audit"]),ft=Object.freeze(["git-pr","docker","npm-publish","local","staging","custom"]),_e=Object.freeze(["code-review","deploy"]);function N(t,o=0){return typeof t=="number"&&Number.isFinite(t)?t:o}function ke(t){if(!t)return{noDb:!1,error:""};const o=Se(t),n=/No database/i.test(o);return{noDb:n,error:n?"No database":""}}function gt(t,o=0){if(!t||typeof t!="object")return null;const n=t.id||"";return n?{key:n,id:n,pipelineId:String(t.pipelineId||""),stageIndex:N(t.stageIndex,o),name:String(t.name||""),status:String(t.status||"pending").toLowerCase(),gateRequired:!!t.gateRequired,gateApproved:!!t.gateApproved,gateRejectReason:t.gateRejectReason||"",input:t.input??null,output:t.output??null,errorMessage:t.errorMessage||"",startedAt:t.startedAt??null,completedAt:t.completedAt??null,_idx:o}:null}function yt(t,o=0){if(!t||typeof t!="object")return null;const n=t.id||"";if(!n)return null;const g=Array.isArray(t.stages)?t.stages.map(gt).filter(Boolean):[];return{key:n,id:n,name:t.name||"",template:String(t.template||""),config:t.config??null,status:String(t.status||"pending").toLowerCase(),currentStage:N(t.currentStage,0),result:t.result??null,errorMessage:t.errorMessage||"",createdAt:t.createdAt??null,updatedAt:t.updatedAt??null,startedAt:t.startedAt??null,completedAt:t.completedAt??null,stages:g,_idx:o}}function mt(t){const o=Y(t);return Array.isArray(o)?o.map(yt).filter(Boolean):[]}function vt(t,o=0){if(!t||typeof t!="object")return null;const n=t.id||"";return n?{key:n,id:n,pipelineId:String(t.pipelineId||""),strategy:String(t.strategy||"").toLowerCase(),config:t.config??null,status:String(t.status||"pending").toLowerCase(),result:t.result??null,errorMessage:t.errorMessage||"",rolledBackAt:t.rolledBackAt??null,rollbackReason:t.rollbackReason||"",createdAt:t.createdAt??null,completedAt:t.completedAt??null,_idx:o}:null}function bt(t){const o=Y(t);return Array.isArray(o)?o.map(vt).filter(Boolean):[]}function _t(t,o=0){if(!t||typeof t!="object")return null;const n=t.name||"";return n?{key:n,name:n,description:String(t.description||""),stages:Array.isArray(t.stages)?t.stages.filter(g=>typeof g=="string"):[],gateStages:Array.isArray(t.gateStages)?t.gateStages.filter(g=>typeof g=="string"):[],_idx:o}:null}function kt(t){const o=Y(t);return Array.isArray(o)?o.map(_t).filter(Boolean):[]}const St={totalPipelines:0,pipelinesByTemplate:{},pipelinesByStatus:{},totalStages:0,stagesByStatus:{},totalArtifacts:0,totalDeploys:0,deploysByStrategy:{}};function At(t){const o=JSON.parse(JSON.stringify(St));for(const g of le)o.pipelinesByTemplate[g]=0;for(const g of Ae)o.pipelinesByStatus[g]=0;for(const g of dt)o.stagesByStatus[g]=0;for(const g of ft)o.deploysByStrategy[g]=0;const n=Y(t);if(!n||typeof n!="object"||Array.isArray(n))return o;if(o.totalPipelines=N(n.totalPipelines,0),o.totalStages=N(n.totalStages,0),o.totalArtifacts=N(n.totalArtifacts,0),o.totalDeploys=N(n.totalDeploys,0),n.pipelinesByTemplate&&typeof n.pipelinesByTemplate=="object")for(const[g,_]of Object.entries(n.pipelinesByTemplate))typeof _=="number"&&Number.isFinite(_)&&(o.pipelinesByTemplate[g]=_);if(n.pipelinesByStatus&&typeof n.pipelinesByStatus=="object")for(const[g,_]of Object.entries(n.pipelinesByStatus))typeof _=="number"&&Number.isFinite(_)&&(o.pipelinesByStatus[g]=_);if(n.stagesByStatus&&typeof n.stagesByStatus=="object")for(const[g,_]of Object.entries(n.stagesByStatus))typeof _=="number"&&Number.isFinite(_)&&(o.stagesByStatus[g]=_);if(n.deploysByStrategy&&typeof n.deploysByStrategy=="object")for(const[g,_]of Object.entries(n.deploysByStrategy))typeof _=="number"&&Number.isFinite(_)&&(o.deploysByStrategy[g]=_);return o}function j(t){if(t==null||t==="")return"—";const o=typeof t=="number"?new Date(t):new Date(String(t));return isNaN(o.getTime())?String(t):o.toLocaleString("zh-CN",{hour12:!1})}const $t={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},xt={class:"page-title"},ht={class:"page-sub"},zt={class:"stage-flow"},Ct={class:"stage-idx"},Bt={class:"filter-bar"},Tt={style:{color:"var(--text-primary)","font-weight":"500"}},Pt={style:{color:"var(--text-secondary)","font-size":"11px","font-family":"monospace","margin-top":"2px"}},Ot={key:1,style:{color:"var(--text-muted)"}},Lt={key:5,style:{color:"var(--text-secondary)","font-size":"11px"}},Dt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},jt={key:0,style:{color:"var(--text-primary)","font-family":"monospace","font-size":"12px"}},Nt={key:3,style:{color:"var(--text-secondary)","font-size":"11px"}},Rt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},Et={style:{color:"var(--text-secondary)","font-size":"12px",margin:"0 0 10px"}},Ft={class:"tpl-stages"},Mt={key:0,style:{"padding-top":"8px"}},Jt={style:{color:"var(--text-primary)","font-size":"13px",margin:"20px 0 10px"}},It={style:{display:"flex","align-items":"center",gap:"8px","flex-wrap":"wrap"}},Ut={style:{color:"var(--text-primary)","font-weight":"500"}},wt={key:0,style:{color:"#52c41a","margin-left":"4px"}},Gt={key:0,style:{color:"#ff4d4f","font-size":"11px","margin-top":"4px"}},qt={key:1,style:{color:"var(--text-secondary)","font-size":"11px","margin-top":"2px"}},Vt={key:0},Kt={__name:"Pipeline",setup(t){const o=We(),{t:n}=Ze(),g=$(!1),_=$(!1),ae=$([]),ne=$([]),ie=$([]),T=$({totalPipelines:0,pipelinesByTemplate:{},pipelinesByStatus:{},totalStages:0,stagesByStatus:{},totalArtifacts:0,totalDeploys:0,deploysByStrategy:{}}),Q=$({noDb:!1,error:""}),se=$("pipelines"),R=$(""),E=$(""),I=$(!1),H=$(!1),k=ct({template:"feature",name:"",configJson:""}),A=$(null),$e=te(()=>[{title:n("pipeline.cols.name"),key:"name"},{title:n("pipeline.cols.template"),key:"template",width:"110px"},{title:n("pipeline.cols.progress"),key:"progress",width:"160px"},{title:n("pipeline.cols.currentStage"),key:"currentStage",width:"140px"},{title:n("pipeline.cols.status"),key:"status",width:"110px"},{title:n("pipeline.cols.createdAt"),key:"createdAt",width:"160px"},{title:n("pipeline.cols.action"),key:"action",width:"260px"}]),xe=te(()=>[{title:n("pipeline.cols.pipeline"),key:"pipeline",width:"180px"},{title:n("pipeline.cols.strategy"),key:"strategy",width:"120px"},{title:n("pipeline.cols.status"),key:"status",width:"110px"},{title:n("pipeline.cols.createdAt"),key:"createdAt"}]),he=te(()=>{let e=ae.value;return R.value&&(e=e.filter(s=>s.template===R.value)),E.value&&(e=e.filter(s=>s.status===E.value)),e});function F(e){const s=`pipeline.templateLabels.${e}`,d=n(s);return d===s?e:d}function W(e){return{feature:"green",bugfix:"red",refactor:"purple","security-audit":"volcano"}[e]||"default"}function U(e){const s=`pipeline.stageLabels.${e}`,d=n(s);return d===s?e:d}function Z(e){const s=`pipeline.pipelineStatusLabels.${e}`,d=n(s);return d===s?e:d}function oe(e){return{pending:"default",running:"processing",paused:"orange",completed:"green",failed:"red",cancelled:"default"}[e]||"default"}function ze(e){const s=`pipeline.stageStatusLabels.${e}`,d=n(s);return d===s?e:d}function re(e){return{pending:"default",running:"processing","gate-waiting":"gold",completed:"green",failed:"red",skipped:"default"}[e]||"default"}function Ce(e){const s=`pipeline.deployStatusLabels.${e}`,d=n(s);return d===s?e:d}function Be(e){return{pending:"default",running:"processing",succeeded:"green",failed:"red","rolled-back":"orange"}[e]||"default"}function Te(e){return{"git-pr":"blue",docker:"cyan","npm-publish":"magenta",local:"default",staging:"orange",custom:"purple"}[e]||"default"}function Pe(e){return{pending:"gray",running:"blue","gate-waiting":"gold",completed:"green",failed:"red",skipped:"gray"}[e]||"gray"}function pe(e){if(!e.stages.length)return 0;const s=e.stages.filter(d=>d.status==="completed").length;return Math.round(100*s/e.stages.length)}function w(e){if(!e.stages.length)return null;const s=Math.min(e.currentStage,e.stages.length-1);return e.stages[s]||null}function Oe(e){if(e.status!=="running")return!1;const s=w(e);return s&&s.status==="gate-waiting"&&s.gateRequired&&!s.gateApproved}function Le(e){return e.status==="pending"||e.status==="running"||e.status==="paused"}async function G(){g.value=!0,Q.value={noDb:!1,error:""};try{const[e,s,d,x]=await Promise.all([o.execute("pipeline list",1e4).catch(()=>({output:""})),o.execute("pipeline deploys",1e4).catch(()=>({output:""})),o.execute("pipeline templates",8e3).catch(()=>({output:""})),o.execute("pipeline stats",8e3).catch(()=>({output:""}))]),q=[e,s,x].map(B=>ke(B.output)).find(B=>B.noDb);q&&(Q.value=q),ae.value=mt(e.output),ne.value=bt(s.output),ie.value=kt(d.output),T.value=At(x.output)}catch(e){C.error(n("pipeline.msg.loadFailed")+": "+(e?.message||e))}finally{g.value=!1}}async function De(){if(!k.template){C.warning(n("pipeline.msg.selectTemplate"));return}if(k.configJson.trim())try{JSON.parse(k.configJson)}catch{C.warning(n("pipeline.msg.badConfigJson"));return}_.value=!0;try{const e=[`pipeline create --template ${k.template}`];k.name.trim()&&e.push(`--name "${k.name.trim().replace(/"/g,'\\"')}"`),k.configJson.trim()&&e.push(`--config '${k.configJson.trim().replace(/'/g,"'\\''")}'`);const{output:s}=await o.execute(e.join(" "),1e4);if(ke(s).noDb){C.error(n("pipeline.msg.needCcInit"));return}if(/error|Error|失败/i.test(s)&&!/"id"/.test(s)){C.error(n("pipeline.msg.createFailed")+": "+s.slice(0,120));return}C.success(n("pipeline.msg.createSuccess")),I.value=!1,ue(),await G()}catch(e){C.error(n("pipeline.msg.createFailed")+": "+(e?.message||e))}finally{_.value=!1}}async function je(e){await M(e,`pipeline start ${e.id}`,n("pipeline.msg.started"))}async function Ne(e){await M(e,`pipeline pause ${e.id}`,n("pipeline.msg.paused"))}async function Re(e){await M(e,`pipeline resume ${e.id}`,n("pipeline.msg.resumed"))}async function Ee(e){await M(e,`pipeline approve ${e.id}`,n("pipeline.msg.gateApproved"))}async function Fe(e){await M(e,`pipeline cancel ${e.id}`,n("pipeline.msg.cancelled"))}async function M(e,s,d){try{const{output:x}=await o.execute(s,8e3);if(/error|Error|失败/i.test(x)&&!/"id"/.test(x)){C.error(n("pipeline.msg.actionFailed")+": "+x.slice(0,120));return}C.success(d),await G()}catch(x){C.error(n("pipeline.msg.actionFailed")+": "+(x?.message||x))}}function Me(e){A.value=e,H.value=!0}function ue(){k.template="feature",k.name="",k.configJson=""}return pt(G),(e,s)=>{const d=v("a-button"),x=v("a-space"),q=v("a-alert"),B=v("a-statistic"),P=v("a-card"),D=v("a-col"),ce=v("a-row"),V=v("a-radio-button"),de=v("a-radio-group"),h=v("a-tag"),fe=v("a-progress"),Je=v("a-popconfirm"),ge=v("a-table"),X=v("a-tab-pane"),Ie=v("a-tabs"),Ue=v("a-select-option"),we=v("a-select"),ee=v("a-form-item"),Ge=v("a-input"),qe=v("a-textarea"),Ve=v("a-form"),ye=v("a-modal"),J=v("a-descriptions-item"),Ke=v("a-descriptions"),Ye=v("a-timeline-item"),Qe=v("a-timeline");return r(),b("div",null,[S("div",$t,[S("div",null,[S("h2",xt,p(e.$t("pipeline.title")),1),S("p",ht,p(e.$t("pipeline.subtitle")),1)]),i(x,null,{default:a(()=>[i(d,{loading:g.value,onClick:G},{icon:a(()=>[i(c(Xe))]),default:a(()=>[f(" "+p(e.$t("pipeline.refresh")),1)]),_:1},8,["loading"]),i(d,{type:"primary",onClick:s[0]||(s[0]=l=>I.value=!0)},{icon:a(()=>[i(c(et))]),default:a(()=>[f(" "+p(e.$t("pipeline.create")),1)]),_:1})]),_:1})]),Q.value.noDb?(r(),y(q,{key:0,type:"info","show-icon":"",message:e.$t("pipeline.noDb.message"),description:e.$t("pipeline.noDb.description"),style:{"margin-bottom":"16px"}},null,8,["message","description"])):m("",!0),i(ce,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:a(()=>[i(D,{xs:12,sm:8,lg:5},{default:a(()=>[i(P,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[i(B,{title:e.$t("pipeline.stats.totalPipelines"),value:T.value.totalPipelines,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:a(()=>[i(c(me))]),_:1},8,["title","value"])]),_:1})]),_:1}),i(D,{xs:12,sm:8,lg:5},{default:a(()=>[i(P,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[i(B,{title:e.$t("pipeline.stats.running"),value:T.value.pipelinesByStatus.running||0,"value-style":{color:(T.value.pipelinesByStatus.running||0)>0?"#52c41a":"#888",fontSize:"20px"}},{prefix:a(()=>[i(c(tt))]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),i(D,{xs:12,sm:8,lg:5},{default:a(()=>[i(P,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[i(B,{title:e.$t("pipeline.stats.totalStages"),value:T.value.totalStages,"value-style":{color:"#722ed1",fontSize:"20px"}},{prefix:a(()=>[i(c(lt))]),_:1},8,["title","value"])]),_:1})]),_:1}),i(D,{xs:12,sm:8,lg:5},{default:a(()=>[i(P,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[i(B,{title:e.$t("pipeline.stats.totalArtifacts"),value:T.value.totalArtifacts,"value-style":{color:"#13c2c2",fontSize:"20px"}},{prefix:a(()=>[i(c(at))]),_:1},8,["title","value"])]),_:1})]),_:1}),i(D,{xs:24,sm:8,lg:4},{default:a(()=>[i(P,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[i(B,{title:e.$t("pipeline.stats.totalDeploys"),value:T.value.totalDeploys,"value-style":{color:"#faad14",fontSize:"20px"}},{prefix:a(()=>[i(c(ve))]),_:1},8,["title","value"])]),_:1})]),_:1})]),_:1}),i(P,{title:e.$t("pipeline.stagesCardTitle"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"},"body-style":{padding:"12px 16px"}},{default:a(()=>[S("div",zt,[(r(!0),b(z,null,L(c(be),(l,u)=>(r(),b(z,{key:l},[S("span",{class:ut(["stage-pill",{"is-gate":c(_e).includes(l)}])},[S("span",Ct,p(u+1),1),f(" "+p(U(l))+" ",1),c(_e).includes(l)?(r(),y(c(K),{key:0,class:"gate-icon"})):m("",!0)],2),u<c(be).length-1?(r(),y(c(nt),{key:0,class:"stage-arrow"})):m("",!0)],64))),128))])]),_:1},8,["title"]),i(Ie,{activeKey:se.value,"onUpdate:activeKey":s[3]||(s[3]=l=>se.value=l),class:"pipeline-tabs"},{default:a(()=>[i(X,{key:"pipelines",tab:e.$t("pipeline.tabs.pipelines")},{default:a(()=>[S("div",Bt,[i(de,{value:R.value,"onUpdate:value":s[1]||(s[1]=l=>R.value=l),size:"small","button-style":"solid"},{default:a(()=>[i(V,{value:""},{default:a(()=>[f(p(e.$t("pipeline.filters.allTemplates")),1)]),_:1}),(r(!0),b(z,null,L(c(le),l=>(r(),y(V,{key:l,value:l},{default:a(()=>[f(p(F(l)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),i(de,{value:E.value,"onUpdate:value":s[2]||(s[2]=l=>E.value=l),size:"small"},{default:a(()=>[i(V,{value:""},{default:a(()=>[f(p(e.$t("pipeline.filters.allStatuses")),1)]),_:1}),(r(!0),b(z,null,L(c(Ae),l=>(r(),y(V,{key:l,value:l},{default:a(()=>[f(p(Z(l)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),i(ge,{columns:$e.value,"data-source":he.value,pagination:{pageSize:20,showTotal:l=>e.$t("pipeline.table.totalSuffix",{n:l})},size:"small",loading:g.value,style:{background:"var(--bg-card)"}},{bodyCell:a(({column:l,record:u})=>[l.key==="name"?(r(),b(z,{key:0},[S("span",Tt,p(u.name||e.$t("pipeline.table.unnamed")),1),S("div",Pt,p(u.id.slice(0,16)),1)],64)):m("",!0),l.key==="template"?(r(),y(h,{key:1,color:W(u.template)},{default:a(()=>[f(p(F(u.template)),1)]),_:2},1032,["color"])):m("",!0),l.key==="progress"?(r(),y(fe,{key:2,percent:pe(u),size:"small",status:u.status==="failed"?"exception":u.status==="completed"?"success":"active",format:()=>`${u.currentStage}/${u.stages.length}`},null,8,["percent","status","format"])):m("",!0),l.key==="currentStage"?(r(),b(z,{key:3},[w(u)?(r(),y(h,{key:0,color:re(w(u).status)},{default:a(()=>[f(p(U(w(u).name)),1)]),_:2},1032,["color"])):(r(),b("span",Ot,"—"))],64)):m("",!0),l.key==="status"?(r(),y(h,{key:4,color:oe(u.status)},{default:a(()=>[f(p(Z(u.status)),1)]),_:2},1032,["color"])):m("",!0),l.key==="createdAt"?(r(),b("span",Lt,p(c(j)(u.createdAt)),1)):m("",!0),l.key==="action"?(r(),b(z,{key:6},[i(d,{size:"small",type:"link",onClick:O=>Me(u)},{default:a(()=>[f(p(e.$t("pipeline.table.actions.details")),1)]),_:1},8,["onClick"]),u.status==="pending"?(r(),y(d,{key:0,size:"small",type:"link",onClick:O=>je(u)},{default:a(()=>[f(p(e.$t("pipeline.table.actions.start")),1)]),_:1},8,["onClick"])):m("",!0),u.status==="running"?(r(),y(d,{key:1,size:"small",type:"link",onClick:O=>Ne(u)},{default:a(()=>[f(p(e.$t("pipeline.table.actions.pause")),1)]),_:1},8,["onClick"])):m("",!0),u.status==="paused"?(r(),y(d,{key:2,size:"small",type:"link",onClick:O=>Re(u)},{default:a(()=>[f(p(e.$t("pipeline.table.actions.resume")),1)]),_:1},8,["onClick"])):m("",!0),Oe(u)?(r(),y(d,{key:3,size:"small",type:"link",style:{color:"#52c41a"},onClick:O=>Ee(u)},{default:a(()=>[f(p(e.$t("pipeline.table.actions.approveGate")),1)]),_:1},8,["onClick"])):m("",!0),Le(u)?(r(),y(Je,{key:4,title:e.$t("pipeline.table.cancelConfirm"),"ok-text":e.$t("pipeline.table.cancelOk"),"cancel-text":e.$t("pipeline.table.cancelBack"),onConfirm:O=>Fe(u)},{default:a(()=>[i(d,{size:"small",type:"link",danger:""},{default:a(()=>[f(p(e.$t("pipeline.table.actions.cancel")),1)]),_:1})]),_:1},8,["title","ok-text","cancel-text","onConfirm"])):m("",!0)],64)):m("",!0)]),emptyText:a(()=>[S("div",Dt,[i(c(me),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),f(" "+p(R.value||E.value?e.$t("pipeline.table.emptyFiltered"):e.$t("pipeline.table.empty")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),i(X,{key:"deploys",tab:e.$t("pipeline.tabs.deploys")},{default:a(()=>[i(ge,{columns:xe.value,"data-source":ne.value,pagination:{pageSize:20,showTotal:l=>e.$t("pipeline.table.totalSuffix",{n:l})},size:"small",loading:g.value,style:{background:"var(--bg-card)"}},{bodyCell:a(({column:l,record:u})=>[l.key==="pipeline"?(r(),b("span",jt,p(u.pipelineId.slice(0,12)),1)):m("",!0),l.key==="strategy"?(r(),y(h,{key:1,color:Te(u.strategy),style:{"font-family":"monospace"}},{default:a(()=>[f(p(u.strategy),1)]),_:2},1032,["color"])):m("",!0),l.key==="status"?(r(),y(h,{key:2,color:Be(u.status)},{default:a(()=>[f(p(Ce(u.status)),1)]),_:2},1032,["color"])):m("",!0),l.key==="createdAt"?(r(),b("span",Nt,p(c(j)(u.createdAt)),1)):m("",!0)]),emptyText:a(()=>[S("div",Rt,[i(c(ve),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),f(" "+p(e.$t("pipeline.table.emptyDeploys")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),i(X,{key:"templates",tab:e.$t("pipeline.tabs.templates")},{default:a(()=>[i(ce,{gutter:[16,16]},{default:a(()=>[(r(!0),b(z,null,L(ie.value,l=>(r(),y(D,{key:l.name,xs:24,sm:12,lg:12},{default:a(()=>[i(P,{title:F(l.name),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{extra:a(()=>[i(h,{color:W(l.name)},{default:a(()=>[f(p(l.name),1)]),_:2},1032,["color"])]),default:a(()=>[S("p",Et,p(l.description),1),S("div",Ft,[(r(!0),b(z,null,L(l.stages,(u,O)=>(r(),y(h,{key:u,color:l.gateStages.includes(u)?"gold":"blue",style:{"font-size":"11px"}},{default:a(()=>[f(p(O+1)+". "+p(U(u))+" ",1),l.gateStages.includes(u)?(r(),y(c(K),{key:0,style:{"font-size":"10px","margin-left":"2px"}})):m("",!0)]),_:2},1032,["color"]))),128))])]),_:2},1032,["title"])]),_:2},1024))),128))]),_:1})]),_:1},8,["tab"])]),_:1},8,["activeKey"]),i(ye,{open:I.value,"onUpdate:open":s[7]||(s[7]=l=>I.value=l),title:e.$t("pipeline.create_modal.title"),"confirm-loading":_.value,width:540,"ok-text":e.$t("pipeline.create_modal.ok"),"cancel-text":e.$t("pipeline.create_modal.cancel"),onOk:De,onCancel:ue},{default:a(()=>[i(Ve,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:a(()=>[i(ee,{label:e.$t("pipeline.create_modal.templateLabel"),required:""},{default:a(()=>[i(we,{value:k.template,"onUpdate:value":s[4]||(s[4]=l=>k.template=l)},{default:a(()=>[(r(!0),b(z,null,L(c(le),l=>(r(),y(Ue,{key:l,value:l},{default:a(()=>[f(p(F(l)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"]),i(ee,{label:e.$t("pipeline.create_modal.nameLabel")},{default:a(()=>[i(Ge,{value:k.name,"onUpdate:value":s[5]||(s[5]=l=>k.name=l),placeholder:e.$t("pipeline.create_modal.namePlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),i(ee,{label:e.$t("pipeline.create_modal.configLabel")},{default:a(()=>[i(qe,{value:k.configJson,"onUpdate:value":s[6]||(s[6]=l=>k.configJson=l),placeholder:e.$t("pipeline.create_modal.configPlaceholder"),"auto-size":{minRows:2,maxRows:5}},null,8,["value","placeholder"])]),_:1},8,["label"])]),_:1})]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),i(ye,{open:H.value,"onUpdate:open":s[8]||(s[8]=l=>H.value=l),title:e.$t("pipeline.details.title",{label:A.value?.name||A.value?.id?.slice(0,12)||""}),width:780,footer:null},{default:a(()=>[A.value?(r(),b("div",Mt,[i(Ke,{column:2,size:"small",bordered:""},{default:a(()=>[i(J,{label:e.$t("pipeline.details.template")},{default:a(()=>[i(h,{color:W(A.value.template)},{default:a(()=>[f(p(F(A.value.template)),1)]),_:1},8,["color"])]),_:1},8,["label"]),i(J,{label:e.$t("pipeline.details.status")},{default:a(()=>[i(h,{color:oe(A.value.status)},{default:a(()=>[f(p(Z(A.value.status)),1)]),_:1},8,["color"])]),_:1},8,["label"]),i(J,{label:e.$t("pipeline.details.progress"),span:2},{default:a(()=>[i(fe,{percent:pe(A.value),status:A.value.status==="failed"?"exception":A.value.status==="completed"?"success":"active",size:"small"},null,8,["percent","status"])]),_:1},8,["label"]),i(J,{label:e.$t("pipeline.details.createdAt")},{default:a(()=>[f(p(c(j)(A.value.createdAt)),1)]),_:1},8,["label"]),i(J,{label:e.$t("pipeline.details.startedAt")},{default:a(()=>[f(p(c(j)(A.value.startedAt)),1)]),_:1},8,["label"])]),_:1}),S("h4",Jt,p(e.$t("pipeline.details.stagesHeader")),1),i(Qe,{mode:"left"},{default:a(()=>[(r(!0),b(z,null,L(A.value.stages,l=>(r(),y(Ye,{key:l.id,color:Pe(l.status)},{dot:a(()=>[l.status==="completed"?(r(),y(c(it),{key:0,style:{color:"#52c41a"}})):l.status==="running"?(r(),y(c(st),{key:1,style:{color:"#1677ff"}})):l.status==="failed"?(r(),y(c(ot),{key:2,style:{color:"#ff4d4f"}})):l.status==="gate-waiting"?(r(),y(c(K),{key:3,style:{color:"#faad14"}})):(r(),y(c(rt),{key:4,style:{color:"var(--text-muted)"}}))]),default:a(()=>[S("div",It,[S("span",Ut,p(l.stageIndex+1)+". "+p(U(l.name)),1),i(h,{color:re(l.status),style:{"font-size":"11px"}},{default:a(()=>[f(p(ze(l.status)),1)]),_:2},1032,["color"]),l.gateRequired?(r(),y(h,{key:0,color:"gold",style:{"font-size":"10px"}},{default:a(()=>[i(c(K)),f(" "+p(e.$t("pipeline.details.needsApproval"))+" ",1),l.gateApproved?(r(),b("span",wt,p(e.$t("pipeline.details.approved")),1)):m("",!0)]),_:2},1024)):m("",!0)]),l.errorMessage?(r(),b("div",Gt,p(e.$t("pipeline.details.errorPrefix"))+" "+p(l.errorMessage),1)):m("",!0),l.startedAt?(r(),b("div",qt,[f(p(c(j)(l.startedAt))+" ",1),l.completedAt?(r(),b("span",Vt," → "+p(c(j)(l.completedAt)),1)):m("",!0)])):m("",!0)]),_:2},1032,["color"]))),128))]),_:1})])):m("",!0)]),_:1},8,["open","title"])])}}},Zt=He(Kt,[["__scopeId","data-v-8e02619c"]]);export{Zt as default};
@@ -1 +1 @@
1
- import{_ as Ze,u as et,b as tt,d as v}from"./index-BAy0ks7N.js";import{s as at}from"./community-parser-CO25nZFt.js";import{R as lt,aq as ot,_ as pe,y as ce,U as Le,H as it,aW as nt}from"./icons-DY9VpXfa.js";import{o as rt,M as m,R as f,P as s,c as a,N as o,K as g,r as h,L as u,O as y,u as _,F as z,Y as T,Q as C,S as k,_ as st,f as I,a as Z}from"./vendor-M5lGV-wr.js";function J(i){const r=at(i);if(!r)return null;try{return JSON.parse(r)}catch{}const n=r.match(/\{[\s\S]*\}|\[[\s\S]*\]/);if(!n)return null;try{return JSON.parse(n[0])}catch{return null}}const ut=Object.freeze(["initializing","training","aggregating","completed","failed"]),pt=Object.freeze(["pending","computing","completed"]),Re=Object.freeze(["shamir","beaver","gmw"]),ct=Object.freeze(["laplace","gaussian","exponential"]),dt=Object.freeze(["paillier","bfv","ckks"]),mt=Object.freeze(["sum","product","mean","count"]);function b(i,r=0){return typeof i=="number"&&Number.isFinite(i)?i:r}function yt(i,r=0){if(!i||typeof i!="object")return null;const n=i.id||"";return n?{key:n,id:n,name:String(i.name||n),description:String(i.description||""),_idx:r}:null}function de(i){const r=J(i);return Array.isArray(r)?r.map(yt).filter(Boolean):[]}function vt(i,r=0){if(!i||typeof i!="object")return null;const n=i.id||"";return n?{key:n,id:n,name:String(i.name||""),modelType:i.modelType??i.model_type??"neural_network",architecture:String(i.architecture||""),status:String(i.status||"initializing").toLowerCase(),currentRound:b(i.currentRound??i.current_round,0),totalRounds:b(i.totalRounds??i.total_rounds,0),participantCount:b(i.participantCount??i.participant_count,0),accuracy:b(i.accuracy,0),loss:i.loss==null?null:b(i.loss,null),learningRate:b(i.learningRate??i.learning_rate,0),aggregationStrategy:i.aggregationStrategy??i.aggregation_strategy??"",privacyBudgetSpent:b(i.privacyBudgetSpent??i.privacy_budget_spent,0),createdAt:i.createdAt??i.created_at??null,updatedAt:i.updatedAt??i.updated_at??null,_idx:r}:null}function ft(i){const r=J(i);return Array.isArray(r)?r.map(vt).filter(Boolean):[]}function gt(i,r=0){if(!i||typeof i!="object")return null;const n=i.id||"";if(!n)return null;let L=i.participantIds??i.participant_ids??[];if(typeof L=="string")try{L=JSON.parse(L)}catch{L=[]}return Array.isArray(L)||(L=[]),{key:n,id:n,computationType:i.computationType??i.computation_type??"",protocol:String(i.protocol||"shamir").toLowerCase(),participantCount:b(i.participantCount??i.participant_count,0),participantIds:L,resultHash:i.resultHash??i.result_hash??null,status:String(i.status||"pending").toLowerCase(),sharesReceived:b(i.sharesReceived??i.shares_received,0),sharesRequired:b(i.sharesRequired??i.shares_required,0),computationTimeMs:i.computationTimeMs??i.computation_time_ms??null,errorMessage:i.errorMessage??i.error_message??"",createdAt:i.createdAt??i.created_at??null,completedAt:i.completedAt??i.completed_at??null,_idx:r}}function bt(i){const r=J(i);return Array.isArray(r)?r.map(gt).filter(Boolean):[]}function ht(i){const r=J(i);return!r||typeof r!="object"||Array.isArray(r)?null:{published:!!r.published,reason:r.reason||null,data:r.data??null,epsilon:b(r.epsilon,0),delta:b(r.delta,0),mechanism:String(r.mechanism||""),budgetSpent:b(r.budgetSpent??r.budget_spent,0),budgetRemaining:b(r.budgetRemaining??r.budget_remaining,0)}}function _t(i){const r=J(i);return!r||typeof r!="object"||Array.isArray(r)?null:{result:r.result??null,operation:String(r.operation||""),scheme:String(r.scheme||""),inputCount:b(r.inputCount??r.input_count,0),encrypted:r.encrypted!==!1}}const kt={privacyBudget:{spent:0,limit:0,remaining:0,exhausted:!1},federatedLearning:{totalModels:0,completed:0,training:0,avgAccuracy:0},mpc:{totalComputations:0,completed:0,pending:0,byProtocol:{}}};function $t(i){const r=JSON.parse(JSON.stringify(kt)),n=J(i);if(!n||typeof n!="object"||Array.isArray(n))return r;if(n.privacyBudget&&typeof n.privacyBudget=="object"&&(r.privacyBudget.spent=b(n.privacyBudget.spent,0),r.privacyBudget.limit=b(n.privacyBudget.limit,0),r.privacyBudget.remaining=b(n.privacyBudget.remaining,0),r.privacyBudget.exhausted=!!n.privacyBudget.exhausted),n.federatedLearning&&typeof n.federatedLearning=="object"&&(r.federatedLearning.totalModels=b(n.federatedLearning.totalModels,0),r.federatedLearning.completed=b(n.federatedLearning.completed,0),r.federatedLearning.training=b(n.federatedLearning.training,0),r.federatedLearning.avgAccuracy=b(n.federatedLearning.avgAccuracy,0)),n.mpc&&typeof n.mpc=="object"&&(r.mpc.totalComputations=b(n.mpc.totalComputations,0),r.mpc.completed=b(n.mpc.completed,0),r.mpc.pending=b(n.mpc.pending,0),n.mpc.byProtocol&&typeof n.mpc.byProtocol=="object"))for(const[L,j]of Object.entries(n.mpc.byProtocol))typeof j=="number"&&Number.isFinite(j)&&(r.mpc.byProtocol[L]=j);return r}function Ae(i){if(i==null||i==="")return"—";const r=typeof i=="number"?new Date(i):new Date(String(i));return isNaN(r.getTime())?String(i):r.toLocaleString("zh-CN",{hour12:!1})}const St={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},Ct={class:"page-title"},xt={class:"page-sub"},zt={style:{"font-size":"11px",color:"var(--text-secondary)"}},Lt={class:"catalog-name"},Rt={class:"catalog-desc"},At={class:"catalog-name"},Mt={class:"catalog-desc"},jt={class:"catalog-name"},Ft={class:"catalog-desc"},Tt={class:"filter-bar"},Ot={style:{color:"var(--text-primary)","font-weight":"500"}},Pt={style:{color:"var(--text-secondary)","font-size":"11px","margin-top":"2px"}},Ut={style:{"font-size":"11px",color:"var(--text-secondary)"}},Bt={key:0,style:{"font-size":"11px",color:"var(--text-secondary)"}},wt={key:5,style:{"font-family":"monospace",color:"var(--text-secondary)"}},Nt={key:6,style:{color:"var(--text-secondary)","font-size":"11px"}},Et={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},qt={class:"filter-bar"},Ht={key:0,style:{color:"var(--text-primary)","font-family":"monospace","font-weight":"500"}},It={key:0,style:{"font-family":"monospace",color:"var(--text-secondary)","font-size":"12px"}},Jt={key:1,style:{color:"var(--text-muted)"}},Dt={key:5,style:{color:"var(--text-secondary)","font-size":"11px"}},Kt={key:1,style:{color:"var(--text-muted)","font-size":"11px","font-family":"monospace"}},Vt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},Wt={style:{"margin-top":"12px","font-size":"12px",color:"var(--text-secondary)"}},Qt={style:{"margin-top":"12px","font-size":"12px",color:"var(--text-secondary)"}},Yt={__name:"Privacy",setup(i){const r=et(),{t:n}=tt(),L=h(!1),j=h(!1),ee=h(!1),te=h(!1),ae=h(""),le=h(""),me=h([]),ye=h([]),ve=h([]),oe=h([]),fe=h([]),R=h({privacyBudget:{spent:0,limit:0,remaining:0,exhausted:!1},federatedLearning:{totalModels:0,completed:0,training:0,avgAccuracy:0},mpc:{totalComputations:0,completed:0,pending:0,byProtocol:{}}}),ie=h("models"),D=h(""),V=h(""),W=h(""),Q=h(!1),Y=h(!1),ne=h(!1),re=h(!1),c=Z({name:"",modelType:"",architecture:"",rounds:10,lr:.01,participants:0}),$=Z({type:"",protocol:"shamir",participants:"",threshold:null}),S=Z({data:"",mechanism:"laplace",epsilon:.1,delta:1e-5,sensitivity:1}),A=Z({data:"",operation:"sum",scheme:"paillier"}),M=h(null),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(()=>D.value?oe.value.filter(e=>e.status===D.value):oe.value),Pe=I(()=>{let e=fe.value;return V.value&&(e=e.filter(l=>l.protocol===V.value)),W.value&&(e=e.filter(l=>l.status===W.value)),e});function ge(e){const l=`privacy.flStatusLabels.${e}`,d=n(l);return d===l?e:d}function Ue(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 Be(e){return{pending:"default",computing:"processing",completed:"green"}[e]||"default"}function we(e){return e>=.85?"#52c41a":e>=.6?"#faad14":"#ff4d4f"}function Ne(e){return e.status==="initializing"||e.status==="training"||e.status==="aggregating"}function Ee({key:e}){e==="model"?Q.value=!0:e==="computation"?Y.value=!0:e==="dp"?(M.value=null,ne.value=!0):e==="he"&&(O.value=null,re.value=!0)}async function U(){L.value=!0;try{const[e,l,d,q,se,ue]=await Promise.all([r.execute("privacy protocols --json",8e3).catch(()=>({output:""})),r.execute("privacy dp-mechanisms --json",8e3).catch(()=>({output:""})),r.execute("privacy he-schemes --json",8e3).catch(()=>({output:""})),r.execute("privacy models --limit 100 --json",1e4).catch(()=>({output:""})),r.execute("privacy computations --limit 100 --json",1e4).catch(()=>({output:""})),r.execute("privacy report --json",8e3).catch(()=>({output:""}))]);me.value=de(e.output),ye.value=de(l.output),ve.value=de(d.output),oe.value=ft(q.output),fe.value=bt(se.output),R.value=$t(ue.output)}catch(e){v.error(n("privacy.msg.loadFailed")+": "+(e?.message||e))}finally{L.value=!1}}async function qe(){if(!c.name.trim()){v.warning(n("privacy.msg.modelNameEmpty"));return}j.value=!0;try{const e=[`privacy create-model "${c.name.trim().replace(/"/g,'\\"')}"`];c.modelType.trim()&&e.push(`--type "${c.modelType.trim().replace(/"/g,'\\"')}"`),c.architecture.trim()&&e.push(`--arch "${c.architecture.trim().replace(/"/g,'\\"')}"`),c.rounds!=null&&e.push(`--rounds ${c.rounds}`),c.lr!=null&&e.push(`--lr ${c.lr}`),c.participants!=null&&e.push(`--participants ${c.participants}`),e.push("--json");const{output:l}=await r.execute(e.join(" "),12e3);if(/error|失败/i.test(l)&&!/"modelId"/.test(l)){v.error(n("privacy.msg.modelCreateFailed")+": "+l.slice(0,120));return}v.success(n("privacy.msg.modelCreateSuccess")),Q.value=!1,he(),await U()}catch(e){v.error(n("privacy.msg.modelCreateFailed")+": "+(e?.message||e))}finally{j.value=!1}}async function He(){if(!$.type.trim()){v.warning(n("privacy.msg.computationTypeEmpty"));return}j.value=!0;try{const e=[`privacy create-computation "${$.type.trim().replace(/"/g,'\\"')}"`];if(e.push(`--protocol ${$.protocol}`),$.participants.trim()){const d=$.participants.split(/[,\s]+/).filter(Boolean).join(",");d&&e.push(`--participants "${d}"`)}$.threshold!=null&&e.push(`--threshold ${$.threshold}`),e.push("--json");const{output:l}=await r.execute(e.join(" "),1e4);if(/error|失败|invalid/i.test(l)&&!/"computationId"/.test(l)){v.error(n("privacy.msg.computationCreateFailed")+": "+l.slice(0,120));return}v.success(n("privacy.msg.computationCreateSuccess")),Y.value=!1,_e(),ie.value="computations",await U()}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 U()}catch(l){v.error(n("privacy.msg.trainFailed")+": "+(l?.message||l))}finally{ae.value=""}}async function Je(e){try{const{output:l}=await r.execute(`privacy fail-model ${e.id} --json`,8e3);if(/error/i.test(l)&&!/"failed"/.test(l)){v.error(n("privacy.msg.failMarkFailed")+": "+l.slice(0,120));return}v.success(n("privacy.msg.failMarkSuccess")),await U()}catch(l){v.error(n("privacy.msg.failMarkFailed")+": "+(l?.message||l))}}async function De(e){le.value=e.id;try{const{output:l}=await r.execute(`privacy submit-share ${e.id} --json`,1e4);if(/error|失败/i.test(l)&&!/"submitted"/.test(l)){v.error(n("privacy.msg.submitFailed")+": "+l.slice(0,120));return}v.success(n("privacy.msg.submitSuccess")),await U()}catch(l){v.error(n("privacy.msg.submitFailed")+": "+(l?.message||l))}finally{le.value=""}}async function Ke(){if(!S.data.trim()){v.warning(n("privacy.msg.dataEmpty"));return}ee.value=!0,M.value=null;try{const e=["privacy dp-publish"];e.push(`--data ${JSON.stringify(S.data.trim())}`),e.push(`--mechanism ${S.mechanism}`),S.epsilon!=null&&e.push(`--epsilon ${S.epsilon}`),S.delta!=null&&e.push(`--delta ${S.delta}`),S.sensitivity!=null&&e.push(`--sensitivity ${S.sensitivity}`),e.push("--json");const{output:l}=await r.execute(e.join(" "),1e4),d=ht(l);if(!d){v.error(n("privacy.msg.dpFailed")+": "+l.slice(0,120));return}M.value=d,d.published?(v.success(n("privacy.msg.dpSuccess")),await U()):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=_t(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 rt(U),(e,l)=>{const d=g("a-button"),q=g("a-menu-item"),se=g("a-menu"),ue=g("a-dropdown"),We=g("a-space"),B=g("a-statistic"),F=g("a-card"),w=g("a-col"),ke=g("a-row"),N=g("a-tag"),P=g("a-radio-button"),H=g("a-radio-group"),$e=g("a-progress"),Qe=g("a-popconfirm"),Se=g("a-table"),Ce=g("a-tab-pane"),Ye=g("a-tabs"),K=g("a-input"),x=g("a-form-item"),E=g("a-input-number"),G=g("a-form"),X=g("a-modal"),Ge=g("a-select-option"),Xe=g("a-select"),xe=g("a-textarea");return u(),m("div",null,[f("div",St,[f("div",null,[f("h2",Ct,s(e.$t("privacy.title")),1),f("p",xt,s(e.$t("privacy.subtitle")),1)]),a(We,null,{default:o(()=>[a(d,{loading:L.value,onClick:U},{icon:o(()=>[a(_(lt))]),default:o(()=>[y(" "+s(e.$t("privacy.refresh")),1)]),_:1},8,["loading"]),a(ue,{trigger:["click"]},{overlay:o(()=>[a(se,{onClick:Ee},{default:o(()=>[a(q,{key:"model"},{default:o(()=>[a(_(pe)),y(" "+s(e.$t("privacy.actions.model")),1)]),_:1}),a(q,{key:"computation"},{default:o(()=>[a(_(ce)),y(" "+s(e.$t("privacy.actions.computation")),1)]),_:1}),a(q,{key:"dp"},{default:o(()=>[a(_(Le)),y(" "+s(e.$t("privacy.actions.dp")),1)]),_:1}),a(q,{key:"he"},{default:o(()=>[a(_(it)),y(" "+s(e.$t("privacy.actions.he")),1)]),_:1})]),_:1})]),default:o(()=>[a(d,{type:"primary"},{icon:o(()=>[a(_(ot))]),default:o(()=>[y(" "+s(e.$t("privacy.actionDropdown")),1)]),_:1})]),_:1})]),_:1})]),a(ke,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:o(()=>[a(w,{xs:12,sm:8,lg:5},{default:o(()=>[a(F,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(B,{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(B,{title:e.$t("privacy.stats.avgAccuracy"),value:Fe.value,precision:1,suffix:"%","value-style":{color:R.value.federatedLearning.avgAccuracy>=.8?"#52c41a":"#faad14",fontSize:"20px"}},{prefix:o(()=>[a(_(nt))]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),a(w,{xs:12,sm:8,lg:5},{default:o(()=>[a(F,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(B,{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(B,{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",zt,"/ "+s(R.value.privacyBudget.limit),1)]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),a(w,{xs:24,sm:8,lg:4},{default:o(()=>[a(F,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(B,{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",Lt,s(t.name),1),f("span",Rt,s(t.description),1)]))),128))]),_:1},8,["title"])]),_:1}),a(w,{xs:24,md:8},{default:o(()=>[a(F,{title:e.$t("privacy.catalog.dp"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"},"body-style":{padding:"12px 16px"}},{default:o(()=>[(u(!0),m(z,null,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",At,s(t.name),1),f("span",Mt,s(t.description),1)]))),128))]),_:1},8,["title"])]),_:1}),a(w,{xs:24,md:8},{default:o(()=>[a(F,{title:e.$t("privacy.catalog.he"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"},"body-style":{padding:"12px 16px"}},{default:o(()=>[(u(!0),m(z,null,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",jt,s(t.name),1),f("span",Ft,s(t.description),1)]))),128))]),_:1},8,["title"])]),_:1})]),_:1}),a(Ye,{activeKey:ie.value,"onUpdate:activeKey":l[3]||(l[3]=t=>ie.value=t),class:"privacy-tabs"},{default:o(()=>[a(Ce,{key:"models",tab:e.$t("privacy.tabs.models")},{default:o(()=>[f("div",Tt,[a(H,{value:D.value,"onUpdate:value":l[0]||(l[0]=t=>D.value=t),size:"small","button-style":"solid"},{default:o(()=>[a(P,{value:""},{default:o(()=>[y(s(e.$t("privacy.filter.all")),1)]),_:1}),(u(!0),m(z,null,T(_(ut),t=>(u(),C(P,{key:t,value:t},{default:o(()=>[y(s(ge(t)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),a(Se,{columns:Me.value,"data-source":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",Ot,s(p.name),1),f("div",Pt,s(p.modelType)+" / "+s(p.architecture),1)],64)):k("",!0),t.key==="status"?(u(),C(N,{key:1,color:Ue(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",Ut,s(e.$t("privacy.table.rounds",{cur:p.currentRound,total:p.totalRounds})),1)],64)):k("",!0),t.key==="accuracy"?(u(),m(z,{key:3},[f("span",{style:st({color:we(p.accuracy),fontFamily:"monospace"})},s((p.accuracy*100).toFixed(1))+"% ",5),p.loss!=null?(u(),m("div",Bt," loss "+s(p.loss.toFixed(3)),1)):k("",!0)],64)):k("",!0),t.key==="participants"?(u(),C(N,{key:4,color:"blue",style:{"font-size":"11px"}},{default:o(()=>[y(s(p.participantCount),1)]),_:2},1024)):k("",!0),t.key==="budget"?(u(),m("span",wt,s(p.privacyBudgetSpent.toFixed(3)),1)):k("",!0),t.key==="updatedAt"?(u(),m("span",Nt,s(_(Ae)(p.updatedAt)),1)):k("",!0),t.key==="action"?(u(),m(z,{key:7},[Ne(p)?(u(),C(d,{key:0,size:"small",type:"link",loading:ae.value===p.id,onClick:ze=>Ie(p)},{default:o(()=>[y(s(e.$t("privacy.table.trainOne")),1)]),_:1},8,["loading","onClick"])):k("",!0),p.status!=="failed"&&p.status!=="completed"?(u(),C(Qe,{key:1,title:e.$t("privacy.table.failConfirm"),"ok-text":e.$t("privacy.table.failOk"),"cancel-text":e.$t("privacy.table.failCancel"),onConfirm:ze=>Je(p)},{default:o(()=>[a(d,{size:"small",type:"link",danger:""},{default:o(()=>[y(s(e.$t("privacy.table.failMark")),1)]),_:1})]),_:1},8,["title","ok-text","cancel-text","onConfirm"])):k("",!0)],64)):k("",!0)]),emptyText:o(()=>[f("div",Et,[a(_(pe),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),y(" "+s(D.value?e.$t("privacy.table.emptyModelsFiltered"):e.$t("privacy.table.emptyModels")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),a(Ce,{key:"computations",tab:e.$t("privacy.tabs.computations")},{default:o(()=>[f("div",qt,[a(H,{value:V.value,"onUpdate:value":l[1]||(l[1]=t=>V.value=t),size:"small"},{default:o(()=>[a(P,{value:""},{default:o(()=>[y(s(e.$t("privacy.filter.allProtocols")),1)]),_:1}),(u(!0),m(z,null,T(_(Re),t=>(u(),C(P,{key:t,value:t},{default:o(()=>[y(s(t),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),a(H,{value:W.value,"onUpdate:value":l[2]||(l[2]=t=>W.value=t),size:"small"},{default:o(()=>[a(P,{value:""},{default:o(()=>[y(s(e.$t("privacy.filter.allStatuses")),1)]),_:1}),(u(!0),m(z,null,T(_(pt),t=>(u(),C(P,{key:t,value:t},{default:o(()=>[y(s(be(t)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),a(Se,{columns:je.value,"data-source":Pe.value,pagination:{pageSize:20,showTotal:t=>e.$t("privacy.table.totalSuffix",{n:t})},size:"small",loading:L.value,style:{background:"var(--bg-card)"}},{bodyCell:o(({column:t,record:p})=>[t.key==="type"?(u(),m("span",Ht,s(p.computationType),1)):k("",!0),t.key==="protocol"?(u(),C(N,{key:1,color:"purple",style:{"font-family":"monospace"}},{default:o(()=>[y(s(p.protocol),1)]),_:2},1024)):k("",!0),t.key==="progress"?(u(),C($e,{key:2,percent:p.sharesRequired?Math.round(100*p.sharesReceived/p.sharesRequired):0,size:"small",status:p.status==="completed"?"success":"active",format:()=>`${p.sharesReceived}/${p.sharesRequired}`},null,8,["percent","status","format"])):k("",!0),t.key==="status"?(u(),C(N,{key:3,color:Be(p.status)},{default:o(()=>[y(s(be(p.status)),1)]),_:2},1032,["color"])):k("",!0),t.key==="time"?(u(),m(z,{key:4},[p.computationTimeMs!=null?(u(),m("span",It,s(p.computationTimeMs)+" ms ",1)):(u(),m("span",Jt,"—"))],64)):k("",!0),t.key==="createdAt"?(u(),m("span",Dt,s(_(Ae)(p.createdAt)),1)):k("",!0),t.key==="action"?(u(),m(z,{key:6},[p.status!=="completed"?(u(),C(d,{key:0,size:"small",type:"link",loading:le.value===p.id,onClick:ze=>De(p)},{default:o(()=>[y(s(e.$t("privacy.table.submitShare")),1)]),_:1},8,["loading","onClick"])):(u(),m("span",Kt," hash "+s(p.resultHash?.slice(0,8)||"—"),1))],64)):k("",!0)]),emptyText:o(()=>[f("div",Vt,[a(_(ce),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),y(" "+s(e.$t("privacy.table.emptyComputations")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"])]),_:1},8,["activeKey"]),a(X,{open:Q.value,"onUpdate:open":l[10]||(l[10]=t=>Q.value=t),title:e.$t("privacy.model_modal.title"),"confirm-loading":j.value,width:540,"ok-text":e.$t("privacy.model_modal.ok"),"cancel-text":e.$t("privacy.model_modal.cancel"),onOk:qe,onCancel:he},{default:o(()=>[a(G,{"label-col":{span:6},"wrapper-col":{span:18},style:{"margin-top":"16px"}},{default:o(()=>[a(x,{label:e.$t("privacy.model_modal.nameLabel"),required:""},{default:o(()=>[a(K,{value:c.name,"onUpdate:value":l[4]||(l[4]=t=>c.name=t),placeholder:e.$t("privacy.model_modal.namePlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.model_modal.typeLabel")},{default:o(()=>[a(K,{value:c.modelType,"onUpdate:value":l[5]||(l[5]=t=>c.modelType=t),placeholder:e.$t("privacy.model_modal.typePlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.model_modal.archLabel")},{default:o(()=>[a(K,{value:c.architecture,"onUpdate:value":l[6]||(l[6]=t=>c.architecture=t),placeholder:e.$t("privacy.model_modal.archPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.model_modal.roundsLabel")},{default:o(()=>[a(E,{value:c.rounds,"onUpdate:value":l[7]||(l[7]=t=>c.rounds=t),min:1,max:1e3,style:{width:"100%"}},null,8,["value"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.model_modal.lrLabel")},{default:o(()=>[a(E,{value:c.lr,"onUpdate:value":l[8]||(l[8]=t=>c.lr=t),min:0,max:1,step:.001,style:{width:"100%"}},null,8,["value"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.model_modal.participantsLabel")},{default:o(()=>[a(E,{value:c.participants,"onUpdate:value":l[9]||(l[9]=t=>c.participants=t),min:0,max:1e3,style:{width:"100%"}},null,8,["value"])]),_:1},8,["label"])]),_:1})]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),a(X,{open:Y.value,"onUpdate:open":l[15]||(l[15]=t=>Y.value=t),title:e.$t("privacy.computation_modal.title"),"confirm-loading":j.value,width:520,"ok-text":e.$t("privacy.computation_modal.ok"),"cancel-text":e.$t("privacy.computation_modal.cancel"),onOk:He,onCancel:_e},{default:o(()=>[a(G,{"label-col":{span:6},"wrapper-col":{span:18},style:{"margin-top":"16px"}},{default:o(()=>[a(x,{label:e.$t("privacy.computation_modal.typeLabel"),required:""},{default:o(()=>[a(K,{value:$.type,"onUpdate:value":l[11]||(l[11]=t=>$.type=t),placeholder:e.$t("privacy.computation_modal.typePlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.computation_modal.protocolLabel")},{default:o(()=>[a(Xe,{value:$.protocol,"onUpdate:value":l[12]||(l[12]=t=>$.protocol=t)},{default:o(()=>[(u(!0),m(z,null,T(_(Re),t=>(u(),C(Ge,{key:t,value:t},{default:o(()=>[y(s(t),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.computation_modal.participantsLabel")},{default:o(()=>[a(xe,{value:$.participants,"onUpdate:value":l[13]||(l[13]=t=>$.participants=t),placeholder:e.$t("privacy.computation_modal.participantsPlaceholder"),"auto-size":{minRows:2,maxRows:4}},null,8,["value","placeholder"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.computation_modal.thresholdLabel")},{default:o(()=>[a(E,{value:$.threshold,"onUpdate:value":l[14]||(l[14]=t=>$.threshold=t),min:2,max:100,placeholder:e.$t("privacy.computation_modal.thresholdPlaceholder"),style:{width:"100%"}},null,8,["value","placeholder"])]),_:1},8,["label"])]),_:1})]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),a(X,{open:ne.value,"onUpdate:open":l[21]||(l[21]=t=>ne.value=t),title:e.$t("privacy.dp_modal.title"),"confirm-loading":ee.value,width:520,"ok-text":e.$t("privacy.dp_modal.ok"),"cancel-text":e.$t("privacy.dp_modal.cancel"),onOk:Ke},{default:o(()=>[a(G,{"label-col":{span:6},"wrapper-col":{span:18},style:{"margin-top":"16px"}},{default:o(()=>[a(x,{label:e.$t("privacy.dp_modal.dataLabel"),required:""},{default:o(()=>[a(K,{value:S.data,"onUpdate:value":l[16]||(l[16]=t=>S.data=t),placeholder:e.$t("privacy.dp_modal.dataPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.dp_modal.mechanismLabel")},{default:o(()=>[a(H,{value:S.mechanism,"onUpdate:value":l[17]||(l[17]=t=>S.mechanism=t)},{default:o(()=>[(u(!0),m(z,null,T(_(ct),t=>(u(),C(P,{key:t,value:t},{default:o(()=>[y(s(t),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.dp_modal.epsilonLabel")},{default:o(()=>[a(E,{value:S.epsilon,"onUpdate:value":l[18]||(l[18]=t=>S.epsilon=t),min:0,step:.01,style:{width:"100%"}},null,8,["value"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.dp_modal.deltaLabel")},{default:o(()=>[a(E,{value:S.delta,"onUpdate:value":l[19]||(l[19]=t=>S.delta=t),min:0,step:1e-6,style:{width:"100%"}},null,8,["value"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.dp_modal.sensitivityLabel")},{default:o(()=>[a(E,{value:S.sensitivity,"onUpdate:value":l[20]||(l[20]=t=>S.sensitivity=t),min:0,step:.1,style:{width:"100%"}},null,8,["value"])]),_:1},8,["label"])]),_:1}),M.value?(u(),C(F,{key:0,size:"small",style:{background:"var(--bg-base)","margin-top":"8px"}},{default:o(()=>[M.value.published?(u(),m(z,{key:0},[a(B,{title:e.$t("privacy.dp_modal.noisedTitle"),value:M.value.data,precision:3,"value-style":{color:"#52c41a"}},null,8,["title","value"]),f("div",Wt,[f("div",null,s(e.$t("privacy.dp_modal.spentLine",{n:M.value.budgetSpent.toFixed(3)})),1),f("div",null,s(e.$t("privacy.dp_modal.remainingLine",{n:M.value.budgetRemaining.toFixed(3)})),1),f("div",null,s(e.$t("privacy.dp_modal.mechanismLine",{name:M.value.mechanism,epsilon:M.value.epsilon})),1)])],64)):(u(),C(B,{key:1,title:e.$t("privacy.dp_modal.failedTitle"),value:M.value.reason||"unknown","value-style":{color:"#ff4d4f"}},null,8,["title","value"]))]),_:1})):k("",!0)]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),a(X,{open:re.value,"onUpdate:open":l[25]||(l[25]=t=>re.value=t),title:e.$t("privacy.he_modal.title"),"confirm-loading":te.value,width:500,"ok-text":e.$t("privacy.he_modal.ok"),"cancel-text":e.$t("privacy.he_modal.cancel"),onOk:Ve},{default:o(()=>[a(G,{"label-col":{span:6},"wrapper-col":{span:18},style:{"margin-top":"16px"}},{default:o(()=>[a(x,{label:e.$t("privacy.he_modal.dataLabel"),required:""},{default:o(()=>[a(xe,{value:A.data,"onUpdate:value":l[22]||(l[22]=t=>A.data=t),placeholder:e.$t("privacy.he_modal.dataPlaceholder"),"auto-size":{minRows:2,maxRows:4}},null,8,["value","placeholder"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.he_modal.operationLabel")},{default:o(()=>[a(H,{value:A.operation,"onUpdate:value":l[23]||(l[23]=t=>A.operation=t)},{default:o(()=>[(u(!0),m(z,null,T(_(mt),t=>(u(),C(P,{key:t,value:t},{default:o(()=>[y(s(t),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.he_modal.schemeLabel")},{default:o(()=>[a(H,{value:A.scheme,"onUpdate:value":l[24]||(l[24]=t=>A.scheme=t)},{default:o(()=>[(u(!0),m(z,null,T(_(dt),t=>(u(),C(P,{key:t,value:t},{default:o(()=>[y(s(t),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"])]),_:1}),O.value?(u(),C(F,{key:0,size:"small",style:{background:"var(--bg-base)","margin-top":"8px"}},{default:o(()=>[a(B,{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(),C(N,{key:0,color:"green",style:{"margin-top":"4px","font-size":"10px"}},{default:o(()=>[y(s(e.$t("privacy.he_modal.encrypted")),1)]),_:1})):k("",!0)])]),_:1})):k("",!0)]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"])])}}},ta=Ze(Yt,[["__scopeId","data-v-fe89c543"]]);export{ta as default};
1
+ import{_ as Ze,u as et,b as tt,d as v}from"./index-19d37fVJ.js";import{s as at}from"./community-parser-CO25nZFt.js";import{R as lt,ar as ot,$ as pe,z as ce,V as Le,J as it,aX as nt}from"./icons-BFHq5fEF.js";import{o as rt,M as m,R as f,P as s,c as a,N as o,K as g,r as h,L as u,O as y,u as _,F as z,Y as T,Q as C,S as k,_ as st,f as J,a as Z}from"./vendor-M5lGV-wr.js";function H(i){const r=at(i);if(!r)return null;try{return JSON.parse(r)}catch{}const n=r.match(/\{[\s\S]*\}|\[[\s\S]*\]/);if(!n)return null;try{return JSON.parse(n[0])}catch{return null}}const ut=Object.freeze(["initializing","training","aggregating","completed","failed"]),pt=Object.freeze(["pending","computing","completed"]),Re=Object.freeze(["shamir","beaver","gmw"]),ct=Object.freeze(["laplace","gaussian","exponential"]),dt=Object.freeze(["paillier","bfv","ckks"]),mt=Object.freeze(["sum","product","mean","count"]);function b(i,r=0){return typeof i=="number"&&Number.isFinite(i)?i:r}function yt(i,r=0){if(!i||typeof i!="object")return null;const n=i.id||"";return n?{key:n,id:n,name:String(i.name||n),description:String(i.description||""),_idx:r}:null}function de(i){const r=H(i);return Array.isArray(r)?r.map(yt).filter(Boolean):[]}function vt(i,r=0){if(!i||typeof i!="object")return null;const n=i.id||"";return n?{key:n,id:n,name:String(i.name||""),modelType:i.modelType??i.model_type??"neural_network",architecture:String(i.architecture||""),status:String(i.status||"initializing").toLowerCase(),currentRound:b(i.currentRound??i.current_round,0),totalRounds:b(i.totalRounds??i.total_rounds,0),participantCount:b(i.participantCount??i.participant_count,0),accuracy:b(i.accuracy,0),loss:i.loss==null?null:b(i.loss,null),learningRate:b(i.learningRate??i.learning_rate,0),aggregationStrategy:i.aggregationStrategy??i.aggregation_strategy??"",privacyBudgetSpent:b(i.privacyBudgetSpent??i.privacy_budget_spent,0),createdAt:i.createdAt??i.created_at??null,updatedAt:i.updatedAt??i.updated_at??null,_idx:r}:null}function ft(i){const r=H(i);return Array.isArray(r)?r.map(vt).filter(Boolean):[]}function gt(i,r=0){if(!i||typeof i!="object")return null;const n=i.id||"";if(!n)return null;let L=i.participantIds??i.participant_ids??[];if(typeof L=="string")try{L=JSON.parse(L)}catch{L=[]}return Array.isArray(L)||(L=[]),{key:n,id:n,computationType:i.computationType??i.computation_type??"",protocol:String(i.protocol||"shamir").toLowerCase(),participantCount:b(i.participantCount??i.participant_count,0),participantIds:L,resultHash:i.resultHash??i.result_hash??null,status:String(i.status||"pending").toLowerCase(),sharesReceived:b(i.sharesReceived??i.shares_received,0),sharesRequired:b(i.sharesRequired??i.shares_required,0),computationTimeMs:i.computationTimeMs??i.computation_time_ms??null,errorMessage:i.errorMessage??i.error_message??"",createdAt:i.createdAt??i.created_at??null,completedAt:i.completedAt??i.completed_at??null,_idx:r}}function bt(i){const r=H(i);return Array.isArray(r)?r.map(gt).filter(Boolean):[]}function ht(i){const r=H(i);return!r||typeof r!="object"||Array.isArray(r)?null:{published:!!r.published,reason:r.reason||null,data:r.data??null,epsilon:b(r.epsilon,0),delta:b(r.delta,0),mechanism:String(r.mechanism||""),budgetSpent:b(r.budgetSpent??r.budget_spent,0),budgetRemaining:b(r.budgetRemaining??r.budget_remaining,0)}}function _t(i){const r=H(i);return!r||typeof r!="object"||Array.isArray(r)?null:{result:r.result??null,operation:String(r.operation||""),scheme:String(r.scheme||""),inputCount:b(r.inputCount??r.input_count,0),encrypted:r.encrypted!==!1}}const kt={privacyBudget:{spent:0,limit:0,remaining:0,exhausted:!1},federatedLearning:{totalModels:0,completed:0,training:0,avgAccuracy:0},mpc:{totalComputations:0,completed:0,pending:0,byProtocol:{}}};function $t(i){const r=JSON.parse(JSON.stringify(kt)),n=H(i);if(!n||typeof n!="object"||Array.isArray(n))return r;if(n.privacyBudget&&typeof n.privacyBudget=="object"&&(r.privacyBudget.spent=b(n.privacyBudget.spent,0),r.privacyBudget.limit=b(n.privacyBudget.limit,0),r.privacyBudget.remaining=b(n.privacyBudget.remaining,0),r.privacyBudget.exhausted=!!n.privacyBudget.exhausted),n.federatedLearning&&typeof n.federatedLearning=="object"&&(r.federatedLearning.totalModels=b(n.federatedLearning.totalModels,0),r.federatedLearning.completed=b(n.federatedLearning.completed,0),r.federatedLearning.training=b(n.federatedLearning.training,0),r.federatedLearning.avgAccuracy=b(n.federatedLearning.avgAccuracy,0)),n.mpc&&typeof n.mpc=="object"&&(r.mpc.totalComputations=b(n.mpc.totalComputations,0),r.mpc.completed=b(n.mpc.completed,0),r.mpc.pending=b(n.mpc.pending,0),n.mpc.byProtocol&&typeof n.mpc.byProtocol=="object"))for(const[L,j]of Object.entries(n.mpc.byProtocol))typeof j=="number"&&Number.isFinite(j)&&(r.mpc.byProtocol[L]=j);return r}function Ae(i){if(i==null||i==="")return"—";const r=typeof i=="number"?new Date(i):new Date(String(i));return isNaN(r.getTime())?String(i):r.toLocaleString("zh-CN",{hour12:!1})}const St={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},Ct={class:"page-title"},xt={class:"page-sub"},zt={style:{"font-size":"11px",color:"var(--text-secondary)"}},Lt={class:"catalog-name"},Rt={class:"catalog-desc"},At={class:"catalog-name"},Mt={class:"catalog-desc"},jt={class:"catalog-name"},Ft={class:"catalog-desc"},Tt={class:"filter-bar"},Ot={style:{color:"var(--text-primary)","font-weight":"500"}},Pt={style:{color:"var(--text-secondary)","font-size":"11px","margin-top":"2px"}},Bt={style:{"font-size":"11px",color:"var(--text-secondary)"}},Ut={key:0,style:{"font-size":"11px",color:"var(--text-secondary)"}},wt={key:5,style:{"font-family":"monospace",color:"var(--text-secondary)"}},Nt={key:6,style:{color:"var(--text-secondary)","font-size":"11px"}},Et={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},qt={class:"filter-bar"},It={key:0,style:{color:"var(--text-primary)","font-family":"monospace","font-weight":"500"}},Jt={key:0,style:{"font-family":"monospace",color:"var(--text-secondary)","font-size":"12px"}},Ht={key:1,style:{color:"var(--text-muted)"}},Dt={key:5,style:{color:"var(--text-secondary)","font-size":"11px"}},Vt={key:1,style:{color:"var(--text-muted)","font-size":"11px","font-family":"monospace"}},Kt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},Qt={style:{"margin-top":"12px","font-size":"12px",color:"var(--text-secondary)"}},Wt={style:{"margin-top":"12px","font-size":"12px",color:"var(--text-secondary)"}},Xt={__name:"Privacy",setup(i){const r=et(),{t:n}=tt(),L=h(!1),j=h(!1),ee=h(!1),te=h(!1),ae=h(""),le=h(""),me=h([]),ye=h([]),ve=h([]),oe=h([]),fe=h([]),R=h({privacyBudget:{spent:0,limit:0,remaining:0,exhausted:!1},federatedLearning:{totalModels:0,completed:0,training:0,avgAccuracy:0},mpc:{totalComputations:0,completed:0,pending:0,byProtocol:{}}}),ie=h("models"),D=h(""),K=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}),S=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=J(()=>[{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=J(()=>[{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=J(()=>R.value.federatedLearning.avgAccuracy*100),Te=J(()=>{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=J(()=>D.value?oe.value.filter(e=>e.status===D.value):oe.value),Pe=J(()=>{let e=fe.value;return K.value&&(e=e.filter(l=>l.protocol===K.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=ft(q.output),fe.value=bt(se.output),R.value=$t(ue.output)}catch(e){v.error(n("privacy.msg.loadFailed")+": "+(e?.message||e))}finally{L.value=!1}}async function qe(){if(!c.name.trim()){v.warning(n("privacy.msg.modelNameEmpty"));return}j.value=!0;try{const e=[`privacy create-model "${c.name.trim().replace(/"/g,'\\"')}"`];c.modelType.trim()&&e.push(`--type "${c.modelType.trim().replace(/"/g,'\\"')}"`),c.architecture.trim()&&e.push(`--arch "${c.architecture.trim().replace(/"/g,'\\"')}"`),c.rounds!=null&&e.push(`--rounds ${c.rounds}`),c.lr!=null&&e.push(`--lr ${c.lr}`),c.participants!=null&&e.push(`--participants ${c.participants}`),e.push("--json");const{output:l}=await r.execute(e.join(" "),12e3);if(/error|失败/i.test(l)&&!/"modelId"/.test(l)){v.error(n("privacy.msg.modelCreateFailed")+": "+l.slice(0,120));return}v.success(n("privacy.msg.modelCreateSuccess")),W.value=!1,he(),await B()}catch(e){v.error(n("privacy.msg.modelCreateFailed")+": "+(e?.message||e))}finally{j.value=!1}}async function Ie(){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 Je(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 He(e){try{const{output:l}=await r.execute(`privacy fail-model ${e.id} --json`,8e3);if(/error/i.test(l)&&!/"failed"/.test(l)){v.error(n("privacy.msg.failMarkFailed")+": "+l.slice(0,120));return}v.success(n("privacy.msg.failMarkSuccess")),await B()}catch(l){v.error(n("privacy.msg.failMarkFailed")+": "+(l?.message||l))}}async function De(e){le.value=e.id;try{const{output:l}=await r.execute(`privacy submit-share ${e.id} --json`,1e4);if(/error|失败/i.test(l)&&!/"submitted"/.test(l)){v.error(n("privacy.msg.submitFailed")+": "+l.slice(0,120));return}v.success(n("privacy.msg.submitSuccess")),await B()}catch(l){v.error(n("privacy.msg.submitFailed")+": "+(l?.message||l))}finally{le.value=""}}async function Ve(){if(!S.data.trim()){v.warning(n("privacy.msg.dataEmpty"));return}ee.value=!0,M.value=null;try{const e=["privacy dp-publish"];e.push(`--data ${JSON.stringify(S.data.trim())}`),e.push(`--mechanism ${S.mechanism}`),S.epsilon!=null&&e.push(`--epsilon ${S.epsilon}`),S.delta!=null&&e.push(`--delta ${S.delta}`),S.sensitivity!=null&&e.push(`--sensitivity ${S.sensitivity}`),e.push("--json");const{output:l}=await r.execute(e.join(" "),1e4),d=ht(l);if(!d){v.error(n("privacy.msg.dpFailed")+": "+l.slice(0,120));return}M.value=d,d.published?(v.success(n("privacy.msg.dpSuccess")),await B()):v.warning(n("privacy.msg.dpRejected",{reason:d.reason||"unknown"}))}catch(e){v.error(n("privacy.msg.dpFailed")+": "+(e?.message||e))}finally{ee.value=!1}}async function Ke(){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=_t(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 rt(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"),I=g("a-radio-group"),$e=g("a-progress"),We=g("a-popconfirm"),Se=g("a-table"),Ce=g("a-tab-pane"),Xe=g("a-tabs"),V=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",St,[f("div",null,[f("h2",Ct,s(e.$t("privacy.title")),1),f("p",xt,s(e.$t("privacy.subtitle")),1)]),a(Qe,null,{default:o(()=>[a(d,{loading:L.value,onClick:B},{icon:o(()=>[a(_(lt))]),default:o(()=>[y(" "+s(e.$t("privacy.refresh")),1)]),_:1},8,["loading"]),a(ue,{trigger:["click"]},{overlay:o(()=>[a(se,{onClick:Ee},{default:o(()=>[a(q,{key:"model"},{default:o(()=>[a(_(pe)),y(" "+s(e.$t("privacy.actions.model")),1)]),_:1}),a(q,{key:"computation"},{default:o(()=>[a(_(ce)),y(" "+s(e.$t("privacy.actions.computation")),1)]),_:1}),a(q,{key:"dp"},{default:o(()=>[a(_(Le)),y(" "+s(e.$t("privacy.actions.dp")),1)]),_:1}),a(q,{key:"he"},{default:o(()=>[a(_(it)),y(" "+s(e.$t("privacy.actions.he")),1)]),_:1})]),_:1})]),default:o(()=>[a(d,{type:"primary"},{icon:o(()=>[a(_(ot))]),default:o(()=>[y(" "+s(e.$t("privacy.actionDropdown")),1)]),_:1})]),_:1})]),_:1})]),a(ke,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:o(()=>[a(w,{xs:12,sm:8,lg:5},{default:o(()=>[a(F,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(U,{title:e.$t("privacy.stats.models"),value:R.value.federatedLearning.totalModels,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:o(()=>[a(_(pe))]),_:1},8,["title","value"])]),_:1})]),_:1}),a(w,{xs:12,sm:8,lg:5},{default:o(()=>[a(F,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(U,{title:e.$t("privacy.stats.avgAccuracy"),value:Fe.value,precision:1,suffix:"%","value-style":{color:R.value.federatedLearning.avgAccuracy>=.8?"#52c41a":"#faad14",fontSize:"20px"}},{prefix:o(()=>[a(_(nt))]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),a(w,{xs:12,sm:8,lg:5},{default:o(()=>[a(F,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(U,{title:e.$t("privacy.stats.computations"),value:R.value.mpc.totalComputations,"value-style":{color:"#722ed1",fontSize:"20px"}},{prefix:o(()=>[a(_(ce))]),_:1},8,["title","value"])]),_:1})]),_:1}),a(w,{xs:12,sm:8,lg:5},{default:o(()=>[a(F,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(U,{title:e.$t("privacy.stats.budget"),value:R.value.privacyBudget.remaining,precision:2,"value-style":{color:Te.value,fontSize:"20px"}},{prefix:o(()=>[a(_(Le))]),suffix:o(()=>[f("span",zt,"/ "+s(R.value.privacyBudget.limit),1)]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),a(w,{xs:24,sm:8,lg:4},{default:o(()=>[a(F,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(U,{title:e.$t("privacy.stats.budgetState"),value:R.value.privacyBudget.exhausted?e.$t("privacy.stats.exhausted"):e.$t("privacy.stats.ample"),"value-style":{color:R.value.privacyBudget.exhausted?"#ff4d4f":"#52c41a",fontSize:"20px"}},null,8,["title","value","value-style"])]),_:1})]),_:1})]),_:1}),a(ke,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:o(()=>[a(w,{xs:24,md:8},{default:o(()=>[a(F,{title:e.$t("privacy.catalog.protocols"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"},"body-style":{padding:"12px 16px"}},{default:o(()=>[(u(!0),m(z,null,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",Lt,s(t.name),1),f("span",Rt,s(t.description),1)]))),128))]),_:1},8,["title"])]),_:1}),a(w,{xs:24,md:8},{default:o(()=>[a(F,{title:e.$t("privacy.catalog.dp"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"},"body-style":{padding:"12px 16px"}},{default:o(()=>[(u(!0),m(z,null,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",At,s(t.name),1),f("span",Mt,s(t.description),1)]))),128))]),_:1},8,["title"])]),_:1}),a(w,{xs:24,md:8},{default:o(()=>[a(F,{title:e.$t("privacy.catalog.he"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"},"body-style":{padding:"12px 16px"}},{default:o(()=>[(u(!0),m(z,null,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",jt,s(t.name),1),f("span",Ft,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(Ce,{key:"models",tab:e.$t("privacy.tabs.models")},{default:o(()=>[f("div",Tt,[a(I,{value:D.value,"onUpdate:value":l[0]||(l[0]=t=>D.value=t),size:"small","button-style":"solid"},{default:o(()=>[a(P,{value:""},{default:o(()=>[y(s(e.$t("privacy.filter.all")),1)]),_:1}),(u(!0),m(z,null,T(_(ut),t=>(u(),C(P,{key:t,value:t},{default:o(()=>[y(s(ge(t)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),a(Se,{columns:Me.value,"data-source":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",Ot,s(p.name),1),f("div",Pt,s(p.modelType)+" / "+s(p.architecture),1)],64)):k("",!0),t.key==="status"?(u(),C(N,{key:1,color:Be(p.status)},{default:o(()=>[y(s(ge(p.status)),1)]),_:2},1032,["color"])):k("",!0),t.key==="progress"?(u(),m(z,{key:2},[a($e,{percent:p.totalRounds?Math.round(100*p.currentRound/p.totalRounds):0,size:"small",status:p.status==="failed"?"exception":p.status==="completed"?"success":"active"},null,8,["percent","status"]),f("div",Bt,s(e.$t("privacy.table.rounds",{cur:p.currentRound,total:p.totalRounds})),1)],64)):k("",!0),t.key==="accuracy"?(u(),m(z,{key:3},[f("span",{style:st({color:we(p.accuracy),fontFamily:"monospace"})},s((p.accuracy*100).toFixed(1))+"% ",5),p.loss!=null?(u(),m("div",Ut," loss "+s(p.loss.toFixed(3)),1)):k("",!0)],64)):k("",!0),t.key==="participants"?(u(),C(N,{key:4,color:"blue",style:{"font-size":"11px"}},{default:o(()=>[y(s(p.participantCount),1)]),_:2},1024)):k("",!0),t.key==="budget"?(u(),m("span",wt,s(p.privacyBudgetSpent.toFixed(3)),1)):k("",!0),t.key==="updatedAt"?(u(),m("span",Nt,s(_(Ae)(p.updatedAt)),1)):k("",!0),t.key==="action"?(u(),m(z,{key:7},[Ne(p)?(u(),C(d,{key:0,size:"small",type:"link",loading:ae.value===p.id,onClick:ze=>Je(p)},{default:o(()=>[y(s(e.$t("privacy.table.trainOne")),1)]),_:1},8,["loading","onClick"])):k("",!0),p.status!=="failed"&&p.status!=="completed"?(u(),C(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=>He(p)},{default:o(()=>[a(d,{size:"small",type:"link",danger:""},{default:o(()=>[y(s(e.$t("privacy.table.failMark")),1)]),_:1})]),_:1},8,["title","ok-text","cancel-text","onConfirm"])):k("",!0)],64)):k("",!0)]),emptyText:o(()=>[f("div",Et,[a(_(pe),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),y(" "+s(D.value?e.$t("privacy.table.emptyModelsFiltered"):e.$t("privacy.table.emptyModels")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),a(Ce,{key:"computations",tab:e.$t("privacy.tabs.computations")},{default:o(()=>[f("div",qt,[a(I,{value:K.value,"onUpdate:value":l[1]||(l[1]=t=>K.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(),C(P,{key:t,value:t},{default:o(()=>[y(s(t),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),a(I,{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(_(pt),t=>(u(),C(P,{key:t,value:t},{default:o(()=>[y(s(be(t)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),a(Se,{columns:je.value,"data-source":Pe.value,pagination:{pageSize:20,showTotal:t=>e.$t("privacy.table.totalSuffix",{n:t})},size:"small",loading:L.value,style:{background:"var(--bg-card)"}},{bodyCell:o(({column:t,record:p})=>[t.key==="type"?(u(),m("span",It,s(p.computationType),1)):k("",!0),t.key==="protocol"?(u(),C(N,{key:1,color:"purple",style:{"font-family":"monospace"}},{default:o(()=>[y(s(p.protocol),1)]),_:2},1024)):k("",!0),t.key==="progress"?(u(),C($e,{key:2,percent:p.sharesRequired?Math.round(100*p.sharesReceived/p.sharesRequired):0,size:"small",status:p.status==="completed"?"success":"active",format:()=>`${p.sharesReceived}/${p.sharesRequired}`},null,8,["percent","status","format"])):k("",!0),t.key==="status"?(u(),C(N,{key:3,color:Ue(p.status)},{default:o(()=>[y(s(be(p.status)),1)]),_:2},1032,["color"])):k("",!0),t.key==="time"?(u(),m(z,{key:4},[p.computationTimeMs!=null?(u(),m("span",Jt,s(p.computationTimeMs)+" ms ",1)):(u(),m("span",Ht,"—"))],64)):k("",!0),t.key==="createdAt"?(u(),m("span",Dt,s(_(Ae)(p.createdAt)),1)):k("",!0),t.key==="action"?(u(),m(z,{key:6},[p.status!=="completed"?(u(),C(d,{key:0,size:"small",type:"link",loading:le.value===p.id,onClick:ze=>De(p)},{default:o(()=>[y(s(e.$t("privacy.table.submitShare")),1)]),_:1},8,["loading","onClick"])):(u(),m("span",Vt," 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(V,{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(V,{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(V,{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:Ie,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(V,{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(),C(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: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.dp_modal.dataLabel"),required:""},{default:o(()=>[a(V,{value:S.data,"onUpdate:value":l[16]||(l[16]=t=>S.data=t),placeholder:e.$t("privacy.dp_modal.dataPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.dp_modal.mechanismLabel")},{default:o(()=>[a(I,{value:S.mechanism,"onUpdate:value":l[17]||(l[17]=t=>S.mechanism=t)},{default:o(()=>[(u(!0),m(z,null,T(_(ct),t=>(u(),C(P,{key:t,value:t},{default:o(()=>[y(s(t),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.dp_modal.epsilonLabel")},{default:o(()=>[a(E,{value:S.epsilon,"onUpdate:value":l[18]||(l[18]=t=>S.epsilon=t),min:0,step:.01,style:{width:"100%"}},null,8,["value"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.dp_modal.deltaLabel")},{default:o(()=>[a(E,{value:S.delta,"onUpdate:value":l[19]||(l[19]=t=>S.delta=t),min:0,step:1e-6,style:{width:"100%"}},null,8,["value"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.dp_modal.sensitivityLabel")},{default:o(()=>[a(E,{value:S.sensitivity,"onUpdate:value":l[20]||(l[20]=t=>S.sensitivity=t),min:0,step:.1,style:{width:"100%"}},null,8,["value"])]),_:1},8,["label"])]),_:1}),M.value?(u(),C(F,{key:0,size:"small",style:{background:"var(--bg-base)","margin-top":"8px"}},{default:o(()=>[M.value.published?(u(),m(z,{key:0},[a(U,{title:e.$t("privacy.dp_modal.noisedTitle"),value:M.value.data,precision:3,"value-style":{color:"#52c41a"}},null,8,["title","value"]),f("div",Qt,[f("div",null,s(e.$t("privacy.dp_modal.spentLine",{n:M.value.budgetSpent.toFixed(3)})),1),f("div",null,s(e.$t("privacy.dp_modal.remainingLine",{n:M.value.budgetRemaining.toFixed(3)})),1),f("div",null,s(e.$t("privacy.dp_modal.mechanismLine",{name:M.value.mechanism,epsilon:M.value.epsilon})),1)])],64)):(u(),C(U,{key:1,title:e.$t("privacy.dp_modal.failedTitle"),value:M.value.reason||"unknown","value-style":{color:"#ff4d4f"}},null,8,["title","value"]))]),_:1})):k("",!0)]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),a(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: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.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(I,{value:A.operation,"onUpdate:value":l[23]||(l[23]=t=>A.operation=t)},{default:o(()=>[(u(!0),m(z,null,T(_(mt),t=>(u(),C(P,{key:t,value:t},{default:o(()=>[y(s(t),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"]),a(x,{label:e.$t("privacy.he_modal.schemeLabel")},{default:o(()=>[a(I,{value:A.scheme,"onUpdate:value":l[24]||(l[24]=t=>A.scheme=t)},{default:o(()=>[(u(!0),m(z,null,T(_(dt),t=>(u(),C(P,{key:t,value:t},{default:o(()=>[y(s(t),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"])]),_:1}),O.value?(u(),C(F,{key:0,size:"small",style:{background:"var(--bg-base)","margin-top":"8px"}},{default:o(()=>[a(U,{title:e.$t("privacy.he_modal.resultTitle"),value:O.value.result,"value-style":{color:"#1677ff"}},null,8,["title","value"]),f("div",Wt,[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(),C(N,{key:0,color:"green",style:{"margin-top":"4px","font-size":"10px"}},{default:o(()=>[y(s(e.$t("privacy.he_modal.encrypted")),1)]),_:1})):k("",!0)])]),_:1})):k("",!0)]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"])])}}},ta=Ze(Xt,[["__scopeId","data-v-fe89c543"]]);export{ta as default};
@@ -1,2 +1,2 @@
1
- import{_ as se,b as le,u as re,d as T}from"./index-BAy0ks7N.js";import{u as ne}from"./useFs-C8aeIQfU.js";import{R as ie,f as $,j as S,Y as B,al as H,ap as Y}from"./icons-DY9VpXfa.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 A,Y as K,Z as ue,$ as pe,_ as fe,f as me}from"./vendor-M5lGV-wr.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(),Q=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:""}),U=[{name:"code-project",icon:B},{name:"medical-triage",icon:Y},{name:"agriculture-expert",icon:S},{name:"general-assistant",icon:$},{name:"ai-media-creator",icon:S},{name:"ai-doc-creator",icon:B}],N=me(()=>U.map(s=>({...s,description:t(`projects.templates.${s.name}`)})));function W(s){n.running=s.includes("Desktop app running")||s.includes("Running");const u=s.match(/Edition:\s+(\S+)/i);u&&(n.edition=u[1]);const c=s.match(/LLM:\s+(\S+)\s+\(([^)]+)\)/i);if(c)n.llmProvider=c[1],n.llmModel=c[2];else{const i=s.match(/LLM:\s+(\S+)/i);i&&(n.llmProvider=i[1])}n.setupDone=s.includes("Setup completed");const x=s.match(/Setup completed \(([^)]+)\)/i);if(x)try{n.setupDate=new Date(x[1]).toLocaleDateString("zh-CN")}catch{n.setupDate=""}}function Z(s){const u=[],c=s.split(`
2
- `);for(const x of c){const i=x.match(/^\s*(\S+)\s*[=:]\s*(.+)$/);i&&u.push({key:i[1].trim(),value:i[2].trim()})}I.value=u,R.value=u.length>0}async function O(){F.value=!0;try{const[s,u]=await Promise.all([z.execute("status",15e3),z.execute("config list",15e3)]);W(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 Q.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(A,null,K(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(A,null,K(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(Y))]),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"])])}}},Ae=se(Te,[["__scopeId","data-v-c641f2a0"]]);export{Ae as default};
1
+ import{_ as se,b as le,u as re,d as T}from"./index-19d37fVJ.js";import{u as ne}from"./useFs-BPbHm7Yn.js";import{R as ie,f as $,j as S,Z as B,am as H,aq as Z}from"./icons-BFHq5fEF.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 q,Y as A,Z as ue,$ as pe,_ as fe,f as me}from"./vendor-M5lGV-wr.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(),K=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:""}),Q=[{name:"code-project",icon:B},{name:"medical-triage",icon:Z},{name:"agriculture-expert",icon:S},{name:"general-assistant",icon:$},{name:"ai-media-creator",icon:S},{name:"ai-doc-creator",icon:B}],N=me(()=>Q.map(s=>({...s,description:t(`projects.templates.${s.name}`)})));function U(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 W(s){const u=[],c=s.split(`
2
+ `);for(const x of c){const i=x.match(/^\s*(\S+)\s*[=:]\s*(.+)$/);i&&u.push({key:i[1].trim(),value:i[2].trim()})}I.value=u,R.value=u.length>0}async function O(){F.value=!0;try{const[s,u]=await Promise.all([z.execute("status",15e3),z.execute("config list",15e3)]);U(s.output),W(u.output)}catch(s){console.error("refresh failed:",s)}finally{F.value=!1}}async function Y(){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 K.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(q,null,A(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(q,null,A(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:Y},{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(Z))]),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"])])}}},qe=se(Te,[["__scopeId","data-v-c641f2a0"]]);export{qe as default};
@@ -1,2 +1,2 @@
1
- import{_ as R,u as V,d as k}from"./index-BAy0ks7N.js";import{R as A,F as E}from"./icons-DY9VpXfa.js";import{a as L,r as P,o as T,M as O,R as v,c as a,N as l,K as i,L as M,O as B,u as I,Q as D,S as N,f as W}from"./vendor-M5lGV-wr.js";const c=Object.freeze({rootPath:"",maxSizeMB:1e3,autoSync:!1,syncIntervalSeconds:300});function K(s){if(!s)return null;const e=s.trim();try{return JSON.parse(e)}catch{const o=e.match(/(\{[\s\S]*\}|\[[\s\S]*\])/);if(!o)return null;try{return JSON.parse(o[1])}catch{return null}}}function $(s){if(typeof s=="boolean")return s;const e=String(s).trim().toLowerCase();return e==="true"||e==="1"||e==="yes"||e==="on"}function j(s,e){if(typeof s=="number"&&Number.isFinite(s))return s;const o=parseFloat(s);return Number.isFinite(o)?o:e}function Q(s){const e={...c};if(!s)return e;const o=s.trim();if(!o||/key not found/i.test(o))return e;const n=K(o);if(n&&typeof n=="object"&&!Array.isArray(n))return n.rootPath!==void 0&&(e.rootPath=String(n.rootPath||"")),n.maxSizeMB!==void 0&&(e.maxSizeMB=j(n.maxSizeMB,c.maxSizeMB)),n.autoSync!==void 0&&(e.autoSync=$(n.autoSync)),n.syncIntervalSeconds!==void 0&&(e.syncIntervalSeconds=j(n.syncIntervalSeconds,c.syncIntervalSeconds)),e;const r=o.split(`
1
+ import{_ as R,u as V,d as k}from"./index-19d37fVJ.js";import{R as A,F as E}from"./icons-BFHq5fEF.js";import{a as L,r as P,o as T,M as O,R as v,c as a,N as l,K as i,L as M,O as B,u as I,Q as D,S as N,f as W}from"./vendor-M5lGV-wr.js";const c=Object.freeze({rootPath:"",maxSizeMB:1e3,autoSync:!1,syncIntervalSeconds:300});function K(s){if(!s)return null;const e=s.trim();try{return JSON.parse(e)}catch{const o=e.match(/(\{[\s\S]*\}|\[[\s\S]*\])/);if(!o)return null;try{return JSON.parse(o[1])}catch{return null}}}function $(s){if(typeof s=="boolean")return s;const e=String(s).trim().toLowerCase();return e==="true"||e==="1"||e==="yes"||e==="on"}function j(s,e){if(typeof s=="number"&&Number.isFinite(s))return s;const o=parseFloat(s);return Number.isFinite(o)?o:e}function Q(s){const e={...c};if(!s)return e;const o=s.trim();if(!o||/key not found/i.test(o))return e;const n=K(o);if(n&&typeof n=="object"&&!Array.isArray(n))return n.rootPath!==void 0&&(e.rootPath=String(n.rootPath||"")),n.maxSizeMB!==void 0&&(e.maxSizeMB=j(n.maxSizeMB,c.maxSizeMB)),n.autoSync!==void 0&&(e.autoSync=$(n.autoSync)),n.syncIntervalSeconds!==void 0&&(e.syncIntervalSeconds=j(n.syncIntervalSeconds,c.syncIntervalSeconds)),e;const r=o.split(`
2
2
  `);for(const u of r){const p=u.trim().match(/^(?:project\.)?(rootPath|maxSizeMB|autoSync|syncIntervalSeconds)\s*[=:]\s*(.+)$/i);if(!p)continue;const b=p[1],g=p[2].trim();b==="rootPath"?e.rootPath=g:b==="maxSizeMB"?e.maxSizeMB=j(g,c.maxSizeMB):b==="autoSync"?e.autoSync=$(g):b==="syncIntervalSeconds"&&(e.syncIntervalSeconds=j(g,c.syncIntervalSeconds))}return e}function F(s,e){const o={};for(const n of Object.keys(c))s[n]!==e[n]&&(o[n]=e[n]);return o}const q={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},G={style:{color:"var(--text-primary)"}},H={key:0,style:{color:"#faad14","font-size":"12px","margin-left":"8px"}},X={__name:"ProjectSettings",setup(s){const e=V(),o=P(!1),n=P(!1),r=L({...c}),u=P({...c}),h=W(()=>Object.keys(F(u.value,r)).length>0);async function p(){o.value=!0;try{const{output:d}=await e.execute("config get project",1e4),t=Q(d);Object.assign(r,t),u.value={...t}}catch(d){/key not found/i.test(d.message)?(Object.assign(r,c),u.value={...c}):k.error("加载配置失败: "+d.message)}finally{o.value=!1}}function b(){Object.assign(r,u.value)}async function g(){const d=F(u.value,r),t=Object.keys(d);if(t.length===0){k.info("没有需要保存的修改");return}n.value=!0;let f=0,S=0;for(const _ of t){const m=d[_],w=String(m).replace(/"/g,'\\"'),z=`config set project.${_} "${w}"`;try{const{output:x,exitCode:C}=await e.execute(z,1e4);C!==0||/error|failed|失败/i.test(x)?(S++,k.error(`保存 ${_} 失败: ${x.slice(0,80)}`)):f++}catch(x){S++,k.error(`保存 ${_} 失败: ${x.message}`)}}n.value=!1,S===0?(k.success(`保存成功(${f} 项)`),u.value={...r}):f>0&&(k.warning(`部分保存成功:${f} 成功 / ${S} 失败`),await p())}return T(()=>{p()}),(d,t)=>{const f=i("a-button"),S=i("a-alert"),_=i("a-input"),m=i("a-form-item"),w=i("a-input-number"),z=i("a-switch"),x=i("a-space"),C=i("a-form"),U=i("a-spin"),J=i("a-card");return M(),O("div",null,[v("div",q,[t[5]||(t[5]=v("div",null,[v("h2",{class:"page-title"},"项目存储配置"),v("p",{class:"page-sub"},"根目录 / 配额 / 自动同步")],-1)),a(f,{loading:o.value,onClick:p},{icon:l(()=>[a(I(A))]),default:l(()=>[t[4]||(t[4]=B(" 刷新 ",-1))]),_:1},8,["loading"])]),a(S,{message:"仅 Web 模式",description:"目录选择器(原生文件对话框)仅在桌面端可用,本页面需手动输入路径。修改根目录后需重启桌面应用生效;web 端只影响后端配置文件。",type:"info","show-icon":"",closable:"",style:{"margin-bottom":"16px"}}),a(J,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{title:l(()=>[v("span",G,[a(I(E),{style:{"margin-right":"8px"}}),t[6]||(t[6]=B("项目存储 ",-1))])]),default:l(()=>[a(U,{spinning:o.value},{default:l(()=>[a(C,{"label-col":{span:6},"wrapper-col":{span:18},style:{"max-width":"720px"}},{default:l(()=>[a(m,{label:"项目根目录"},{extra:l(()=>[...t[7]||(t[7]=[v("span",{style:{color:"var(--text-muted)","font-size":"11px"}}," 需绝对路径;修改后重启桌面应用生效 ",-1)])]),default:l(()=>[a(_,{value:r.rootPath,"onUpdate:value":t[0]||(t[0]=y=>r.rootPath=y),placeholder:"项目文件存储的根目录绝对路径",disabled:n.value},null,8,["value","disabled"])]),_:1}),a(m,{label:"最大项目大小"},{default:l(()=>[a(w,{value:r.maxSizeMB,"onUpdate:value":t[1]||(t[1]=y=>r.maxSizeMB=y),min:100,max:1e4,step:100,"addon-after":"MB",style:{width:"220px"},disabled:n.value},null,8,["value","disabled"])]),_:1}),a(m,{label:"自动同步"},{default:l(()=>[a(z,{checked:r.autoSync,"onUpdate:checked":t[2]||(t[2]=y=>r.autoSync=y),disabled:n.value},null,8,["checked","disabled"]),t[8]||(t[8]=v("span",{style:{"margin-left":"12px",color:"var(--text-secondary)","font-size":"12px"}}," 自动同步项目到后端服务器 ",-1))]),_:1}),r.autoSync?(M(),D(m,{key:0,label:"同步间隔"},{default:l(()=>[a(w,{value:r.syncIntervalSeconds,"onUpdate:value":t[3]||(t[3]=y=>r.syncIntervalSeconds=y),min:60,max:3600,step:60,"addon-after":"秒",style:{width:"220px"},disabled:n.value},null,8,["value","disabled"])]),_:1})):N("",!0),a(m,{"wrapper-col":{offset:6,span:18}},{default:l(()=>[a(x,null,{default:l(()=>[a(f,{onClick:b,disabled:n.value||o.value},{default:l(()=>[...t[9]||(t[9]=[B(" 重置 ",-1)])]),_:1},8,["disabled"]),a(f,{type:"primary",loading:n.value,disabled:!h.value,onClick:g},{default:l(()=>[...t[10]||(t[10]=[B(" 保存配置 ",-1)])]),_:1},8,["loading","disabled"]),h.value?(M(),O("span",H," 有未保存的修改 ")):N("",!0)]),_:1})]),_:1})]),_:1})]),_:1},8,["spinning"])]),_:1})])}}},te=R(X,[["__scopeId","data-v-17603429"]]);export{te as default};
@@ -1 +1 @@
1
- import{o as Ne,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 qe}from"./vendor-M5lGV-wr.js";import{_ as Te,b as Me,u as Ve,d as u}from"./index-BAy0ks7N.js";import{u as We}from"./useShellMode-CgR0wCYM.js";import{R as Ge,aq as Je,F as Ke,f as Qe,l as He,aE as Xe,aF as Ye,aG as Ze}from"./icons-DY9VpXfa.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([]),E=d(""),L=d(""),h=d(!1),s=d(null),O=d([]),P=d(!1),B=d(!1),Q=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=>!(E.value&&l.status!==E.value||L.value&&!l.name.toLowerCase().includes(L.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}Q.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{Q.value=!1}}const N=d(!1),Y=d(!1),g=d({path:"",content:""}),q=d(!1),Z=d(!1),I=d({path:""}),T=d(!1),D=d(null),M=d(""),ee=d(!1);function ke(){g.value={path:"",content:""},N.value=!0}function we(){I.value={path:""},q.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}'`),N.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}'`),q.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||"",T.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("已保存"),T.value=!1,await V()):u.error("保存失败")}catch(l){u.error(l.message||String(l))}finally{ee.value=!1}}}return Ne(()=>{$()}),(l,e)=>{const te=r("router-link"),m=r("a-button"),b=r("a-space"),j=r("a-statistic"),W=r("a-card"),G=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"),Ee=r("a-spin"),Le=r("a-drawer"),J=r("a-input"),z=r("a-form-item"),ae=r("a-textarea"),le=r("a-form"),K=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(Ge))]),default:a(()=>[e[19]||(e[19]=n(" 刷新 ",-1))]),_:1},8,["loading"]),t(m,{type:"primary",onClick:ye},{icon:a(()=>[t(k(Je))]),default:a(()=>[e[20]||(e[20]=n(" 新建项目 ",-1))]),_:1})]),_:1})]),t($e,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:a(()=>[t(G,{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(Ke))]),_:1},8,["value"])]),_:1})]),_:1}),t(G,{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(Qe))]),_:1},8,["value"])]),_:1})]),_:1}),t(G,{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(G,{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:E.value,"onUpdate:value":e[0]||(e[0]=o=>E.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:L.value,"onUpdate:value":e[1]||(e[1]=o=>L.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]=qe(()=>{},["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(Le,{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(Ee,{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(K,{open:N.value,"onUpdate:open":e[6]||(e[6]=o=>N.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(J,{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(K,{open:q.value,"onUpdate:open":e[8]||(e[8]=o=>q.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(J,{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(K,{open:T.value,"onUpdate:open":e[10]||(e[10]=o=>T.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(K,{open:B.value,"onUpdate:open":e[15]||(e[15]=o=>B.value=o),title:"新建项目","confirm-loading":Q.value,"ok-text":"创建","cancel-text":"取消",onOk:ge},{default:a(()=>[t(le,{layout:"vertical"},{default:a(()=>[t(z,{label:"项目名称",required:""},{default:a(()=>[t(J,{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(J,{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=Te(dt,[["__scopeId","data-v-e27c9ce1"]]);export{mt as default};
1
+ import{o as Ne,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-M5lGV-wr.js";import{_ as qe,b as Me,u as Ve,d as u}from"./index-19d37fVJ.js";import{u as We}from"./useShellMode-CgR0wCYM.js";import{R as Ge,ar as He,F as Je,f as Ke,l as Qe,aG as Xe,aH as Ye,aI as Ze}from"./icons-BFHq5fEF.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(""),h=d(""),B=d(!1),s=d(null),O=d([]),I=d(!1),E=d(!1),K=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"}],Q=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||h.value&&!l.name.toLowerCase().includes(h.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,B.value=!0,I.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{I.value=!1}}async function me(l){try{(await _("project.delete",{id:l.id},`project delete ${l.id} --json`,8e3))?.ok?(u.success(`已删除项目 '${l.name}'`),B.value=!1,await $()):u.error("删除失败")}catch(e){u.error(e.message||String(e))}}function ye(){f.value={name:"",description:"",type:"document",rootPath:""},E.value=!0}async function ge(){if(!f.value.name.trim()){u.warning("请输入项目名称");return}K.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}'`),E.value=!1,await $()):u.error("创建失败")}catch(l){u.error(l.message||String(l))}finally{K.value=!1}}const N=d(!1),Y=d(!1),g=d({path:"",content:""}),T=d(!1),Z=d(!1),P=d({path:""}),q=d(!1),D=d(null),M=d(""),ee=d(!1);function ke(){g.value={path:"",content:""},N.value=!0}function we(){P.value={path:""},T.value=!0}async function V(){if(s.value){I.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{I.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}'`),N.value=!1,await V(),await $()):u.error("创建文件失败")}catch(l){u.error(l.message||String(l))}finally{Y.value=!1}}}async function je(){if(!P.value.path.trim()){u.warning("请输入文件夹路径");return}if(s.value){Z.value=!0;try{const l=await _("project.createFolder",{projectId:s.value.id,folderPath:P.value.path.trim()},`project create-folder ${s.value.id} "${P.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 Ne(()=>{$()}),(l,e)=>{const te=r("router-link"),m=r("a-button"),b=r("a-space"),j=r("a-statistic"),W=r("a-card"),G=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"),Ie=r("a-table"),v=r("a-descriptions-item"),Pe=r("a-descriptions"),Ue=r("a-divider"),Ae=r("a-empty"),De=r("a-list-item"),Re=r("a-list"),Le=r("a-spin"),he=r("a-drawer"),H=r("a-input"),z=r("a-form-item"),ae=r("a-textarea"),le=r("a-form"),J=r("a-modal"),y=r("a-select-option"),Be=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(Ge))]),default:a(()=>[e[19]||(e[19]=n(" 刷新 ",-1))]),_:1},8,["loading"]),t(m,{type:"primary",onClick:ye},{icon:a(()=>[t(k(He))]),default:a(()=>[e[20]||(e[20]=n(" 新建项目 ",-1))]),_:1})]),_:1})]),t($e,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:a(()=>[t(G,{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(Je))]),_:1},8,["value"])]),_:1})]),_:1}),t(G,{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:Q.value.active,"value-style":{color:"#52c41a",fontSize:"20px"}},{prefix:a(()=>[t(k(Ke))]),_:1},8,["value"])]),_:1})]),_:1}),t(G,{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:Q.value.draft,"value-style":{color:"#8c8c8c",fontSize:"20px"}},{prefix:a(()=>[t(k(Qe))]),_:1},8,["value"])]),_:1})]),_:1}),t(G,{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:Q.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:h.value,"onUpdate:value":e[1]||(e[1]=o=>h.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(Ie,{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:Ee=>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:Ee=>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(he,{open:B.value,"onUpdate:open":e[3]||(e[3]=o=>B.value=o),title:s.value?.name||"项目详情",width:"640",placement:"right"},{default:a(()=>[s.value?(c(),w(Pe,{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:I.value},{default:a(()=>[!O.value.length&&!I.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(J,{open:N.value,"onUpdate:open":e[6]||(e[6]=o=>N.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(H,{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(J,{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(H,{value:P.value.path,"onUpdate:value":e[7]||(e[7]=o=>P.value.path=o),placeholder:"例如 src/utils"},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"]),t(J,{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(J,{open:E.value,"onUpdate:open":e[15]||(e[15]=o=>E.value=o),title:"新建项目","confirm-loading":K.value,"ok-text":"创建","cancel-text":"取消",onOk:ge},{default:a(()=>[t(le,{layout:"vertical"},{default:a(()=>[t(z,{label:"项目名称",required:""},{default:a(()=>[t(H,{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(Be,{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(H,{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,2 +1,2 @@
1
- import{E as Z,r as P,o as H,M as N,R as n,c as s,N as l,u as g,Q as K,S as B,F as X,Y as ee,K as u,a as te,L as y,O as x,P as M,Z as oe}from"./vendor-M5lGV-wr.js";import{u as A,_ as ae,d as _}from"./index-BAy0ks7N.js";import{a as se,b as le}from"./parsers-DftYMnlk.js";import{R as q}from"./icons-DY9VpXfa.js";const re=Z("providers",()=>{const O=P(!1),i=P(null),m=P([]),T=P([]),c=P(null);async function t(){const v=A();O.value=!0;try{const{output:k}=await v.execute("llm providers",15e3);m.value=se(k);const b=m.value.find(C=>C.active);b&&(c.value=b.name);const{output:w}=await v.execute("llm models",15e3);T.value=le(w)}catch(k){console.error("Failed to load providers:",k)}finally{O.value=!1}}async function d(v){await A().execute(`llm switch ${v}`,1e4),m.value.forEach(b=>b.active=b.name===v),c.value=v}async function F(v){const k=A();i.value=v;try{const{output:b,exitCode:w}=await k.execute("llm test",3e4),C=m.value.find(S=>S.name===v);return C&&(C.status=w===0?"ok":"error"),w===0}catch{const b=m.value.find(w=>w.name===v);return b&&(b.status="error"),!1}finally{i.value=null}}return{loading:O,testing:i,providers:m,localModels:T,activeProvider:c,loadProviders:t,switchProvider:d,testProvider:F}}),ne={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},ie={key:1,style:{"text-align":"center",padding:"60px"}},de={key:2},ue={class:"providers-grid"},ce={style:{display:"flex","align-items":"center",gap:"12px","margin-bottom":"12px"}},pe={style:{"font-size":"24px"}},me={style:{flex:"1"}},ve={style:{color:"#e0e0e0","font-weight":"500"}},fe={style:{color:"var(--text-secondary)","font-size":"11px","font-family":"monospace"}},ge={style:{display:"flex",gap:"8px","justify-content":"flex-end"}},ye={key:0,style:{"margin-top":"24px"}},be={style:{color:"#ccc","font-family":"monospace","font-size":"13px"}},xe={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"16px"}},_e={class:"config-grid"},ke={style:{display:"flex","align-items":"center",gap:"12px"}},we={style:{display:"flex",gap:"12px","justify-content":"flex-end","margin-top":"16px"}},he={__name:"Providers",setup(O){const i=re(),m=A(),T=P(!1),c=P(!1),t=te({provider:void 0,model:"",apiKey:"",baseUrl:"",temperature:.7,maxTokens:4096});let d={};const F=["ollama","openai","anthropic","volcengine","deepseek","gemini","groq","mistral","custom","zhipu"],v={ollama:"Ollama(本地)",openai:"OpenAI",anthropic:"Anthropic",volcengine:"火山引擎(豆包)",deepseek:"DeepSeek",gemini:"Google Gemini",groq:"Groq",mistral:"Mistral",custom:"Custom(自定义)",zhipu:"智谱 AI"},k=F.map(a=>({value:a,label:v[a]||a}));async function b(a){try{await i.switchProvider(a),_.success(`已切换到 ${a}`)}catch(e){_.error(`切换失败: ${e.message}`)}}async function w(a){await i.testProvider(a)?_.success(`${a} 连接正常`):_.warning(`${a} 连接失败,请检查配置`)}function C(a){const e={};if(!a)return e;try{const U=JSON.parse(a.trim()),p=U.llm||U;return p.provider&&(e.provider=p.provider),p.model&&(e.model=p.model),p.apiKey&&(e.apiKey=p.apiKey),p.baseUrl&&(e.baseUrl=p.baseUrl),p.temperature!==void 0&&(e.temperature=Number(p.temperature)),p.maxTokens!==void 0&&(e.maxTokens=Number(p.maxTokens)),e}catch{}const r=a.split(`
1
+ import{E as Z,r as P,o as H,M as N,R as n,c as s,N as l,u as g,Q as K,S as B,F as X,Y as ee,K as u,a as te,L as y,O as x,P as M,Z as oe}from"./vendor-M5lGV-wr.js";import{u as A,_ as ae,d as _}from"./index-19d37fVJ.js";import{a as se,b as le}from"./parsers-DftYMnlk.js";import{R as q}from"./icons-BFHq5fEF.js";const re=Z("providers",()=>{const O=P(!1),i=P(null),m=P([]),T=P([]),c=P(null);async function t(){const v=A();O.value=!0;try{const{output:k}=await v.execute("llm providers",15e3);m.value=se(k);const b=m.value.find(C=>C.active);b&&(c.value=b.name);const{output:w}=await v.execute("llm models",15e3);T.value=le(w)}catch(k){console.error("Failed to load providers:",k)}finally{O.value=!1}}async function d(v){await A().execute(`llm switch ${v}`,1e4),m.value.forEach(b=>b.active=b.name===v),c.value=v}async function F(v){const k=A();i.value=v;try{const{output:b,exitCode:w}=await k.execute("llm test",3e4),C=m.value.find(S=>S.name===v);return C&&(C.status=w===0?"ok":"error"),w===0}catch{const b=m.value.find(w=>w.name===v);return b&&(b.status="error"),!1}finally{i.value=null}}return{loading:O,testing:i,providers:m,localModels:T,activeProvider:c,loadProviders:t,switchProvider:d,testProvider:F}}),ne={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},ie={key:1,style:{"text-align":"center",padding:"60px"}},de={key:2},ue={class:"providers-grid"},ce={style:{display:"flex","align-items":"center",gap:"12px","margin-bottom":"12px"}},pe={style:{"font-size":"24px"}},me={style:{flex:"1"}},ve={style:{color:"#e0e0e0","font-weight":"500"}},fe={style:{color:"var(--text-secondary)","font-size":"11px","font-family":"monospace"}},ge={style:{display:"flex",gap:"8px","justify-content":"flex-end"}},ye={key:0,style:{"margin-top":"24px"}},be={style:{color:"#ccc","font-family":"monospace","font-size":"13px"}},xe={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"16px"}},_e={class:"config-grid"},ke={style:{display:"flex","align-items":"center",gap:"12px"}},we={style:{display:"flex",gap:"12px","justify-content":"flex-end","margin-top":"16px"}},he={__name:"Providers",setup(O){const i=re(),m=A(),T=P(!1),c=P(!1),t=te({provider:void 0,model:"",apiKey:"",baseUrl:"",temperature:.7,maxTokens:4096});let d={};const F=["ollama","openai","anthropic","volcengine","deepseek","gemini","groq","mistral","custom","zhipu"],v={ollama:"Ollama(本地)",openai:"OpenAI",anthropic:"Anthropic",volcengine:"火山引擎(豆包)",deepseek:"DeepSeek",gemini:"Google Gemini",groq:"Groq",mistral:"Mistral",custom:"Custom(自定义)",zhipu:"智谱 AI"},k=F.map(a=>({value:a,label:v[a]||a}));async function b(a){try{await i.switchProvider(a),_.success(`已切换到 ${a}`)}catch(e){_.error(`切换失败: ${e.message}`)}}async function w(a){await i.testProvider(a)?_.success(`${a} 连接正常`):_.warning(`${a} 连接失败,请检查配置`)}function C(a){const e={};if(!a)return e;try{const U=JSON.parse(a.trim()),p=U.llm||U;return p.provider&&(e.provider=p.provider),p.model&&(e.model=p.model),p.apiKey&&(e.apiKey=p.apiKey),p.baseUrl&&(e.baseUrl=p.baseUrl),p.temperature!==void 0&&(e.temperature=Number(p.temperature)),p.maxTokens!==void 0&&(e.maxTokens=Number(p.maxTokens)),e}catch{}const r=a.split(`
2
2
  `);for(const U of r){const z=U.trim().match(/^(?:llm\.)?(\w+)\s*[=:]\s*(.+)$/i);if(!z)continue;const[,I,j]=z,f=j.trim(),h=I.toLowerCase();if(h==="provider"&&f)e.provider=f;else if(h==="model"&&f)e.model=f;else if(h==="apikey"&&f)f.includes("***")||(e.apiKey=f);else if(h==="baseurl")e.baseUrl=f;else if(h==="temperature"){const $=parseFloat(f);isNaN($)||(e.temperature=$)}else if(h==="maxtokens"){const $=parseInt(f,10);isNaN($)||(e.maxTokens=$)}}return e}async function S(){T.value=!0;try{const{output:a}=await m.execute("config list",15e3),e=C(a);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),d={...t},_.success("配置已加载")}catch(a){_.error(`加载配置失败: ${a.message}`)}finally{T.value=!1}}async function E(){c.value=!0;const a=[],e=[];try{if(t.provider&&t.provider!==d.provider)try{await m.execute(`config set llm.provider ${t.provider}`,1e4),e.push("provider")}catch(r){a.push(`provider: ${r.message}`)}if(t.model&&t.model!==d.model)try{await m.execute(`config set llm.model ${t.model}`,1e4),e.push("model")}catch(r){a.push(`model: ${r.message}`)}if(t.apiKey&&t.apiKey!==d.apiKey)try{await m.execute(`config set llm.apiKey ${t.apiKey}`,1e4),e.push("apiKey")}catch(r){a.push(`apiKey: ${r.message}`)}if(t.baseUrl!==void 0&&t.baseUrl!==d.baseUrl)try{await m.execute(`config set llm.baseUrl ${t.baseUrl}`,1e4),e.push("baseUrl")}catch(r){a.push(`baseUrl: ${r.message}`)}if(t.temperature!==d.temperature)try{await m.execute(`config set llm.temperature ${t.temperature}`,1e4),e.push("temperature")}catch(r){a.push(`temperature: ${r.message}`)}if(t.maxTokens!==d.maxTokens)try{await m.execute(`config set llm.maxTokens ${t.maxTokens}`,1e4),e.push("maxTokens")}catch(r){a.push(`maxTokens: ${r.message}`)}a.length>0?_.warning(`部分配置保存失败: ${a.join("; ")}`):e.length>0?(_.success(`已保存 ${e.length} 项配置`),d={...t},e.includes("provider")&&i.loadProviders()):_.info("没有检测到配置变更")}catch(r){_.error(`保存配置失败: ${r.message}`)}finally{c.value=!1}}function G(){t.provider=d.provider||void 0,t.model=d.model||"",t.apiKey=d.apiKey||"",t.baseUrl=d.baseUrl||"",t.temperature=d.temperature??.7,t.maxTokens=d.maxTokens??4096}return H(()=>{i.loadProviders(),S()}),(a,e)=>{const r=u("a-button"),U=u("a-alert"),p=u("a-spin"),z=u("a-tag"),I=u("a-badge"),j=u("a-card"),f=u("a-list-item"),h=u("a-list"),$=u("a-divider"),D=u("a-select"),L=u("a-form-item"),R=u("a-input"),J=u("a-input-password"),Q=u("a-slider"),V=u("a-input-number"),W=u("a-form");return y(),N("div",null,[n("div",ne,[e[9]||(e[9]=n("div",null,[n("h2",{class:"page-title"},"LLM 配置"),n("p",{class:"page-sub"},"管理 AI 服务提供商")],-1)),s(r,{type:"primary",ghost:"",loading:g(i).loading,onClick:e[0]||(e[0]=o=>g(i).loadProviders())},{icon:l(()=>[s(g(q))]),default:l(()=>[e[8]||(e[8]=x(" 刷新 ",-1))]),_:1},8,["loading"])]),g(i).activeProvider?(y(),K(U,{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(()=>[n("span",null,[e[10]||(e[10]=x("当前激活:",-1)),n("strong",null,M(g(i).activeProvider),1)])]),_:1})):B("",!0),g(i).loading?(y(),N("div",ie,[s(p,{size:"large"}),e[11]||(e[11]=n("div",{style:{color:"var(--text-muted)","margin-top":"12px"}},"加载 LLM 信息中...",-1))])):(y(),N("div",de,[n("div",ue,[(y(!0),N(X,null,ee(g(i).providers,o=>(y(),K(j,{key:o.name,class:oe(["provider-card",{active:o.active}]),style:{background:"var(--bg-card)"},size:"small"},{default:l(()=>[n("div",ce,[n("span",pe,M(o.icon),1),n("div",me,[n("div",ve,M(o.label),1),n("div",fe,M(o.name),1)]),n("div",null,[o.active?(y(),K(z,{key:0,color:"green"},{default:l(()=>[...e[12]||(e[12]=[x("活跃",-1)])]),_:1})):o.status==="ok"?(y(),K(I,{key:1,status:"success",text:""})):o.status==="error"?(y(),K(I,{key:2,status:"error",text:""})):B("",!0)])]),n("div",ge,[s(r,{size:"small",style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"},loading:g(i).testing===o.name,onClick:Y=>w(o.name)},{default:l(()=>[...e[13]||(e[13]=[x(" 测试 ",-1)])]),_:1},8,["loading","onClick"]),o.active?(y(),K(z,{key:1,color:"green",style:{margin:"0","line-height":"24px"}},{default:l(()=>[...e[15]||(e[15]=[x("当前",-1)])]),_:1})):(y(),K(r,{key:0,size:"small",type:"primary",ghost:"",onClick:Y=>b(o.name)},{default:l(()=>[...e[14]||(e[14]=[x(" 切换 ",-1)])]),_:1},8,["onClick"]))])]),_:2},1032,["class"]))),128))]),g(i).localModels.length?(y(),N("div",ye,[e[16]||(e[16]=n("h3",{style:{color:"#ccc","font-size":"15px","margin-bottom":"12px"}}," 本地模型(Ollama) ",-1)),s(h,{"data-source":g(i).localModels,size:"small",style:{background:"var(--bg-card)","border-radius":"8px",border:"1px solid var(--border-color)"}},{renderItem:l(({item:o})=>[s(f,{style:{padding:"10px 16px","border-color":"#252525"}},{actions:l(()=>[s(z,{color:"cyan",style:{"font-size":"10px"}},{default:l(()=>[x(M(o.size||"local"),1)]),_:2},1024)]),default:l(()=>[n("span",be,M(o.name),1)]),_:2},1024)]),_:1},8,["data-source"])])):B("",!0),s($,{style:{"border-color":"var(--border-color)",margin:"32px 0 24px"}}),n("div",xe,[e[18]||(e[18]=n("h3",{class:"section-title"},"LLM 参数设置",-1)),s(r,{size:"small",loading:T.value,onClick:S,style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:l(()=>[s(g(q))]),default:l(()=>[e[17]||(e[17]=x(" 加载配置 ",-1))]),_:1},8,["loading"])]),s(j,{class:"config-card",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:l(()=>[s(W,{model:t,layout:"vertical",class:"config-form"},{default:l(()=>[n("div",_e,[s(L,{label:"Provider(提供商)"},{default:l(()=>[s(D,{value:t.provider,"onUpdate:value":e[1]||(e[1]=o=>t.provider=o),placeholder:"选择 LLM 提供商",options:g(k),style:{width:"100%"},disabled:c.value},null,8,["value","options","disabled"])]),_:1}),s(L,{label:"Model(模型名称)"},{default:l(()=>[s(R,{value:t.model,"onUpdate:value":e[2]||(e[2]=o=>t.model=o),placeholder:"例如 doubao-seed-1-6-251015","allow-clear":"",disabled:c.value},null,8,["value","disabled"])]),_:1}),s(L,{label:"API Key"},{default:l(()=>[s(J,{value:t.apiKey,"onUpdate:value":e[3]||(e[3]=o=>t.apiKey=o),placeholder:"输入 API Key",disabled:c.value},null,8,["value","disabled"])]),_:1}),s(L,{label:"Base URL"},{default:l(()=>[s(R,{value:t.baseUrl,"onUpdate:value":e[4]||(e[4]=o=>t.baseUrl=o),placeholder:"例如 https://ark.cn-beijing.volces.com/api/v3","allow-clear":"",disabled:c.value},null,8,["value","disabled"])]),_:1}),s(L,{label:"Temperature(温度)"},{default:l(()=>[n("div",ke,[s(Q,{value:t.temperature,"onUpdate:value":e[5]||(e[5]=o=>t.temperature=o),min:0,max:2,step:.1,style:{flex:"1"},disabled:c.value},null,8,["value","disabled"]),s(V,{value:t.temperature,"onUpdate:value":e[6]||(e[6]=o=>t.temperature=o),min:0,max:2,step:.1,precision:1,style:{width:"80px"},disabled:c.value},null,8,["value","disabled"])])]),_:1}),s(L,{label:"Max Tokens(最大输出长度)"},{default:l(()=>[s(V,{value:t.maxTokens,"onUpdate:value":e[7]||(e[7]=o=>t.maxTokens=o),min:256,max:128e3,step:256,style:{width:"100%"},placeholder:"4096",disabled:c.value},null,8,["value","disabled"])]),_:1})]),n("div",we,[s(r,{onClick:G,disabled:c.value,style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{default:l(()=>[...e[19]||(e[19]=[x(" 重置 ",-1)])]),_:1},8,["disabled"]),s(r,{type:"primary",loading:c.value,onClick:E},{default:l(()=>[...e[20]||(e[20]=[x(" 保存配置 ",-1)])]),_:1},8,["loading"])])]),_:1},8,["model"])]),_:1})]))])}}},Te=ae(he,[["__scopeId","data-v-38d68389"]]);export{Te as default};