chainlesschain 0.162.135 → 0.162.136

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 (153) hide show
  1. package/package.json +1 -1
  2. package/src/assets/web-panel/assets/{AIOps-C8GPdDdA.js → AIOps-BCbtd1Wt.js} +1 -1
  3. package/src/assets/web-panel/assets/{ActionButton-l3wm1drb.js → ActionButton-l-5EY84p.js} +1 -1
  4. package/src/assets/web-panel/assets/{Analytics-BDqrmGFj.js → Analytics-tqe4izkk.js} +2 -2
  5. package/src/assets/web-panel/assets/{AppLayout-Brv_8SYm.js → AppLayout-CHIGdNy5.js} +5 -5
  6. package/src/assets/web-panel/assets/{Audit-CP-tplVO.js → Audit-DoGy8tJV.js} +1 -1
  7. package/src/assets/web-panel/assets/{Backup-zEeifjos.js → Backup-D4QmKO05.js} +1 -1
  8. package/src/assets/web-panel/assets/{BaseInput-BTIoNJtV.js → BaseInput-BXtqNimf.js} +1 -1
  9. package/src/assets/web-panel/assets/{Chat-DRyq2zME.js → Chat-DrwZvmTE.js} +5 -5
  10. package/src/assets/web-panel/assets/ChatBubbleRenderer-D7xEGZ8V.js +1 -0
  11. package/src/assets/web-panel/assets/{Checkbox-CpyOwOBw.js → Checkbox-C7vmQvF_.js} +1 -1
  12. package/src/assets/web-panel/assets/{Codegen-Ch-9tABk.js → Codegen-BfH0gnrh.js} +1 -1
  13. package/src/assets/web-panel/assets/{Col-DTQBKMaX.js → Col-Wh2qHzCY.js} +1 -1
  14. package/src/assets/web-panel/assets/{Community-dCaZxTkr.js → Community--JgtpkMN.js} +1 -1
  15. package/src/assets/web-panel/assets/{Compact-j49AW-_C.js → Compact-CYA0zQ2o.js} +1 -1
  16. package/src/assets/web-panel/assets/{Compliance-CZDScEfD.js → Compliance-CNCXW8oZ.js} +1 -1
  17. package/src/assets/web-panel/assets/{Cowork-D77z7nsK.js → Cowork-BkV1O7yG.js} +2 -2
  18. package/src/assets/web-panel/assets/{Cron-DTUUkbYr.js → Cron-D-H_AYdM.js} +2 -2
  19. package/src/assets/web-panel/assets/{Crosschain-UpAAnl37.js → Crosschain-FjMDY8pJ.js} +1 -1
  20. package/src/assets/web-panel/assets/{DID-J3DHNGdv.js → DID-LUMffREd.js} +2 -2
  21. package/src/assets/web-panel/assets/{Dashboard-CMhAYpbr.js → Dashboard-BtnemOQy.js} +2 -2
  22. package/src/assets/web-panel/assets/{Dropdown-E4ecORvY.js → Dropdown-BjIfBhgS.js} +1 -1
  23. package/src/assets/web-panel/assets/{EmailListRenderer-C0JfIVnx.js → EmailListRenderer-kkJ3wUFH.js} +1 -1
  24. package/src/assets/web-panel/assets/{FamilyGuardDashboard-BuANd_x-.js → FamilyGuardDashboard-COfVA8i-.js} +1 -1
  25. package/src/assets/web-panel/assets/{Federation-BoL0NWre.js → Federation-f0w3_1wG.js} +1 -1
  26. package/src/assets/web-panel/assets/{FormItemContext-CuwP6Yl4.js → FormItemContext-CVP9HZzZ.js} +1 -1
  27. package/src/assets/web-panel/assets/{GenericCardRenderer-BddFKuox.js → GenericCardRenderer-D9al_ovh.js} +1 -1
  28. package/src/assets/web-panel/assets/{Git-jkdzP07a.js → Git-DngLyp6B.js} +2 -2
  29. package/src/assets/web-panel/assets/{Governance-Xp6Z3HQ_.js → Governance-CoekTQFB.js} +1 -1
  30. package/src/assets/web-panel/assets/{Inference-BkIfl0oN.js → Inference-c65ZRlBj.js} +1 -1
  31. package/src/assets/web-panel/assets/{KnowledgeGraph-D4KjmcCK.js → KnowledgeGraph-DB5nximw.js} +1 -1
  32. package/src/assets/web-panel/assets/{Logs-BvIzUdZr.js → Logs-DNkUzo0T.js} +2 -2
  33. package/src/assets/web-panel/assets/{Marketplace-CIIW5sre.js → Marketplace-CR3MQByk.js} +1 -1
  34. package/src/assets/web-panel/assets/{McpTools-B4koRE-u.js → McpTools-CG25_UsS.js} +5 -5
  35. package/src/assets/web-panel/assets/{Memory-B_wZnNsC.js → Memory-D52JKgAo.js} +2 -2
  36. package/src/assets/web-panel/assets/{MobileBridge-DXFo2Q24.js → MobileBridge-cZN2xRg0.js} +1 -1
  37. package/src/assets/web-panel/assets/{MobileProjects-CVPdCW9B.js → MobileProjects-cKCfuWoz.js} +1 -1
  38. package/src/assets/web-panel/assets/{Mtc-154O648I.js → Mtc-DmDYvDEV.js} +4 -4
  39. package/src/assets/web-panel/assets/{MtcAudit-De0n8SH_.js → MtcAudit-Bf8Mi8tz.js} +2 -2
  40. package/src/assets/web-panel/assets/{Multisig-D3oia9D9.js → Multisig-DeukHd6F.js} +3 -3
  41. package/src/assets/web-panel/assets/{NLProgramming-Cs6kl63I.js → NLProgramming-D3lXTwRy.js} +1 -1
  42. package/src/assets/web-panel/assets/{Notes-BwPZuNQa.js → Notes-qghVAP0z.js} +3 -3
  43. package/src/assets/web-panel/assets/{NotificationSettings-BnD26DK4.js → NotificationSettings-BupFy0JT.js} +1 -1
  44. package/src/assets/web-panel/assets/{OrderTableRenderer-BVOPWrWc.js → OrderTableRenderer-nEDAjhsv.js} +1 -1
  45. package/src/assets/web-panel/assets/{Organization-H3pMdcBb.js → Organization-CeZC6-OD.js} +4 -4
  46. package/src/assets/web-panel/assets/{Overflow-Bq325sof.js → Overflow-Gn4quozC.js} +1 -1
  47. package/src/assets/web-panel/assets/{P2P-WW4ZOjbm.js → P2P-DCjLA2gS.js} +2 -2
  48. package/src/assets/web-panel/assets/PdhVaultBrowser-csIVS_1B.js +7 -0
  49. package/src/assets/web-panel/assets/{Permissions-B6UgMKSQ.js → Permissions-C1Oo20LB.js} +4 -4
  50. package/src/assets/web-panel/assets/{PersonalDataHub-C6G2G_eC.js → PersonalDataHub-R4KLr8Ee.js} +3 -3
  51. package/src/assets/web-panel/assets/{Pipeline-o4bOsiOg.js → Pipeline-BCoB-pL-.js} +1 -1
  52. package/src/assets/web-panel/assets/{Privacy-TwX37lFt.js → Privacy-V66hdnHY.js} +1 -1
  53. package/src/assets/web-panel/assets/{ProjectInit-BgFvgULF.js → ProjectInit-97Ij4qvk.js} +2 -2
  54. package/src/assets/web-panel/assets/{ProjectSettings-BJgJb6wi.js → ProjectSettings-D30tCAKi.js} +2 -2
  55. package/src/assets/web-panel/assets/Projects-DE3xI8DC.js +1 -0
  56. package/src/assets/web-panel/assets/{Providers-C6HWa3ZD.js → Providers-CsndXhqQ.js} +1 -1
  57. package/src/assets/web-panel/assets/{QuickAsk-Bz1g3Ie6.js → QuickAsk-9J7a-Wit.js} +1 -1
  58. package/src/assets/web-panel/assets/{Recommend-C_e2qe6f.js → Recommend-CCJOmNVS.js} +1 -1
  59. package/src/assets/web-panel/assets/{Reputation-C66IgdUQ.js → Reputation-BQW7pAda.js} +1 -1
  60. package/src/assets/web-panel/assets/{Row-CVgo4aH_.js → Row-xRtHBnw6.js} +1 -1
  61. package/src/assets/web-panel/assets/{RssFeed-5ASYwDim.js → RssFeed-DZrbI2Gc.js} +2 -2
  62. package/src/assets/web-panel/assets/{Search-DBOPqd_k.js → Search-DHKSqCl1.js} +1 -1
  63. package/src/assets/web-panel/assets/{Security-BPUlVa_U.js → Security--cE1K8ka.js} +3 -3
  64. package/src/assets/web-panel/assets/{Services-BtH8pNyu.js → Services-Bws9ixay.js} +2 -2
  65. package/src/assets/web-panel/assets/{Skeleton-FQBcWIgc.js → Skeleton-Dj-bzkB7.js} +1 -1
  66. package/src/assets/web-panel/assets/Skills-BKrqOlUn.js +1 -0
  67. package/src/assets/web-panel/assets/{Sla-DvynKWyz.js → Sla-Da_SNe36.js} +1 -1
  68. package/src/assets/web-panel/assets/{SpeechSettings-3kg5311F.js → SpeechSettings-sspEE3dY.js} +1 -1
  69. package/src/assets/web-panel/assets/{SyncSettings-Djoam0op.js → SyncSettings-DQCvMZSh.js} +2 -2
  70. package/src/assets/web-panel/assets/Tasks-BfSZDRq5.js +1 -0
  71. package/src/assets/web-panel/assets/{Templates-DoJV7D56.js → Templates-CDRtxViB.js} +1 -1
  72. package/src/assets/web-panel/assets/{Tenant-eb1uEcsf.js → Tenant-3QRm7Nry.js} +1 -1
  73. package/src/assets/web-panel/assets/{Terminal-CrQBDamW.js → Terminal-Bn2IxQFz.js} +2 -2
  74. package/src/assets/web-panel/assets/{TimelineRenderer-Cf4PL9u2.js → TimelineRenderer-DLoyhlF5.js} +1 -1
  75. package/src/assets/web-panel/assets/{Tokens-Zhct1l0_.js → Tokens-8NLe49e4.js} +1 -1
  76. package/src/assets/web-panel/assets/{Trigger-C_bhjD7t.js → Trigger-hbe9gUXr.js} +1 -1
  77. package/src/assets/web-panel/assets/{Trust-D2qYYQ91.js → Trust-BHgkWhCY.js} +1 -1
  78. package/src/assets/web-panel/assets/{UkeySign-FgbfqaRh.js → UkeySign-BmO-EyJ1.js} +1 -1
  79. package/src/assets/web-panel/assets/{VideoEditing-Qf9TjR_b.js → VideoEditing-LPgvmo_z.js} +1 -1
  80. package/src/assets/web-panel/assets/{Wallet-DwrafyCn.js → Wallet-BnKkAnOH.js} +4 -4
  81. package/src/assets/web-panel/assets/{WebAuthn-BlQdPSoZ.js → WebAuthn-CIdoUjgo.js} +5 -5
  82. package/src/assets/web-panel/assets/{WorkflowEditor-B6I7YgRJ.js → WorkflowEditor-BPeMHJyH.js} +1 -1
  83. package/src/assets/web-panel/assets/{chat-BZ3QdktE.js → chat-D8MVSTIr.js} +1 -1
  84. package/src/assets/web-panel/assets/{colors-mH7WpOfg.js → colors-DdPqDQ1L.js} +1 -1
  85. package/src/assets/web-panel/assets/{compact-item-D3hDjv9f.js → compact-item-DUZKsphf.js} +1 -1
  86. package/src/assets/web-panel/assets/{createContext-Dl_7Nkr4.js → createContext-D5p2CmQo.js} +1 -1
  87. package/src/assets/web-panel/assets/devWarning-BzOE0TsJ.js +1 -0
  88. package/src/assets/web-panel/assets/{hasIn-wvip0tzR.js → hasIn-BTsp_hEF.js} +1 -1
  89. package/src/assets/web-panel/assets/{index-Jr_h0z1G.js → index-31ytJYHw.js} +1 -1
  90. package/src/assets/web-panel/assets/{index-Db1XY8N-.js → index-B399bCjT.js} +1 -1
  91. package/src/assets/web-panel/assets/index-B3qzNIBg.js +1 -0
  92. package/src/assets/web-panel/assets/{index-Cu82OYmb.js → index-B5vFq4Qm.js} +1 -1
  93. package/src/assets/web-panel/assets/{index-C5f0C4Cf.js → index-B8k7IxVj.js} +1 -1
  94. package/src/assets/web-panel/assets/{index-BeiskTuI.js → index-BD3A6LLJ.js} +1 -1
  95. package/src/assets/web-panel/assets/{index-DxzxIwGc.js → index-BJWyBptG.js} +1 -1
  96. package/src/assets/web-panel/assets/{index-CcFVwuKS.js → index-BL3oN67Y.js} +1 -1
  97. package/src/assets/web-panel/assets/{index-CIjhZpoP.js → index-BNT2VsLb.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-ipake_aQ.js → index-BNYA6P0Z.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-B6czSkzN.js → index-BRwQvupf.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-CVU-sWbI.js → index-Bow-XOs9.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-0HVD1mxo.js → index-Bsc2CYZq.js} +1 -1
  102. package/src/assets/web-panel/assets/{index-CQg64FhB.js → index-BuFroE1S.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-DDBuc-Id.js → index-C1lWhMQw.js} +3 -3
  104. package/src/assets/web-panel/assets/{index-CjD-wNN0.js → index-C8QqZYYD.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-r6tial0Z.js → index-CKtejcd-.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-CEVQx1A1.js → index-CMCre-L-.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-D6OdgJy6.js → index-CXL0wioz.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-CTN0el_7.js → index-CbjuKk7d.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-CdcubLNT.js → index-CcG1FLEX.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-Cnaz0Asm.js → index-Chpwa107.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-C7f9b3uD.js → index-Covx4knd.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-DjnC31Yx.js → index-CuKonwkL.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-DCXZLI19.js → index-CunDcO3C.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-B2YeO806.js → index-D7zl6BHy.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-CbjJ6juC.js → index-D862jnkO.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-Bpj16jRB.js → index-DMz6zzt2.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-CxDUhU5g.js → index-DPJaX5ac.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-B_I8UbJc.js → index-DR3ACsiD.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-DpMNZhdq.js → index-DWwGeQvJ.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-B9t7LEJ8.js → index-DXWjIyA-.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-fpkVqY3Y.js → index-DaNcNCs6.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-DcCWULRq.js → index-DcwovLC7.js} +1 -1
  123. package/src/assets/web-panel/assets/index-DdAOmEhn.js +1 -0
  124. package/src/assets/web-panel/assets/{index-gZUcbNri.js → index-Doy_11av.js} +1 -1
  125. package/src/assets/web-panel/assets/{index-D5Wuku7c.js → index-GIPb2_fk.js} +1 -1
  126. package/src/assets/web-panel/assets/{index-BZ14Q7jH.js → index-JRar7P45.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-Bn1rellA.js → index-dbME8m0M.js} +1 -1
  128. package/src/assets/web-panel/assets/{initDefaultProps-CGh7iY6x.js → initDefaultProps-DeZSE2bu.js} +1 -1
  129. package/src/assets/web-panel/assets/{motion-Bm1X_QyP.js → motion-BGQcMeq4.js} +1 -1
  130. package/src/assets/web-panel/assets/{move-BuIY8ECm.js → move-BrFjgScn.js} +1 -1
  131. package/src/assets/web-panel/assets/{mtc-parser-DRWHeLRG.js → mtc-parser-CJOiLw4B.js} +1 -1
  132. package/src/assets/web-panel/assets/{omit-lTzSMFbB.js → omit-D-UZAj4p.js} +1 -1
  133. package/src/assets/web-panel/assets/{pickAttrs-Ci02C2So.js → pickAttrs-CEZJAIg5.js} +1 -1
  134. package/src/assets/web-panel/assets/{placementArrow-B3tYnC80.js → placementArrow-C-9O2BpE.js} +1 -1
  135. package/src/assets/web-panel/assets/{responsiveObserve-wN6_3_hR.js → responsiveObserve-DObV9rnN.js} +1 -1
  136. package/src/assets/web-panel/assets/{slide-Dy1pMd8P.js → slide-Ccg8Ck9h.js} +1 -1
  137. package/src/assets/web-panel/assets/{statusUtils-CmPmxXZF.js → statusUtils-DVteAfrn.js} +1 -1
  138. package/src/assets/web-panel/assets/{styleChecker-CEKdg6Qs.js → styleChecker-DJMHezhF.js} +1 -1
  139. package/src/assets/web-panel/assets/{useFlexGapSupport-B2md7qB4.js → useFlexGapSupport-yuOExwOY.js} +1 -1
  140. package/src/assets/web-panel/assets/{useFs-fOz_rVnu.js → useFs-QUoeadth.js} +1 -1
  141. package/src/assets/web-panel/assets/{usePersonalDataHub-B54wsK9k.js → usePersonalDataHub-8ZuMuAgm.js} +1 -1
  142. package/src/assets/web-panel/assets/{vnode-B4xa3bk5.js → vnode-CLlzeZv-.js} +1 -1
  143. package/src/assets/web-panel/assets/{zoom-DIUKjYvp.js → zoom-_aLiPW0u.js} +1 -1
  144. package/src/assets/web-panel/index.html +1 -1
  145. package/src/commands/hub.js +133 -0
  146. package/src/assets/web-panel/assets/ChatBubbleRenderer-BKkD07Ou.js +0 -1
  147. package/src/assets/web-panel/assets/PdhVaultBrowser-C1gzHyUT.js +0 -7
  148. package/src/assets/web-panel/assets/Projects-DSzrqJda.js +0 -1
  149. package/src/assets/web-panel/assets/Skills-B5SKs0R5.js +0 -1
  150. package/src/assets/web-panel/assets/Tasks-CfFSgWDg.js +0 -1
  151. package/src/assets/web-panel/assets/devWarning-C1-v3bP6.js +0 -1
  152. package/src/assets/web-panel/assets/index-BDvfsM83.js +0 -1
  153. package/src/assets/web-panel/assets/index-DC0SwdNf.js +0 -1
@@ -1 +1 @@
1
- import{I as m,J as b,U as v,R as p,c as i,K as n,V as d,S as g,o as pe,a as ce,b as Y,r as A,P as r,Q as f,F as x,Z as F,_ as Te}from"./vendor-BvqAck49.js";import{Y as Oe,t as W,_ as Le,u as ue,b as de,d as h}from"./index-DDBuc-Id.js";import{a0 as ze,d as Ee,L as Be,f as Fe,Y as De,aU as Re,z as Me,a4 as Ne,G as je,ap as we,_ as Ie,as as Ue,R as Ge}from"./icons-DP3uiYxy.js";const be=Object.freeze(["pending","running","paused","completed","failed","cancelled"]),Je=Object.freeze(["pending","running","gate-waiting","completed","failed","skipped"]),qe=Object.freeze(["requirement","architecture","code-generation","testing","code-review","deploy","monitoring"]),_e=Object.freeze(["feature","bugfix","refactor","security-audit"]),Ve=Object.freeze(["git-pr","docker","npm-publish","local","staging","custom"]),Ke=Object.freeze(["code-review","deploy"]);function M(t,o=0){return typeof t=="number"&&Number.isFinite(t)?t:o}function ie(t){if(!t)return{noDb:!1,error:""};const o=Oe(t),s=/No database/i.test(o);return{noDb:s,error:s?"No database":""}}function Ye(t,o=0){if(!t||typeof t!="object")return null;const s=t.id||"";return s?{key:s,id:s,pipelineId:String(t.pipelineId||""),stageIndex:M(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 We(t,o=0){if(!t||typeof t!="object")return null;const s=t.id||"";if(!s)return null;const e=Array.isArray(t.stages)?t.stages.map(Ye).filter(Boolean):[];return{key:s,id:s,name:t.name||"",template:String(t.template||""),config:t.config??null,status:String(t.status||"pending").toLowerCase(),currentStage:M(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:e,_idx:o}}function fe(t){const o=W(t);return Array.isArray(o)?o.map(We).filter(Boolean):[]}function He(t,o=0){if(!t||typeof t!="object")return null;const s=t.id||"";return s?{key:s,id:s,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 ge(t){const o=W(t);return Array.isArray(o)?o.map(He).filter(Boolean):[]}function Qe(t,o=0){if(!t||typeof t!="object")return null;const s=t.name||"";return s?{key:s,name:s,description:String(t.description||""),stages:Array.isArray(t.stages)?t.stages.filter(e=>typeof e=="string"):[],gateStages:Array.isArray(t.gateStages)?t.gateStages.filter(e=>typeof e=="string"):[],_idx:o}:null}function me(t){const o=W(t);return Array.isArray(o)?o.map(Qe).filter(Boolean):[]}const Ze={totalPipelines:0,pipelinesByTemplate:{},pipelinesByStatus:{},totalStages:0,stagesByStatus:{},totalArtifacts:0,totalDeploys:0,deploysByStrategy:{}};function ye(t){const o=JSON.parse(JSON.stringify(Ze));for(const e of _e)o.pipelinesByTemplate[e]=0;for(const e of be)o.pipelinesByStatus[e]=0;for(const e of Je)o.stagesByStatus[e]=0;for(const e of Ve)o.deploysByStrategy[e]=0;const s=W(t);if(!s||typeof s!="object"||Array.isArray(s))return o;if(o.totalPipelines=M(s.totalPipelines,0),o.totalStages=M(s.totalStages,0),o.totalArtifacts=M(s.totalArtifacts,0),o.totalDeploys=M(s.totalDeploys,0),s.pipelinesByTemplate&&typeof s.pipelinesByTemplate=="object")for(const[e,_]of Object.entries(s.pipelinesByTemplate))typeof _=="number"&&Number.isFinite(_)&&(o.pipelinesByTemplate[e]=_);if(s.pipelinesByStatus&&typeof s.pipelinesByStatus=="object")for(const[e,_]of Object.entries(s.pipelinesByStatus))typeof _=="number"&&Number.isFinite(_)&&(o.pipelinesByStatus[e]=_);if(s.stagesByStatus&&typeof s.stagesByStatus=="object")for(const[e,_]of Object.entries(s.stagesByStatus))typeof _=="number"&&Number.isFinite(_)&&(o.stagesByStatus[e]=_);if(s.deploysByStrategy&&typeof s.deploysByStrategy=="object")for(const[e,_]of Object.entries(s.deploysByStrategy))typeof _=="number"&&Number.isFinite(_)&&(o.deploysByStrategy[e]=_);return o}function Xe(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 $e={__name:"Pipeline",setup(t,{expose:o}){o();const s=ue(),{t:e}=de(),_=A(!1),I=A(!1),C=A([]),U=A([]),G=A([]),L=A({totalPipelines:0,pipelinesByTemplate:{},pipelinesByStatus:{},totalStages:0,stagesByStatus:{},totalArtifacts:0,totalDeploys:0,deploysByStrategy:{}}),P=A({noDb:!1,error:""}),z=A("pipelines"),D=A(""),E=A(""),N=A(!1),S=A(!1),k=ce({template:"feature",name:"",configJson:""}),J=A(null),q=Y(()=>[{title:e("pipeline.cols.name"),key:"name"},{title:e("pipeline.cols.template"),key:"template",width:"110px"},{title:e("pipeline.cols.progress"),key:"progress",width:"160px"},{title:e("pipeline.cols.currentStage"),key:"currentStage",width:"140px"},{title:e("pipeline.cols.status"),key:"status",width:"110px"},{title:e("pipeline.cols.createdAt"),key:"createdAt",width:"160px"},{title:e("pipeline.cols.action"),key:"action",width:"260px"}]),j=Y(()=>[{title:e("pipeline.cols.pipeline"),key:"pipeline",width:"180px"},{title:e("pipeline.cols.strategy"),key:"strategy",width:"120px"},{title:e("pipeline.cols.status"),key:"status",width:"110px"},{title:e("pipeline.cols.createdAt"),key:"createdAt"}]),H=Y(()=>{let a=C.value;return D.value&&(a=a.filter(u=>u.template===D.value)),E.value&&(a=a.filter(u=>u.status===E.value)),a});function Q(a){const u=`pipeline.templateLabels.${a}`,y=e(u);return y===u?a:y}function Z(a){return{feature:"green",bugfix:"red",refactor:"purple","security-audit":"volcano"}[a]||"default"}function w(a){const u=`pipeline.stageLabels.${a}`,y=e(u);return y===u?a:y}function X(a){const u=`pipeline.pipelineStatusLabels.${a}`,y=e(u);return y===u?a:y}function $(a){return{pending:"default",running:"processing",paused:"orange",completed:"green",failed:"red",cancelled:"default"}[a]||"default"}function ee(a){const u=`pipeline.stageStatusLabels.${a}`,y=e(u);return y===u?a:y}function V(a){return{pending:"default",running:"processing","gate-waiting":"gold",completed:"green",failed:"red",skipped:"default"}[a]||"default"}function B(a){const u=`pipeline.deployStatusLabels.${a}`,y=e(u);return y===u?a:y}function te(a){return{pending:"default",running:"processing",succeeded:"green",failed:"red","rolled-back":"orange"}[a]||"default"}function le(a){return{"git-pr":"blue",docker:"cyan","npm-publish":"magenta",local:"default",staging:"orange",custom:"purple"}[a]||"default"}function ae(a){return{pending:"gray",running:"blue","gate-waiting":"gold",completed:"green",failed:"red",skipped:"gray"}[a]||"gray"}function l(a){if(!a.stages.length)return 0;const u=a.stages.filter(y=>y.status==="completed").length;return Math.round(100*u/a.stages.length)}function c(a){if(!a.stages.length)return null;const u=Math.min(a.currentStage,a.stages.length-1);return a.stages[u]||null}function T(a){if(a.status!=="running")return!1;const u=c(a);return u&&u.status==="gate-waiting"&&u.gateRequired&&!u.gateApproved}function ve(a){return a.status==="pending"||a.status==="running"||a.status==="paused"}async function K(){_.value=!0,P.value={noDb:!1,error:""};try{const[a,u,y,O]=await Promise.all([s.execute("pipeline list",1e4).catch(()=>({output:""})),s.execute("pipeline deploys",1e4).catch(()=>({output:""})),s.execute("pipeline templates",8e3).catch(()=>({output:""})),s.execute("pipeline stats",8e3).catch(()=>({output:""}))]),se=[a,u,O].map(ne=>ie(ne.output)).find(ne=>ne.noDb);se&&(P.value=se),C.value=fe(a.output),U.value=ge(u.output),G.value=me(y.output),L.value=ye(O.output)}catch(a){h.error(e("pipeline.msg.loadFailed")+": "+(a?.message||a))}finally{_.value=!1}}async function ke(){if(!k.template){h.warning(e("pipeline.msg.selectTemplate"));return}if(k.configJson.trim())try{JSON.parse(k.configJson)}catch{h.warning(e("pipeline.msg.badConfigJson"));return}I.value=!0;try{const a=[`pipeline create --template ${k.template}`];k.name.trim()&&a.push(`--name "${k.name.trim().replace(/"/g,'\\"')}"`),k.configJson.trim()&&a.push(`--config '${k.configJson.trim().replace(/'/g,"'\\''")}'`);const{output:u}=await s.execute(a.join(" "),1e4);if(ie(u).noDb){h.error(e("pipeline.msg.needCcInit"));return}if(/error|Error|失败/i.test(u)&&!/"id"/.test(u)){h.error(e("pipeline.msg.createFailed")+": "+u.slice(0,120));return}h.success(e("pipeline.msg.createSuccess")),N.value=!1,oe(),await K()}catch(a){h.error(e("pipeline.msg.createFailed")+": "+(a?.message||a))}finally{I.value=!1}}async function Se(a){await R(a,`pipeline start ${a.id}`,e("pipeline.msg.started"))}async function Ae(a){await R(a,`pipeline pause ${a.id}`,e("pipeline.msg.paused"))}async function Ce(a){await R(a,`pipeline resume ${a.id}`,e("pipeline.msg.resumed"))}async function Pe(a){await R(a,`pipeline approve ${a.id}`,e("pipeline.msg.gateApproved"))}async function xe(a){await R(a,`pipeline cancel ${a.id}`,e("pipeline.msg.cancelled"))}async function R(a,u,y){try{const{output:O}=await s.execute(u,8e3);if(/error|Error|失败/i.test(O)&&!/"id"/.test(O)){h.error(e("pipeline.msg.actionFailed")+": "+O.slice(0,120));return}h.success(y),await K()}catch(O){h.error(e("pipeline.msg.actionFailed")+": "+(O?.message||O))}}function he(a){J.value=a,S.value=!0}function oe(){k.template="feature",k.name="",k.configJson=""}pe(K);const re={ws:s,t:e,loading:_,creating:I,pipelines:C,deploys:U,templates:G,stats:L,errorState:P,activeTab:z,templateFilter:D,statusFilter:E,showCreateModal:N,showDetailsModal:S,createForm:k,currentPipeline:J,pipelineColumns:q,deployColumns:j,filteredPipelines:H,templateLabel:Q,templateColor:Z,stageLabel:w,pipelineStatusLabel:X,pipelineStatusColor:$,stageStatusLabel:ee,stageStatusColor:V,deployStatusLabel:B,deployStatusColor:te,strategyColor:le,timelineColor:ae,pipelineProgress:l,currentStageRecord:c,needsApproval:T,canCancel:ve,loadAll:K,createPipeline:ke,startPipeline:Se,pausePipeline:Ae,resumePipeline:Ce,approveGate:Pe,cancelPipeline:xe,runPipelineAction:R,viewPipelineDetails:he,resetCreateForm:oe,ref:A,computed:Y,onMounted:pe,reactive:ce,get ReloadOutlined(){return Ge},get PlusOutlined(){return Ue},get ApartmentOutlined(){return Ie},get PlayCircleOutlined(){return we},get BlockOutlined(){return je},get FileTextOutlined(){return Ne},get CloudUploadOutlined(){return Me},get ArrowRightOutlined(){return Re},get LockOutlined(){return De},get CheckCircleOutlined(){return Fe},get LoadingOutlined(){return Be},get CloseCircleOutlined(){return Ee},get ClockCircleOutlined(){return ze},get message(){return h},get useI18n(){return de},get useWsStore(){return ue},get parsePipelines(){return fe},get parseDeploys(){return ge},get parseTemplates(){return me},get parseStats(){return ye},get detectPipelineError(){return ie},get formatPipelineTime(){return Xe},get PIPELINE_STATUSES(){return be},get STAGE_NAMES(){return qe},get TEMPLATES(){return _e},get GATE_STAGES(){return Ke}};return Object.defineProperty(re,"__isScriptSetup",{enumerable:!1,value:!0}),re}},et={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},tt={class:"page-title"},lt={class:"page-sub"},at={class:"stage-flow"},nt={class:"stage-idx"},it={class:"filter-bar"},ot={style:{color:"var(--text-primary)","font-weight":"500"}},rt={style:{color:"var(--text-secondary)","font-size":"11px","font-family":"monospace","margin-top":"2px"}},st={key:1,style:{color:"var(--text-muted)"}},pt={key:5,style:{color:"var(--text-secondary)","font-size":"11px"}},ct={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},ut={key:0,style:{color:"var(--text-primary)","font-family":"monospace","font-size":"12px"}},dt={key:3,style:{color:"var(--text-secondary)","font-size":"11px"}},ft={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},gt={style:{color:"var(--text-secondary)","font-size":"12px",margin:"0 0 10px"}},mt={class:"tpl-stages"},yt={key:0,style:{"padding-top":"8px"}},bt={style:{color:"var(--text-primary)","font-size":"13px",margin:"20px 0 10px"}},_t={style:{display:"flex","align-items":"center",gap:"8px","flex-wrap":"wrap"}},vt={style:{color:"var(--text-primary)","font-weight":"500"}},kt={key:0,style:{color:"#52c41a","margin-left":"4px"}},St={key:0,style:{color:"#ff4d4f","font-size":"11px","margin-top":"4px"}},At={key:1,style:{color:"var(--text-secondary)","font-size":"11px","margin-top":"2px"}},Ct={key:0};function Pt(t,o,s,e,_,I){const C=m("a-button"),U=m("a-space"),G=m("a-alert"),L=m("a-statistic"),P=m("a-card"),z=m("a-col"),D=m("a-row"),E=m("a-radio-button"),N=m("a-radio-group"),S=m("a-tag"),k=m("a-progress"),J=m("a-popconfirm"),q=m("a-table"),j=m("a-tab-pane"),H=m("a-tabs"),Q=m("a-select-option"),Z=m("a-select"),w=m("a-form-item"),X=m("a-input"),$=m("a-textarea"),ee=m("a-form"),V=m("a-modal"),B=m("a-descriptions-item"),te=m("a-descriptions"),le=m("a-timeline-item"),ae=m("a-timeline");return r(),b("div",null,[v("div",et,[v("div",null,[v("h2",tt,p(t.$t("pipeline.title")),1),v("p",lt,p(t.$t("pipeline.subtitle")),1)]),i(U,null,{default:n(()=>[i(C,{loading:e.loading,onClick:e.loadAll},{icon:n(()=>[i(e.ReloadOutlined)]),default:n(()=>[f(" "+p(t.$t("pipeline.refresh")),1)]),_:1},8,["loading"]),i(C,{type:"primary",onClick:o[0]||(o[0]=l=>e.showCreateModal=!0)},{icon:n(()=>[i(e.PlusOutlined)]),default:n(()=>[f(" "+p(t.$t("pipeline.create")),1)]),_:1})]),_:1})]),d(" noDb banner "),e.errorState.noDb?(r(),g(G,{key:0,type:"info","show-icon":"",message:t.$t("pipeline.noDb.message"),description:t.$t("pipeline.noDb.description"),style:{"margin-bottom":"16px"}},null,8,["message","description"])):d("v-if",!0),d(" Stat cards "),i(D,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:n(()=>[i(z,{xs:12,sm:8,lg:5},{default:n(()=>[i(P,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[i(L,{title:t.$t("pipeline.stats.totalPipelines"),value:e.stats.totalPipelines,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:n(()=>[i(e.ApartmentOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),i(z,{xs:12,sm:8,lg:5},{default:n(()=>[i(P,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[i(L,{title:t.$t("pipeline.stats.running"),value:e.stats.pipelinesByStatus.running||0,"value-style":{color:(e.stats.pipelinesByStatus.running||0)>0?"#52c41a":"#888",fontSize:"20px"}},{prefix:n(()=>[i(e.PlayCircleOutlined)]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),i(z,{xs:12,sm:8,lg:5},{default:n(()=>[i(P,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[i(L,{title:t.$t("pipeline.stats.totalStages"),value:e.stats.totalStages,"value-style":{color:"#722ed1",fontSize:"20px"}},{prefix:n(()=>[i(e.BlockOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),i(z,{xs:12,sm:8,lg:5},{default:n(()=>[i(P,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[i(L,{title:t.$t("pipeline.stats.totalArtifacts"),value:e.stats.totalArtifacts,"value-style":{color:"#13c2c2",fontSize:"20px"}},{prefix:n(()=>[i(e.FileTextOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),i(z,{xs:24,sm:8,lg:4},{default:n(()=>[i(P,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[i(L,{title:t.$t("pipeline.stats.totalDeploys"),value:e.stats.totalDeploys,"value-style":{color:"#faad14",fontSize:"20px"}},{prefix:n(()=>[i(e.CloudUploadOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1})]),_:1}),d(" Stages catalogue "),i(P,{title:t.$t("pipeline.stagesCardTitle"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"},"body-style":{padding:"12px 16px"}},{default:n(()=>[v("div",at,[(r(!0),b(x,null,F(e.STAGE_NAMES,(l,c)=>(r(),b(x,{key:l},[v("span",{class:Te(["stage-pill",{"is-gate":e.GATE_STAGES.includes(l)}])},[v("span",nt,p(c+1),1),f(" "+p(e.stageLabel(l))+" ",1),e.GATE_STAGES.includes(l)?(r(),g(e.LockOutlined,{key:0,class:"gate-icon"})):d("v-if",!0)],2),c<e.STAGE_NAMES.length-1?(r(),g(e.ArrowRightOutlined,{key:0,class:"stage-arrow"})):d("v-if",!0)],64))),128))])]),_:1},8,["title"]),d(" Tabs "),i(H,{activeKey:e.activeTab,"onUpdate:activeKey":o[3]||(o[3]=l=>e.activeTab=l),class:"pipeline-tabs"},{default:n(()=>[d(" ── Pipelines tab ─────────────────────────────────────────── "),i(j,{key:"pipelines",tab:t.$t("pipeline.tabs.pipelines")},{default:n(()=>[v("div",it,[i(N,{value:e.templateFilter,"onUpdate:value":o[1]||(o[1]=l=>e.templateFilter=l),size:"small","button-style":"solid"},{default:n(()=>[i(E,{value:""},{default:n(()=>[f(p(t.$t("pipeline.filters.allTemplates")),1)]),_:1}),(r(!0),b(x,null,F(e.TEMPLATES,l=>(r(),g(E,{key:l,value:l},{default:n(()=>[f(p(e.templateLabel(l)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),i(N,{value:e.statusFilter,"onUpdate:value":o[2]||(o[2]=l=>e.statusFilter=l),size:"small"},{default:n(()=>[i(E,{value:""},{default:n(()=>[f(p(t.$t("pipeline.filters.allStatuses")),1)]),_:1}),(r(!0),b(x,null,F(e.PIPELINE_STATUSES,l=>(r(),g(E,{key:l,value:l},{default:n(()=>[f(p(e.pipelineStatusLabel(l)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),i(q,{columns:e.pipelineColumns,"data-source":e.filteredPipelines,pagination:{pageSize:20,showTotal:l=>t.$t("pipeline.table.totalSuffix",{n:l})},size:"small",loading:e.loading,style:{background:"var(--bg-card)"}},{bodyCell:n(({column:l,record:c})=>[l.key==="name"?(r(),b(x,{key:0},[v("span",ot,p(c.name||t.$t("pipeline.table.unnamed")),1),v("div",rt,p(c.id.slice(0,16)),1)],64)):d("v-if",!0),l.key==="template"?(r(),g(S,{key:1,color:e.templateColor(c.template)},{default:n(()=>[f(p(e.templateLabel(c.template)),1)]),_:2},1032,["color"])):d("v-if",!0),l.key==="progress"?(r(),g(k,{key:2,percent:e.pipelineProgress(c),size:"small",status:c.status==="failed"?"exception":c.status==="completed"?"success":"active",format:()=>`${c.currentStage}/${c.stages.length}`},null,8,["percent","status","format"])):d("v-if",!0),l.key==="currentStage"?(r(),b(x,{key:3},[e.currentStageRecord(c)?(r(),g(S,{key:0,color:e.stageStatusColor(e.currentStageRecord(c).status)},{default:n(()=>[f(p(e.stageLabel(e.currentStageRecord(c).name)),1)]),_:2},1032,["color"])):(r(),b("span",st,"—"))],64)):d("v-if",!0),l.key==="status"?(r(),g(S,{key:4,color:e.pipelineStatusColor(c.status)},{default:n(()=>[f(p(e.pipelineStatusLabel(c.status)),1)]),_:2},1032,["color"])):d("v-if",!0),l.key==="createdAt"?(r(),b("span",pt,p(e.formatPipelineTime(c.createdAt)),1)):d("v-if",!0),l.key==="action"?(r(),b(x,{key:6},[i(C,{size:"small",type:"link",onClick:T=>e.viewPipelineDetails(c)},{default:n(()=>[f(p(t.$t("pipeline.table.actions.details")),1)]),_:1},8,["onClick"]),c.status==="pending"?(r(),g(C,{key:0,size:"small",type:"link",onClick:T=>e.startPipeline(c)},{default:n(()=>[f(p(t.$t("pipeline.table.actions.start")),1)]),_:1},8,["onClick"])):d("v-if",!0),c.status==="running"?(r(),g(C,{key:1,size:"small",type:"link",onClick:T=>e.pausePipeline(c)},{default:n(()=>[f(p(t.$t("pipeline.table.actions.pause")),1)]),_:1},8,["onClick"])):d("v-if",!0),c.status==="paused"?(r(),g(C,{key:2,size:"small",type:"link",onClick:T=>e.resumePipeline(c)},{default:n(()=>[f(p(t.$t("pipeline.table.actions.resume")),1)]),_:1},8,["onClick"])):d("v-if",!0),e.needsApproval(c)?(r(),g(C,{key:3,size:"small",type:"link",style:{color:"#52c41a"},onClick:T=>e.approveGate(c)},{default:n(()=>[f(p(t.$t("pipeline.table.actions.approveGate")),1)]),_:1},8,["onClick"])):d("v-if",!0),e.canCancel(c)?(r(),g(J,{key:4,title:t.$t("pipeline.table.cancelConfirm"),"ok-text":t.$t("pipeline.table.cancelOk"),"cancel-text":t.$t("pipeline.table.cancelBack"),onConfirm:T=>e.cancelPipeline(c)},{default:n(()=>[i(C,{size:"small",type:"link",danger:""},{default:n(()=>[f(p(t.$t("pipeline.table.actions.cancel")),1)]),_:1})]),_:1},8,["title","ok-text","cancel-text","onConfirm"])):d("v-if",!0)],64)):d("v-if",!0)]),emptyText:n(()=>[v("div",ct,[i(e.ApartmentOutlined,{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),f(" "+p(e.templateFilter||e.statusFilter?t.$t("pipeline.table.emptyFiltered"):t.$t("pipeline.table.empty")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),d(" ── Deploys tab ───────────────────────────────────────────── "),i(j,{key:"deploys",tab:t.$t("pipeline.tabs.deploys")},{default:n(()=>[i(q,{columns:e.deployColumns,"data-source":e.deploys,pagination:{pageSize:20,showTotal:l=>t.$t("pipeline.table.totalSuffix",{n:l})},size:"small",loading:e.loading,style:{background:"var(--bg-card)"}},{bodyCell:n(({column:l,record:c})=>[l.key==="pipeline"?(r(),b("span",ut,p(c.pipelineId.slice(0,12)),1)):d("v-if",!0),l.key==="strategy"?(r(),g(S,{key:1,color:e.strategyColor(c.strategy),style:{"font-family":"monospace"}},{default:n(()=>[f(p(c.strategy),1)]),_:2},1032,["color"])):d("v-if",!0),l.key==="status"?(r(),g(S,{key:2,color:e.deployStatusColor(c.status)},{default:n(()=>[f(p(e.deployStatusLabel(c.status)),1)]),_:2},1032,["color"])):d("v-if",!0),l.key==="createdAt"?(r(),b("span",dt,p(e.formatPipelineTime(c.createdAt)),1)):d("v-if",!0)]),emptyText:n(()=>[v("div",ft,[i(e.CloudUploadOutlined,{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),f(" "+p(t.$t("pipeline.table.emptyDeploys")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),d(" ── Templates tab ─────────────────────────────────────────── "),i(j,{key:"templates",tab:t.$t("pipeline.tabs.templates")},{default:n(()=>[i(D,{gutter:[16,16]},{default:n(()=>[(r(!0),b(x,null,F(e.templates,l=>(r(),g(z,{key:l.name,xs:24,sm:12,lg:12},{default:n(()=>[i(P,{title:e.templateLabel(l.name),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{extra:n(()=>[i(S,{color:e.templateColor(l.name)},{default:n(()=>[f(p(l.name),1)]),_:2},1032,["color"])]),default:n(()=>[v("p",gt,p(l.description),1),v("div",mt,[(r(!0),b(x,null,F(l.stages,(c,T)=>(r(),g(S,{key:c,color:l.gateStages.includes(c)?"gold":"blue",style:{"font-size":"11px"}},{default:n(()=>[f(p(T+1)+". "+p(e.stageLabel(c))+" ",1),l.gateStages.includes(c)?(r(),g(e.LockOutlined,{key:0,style:{"font-size":"10px","margin-left":"2px"}})):d("v-if",!0)]),_:2},1032,["color"]))),128))])]),_:2},1032,["title"])]),_:2},1024))),128))]),_:1})]),_:1},8,["tab"])]),_:1},8,["activeKey"]),d(" ── Create pipeline modal ────────────────────────────────── "),i(V,{open:e.showCreateModal,"onUpdate:open":o[7]||(o[7]=l=>e.showCreateModal=l),title:t.$t("pipeline.create_modal.title"),"confirm-loading":e.creating,width:540,"ok-text":t.$t("pipeline.create_modal.ok"),"cancel-text":t.$t("pipeline.create_modal.cancel"),onOk:e.createPipeline,onCancel:e.resetCreateForm},{default:n(()=>[i(ee,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:n(()=>[i(w,{label:t.$t("pipeline.create_modal.templateLabel"),required:""},{default:n(()=>[i(Z,{value:e.createForm.template,"onUpdate:value":o[4]||(o[4]=l=>e.createForm.template=l)},{default:n(()=>[(r(!0),b(x,null,F(e.TEMPLATES,l=>(r(),g(Q,{key:l,value:l},{default:n(()=>[f(p(e.templateLabel(l)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"]),i(w,{label:t.$t("pipeline.create_modal.nameLabel")},{default:n(()=>[i(X,{value:e.createForm.name,"onUpdate:value":o[5]||(o[5]=l=>e.createForm.name=l),placeholder:t.$t("pipeline.create_modal.namePlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),i(w,{label:t.$t("pipeline.create_modal.configLabel")},{default:n(()=>[i($,{value:e.createForm.configJson,"onUpdate:value":o[6]||(o[6]=l=>e.createForm.configJson=l),placeholder:t.$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"]),d(" ── Pipeline details modal ───────────────────────────────── "),i(V,{open:e.showDetailsModal,"onUpdate:open":o[8]||(o[8]=l=>e.showDetailsModal=l),title:t.$t("pipeline.details.title",{label:e.currentPipeline?.name||e.currentPipeline?.id?.slice(0,12)||""}),width:780,footer:null},{default:n(()=>[e.currentPipeline?(r(),b("div",yt,[i(te,{column:2,size:"small",bordered:""},{default:n(()=>[i(B,{label:t.$t("pipeline.details.template")},{default:n(()=>[i(S,{color:e.templateColor(e.currentPipeline.template)},{default:n(()=>[f(p(e.templateLabel(e.currentPipeline.template)),1)]),_:1},8,["color"])]),_:1},8,["label"]),i(B,{label:t.$t("pipeline.details.status")},{default:n(()=>[i(S,{color:e.pipelineStatusColor(e.currentPipeline.status)},{default:n(()=>[f(p(e.pipelineStatusLabel(e.currentPipeline.status)),1)]),_:1},8,["color"])]),_:1},8,["label"]),i(B,{label:t.$t("pipeline.details.progress"),span:2},{default:n(()=>[i(k,{percent:e.pipelineProgress(e.currentPipeline),status:e.currentPipeline.status==="failed"?"exception":e.currentPipeline.status==="completed"?"success":"active",size:"small"},null,8,["percent","status"])]),_:1},8,["label"]),i(B,{label:t.$t("pipeline.details.createdAt")},{default:n(()=>[f(p(e.formatPipelineTime(e.currentPipeline.createdAt)),1)]),_:1},8,["label"]),i(B,{label:t.$t("pipeline.details.startedAt")},{default:n(()=>[f(p(e.formatPipelineTime(e.currentPipeline.startedAt)),1)]),_:1},8,["label"])]),_:1}),v("h4",bt,p(t.$t("pipeline.details.stagesHeader")),1),i(ae,{mode:"left"},{default:n(()=>[(r(!0),b(x,null,F(e.currentPipeline.stages,l=>(r(),g(le,{key:l.id,color:e.timelineColor(l.status)},{dot:n(()=>[l.status==="completed"?(r(),g(e.CheckCircleOutlined,{key:0,style:{color:"#52c41a"}})):l.status==="running"?(r(),g(e.LoadingOutlined,{key:1,style:{color:"#1677ff"}})):l.status==="failed"?(r(),g(e.CloseCircleOutlined,{key:2,style:{color:"#ff4d4f"}})):l.status==="gate-waiting"?(r(),g(e.LockOutlined,{key:3,style:{color:"#faad14"}})):(r(),g(e.ClockCircleOutlined,{key:4,style:{color:"var(--text-muted)"}}))]),default:n(()=>[v("div",_t,[v("span",vt,p(l.stageIndex+1)+". "+p(e.stageLabel(l.name)),1),i(S,{color:e.stageStatusColor(l.status),style:{"font-size":"11px"}},{default:n(()=>[f(p(e.stageStatusLabel(l.status)),1)]),_:2},1032,["color"]),l.gateRequired?(r(),g(S,{key:0,color:"gold",style:{"font-size":"10px"}},{default:n(()=>[i(e.LockOutlined),f(" "+p(t.$t("pipeline.details.needsApproval"))+" ",1),l.gateApproved?(r(),b("span",kt,p(t.$t("pipeline.details.approved")),1)):d("v-if",!0)]),_:2},1024)):d("v-if",!0)]),l.errorMessage?(r(),b("div",St,p(t.$t("pipeline.details.errorPrefix"))+" "+p(l.errorMessage),1)):d("v-if",!0),l.startedAt?(r(),b("div",At,[f(p(e.formatPipelineTime(l.startedAt))+" ",1),l.completedAt?(r(),b("span",Ct," → "+p(e.formatPipelineTime(l.completedAt)),1)):d("v-if",!0)])):d("v-if",!0)]),_:2},1032,["color"]))),128))]),_:1})])):d("v-if",!0)]),_:1},8,["open","title"])])}const Ot=Le($e,[["render",Pt],["__scopeId","data-v-ee23c547"],["__file","/tmp/cc-web-panel-wxwyEA/repo/packages/web-panel/src/views/Pipeline.vue"]]);export{Ot as default};
1
+ import{I as m,J as b,U as v,R as p,c as i,K as n,V as d,S as g,o as pe,a as ce,b as Y,r as A,P as r,Q as f,F as h,Z as F,_ as Te}from"./vendor-BvqAck49.js";import{Y as Oe,t as Q,_ as Le,u as ue,b as de,d as x}from"./index-C1lWhMQw.js";import{a0 as ze,d as Be,L as Ee,f as Fe,Y as De,aU as Re,z as Me,a4 as Ne,G as je,ap as we,_ as Ie,as as Ue,R as Ge}from"./icons-DP3uiYxy.js";const be=Object.freeze(["pending","running","paused","completed","failed","cancelled"]),Je=Object.freeze(["pending","running","gate-waiting","completed","failed","skipped"]),qe=Object.freeze(["requirement","architecture","code-generation","testing","code-review","deploy","monitoring"]),_e=Object.freeze(["feature","bugfix","refactor","security-audit"]),Ve=Object.freeze(["git-pr","docker","npm-publish","local","staging","custom"]),Ke=Object.freeze(["code-review","deploy"]);function M(t,o=0){return typeof t=="number"&&Number.isFinite(t)?t:o}function ie(t){if(!t)return{noDb:!1,error:""};const o=Oe(t),s=/No database/i.test(o);return{noDb:s,error:s?"No database":""}}function Ye(t,o=0){if(!t||typeof t!="object")return null;const s=t.id||"";return s?{key:s,id:s,pipelineId:String(t.pipelineId||""),stageIndex:M(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 Qe(t,o=0){if(!t||typeof t!="object")return null;const s=t.id||"";if(!s)return null;const e=Array.isArray(t.stages)?t.stages.map(Ye).filter(Boolean):[];return{key:s,id:s,name:t.name||"",template:String(t.template||""),config:t.config??null,status:String(t.status||"pending").toLowerCase(),currentStage:M(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:e,_idx:o}}function fe(t){const o=Q(t);return Array.isArray(o)?o.map(Qe).filter(Boolean):[]}function We(t,o=0){if(!t||typeof t!="object")return null;const s=t.id||"";return s?{key:s,id:s,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 ge(t){const o=Q(t);return Array.isArray(o)?o.map(We).filter(Boolean):[]}function He(t,o=0){if(!t||typeof t!="object")return null;const s=t.name||"";return s?{key:s,name:s,description:String(t.description||""),stages:Array.isArray(t.stages)?t.stages.filter(e=>typeof e=="string"):[],gateStages:Array.isArray(t.gateStages)?t.gateStages.filter(e=>typeof e=="string"):[],_idx:o}:null}function me(t){const o=Q(t);return Array.isArray(o)?o.map(He).filter(Boolean):[]}const Ze={totalPipelines:0,pipelinesByTemplate:{},pipelinesByStatus:{},totalStages:0,stagesByStatus:{},totalArtifacts:0,totalDeploys:0,deploysByStrategy:{}};function ye(t){const o=JSON.parse(JSON.stringify(Ze));for(const e of _e)o.pipelinesByTemplate[e]=0;for(const e of be)o.pipelinesByStatus[e]=0;for(const e of Je)o.stagesByStatus[e]=0;for(const e of Ve)o.deploysByStrategy[e]=0;const s=Q(t);if(!s||typeof s!="object"||Array.isArray(s))return o;if(o.totalPipelines=M(s.totalPipelines,0),o.totalStages=M(s.totalStages,0),o.totalArtifacts=M(s.totalArtifacts,0),o.totalDeploys=M(s.totalDeploys,0),s.pipelinesByTemplate&&typeof s.pipelinesByTemplate=="object")for(const[e,_]of Object.entries(s.pipelinesByTemplate))typeof _=="number"&&Number.isFinite(_)&&(o.pipelinesByTemplate[e]=_);if(s.pipelinesByStatus&&typeof s.pipelinesByStatus=="object")for(const[e,_]of Object.entries(s.pipelinesByStatus))typeof _=="number"&&Number.isFinite(_)&&(o.pipelinesByStatus[e]=_);if(s.stagesByStatus&&typeof s.stagesByStatus=="object")for(const[e,_]of Object.entries(s.stagesByStatus))typeof _=="number"&&Number.isFinite(_)&&(o.stagesByStatus[e]=_);if(s.deploysByStrategy&&typeof s.deploysByStrategy=="object")for(const[e,_]of Object.entries(s.deploysByStrategy))typeof _=="number"&&Number.isFinite(_)&&(o.deploysByStrategy[e]=_);return o}function Xe(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 $e={__name:"Pipeline",setup(t,{expose:o}){o();const s=ue(),{t:e}=de(),_=A(!1),I=A(!1),C=A([]),U=A([]),G=A([]),L=A({totalPipelines:0,pipelinesByTemplate:{},pipelinesByStatus:{},totalStages:0,stagesByStatus:{},totalArtifacts:0,totalDeploys:0,deploysByStrategy:{}}),P=A({noDb:!1,error:""}),z=A("pipelines"),D=A(""),B=A(""),N=A(!1),S=A(!1),k=ce({template:"feature",name:"",configJson:""}),J=A(null),q=Y(()=>[{title:e("pipeline.cols.name"),key:"name"},{title:e("pipeline.cols.template"),key:"template",width:"110px"},{title:e("pipeline.cols.progress"),key:"progress",width:"160px"},{title:e("pipeline.cols.currentStage"),key:"currentStage",width:"140px"},{title:e("pipeline.cols.status"),key:"status",width:"110px"},{title:e("pipeline.cols.createdAt"),key:"createdAt",width:"160px"},{title:e("pipeline.cols.action"),key:"action",width:"260px"}]),j=Y(()=>[{title:e("pipeline.cols.pipeline"),key:"pipeline",width:"180px"},{title:e("pipeline.cols.strategy"),key:"strategy",width:"120px"},{title:e("pipeline.cols.status"),key:"status",width:"110px"},{title:e("pipeline.cols.createdAt"),key:"createdAt"}]),W=Y(()=>{let a=C.value;return D.value&&(a=a.filter(u=>u.template===D.value)),B.value&&(a=a.filter(u=>u.status===B.value)),a});function H(a){const u=`pipeline.templateLabels.${a}`,y=e(u);return y===u?a:y}function Z(a){return{feature:"green",bugfix:"red",refactor:"purple","security-audit":"volcano"}[a]||"default"}function w(a){const u=`pipeline.stageLabels.${a}`,y=e(u);return y===u?a:y}function X(a){const u=`pipeline.pipelineStatusLabels.${a}`,y=e(u);return y===u?a:y}function $(a){return{pending:"default",running:"processing",paused:"orange",completed:"green",failed:"red",cancelled:"default"}[a]||"default"}function ee(a){const u=`pipeline.stageStatusLabels.${a}`,y=e(u);return y===u?a:y}function V(a){return{pending:"default",running:"processing","gate-waiting":"gold",completed:"green",failed:"red",skipped:"default"}[a]||"default"}function E(a){const u=`pipeline.deployStatusLabels.${a}`,y=e(u);return y===u?a:y}function te(a){return{pending:"default",running:"processing",succeeded:"green",failed:"red","rolled-back":"orange"}[a]||"default"}function le(a){return{"git-pr":"blue",docker:"cyan","npm-publish":"magenta",local:"default",staging:"orange",custom:"purple"}[a]||"default"}function ae(a){return{pending:"gray",running:"blue","gate-waiting":"gold",completed:"green",failed:"red",skipped:"gray"}[a]||"gray"}function l(a){if(!a.stages.length)return 0;const u=a.stages.filter(y=>y.status==="completed").length;return Math.round(100*u/a.stages.length)}function c(a){if(!a.stages.length)return null;const u=Math.min(a.currentStage,a.stages.length-1);return a.stages[u]||null}function T(a){if(a.status!=="running")return!1;const u=c(a);return u&&u.status==="gate-waiting"&&u.gateRequired&&!u.gateApproved}function ve(a){return a.status==="pending"||a.status==="running"||a.status==="paused"}async function K(){_.value=!0,P.value={noDb:!1,error:""};try{const[a,u,y,O]=await Promise.all([s.execute("pipeline list",1e4).catch(()=>({output:""})),s.execute("pipeline deploys",1e4).catch(()=>({output:""})),s.execute("pipeline templates",8e3).catch(()=>({output:""})),s.execute("pipeline stats",8e3).catch(()=>({output:""}))]),se=[a,u,O].map(ne=>ie(ne.output)).find(ne=>ne.noDb);se&&(P.value=se),C.value=fe(a.output),U.value=ge(u.output),G.value=me(y.output),L.value=ye(O.output)}catch(a){x.error(e("pipeline.msg.loadFailed")+": "+(a?.message||a))}finally{_.value=!1}}async function ke(){if(!k.template){x.warning(e("pipeline.msg.selectTemplate"));return}if(k.configJson.trim())try{JSON.parse(k.configJson)}catch{x.warning(e("pipeline.msg.badConfigJson"));return}I.value=!0;try{const a=[`pipeline create --template ${k.template}`];k.name.trim()&&a.push(`--name "${k.name.trim().replace(/"/g,'\\"')}"`),k.configJson.trim()&&a.push(`--config '${k.configJson.trim().replace(/'/g,"'\\''")}'`);const{output:u}=await s.execute(a.join(" "),1e4);if(ie(u).noDb){x.error(e("pipeline.msg.needCcInit"));return}if(/error|Error|失败/i.test(u)&&!/"id"/.test(u)){x.error(e("pipeline.msg.createFailed")+": "+u.slice(0,120));return}x.success(e("pipeline.msg.createSuccess")),N.value=!1,oe(),await K()}catch(a){x.error(e("pipeline.msg.createFailed")+": "+(a?.message||a))}finally{I.value=!1}}async function Se(a){await R(a,`pipeline start ${a.id}`,e("pipeline.msg.started"))}async function Ae(a){await R(a,`pipeline pause ${a.id}`,e("pipeline.msg.paused"))}async function Ce(a){await R(a,`pipeline resume ${a.id}`,e("pipeline.msg.resumed"))}async function Pe(a){await R(a,`pipeline approve ${a.id}`,e("pipeline.msg.gateApproved"))}async function he(a){await R(a,`pipeline cancel ${a.id}`,e("pipeline.msg.cancelled"))}async function R(a,u,y){try{const{output:O}=await s.execute(u,8e3);if(/error|Error|失败/i.test(O)&&!/"id"/.test(O)){x.error(e("pipeline.msg.actionFailed")+": "+O.slice(0,120));return}x.success(y),await K()}catch(O){x.error(e("pipeline.msg.actionFailed")+": "+(O?.message||O))}}function xe(a){J.value=a,S.value=!0}function oe(){k.template="feature",k.name="",k.configJson=""}pe(K);const re={ws:s,t:e,loading:_,creating:I,pipelines:C,deploys:U,templates:G,stats:L,errorState:P,activeTab:z,templateFilter:D,statusFilter:B,showCreateModal:N,showDetailsModal:S,createForm:k,currentPipeline:J,pipelineColumns:q,deployColumns:j,filteredPipelines:W,templateLabel:H,templateColor:Z,stageLabel:w,pipelineStatusLabel:X,pipelineStatusColor:$,stageStatusLabel:ee,stageStatusColor:V,deployStatusLabel:E,deployStatusColor:te,strategyColor:le,timelineColor:ae,pipelineProgress:l,currentStageRecord:c,needsApproval:T,canCancel:ve,loadAll:K,createPipeline:ke,startPipeline:Se,pausePipeline:Ae,resumePipeline:Ce,approveGate:Pe,cancelPipeline:he,runPipelineAction:R,viewPipelineDetails:xe,resetCreateForm:oe,ref:A,computed:Y,onMounted:pe,reactive:ce,get ReloadOutlined(){return Ge},get PlusOutlined(){return Ue},get ApartmentOutlined(){return Ie},get PlayCircleOutlined(){return we},get BlockOutlined(){return je},get FileTextOutlined(){return Ne},get CloudUploadOutlined(){return Me},get ArrowRightOutlined(){return Re},get LockOutlined(){return De},get CheckCircleOutlined(){return Fe},get LoadingOutlined(){return Ee},get CloseCircleOutlined(){return Be},get ClockCircleOutlined(){return ze},get message(){return x},get useI18n(){return de},get useWsStore(){return ue},get parsePipelines(){return fe},get parseDeploys(){return ge},get parseTemplates(){return me},get parseStats(){return ye},get detectPipelineError(){return ie},get formatPipelineTime(){return Xe},get PIPELINE_STATUSES(){return be},get STAGE_NAMES(){return qe},get TEMPLATES(){return _e},get GATE_STAGES(){return Ke}};return Object.defineProperty(re,"__isScriptSetup",{enumerable:!1,value:!0}),re}},et={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},tt={class:"page-title"},lt={class:"page-sub"},at={class:"stage-flow"},nt={class:"stage-idx"},it={class:"filter-bar"},ot={style:{color:"var(--text-primary)","font-weight":"500"}},rt={style:{color:"var(--text-secondary)","font-size":"11px","font-family":"monospace","margin-top":"2px"}},st={key:1,style:{color:"var(--text-muted)"}},pt={key:5,style:{color:"var(--text-secondary)","font-size":"11px"}},ct={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},ut={key:0,style:{color:"var(--text-primary)","font-family":"monospace","font-size":"12px"}},dt={key:3,style:{color:"var(--text-secondary)","font-size":"11px"}},ft={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},gt={style:{color:"var(--text-secondary)","font-size":"12px",margin:"0 0 10px"}},mt={class:"tpl-stages"},yt={key:0,style:{"padding-top":"8px"}},bt={style:{color:"var(--text-primary)","font-size":"13px",margin:"20px 0 10px"}},_t={style:{display:"flex","align-items":"center",gap:"8px","flex-wrap":"wrap"}},vt={style:{color:"var(--text-primary)","font-weight":"500"}},kt={key:0,style:{color:"#52c41a","margin-left":"4px"}},St={key:0,style:{color:"#ff4d4f","font-size":"11px","margin-top":"4px"}},At={key:1,style:{color:"var(--text-secondary)","font-size":"11px","margin-top":"2px"}},Ct={key:0};function Pt(t,o,s,e,_,I){const C=m("a-button"),U=m("a-space"),G=m("a-alert"),L=m("a-statistic"),P=m("a-card"),z=m("a-col"),D=m("a-row"),B=m("a-radio-button"),N=m("a-radio-group"),S=m("a-tag"),k=m("a-progress"),J=m("a-popconfirm"),q=m("a-table"),j=m("a-tab-pane"),W=m("a-tabs"),H=m("a-select-option"),Z=m("a-select"),w=m("a-form-item"),X=m("a-input"),$=m("a-textarea"),ee=m("a-form"),V=m("a-modal"),E=m("a-descriptions-item"),te=m("a-descriptions"),le=m("a-timeline-item"),ae=m("a-timeline");return r(),b("div",null,[v("div",et,[v("div",null,[v("h2",tt,p(t.$t("pipeline.title")),1),v("p",lt,p(t.$t("pipeline.subtitle")),1)]),i(U,null,{default:n(()=>[i(C,{loading:e.loading,onClick:e.loadAll},{icon:n(()=>[i(e.ReloadOutlined)]),default:n(()=>[f(" "+p(t.$t("pipeline.refresh")),1)]),_:1},8,["loading"]),i(C,{type:"primary",onClick:o[0]||(o[0]=l=>e.showCreateModal=!0)},{icon:n(()=>[i(e.PlusOutlined)]),default:n(()=>[f(" "+p(t.$t("pipeline.create")),1)]),_:1})]),_:1})]),d(" noDb banner "),e.errorState.noDb?(r(),g(G,{key:0,type:"info","show-icon":"",message:t.$t("pipeline.noDb.message"),description:t.$t("pipeline.noDb.description"),style:{"margin-bottom":"16px"}},null,8,["message","description"])):d("v-if",!0),d(" Stat cards "),i(D,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:n(()=>[i(z,{xs:12,sm:8,lg:5},{default:n(()=>[i(P,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[i(L,{title:t.$t("pipeline.stats.totalPipelines"),value:e.stats.totalPipelines,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:n(()=>[i(e.ApartmentOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),i(z,{xs:12,sm:8,lg:5},{default:n(()=>[i(P,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[i(L,{title:t.$t("pipeline.stats.running"),value:e.stats.pipelinesByStatus.running||0,"value-style":{color:(e.stats.pipelinesByStatus.running||0)>0?"#52c41a":"#888",fontSize:"20px"}},{prefix:n(()=>[i(e.PlayCircleOutlined)]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),i(z,{xs:12,sm:8,lg:5},{default:n(()=>[i(P,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[i(L,{title:t.$t("pipeline.stats.totalStages"),value:e.stats.totalStages,"value-style":{color:"#722ed1",fontSize:"20px"}},{prefix:n(()=>[i(e.BlockOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),i(z,{xs:12,sm:8,lg:5},{default:n(()=>[i(P,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[i(L,{title:t.$t("pipeline.stats.totalArtifacts"),value:e.stats.totalArtifacts,"value-style":{color:"#13c2c2",fontSize:"20px"}},{prefix:n(()=>[i(e.FileTextOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),i(z,{xs:24,sm:8,lg:4},{default:n(()=>[i(P,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[i(L,{title:t.$t("pipeline.stats.totalDeploys"),value:e.stats.totalDeploys,"value-style":{color:"#faad14",fontSize:"20px"}},{prefix:n(()=>[i(e.CloudUploadOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1})]),_:1}),d(" Stages catalogue "),i(P,{title:t.$t("pipeline.stagesCardTitle"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"},"body-style":{padding:"12px 16px"}},{default:n(()=>[v("div",at,[(r(!0),b(h,null,F(e.STAGE_NAMES,(l,c)=>(r(),b(h,{key:l},[v("span",{class:Te(["stage-pill",{"is-gate":e.GATE_STAGES.includes(l)}])},[v("span",nt,p(c+1),1),f(" "+p(e.stageLabel(l))+" ",1),e.GATE_STAGES.includes(l)?(r(),g(e.LockOutlined,{key:0,class:"gate-icon"})):d("v-if",!0)],2),c<e.STAGE_NAMES.length-1?(r(),g(e.ArrowRightOutlined,{key:0,class:"stage-arrow"})):d("v-if",!0)],64))),128))])]),_:1},8,["title"]),d(" Tabs "),i(W,{activeKey:e.activeTab,"onUpdate:activeKey":o[3]||(o[3]=l=>e.activeTab=l),class:"pipeline-tabs"},{default:n(()=>[d(" ── Pipelines tab ─────────────────────────────────────────── "),i(j,{key:"pipelines",tab:t.$t("pipeline.tabs.pipelines")},{default:n(()=>[v("div",it,[i(N,{value:e.templateFilter,"onUpdate:value":o[1]||(o[1]=l=>e.templateFilter=l),size:"small","button-style":"solid"},{default:n(()=>[i(B,{value:""},{default:n(()=>[f(p(t.$t("pipeline.filters.allTemplates")),1)]),_:1}),(r(!0),b(h,null,F(e.TEMPLATES,l=>(r(),g(B,{key:l,value:l},{default:n(()=>[f(p(e.templateLabel(l)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),i(N,{value:e.statusFilter,"onUpdate:value":o[2]||(o[2]=l=>e.statusFilter=l),size:"small"},{default:n(()=>[i(B,{value:""},{default:n(()=>[f(p(t.$t("pipeline.filters.allStatuses")),1)]),_:1}),(r(!0),b(h,null,F(e.PIPELINE_STATUSES,l=>(r(),g(B,{key:l,value:l},{default:n(()=>[f(p(e.pipelineStatusLabel(l)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),i(q,{columns:e.pipelineColumns,"data-source":e.filteredPipelines,pagination:{pageSize:20,showTotal:l=>t.$t("pipeline.table.totalSuffix",{n:l})},size:"small",loading:e.loading,style:{background:"var(--bg-card)"}},{bodyCell:n(({column:l,record:c})=>[l.key==="name"?(r(),b(h,{key:0},[v("span",ot,p(c.name||t.$t("pipeline.table.unnamed")),1),v("div",rt,p(c.id.slice(0,16)),1)],64)):d("v-if",!0),l.key==="template"?(r(),g(S,{key:1,color:e.templateColor(c.template)},{default:n(()=>[f(p(e.templateLabel(c.template)),1)]),_:2},1032,["color"])):d("v-if",!0),l.key==="progress"?(r(),g(k,{key:2,percent:e.pipelineProgress(c),size:"small",status:c.status==="failed"?"exception":c.status==="completed"?"success":"active",format:()=>`${c.currentStage}/${c.stages.length}`},null,8,["percent","status","format"])):d("v-if",!0),l.key==="currentStage"?(r(),b(h,{key:3},[e.currentStageRecord(c)?(r(),g(S,{key:0,color:e.stageStatusColor(e.currentStageRecord(c).status)},{default:n(()=>[f(p(e.stageLabel(e.currentStageRecord(c).name)),1)]),_:2},1032,["color"])):(r(),b("span",st,"—"))],64)):d("v-if",!0),l.key==="status"?(r(),g(S,{key:4,color:e.pipelineStatusColor(c.status)},{default:n(()=>[f(p(e.pipelineStatusLabel(c.status)),1)]),_:2},1032,["color"])):d("v-if",!0),l.key==="createdAt"?(r(),b("span",pt,p(e.formatPipelineTime(c.createdAt)),1)):d("v-if",!0),l.key==="action"?(r(),b(h,{key:6},[i(C,{size:"small",type:"link",onClick:T=>e.viewPipelineDetails(c)},{default:n(()=>[f(p(t.$t("pipeline.table.actions.details")),1)]),_:1},8,["onClick"]),c.status==="pending"?(r(),g(C,{key:0,size:"small",type:"link",onClick:T=>e.startPipeline(c)},{default:n(()=>[f(p(t.$t("pipeline.table.actions.start")),1)]),_:1},8,["onClick"])):d("v-if",!0),c.status==="running"?(r(),g(C,{key:1,size:"small",type:"link",onClick:T=>e.pausePipeline(c)},{default:n(()=>[f(p(t.$t("pipeline.table.actions.pause")),1)]),_:1},8,["onClick"])):d("v-if",!0),c.status==="paused"?(r(),g(C,{key:2,size:"small",type:"link",onClick:T=>e.resumePipeline(c)},{default:n(()=>[f(p(t.$t("pipeline.table.actions.resume")),1)]),_:1},8,["onClick"])):d("v-if",!0),e.needsApproval(c)?(r(),g(C,{key:3,size:"small",type:"link",style:{color:"#52c41a"},onClick:T=>e.approveGate(c)},{default:n(()=>[f(p(t.$t("pipeline.table.actions.approveGate")),1)]),_:1},8,["onClick"])):d("v-if",!0),e.canCancel(c)?(r(),g(J,{key:4,title:t.$t("pipeline.table.cancelConfirm"),"ok-text":t.$t("pipeline.table.cancelOk"),"cancel-text":t.$t("pipeline.table.cancelBack"),onConfirm:T=>e.cancelPipeline(c)},{default:n(()=>[i(C,{size:"small",type:"link",danger:""},{default:n(()=>[f(p(t.$t("pipeline.table.actions.cancel")),1)]),_:1})]),_:1},8,["title","ok-text","cancel-text","onConfirm"])):d("v-if",!0)],64)):d("v-if",!0)]),emptyText:n(()=>[v("div",ct,[i(e.ApartmentOutlined,{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),f(" "+p(e.templateFilter||e.statusFilter?t.$t("pipeline.table.emptyFiltered"):t.$t("pipeline.table.empty")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),d(" ── Deploys tab ───────────────────────────────────────────── "),i(j,{key:"deploys",tab:t.$t("pipeline.tabs.deploys")},{default:n(()=>[i(q,{columns:e.deployColumns,"data-source":e.deploys,pagination:{pageSize:20,showTotal:l=>t.$t("pipeline.table.totalSuffix",{n:l})},size:"small",loading:e.loading,style:{background:"var(--bg-card)"}},{bodyCell:n(({column:l,record:c})=>[l.key==="pipeline"?(r(),b("span",ut,p(c.pipelineId.slice(0,12)),1)):d("v-if",!0),l.key==="strategy"?(r(),g(S,{key:1,color:e.strategyColor(c.strategy),style:{"font-family":"monospace"}},{default:n(()=>[f(p(c.strategy),1)]),_:2},1032,["color"])):d("v-if",!0),l.key==="status"?(r(),g(S,{key:2,color:e.deployStatusColor(c.status)},{default:n(()=>[f(p(e.deployStatusLabel(c.status)),1)]),_:2},1032,["color"])):d("v-if",!0),l.key==="createdAt"?(r(),b("span",dt,p(e.formatPipelineTime(c.createdAt)),1)):d("v-if",!0)]),emptyText:n(()=>[v("div",ft,[i(e.CloudUploadOutlined,{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),f(" "+p(t.$t("pipeline.table.emptyDeploys")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),d(" ── Templates tab ─────────────────────────────────────────── "),i(j,{key:"templates",tab:t.$t("pipeline.tabs.templates")},{default:n(()=>[i(D,{gutter:[16,16]},{default:n(()=>[(r(!0),b(h,null,F(e.templates,l=>(r(),g(z,{key:l.name,xs:24,sm:12,lg:12},{default:n(()=>[i(P,{title:e.templateLabel(l.name),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{extra:n(()=>[i(S,{color:e.templateColor(l.name)},{default:n(()=>[f(p(l.name),1)]),_:2},1032,["color"])]),default:n(()=>[v("p",gt,p(l.description),1),v("div",mt,[(r(!0),b(h,null,F(l.stages,(c,T)=>(r(),g(S,{key:c,color:l.gateStages.includes(c)?"gold":"blue",style:{"font-size":"11px"}},{default:n(()=>[f(p(T+1)+". "+p(e.stageLabel(c))+" ",1),l.gateStages.includes(c)?(r(),g(e.LockOutlined,{key:0,style:{"font-size":"10px","margin-left":"2px"}})):d("v-if",!0)]),_:2},1032,["color"]))),128))])]),_:2},1032,["title"])]),_:2},1024))),128))]),_:1})]),_:1},8,["tab"])]),_:1},8,["activeKey"]),d(" ── Create pipeline modal ────────────────────────────────── "),i(V,{open:e.showCreateModal,"onUpdate:open":o[7]||(o[7]=l=>e.showCreateModal=l),title:t.$t("pipeline.create_modal.title"),"confirm-loading":e.creating,width:540,"ok-text":t.$t("pipeline.create_modal.ok"),"cancel-text":t.$t("pipeline.create_modal.cancel"),onOk:e.createPipeline,onCancel:e.resetCreateForm},{default:n(()=>[i(ee,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:n(()=>[i(w,{label:t.$t("pipeline.create_modal.templateLabel"),required:""},{default:n(()=>[i(Z,{value:e.createForm.template,"onUpdate:value":o[4]||(o[4]=l=>e.createForm.template=l)},{default:n(()=>[(r(!0),b(h,null,F(e.TEMPLATES,l=>(r(),g(H,{key:l,value:l},{default:n(()=>[f(p(e.templateLabel(l)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"]),i(w,{label:t.$t("pipeline.create_modal.nameLabel")},{default:n(()=>[i(X,{value:e.createForm.name,"onUpdate:value":o[5]||(o[5]=l=>e.createForm.name=l),placeholder:t.$t("pipeline.create_modal.namePlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),i(w,{label:t.$t("pipeline.create_modal.configLabel")},{default:n(()=>[i($,{value:e.createForm.configJson,"onUpdate:value":o[6]||(o[6]=l=>e.createForm.configJson=l),placeholder:t.$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"]),d(" ── Pipeline details modal ───────────────────────────────── "),i(V,{open:e.showDetailsModal,"onUpdate:open":o[8]||(o[8]=l=>e.showDetailsModal=l),title:t.$t("pipeline.details.title",{label:e.currentPipeline?.name||e.currentPipeline?.id?.slice(0,12)||""}),width:780,footer:null},{default:n(()=>[e.currentPipeline?(r(),b("div",yt,[i(te,{column:2,size:"small",bordered:""},{default:n(()=>[i(E,{label:t.$t("pipeline.details.template")},{default:n(()=>[i(S,{color:e.templateColor(e.currentPipeline.template)},{default:n(()=>[f(p(e.templateLabel(e.currentPipeline.template)),1)]),_:1},8,["color"])]),_:1},8,["label"]),i(E,{label:t.$t("pipeline.details.status")},{default:n(()=>[i(S,{color:e.pipelineStatusColor(e.currentPipeline.status)},{default:n(()=>[f(p(e.pipelineStatusLabel(e.currentPipeline.status)),1)]),_:1},8,["color"])]),_:1},8,["label"]),i(E,{label:t.$t("pipeline.details.progress"),span:2},{default:n(()=>[i(k,{percent:e.pipelineProgress(e.currentPipeline),status:e.currentPipeline.status==="failed"?"exception":e.currentPipeline.status==="completed"?"success":"active",size:"small"},null,8,["percent","status"])]),_:1},8,["label"]),i(E,{label:t.$t("pipeline.details.createdAt")},{default:n(()=>[f(p(e.formatPipelineTime(e.currentPipeline.createdAt)),1)]),_:1},8,["label"]),i(E,{label:t.$t("pipeline.details.startedAt")},{default:n(()=>[f(p(e.formatPipelineTime(e.currentPipeline.startedAt)),1)]),_:1},8,["label"])]),_:1}),v("h4",bt,p(t.$t("pipeline.details.stagesHeader")),1),i(ae,{mode:"left"},{default:n(()=>[(r(!0),b(h,null,F(e.currentPipeline.stages,l=>(r(),g(le,{key:l.id,color:e.timelineColor(l.status)},{dot:n(()=>[l.status==="completed"?(r(),g(e.CheckCircleOutlined,{key:0,style:{color:"#52c41a"}})):l.status==="running"?(r(),g(e.LoadingOutlined,{key:1,style:{color:"#1677ff"}})):l.status==="failed"?(r(),g(e.CloseCircleOutlined,{key:2,style:{color:"#ff4d4f"}})):l.status==="gate-waiting"?(r(),g(e.LockOutlined,{key:3,style:{color:"#faad14"}})):(r(),g(e.ClockCircleOutlined,{key:4,style:{color:"var(--text-muted)"}}))]),default:n(()=>[v("div",_t,[v("span",vt,p(l.stageIndex+1)+". "+p(e.stageLabel(l.name)),1),i(S,{color:e.stageStatusColor(l.status),style:{"font-size":"11px"}},{default:n(()=>[f(p(e.stageStatusLabel(l.status)),1)]),_:2},1032,["color"]),l.gateRequired?(r(),g(S,{key:0,color:"gold",style:{"font-size":"10px"}},{default:n(()=>[i(e.LockOutlined),f(" "+p(t.$t("pipeline.details.needsApproval"))+" ",1),l.gateApproved?(r(),b("span",kt,p(t.$t("pipeline.details.approved")),1)):d("v-if",!0)]),_:2},1024)):d("v-if",!0)]),l.errorMessage?(r(),b("div",St,p(t.$t("pipeline.details.errorPrefix"))+" "+p(l.errorMessage),1)):d("v-if",!0),l.startedAt?(r(),b("div",At,[f(p(e.formatPipelineTime(l.startedAt))+" ",1),l.completedAt?(r(),b("span",Ct," → "+p(e.formatPipelineTime(l.completedAt)),1)):d("v-if",!0)])):d("v-if",!0)]),_:2},1032,["color"]))),128))]),_:1})])):d("v-if",!0)]),_:1},8,["open","title"])])}const Ot=Le($e,[["render",Pt],["__scopeId","data-v-ee23c547"],["__file","/tmp/cc-web-panel-ehQgdt/repo/packages/web-panel/src/views/Pipeline.vue"]]);export{Ot as default};
@@ -1 +1 @@
1
- import{I as b,J as y,U as g,R as r,c as o,K as i,V as m,o as ne,a as G,b as N,r as k,P as c,Q as v,F,Z as z,S as C,$ as ze}from"./vendor-BvqAck49.js";import{t as W,_ as Ee,u as re,b as se,d as f}from"./index-DDBuc-Id.js";import{a$ as we,r as je,Y as Ue,_ as Be,q as Ne,as as He,R as Ie}from"./icons-DP3uiYxy.js";const qe=Object.freeze(["initializing","training","aggregating","completed","failed"]),De=Object.freeze(["pending","computing","completed"]),Je=Object.freeze(["shamir","beaver","gmw"]),Ve=Object.freeze(["laplace","gaussian","exponential"]),Ke=Object.freeze(["paillier","bfv","ckks"]),We=Object.freeze(["sum","product","mean","count"]);function h(t,l=0){return typeof t=="number"&&Number.isFinite(t)?t:l}function Qe(t,l=0){if(!t||typeof t!="object")return null;const s=t.id||"";return s?{key:s,id:s,name:String(t.name||s),description:String(t.description||""),_idx:l}:null}function ae(t){const l=W(t);return Array.isArray(l)?l.map(Qe).filter(Boolean):[]}function Ye(t,l=0){if(!t||typeof t!="object")return null;const s=t.id||"";return s?{key:s,id:s,name:String(t.name||""),modelType:t.modelType??t.model_type??"neural_network",architecture:String(t.architecture||""),status:String(t.status||"initializing").toLowerCase(),currentRound:h(t.currentRound??t.current_round,0),totalRounds:h(t.totalRounds??t.total_rounds,0),participantCount:h(t.participantCount??t.participant_count,0),accuracy:h(t.accuracy,0),loss:t.loss==null?null:h(t.loss,null),learningRate:h(t.learningRate??t.learning_rate,0),aggregationStrategy:t.aggregationStrategy??t.aggregation_strategy??"",privacyBudgetSpent:h(t.privacyBudgetSpent??t.privacy_budget_spent,0),createdAt:t.createdAt??t.created_at??null,updatedAt:t.updatedAt??t.updated_at??null,_idx:l}:null}function ue(t){const l=W(t);return Array.isArray(l)?l.map(Ye).filter(Boolean):[]}function Ze(t,l=0){if(!t||typeof t!="object")return null;const s=t.id||"";if(!s)return null;let e=t.participantIds??t.participant_ids??[];if(typeof e=="string")try{e=JSON.parse(e)}catch{e=[]}return Array.isArray(e)||(e=[]),{key:s,id:s,computationType:t.computationType??t.computation_type??"",protocol:String(t.protocol||"shamir").toLowerCase(),participantCount:h(t.participantCount??t.participant_count,0),participantIds:e,resultHash:t.resultHash??t.result_hash??null,status:String(t.status||"pending").toLowerCase(),sharesReceived:h(t.sharesReceived??t.shares_received,0),sharesRequired:h(t.sharesRequired??t.shares_required,0),computationTimeMs:t.computationTimeMs??t.computation_time_ms??null,errorMessage:t.errorMessage??t.error_message??"",createdAt:t.createdAt??t.created_at??null,completedAt:t.completedAt??t.completed_at??null,_idx:l}}function ce(t){const l=W(t);return Array.isArray(l)?l.map(Ze).filter(Boolean):[]}function de(t){const l=W(t);return!l||typeof l!="object"||Array.isArray(l)?null:{published:!!l.published,reason:l.reason||null,data:l.data??null,epsilon:h(l.epsilon,0),delta:h(l.delta,0),mechanism:String(l.mechanism||""),budgetSpent:h(l.budgetSpent??l.budget_spent,0),budgetRemaining:h(l.budgetRemaining??l.budget_remaining,0)}}function pe(t){const l=W(t);return!l||typeof l!="object"||Array.isArray(l)?null:{result:l.result??null,operation:String(l.operation||""),scheme:String(l.scheme||""),inputCount:h(l.inputCount??l.input_count,0),encrypted:l.encrypted!==!1}}const Ge={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 me(t){const l=JSON.parse(JSON.stringify(Ge)),s=W(t);if(!s||typeof s!="object"||Array.isArray(s))return l;if(s.privacyBudget&&typeof s.privacyBudget=="object"&&(l.privacyBudget.spent=h(s.privacyBudget.spent,0),l.privacyBudget.limit=h(s.privacyBudget.limit,0),l.privacyBudget.remaining=h(s.privacyBudget.remaining,0),l.privacyBudget.exhausted=!!s.privacyBudget.exhausted),s.federatedLearning&&typeof s.federatedLearning=="object"&&(l.federatedLearning.totalModels=h(s.federatedLearning.totalModels,0),l.federatedLearning.completed=h(s.federatedLearning.completed,0),l.federatedLearning.training=h(s.federatedLearning.training,0),l.federatedLearning.avgAccuracy=h(s.federatedLearning.avgAccuracy,0)),s.mpc&&typeof s.mpc=="object"&&(l.mpc.totalComputations=h(s.mpc.totalComputations,0),l.mpc.completed=h(s.mpc.completed,0),l.mpc.pending=h(s.mpc.pending,0),s.mpc.byProtocol&&typeof s.mpc.byProtocol=="object"))for(const[e,w]of Object.entries(s.mpc.byProtocol))typeof w=="number"&&Number.isFinite(w)&&(l.mpc.byProtocol[e]=w);return l}function Xe(t){if(t==null||t==="")return"—";const l=typeof t=="number"?new Date(t):new Date(String(t));return isNaN(l.getTime())?String(t):l.toLocaleString("zh-CN",{hour12:!1})}const $e={__name:"Privacy",setup(t,{expose:l}){l();const s=re(),{t:e}=se(),w=k(!1),H=k(!1),E=k(!1),j=k(!1),Q=k(""),Y=k(""),X=k([]),P=k([]),O=k([]),L=k([]),I=k([]),R=k({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:{}}}),M=k("models"),T=k(""),q=k(""),Z=k(""),D=k(!1),J=k(!1),$=k(!1),U=k(!1),p=G({name:"",modelType:"",architecture:"",rounds:10,lr:.01,participants:0}),S=G({type:"",protocol:"shamir",participants:"",threshold:null}),x=G({data:"",mechanism:"laplace",epsilon:.1,delta:1e-5,sensitivity:1}),A=G({data:"",operation:"sum",scheme:"paillier"}),V=k(null),K=k(null),ee=N(()=>[{title:e("privacy.modelCols.name"),key:"name"},{title:e("privacy.modelCols.status"),key:"status",width:"120px"},{title:e("privacy.modelCols.progress"),key:"progress",width:"160px"},{title:e("privacy.modelCols.accuracy"),key:"accuracy",width:"110px"},{title:e("privacy.modelCols.participants"),key:"participants",width:"90px"},{title:e("privacy.modelCols.budget"),key:"budget",width:"100px"},{title:e("privacy.modelCols.updatedAt"),key:"updatedAt",width:"160px"},{title:e("privacy.modelCols.action"),key:"action",width:"180px"}]),a=N(()=>[{title:e("privacy.computationCols.type"),key:"type",width:"160px"},{title:e("privacy.computationCols.protocol"),key:"protocol",width:"100px"},{title:e("privacy.computationCols.progress"),key:"progress"},{title:e("privacy.computationCols.status"),key:"status",width:"110px"},{title:e("privacy.computationCols.time"),key:"time",width:"110px"},{title:e("privacy.computationCols.createdAt"),key:"createdAt",width:"160px"},{title:e("privacy.computationCols.action"),key:"action",width:"160px"}]),d=N(()=>R.value.federatedLearning.avgAccuracy*100),te=N(()=>{const n=R.value.privacyBudget.remaining,u=R.value.privacyBudget.limit;if(u===0)return"#888";const _=n/u;return _<.2?"#ff4d4f":_<.5?"#faad14":"#52c41a"}),ye=N(()=>T.value?L.value.filter(n=>n.status===T.value):L.value),ve=N(()=>{let n=I.value;return q.value&&(n=n.filter(u=>u.protocol===q.value)),Z.value&&(n=n.filter(u=>u.status===Z.value)),n});function fe(n){const u=`privacy.flStatusLabels.${n}`,_=e(u);return _===u?n:_}function ge(n){return{initializing:"default",training:"processing",aggregating:"cyan",completed:"green",failed:"red"}[n]||"default"}function be(n){const u=`privacy.mpcStatusLabels.${n}`,_=e(u);return _===u?n:_}function he(n){return{pending:"default",computing:"processing",completed:"green"}[n]||"default"}function _e(n){return n>=.85?"#52c41a":n>=.6?"#faad14":"#ff4d4f"}function ke(n){return n.status==="initializing"||n.status==="training"||n.status==="aggregating"}function Se({key:n}){n==="model"?D.value=!0:n==="computation"?J.value=!0:n==="dp"?(V.value=null,$.value=!0):n==="he"&&(K.value=null,U.value=!0)}async function B(){w.value=!0;try{const[n,u,_,Pe,Ae,Te]=await Promise.all([s.execute("privacy protocols --json",8e3).catch(()=>({output:""})),s.execute("privacy dp-mechanisms --json",8e3).catch(()=>({output:""})),s.execute("privacy he-schemes --json",8e3).catch(()=>({output:""})),s.execute("privacy models --limit 100 --json",1e4).catch(()=>({output:""})),s.execute("privacy computations --limit 100 --json",1e4).catch(()=>({output:""})),s.execute("privacy report --json",8e3).catch(()=>({output:""}))]);X.value=ae(n.output),P.value=ae(u.output),O.value=ae(_.output),L.value=ue(Pe.output),I.value=ce(Ae.output),R.value=me(Te.output)}catch(n){f.error(e("privacy.msg.loadFailed")+": "+(n?.message||n))}finally{w.value=!1}}async function Ce(){if(!p.name.trim()){f.warning(e("privacy.msg.modelNameEmpty"));return}H.value=!0;try{const n=[`privacy create-model "${p.name.trim().replace(/"/g,'\\"')}"`];p.modelType.trim()&&n.push(`--type "${p.modelType.trim().replace(/"/g,'\\"')}"`),p.architecture.trim()&&n.push(`--arch "${p.architecture.trim().replace(/"/g,'\\"')}"`),p.rounds!=null&&n.push(`--rounds ${p.rounds}`),p.lr!=null&&n.push(`--lr ${p.lr}`),p.participants!=null&&n.push(`--participants ${p.participants}`),n.push("--json");const{output:u}=await s.execute(n.join(" "),12e3);if(/error|失败/i.test(u)&&!/"modelId"/.test(u)){f.error(e("privacy.msg.modelCreateFailed")+": "+u.slice(0,120));return}f.success(e("privacy.msg.modelCreateSuccess")),D.value=!1,le(),await B()}catch(n){f.error(e("privacy.msg.modelCreateFailed")+": "+(n?.message||n))}finally{H.value=!1}}async function Fe(){if(!S.type.trim()){f.warning(e("privacy.msg.computationTypeEmpty"));return}H.value=!0;try{const n=[`privacy create-computation "${S.type.trim().replace(/"/g,'\\"')}"`];if(n.push(`--protocol ${S.protocol}`),S.participants.trim()){const _=S.participants.split(/[,\s]+/).filter(Boolean).join(",");_&&n.push(`--participants "${_}"`)}S.threshold!=null&&n.push(`--threshold ${S.threshold}`),n.push("--json");const{output:u}=await s.execute(n.join(" "),1e4);if(/error|失败|invalid/i.test(u)&&!/"computationId"/.test(u)){f.error(e("privacy.msg.computationCreateFailed")+": "+u.slice(0,120));return}f.success(e("privacy.msg.computationCreateSuccess")),J.value=!1,oe(),M.value="computations",await B()}catch(n){f.error(e("privacy.msg.computationCreateFailed")+": "+(n?.message||n))}finally{H.value=!1}}async function xe(n){Q.value=n.id;try{const{output:u}=await s.execute(`privacy train ${n.id} --json`,12e3);if(/error|失败/i.test(u)&&!/"trained"/.test(u)){f.error(e("privacy.msg.trainFailed")+": "+u.slice(0,120));return}f.success(e("privacy.msg.trainSuccess")),await B()}catch(u){f.error(e("privacy.msg.trainFailed")+": "+(u?.message||u))}finally{Q.value=""}}async function Re(n){try{const{output:u}=await s.execute(`privacy fail-model ${n.id} --json`,8e3);if(/error/i.test(u)&&!/"failed"/.test(u)){f.error(e("privacy.msg.failMarkFailed")+": "+u.slice(0,120));return}f.success(e("privacy.msg.failMarkSuccess")),await B()}catch(u){f.error(e("privacy.msg.failMarkFailed")+": "+(u?.message||u))}}async function Oe(n){Y.value=n.id;try{const{output:u}=await s.execute(`privacy submit-share ${n.id} --json`,1e4);if(/error|失败/i.test(u)&&!/"submitted"/.test(u)){f.error(e("privacy.msg.submitFailed")+": "+u.slice(0,120));return}f.success(e("privacy.msg.submitSuccess")),await B()}catch(u){f.error(e("privacy.msg.submitFailed")+": "+(u?.message||u))}finally{Y.value=""}}async function Le(){if(!x.data.trim()){f.warning(e("privacy.msg.dataEmpty"));return}E.value=!0,V.value=null;try{const n=["privacy dp-publish"];n.push(`--data ${JSON.stringify(x.data.trim())}`),n.push(`--mechanism ${x.mechanism}`),x.epsilon!=null&&n.push(`--epsilon ${x.epsilon}`),x.delta!=null&&n.push(`--delta ${x.delta}`),x.sensitivity!=null&&n.push(`--sensitivity ${x.sensitivity}`),n.push("--json");const{output:u}=await s.execute(n.join(" "),1e4),_=de(u);if(!_){f.error(e("privacy.msg.dpFailed")+": "+u.slice(0,120));return}V.value=_,_.published?(f.success(e("privacy.msg.dpSuccess")),await B()):f.warning(e("privacy.msg.dpRejected",{reason:_.reason||"unknown"}))}catch(n){f.error(e("privacy.msg.dpFailed")+": "+(n?.message||n))}finally{E.value=!1}}async function Me(){if(!A.data.trim()){f.warning(e("privacy.msg.dataEmpty"));return}try{JSON.parse(A.data)}catch{f.warning(e("privacy.msg.dataInvalidJson"));return}j.value=!0,K.value=null;try{const n=["privacy he-query"];n.push(`--data ${JSON.stringify(A.data.trim())}`),n.push(`--operation ${A.operation}`),n.push(`--scheme ${A.scheme}`),n.push("--json");const{output:u}=await s.execute(n.join(" "),1e4),_=pe(u);if(!_){f.error(e("privacy.msg.heFailed")+": "+u.slice(0,120));return}K.value=_,f.success(e("privacy.msg.heSuccess",{scheme:_.scheme,op:_.operation}))}catch(n){f.error(e("privacy.msg.heFailed")+": "+(n?.message||n))}finally{j.value=!1}}function le(){p.name="",p.modelType="",p.architecture="",p.rounds=10,p.lr=.01,p.participants=0}function oe(){S.type="",S.protocol="shamir",S.participants="",S.threshold=null}ne(B);const ie={ws:s,t:e,loading:w,creating:H,publishing:E,querying:j,trainingId:Q,submittingShareId:Y,protocols:X,dpMechanisms:P,heSchemes:O,models:L,computations:I,report:R,activeTab:M,modelStatusFilter:T,mpcProtocolFilter:q,mpcStatusFilter:Z,showModelModal:D,showComputationModal:J,showDPModal:$,showHEModal:U,modelForm:p,computationForm:S,dpForm:x,heForm:A,dpResult:V,heResult:K,modelColumns:ee,computationColumns:a,avgAccuracyPct:d,budgetColor:te,filteredModels:ye,filteredComputations:ve,flStatusLabel:fe,flStatusColor:ge,mpcStatusLabel:be,mpcStatusColor:he,accuracyColor:_e,canTrain:ke,handleNewClick:Se,loadAll:B,createModel:Ce,createComputation:Fe,trainOne:xe,failModel:Re,submitShare:Oe,publishDP:Le,queryHE:Me,resetModelForm:le,resetComputationForm:oe,ref:k,computed:N,onMounted:ne,reactive:G,get ReloadOutlined(){return Ie},get PlusOutlined(){return He},get ExperimentOutlined(){return Ne},get ApartmentOutlined(){return Be},get LockOutlined(){return Ue},get SafetyOutlined(){return je},get RiseOutlined(){return we},get message(){return f},get useI18n(){return se},get useWsStore(){return re},get parseCatalog(){return ae},get parseModels(){return ue},get parseComputations(){return ce},get parseDPResult(){return de},get parseHEResult(){return pe},get parseReport(){return me},get formatPrivacyTime(){return Xe},get FL_STATUSES(){return qe},get MPC_STATUSES(){return De},get MPC_PROTOCOLS(){return Je},get DP_MECHANISMS(){return Ve},get HE_SCHEMES(){return Ke},get HE_OPERATIONS(){return We}};return Object.defineProperty(ie,"__isScriptSetup",{enumerable:!1,value:!0}),ie}},et={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},tt={class:"page-title"},at={class:"page-sub"},lt={style:{"font-size":"11px",color:"var(--text-secondary)"}},ot={class:"catalog-name"},it={class:"catalog-desc"},nt={class:"catalog-name"},rt={class:"catalog-desc"},st={class:"catalog-name"},ut={class:"catalog-desc"},ct={class:"filter-bar"},dt={style:{color:"var(--text-primary)","font-weight":"500"}},pt={style:{color:"var(--text-secondary)","font-size":"11px","margin-top":"2px"}},mt={style:{"font-size":"11px",color:"var(--text-secondary)"}},yt={key:0,style:{"font-size":"11px",color:"var(--text-secondary)"}},vt={key:5,style:{"font-family":"monospace",color:"var(--text-secondary)"}},ft={key:6,style:{color:"var(--text-secondary)","font-size":"11px"}},gt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},bt={class:"filter-bar"},ht={key:0,style:{color:"var(--text-primary)","font-family":"monospace","font-weight":"500"}},_t={key:0,style:{"font-family":"monospace",color:"var(--text-secondary)","font-size":"12px"}},kt={key:1,style:{color:"var(--text-muted)"}},St={key:5,style:{color:"var(--text-secondary)","font-size":"11px"}},Ct={key:1,style:{color:"var(--text-muted)","font-size":"11px","font-family":"monospace"}},Ft={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},xt={style:{"margin-top":"12px","font-size":"12px",color:"var(--text-secondary)"}},Rt={style:{"margin-top":"12px","font-size":"12px",color:"var(--text-secondary)"}};function Ot(t,l,s,e,w,H){const E=b("a-button"),j=b("a-menu-item"),Q=b("a-menu"),Y=b("a-dropdown"),X=b("a-space"),P=b("a-statistic"),O=b("a-card"),L=b("a-col"),I=b("a-row"),R=b("a-tag"),M=b("a-radio-button"),T=b("a-radio-group"),q=b("a-progress"),Z=b("a-popconfirm"),D=b("a-table"),J=b("a-tab-pane"),$=b("a-tabs"),U=b("a-input"),p=b("a-form-item"),S=b("a-input-number"),x=b("a-form"),A=b("a-modal"),V=b("a-select-option"),K=b("a-select"),ee=b("a-textarea");return c(),y("div",null,[g("div",et,[g("div",null,[g("h2",tt,r(t.$t("privacy.title")),1),g("p",at,r(t.$t("privacy.subtitle")),1)]),o(X,null,{default:i(()=>[o(E,{loading:e.loading,onClick:e.loadAll},{icon:i(()=>[o(e.ReloadOutlined)]),default:i(()=>[v(" "+r(t.$t("privacy.refresh")),1)]),_:1},8,["loading"]),o(Y,{trigger:["click"]},{overlay:i(()=>[o(Q,{onClick:e.handleNewClick},{default:i(()=>[o(j,{key:"model"},{default:i(()=>[o(e.ExperimentOutlined),v(" "+r(t.$t("privacy.actions.model")),1)]),_:1}),o(j,{key:"computation"},{default:i(()=>[o(e.ApartmentOutlined),v(" "+r(t.$t("privacy.actions.computation")),1)]),_:1}),o(j,{key:"dp"},{default:i(()=>[o(e.LockOutlined),v(" "+r(t.$t("privacy.actions.dp")),1)]),_:1}),o(j,{key:"he"},{default:i(()=>[o(e.SafetyOutlined),v(" "+r(t.$t("privacy.actions.he")),1)]),_:1})]),_:1})]),default:i(()=>[o(E,{type:"primary"},{icon:i(()=>[o(e.PlusOutlined)]),default:i(()=>[v(" "+r(t.$t("privacy.actionDropdown")),1)]),_:1})]),_:1})]),_:1})]),m(" Stat cards "),o(I,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:i(()=>[o(L,{xs:12,sm:8,lg:5},{default:i(()=>[o(O,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:i(()=>[o(P,{title:t.$t("privacy.stats.models"),value:e.report.federatedLearning.totalModels,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:i(()=>[o(e.ExperimentOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),o(L,{xs:12,sm:8,lg:5},{default:i(()=>[o(O,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:i(()=>[o(P,{title:t.$t("privacy.stats.avgAccuracy"),value:e.avgAccuracyPct,precision:1,suffix:"%","value-style":{color:e.report.federatedLearning.avgAccuracy>=.8?"#52c41a":"#faad14",fontSize:"20px"}},{prefix:i(()=>[o(e.RiseOutlined)]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),o(L,{xs:12,sm:8,lg:5},{default:i(()=>[o(O,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:i(()=>[o(P,{title:t.$t("privacy.stats.computations"),value:e.report.mpc.totalComputations,"value-style":{color:"#722ed1",fontSize:"20px"}},{prefix:i(()=>[o(e.ApartmentOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),o(L,{xs:12,sm:8,lg:5},{default:i(()=>[o(O,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:i(()=>[o(P,{title:t.$t("privacy.stats.budget"),value:e.report.privacyBudget.remaining,precision:2,"value-style":{color:e.budgetColor,fontSize:"20px"}},{prefix:i(()=>[o(e.LockOutlined)]),suffix:i(()=>[g("span",lt,"/ "+r(e.report.privacyBudget.limit),1)]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),o(L,{xs:24,sm:8,lg:4},{default:i(()=>[o(O,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:i(()=>[o(P,{title:t.$t("privacy.stats.budgetState"),value:e.report.privacyBudget.exhausted?t.$t("privacy.stats.exhausted"):t.$t("privacy.stats.ample"),"value-style":{color:e.report.privacyBudget.exhausted?"#ff4d4f":"#52c41a",fontSize:"20px"}},null,8,["title","value","value-style"])]),_:1})]),_:1})]),_:1}),m(" Catalogue cards "),o(I,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:i(()=>[o(L,{xs:24,md:8},{default:i(()=>[o(O,{title:t.$t("privacy.catalog.protocols"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"},"body-style":{padding:"12px 16px"}},{default:i(()=>[(c(!0),y(F,null,z(e.protocols,a=>(c(),y("div",{key:a.id,class:"catalog-item"},[o(R,{color:"purple",style:{"font-family":"monospace"}},{default:i(()=>[v(r(a.id),1)]),_:2},1024),g("span",ot,r(a.name),1),g("span",it,r(a.description),1)]))),128))]),_:1},8,["title"])]),_:1}),o(L,{xs:24,md:8},{default:i(()=>[o(O,{title:t.$t("privacy.catalog.dp"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"},"body-style":{padding:"12px 16px"}},{default:i(()=>[(c(!0),y(F,null,z(e.dpMechanisms,a=>(c(),y("div",{key:a.id,class:"catalog-item"},[o(R,{color:"orange",style:{"font-family":"monospace"}},{default:i(()=>[v(r(a.id),1)]),_:2},1024),g("span",nt,r(a.name),1),g("span",rt,r(a.description),1)]))),128))]),_:1},8,["title"])]),_:1}),o(L,{xs:24,md:8},{default:i(()=>[o(O,{title:t.$t("privacy.catalog.he"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"},"body-style":{padding:"12px 16px"}},{default:i(()=>[(c(!0),y(F,null,z(e.heSchemes,a=>(c(),y("div",{key:a.id,class:"catalog-item"},[o(R,{color:"cyan",style:{"font-family":"monospace"}},{default:i(()=>[v(r(a.id),1)]),_:2},1024),g("span",st,r(a.name),1),g("span",ut,r(a.description),1)]))),128))]),_:1},8,["title"])]),_:1})]),_:1}),m(" Tabs "),o($,{activeKey:e.activeTab,"onUpdate:activeKey":l[3]||(l[3]=a=>e.activeTab=a),class:"privacy-tabs"},{default:i(()=>[m(" ── FL models tab ─────────────────────────────────────────── "),o(J,{key:"models",tab:t.$t("privacy.tabs.models")},{default:i(()=>[g("div",ct,[o(T,{value:e.modelStatusFilter,"onUpdate:value":l[0]||(l[0]=a=>e.modelStatusFilter=a),size:"small","button-style":"solid"},{default:i(()=>[o(M,{value:""},{default:i(()=>[v(r(t.$t("privacy.filter.all")),1)]),_:1}),(c(!0),y(F,null,z(e.FL_STATUSES,a=>(c(),C(M,{key:a,value:a},{default:i(()=>[v(r(e.flStatusLabel(a)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),o(D,{columns:e.modelColumns,"data-source":e.filteredModels,pagination:{pageSize:20,showTotal:a=>t.$t("privacy.table.totalSuffix",{n:a})},size:"small",loading:e.loading,style:{background:"var(--bg-card)"}},{bodyCell:i(({column:a,record:d})=>[a.key==="name"?(c(),y(F,{key:0},[g("span",dt,r(d.name),1),g("div",pt,r(d.modelType)+" / "+r(d.architecture),1)],64)):m("v-if",!0),a.key==="status"?(c(),C(R,{key:1,color:e.flStatusColor(d.status)},{default:i(()=>[v(r(e.flStatusLabel(d.status)),1)]),_:2},1032,["color"])):m("v-if",!0),a.key==="progress"?(c(),y(F,{key:2},[o(q,{percent:d.totalRounds?Math.round(100*d.currentRound/d.totalRounds):0,size:"small",status:d.status==="failed"?"exception":d.status==="completed"?"success":"active"},null,8,["percent","status"]),g("div",mt,r(t.$t("privacy.table.rounds",{cur:d.currentRound,total:d.totalRounds})),1)],64)):m("v-if",!0),a.key==="accuracy"?(c(),y(F,{key:3},[g("span",{style:ze({color:e.accuracyColor(d.accuracy),fontFamily:"monospace"})},r((d.accuracy*100).toFixed(1))+"% ",5),d.loss!=null?(c(),y("div",yt," loss "+r(d.loss.toFixed(3)),1)):m("v-if",!0)],64)):m("v-if",!0),a.key==="participants"?(c(),C(R,{key:4,color:"blue",style:{"font-size":"11px"}},{default:i(()=>[v(r(d.participantCount),1)]),_:2},1024)):m("v-if",!0),a.key==="budget"?(c(),y("span",vt,r(d.privacyBudgetSpent.toFixed(3)),1)):m("v-if",!0),a.key==="updatedAt"?(c(),y("span",ft,r(e.formatPrivacyTime(d.updatedAt)),1)):m("v-if",!0),a.key==="action"?(c(),y(F,{key:7},[e.canTrain(d)?(c(),C(E,{key:0,size:"small",type:"link",loading:e.trainingId===d.id,onClick:te=>e.trainOne(d)},{default:i(()=>[v(r(t.$t("privacy.table.trainOne")),1)]),_:1},8,["loading","onClick"])):m("v-if",!0),d.status!=="failed"&&d.status!=="completed"?(c(),C(Z,{key:1,title:t.$t("privacy.table.failConfirm"),"ok-text":t.$t("privacy.table.failOk"),"cancel-text":t.$t("privacy.table.failCancel"),onConfirm:te=>e.failModel(d)},{default:i(()=>[o(E,{size:"small",type:"link",danger:""},{default:i(()=>[v(r(t.$t("privacy.table.failMark")),1)]),_:1})]),_:1},8,["title","ok-text","cancel-text","onConfirm"])):m("v-if",!0)],64)):m("v-if",!0)]),emptyText:i(()=>[g("div",gt,[o(e.ExperimentOutlined,{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),v(" "+r(e.modelStatusFilter?t.$t("privacy.table.emptyModelsFiltered"):t.$t("privacy.table.emptyModels")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),m(" ── MPC computations tab ──────────────────────────────────── "),o(J,{key:"computations",tab:t.$t("privacy.tabs.computations")},{default:i(()=>[g("div",bt,[o(T,{value:e.mpcProtocolFilter,"onUpdate:value":l[1]||(l[1]=a=>e.mpcProtocolFilter=a),size:"small"},{default:i(()=>[o(M,{value:""},{default:i(()=>[v(r(t.$t("privacy.filter.allProtocols")),1)]),_:1}),(c(!0),y(F,null,z(e.MPC_PROTOCOLS,a=>(c(),C(M,{key:a,value:a},{default:i(()=>[v(r(a),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),o(T,{value:e.mpcStatusFilter,"onUpdate:value":l[2]||(l[2]=a=>e.mpcStatusFilter=a),size:"small"},{default:i(()=>[o(M,{value:""},{default:i(()=>[v(r(t.$t("privacy.filter.allStatuses")),1)]),_:1}),(c(!0),y(F,null,z(e.MPC_STATUSES,a=>(c(),C(M,{key:a,value:a},{default:i(()=>[v(r(e.mpcStatusLabel(a)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),o(D,{columns:e.computationColumns,"data-source":e.filteredComputations,pagination:{pageSize:20,showTotal:a=>t.$t("privacy.table.totalSuffix",{n:a})},size:"small",loading:e.loading,style:{background:"var(--bg-card)"}},{bodyCell:i(({column:a,record:d})=>[a.key==="type"?(c(),y("span",ht,r(d.computationType),1)):m("v-if",!0),a.key==="protocol"?(c(),C(R,{key:1,color:"purple",style:{"font-family":"monospace"}},{default:i(()=>[v(r(d.protocol),1)]),_:2},1024)):m("v-if",!0),a.key==="progress"?(c(),C(q,{key:2,percent:d.sharesRequired?Math.round(100*d.sharesReceived/d.sharesRequired):0,size:"small",status:d.status==="completed"?"success":"active",format:()=>`${d.sharesReceived}/${d.sharesRequired}`},null,8,["percent","status","format"])):m("v-if",!0),a.key==="status"?(c(),C(R,{key:3,color:e.mpcStatusColor(d.status)},{default:i(()=>[v(r(e.mpcStatusLabel(d.status)),1)]),_:2},1032,["color"])):m("v-if",!0),a.key==="time"?(c(),y(F,{key:4},[d.computationTimeMs!=null?(c(),y("span",_t,r(d.computationTimeMs)+" ms ",1)):(c(),y("span",kt,"—"))],64)):m("v-if",!0),a.key==="createdAt"?(c(),y("span",St,r(e.formatPrivacyTime(d.createdAt)),1)):m("v-if",!0),a.key==="action"?(c(),y(F,{key:6},[d.status!=="completed"?(c(),C(E,{key:0,size:"small",type:"link",loading:e.submittingShareId===d.id,onClick:te=>e.submitShare(d)},{default:i(()=>[v(r(t.$t("privacy.table.submitShare")),1)]),_:1},8,["loading","onClick"])):(c(),y("span",Ct," hash "+r(d.resultHash?.slice(0,8)||"—"),1))],64)):m("v-if",!0)]),emptyText:i(()=>[g("div",Ft,[o(e.ApartmentOutlined,{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),v(" "+r(t.$t("privacy.table.emptyComputations")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"])]),_:1},8,["activeKey"]),m(" ── Create FL model modal ─────────────────────────────────── "),o(A,{open:e.showModelModal,"onUpdate:open":l[10]||(l[10]=a=>e.showModelModal=a),title:t.$t("privacy.model_modal.title"),"confirm-loading":e.creating,width:540,"ok-text":t.$t("privacy.model_modal.ok"),"cancel-text":t.$t("privacy.model_modal.cancel"),onOk:e.createModel,onCancel:e.resetModelForm},{default:i(()=>[o(x,{"label-col":{span:6},"wrapper-col":{span:18},style:{"margin-top":"16px"}},{default:i(()=>[o(p,{label:t.$t("privacy.model_modal.nameLabel"),required:""},{default:i(()=>[o(U,{value:e.modelForm.name,"onUpdate:value":l[4]||(l[4]=a=>e.modelForm.name=a),placeholder:t.$t("privacy.model_modal.namePlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),o(p,{label:t.$t("privacy.model_modal.typeLabel")},{default:i(()=>[o(U,{value:e.modelForm.modelType,"onUpdate:value":l[5]||(l[5]=a=>e.modelForm.modelType=a),placeholder:t.$t("privacy.model_modal.typePlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),o(p,{label:t.$t("privacy.model_modal.archLabel")},{default:i(()=>[o(U,{value:e.modelForm.architecture,"onUpdate:value":l[6]||(l[6]=a=>e.modelForm.architecture=a),placeholder:t.$t("privacy.model_modal.archPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),o(p,{label:t.$t("privacy.model_modal.roundsLabel")},{default:i(()=>[o(S,{value:e.modelForm.rounds,"onUpdate:value":l[7]||(l[7]=a=>e.modelForm.rounds=a),min:1,max:1e3,style:{width:"100%"}},null,8,["value"])]),_:1},8,["label"]),o(p,{label:t.$t("privacy.model_modal.lrLabel")},{default:i(()=>[o(S,{value:e.modelForm.lr,"onUpdate:value":l[8]||(l[8]=a=>e.modelForm.lr=a),min:0,max:1,step:.001,style:{width:"100%"}},null,8,["value"])]),_:1},8,["label"]),o(p,{label:t.$t("privacy.model_modal.participantsLabel")},{default:i(()=>[o(S,{value:e.modelForm.participants,"onUpdate:value":l[9]||(l[9]=a=>e.modelForm.participants=a),min:0,max:1e3,style:{width:"100%"}},null,8,["value"])]),_:1},8,["label"])]),_:1})]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),m(" ── Create MPC computation modal ─────────────────────────── "),o(A,{open:e.showComputationModal,"onUpdate:open":l[15]||(l[15]=a=>e.showComputationModal=a),title:t.$t("privacy.computation_modal.title"),"confirm-loading":e.creating,width:520,"ok-text":t.$t("privacy.computation_modal.ok"),"cancel-text":t.$t("privacy.computation_modal.cancel"),onOk:e.createComputation,onCancel:e.resetComputationForm},{default:i(()=>[o(x,{"label-col":{span:6},"wrapper-col":{span:18},style:{"margin-top":"16px"}},{default:i(()=>[o(p,{label:t.$t("privacy.computation_modal.typeLabel"),required:""},{default:i(()=>[o(U,{value:e.computationForm.type,"onUpdate:value":l[11]||(l[11]=a=>e.computationForm.type=a),placeholder:t.$t("privacy.computation_modal.typePlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),o(p,{label:t.$t("privacy.computation_modal.protocolLabel")},{default:i(()=>[o(K,{value:e.computationForm.protocol,"onUpdate:value":l[12]||(l[12]=a=>e.computationForm.protocol=a)},{default:i(()=>[(c(!0),y(F,null,z(e.MPC_PROTOCOLS,a=>(c(),C(V,{key:a,value:a},{default:i(()=>[v(r(a),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"]),o(p,{label:t.$t("privacy.computation_modal.participantsLabel")},{default:i(()=>[o(ee,{value:e.computationForm.participants,"onUpdate:value":l[13]||(l[13]=a=>e.computationForm.participants=a),placeholder:t.$t("privacy.computation_modal.participantsPlaceholder"),"auto-size":{minRows:2,maxRows:4}},null,8,["value","placeholder"])]),_:1},8,["label"]),o(p,{label:t.$t("privacy.computation_modal.thresholdLabel")},{default:i(()=>[o(S,{value:e.computationForm.threshold,"onUpdate:value":l[14]||(l[14]=a=>e.computationForm.threshold=a),min:2,max:100,placeholder:t.$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"]),m(" ── DP publish modal ─────────────────────────────────────── "),o(A,{open:e.showDPModal,"onUpdate:open":l[21]||(l[21]=a=>e.showDPModal=a),title:t.$t("privacy.dp_modal.title"),"confirm-loading":e.publishing,width:520,"ok-text":t.$t("privacy.dp_modal.ok"),"cancel-text":t.$t("privacy.dp_modal.cancel"),onOk:e.publishDP},{default:i(()=>[o(x,{"label-col":{span:6},"wrapper-col":{span:18},style:{"margin-top":"16px"}},{default:i(()=>[o(p,{label:t.$t("privacy.dp_modal.dataLabel"),required:""},{default:i(()=>[o(U,{value:e.dpForm.data,"onUpdate:value":l[16]||(l[16]=a=>e.dpForm.data=a),placeholder:t.$t("privacy.dp_modal.dataPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),o(p,{label:t.$t("privacy.dp_modal.mechanismLabel")},{default:i(()=>[o(T,{value:e.dpForm.mechanism,"onUpdate:value":l[17]||(l[17]=a=>e.dpForm.mechanism=a)},{default:i(()=>[(c(!0),y(F,null,z(e.DP_MECHANISMS,a=>(c(),C(M,{key:a,value:a},{default:i(()=>[v(r(a),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"]),o(p,{label:t.$t("privacy.dp_modal.epsilonLabel")},{default:i(()=>[o(S,{value:e.dpForm.epsilon,"onUpdate:value":l[18]||(l[18]=a=>e.dpForm.epsilon=a),min:0,step:.01,style:{width:"100%"}},null,8,["value"])]),_:1},8,["label"]),o(p,{label:t.$t("privacy.dp_modal.deltaLabel")},{default:i(()=>[o(S,{value:e.dpForm.delta,"onUpdate:value":l[19]||(l[19]=a=>e.dpForm.delta=a),min:0,step:1e-6,style:{width:"100%"}},null,8,["value"])]),_:1},8,["label"]),o(p,{label:t.$t("privacy.dp_modal.sensitivityLabel")},{default:i(()=>[o(S,{value:e.dpForm.sensitivity,"onUpdate:value":l[20]||(l[20]=a=>e.dpForm.sensitivity=a),min:0,step:.1,style:{width:"100%"}},null,8,["value"])]),_:1},8,["label"])]),_:1}),e.dpResult?(c(),C(O,{key:0,size:"small",style:{background:"var(--bg-base)","margin-top":"8px"}},{default:i(()=>[e.dpResult.published?(c(),y(F,{key:0},[o(P,{title:t.$t("privacy.dp_modal.noisedTitle"),value:e.dpResult.data,precision:3,"value-style":{color:"#52c41a"}},null,8,["title","value"]),g("div",xt,[g("div",null,r(t.$t("privacy.dp_modal.spentLine",{n:e.dpResult.budgetSpent.toFixed(3)})),1),g("div",null,r(t.$t("privacy.dp_modal.remainingLine",{n:e.dpResult.budgetRemaining.toFixed(3)})),1),g("div",null,r(t.$t("privacy.dp_modal.mechanismLine",{name:e.dpResult.mechanism,epsilon:e.dpResult.epsilon})),1)])],64)):(c(),C(P,{key:1,title:t.$t("privacy.dp_modal.failedTitle"),value:e.dpResult.reason||"unknown","value-style":{color:"#ff4d4f"}},null,8,["title","value"]))]),_:1})):m("v-if",!0)]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),m(" ── HE query modal ───────────────────────────────────────── "),o(A,{open:e.showHEModal,"onUpdate:open":l[25]||(l[25]=a=>e.showHEModal=a),title:t.$t("privacy.he_modal.title"),"confirm-loading":e.querying,width:500,"ok-text":t.$t("privacy.he_modal.ok"),"cancel-text":t.$t("privacy.he_modal.cancel"),onOk:e.queryHE},{default:i(()=>[o(x,{"label-col":{span:6},"wrapper-col":{span:18},style:{"margin-top":"16px"}},{default:i(()=>[o(p,{label:t.$t("privacy.he_modal.dataLabel"),required:""},{default:i(()=>[o(ee,{value:e.heForm.data,"onUpdate:value":l[22]||(l[22]=a=>e.heForm.data=a),placeholder:t.$t("privacy.he_modal.dataPlaceholder"),"auto-size":{minRows:2,maxRows:4}},null,8,["value","placeholder"])]),_:1},8,["label"]),o(p,{label:t.$t("privacy.he_modal.operationLabel")},{default:i(()=>[o(T,{value:e.heForm.operation,"onUpdate:value":l[23]||(l[23]=a=>e.heForm.operation=a)},{default:i(()=>[(c(!0),y(F,null,z(e.HE_OPERATIONS,a=>(c(),C(M,{key:a,value:a},{default:i(()=>[v(r(a),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"]),o(p,{label:t.$t("privacy.he_modal.schemeLabel")},{default:i(()=>[o(T,{value:e.heForm.scheme,"onUpdate:value":l[24]||(l[24]=a=>e.heForm.scheme=a)},{default:i(()=>[(c(!0),y(F,null,z(e.HE_SCHEMES,a=>(c(),C(M,{key:a,value:a},{default:i(()=>[v(r(a),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"])]),_:1}),e.heResult?(c(),C(O,{key:0,size:"small",style:{background:"var(--bg-base)","margin-top":"8px"}},{default:i(()=>[o(P,{title:t.$t("privacy.he_modal.resultTitle"),value:e.heResult.result,"value-style":{color:"#1677ff"}},null,8,["title","value"]),g("div",Rt,[g("div",null,r(t.$t("privacy.he_modal.schemeLine",{name:e.heResult.scheme})),1),g("div",null,r(t.$t("privacy.he_modal.operationLine",{name:e.heResult.operation})),1),g("div",null,r(t.$t("privacy.he_modal.inputCountLine",{n:e.heResult.inputCount})),1),e.heResult.encrypted?(c(),C(R,{key:0,color:"green",style:{"margin-top":"4px","font-size":"10px"}},{default:i(()=>[v(r(t.$t("privacy.he_modal.encrypted")),1)]),_:1})):m("v-if",!0)])]),_:1})):m("v-if",!0)]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"])])}const At=Ee($e,[["render",Ot],["__scopeId","data-v-f7af818f"],["__file","/tmp/cc-web-panel-wxwyEA/repo/packages/web-panel/src/views/Privacy.vue"]]);export{At as default};
1
+ import{I as b,J as y,U as g,R as r,c as o,K as i,V as m,o as ne,a as G,b as N,r as k,P as c,Q as v,F,Z as z,S as C,$ as ze}from"./vendor-BvqAck49.js";import{t as Q,_ as Ee,u as re,b as se,d as f}from"./index-C1lWhMQw.js";import{a$ as je,r as we,Y as Ue,_ as Be,q as Ne,as as He,R as Ie}from"./icons-DP3uiYxy.js";const qe=Object.freeze(["initializing","training","aggregating","completed","failed"]),De=Object.freeze(["pending","computing","completed"]),Je=Object.freeze(["shamir","beaver","gmw"]),Ve=Object.freeze(["laplace","gaussian","exponential"]),Ke=Object.freeze(["paillier","bfv","ckks"]),Qe=Object.freeze(["sum","product","mean","count"]);function h(t,l=0){return typeof t=="number"&&Number.isFinite(t)?t:l}function We(t,l=0){if(!t||typeof t!="object")return null;const s=t.id||"";return s?{key:s,id:s,name:String(t.name||s),description:String(t.description||""),_idx:l}:null}function ae(t){const l=Q(t);return Array.isArray(l)?l.map(We).filter(Boolean):[]}function Ye(t,l=0){if(!t||typeof t!="object")return null;const s=t.id||"";return s?{key:s,id:s,name:String(t.name||""),modelType:t.modelType??t.model_type??"neural_network",architecture:String(t.architecture||""),status:String(t.status||"initializing").toLowerCase(),currentRound:h(t.currentRound??t.current_round,0),totalRounds:h(t.totalRounds??t.total_rounds,0),participantCount:h(t.participantCount??t.participant_count,0),accuracy:h(t.accuracy,0),loss:t.loss==null?null:h(t.loss,null),learningRate:h(t.learningRate??t.learning_rate,0),aggregationStrategy:t.aggregationStrategy??t.aggregation_strategy??"",privacyBudgetSpent:h(t.privacyBudgetSpent??t.privacy_budget_spent,0),createdAt:t.createdAt??t.created_at??null,updatedAt:t.updatedAt??t.updated_at??null,_idx:l}:null}function ue(t){const l=Q(t);return Array.isArray(l)?l.map(Ye).filter(Boolean):[]}function Ze(t,l=0){if(!t||typeof t!="object")return null;const s=t.id||"";if(!s)return null;let e=t.participantIds??t.participant_ids??[];if(typeof e=="string")try{e=JSON.parse(e)}catch{e=[]}return Array.isArray(e)||(e=[]),{key:s,id:s,computationType:t.computationType??t.computation_type??"",protocol:String(t.protocol||"shamir").toLowerCase(),participantCount:h(t.participantCount??t.participant_count,0),participantIds:e,resultHash:t.resultHash??t.result_hash??null,status:String(t.status||"pending").toLowerCase(),sharesReceived:h(t.sharesReceived??t.shares_received,0),sharesRequired:h(t.sharesRequired??t.shares_required,0),computationTimeMs:t.computationTimeMs??t.computation_time_ms??null,errorMessage:t.errorMessage??t.error_message??"",createdAt:t.createdAt??t.created_at??null,completedAt:t.completedAt??t.completed_at??null,_idx:l}}function ce(t){const l=Q(t);return Array.isArray(l)?l.map(Ze).filter(Boolean):[]}function de(t){const l=Q(t);return!l||typeof l!="object"||Array.isArray(l)?null:{published:!!l.published,reason:l.reason||null,data:l.data??null,epsilon:h(l.epsilon,0),delta:h(l.delta,0),mechanism:String(l.mechanism||""),budgetSpent:h(l.budgetSpent??l.budget_spent,0),budgetRemaining:h(l.budgetRemaining??l.budget_remaining,0)}}function pe(t){const l=Q(t);return!l||typeof l!="object"||Array.isArray(l)?null:{result:l.result??null,operation:String(l.operation||""),scheme:String(l.scheme||""),inputCount:h(l.inputCount??l.input_count,0),encrypted:l.encrypted!==!1}}const Ge={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 me(t){const l=JSON.parse(JSON.stringify(Ge)),s=Q(t);if(!s||typeof s!="object"||Array.isArray(s))return l;if(s.privacyBudget&&typeof s.privacyBudget=="object"&&(l.privacyBudget.spent=h(s.privacyBudget.spent,0),l.privacyBudget.limit=h(s.privacyBudget.limit,0),l.privacyBudget.remaining=h(s.privacyBudget.remaining,0),l.privacyBudget.exhausted=!!s.privacyBudget.exhausted),s.federatedLearning&&typeof s.federatedLearning=="object"&&(l.federatedLearning.totalModels=h(s.federatedLearning.totalModels,0),l.federatedLearning.completed=h(s.federatedLearning.completed,0),l.federatedLearning.training=h(s.federatedLearning.training,0),l.federatedLearning.avgAccuracy=h(s.federatedLearning.avgAccuracy,0)),s.mpc&&typeof s.mpc=="object"&&(l.mpc.totalComputations=h(s.mpc.totalComputations,0),l.mpc.completed=h(s.mpc.completed,0),l.mpc.pending=h(s.mpc.pending,0),s.mpc.byProtocol&&typeof s.mpc.byProtocol=="object"))for(const[e,j]of Object.entries(s.mpc.byProtocol))typeof j=="number"&&Number.isFinite(j)&&(l.mpc.byProtocol[e]=j);return l}function Xe(t){if(t==null||t==="")return"—";const l=typeof t=="number"?new Date(t):new Date(String(t));return isNaN(l.getTime())?String(t):l.toLocaleString("zh-CN",{hour12:!1})}const $e={__name:"Privacy",setup(t,{expose:l}){l();const s=re(),{t:e}=se(),j=k(!1),H=k(!1),E=k(!1),w=k(!1),W=k(""),Y=k(""),X=k([]),P=k([]),O=k([]),L=k([]),I=k([]),R=k({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:{}}}),M=k("models"),T=k(""),q=k(""),Z=k(""),D=k(!1),J=k(!1),$=k(!1),U=k(!1),p=G({name:"",modelType:"",architecture:"",rounds:10,lr:.01,participants:0}),S=G({type:"",protocol:"shamir",participants:"",threshold:null}),x=G({data:"",mechanism:"laplace",epsilon:.1,delta:1e-5,sensitivity:1}),A=G({data:"",operation:"sum",scheme:"paillier"}),V=k(null),K=k(null),ee=N(()=>[{title:e("privacy.modelCols.name"),key:"name"},{title:e("privacy.modelCols.status"),key:"status",width:"120px"},{title:e("privacy.modelCols.progress"),key:"progress",width:"160px"},{title:e("privacy.modelCols.accuracy"),key:"accuracy",width:"110px"},{title:e("privacy.modelCols.participants"),key:"participants",width:"90px"},{title:e("privacy.modelCols.budget"),key:"budget",width:"100px"},{title:e("privacy.modelCols.updatedAt"),key:"updatedAt",width:"160px"},{title:e("privacy.modelCols.action"),key:"action",width:"180px"}]),a=N(()=>[{title:e("privacy.computationCols.type"),key:"type",width:"160px"},{title:e("privacy.computationCols.protocol"),key:"protocol",width:"100px"},{title:e("privacy.computationCols.progress"),key:"progress"},{title:e("privacy.computationCols.status"),key:"status",width:"110px"},{title:e("privacy.computationCols.time"),key:"time",width:"110px"},{title:e("privacy.computationCols.createdAt"),key:"createdAt",width:"160px"},{title:e("privacy.computationCols.action"),key:"action",width:"160px"}]),d=N(()=>R.value.federatedLearning.avgAccuracy*100),te=N(()=>{const n=R.value.privacyBudget.remaining,u=R.value.privacyBudget.limit;if(u===0)return"#888";const _=n/u;return _<.2?"#ff4d4f":_<.5?"#faad14":"#52c41a"}),ye=N(()=>T.value?L.value.filter(n=>n.status===T.value):L.value),ve=N(()=>{let n=I.value;return q.value&&(n=n.filter(u=>u.protocol===q.value)),Z.value&&(n=n.filter(u=>u.status===Z.value)),n});function fe(n){const u=`privacy.flStatusLabels.${n}`,_=e(u);return _===u?n:_}function ge(n){return{initializing:"default",training:"processing",aggregating:"cyan",completed:"green",failed:"red"}[n]||"default"}function be(n){const u=`privacy.mpcStatusLabels.${n}`,_=e(u);return _===u?n:_}function he(n){return{pending:"default",computing:"processing",completed:"green"}[n]||"default"}function _e(n){return n>=.85?"#52c41a":n>=.6?"#faad14":"#ff4d4f"}function ke(n){return n.status==="initializing"||n.status==="training"||n.status==="aggregating"}function Se({key:n}){n==="model"?D.value=!0:n==="computation"?J.value=!0:n==="dp"?(V.value=null,$.value=!0):n==="he"&&(K.value=null,U.value=!0)}async function B(){j.value=!0;try{const[n,u,_,Pe,Ae,Te]=await Promise.all([s.execute("privacy protocols --json",8e3).catch(()=>({output:""})),s.execute("privacy dp-mechanisms --json",8e3).catch(()=>({output:""})),s.execute("privacy he-schemes --json",8e3).catch(()=>({output:""})),s.execute("privacy models --limit 100 --json",1e4).catch(()=>({output:""})),s.execute("privacy computations --limit 100 --json",1e4).catch(()=>({output:""})),s.execute("privacy report --json",8e3).catch(()=>({output:""}))]);X.value=ae(n.output),P.value=ae(u.output),O.value=ae(_.output),L.value=ue(Pe.output),I.value=ce(Ae.output),R.value=me(Te.output)}catch(n){f.error(e("privacy.msg.loadFailed")+": "+(n?.message||n))}finally{j.value=!1}}async function Ce(){if(!p.name.trim()){f.warning(e("privacy.msg.modelNameEmpty"));return}H.value=!0;try{const n=[`privacy create-model "${p.name.trim().replace(/"/g,'\\"')}"`];p.modelType.trim()&&n.push(`--type "${p.modelType.trim().replace(/"/g,'\\"')}"`),p.architecture.trim()&&n.push(`--arch "${p.architecture.trim().replace(/"/g,'\\"')}"`),p.rounds!=null&&n.push(`--rounds ${p.rounds}`),p.lr!=null&&n.push(`--lr ${p.lr}`),p.participants!=null&&n.push(`--participants ${p.participants}`),n.push("--json");const{output:u}=await s.execute(n.join(" "),12e3);if(/error|失败/i.test(u)&&!/"modelId"/.test(u)){f.error(e("privacy.msg.modelCreateFailed")+": "+u.slice(0,120));return}f.success(e("privacy.msg.modelCreateSuccess")),D.value=!1,le(),await B()}catch(n){f.error(e("privacy.msg.modelCreateFailed")+": "+(n?.message||n))}finally{H.value=!1}}async function Fe(){if(!S.type.trim()){f.warning(e("privacy.msg.computationTypeEmpty"));return}H.value=!0;try{const n=[`privacy create-computation "${S.type.trim().replace(/"/g,'\\"')}"`];if(n.push(`--protocol ${S.protocol}`),S.participants.trim()){const _=S.participants.split(/[,\s]+/).filter(Boolean).join(",");_&&n.push(`--participants "${_}"`)}S.threshold!=null&&n.push(`--threshold ${S.threshold}`),n.push("--json");const{output:u}=await s.execute(n.join(" "),1e4);if(/error|失败|invalid/i.test(u)&&!/"computationId"/.test(u)){f.error(e("privacy.msg.computationCreateFailed")+": "+u.slice(0,120));return}f.success(e("privacy.msg.computationCreateSuccess")),J.value=!1,oe(),M.value="computations",await B()}catch(n){f.error(e("privacy.msg.computationCreateFailed")+": "+(n?.message||n))}finally{H.value=!1}}async function xe(n){W.value=n.id;try{const{output:u}=await s.execute(`privacy train ${n.id} --json`,12e3);if(/error|失败/i.test(u)&&!/"trained"/.test(u)){f.error(e("privacy.msg.trainFailed")+": "+u.slice(0,120));return}f.success(e("privacy.msg.trainSuccess")),await B()}catch(u){f.error(e("privacy.msg.trainFailed")+": "+(u?.message||u))}finally{W.value=""}}async function Re(n){try{const{output:u}=await s.execute(`privacy fail-model ${n.id} --json`,8e3);if(/error/i.test(u)&&!/"failed"/.test(u)){f.error(e("privacy.msg.failMarkFailed")+": "+u.slice(0,120));return}f.success(e("privacy.msg.failMarkSuccess")),await B()}catch(u){f.error(e("privacy.msg.failMarkFailed")+": "+(u?.message||u))}}async function Oe(n){Y.value=n.id;try{const{output:u}=await s.execute(`privacy submit-share ${n.id} --json`,1e4);if(/error|失败/i.test(u)&&!/"submitted"/.test(u)){f.error(e("privacy.msg.submitFailed")+": "+u.slice(0,120));return}f.success(e("privacy.msg.submitSuccess")),await B()}catch(u){f.error(e("privacy.msg.submitFailed")+": "+(u?.message||u))}finally{Y.value=""}}async function Le(){if(!x.data.trim()){f.warning(e("privacy.msg.dataEmpty"));return}E.value=!0,V.value=null;try{const n=["privacy dp-publish"];n.push(`--data ${JSON.stringify(x.data.trim())}`),n.push(`--mechanism ${x.mechanism}`),x.epsilon!=null&&n.push(`--epsilon ${x.epsilon}`),x.delta!=null&&n.push(`--delta ${x.delta}`),x.sensitivity!=null&&n.push(`--sensitivity ${x.sensitivity}`),n.push("--json");const{output:u}=await s.execute(n.join(" "),1e4),_=de(u);if(!_){f.error(e("privacy.msg.dpFailed")+": "+u.slice(0,120));return}V.value=_,_.published?(f.success(e("privacy.msg.dpSuccess")),await B()):f.warning(e("privacy.msg.dpRejected",{reason:_.reason||"unknown"}))}catch(n){f.error(e("privacy.msg.dpFailed")+": "+(n?.message||n))}finally{E.value=!1}}async function Me(){if(!A.data.trim()){f.warning(e("privacy.msg.dataEmpty"));return}try{JSON.parse(A.data)}catch{f.warning(e("privacy.msg.dataInvalidJson"));return}w.value=!0,K.value=null;try{const n=["privacy he-query"];n.push(`--data ${JSON.stringify(A.data.trim())}`),n.push(`--operation ${A.operation}`),n.push(`--scheme ${A.scheme}`),n.push("--json");const{output:u}=await s.execute(n.join(" "),1e4),_=pe(u);if(!_){f.error(e("privacy.msg.heFailed")+": "+u.slice(0,120));return}K.value=_,f.success(e("privacy.msg.heSuccess",{scheme:_.scheme,op:_.operation}))}catch(n){f.error(e("privacy.msg.heFailed")+": "+(n?.message||n))}finally{w.value=!1}}function le(){p.name="",p.modelType="",p.architecture="",p.rounds=10,p.lr=.01,p.participants=0}function oe(){S.type="",S.protocol="shamir",S.participants="",S.threshold=null}ne(B);const ie={ws:s,t:e,loading:j,creating:H,publishing:E,querying:w,trainingId:W,submittingShareId:Y,protocols:X,dpMechanisms:P,heSchemes:O,models:L,computations:I,report:R,activeTab:M,modelStatusFilter:T,mpcProtocolFilter:q,mpcStatusFilter:Z,showModelModal:D,showComputationModal:J,showDPModal:$,showHEModal:U,modelForm:p,computationForm:S,dpForm:x,heForm:A,dpResult:V,heResult:K,modelColumns:ee,computationColumns:a,avgAccuracyPct:d,budgetColor:te,filteredModels:ye,filteredComputations:ve,flStatusLabel:fe,flStatusColor:ge,mpcStatusLabel:be,mpcStatusColor:he,accuracyColor:_e,canTrain:ke,handleNewClick:Se,loadAll:B,createModel:Ce,createComputation:Fe,trainOne:xe,failModel:Re,submitShare:Oe,publishDP:Le,queryHE:Me,resetModelForm:le,resetComputationForm:oe,ref:k,computed:N,onMounted:ne,reactive:G,get ReloadOutlined(){return Ie},get PlusOutlined(){return He},get ExperimentOutlined(){return Ne},get ApartmentOutlined(){return Be},get LockOutlined(){return Ue},get SafetyOutlined(){return we},get RiseOutlined(){return je},get message(){return f},get useI18n(){return se},get useWsStore(){return re},get parseCatalog(){return ae},get parseModels(){return ue},get parseComputations(){return ce},get parseDPResult(){return de},get parseHEResult(){return pe},get parseReport(){return me},get formatPrivacyTime(){return Xe},get FL_STATUSES(){return qe},get MPC_STATUSES(){return De},get MPC_PROTOCOLS(){return Je},get DP_MECHANISMS(){return Ve},get HE_SCHEMES(){return Ke},get HE_OPERATIONS(){return Qe}};return Object.defineProperty(ie,"__isScriptSetup",{enumerable:!1,value:!0}),ie}},et={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},tt={class:"page-title"},at={class:"page-sub"},lt={style:{"font-size":"11px",color:"var(--text-secondary)"}},ot={class:"catalog-name"},it={class:"catalog-desc"},nt={class:"catalog-name"},rt={class:"catalog-desc"},st={class:"catalog-name"},ut={class:"catalog-desc"},ct={class:"filter-bar"},dt={style:{color:"var(--text-primary)","font-weight":"500"}},pt={style:{color:"var(--text-secondary)","font-size":"11px","margin-top":"2px"}},mt={style:{"font-size":"11px",color:"var(--text-secondary)"}},yt={key:0,style:{"font-size":"11px",color:"var(--text-secondary)"}},vt={key:5,style:{"font-family":"monospace",color:"var(--text-secondary)"}},ft={key:6,style:{color:"var(--text-secondary)","font-size":"11px"}},gt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},bt={class:"filter-bar"},ht={key:0,style:{color:"var(--text-primary)","font-family":"monospace","font-weight":"500"}},_t={key:0,style:{"font-family":"monospace",color:"var(--text-secondary)","font-size":"12px"}},kt={key:1,style:{color:"var(--text-muted)"}},St={key:5,style:{color:"var(--text-secondary)","font-size":"11px"}},Ct={key:1,style:{color:"var(--text-muted)","font-size":"11px","font-family":"monospace"}},Ft={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},xt={style:{"margin-top":"12px","font-size":"12px",color:"var(--text-secondary)"}},Rt={style:{"margin-top":"12px","font-size":"12px",color:"var(--text-secondary)"}};function Ot(t,l,s,e,j,H){const E=b("a-button"),w=b("a-menu-item"),W=b("a-menu"),Y=b("a-dropdown"),X=b("a-space"),P=b("a-statistic"),O=b("a-card"),L=b("a-col"),I=b("a-row"),R=b("a-tag"),M=b("a-radio-button"),T=b("a-radio-group"),q=b("a-progress"),Z=b("a-popconfirm"),D=b("a-table"),J=b("a-tab-pane"),$=b("a-tabs"),U=b("a-input"),p=b("a-form-item"),S=b("a-input-number"),x=b("a-form"),A=b("a-modal"),V=b("a-select-option"),K=b("a-select"),ee=b("a-textarea");return c(),y("div",null,[g("div",et,[g("div",null,[g("h2",tt,r(t.$t("privacy.title")),1),g("p",at,r(t.$t("privacy.subtitle")),1)]),o(X,null,{default:i(()=>[o(E,{loading:e.loading,onClick:e.loadAll},{icon:i(()=>[o(e.ReloadOutlined)]),default:i(()=>[v(" "+r(t.$t("privacy.refresh")),1)]),_:1},8,["loading"]),o(Y,{trigger:["click"]},{overlay:i(()=>[o(W,{onClick:e.handleNewClick},{default:i(()=>[o(w,{key:"model"},{default:i(()=>[o(e.ExperimentOutlined),v(" "+r(t.$t("privacy.actions.model")),1)]),_:1}),o(w,{key:"computation"},{default:i(()=>[o(e.ApartmentOutlined),v(" "+r(t.$t("privacy.actions.computation")),1)]),_:1}),o(w,{key:"dp"},{default:i(()=>[o(e.LockOutlined),v(" "+r(t.$t("privacy.actions.dp")),1)]),_:1}),o(w,{key:"he"},{default:i(()=>[o(e.SafetyOutlined),v(" "+r(t.$t("privacy.actions.he")),1)]),_:1})]),_:1})]),default:i(()=>[o(E,{type:"primary"},{icon:i(()=>[o(e.PlusOutlined)]),default:i(()=>[v(" "+r(t.$t("privacy.actionDropdown")),1)]),_:1})]),_:1})]),_:1})]),m(" Stat cards "),o(I,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:i(()=>[o(L,{xs:12,sm:8,lg:5},{default:i(()=>[o(O,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:i(()=>[o(P,{title:t.$t("privacy.stats.models"),value:e.report.federatedLearning.totalModels,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:i(()=>[o(e.ExperimentOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),o(L,{xs:12,sm:8,lg:5},{default:i(()=>[o(O,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:i(()=>[o(P,{title:t.$t("privacy.stats.avgAccuracy"),value:e.avgAccuracyPct,precision:1,suffix:"%","value-style":{color:e.report.federatedLearning.avgAccuracy>=.8?"#52c41a":"#faad14",fontSize:"20px"}},{prefix:i(()=>[o(e.RiseOutlined)]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),o(L,{xs:12,sm:8,lg:5},{default:i(()=>[o(O,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:i(()=>[o(P,{title:t.$t("privacy.stats.computations"),value:e.report.mpc.totalComputations,"value-style":{color:"#722ed1",fontSize:"20px"}},{prefix:i(()=>[o(e.ApartmentOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),o(L,{xs:12,sm:8,lg:5},{default:i(()=>[o(O,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:i(()=>[o(P,{title:t.$t("privacy.stats.budget"),value:e.report.privacyBudget.remaining,precision:2,"value-style":{color:e.budgetColor,fontSize:"20px"}},{prefix:i(()=>[o(e.LockOutlined)]),suffix:i(()=>[g("span",lt,"/ "+r(e.report.privacyBudget.limit),1)]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),o(L,{xs:24,sm:8,lg:4},{default:i(()=>[o(O,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:i(()=>[o(P,{title:t.$t("privacy.stats.budgetState"),value:e.report.privacyBudget.exhausted?t.$t("privacy.stats.exhausted"):t.$t("privacy.stats.ample"),"value-style":{color:e.report.privacyBudget.exhausted?"#ff4d4f":"#52c41a",fontSize:"20px"}},null,8,["title","value","value-style"])]),_:1})]),_:1})]),_:1}),m(" Catalogue cards "),o(I,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:i(()=>[o(L,{xs:24,md:8},{default:i(()=>[o(O,{title:t.$t("privacy.catalog.protocols"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"},"body-style":{padding:"12px 16px"}},{default:i(()=>[(c(!0),y(F,null,z(e.protocols,a=>(c(),y("div",{key:a.id,class:"catalog-item"},[o(R,{color:"purple",style:{"font-family":"monospace"}},{default:i(()=>[v(r(a.id),1)]),_:2},1024),g("span",ot,r(a.name),1),g("span",it,r(a.description),1)]))),128))]),_:1},8,["title"])]),_:1}),o(L,{xs:24,md:8},{default:i(()=>[o(O,{title:t.$t("privacy.catalog.dp"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"},"body-style":{padding:"12px 16px"}},{default:i(()=>[(c(!0),y(F,null,z(e.dpMechanisms,a=>(c(),y("div",{key:a.id,class:"catalog-item"},[o(R,{color:"orange",style:{"font-family":"monospace"}},{default:i(()=>[v(r(a.id),1)]),_:2},1024),g("span",nt,r(a.name),1),g("span",rt,r(a.description),1)]))),128))]),_:1},8,["title"])]),_:1}),o(L,{xs:24,md:8},{default:i(()=>[o(O,{title:t.$t("privacy.catalog.he"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"},"body-style":{padding:"12px 16px"}},{default:i(()=>[(c(!0),y(F,null,z(e.heSchemes,a=>(c(),y("div",{key:a.id,class:"catalog-item"},[o(R,{color:"cyan",style:{"font-family":"monospace"}},{default:i(()=>[v(r(a.id),1)]),_:2},1024),g("span",st,r(a.name),1),g("span",ut,r(a.description),1)]))),128))]),_:1},8,["title"])]),_:1})]),_:1}),m(" Tabs "),o($,{activeKey:e.activeTab,"onUpdate:activeKey":l[3]||(l[3]=a=>e.activeTab=a),class:"privacy-tabs"},{default:i(()=>[m(" ── FL models tab ─────────────────────────────────────────── "),o(J,{key:"models",tab:t.$t("privacy.tabs.models")},{default:i(()=>[g("div",ct,[o(T,{value:e.modelStatusFilter,"onUpdate:value":l[0]||(l[0]=a=>e.modelStatusFilter=a),size:"small","button-style":"solid"},{default:i(()=>[o(M,{value:""},{default:i(()=>[v(r(t.$t("privacy.filter.all")),1)]),_:1}),(c(!0),y(F,null,z(e.FL_STATUSES,a=>(c(),C(M,{key:a,value:a},{default:i(()=>[v(r(e.flStatusLabel(a)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),o(D,{columns:e.modelColumns,"data-source":e.filteredModels,pagination:{pageSize:20,showTotal:a=>t.$t("privacy.table.totalSuffix",{n:a})},size:"small",loading:e.loading,style:{background:"var(--bg-card)"}},{bodyCell:i(({column:a,record:d})=>[a.key==="name"?(c(),y(F,{key:0},[g("span",dt,r(d.name),1),g("div",pt,r(d.modelType)+" / "+r(d.architecture),1)],64)):m("v-if",!0),a.key==="status"?(c(),C(R,{key:1,color:e.flStatusColor(d.status)},{default:i(()=>[v(r(e.flStatusLabel(d.status)),1)]),_:2},1032,["color"])):m("v-if",!0),a.key==="progress"?(c(),y(F,{key:2},[o(q,{percent:d.totalRounds?Math.round(100*d.currentRound/d.totalRounds):0,size:"small",status:d.status==="failed"?"exception":d.status==="completed"?"success":"active"},null,8,["percent","status"]),g("div",mt,r(t.$t("privacy.table.rounds",{cur:d.currentRound,total:d.totalRounds})),1)],64)):m("v-if",!0),a.key==="accuracy"?(c(),y(F,{key:3},[g("span",{style:ze({color:e.accuracyColor(d.accuracy),fontFamily:"monospace"})},r((d.accuracy*100).toFixed(1))+"% ",5),d.loss!=null?(c(),y("div",yt," loss "+r(d.loss.toFixed(3)),1)):m("v-if",!0)],64)):m("v-if",!0),a.key==="participants"?(c(),C(R,{key:4,color:"blue",style:{"font-size":"11px"}},{default:i(()=>[v(r(d.participantCount),1)]),_:2},1024)):m("v-if",!0),a.key==="budget"?(c(),y("span",vt,r(d.privacyBudgetSpent.toFixed(3)),1)):m("v-if",!0),a.key==="updatedAt"?(c(),y("span",ft,r(e.formatPrivacyTime(d.updatedAt)),1)):m("v-if",!0),a.key==="action"?(c(),y(F,{key:7},[e.canTrain(d)?(c(),C(E,{key:0,size:"small",type:"link",loading:e.trainingId===d.id,onClick:te=>e.trainOne(d)},{default:i(()=>[v(r(t.$t("privacy.table.trainOne")),1)]),_:1},8,["loading","onClick"])):m("v-if",!0),d.status!=="failed"&&d.status!=="completed"?(c(),C(Z,{key:1,title:t.$t("privacy.table.failConfirm"),"ok-text":t.$t("privacy.table.failOk"),"cancel-text":t.$t("privacy.table.failCancel"),onConfirm:te=>e.failModel(d)},{default:i(()=>[o(E,{size:"small",type:"link",danger:""},{default:i(()=>[v(r(t.$t("privacy.table.failMark")),1)]),_:1})]),_:1},8,["title","ok-text","cancel-text","onConfirm"])):m("v-if",!0)],64)):m("v-if",!0)]),emptyText:i(()=>[g("div",gt,[o(e.ExperimentOutlined,{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),v(" "+r(e.modelStatusFilter?t.$t("privacy.table.emptyModelsFiltered"):t.$t("privacy.table.emptyModels")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),m(" ── MPC computations tab ──────────────────────────────────── "),o(J,{key:"computations",tab:t.$t("privacy.tabs.computations")},{default:i(()=>[g("div",bt,[o(T,{value:e.mpcProtocolFilter,"onUpdate:value":l[1]||(l[1]=a=>e.mpcProtocolFilter=a),size:"small"},{default:i(()=>[o(M,{value:""},{default:i(()=>[v(r(t.$t("privacy.filter.allProtocols")),1)]),_:1}),(c(!0),y(F,null,z(e.MPC_PROTOCOLS,a=>(c(),C(M,{key:a,value:a},{default:i(()=>[v(r(a),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),o(T,{value:e.mpcStatusFilter,"onUpdate:value":l[2]||(l[2]=a=>e.mpcStatusFilter=a),size:"small"},{default:i(()=>[o(M,{value:""},{default:i(()=>[v(r(t.$t("privacy.filter.allStatuses")),1)]),_:1}),(c(!0),y(F,null,z(e.MPC_STATUSES,a=>(c(),C(M,{key:a,value:a},{default:i(()=>[v(r(e.mpcStatusLabel(a)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),o(D,{columns:e.computationColumns,"data-source":e.filteredComputations,pagination:{pageSize:20,showTotal:a=>t.$t("privacy.table.totalSuffix",{n:a})},size:"small",loading:e.loading,style:{background:"var(--bg-card)"}},{bodyCell:i(({column:a,record:d})=>[a.key==="type"?(c(),y("span",ht,r(d.computationType),1)):m("v-if",!0),a.key==="protocol"?(c(),C(R,{key:1,color:"purple",style:{"font-family":"monospace"}},{default:i(()=>[v(r(d.protocol),1)]),_:2},1024)):m("v-if",!0),a.key==="progress"?(c(),C(q,{key:2,percent:d.sharesRequired?Math.round(100*d.sharesReceived/d.sharesRequired):0,size:"small",status:d.status==="completed"?"success":"active",format:()=>`${d.sharesReceived}/${d.sharesRequired}`},null,8,["percent","status","format"])):m("v-if",!0),a.key==="status"?(c(),C(R,{key:3,color:e.mpcStatusColor(d.status)},{default:i(()=>[v(r(e.mpcStatusLabel(d.status)),1)]),_:2},1032,["color"])):m("v-if",!0),a.key==="time"?(c(),y(F,{key:4},[d.computationTimeMs!=null?(c(),y("span",_t,r(d.computationTimeMs)+" ms ",1)):(c(),y("span",kt,"—"))],64)):m("v-if",!0),a.key==="createdAt"?(c(),y("span",St,r(e.formatPrivacyTime(d.createdAt)),1)):m("v-if",!0),a.key==="action"?(c(),y(F,{key:6},[d.status!=="completed"?(c(),C(E,{key:0,size:"small",type:"link",loading:e.submittingShareId===d.id,onClick:te=>e.submitShare(d)},{default:i(()=>[v(r(t.$t("privacy.table.submitShare")),1)]),_:1},8,["loading","onClick"])):(c(),y("span",Ct," hash "+r(d.resultHash?.slice(0,8)||"—"),1))],64)):m("v-if",!0)]),emptyText:i(()=>[g("div",Ft,[o(e.ApartmentOutlined,{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),v(" "+r(t.$t("privacy.table.emptyComputations")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"])]),_:1},8,["activeKey"]),m(" ── Create FL model modal ─────────────────────────────────── "),o(A,{open:e.showModelModal,"onUpdate:open":l[10]||(l[10]=a=>e.showModelModal=a),title:t.$t("privacy.model_modal.title"),"confirm-loading":e.creating,width:540,"ok-text":t.$t("privacy.model_modal.ok"),"cancel-text":t.$t("privacy.model_modal.cancel"),onOk:e.createModel,onCancel:e.resetModelForm},{default:i(()=>[o(x,{"label-col":{span:6},"wrapper-col":{span:18},style:{"margin-top":"16px"}},{default:i(()=>[o(p,{label:t.$t("privacy.model_modal.nameLabel"),required:""},{default:i(()=>[o(U,{value:e.modelForm.name,"onUpdate:value":l[4]||(l[4]=a=>e.modelForm.name=a),placeholder:t.$t("privacy.model_modal.namePlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),o(p,{label:t.$t("privacy.model_modal.typeLabel")},{default:i(()=>[o(U,{value:e.modelForm.modelType,"onUpdate:value":l[5]||(l[5]=a=>e.modelForm.modelType=a),placeholder:t.$t("privacy.model_modal.typePlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),o(p,{label:t.$t("privacy.model_modal.archLabel")},{default:i(()=>[o(U,{value:e.modelForm.architecture,"onUpdate:value":l[6]||(l[6]=a=>e.modelForm.architecture=a),placeholder:t.$t("privacy.model_modal.archPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),o(p,{label:t.$t("privacy.model_modal.roundsLabel")},{default:i(()=>[o(S,{value:e.modelForm.rounds,"onUpdate:value":l[7]||(l[7]=a=>e.modelForm.rounds=a),min:1,max:1e3,style:{width:"100%"}},null,8,["value"])]),_:1},8,["label"]),o(p,{label:t.$t("privacy.model_modal.lrLabel")},{default:i(()=>[o(S,{value:e.modelForm.lr,"onUpdate:value":l[8]||(l[8]=a=>e.modelForm.lr=a),min:0,max:1,step:.001,style:{width:"100%"}},null,8,["value"])]),_:1},8,["label"]),o(p,{label:t.$t("privacy.model_modal.participantsLabel")},{default:i(()=>[o(S,{value:e.modelForm.participants,"onUpdate:value":l[9]||(l[9]=a=>e.modelForm.participants=a),min:0,max:1e3,style:{width:"100%"}},null,8,["value"])]),_:1},8,["label"])]),_:1})]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),m(" ── Create MPC computation modal ─────────────────────────── "),o(A,{open:e.showComputationModal,"onUpdate:open":l[15]||(l[15]=a=>e.showComputationModal=a),title:t.$t("privacy.computation_modal.title"),"confirm-loading":e.creating,width:520,"ok-text":t.$t("privacy.computation_modal.ok"),"cancel-text":t.$t("privacy.computation_modal.cancel"),onOk:e.createComputation,onCancel:e.resetComputationForm},{default:i(()=>[o(x,{"label-col":{span:6},"wrapper-col":{span:18},style:{"margin-top":"16px"}},{default:i(()=>[o(p,{label:t.$t("privacy.computation_modal.typeLabel"),required:""},{default:i(()=>[o(U,{value:e.computationForm.type,"onUpdate:value":l[11]||(l[11]=a=>e.computationForm.type=a),placeholder:t.$t("privacy.computation_modal.typePlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),o(p,{label:t.$t("privacy.computation_modal.protocolLabel")},{default:i(()=>[o(K,{value:e.computationForm.protocol,"onUpdate:value":l[12]||(l[12]=a=>e.computationForm.protocol=a)},{default:i(()=>[(c(!0),y(F,null,z(e.MPC_PROTOCOLS,a=>(c(),C(V,{key:a,value:a},{default:i(()=>[v(r(a),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"]),o(p,{label:t.$t("privacy.computation_modal.participantsLabel")},{default:i(()=>[o(ee,{value:e.computationForm.participants,"onUpdate:value":l[13]||(l[13]=a=>e.computationForm.participants=a),placeholder:t.$t("privacy.computation_modal.participantsPlaceholder"),"auto-size":{minRows:2,maxRows:4}},null,8,["value","placeholder"])]),_:1},8,["label"]),o(p,{label:t.$t("privacy.computation_modal.thresholdLabel")},{default:i(()=>[o(S,{value:e.computationForm.threshold,"onUpdate:value":l[14]||(l[14]=a=>e.computationForm.threshold=a),min:2,max:100,placeholder:t.$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"]),m(" ── DP publish modal ─────────────────────────────────────── "),o(A,{open:e.showDPModal,"onUpdate:open":l[21]||(l[21]=a=>e.showDPModal=a),title:t.$t("privacy.dp_modal.title"),"confirm-loading":e.publishing,width:520,"ok-text":t.$t("privacy.dp_modal.ok"),"cancel-text":t.$t("privacy.dp_modal.cancel"),onOk:e.publishDP},{default:i(()=>[o(x,{"label-col":{span:6},"wrapper-col":{span:18},style:{"margin-top":"16px"}},{default:i(()=>[o(p,{label:t.$t("privacy.dp_modal.dataLabel"),required:""},{default:i(()=>[o(U,{value:e.dpForm.data,"onUpdate:value":l[16]||(l[16]=a=>e.dpForm.data=a),placeholder:t.$t("privacy.dp_modal.dataPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),o(p,{label:t.$t("privacy.dp_modal.mechanismLabel")},{default:i(()=>[o(T,{value:e.dpForm.mechanism,"onUpdate:value":l[17]||(l[17]=a=>e.dpForm.mechanism=a)},{default:i(()=>[(c(!0),y(F,null,z(e.DP_MECHANISMS,a=>(c(),C(M,{key:a,value:a},{default:i(()=>[v(r(a),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"]),o(p,{label:t.$t("privacy.dp_modal.epsilonLabel")},{default:i(()=>[o(S,{value:e.dpForm.epsilon,"onUpdate:value":l[18]||(l[18]=a=>e.dpForm.epsilon=a),min:0,step:.01,style:{width:"100%"}},null,8,["value"])]),_:1},8,["label"]),o(p,{label:t.$t("privacy.dp_modal.deltaLabel")},{default:i(()=>[o(S,{value:e.dpForm.delta,"onUpdate:value":l[19]||(l[19]=a=>e.dpForm.delta=a),min:0,step:1e-6,style:{width:"100%"}},null,8,["value"])]),_:1},8,["label"]),o(p,{label:t.$t("privacy.dp_modal.sensitivityLabel")},{default:i(()=>[o(S,{value:e.dpForm.sensitivity,"onUpdate:value":l[20]||(l[20]=a=>e.dpForm.sensitivity=a),min:0,step:.1,style:{width:"100%"}},null,8,["value"])]),_:1},8,["label"])]),_:1}),e.dpResult?(c(),C(O,{key:0,size:"small",style:{background:"var(--bg-base)","margin-top":"8px"}},{default:i(()=>[e.dpResult.published?(c(),y(F,{key:0},[o(P,{title:t.$t("privacy.dp_modal.noisedTitle"),value:e.dpResult.data,precision:3,"value-style":{color:"#52c41a"}},null,8,["title","value"]),g("div",xt,[g("div",null,r(t.$t("privacy.dp_modal.spentLine",{n:e.dpResult.budgetSpent.toFixed(3)})),1),g("div",null,r(t.$t("privacy.dp_modal.remainingLine",{n:e.dpResult.budgetRemaining.toFixed(3)})),1),g("div",null,r(t.$t("privacy.dp_modal.mechanismLine",{name:e.dpResult.mechanism,epsilon:e.dpResult.epsilon})),1)])],64)):(c(),C(P,{key:1,title:t.$t("privacy.dp_modal.failedTitle"),value:e.dpResult.reason||"unknown","value-style":{color:"#ff4d4f"}},null,8,["title","value"]))]),_:1})):m("v-if",!0)]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),m(" ── HE query modal ───────────────────────────────────────── "),o(A,{open:e.showHEModal,"onUpdate:open":l[25]||(l[25]=a=>e.showHEModal=a),title:t.$t("privacy.he_modal.title"),"confirm-loading":e.querying,width:500,"ok-text":t.$t("privacy.he_modal.ok"),"cancel-text":t.$t("privacy.he_modal.cancel"),onOk:e.queryHE},{default:i(()=>[o(x,{"label-col":{span:6},"wrapper-col":{span:18},style:{"margin-top":"16px"}},{default:i(()=>[o(p,{label:t.$t("privacy.he_modal.dataLabel"),required:""},{default:i(()=>[o(ee,{value:e.heForm.data,"onUpdate:value":l[22]||(l[22]=a=>e.heForm.data=a),placeholder:t.$t("privacy.he_modal.dataPlaceholder"),"auto-size":{minRows:2,maxRows:4}},null,8,["value","placeholder"])]),_:1},8,["label"]),o(p,{label:t.$t("privacy.he_modal.operationLabel")},{default:i(()=>[o(T,{value:e.heForm.operation,"onUpdate:value":l[23]||(l[23]=a=>e.heForm.operation=a)},{default:i(()=>[(c(!0),y(F,null,z(e.HE_OPERATIONS,a=>(c(),C(M,{key:a,value:a},{default:i(()=>[v(r(a),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"]),o(p,{label:t.$t("privacy.he_modal.schemeLabel")},{default:i(()=>[o(T,{value:e.heForm.scheme,"onUpdate:value":l[24]||(l[24]=a=>e.heForm.scheme=a)},{default:i(()=>[(c(!0),y(F,null,z(e.HE_SCHEMES,a=>(c(),C(M,{key:a,value:a},{default:i(()=>[v(r(a),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"])]),_:1}),e.heResult?(c(),C(O,{key:0,size:"small",style:{background:"var(--bg-base)","margin-top":"8px"}},{default:i(()=>[o(P,{title:t.$t("privacy.he_modal.resultTitle"),value:e.heResult.result,"value-style":{color:"#1677ff"}},null,8,["title","value"]),g("div",Rt,[g("div",null,r(t.$t("privacy.he_modal.schemeLine",{name:e.heResult.scheme})),1),g("div",null,r(t.$t("privacy.he_modal.operationLine",{name:e.heResult.operation})),1),g("div",null,r(t.$t("privacy.he_modal.inputCountLine",{n:e.heResult.inputCount})),1),e.heResult.encrypted?(c(),C(R,{key:0,color:"green",style:{"margin-top":"4px","font-size":"10px"}},{default:i(()=>[v(r(t.$t("privacy.he_modal.encrypted")),1)]),_:1})):m("v-if",!0)])]),_:1})):m("v-if",!0)]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"])])}const At=Ee($e,[["render",Ot],["__scopeId","data-v-f7af818f"],["__file","/tmp/cc-web-panel-ehQgdt/repo/packages/web-panel/src/views/Privacy.vue"]]);export{At as default};
@@ -1,2 +1,2 @@
1
- import{I as f,J as m,U as i,R as r,c as o,K as t,V as s,S as _,o as A,a as H,b as U,r as d,P as l,Q as b,F as W,Z as J,_ as oe,a0 as ae,$ as re}from"./vendor-BvqAck49.js";import{_ as le,b as K,u as Q,d as D}from"./index-DDBuc-Id.js";import{u as Z}from"./useFs-fOz_rVnu.js";import{O as M,ar as q,aa as T,f as G,an as ne,R as ie}from"./icons-DP3uiYxy.js";import"./useShellMode-CgR0wCYM.js";const se={__name:"ProjectInit",setup(X,{expose:O}){O();const{t:v}=K(),e=Q(),R=Z(),P=d(!1),y=d(!1),h=d(!1),c=d(!1),x=d(""),j=d(""),F=d(null),z=d(!1),w=d([]),p=d(null),I=d(!1),u=H({running:!1,edition:"",llmProvider:"",llmModel:"",setupDone:!1,setupDate:""}),n=[{name:"code-project",icon:M},{name:"medical-triage",icon:q},{name:"agriculture-expert",icon:T},{name:"general-assistant",icon:G},{name:"ai-media-creator",icon:T},{name:"ai-doc-creator",icon:M}],B=U(()=>n.map(a=>({...a,description:v(`projects.templates.${a.name}`)})));function E(a){u.running=a.includes("Desktop app running")||a.includes("Running");const g=a.match(/Edition:\s+(\S+)/i);g&&(u.edition=g[1]);const k=a.match(/LLM:\s+(\S+)\s+\(([^)]+)\)/i);if(k)u.llmProvider=k[1],u.llmModel=k[2];else{const C=a.match(/LLM:\s+(\S+)/i);C&&(u.llmProvider=C[1])}u.setupDone=a.includes("Setup completed");const S=a.match(/Setup completed \(([^)]+)\)/i);if(S)try{u.setupDate=new Date(S[1]).toLocaleDateString("zh-CN")}catch{u.setupDate=""}}function N(a){const g=[],k=a.split(`
2
- `);for(const S of k){const C=S.match(/^\s*(\S+)\s*[=:]\s*(.+)$/);C&&g.push({key:C[1].trim(),value:C[2].trim()})}w.value=g,z.value=g.length>0}async function L(){P.value=!0;try{const[a,g]=await Promise.all([e.execute("status",15e3),e.execute("config list",15e3)]);E(a.output),N(g.output)}catch(a){console.error("refresh failed:",a)}finally{P.value=!1}}async function Y(){if(x.value){if(p.value&&I.value){D.info(v("projects.messages.alreadyProjectInfo"));return}y.value=!0,F.value=null;try{let a=`init --template ${x.value} --yes`;p.value&&(a+=` --cwd "${p.value}"`);const{output:g,exitCode:k}=await e.execute(a,3e4);F.value={success:k===0,output:g},k===0&&(p.value&&(I.value=!0),await L())}catch(a){F.value={success:!1,output:v("projects.messages.initFailed",{err:a.message})}}finally{y.value=!1}}}async function $(){c.value=!0;try{const a=await R.pickDirectory({title:v("projects.folder.pickerTitle")});if(a.unsupported){D.warning(v("projects.messages.browserUnsupported"));return}if(a.canceled)return;p.value=a.path,I.value=a.initialized}catch(a){D.error(v("projects.messages.pickFolderFailed",{err:a.message}))}finally{c.value=!1}}function ee(){p.value=null,I.value=!1}async function te(){h.value=!0,j.value="";try{const{output:a}=await e.execute("doctor",3e4);j.value=a}catch(a){j.value=v("projects.messages.doctorFailed",{err:a.message})}finally{h.value=!1}}A(L);const V={t:v,ws:e,fs:R,statusLoading:P,initLoading:y,doctorLoading:h,folderPickerLoading:c,selectedTemplate:x,doctorOutput:j,initResult:F,configLoaded:z,configItems:w,selectedFolder:p,selectedFolderInitialized:I,statusInfo:u,TEMPLATE_DEFS:n,templates:B,parseStatus:E,parseConfig:N,refreshStatus:L,initProject:Y,pickProjectFolder:$,clearSelectedFolder:ee,runDoctor:te,ref:d,computed:U,reactive:H,onMounted:A,get useI18n(){return K},get ProjectOutlined(){return M},get RocketOutlined(){return T},get MedicineBoxOutlined(){return q},get ReloadOutlined(){return ie},get CheckCircleOutlined(){return G},get FolderOpenOutlined(){return ne},get message(){return D},get useWsStore(){return Q},get useFs(){return Z}};return Object.defineProperty(V,"__isScriptSetup",{enumerable:!1,value:!0}),V}},ce={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},de={class:"page-title"},ue={class:"page-sub"},fe={key:0,style:{"margin-top":"6px",color:"var(--text-muted)","font-size":"11px"}},me={key:0,style:{"margin-top":"6px",color:"var(--text-muted)","font-size":"11px",overflow:"hidden","text-overflow":"ellipsis","white-space":"nowrap"}},pe={key:0,style:{"margin-top":"6px",color:"var(--text-muted)","font-size":"11px"}},ge={style:{"font-family":"monospace",color:"#ccc"}},_e={style:{display:"flex","align-items":"flex-start",gap:"10px"}},ve={style:{flex:"1","min-width":"0"}},ye={style:{"font-weight":"500",color:"#e0e0e0","font-size":"14px","font-family":"monospace","margin-bottom":"4px"}},xe={style:{color:"var(--text-secondary)","font-size":"12px","line-height":"1.5"}},be={key:0,style:{"margin-top":"8px","text-align":"right"}},he={style:{"margin-top":"16px",display:"flex","align-items":"center",gap:"12px","flex-wrap":"wrap"}},ke={key:1,style:{color:"var(--text-secondary)","font-size":"12px"}},je={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"}},we={style:{"font-family":"monospace",color:"var(--text-secondary)",flex:"1",overflow:"hidden","text-overflow":"ellipsis","white-space":"nowrap"}},Ie={style:{margin:"0","font-size":"12px","white-space":"pre-wrap","max-height":"200px","overflow-y":"auto"}},Fe={key:0,style:{"text-align":"center",padding:"30px"}},Ce={style:{color:"var(--text-muted)","margin-top":"8px"}},Oe={key:1},Pe={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"}};function ze(X,O,v,e,R,P){const y=f("a-button"),h=f("a-statistic"),c=f("a-card"),x=f("a-col"),j=f("a-row"),F=f("a-descriptions-item"),z=f("a-descriptions"),w=f("a-tag"),p=f("a-alert"),I=f("a-spin"),u=f("a-empty");return l(),m("div",null,[i("div",ce,[i("div",null,[i("h2",de,r(e.t("projects.title")),1),i("p",ue,r(e.t("projects.subtitle")),1)]),o(y,{type:"primary",ghost:"",loading:e.statusLoading,onClick:e.refreshStatus},{icon:t(()=>[o(e.ReloadOutlined)]),default:t(()=>[b(" "+r(e.t("projects.refresh")),1)]),_:1},8,["loading"])]),s(" Status "),o(j,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:t(()=>[o(x,{xs:24,sm:12,lg:6},{default:t(()=>[o(c,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[o(h,{title:e.t("projects.stats.system"),value:e.statusInfo.running?e.t("projects.stats.running"):e.t("projects.stats.notRunning"),"value-style":{color:e.statusInfo.running?"#52c41a":"#888",fontSize:"16px"}},{prefix:t(()=>[o(e.CheckCircleOutlined)]),_:1},8,["title","value","value-style"]),e.statusInfo.edition?(l(),m("div",fe,r(e.t("projects.stats.editionPrefix",{edition:e.statusInfo.edition})),1)):s("v-if",!0)]),_:1})]),_:1}),o(x,{xs:24,sm:12,lg:6},{default:t(()=>[o(c,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[o(h,{title:e.t("projects.stats.llmProvider"),value:e.statusInfo.llmProvider||e.t("projects.stats.notConfigured"),"value-style":{color:e.statusInfo.llmProvider?"#1677ff":"#888",fontSize:"16px"}},{prefix:t(()=>[o(e.RocketOutlined)]),_:1},8,["title","value","value-style"]),e.statusInfo.llmModel?(l(),m("div",me,r(e.statusInfo.llmModel),1)):s("v-if",!0)]),_:1})]),_:1}),o(x,{xs:24,sm:12,lg:6},{default:t(()=>[o(c,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[o(h,{title:e.t("projects.stats.init"),value:e.statusInfo.setupDone?e.t("projects.stats.done"):e.t("projects.stats.notDone"),"value-style":{color:e.statusInfo.setupDone?"#52c41a":"#faad14",fontSize:"16px"}},{prefix:t(()=>[o(e.CheckCircleOutlined)]),_:1},8,["title","value","value-style"]),e.statusInfo.setupDate?(l(),m("div",pe,r(e.statusInfo.setupDate),1)):s("v-if",!0)]),_:1})]),_:1}),o(x,{xs:24,sm:12,lg:6},{default:t(()=>[o(c,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[o(h,{title:e.t("projects.stats.config"),value:e.configLoaded?e.t("projects.stats.loaded"):e.t("projects.stats.notLoaded"),"value-style":{color:e.configLoaded?"#52c41a":"#888",fontSize:"16px"}},{prefix:t(()=>[o(e.ProjectOutlined)]),_:1},8,["title","value","value-style"])]),_:1})]),_:1})]),_:1}),s(" Project Config Detail "),e.configItems.length?(l(),_(c,{key:0,title:e.t("projects.configCardTitle"),style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"}},{default:t(()=>[o(z,{column:{xs:1,sm:2,lg:3},bordered:"",size:"small"},{default:t(()=>[(l(!0),m(W,null,J(e.configItems,n=>(l(),_(F,{key:n.key,label:n.key},{default:t(()=>[i("span",ge,r(n.value),1)]),_:2},1032,["label"]))),128))]),_:1})]),_:1},8,["title"])):s("v-if",!0),s(" Project Initialization "),o(c,{title:e.t("projects.initCardTitle"),style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"}},{extra:t(()=>[o(w,{color:"blue"},{default:t(()=>[b(r(e.t("projects.templateCount",{count:e.templates.length})),1)]),_:1})]),default:t(()=>[o(j,{gutter:[16,16]},{default:t(()=>[(l(!0),m(W,null,J(e.templates,n=>(l(),_(x,{key:n.name,xs:24,sm:12,lg:8},{default:t(()=>[o(c,{size:"small",hoverable:"",class:oe(["template-card",{"template-selected":e.selectedTemplate===n.name}]),style:{background:"var(--bg-card)","border-color":"var(--border-color)",cursor:"pointer"},onClick:B=>e.selectedTemplate=n.name},{default:t(()=>[i("div",_e,[(l(),_(ae(n.icon),{style:{"font-size":"24px",color:"#1677ff","flex-shrink":"0","margin-top":"2px"}})),i("div",ve,[i("div",ye,r(n.name),1),i("div",xe,r(n.description),1)])]),e.selectedTemplate===n.name?(l(),m("div",be,[o(w,{color:"green"},{default:t(()=>[b(r(e.t("projects.selected")),1)]),_:1})])):s("v-if",!0)]),_:2},1032,["class","onClick"])]),_:2},1024))),128))]),_:1}),i("div",he,[o(y,{type:"primary",loading:e.initLoading,disabled:!e.selectedTemplate||e.selectedFolder&&e.selectedFolderInitialized,onClick:e.initProject},{icon:t(()=>[o(e.RocketOutlined)]),default:t(()=>[b(" "+r(e.selectedFolder?e.t("projects.actions.initInFolder"):e.t("projects.actions.initCwd")),1)]),_:1},8,["loading","disabled"]),o(y,{loading:e.folderPickerLoading,onClick:e.pickProjectFolder},{icon:t(()=>[o(e.FolderOpenOutlined)]),default:t(()=>[b(" "+r(e.t("projects.actions.pickFolder")),1)]),_:1},8,["loading"]),e.selectedFolder?(l(),_(y,{key:0,size:"small",type:"text",onClick:e.clearSelectedFolder},{default:t(()=>[b(r(e.t("projects.actions.clear")),1)]),_:1})):s("v-if",!0),e.selectedTemplate?(l(),m("span",ke,r(e.t("projects.actions.templatePrefix",{name:e.selectedTemplate})),1)):s("v-if",!0)]),e.selectedFolder?(l(),m("div",je,[o(e.FolderOpenOutlined,{style:re({color:e.selectedFolderInitialized?"#52c41a":"#1677ff"})},null,8,["style"]),i("span",we,r(e.selectedFolder),1),e.selectedFolderInitialized?(l(),_(w,{key:0,color:"green"},{default:t(()=>[b(r(e.t("projects.folder.alreadyProject")),1)]),_:1})):(l(),_(w,{key:1,color:"blue"},{default:t(()=>[b(r(e.t("projects.folder.pendingInit")),1)]),_:1}))])):s("v-if",!0),e.selectedFolder&&e.selectedFolderInitialized?(l(),_(p,{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"])):s("v-if",!0),e.initResult?(l(),_(p,{key:2,message:e.initResult.success?e.t("projects.initResult.success"):e.t("projects.initResult.failure"),type:e.initResult.success?"success":"error","show-icon":"",closable:"",style:{"margin-top":"16px"},onClose:O[0]||(O[0]=n=>e.initResult=null)},{description:t(()=>[i("pre",Ie,r(e.initResult.output),1)]),_:1},8,["message","type"])):s("v-if",!0)]),_:1},8,["title"]),s(" Doctor "),o(c,{title:e.t("projects.doctor.cardTitle"),style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{extra:t(()=>[o(y,{loading:e.doctorLoading,onClick:e.runDoctor,style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:t(()=>[o(e.MedicineBoxOutlined)]),default:t(()=>[b(" "+r(e.t("projects.doctor.runButton")),1)]),_:1},8,["loading"])]),default:t(()=>[e.doctorLoading?(l(),m("div",Fe,[o(I),i("div",Ce,r(e.t("projects.doctor.runningHint")),1)])):e.doctorOutput?(l(),m("div",Oe,[i("pre",Pe,r(e.doctorOutput),1)])):(l(),_(u,{key:2,description:e.t("projects.doctor.emptyHint")},null,8,["description"]))]),_:1},8,["title"])])}const Te=le(se,[["render",ze],["__scopeId","data-v-4941e84f"],["__file","/tmp/cc-web-panel-wxwyEA/repo/packages/web-panel/src/views/ProjectInit.vue"]]);export{Te as default};
1
+ import{I as f,J as m,U as i,R as r,c as o,K as t,V as s,S as _,o as H,a as Q,b as U,r as d,P as l,Q as b,F as W,Z as A,_ as oe,a0 as ae,$ as re}from"./vendor-BvqAck49.js";import{_ as le,b as J,u as K,d as D}from"./index-C1lWhMQw.js";import{u as Z}from"./useFs-QUoeadth.js";import{O as M,ar as q,aa as T,f as G,an as ne,R as ie}from"./icons-DP3uiYxy.js";import"./useShellMode-CgR0wCYM.js";const se={__name:"ProjectInit",setup(X,{expose:O}){O();const{t:v}=J(),e=K(),R=Z(),P=d(!1),y=d(!1),h=d(!1),c=d(!1),x=d(""),j=d(""),F=d(null),z=d(!1),w=d([]),p=d(null),I=d(!1),u=Q({running:!1,edition:"",llmProvider:"",llmModel:"",setupDone:!1,setupDate:""}),n=[{name:"code-project",icon:M},{name:"medical-triage",icon:q},{name:"agriculture-expert",icon:T},{name:"general-assistant",icon:G},{name:"ai-media-creator",icon:T},{name:"ai-doc-creator",icon:M}],B=U(()=>n.map(a=>({...a,description:v(`projects.templates.${a.name}`)})));function E(a){u.running=a.includes("Desktop app running")||a.includes("Running");const g=a.match(/Edition:\s+(\S+)/i);g&&(u.edition=g[1]);const k=a.match(/LLM:\s+(\S+)\s+\(([^)]+)\)/i);if(k)u.llmProvider=k[1],u.llmModel=k[2];else{const C=a.match(/LLM:\s+(\S+)/i);C&&(u.llmProvider=C[1])}u.setupDone=a.includes("Setup completed");const S=a.match(/Setup completed \(([^)]+)\)/i);if(S)try{u.setupDate=new Date(S[1]).toLocaleDateString("zh-CN")}catch{u.setupDate=""}}function N(a){const g=[],k=a.split(`
2
+ `);for(const S of k){const C=S.match(/^\s*(\S+)\s*[=:]\s*(.+)$/);C&&g.push({key:C[1].trim(),value:C[2].trim()})}w.value=g,z.value=g.length>0}async function L(){P.value=!0;try{const[a,g]=await Promise.all([e.execute("status",15e3),e.execute("config list",15e3)]);E(a.output),N(g.output)}catch(a){console.error("refresh failed:",a)}finally{P.value=!1}}async function Y(){if(x.value){if(p.value&&I.value){D.info(v("projects.messages.alreadyProjectInfo"));return}y.value=!0,F.value=null;try{let a=`init --template ${x.value} --yes`;p.value&&(a+=` --cwd "${p.value}"`);const{output:g,exitCode:k}=await e.execute(a,3e4);F.value={success:k===0,output:g},k===0&&(p.value&&(I.value=!0),await L())}catch(a){F.value={success:!1,output:v("projects.messages.initFailed",{err:a.message})}}finally{y.value=!1}}}async function $(){c.value=!0;try{const a=await R.pickDirectory({title:v("projects.folder.pickerTitle")});if(a.unsupported){D.warning(v("projects.messages.browserUnsupported"));return}if(a.canceled)return;p.value=a.path,I.value=a.initialized}catch(a){D.error(v("projects.messages.pickFolderFailed",{err:a.message}))}finally{c.value=!1}}function ee(){p.value=null,I.value=!1}async function te(){h.value=!0,j.value="";try{const{output:a}=await e.execute("doctor",3e4);j.value=a}catch(a){j.value=v("projects.messages.doctorFailed",{err:a.message})}finally{h.value=!1}}H(L);const V={t:v,ws:e,fs:R,statusLoading:P,initLoading:y,doctorLoading:h,folderPickerLoading:c,selectedTemplate:x,doctorOutput:j,initResult:F,configLoaded:z,configItems:w,selectedFolder:p,selectedFolderInitialized:I,statusInfo:u,TEMPLATE_DEFS:n,templates:B,parseStatus:E,parseConfig:N,refreshStatus:L,initProject:Y,pickProjectFolder:$,clearSelectedFolder:ee,runDoctor:te,ref:d,computed:U,reactive:Q,onMounted:H,get useI18n(){return J},get ProjectOutlined(){return M},get RocketOutlined(){return T},get MedicineBoxOutlined(){return q},get ReloadOutlined(){return ie},get CheckCircleOutlined(){return G},get FolderOpenOutlined(){return ne},get message(){return D},get useWsStore(){return K},get useFs(){return Z}};return Object.defineProperty(V,"__isScriptSetup",{enumerable:!1,value:!0}),V}},ce={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},de={class:"page-title"},ue={class:"page-sub"},fe={key:0,style:{"margin-top":"6px",color:"var(--text-muted)","font-size":"11px"}},me={key:0,style:{"margin-top":"6px",color:"var(--text-muted)","font-size":"11px",overflow:"hidden","text-overflow":"ellipsis","white-space":"nowrap"}},pe={key:0,style:{"margin-top":"6px",color:"var(--text-muted)","font-size":"11px"}},ge={style:{"font-family":"monospace",color:"#ccc"}},_e={style:{display:"flex","align-items":"flex-start",gap:"10px"}},ve={style:{flex:"1","min-width":"0"}},ye={style:{"font-weight":"500",color:"#e0e0e0","font-size":"14px","font-family":"monospace","margin-bottom":"4px"}},xe={style:{color:"var(--text-secondary)","font-size":"12px","line-height":"1.5"}},be={key:0,style:{"margin-top":"8px","text-align":"right"}},he={style:{"margin-top":"16px",display:"flex","align-items":"center",gap:"12px","flex-wrap":"wrap"}},ke={key:1,style:{color:"var(--text-secondary)","font-size":"12px"}},je={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"}},we={style:{"font-family":"monospace",color:"var(--text-secondary)",flex:"1",overflow:"hidden","text-overflow":"ellipsis","white-space":"nowrap"}},Ie={style:{margin:"0","font-size":"12px","white-space":"pre-wrap","max-height":"200px","overflow-y":"auto"}},Fe={key:0,style:{"text-align":"center",padding:"30px"}},Ce={style:{color:"var(--text-muted)","margin-top":"8px"}},Oe={key:1},Pe={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"}};function ze(X,O,v,e,R,P){const y=f("a-button"),h=f("a-statistic"),c=f("a-card"),x=f("a-col"),j=f("a-row"),F=f("a-descriptions-item"),z=f("a-descriptions"),w=f("a-tag"),p=f("a-alert"),I=f("a-spin"),u=f("a-empty");return l(),m("div",null,[i("div",ce,[i("div",null,[i("h2",de,r(e.t("projects.title")),1),i("p",ue,r(e.t("projects.subtitle")),1)]),o(y,{type:"primary",ghost:"",loading:e.statusLoading,onClick:e.refreshStatus},{icon:t(()=>[o(e.ReloadOutlined)]),default:t(()=>[b(" "+r(e.t("projects.refresh")),1)]),_:1},8,["loading"])]),s(" Status "),o(j,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:t(()=>[o(x,{xs:24,sm:12,lg:6},{default:t(()=>[o(c,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[o(h,{title:e.t("projects.stats.system"),value:e.statusInfo.running?e.t("projects.stats.running"):e.t("projects.stats.notRunning"),"value-style":{color:e.statusInfo.running?"#52c41a":"#888",fontSize:"16px"}},{prefix:t(()=>[o(e.CheckCircleOutlined)]),_:1},8,["title","value","value-style"]),e.statusInfo.edition?(l(),m("div",fe,r(e.t("projects.stats.editionPrefix",{edition:e.statusInfo.edition})),1)):s("v-if",!0)]),_:1})]),_:1}),o(x,{xs:24,sm:12,lg:6},{default:t(()=>[o(c,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[o(h,{title:e.t("projects.stats.llmProvider"),value:e.statusInfo.llmProvider||e.t("projects.stats.notConfigured"),"value-style":{color:e.statusInfo.llmProvider?"#1677ff":"#888",fontSize:"16px"}},{prefix:t(()=>[o(e.RocketOutlined)]),_:1},8,["title","value","value-style"]),e.statusInfo.llmModel?(l(),m("div",me,r(e.statusInfo.llmModel),1)):s("v-if",!0)]),_:1})]),_:1}),o(x,{xs:24,sm:12,lg:6},{default:t(()=>[o(c,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[o(h,{title:e.t("projects.stats.init"),value:e.statusInfo.setupDone?e.t("projects.stats.done"):e.t("projects.stats.notDone"),"value-style":{color:e.statusInfo.setupDone?"#52c41a":"#faad14",fontSize:"16px"}},{prefix:t(()=>[o(e.CheckCircleOutlined)]),_:1},8,["title","value","value-style"]),e.statusInfo.setupDate?(l(),m("div",pe,r(e.statusInfo.setupDate),1)):s("v-if",!0)]),_:1})]),_:1}),o(x,{xs:24,sm:12,lg:6},{default:t(()=>[o(c,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[o(h,{title:e.t("projects.stats.config"),value:e.configLoaded?e.t("projects.stats.loaded"):e.t("projects.stats.notLoaded"),"value-style":{color:e.configLoaded?"#52c41a":"#888",fontSize:"16px"}},{prefix:t(()=>[o(e.ProjectOutlined)]),_:1},8,["title","value","value-style"])]),_:1})]),_:1})]),_:1}),s(" Project Config Detail "),e.configItems.length?(l(),_(c,{key:0,title:e.t("projects.configCardTitle"),style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"}},{default:t(()=>[o(z,{column:{xs:1,sm:2,lg:3},bordered:"",size:"small"},{default:t(()=>[(l(!0),m(W,null,A(e.configItems,n=>(l(),_(F,{key:n.key,label:n.key},{default:t(()=>[i("span",ge,r(n.value),1)]),_:2},1032,["label"]))),128))]),_:1})]),_:1},8,["title"])):s("v-if",!0),s(" Project Initialization "),o(c,{title:e.t("projects.initCardTitle"),style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"}},{extra:t(()=>[o(w,{color:"blue"},{default:t(()=>[b(r(e.t("projects.templateCount",{count:e.templates.length})),1)]),_:1})]),default:t(()=>[o(j,{gutter:[16,16]},{default:t(()=>[(l(!0),m(W,null,A(e.templates,n=>(l(),_(x,{key:n.name,xs:24,sm:12,lg:8},{default:t(()=>[o(c,{size:"small",hoverable:"",class:oe(["template-card",{"template-selected":e.selectedTemplate===n.name}]),style:{background:"var(--bg-card)","border-color":"var(--border-color)",cursor:"pointer"},onClick:B=>e.selectedTemplate=n.name},{default:t(()=>[i("div",_e,[(l(),_(ae(n.icon),{style:{"font-size":"24px",color:"#1677ff","flex-shrink":"0","margin-top":"2px"}})),i("div",ve,[i("div",ye,r(n.name),1),i("div",xe,r(n.description),1)])]),e.selectedTemplate===n.name?(l(),m("div",be,[o(w,{color:"green"},{default:t(()=>[b(r(e.t("projects.selected")),1)]),_:1})])):s("v-if",!0)]),_:2},1032,["class","onClick"])]),_:2},1024))),128))]),_:1}),i("div",he,[o(y,{type:"primary",loading:e.initLoading,disabled:!e.selectedTemplate||e.selectedFolder&&e.selectedFolderInitialized,onClick:e.initProject},{icon:t(()=>[o(e.RocketOutlined)]),default:t(()=>[b(" "+r(e.selectedFolder?e.t("projects.actions.initInFolder"):e.t("projects.actions.initCwd")),1)]),_:1},8,["loading","disabled"]),o(y,{loading:e.folderPickerLoading,onClick:e.pickProjectFolder},{icon:t(()=>[o(e.FolderOpenOutlined)]),default:t(()=>[b(" "+r(e.t("projects.actions.pickFolder")),1)]),_:1},8,["loading"]),e.selectedFolder?(l(),_(y,{key:0,size:"small",type:"text",onClick:e.clearSelectedFolder},{default:t(()=>[b(r(e.t("projects.actions.clear")),1)]),_:1})):s("v-if",!0),e.selectedTemplate?(l(),m("span",ke,r(e.t("projects.actions.templatePrefix",{name:e.selectedTemplate})),1)):s("v-if",!0)]),e.selectedFolder?(l(),m("div",je,[o(e.FolderOpenOutlined,{style:re({color:e.selectedFolderInitialized?"#52c41a":"#1677ff"})},null,8,["style"]),i("span",we,r(e.selectedFolder),1),e.selectedFolderInitialized?(l(),_(w,{key:0,color:"green"},{default:t(()=>[b(r(e.t("projects.folder.alreadyProject")),1)]),_:1})):(l(),_(w,{key:1,color:"blue"},{default:t(()=>[b(r(e.t("projects.folder.pendingInit")),1)]),_:1}))])):s("v-if",!0),e.selectedFolder&&e.selectedFolderInitialized?(l(),_(p,{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"])):s("v-if",!0),e.initResult?(l(),_(p,{key:2,message:e.initResult.success?e.t("projects.initResult.success"):e.t("projects.initResult.failure"),type:e.initResult.success?"success":"error","show-icon":"",closable:"",style:{"margin-top":"16px"},onClose:O[0]||(O[0]=n=>e.initResult=null)},{description:t(()=>[i("pre",Ie,r(e.initResult.output),1)]),_:1},8,["message","type"])):s("v-if",!0)]),_:1},8,["title"]),s(" Doctor "),o(c,{title:e.t("projects.doctor.cardTitle"),style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{extra:t(()=>[o(y,{loading:e.doctorLoading,onClick:e.runDoctor,style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:t(()=>[o(e.MedicineBoxOutlined)]),default:t(()=>[b(" "+r(e.t("projects.doctor.runButton")),1)]),_:1},8,["loading"])]),default:t(()=>[e.doctorLoading?(l(),m("div",Fe,[o(I),i("div",Ce,r(e.t("projects.doctor.runningHint")),1)])):e.doctorOutput?(l(),m("div",Oe,[i("pre",Pe,r(e.doctorOutput),1)])):(l(),_(u,{key:2,description:e.t("projects.doctor.emptyHint")},null,8,["description"]))]),_:1},8,["title"])])}const Te=le(se,[["render",ze],["__scopeId","data-v-4941e84f"],["__file","/tmp/cc-web-panel-ehQgdt/repo/packages/web-panel/src/views/ProjectInit.vue"]]);export{Te as default};
@@ -1,2 +1,2 @@
1
- import{I as u,J as z,U as y,c as n,K as s,a as I,r as P,o as M,b as h,P as B,Q as j,S as V,V as F}from"./vendor-BvqAck49.js";import{t as J,_ as L,u as N,d as _}from"./index-DDBuc-Id.js";import{a7 as W,R as K}from"./icons-DP3uiYxy.js";const c=Object.freeze({rootPath:"",maxSizeMB:1e3,autoSync:!1,syncIntervalSeconds:300});function U(o){if(typeof o=="boolean")return o;const e=String(o).trim().toLowerCase();return e==="true"||e==="1"||e==="yes"||e==="on"}function C(o,e){if(typeof o=="number"&&Number.isFinite(o))return o;const a=parseFloat(o);return Number.isFinite(a)?a:e}function E(o){const e={...c};if(!o)return e;const a=o.trim();if(!a||/key not found/i.test(a))return e;const t=J(a);if(t&&typeof t=="object"&&!Array.isArray(t))return t.rootPath!==void 0&&(e.rootPath=String(t.rootPath||"")),t.maxSizeMB!==void 0&&(e.maxSizeMB=C(t.maxSizeMB,c.maxSizeMB)),t.autoSync!==void 0&&(e.autoSync=U(t.autoSync)),t.syncIntervalSeconds!==void 0&&(e.syncIntervalSeconds=C(t.syncIntervalSeconds,c.syncIntervalSeconds)),e;const v=a.split(`
2
- `);for(const d of v){const p=d.trim().match(/^(?:project\.)?(rootPath|maxSizeMB|autoSync|syncIntervalSeconds)\s*[=:]\s*(.+)$/i);if(!p)continue;const f=p[1],i=p[2].trim();f==="rootPath"?e.rootPath=i:f==="maxSizeMB"?e.maxSizeMB=C(i,c.maxSizeMB):f==="autoSync"?e.autoSync=U(i):f==="syncIntervalSeconds"&&(e.syncIntervalSeconds=C(i,c.syncIntervalSeconds))}return e}function O(o,e){const a={};for(const t of Object.keys(c))o[t]!==e[t]&&(a[t]=e[t]);return a}const Q={__name:"ProjectSettings",setup(o,{expose:e}){e();const a=N(),t=P(!1),v=P(!1),d=I({...c}),r=P({...c}),p=h(()=>Object.keys(O(r.value,d)).length>0);async function f(){t.value=!0;try{const{output:m}=await a.execute("config get project",1e4),g=E(m);Object.assign(d,g),r.value={...g}}catch(m){/key not found/i.test(m.message)?(Object.assign(d,c),r.value={...c}):_.error("加载配置失败: "+m.message)}finally{t.value=!1}}function i(){Object.assign(d,r.value)}async function x(){const m=O(r.value,d),g=Object.keys(m);if(g.length===0){_.info("没有需要保存的修改");return}v.value=!0;let b=0,S=0;for(const l of g){const R=m[l],A=String(R).replace(/"/g,'\\"'),D=`config set project.${l} "${A}"`;try{const{output:w,exitCode:T}=await a.execute(D,1e4);T!==0||/error|failed|失败/i.test(w)?(S++,_.error(`保存 ${l} 失败: ${w.slice(0,80)}`)):b++}catch(w){S++,_.error(`保存 ${l} 失败: ${w.message}`)}}v.value=!1,S===0?(_.success(`保存成功(${b} 项)`),r.value={...d}):b>0&&(_.warning(`部分保存成功:${b} 成功 / ${S} 失败`),await f())}M(()=>{f()});const k={ws:a,loading:t,saving:v,form:d,baseline:r,isDirty:p,loadConfig:f,resetForm:i,saveConfig:x,reactive:I,ref:P,computed:h,onMounted:M,get ReloadOutlined(){return K},get FolderOutlined(){return W},get message(){return _},get useWsStore(){return N},get parseProjectConfig(){return E},get diffProjectConfig(){return O},get PROJECT_DEFAULTS(){return c}};return Object.defineProperty(k,"__isScriptSetup",{enumerable:!1,value:!0}),k}},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"}};function X(o,e,a,t,v,d){const r=u("a-button"),p=u("a-alert"),f=u("a-input"),i=u("a-form-item"),x=u("a-input-number"),k=u("a-switch"),m=u("a-space"),g=u("a-form"),b=u("a-spin"),S=u("a-card");return B(),z("div",null,[y("div",q,[e[5]||(e[5]=y("div",null,[y("h2",{class:"page-title"},"项目存储配置"),y("p",{class:"page-sub"},"根目录 / 配额 / 自动同步")],-1)),n(r,{loading:t.loading,onClick:t.loadConfig},{icon:s(()=>[n(t.ReloadOutlined)]),default:s(()=>[e[4]||(e[4]=j(" 刷新 ",-1))]),_:1},8,["loading"])]),n(p,{message:"仅 Web 模式",description:"目录选择器(原生文件对话框)仅在桌面端可用,本页面需手动输入路径。修改根目录后需重启桌面应用生效;web 端只影响后端配置文件。",type:"info","show-icon":"",closable:"",style:{"margin-bottom":"16px"}}),n(S,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{title:s(()=>[y("span",G,[n(t.FolderOutlined,{style:{"margin-right":"8px"}}),e[6]||(e[6]=j("项目存储 ",-1))])]),default:s(()=>[n(b,{spinning:t.loading},{default:s(()=>[n(g,{"label-col":{span:6},"wrapper-col":{span:18},style:{"max-width":"720px"}},{default:s(()=>[n(i,{label:"项目根目录"},{extra:s(()=>[...e[7]||(e[7]=[y("span",{style:{color:"var(--text-muted)","font-size":"11px"}}," 需绝对路径;修改后重启桌面应用生效 ",-1)])]),default:s(()=>[n(f,{value:t.form.rootPath,"onUpdate:value":e[0]||(e[0]=l=>t.form.rootPath=l),placeholder:"项目文件存储的根目录绝对路径",disabled:t.saving},null,8,["value","disabled"])]),_:1}),n(i,{label:"最大项目大小"},{default:s(()=>[n(x,{value:t.form.maxSizeMB,"onUpdate:value":e[1]||(e[1]=l=>t.form.maxSizeMB=l),min:100,max:1e4,step:100,"addon-after":"MB",style:{width:"220px"},disabled:t.saving},null,8,["value","disabled"])]),_:1}),n(i,{label:"自动同步"},{default:s(()=>[n(k,{checked:t.form.autoSync,"onUpdate:checked":e[2]||(e[2]=l=>t.form.autoSync=l),disabled:t.saving},null,8,["checked","disabled"]),e[8]||(e[8]=y("span",{style:{"margin-left":"12px",color:"var(--text-secondary)","font-size":"12px"}}," 自动同步项目到后端服务器 ",-1))]),_:1}),t.form.autoSync?(B(),V(i,{key:0,label:"同步间隔"},{default:s(()=>[n(x,{value:t.form.syncIntervalSeconds,"onUpdate:value":e[3]||(e[3]=l=>t.form.syncIntervalSeconds=l),min:60,max:3600,step:60,"addon-after":"秒",style:{width:"220px"},disabled:t.saving},null,8,["value","disabled"])]),_:1})):F("v-if",!0),n(i,{"wrapper-col":{offset:6,span:18}},{default:s(()=>[n(m,null,{default:s(()=>[n(r,{onClick:t.resetForm,disabled:t.saving||t.loading},{default:s(()=>[...e[9]||(e[9]=[j(" 重置 ",-1)])]),_:1},8,["disabled"]),n(r,{type:"primary",loading:t.saving,disabled:!t.isDirty,onClick:t.saveConfig},{default:s(()=>[...e[10]||(e[10]=[j(" 保存配置 ",-1)])]),_:1},8,["loading","disabled"]),t.isDirty?(B(),z("span",H," 有未保存的修改 ")):F("v-if",!0)]),_:1})]),_:1})]),_:1})]),_:1},8,["spinning"])]),_:1})])}const ee=L(Q,[["render",X],["__scopeId","data-v-f4cc2f66"],["__file","/tmp/cc-web-panel-wxwyEA/repo/packages/web-panel/src/views/ProjectSettings.vue"]]);export{ee as default};
1
+ import{I as u,J as z,U as y,c as n,K as s,a as I,r as j,o as M,b as h,P as B,Q as w,S as A,V as F}from"./vendor-BvqAck49.js";import{t as J,_ as L,u as N,d as _}from"./index-C1lWhMQw.js";import{a7 as W,R as Q}from"./icons-DP3uiYxy.js";const c=Object.freeze({rootPath:"",maxSizeMB:1e3,autoSync:!1,syncIntervalSeconds:300});function U(o){if(typeof o=="boolean")return o;const e=String(o).trim().toLowerCase();return e==="true"||e==="1"||e==="yes"||e==="on"}function C(o,e){if(typeof o=="number"&&Number.isFinite(o))return o;const a=parseFloat(o);return Number.isFinite(a)?a:e}function R(o){const e={...c};if(!o)return e;const a=o.trim();if(!a||/key not found/i.test(a))return e;const t=J(a);if(t&&typeof t=="object"&&!Array.isArray(t))return t.rootPath!==void 0&&(e.rootPath=String(t.rootPath||"")),t.maxSizeMB!==void 0&&(e.maxSizeMB=C(t.maxSizeMB,c.maxSizeMB)),t.autoSync!==void 0&&(e.autoSync=U(t.autoSync)),t.syncIntervalSeconds!==void 0&&(e.syncIntervalSeconds=C(t.syncIntervalSeconds,c.syncIntervalSeconds)),e;const v=a.split(`
2
+ `);for(const d of v){const p=d.trim().match(/^(?:project\.)?(rootPath|maxSizeMB|autoSync|syncIntervalSeconds)\s*[=:]\s*(.+)$/i);if(!p)continue;const f=p[1],i=p[2].trim();f==="rootPath"?e.rootPath=i:f==="maxSizeMB"?e.maxSizeMB=C(i,c.maxSizeMB):f==="autoSync"?e.autoSync=U(i):f==="syncIntervalSeconds"&&(e.syncIntervalSeconds=C(i,c.syncIntervalSeconds))}return e}function O(o,e){const a={};for(const t of Object.keys(c))o[t]!==e[t]&&(a[t]=e[t]);return a}const K={__name:"ProjectSettings",setup(o,{expose:e}){e();const a=N(),t=j(!1),v=j(!1),d=I({...c}),r=j({...c}),p=h(()=>Object.keys(O(r.value,d)).length>0);async function f(){t.value=!0;try{const{output:m}=await a.execute("config get project",1e4),g=R(m);Object.assign(d,g),r.value={...g}}catch(m){/key not found/i.test(m.message)?(Object.assign(d,c),r.value={...c}):_.error("加载配置失败: "+m.message)}finally{t.value=!1}}function i(){Object.assign(d,r.value)}async function x(){const m=O(r.value,d),g=Object.keys(m);if(g.length===0){_.info("没有需要保存的修改");return}v.value=!0;let b=0,S=0;for(const l of g){const D=m[l],E=String(D).replace(/"/g,'\\"'),T=`config set project.${l} "${E}"`;try{const{output:P,exitCode:V}=await a.execute(T,1e4);V!==0||/error|failed|失败/i.test(P)?(S++,_.error(`保存 ${l} 失败: ${P.slice(0,80)}`)):b++}catch(P){S++,_.error(`保存 ${l} 失败: ${P.message}`)}}v.value=!1,S===0?(_.success(`保存成功(${b} 项)`),r.value={...d}):b>0&&(_.warning(`部分保存成功:${b} 成功 / ${S} 失败`),await f())}M(()=>{f()});const k={ws:a,loading:t,saving:v,form:d,baseline:r,isDirty:p,loadConfig:f,resetForm:i,saveConfig:x,reactive:I,ref:j,computed:h,onMounted:M,get ReloadOutlined(){return Q},get FolderOutlined(){return W},get message(){return _},get useWsStore(){return N},get parseProjectConfig(){return R},get diffProjectConfig(){return O},get PROJECT_DEFAULTS(){return c}};return Object.defineProperty(k,"__isScriptSetup",{enumerable:!1,value:!0}),k}},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"}};function X(o,e,a,t,v,d){const r=u("a-button"),p=u("a-alert"),f=u("a-input"),i=u("a-form-item"),x=u("a-input-number"),k=u("a-switch"),m=u("a-space"),g=u("a-form"),b=u("a-spin"),S=u("a-card");return B(),z("div",null,[y("div",q,[e[5]||(e[5]=y("div",null,[y("h2",{class:"page-title"},"项目存储配置"),y("p",{class:"page-sub"},"根目录 / 配额 / 自动同步")],-1)),n(r,{loading:t.loading,onClick:t.loadConfig},{icon:s(()=>[n(t.ReloadOutlined)]),default:s(()=>[e[4]||(e[4]=w(" 刷新 ",-1))]),_:1},8,["loading"])]),n(p,{message:"仅 Web 模式",description:"目录选择器(原生文件对话框)仅在桌面端可用,本页面需手动输入路径。修改根目录后需重启桌面应用生效;web 端只影响后端配置文件。",type:"info","show-icon":"",closable:"",style:{"margin-bottom":"16px"}}),n(S,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{title:s(()=>[y("span",G,[n(t.FolderOutlined,{style:{"margin-right":"8px"}}),e[6]||(e[6]=w("项目存储 ",-1))])]),default:s(()=>[n(b,{spinning:t.loading},{default:s(()=>[n(g,{"label-col":{span:6},"wrapper-col":{span:18},style:{"max-width":"720px"}},{default:s(()=>[n(i,{label:"项目根目录"},{extra:s(()=>[...e[7]||(e[7]=[y("span",{style:{color:"var(--text-muted)","font-size":"11px"}}," 需绝对路径;修改后重启桌面应用生效 ",-1)])]),default:s(()=>[n(f,{value:t.form.rootPath,"onUpdate:value":e[0]||(e[0]=l=>t.form.rootPath=l),placeholder:"项目文件存储的根目录绝对路径",disabled:t.saving},null,8,["value","disabled"])]),_:1}),n(i,{label:"最大项目大小"},{default:s(()=>[n(x,{value:t.form.maxSizeMB,"onUpdate:value":e[1]||(e[1]=l=>t.form.maxSizeMB=l),min:100,max:1e4,step:100,"addon-after":"MB",style:{width:"220px"},disabled:t.saving},null,8,["value","disabled"])]),_:1}),n(i,{label:"自动同步"},{default:s(()=>[n(k,{checked:t.form.autoSync,"onUpdate:checked":e[2]||(e[2]=l=>t.form.autoSync=l),disabled:t.saving},null,8,["checked","disabled"]),e[8]||(e[8]=y("span",{style:{"margin-left":"12px",color:"var(--text-secondary)","font-size":"12px"}}," 自动同步项目到后端服务器 ",-1))]),_:1}),t.form.autoSync?(B(),A(i,{key:0,label:"同步间隔"},{default:s(()=>[n(x,{value:t.form.syncIntervalSeconds,"onUpdate:value":e[3]||(e[3]=l=>t.form.syncIntervalSeconds=l),min:60,max:3600,step:60,"addon-after":"秒",style:{width:"220px"},disabled:t.saving},null,8,["value","disabled"])]),_:1})):F("v-if",!0),n(i,{"wrapper-col":{offset:6,span:18}},{default:s(()=>[n(m,null,{default:s(()=>[n(r,{onClick:t.resetForm,disabled:t.saving||t.loading},{default:s(()=>[...e[9]||(e[9]=[w(" 重置 ",-1)])]),_:1},8,["disabled"]),n(r,{type:"primary",loading:t.saving,disabled:!t.isDirty,onClick:t.saveConfig},{default:s(()=>[...e[10]||(e[10]=[w(" 保存配置 ",-1)])]),_:1},8,["loading","disabled"]),t.isDirty?(B(),z("span",H," 有未保存的修改 ")):F("v-if",!0)]),_:1})]),_:1})]),_:1})]),_:1},8,["spinning"])]),_:1})])}const ee=L(K,[["render",X],["__scopeId","data-v-f4cc2f66"],["__file","/tmp/cc-web-panel-ehQgdt/repo/packages/web-panel/src/views/ProjectSettings.vue"]]);export{ee as default};
@@ -0,0 +1 @@
1
+ import{I as i,J as A,U as I,R as s,Q as r,c as t,K as a,V as _,S as x,o as oe,b as ee,r as u,P as p,F as ne,a2 as ge}from"./vendor-BvqAck49.js";import{_ as we,b as re,u as ie,d}from"./index-C1lWhMQw.js";import{u as de}from"./useShellMode-CgR0wCYM.js";import{aM as ke,aN as Fe,aO as be,f as je,a4 as Ce,a7 as xe,as as Oe,R as Se}from"./icons-DP3uiYxy.js";const Pe={__name:"Projects",setup(se,{expose:l}){l();const{t:te}=re(),e=ie(),{isEmbedded:W}=de();async function w(o,f,ye,ae=8e3){if(W){const Z=await e.sendRaw({...f,type:o},ae);if(!Z?.ok){const $=Z?.error;throw new Error(typeof $=="string"?$:$?.message||`${o} failed`)}return Z.result}return e.executeJson(ye,ae)}const B=u(!1),y=u([]),O=u(""),S=u(""),P=u(!1),v=u(null),U=u([]),k=u(!1),E=u(!1),L=u(!1),F=u({name:"",description:"",type:"document",rootPath:""}),z=[{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"}],M=ee(()=>{const o={active:0,draft:0,completed:0,archived:0};for(const f of y.value)o[f.status]!==void 0&&(o[f.status]+=1);return o}),J=ee(()=>y.value.filter(o=>!(O.value&&o.status!==O.value||S.value&&!o.name.toLowerCase().includes(S.value.toLowerCase()))));function g(o){switch(o){case"active":return"green";case"draft":return"default";case"completed":return"cyan";case"archived":return"gold";default:return"default"}}function Q(o){switch(o){case"synced":return"green";case"pending":return"orange";case"conflict":return"red";case"error":return"red";default:return"default"}}function K(o){return!o&&o!==0?"-":new Date(typeof o=="number"?o:parseInt(o,10)).toLocaleString("zh-CN",{hour12:!1})}async function C(){B.value=!0;try{const o=await w("project.list",{limit:500},"project list --limit 500 --json",1e4);y.value=Array.isArray(o?.projects)?o.projects:Array.isArray(o)?o:[]}catch(o){d.error("加载失败: "+(o.message||o)),y.value=[]}finally{B.value=!1}}function G(o){return{onClick:()=>V(o)}}async function V(o){v.value=o,P.value=!0,k.value=!0,U.value=[];try{const f=await w("project.listFiles",{projectId:o.id,limit:200},`project list-files ${o.id} --json`,8e3);U.value=Array.isArray(f?.files)?f.files:[]}catch{U.value=[]}finally{k.value=!1}}async function H(o){try{(await w("project.delete",{id:o.id},`project delete ${o.id} --json`,8e3))?.ok?(d.success(`已删除项目 '${o.name}'`),P.value=!1,await C()):d.error("删除失败")}catch(f){d.error(f.message||String(f))}}function X(){F.value={name:"",description:"",type:"document",rootPath:""},E.value=!0}async function T(){if(!F.value.name.trim()){d.warning("请输入项目名称");return}L.value=!0;try{const o=await w("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);o?.id?(d.success(`已创建项目 '${o.name}'`),E.value=!1,await C()):d.error("创建失败")}catch(o){d.error(o.message||String(o))}finally{L.value=!1}}const b=u(!1),D=u(!1),j=u({path:"",content:""}),h=u(!1),m=u(!1),R=u({path:""}),n=u(!1),c=u(null),q=u(""),Y=u(!1);function ue(){j.value={path:"",content:""},b.value=!0}function ce(){R.value={path:""},h.value=!0}async function N(){if(v.value){k.value=!0;try{const o=await w("project.listFiles",{projectId:v.value.id,limit:200},`project list-files ${v.value.id} --json`,8e3);U.value=Array.isArray(o?.files)?o.files:[]}catch(o){d.error("刷新文件失败: "+(o.message||o))}finally{k.value=!1}}}async function fe(){if(!j.value.path.trim()){d.warning("请输入文件路径");return}if(v.value){D.value=!0;try{const o=await w("project.createFile",{projectId:v.value.id,filePath:j.value.path.trim(),content:j.value.content||""},`project create-file ${v.value.id} "${j.value.path.trim()}" --json`,8e3);o?.id?(d.success(`已创建文件 '${o.file_name}'`),b.value=!1,await N(),await C()):d.error("创建文件失败")}catch(o){d.error(o.message||String(o))}finally{D.value=!1}}}async function pe(){if(!R.value.path.trim()){d.warning("请输入文件夹路径");return}if(v.value){m.value=!0;try{const o=await w("project.createFolder",{projectId:v.value.id,folderPath:R.value.path.trim()},`project create-folder ${v.value.id} "${R.value.path.trim()}" --json`,8e3);o?.id?(d.success(`已创建文件夹 '${o.file_name}'`),h.value=!1,await N(),await C()):d.error("创建文件夹失败")}catch(o){d.error(o.message||String(o))}finally{m.value=!1}}}async function ve(o){try{(await w("project.deleteFile",{fileId:o.id},`project delete-file ${o.id} --json`,8e3))?.deleted?(d.success(`已删除 '${o.file_name}'`),await N(),await C()):d.error("删除失败")}catch(f){d.error(f.message||String(f))}}async function me(o){if(o.is_folder){d.info("文件夹无内容可编辑");return}try{const f=await w("project.getFile",{fileId:o.id},`project get-file ${o.id} --json`,8e3);c.value=o,q.value=f?.content||"",n.value=!0}catch(f){d.error("读取文件失败: "+(f.message||f))}}async function _e(){if(c.value){Y.value=!0;try{(await w("project.writeFile",{fileId:c.value.id,content:q.value},`project write-file ${c.value.id} --json`,8e3))?.id?(d.success("已保存"),n.value=!1,await N()):d.error("保存失败")}catch(o){d.error(o.message||String(o))}finally{Y.value=!1}}}oe(()=>{C()});const le={t:te,ws:e,isEmbedded:W,callProjectTopic:w,loading:B,projects:y,statusFilter:O,nameFilter:S,detailOpen:P,detail:v,files:U,filesLoading:k,createOpen:E,creating:L,newProject:F,columns:z,countByStatus:M,filteredProjects:J,statusColor:g,syncColor:Q,formatTime:K,loadAll:C,onRowClick:G,openDetail:V,onDelete:H,onShowCreate:X,onCreate:T,createFileOpen:b,creatingFile:D,newFile:j,createFolderOpen:h,creatingFolder:m,newFolder:R,editFileOpen:n,editingFile:c,editFileContent:q,savingFile:Y,openCreateFile:ue,openCreateFolder:ce,refreshFiles:N,onCreateFile:fe,onCreateFolder:pe,onDeleteFile:ve,openEditFile:me,onSaveFile:_e,ref:u,computed:ee,onMounted:oe,get ReloadOutlined(){return Se},get PlusOutlined(){return Oe},get FolderOutlined(){return xe},get FileTextOutlined(){return Ce},get CheckCircleOutlined(){return je},get CheckSquareOutlined(){return be},get FileAddOutlined(){return Fe},get FolderAddOutlined(){return ke},get message(){return d},get useI18n(){return re},get useWsStore(){return ie},get useShellMode(){return de}};return Object.defineProperty(le,"__isScriptSetup",{enumerable:!1,value:!0}),le}},ze={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},he={class:"page-title"},Ae={class:"page-sub"},Ie={class:"filter-bar",style:{"margin-bottom":"12px",display:"flex",gap:"12px","align-items":"center"}},Ue={key:0,style:{"font-size":"12px",color:"#888"}},De={key:0,style:{color:"#888","font-size":"12px"}},Re={key:0},Te={key:1,style:{color:"#888"}},Be=["onClick"],Ee={key:0,style:{color:"#888","font-size":"12px"}};function Le(se,l,te,e,W,w){const B=i("router-link"),y=i("a-button"),O=i("a-space"),S=i("a-statistic"),P=i("a-card"),v=i("a-col"),U=i("a-row"),k=i("a-radio-button"),E=i("a-radio-group"),L=i("a-input-search"),F=i("a-alert"),z=i("a-tag"),M=i("a-popconfirm"),J=i("a-table"),g=i("a-descriptions-item"),Q=i("a-descriptions"),K=i("a-divider"),C=i("a-empty"),G=i("a-list-item"),V=i("a-list"),H=i("a-spin"),X=i("a-drawer"),T=i("a-input"),b=i("a-form-item"),D=i("a-textarea"),j=i("a-form"),h=i("a-modal"),m=i("a-select-option"),R=i("a-select");return p(),A("div",null,[I("div",ze,[I("div",null,[I("h2",he,s(e.t("projects.title")),1),I("p",Ae,[l[17]||(l[17]=r("桌面 / CLI / 手机 三端共享同一份项目数据,Phase 3d sync 自动同步 (",-1)),t(B,{to:"/project-init"},{default:a(()=>[...l[16]||(l[16]=[r("项目初始化 / 环境设置",-1)])]),_:1}),l[18]||(l[18]=r(")",-1))])]),t(O,null,{default:a(()=>[t(y,{loading:e.loading,onClick:e.loadAll},{icon:a(()=>[t(e.ReloadOutlined)]),default:a(()=>[l[19]||(l[19]=r(" 刷新 ",-1))]),_:1},8,["loading"]),t(y,{type:"primary",onClick:e.onShowCreate},{icon:a(()=>[t(e.PlusOutlined)]),default:a(()=>[l[20]||(l[20]=r(" 新建项目 ",-1))]),_:1})]),_:1})]),_(" Stats "),t(U,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:a(()=>[t(v,{xs:12,sm:8,lg:6},{default:a(()=>[t(P,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(S,{title:"总项目",value:e.projects.length,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:a(()=>[t(e.FolderOutlined)]),_:1},8,["value"])]),_:1})]),_:1}),t(v,{xs:12,sm:8,lg:6},{default:a(()=>[t(P,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(S,{title:"活跃",value:e.countByStatus.active,"value-style":{color:"#52c41a",fontSize:"20px"}},{prefix:a(()=>[t(e.CheckCircleOutlined)]),_:1},8,["value"])]),_:1})]),_:1}),t(v,{xs:12,sm:8,lg:6},{default:a(()=>[t(P,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(S,{title:"草稿",value:e.countByStatus.draft,"value-style":{color:"#8c8c8c",fontSize:"20px"}},{prefix:a(()=>[t(e.FileTextOutlined)]),_:1},8,["value"])]),_:1})]),_:1}),t(v,{xs:12,sm:8,lg:6},{default:a(()=>[t(P,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(S,{title:"已完成",value:e.countByStatus.completed,"value-style":{color:"#13c2c2",fontSize:"20px"}},{prefix:a(()=>[t(e.CheckSquareOutlined)]),_:1},8,["value"])]),_:1})]),_:1})]),_:1}),_(" Filter "),I("div",Ie,[t(E,{value:e.statusFilter,"onUpdate:value":l[0]||(l[0]=n=>e.statusFilter=n),size:"small","button-style":"solid"},{default:a(()=>[t(k,{value:""},{default:a(()=>[...l[21]||(l[21]=[r("全部",-1)])]),_:1}),t(k,{value:"active"},{default:a(()=>[...l[22]||(l[22]=[r("活跃",-1)])]),_:1}),t(k,{value:"draft"},{default:a(()=>[...l[23]||(l[23]=[r("草稿",-1)])]),_:1}),t(k,{value:"completed"},{default:a(()=>[...l[24]||(l[24]=[r("已完成",-1)])]),_:1}),t(k,{value:"archived"},{default:a(()=>[...l[25]||(l[25]=[r("已归档",-1)])]),_:1})]),_:1},8,["value"]),t(L,{value:e.nameFilter,"onUpdate:value":l[1]||(l[1]=n=>e.nameFilter=n),placeholder:"按名称过滤",style:{"max-width":"260px"},"allow-clear":""},null,8,["value"])]),!e.projects.length&&!e.loading?(p(),x(F,{key:0,type:"info",message:"还没有项目",description:'运行 `cc project init <name>` 或点击右上角"新建项目"按钮创建。桌面 / CLI / 手机三端共享同一份数据。',"show-icon":"",style:{"margin-bottom":"16px"}})):_("v-if",!0),e.projects.length||e.loading?(p(),x(J,{key:1,columns:e.columns,"data-source":e.filteredProjects,loading:e.loading,pagination:{pageSize:20,showSizeChanger:!0},"row-key":"id","custom-row":e.onRowClick},{bodyCell:a(({column:n,record:c})=>[n.key==="id"?(p(),A("code",Ue,s(c.id.slice(0,8))+"…",1)):n.key==="name"?(p(),A(ne,{key:1},[I("strong",null,s(c.name),1),c.description?(p(),A("div",De,s(c.description),1)):_("v-if",!0)],64)):n.key==="project_type"?(p(),x(z,{key:2},{default:a(()=>[r(s(c.project_type),1)]),_:2},1024)):n.key==="status"?(p(),x(z,{key:3,color:e.statusColor(c.status)},{default:a(()=>[r(s(c.status),1)]),_:2},1032,["color"])):n.key==="sync_status"?(p(),x(z,{key:4,color:e.syncColor(c.sync_status)},{default:a(()=>[r(s(c.sync_status||"unknown"),1)]),_:2},1032,["color"])):n.key==="updated_at"?(p(),A(ne,{key:5},[r(s(e.formatTime(c.updated_at)),1)],64)):n.key==="actions"?(p(),x(O,{key:6,onClick:l[2]||(l[2]=ge(()=>{},["stop"]))},{default:a(()=>[t(y,{size:"small",onClick:q=>e.openDetail(c)},{default:a(()=>[...l[26]||(l[26]=[r("详情",-1)])]),_:1},8,["onClick"]),t(M,{title:`删除项目 '${c.name}' ?`,"ok-text":"删除","ok-type":"danger","cancel-text":"取消",onConfirm:q=>e.onDelete(c)},{default:a(()=>[t(y,{size:"small",danger:""},{default:a(()=>[...l[27]||(l[27]=[r("删除",-1)])]),_:1})]),_:1},8,["title","onConfirm"])]),_:2},1024)):_("v-if",!0)]),_:1},8,["data-source","loading"])):_("v-if",!0),_(" Detail drawer "),t(X,{open:e.detailOpen,"onUpdate:open":l[3]||(l[3]=n=>e.detailOpen=n),title:e.detail?.name||"项目详情",width:"640",placement:"right"},{default:a(()=>[e.detail?(p(),x(Q,{key:0,column:1,bordered:"",size:"small"},{default:a(()=>[t(g,{label:"ID"},{default:a(()=>[I("code",null,s(e.detail.id),1)]),_:1}),t(g,{label:"名称"},{default:a(()=>[r(s(e.detail.name),1)]),_:1}),t(g,{label:"描述"},{default:a(()=>[r(s(e.detail.description||"-"),1)]),_:1}),t(g,{label:"类型"},{default:a(()=>[t(z,null,{default:a(()=>[r(s(e.detail.project_type),1)]),_:1})]),_:1}),t(g,{label:"状态"},{default:a(()=>[t(z,{color:e.statusColor(e.detail.status)},{default:a(()=>[r(s(e.detail.status),1)]),_:1},8,["color"])]),_:1}),t(g,{label:"同步状态"},{default:a(()=>[t(z,{color:e.syncColor(e.detail.sync_status)},{default:a(()=>[r(s(e.detail.sync_status||"unknown"),1)]),_:1},8,["color"])]),_:1}),t(g,{label:"用户"},{default:a(()=>[r(s(e.detail.user_id),1)]),_:1}),t(g,{label:"根路径"},{default:a(()=>[e.detail.root_path?(p(),A("code",Re,s(e.detail.root_path),1)):(p(),A("span",Te,"(无)"))]),_:1}),t(g,{label:"文件数"},{default:a(()=>[r(s(e.detail.file_count||0),1)]),_:1}),t(g,{label:"创建"},{default:a(()=>[r(s(e.formatTime(e.detail.created_at)),1)]),_:1}),t(g,{label:"更新"},{default:a(()=>[r(s(e.formatTime(e.detail.updated_at)),1)]),_:1})]),_:1})):_("v-if",!0),t(K,null,{default:a(()=>[...l[28]||(l[28]=[r("文件",-1)])]),_:1}),_(" Sub-phase 7.3 (2026-05-17): 文件 CRUD toolbar "),t(O,{style:{"margin-bottom":"12px"}},{default:a(()=>[t(y,{size:"small",type:"primary",disabled:!e.detail,onClick:e.openCreateFile},{default:a(()=>[t(e.FileAddOutlined),l[29]||(l[29]=r(" 新建文件 ",-1))]),_:1},8,["disabled"]),t(y,{size:"small",disabled:!e.detail,onClick:e.openCreateFolder},{default:a(()=>[t(e.FolderAddOutlined),l[30]||(l[30]=r(" 新建文件夹 ",-1))]),_:1},8,["disabled"])]),_:1}),t(H,{spinning:e.filesLoading},{default:a(()=>[!e.files.length&&!e.filesLoading?(p(),x(C,{key:0,description:"无文件 (点上方按钮新建)"})):(p(),x(V,{key:1,size:"small","data-source":e.files},{renderItem:a(({item:n})=>[t(G,null,{extra:a(()=>[t(O,null,{default:a(()=>[n.file_size?(p(),A("span",Ee,s(n.file_size)+" B",1)):_("v-if",!0),t(M,{title:`删除 ${n.is_folder?"文件夹":"文件"} '${n.file_name}' ?`,"ok-text":"删除","ok-type":"danger","cancel-text":"取消",onConfirm:c=>e.onDeleteFile(n)},{default:a(()=>[t(y,{size:"small",danger:""},{default:a(()=>[...l[31]||(l[31]=[r("×",-1)])]),_:1})]),_:1},8,["title","onConfirm"])]),_:2},1024)]),default:a(()=>[I("span",{style:{cursor:"pointer"},onClick:c=>e.openEditFile(n)},s(n.is_folder?"📁":"📄")+" "+s(n.file_path),9,Be)]),_:2},1024)]),_:1},8,["data-source"]))]),_:1},8,["spinning"])]),_:1},8,["open","title"]),_(" Sub-phase 7.3: Create file modal "),t(h,{open:e.createFileOpen,"onUpdate:open":l[6]||(l[6]=n=>e.createFileOpen=n),title:"新建文件","confirm-loading":e.creatingFile,"ok-text":"创建","cancel-text":"取消",onOk:e.onCreateFile},{default:a(()=>[t(j,{layout:"vertical"},{default:a(()=>[t(b,{label:"文件路径(项目内)",required:""},{default:a(()=>[t(T,{value:e.newFile.path,"onUpdate:value":l[4]||(l[4]=n=>e.newFile.path=n),placeholder:"例如 README.md 或 src/main.kt"},null,8,["value"])]),_:1}),t(b,{label:"初始内容(可选)"},{default:a(()=>[t(D,{value:e.newFile.content,"onUpdate:value":l[5]||(l[5]=n=>e.newFile.content=n),rows:6,placeholder:"留空创建空文件"},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"]),_(" Sub-phase 7.3: Create folder modal "),t(h,{open:e.createFolderOpen,"onUpdate:open":l[8]||(l[8]=n=>e.createFolderOpen=n),title:"新建文件夹","confirm-loading":e.creatingFolder,"ok-text":"创建","cancel-text":"取消",onOk:e.onCreateFolder},{default:a(()=>[t(j,{layout:"vertical"},{default:a(()=>[t(b,{label:"文件夹路径(项目内)",required:""},{default:a(()=>[t(T,{value:e.newFolder.path,"onUpdate:value":l[7]||(l[7]=n=>e.newFolder.path=n),placeholder:"例如 src/utils"},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"]),_(" Sub-phase 7.3: Edit file content modal "),t(h,{open:e.editFileOpen,"onUpdate:open":l[10]||(l[10]=n=>e.editFileOpen=n),title:`编辑 ${e.editingFile?.file_name||""}`,"confirm-loading":e.savingFile,"ok-text":"保存","cancel-text":"取消",onOk:e.onSaveFile,width:"720"},{default:a(()=>[t(D,{value:e.editFileContent,"onUpdate:value":l[9]||(l[9]=n=>e.editFileContent=n),rows:18,"auto-size":{minRows:12,maxRows:24},style:{"font-family":"monospace"}},null,8,["value"])]),_:1},8,["open","title","confirm-loading"]),_(" Create modal "),t(h,{open:e.createOpen,"onUpdate:open":l[15]||(l[15]=n=>e.createOpen=n),title:"新建项目","confirm-loading":e.creating,"ok-text":"创建","cancel-text":"取消",onOk:e.onCreate},{default:a(()=>[t(j,{layout:"vertical"},{default:a(()=>[t(b,{label:"项目名称",required:""},{default:a(()=>[t(T,{value:e.newProject.name,"onUpdate:value":l[11]||(l[11]=n=>e.newProject.name=n),placeholder:"例如:旅行计划-上海"},null,8,["value"])]),_:1}),t(b,{label:"描述"},{default:a(()=>[t(D,{value:e.newProject.description,"onUpdate:value":l[12]||(l[12]=n=>e.newProject.description=n),rows:2},null,8,["value"])]),_:1}),t(b,{label:"类型"},{default:a(()=>[t(R,{value:e.newProject.type,"onUpdate:value":l[13]||(l[13]=n=>e.newProject.type=n)},{default:a(()=>[t(m,{value:"document"},{default:a(()=>[...l[32]||(l[32]=[r("文档 (document)",-1)])]),_:1}),t(m,{value:"data"},{default:a(()=>[...l[33]||(l[33]=[r("数据 (data)",-1)])]),_:1}),t(m,{value:"web"},{default:a(()=>[...l[34]||(l[34]=[r("Web",-1)])]),_:1}),t(m,{value:"app"},{default:a(()=>[...l[35]||(l[35]=[r("应用 (app)",-1)])]),_:1}),t(m,{value:"presentation"},{default:a(()=>[...l[36]||(l[36]=[r("演示文稿",-1)])]),_:1}),t(m,{value:"spreadsheet"},{default:a(()=>[...l[37]||(l[37]=[r("表格",-1)])]),_:1}),t(m,{value:"design"},{default:a(()=>[...l[38]||(l[38]=[r("设计",-1)])]),_:1}),t(m,{value:"code"},{default:a(()=>[...l[39]||(l[39]=[r("代码",-1)])]),_:1}),t(m,{value:"workflow"},{default:a(()=>[...l[40]||(l[40]=[r("工作流",-1)])]),_:1}),t(m,{value:"knowledge"},{default:a(()=>[...l[41]||(l[41]=[r("知识库",-1)])]),_:1})]),_:1},8,["value"])]),_:1}),t(b,{label:"根路径 (可选)"},{default:a(()=>[t(T,{value:e.newProject.rootPath,"onUpdate:value":l[14]||(l[14]=n=>e.newProject.rootPath=n),placeholder:"留空则仅元数据"},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"])])}const We=we(Pe,[["render",Le],["__scopeId","data-v-019ac5aa"],["__file","/tmp/cc-web-panel-ehQgdt/repo/packages/web-panel/src/views/Projects.vue"]]);export{We as default};