chainlesschain 0.162.121 → 0.162.123

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 (188) hide show
  1. package/package.json +1 -1
  2. package/src/assets/web-panel/.build-hash +1 -1
  3. package/src/assets/web-panel/assets/AIOps-C5CSd8pY.js +1 -0
  4. package/src/assets/web-panel/assets/{ActionButton-B0guX-Pk.js → ActionButton-BugJtiJc.js} +1 -1
  5. package/src/assets/web-panel/assets/{Analytics-pvYAYaTD.js → Analytics-CzxpcV9E.js} +3 -3
  6. package/src/assets/web-panel/assets/{AppLayout-_GgOKQ2t.js → AppLayout-Cb0eHetM.js} +5 -5
  7. package/src/assets/web-panel/assets/Audit-qjq04wh8.js +1 -0
  8. package/src/assets/web-panel/assets/{Backup-DzC81Yn0.js → Backup-C2Y_XNBA.js} +1 -1
  9. package/src/assets/web-panel/assets/{BaseInput-BsJKfb1P.js → BaseInput-CZ0c7QHk.js} +1 -1
  10. package/src/assets/web-panel/assets/{Chat-WsUPq3Wj.js → Chat-CaKDT3wV.js} +6 -6
  11. package/src/assets/web-panel/assets/ChatBubbleRenderer-TeKnMwPj.js +1 -0
  12. package/src/assets/web-panel/assets/{Checkbox-C3yuwxvq.js → Checkbox-C6-Iu3bG.js} +1 -1
  13. package/src/assets/web-panel/assets/Codegen-TGLFk6P1.js +1 -0
  14. package/src/assets/web-panel/assets/{Col-DH6v5BCo.js → Col-DVBrO7AN.js} +1 -1
  15. package/src/assets/web-panel/assets/{Community-DPm78h9b.js → Community-tg6-Rik1.js} +1 -1
  16. package/src/assets/web-panel/assets/{Compact-t_O2D6_A.js → Compact-DM4ZgFSE.js} +1 -1
  17. package/src/assets/web-panel/assets/Compliance-DFeWryxt.js +1 -0
  18. package/src/assets/web-panel/assets/{Cowork-BAfAK8X3.js → Cowork-CJwiWkUY.js} +2 -2
  19. package/src/assets/web-panel/assets/{Cron-BeG0RFLN.js → Cron-dsdXHvrO.js} +2 -2
  20. package/src/assets/web-panel/assets/Crosschain-p7_5Gq-7.js +1 -0
  21. package/src/assets/web-panel/assets/{DID-DnknPYMQ.js → DID-BB_LBLYT.js} +2 -2
  22. package/src/assets/web-panel/assets/{Dashboard-CCChnAaV.js → Dashboard-Bh_HkNSD.js} +2 -2
  23. package/src/assets/web-panel/assets/{Dropdown-DrnkbWTA.js → Dropdown-dTFtVnKk.js} +1 -1
  24. package/src/assets/web-panel/assets/{EmailListRenderer-yvHFL0rf.js → EmailListRenderer-yqdttzXV.js} +1 -1
  25. package/src/assets/web-panel/assets/{FamilyGuardDashboard-CkGkMoL4.js → FamilyGuardDashboard-DfX3YpUU.js} +1 -1
  26. package/src/assets/web-panel/assets/Federation-BJApfPV4.js +1 -0
  27. package/src/assets/web-panel/assets/{FormItemContext-CHniFKJL.js → FormItemContext-DNMwIh7X.js} +1 -1
  28. package/src/assets/web-panel/assets/{GenericCardRenderer-DUWt7emA.js → GenericCardRenderer-C-T8UQf0.js} +1 -1
  29. package/src/assets/web-panel/assets/{Git-BCkiDXHW.js → Git-SURFhkLi.js} +2 -2
  30. package/src/assets/web-panel/assets/Governance-B4u_KsfE.js +1 -0
  31. package/src/assets/web-panel/assets/Inference-2kr_rKQd.js +1 -0
  32. package/src/assets/web-panel/assets/{KnowledgeGraph-CcaaJRB6.js → KnowledgeGraph-h-nL7J6x.js} +1 -1
  33. package/src/assets/web-panel/assets/{Logs-CgrnKQgi.js → Logs-DjuWREBJ.js} +2 -2
  34. package/src/assets/web-panel/assets/Marketplace-W9Iz8b2m.js +1 -0
  35. package/src/assets/web-panel/assets/{McpTools-_C4-YpAK.js → McpTools-D0waMomb.js} +5 -5
  36. package/src/assets/web-panel/assets/{Memory-XGQtG2x2.js → Memory-Ci768GQ3.js} +2 -2
  37. package/src/assets/web-panel/assets/{MobileBridge-D4tGRMBu.js → MobileBridge-4jAehfcz.js} +2 -2
  38. package/src/assets/web-panel/assets/{MobileProjects-CSMoOsbj.js → MobileProjects-RpFuAiNz.js} +1 -1
  39. package/src/assets/web-panel/assets/{Mtc-BkOT98e8.js → Mtc-DJdw8btT.js} +4 -4
  40. package/src/assets/web-panel/assets/{MtcAudit-R3Bc7QS3.js → MtcAudit-Dc596XgH.js} +2 -2
  41. package/src/assets/web-panel/assets/{Multisig-DtPhN_Vp.js → Multisig--Qs7eGsH.js} +3 -3
  42. package/src/assets/web-panel/assets/NLProgramming-D3y71FDX.js +1 -0
  43. package/src/assets/web-panel/assets/{Notes-DQAs8WXS.js → Notes-uMxjj66_.js} +3 -3
  44. package/src/assets/web-panel/assets/{NotificationSettings-CU5inrwZ.js → NotificationSettings-C4ikBOsm.js} +1 -1
  45. package/src/assets/web-panel/assets/{OrderTableRenderer-CuOAigzP.js → OrderTableRenderer-BpmdunAz.js} +1 -1
  46. package/src/assets/web-panel/assets/{Organization-BBYSlNS4.js → Organization-BBEmFNGM.js} +4 -4
  47. package/src/assets/web-panel/assets/{Overflow-D4LFJ0F8.js → Overflow-B-4_IpbB.js} +1 -1
  48. package/src/assets/web-panel/assets/{P2P-Cb9wWcwI.js → P2P-DdOf9BZs.js} +2 -2
  49. package/src/assets/web-panel/assets/{PdhVaultBrowser-CbrWEB55.js → PdhVaultBrowser-DDU2Zc9Q.js} +3 -3
  50. package/src/assets/web-panel/assets/{Permissions-B6IgqOCw.js → Permissions-B1ebgevF.js} +4 -4
  51. package/src/assets/web-panel/assets/{PersonalDataHub-Bjr4sBQJ.js → PersonalDataHub-B3WcvKni.js} +2 -2
  52. package/src/assets/web-panel/assets/Pipeline-DASuPDc3.js +1 -0
  53. package/src/assets/web-panel/assets/Privacy-DnixwmhJ.js +1 -0
  54. package/src/assets/web-panel/assets/{ProjectInit-D_Ooa-_1.js → ProjectInit-BQjMDkML.js} +2 -2
  55. package/src/assets/web-panel/assets/{ProjectSettings-BcxJj9D5.js → ProjectSettings-dHyZ3SxW.js} +2 -2
  56. package/src/assets/web-panel/assets/Projects-BGWEJIVT.js +1 -0
  57. package/src/assets/web-panel/assets/Providers-Bl0dw6cI.js +1 -0
  58. package/src/assets/web-panel/assets/{QuickAsk-BwmHGadq.js → QuickAsk-BDrk7l3t.js} +1 -1
  59. package/src/assets/web-panel/assets/Recommend-BPKof_CA.js +1 -0
  60. package/src/assets/web-panel/assets/Reputation-6MNJLklK.js +1 -0
  61. package/src/assets/web-panel/assets/{Row-P2QvD32s.js → Row-DmGJwpfd.js} +1 -1
  62. package/src/assets/web-panel/assets/{RssFeed-Cbhe_ZuG.js → RssFeed-9-Fxh3_w.js} +2 -2
  63. package/src/assets/web-panel/assets/Search-CCHjey_D.js +1 -0
  64. package/src/assets/web-panel/assets/{Security-BHcX3oNC.js → Security-D6CySV7r.js} +4 -4
  65. package/src/assets/web-panel/assets/{Services-MyS-8Lbb.js → Services-Co8Mk8qE.js} +2 -2
  66. package/src/assets/web-panel/assets/{Skeleton-QZIW_jXl.js → Skeleton-BdON8M-1.js} +1 -1
  67. package/src/assets/web-panel/assets/Skills-CEJE1Go1.js +1 -0
  68. package/src/assets/web-panel/assets/Sla-BSxFvFX9.js +1 -0
  69. package/src/assets/web-panel/assets/{SpeechSettings-Bo1H5Wn6.js → SpeechSettings-C3rShYlV.js} +1 -1
  70. package/src/assets/web-panel/assets/{SyncSettings-Bsz0-gn1.js → SyncSettings-52NXsfyj.js} +2 -2
  71. package/src/assets/web-panel/assets/Tasks-He7CweW6.js +1 -0
  72. package/src/assets/web-panel/assets/{Templates-BougCISz.js → Templates-UtjBlJIO.js} +1 -1
  73. package/src/assets/web-panel/assets/Tenant-Dd5XNbYF.js +1 -0
  74. package/src/assets/web-panel/assets/Terminal-pFyh42cu.js +3 -0
  75. package/src/assets/web-panel/assets/{TimelineRenderer-DIvfcwcy.js → TimelineRenderer-BdfqBQmM.js} +1 -1
  76. package/src/assets/web-panel/assets/Tokens-CsgNsrdQ.js +1 -0
  77. package/src/assets/web-panel/assets/{Trigger-Di7RbOTg.js → Trigger-Dt_N_rvo.js} +1 -1
  78. package/src/assets/web-panel/assets/Trust-B1lJzsPn.js +1 -0
  79. package/src/assets/web-panel/assets/{UkeySign-D6K4VEkr.js → UkeySign-CW8YdFxg.js} +1 -1
  80. package/src/assets/web-panel/assets/{VideoEditing-DncGaI3n.js → VideoEditing-CU6o7qvp.js} +1 -1
  81. package/src/assets/web-panel/assets/{Wallet-C6dwNmEv.js → Wallet-DPxjEhbN.js} +4 -4
  82. package/src/assets/web-panel/assets/{WebAuthn-DECzmHdt.js → WebAuthn-CuJ29YAF.js} +4 -4
  83. package/src/assets/web-panel/assets/{WorkflowEditor-7Oui1r4s.js → WorkflowEditor-BcCA2U8H.js} +1 -1
  84. package/src/assets/web-panel/assets/{chat-D7cr3pGX.js → chat-Cxl5DGsc.js} +1 -1
  85. package/src/assets/web-panel/assets/{colors-DVBzBfcl.js → colors-FS_7Xggs.js} +1 -1
  86. package/src/assets/web-panel/assets/community-parser-Cuyslaku.js +3 -0
  87. package/src/assets/web-panel/assets/{compact-item-BbB5VBbN.js → compact-item-BzXjd3wJ.js} +1 -1
  88. package/src/assets/web-panel/assets/{createContext-DZIhmdMW.js → createContext-DhF9bi_u.js} +1 -1
  89. package/src/assets/web-panel/assets/devWarning-B1j78JeH.js +1 -0
  90. package/src/assets/web-panel/assets/{hasIn-o6cAbkdF.js → hasIn-Y1a0aV9N.js} +1 -1
  91. package/src/assets/web-panel/assets/{index-DDlaS-eI.js → index--fcP34eT.js} +1 -1
  92. package/src/assets/web-panel/assets/{index-D9ImwlR4.js → index-1iacQgo5.js} +3 -3
  93. package/src/assets/web-panel/assets/{index-BjFOIfCN.js → index-1khPb4ZS.js} +1 -1
  94. package/src/assets/web-panel/assets/{index-C3zE2Zb3.js → index-B48PZ-xM.js} +1 -1
  95. package/src/assets/web-panel/assets/{index-CRwhnqeq.js → index-BBtULjKY.js} +1 -1
  96. package/src/assets/web-panel/assets/{index-yuTbNtNs.js → index-BNmWkPqm.js} +1 -1
  97. package/src/assets/web-panel/assets/{index-B46pBbZO.js → index-BTltEtoG.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-Cw4L9i5q.js → index-B_Z0PHC0.js} +1 -1
  99. package/src/assets/web-panel/assets/index-BaN6wKWx.js +1 -0
  100. package/src/assets/web-panel/assets/{index-Cv57ZM9B.js → index-BepInmSi.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-zKIib2ju.js → index-BllceSdr.js} +1 -1
  102. package/src/assets/web-panel/assets/{index-Uu0xnJjT.js → index-BnvaUocg.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-PrARM-sN.js → index-Bt_0ygjA.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-BE27hqn2.js → index-BzQkdgQW.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-B7wUz-Ms.js → index-C2S8McM1.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-bVBYhd7K.js → index-CELVZPNt.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-C7E1YSkg.js → index-CETvk0NN.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-DZ3tksOn.js → index-CRSkKj9M.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-Cqjc-kry.js → index-Cgo1J_Kf.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-D8x9OXYZ.js → index-Ci7PSoQn.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-DTk9u72E.js → index-Cn9lbqaS.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-B-ZE4Sb_.js → index-CuTKOay7.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-CMBJfBO0.js → index-CxYHV8nb.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-KRt3wlmg.js → index-CzlCP4jP.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-BCmv_7S_.js → index-D3IVAG9l.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-DClnoV1K.js → index-DLyIxnjc.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-CBU-k7oT.js → index-DUcVF8e6.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-BHUQ725h.js → index-DVTex5M8.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-CzqSSSPT.js → index-DZJMsVI1.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-WVuFehZH.js → index-DfaSKEVD.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-wTvVuzRE.js → index-DgHWZVjv.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-BpBK2OXI.js → index-Dmjxpu0L.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-D9kIcXZC.js → index-DxGVbuqr.js} +1 -1
  124. package/src/assets/web-panel/assets/{index-DAH13RZu.js → index-GCd5hs58.js} +1 -1
  125. package/src/assets/web-panel/assets/{index-l0044mtE.js → index-JUukFpxi.js} +1 -1
  126. package/src/assets/web-panel/assets/index-N7JKRLCC.js +1 -0
  127. package/src/assets/web-panel/assets/{index-M33z1syq.js → index-Na733kBa.js} +1 -1
  128. package/src/assets/web-panel/assets/{index-DKepNJYO.js → index-Sl-sLj3T.js} +1 -1
  129. package/src/assets/web-panel/assets/{index-CsMviqrA.js → index-uLoKviUT.js} +1 -1
  130. package/src/assets/web-panel/assets/{initDefaultProps-BserruiV.js → initDefaultProps-D6QmlnQ-.js} +1 -1
  131. package/src/assets/web-panel/assets/{motion-C_f04bi5.js → motion-BHrTGY1_.js} +1 -1
  132. package/src/assets/web-panel/assets/{move-BexrY4Hu.js → move-Bpph6B_N.js} +1 -1
  133. package/src/assets/web-panel/assets/mtc-parser-CEQffxds.js +1 -0
  134. package/src/assets/web-panel/assets/{omit-CIZJousS.js → omit-Dx0YMbWn.js} +1 -1
  135. package/src/assets/web-panel/assets/{pickAttrs-BkLOyxvO.js → pickAttrs-D-a8Fm6C.js} +1 -1
  136. package/src/assets/web-panel/assets/{placementArrow-C3ddcrAy.js → placementArrow-DXFSVgxv.js} +1 -1
  137. package/src/assets/web-panel/assets/{responsiveObserve-D7hnwzkh.js → responsiveObserve-CxhQ1EaK.js} +1 -1
  138. package/src/assets/web-panel/assets/{slide-CF7E-K6h.js → slide-IlBI0XU8.js} +1 -1
  139. package/src/assets/web-panel/assets/{statusUtils-B6OJYlGm.js → statusUtils-COoXVzje.js} +1 -1
  140. package/src/assets/web-panel/assets/{styleChecker-bFHBq4VZ.js → styleChecker-DCuq89M_.js} +1 -1
  141. package/src/assets/web-panel/assets/{useFlexGapSupport-C4oscNMu.js → useFlexGapSupport-tfNE1ALO.js} +1 -1
  142. package/src/assets/web-panel/assets/{useFs-C4qeTm22.js → useFs-DD4bzBkU.js} +1 -1
  143. package/src/assets/web-panel/assets/{usePersonalDataHub-BREWau9k.js → usePersonalDataHub-DVkH1hbT.js} +1 -1
  144. package/src/assets/web-panel/assets/{vnode-D_FePgCk.js → vnode-D1ZmXyxM.js} +1 -1
  145. package/src/assets/web-panel/assets/{zoom-CrTvlO1G.js → zoom-DblBUHfi.js} +1 -1
  146. package/src/assets/web-panel/index.html +1 -1
  147. package/src/harness/mcp-client.js +67 -6
  148. package/src/lib/credential-guard.js +284 -0
  149. package/src/lib/ensure-utf8.js +6 -1
  150. package/src/lib/hook-manager.js +15 -6
  151. package/src/lib/llm-config-defaults.js +20 -0
  152. package/src/lib/mcp-client.js +1 -0
  153. package/src/lib/mcp-oauth.js +35 -4
  154. package/src/lib/repl-rewind.js +58 -0
  155. package/src/lib/repl-vim.js +13 -1
  156. package/src/lib/settings-hooks.cjs +12 -3
  157. package/src/repl/agent-repl.js +52 -2
  158. package/src/runtime/agent-core.js +76 -0
  159. package/src/assets/web-panel/assets/AIOps-Bv7Ucinc.js +0 -1
  160. package/src/assets/web-panel/assets/Audit-CFS769nz.js +0 -1
  161. package/src/assets/web-panel/assets/ChatBubbleRenderer-DvtzQM9S.js +0 -1
  162. package/src/assets/web-panel/assets/Codegen-QIFxk_hy.js +0 -1
  163. package/src/assets/web-panel/assets/Compliance-CLKqB8ca.js +0 -1
  164. package/src/assets/web-panel/assets/Crosschain-CaWGF4pH.js +0 -1
  165. package/src/assets/web-panel/assets/Federation-1njD_iZv.js +0 -1
  166. package/src/assets/web-panel/assets/Governance-CvYe_1r7.js +0 -1
  167. package/src/assets/web-panel/assets/Inference-DLMzzPHV.js +0 -1
  168. package/src/assets/web-panel/assets/Marketplace-ANMynfeO.js +0 -1
  169. package/src/assets/web-panel/assets/NLProgramming-BedLm2U-.js +0 -1
  170. package/src/assets/web-panel/assets/Pipeline-Dh5Jusv2.js +0 -1
  171. package/src/assets/web-panel/assets/Privacy-Dyrhjpr4.js +0 -1
  172. package/src/assets/web-panel/assets/Projects-D2iHs0Go.js +0 -1
  173. package/src/assets/web-panel/assets/Providers-D0-FNfIu.js +0 -1
  174. package/src/assets/web-panel/assets/Recommend-Cn6UbQuv.js +0 -1
  175. package/src/assets/web-panel/assets/Reputation-jSYCTpEv.js +0 -1
  176. package/src/assets/web-panel/assets/Search-7aQqsu6b.js +0 -1
  177. package/src/assets/web-panel/assets/Skills-BiGNAz9O.js +0 -1
  178. package/src/assets/web-panel/assets/Sla-C62HvLJq.js +0 -1
  179. package/src/assets/web-panel/assets/Tasks-bwGsNuzp.js +0 -1
  180. package/src/assets/web-panel/assets/Tenant-CuZVHTEg.js +0 -1
  181. package/src/assets/web-panel/assets/Terminal-Cuf5GwW1.js +0 -3
  182. package/src/assets/web-panel/assets/Tokens-BiS_SqlJ.js +0 -1
  183. package/src/assets/web-panel/assets/Trust-DJfddmdL.js +0 -1
  184. package/src/assets/web-panel/assets/community-parser-CO25nZFt.js +0 -3
  185. package/src/assets/web-panel/assets/devWarning-roRmJB_V.js +0 -1
  186. package/src/assets/web-panel/assets/index-C24iCbrD.js +0 -1
  187. package/src/assets/web-panel/assets/index-DjgW9EJK.js +0 -1
  188. package/src/assets/web-panel/assets/mtc-parser-BbAbUB-9.js +0 -1
@@ -0,0 +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 Y,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{_ as Ee,u as re,b as se,d as f}from"./index-1iacQgo5.js";import{t as W}from"./community-parser-Cuyslaku.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"]),We=Object.freeze(["sum","product","mean","count"]);function h(t,l=0){return typeof t=="number"&&Number.isFinite(t)?t:l}function Ze(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(Ze).filter(Boolean):[]}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||""),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(Qe).filter(Boolean):[]}function Xe(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(Xe).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 Ye={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(Ye)),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,j]of Object.entries(s.mpc.byProtocol))typeof j=="number"&&Number.isFinite(j)&&(l.mpc.byProtocol[e]=j);return l}function Ge(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),Z=k(""),Q=k(""),G=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(""),X=k(""),D=k(!1),J=k(!1),$=k(!1),U=k(!1),p=Y({name:"",modelType:"",architecture:"",rounds:10,lr:.01,participants:0}),S=Y({type:"",protocol:"shamir",participants:"",threshold:null}),x=Y({data:"",mechanism:"laplace",epsilon:.1,delta:1e-5,sensitivity:1}),A=Y({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)),X.value&&(n=n.filter(u=>u.status===X.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:""}))]);G.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){Z.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{Z.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){Q.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{Q.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:Z,submittingShareId:Q,protocols:G,dpMechanisms:P,heSchemes:O,models:L,computations:I,report:R,activeTab:M,modelStatusFilter:T,mpcProtocolFilter:q,mpcStatusFilter:X,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:Y,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 Ge},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,j,H){const E=b("a-button"),w=b("a-menu-item"),Z=b("a-menu"),Q=b("a-dropdown"),G=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"),X=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(G,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(Q,{trigger:["click"]},{overlay:i(()=>[o(Z,{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(X,{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 Tt=Ee($e,[["render",Ot],["__scopeId","data-v-f7af818f"],["__file","/tmp/cc-web-panel-eXzh0Z/repo/packages/web-panel/src/views/Privacy.vue"]]);export{Tt 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 H,a as U,b as W,r as d,P as l,Q as b,F as A,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-D9ImwlR4.js";import{u as Z}from"./useFs-C4qeTm22.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=U({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=W(()=>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:W,reactive:U,onMounted:H,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(A,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(A,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-DNn50E/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 U,b as W,r as d,P as l,Q as b,F as Z,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-1iacQgo5.js";import{u as Q}from"./useFs-DD4bzBkU.js";import{O as M,ar as X,aa as T,f as q,an as ne,R as ie}from"./icons-DP3uiYxy.js";import"./useShellMode-CgR0wCYM.js";const se={__name:"ProjectInit",setup(G,{expose:O}){O();const{t:v}=J(),e=K(),R=Q(),z=d(!1),y=d(!1),h=d(!1),c=d(!1),x=d(""),j=d(""),F=d(null),P=d(!1),w=d([]),p=d(null),I=d(!1),u=U({running:!1,edition:"",llmProvider:"",llmModel:"",setupDone:!1,setupDate:""}),n=[{name:"code-project",icon:M},{name:"medical-triage",icon:X},{name:"agriculture-expert",icon:T},{name:"general-assistant",icon:q},{name:"ai-media-creator",icon:T},{name:"ai-doc-creator",icon:M}],B=W(()=>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,P.value=g.length>0}async function L(){z.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{z.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:z,initLoading:y,doctorLoading:h,folderPickerLoading:c,selectedTemplate:x,doctorOutput:j,initResult:F,configLoaded:P,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:W,reactive:U,onMounted:H,get useI18n(){return J},get ProjectOutlined(){return M},get RocketOutlined(){return T},get MedicineBoxOutlined(){return X},get ReloadOutlined(){return ie},get CheckCircleOutlined(){return q},get FolderOpenOutlined(){return ne},get message(){return D},get useWsStore(){return K},get useFs(){return Q}};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},ze={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 Pe(G,O,v,e,R,z){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"),P=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(P,{column:{xs:1,sm:2,lg:3},bordered:"",size:"small"},{default:t(()=>[(l(!0),m(Z,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(Z,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",ze,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",Pe],["__scopeId","data-v-4941e84f"],["__file","/tmp/cc-web-panel-eXzh0Z/repo/packages/web-panel/src/views/ProjectInit.vue"]]);export{Te as default};
@@ -1,2 +1,2 @@
1
- import{I as u,J as h,U as g,c as a,K as r,a as z,r as j,o as I,b as M,P as O,Q as w,S as V,V as F}from"./vendor-BvqAck49.js";import{_ as A,u as N,d as _}from"./index-D9ImwlR4.js";import{a7 as L,R as W}from"./icons-DP3uiYxy.js";const c=Object.freeze({rootPath:"",maxSizeMB:1e3,autoSync:!1,syncIntervalSeconds:300});function K(n){if(!n)return null;const e=n.trim();try{return JSON.parse(e)}catch{const o=e.match(/(\{[\s\S]*\}|\[[\s\S]*\])/);if(!o)return null;try{return JSON.parse(o[1])}catch{return null}}}function U(n){if(typeof n=="boolean")return n;const e=String(n).trim().toLowerCase();return e==="true"||e==="1"||e==="yes"||e==="on"}function C(n,e){if(typeof n=="number"&&Number.isFinite(n))return n;const o=parseFloat(n);return Number.isFinite(o)?o:e}function D(n){const e={...c};if(!n)return e;const o=n.trim();if(!o||/key not found/i.test(o))return e;const t=K(o);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=o.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 B(n,e){const o={};for(const t of Object.keys(c))n[t]!==e[t]&&(o[t]=e[t]);return o}const Q={__name:"ProjectSettings",setup(n,{expose:e}){e();const o=N(),t=j(!1),v=j(!1),d=z({...c}),s=j({...c}),p=M(()=>Object.keys(B(s.value,d)).length>0);async function f(){t.value=!0;try{const{output:m}=await o.execute("config get project",1e4),y=D(m);Object.assign(d,y),s.value={...y}}catch(m){/key not found/i.test(m.message)?(Object.assign(d,c),s.value={...c}):_.error("加载配置失败: "+m.message)}finally{t.value=!1}}function i(){Object.assign(d,s.value)}async function x(){const m=B(s.value,d),y=Object.keys(m);if(y.length===0){_.info("没有需要保存的修改");return}v.value=!0;let b=0,S=0;for(const l of y){const E=m[l],J=String(E).replace(/"/g,'\\"'),R=`config set project.${l} "${J}"`;try{const{output:P,exitCode:T}=await o.execute(R,1e4);T!==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} 项)`),s.value={...d}):b>0&&(_.warning(`部分保存成功:${b} 成功 / ${S} 失败`),await f())}I(()=>{f()});const k={ws:o,loading:t,saving:v,form:d,baseline:s,isDirty:p,loadConfig:f,resetForm:i,saveConfig:x,reactive:z,ref:j,computed:M,onMounted:I,get ReloadOutlined(){return W},get FolderOutlined(){return L},get message(){return _},get useWsStore(){return N},get parseProjectConfig(){return D},get diffProjectConfig(){return B},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(n,e,o,t,v,d){const s=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"),y=u("a-form"),b=u("a-spin"),S=u("a-card");return O(),h("div",null,[g("div",q,[e[5]||(e[5]=g("div",null,[g("h2",{class:"page-title"},"项目存储配置"),g("p",{class:"page-sub"},"根目录 / 配额 / 自动同步")],-1)),a(s,{loading:t.loading,onClick:t.loadConfig},{icon:r(()=>[a(t.ReloadOutlined)]),default:r(()=>[e[4]||(e[4]=w(" 刷新 ",-1))]),_:1},8,["loading"])]),a(p,{message:"仅 Web 模式",description:"目录选择器(原生文件对话框)仅在桌面端可用,本页面需手动输入路径。修改根目录后需重启桌面应用生效;web 端只影响后端配置文件。",type:"info","show-icon":"",closable:"",style:{"margin-bottom":"16px"}}),a(S,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{title:r(()=>[g("span",G,[a(t.FolderOutlined,{style:{"margin-right":"8px"}}),e[6]||(e[6]=w("项目存储 ",-1))])]),default:r(()=>[a(b,{spinning:t.loading},{default:r(()=>[a(y,{"label-col":{span:6},"wrapper-col":{span:18},style:{"max-width":"720px"}},{default:r(()=>[a(i,{label:"项目根目录"},{extra:r(()=>[...e[7]||(e[7]=[g("span",{style:{color:"var(--text-muted)","font-size":"11px"}}," 需绝对路径;修改后重启桌面应用生效 ",-1)])]),default:r(()=>[a(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}),a(i,{label:"最大项目大小"},{default:r(()=>[a(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}),a(i,{label:"自动同步"},{default:r(()=>[a(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]=g("span",{style:{"margin-left":"12px",color:"var(--text-secondary)","font-size":"12px"}}," 自动同步项目到后端服务器 ",-1))]),_:1}),t.form.autoSync?(O(),V(i,{key:0,label:"同步间隔"},{default:r(()=>[a(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),a(i,{"wrapper-col":{offset:6,span:18}},{default:r(()=>[a(m,null,{default:r(()=>[a(s,{onClick:t.resetForm,disabled:t.saving||t.loading},{default:r(()=>[...e[9]||(e[9]=[w(" 重置 ",-1)])]),_:1},8,["disabled"]),a(s,{type:"primary",loading:t.saving,disabled:!t.isDirty,onClick:t.saveConfig},{default:r(()=>[...e[10]||(e[10]=[w(" 保存配置 ",-1)])]),_:1},8,["loading","disabled"]),t.isDirty?(O(),h("span",H," 有未保存的修改 ")):F("v-if",!0)]),_:1})]),_:1})]),_:1})]),_:1},8,["spinning"])]),_:1})])}const ee=A(Q,[["render",X],["__scopeId","data-v-f4cc2f66"],["__file","/tmp/cc-web-panel-DNn50E/repo/packages/web-panel/src/views/ProjectSettings.vue"]]);export{ee as default};
1
+ import{I as u,J as h,U as g,c as a,K as r,a as z,r as j,o as I,b as M,P as O,Q as w,S as V,V as F}from"./vendor-BvqAck49.js";import{_ as A,u as N,d as _}from"./index-1iacQgo5.js";import{a7 as L,R as W}from"./icons-DP3uiYxy.js";const c=Object.freeze({rootPath:"",maxSizeMB:1e3,autoSync:!1,syncIntervalSeconds:300});function K(n){if(!n)return null;const e=n.trim();try{return JSON.parse(e)}catch{const o=e.match(/(\{[\s\S]*\}|\[[\s\S]*\])/);if(!o)return null;try{return JSON.parse(o[1])}catch{return null}}}function U(n){if(typeof n=="boolean")return n;const e=String(n).trim().toLowerCase();return e==="true"||e==="1"||e==="yes"||e==="on"}function C(n,e){if(typeof n=="number"&&Number.isFinite(n))return n;const o=parseFloat(n);return Number.isFinite(o)?o:e}function J(n){const e={...c};if(!n)return e;const o=n.trim();if(!o||/key not found/i.test(o))return e;const t=K(o);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=o.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 B(n,e){const o={};for(const t of Object.keys(c))n[t]!==e[t]&&(o[t]=e[t]);return o}const Q={__name:"ProjectSettings",setup(n,{expose:e}){e();const o=N(),t=j(!1),v=j(!1),d=z({...c}),s=j({...c}),p=M(()=>Object.keys(B(s.value,d)).length>0);async function f(){t.value=!0;try{const{output:m}=await o.execute("config get project",1e4),y=J(m);Object.assign(d,y),s.value={...y}}catch(m){/key not found/i.test(m.message)?(Object.assign(d,c),s.value={...c}):_.error("加载配置失败: "+m.message)}finally{t.value=!1}}function i(){Object.assign(d,s.value)}async function x(){const m=B(s.value,d),y=Object.keys(m);if(y.length===0){_.info("没有需要保存的修改");return}v.value=!0;let b=0,S=0;for(const l of y){const R=m[l],D=String(R).replace(/"/g,'\\"'),E=`config set project.${l} "${D}"`;try{const{output:P,exitCode:T}=await o.execute(E,1e4);T!==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} 项)`),s.value={...d}):b>0&&(_.warning(`部分保存成功:${b} 成功 / ${S} 失败`),await f())}I(()=>{f()});const k={ws:o,loading:t,saving:v,form:d,baseline:s,isDirty:p,loadConfig:f,resetForm:i,saveConfig:x,reactive:z,ref:j,computed:M,onMounted:I,get ReloadOutlined(){return W},get FolderOutlined(){return L},get message(){return _},get useWsStore(){return N},get parseProjectConfig(){return J},get diffProjectConfig(){return B},get PROJECT_DEFAULTS(){return c}};return Object.defineProperty(k,"__isScriptSetup",{enumerable:!1,value:!0}),k}},X={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},Z={style:{color:"var(--text-primary)"}},q={key:0,style:{color:"#faad14","font-size":"12px","margin-left":"8px"}};function G(n,e,o,t,v,d){const s=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"),y=u("a-form"),b=u("a-spin"),S=u("a-card");return O(),h("div",null,[g("div",X,[e[5]||(e[5]=g("div",null,[g("h2",{class:"page-title"},"项目存储配置"),g("p",{class:"page-sub"},"根目录 / 配额 / 自动同步")],-1)),a(s,{loading:t.loading,onClick:t.loadConfig},{icon:r(()=>[a(t.ReloadOutlined)]),default:r(()=>[e[4]||(e[4]=w(" 刷新 ",-1))]),_:1},8,["loading"])]),a(p,{message:"仅 Web 模式",description:"目录选择器(原生文件对话框)仅在桌面端可用,本页面需手动输入路径。修改根目录后需重启桌面应用生效;web 端只影响后端配置文件。",type:"info","show-icon":"",closable:"",style:{"margin-bottom":"16px"}}),a(S,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{title:r(()=>[g("span",Z,[a(t.FolderOutlined,{style:{"margin-right":"8px"}}),e[6]||(e[6]=w("项目存储 ",-1))])]),default:r(()=>[a(b,{spinning:t.loading},{default:r(()=>[a(y,{"label-col":{span:6},"wrapper-col":{span:18},style:{"max-width":"720px"}},{default:r(()=>[a(i,{label:"项目根目录"},{extra:r(()=>[...e[7]||(e[7]=[g("span",{style:{color:"var(--text-muted)","font-size":"11px"}}," 需绝对路径;修改后重启桌面应用生效 ",-1)])]),default:r(()=>[a(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}),a(i,{label:"最大项目大小"},{default:r(()=>[a(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}),a(i,{label:"自动同步"},{default:r(()=>[a(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]=g("span",{style:{"margin-left":"12px",color:"var(--text-secondary)","font-size":"12px"}}," 自动同步项目到后端服务器 ",-1))]),_:1}),t.form.autoSync?(O(),V(i,{key:0,label:"同步间隔"},{default:r(()=>[a(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),a(i,{"wrapper-col":{offset:6,span:18}},{default:r(()=>[a(m,null,{default:r(()=>[a(s,{onClick:t.resetForm,disabled:t.saving||t.loading},{default:r(()=>[...e[9]||(e[9]=[w(" 重置 ",-1)])]),_:1},8,["disabled"]),a(s,{type:"primary",loading:t.saving,disabled:!t.isDirty,onClick:t.saveConfig},{default:r(()=>[...e[10]||(e[10]=[w(" 保存配置 ",-1)])]),_:1},8,["loading","disabled"]),t.isDirty?(O(),h("span",q," 有未保存的修改 ")):F("v-if",!0)]),_:1})]),_:1})]),_:1})]),_:1},8,["spinning"])]),_:1})])}const ee=A(Q,[["render",G],["__scopeId","data-v-f4cc2f66"],["__file","/tmp/cc-web-panel-eXzh0Z/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-1iacQgo5.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 Y=await e.sendRaw({...f,type:o},ae);if(!Y?.ok){const $=Y?.error;throw new Error(typeof $=="string"?$:$?.message||`${o} failed`)}return Y.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 K(o){switch(o){case"synced":return"green";case"pending":return"orange";case"conflict":return"red";case"error":return"red";default:return"default"}}function Q(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 X(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 Z(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 G(){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(""),H=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){H.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{H.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:K,formatTime:Q,loadAll:C,onRowClick:X,openDetail:V,onDelete:Z,onShowCreate:G,onCreate:T,createFileOpen:b,creatingFile:D,newFile:j,createFolderOpen:h,creatingFolder:m,newFolder:R,editFileOpen:n,editingFile:c,editFileContent:q,savingFile:H,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"),K=i("a-descriptions"),Q=i("a-divider"),C=i("a-empty"),X=i("a-list-item"),V=i("a-list"),Z=i("a-spin"),G=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(G,{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(K,{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(Q,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(Z,{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(X,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-eXzh0Z/repo/packages/web-panel/src/views/Projects.vue"]]);export{We as default};
@@ -0,0 +1 @@
1
+ import{E as N,r as k,I as m,J as F,U as d,c as i,K as l,V as u,S,F as R,Z as q,o as I,a as A,P as g,Q as x,R as C,_ as E}from"./vendor-BvqAck49.js";import{u as M,_ as H,d as _}from"./index-1iacQgo5.js";import{a as D,b as W,c as j}from"./parsers-UEvh_ShA.js";import{R as Z}from"./icons-DP3uiYxy.js";const B=N("providers",()=>{const K=k(!1),o=k(null),v=k([]),e=k([]),w=k(null);async function U(){const s=M();K.value=!0;try{const{output:f}=await s.execute("llm providers",15e3);v.value=D(f);const p=v.value.find(h=>h.active);p&&(w.value=p.name);const{output:b}=await s.execute("llm models",15e3);e.value=W(b)}catch(f){console.error("Failed to load providers:",f)}finally{K.value=!1}}async function y(s){await M().execute(`llm switch ${s}`,1e4),v.value.forEach(p=>p.active=p.name===s),w.value=s}async function a(s){const f=M();o.value=s;try{const{output:p,exitCode:b}=await f.execute("llm test",3e4),h=v.value.find(L=>L.name===s);return h&&(h.status=b===0?"ok":"error"),b===0}catch{const p=v.value.find(b=>b.name===s);return p&&(p.status="error"),!1}finally{o.value=null}}return{loading:K,testing:o,providers:v,localModels:e,activeProvider:w,loadProviders:U,switchProvider:y,testProvider:a}}),J={__name:"Providers",setup(K,{expose:o}){o();const v=B(),e=M(),w=k(!1),U=k(!1),y=k(!1),a=A({provider:void 0,model:"",apiKey:"",baseUrl:"",temperature:.7,maxTokens:4096});let s={};const f=["ollama","openai","anthropic","volcengine","deepseek","gemini","groq","mistral","custom","zhipu"],p={ollama:"Ollama(本地)",openai:"OpenAI",anthropic:"Anthropic",volcengine:"火山引擎(豆包)",deepseek:"DeepSeek",gemini:"Google Gemini",groq:"Groq",mistral:"Mistral",custom:"Custom(自定义)",zhipu:"智谱 AI"},b=f.map(n=>({value:n,label:p[n]||n}));async function h(n){try{await v.switchProvider(n),_.success(`已切换到 ${n}`)}catch(t){_.error(`切换失败: ${t.message}`)}}async function L(n){await v.testProvider(n)?_.success(`${n} 连接正常`):_.warning(`${n} 连接失败,请检查配置`)}async function z(){w.value=!0;try{const{output:n}=await e.execute("config list",15e3),t=j(n);t.provider&&(a.provider=t.provider),t.model&&(a.model=t.model),t.apiKey&&(a.apiKey=t.apiKey),t.baseUrl&&(a.baseUrl=t.baseUrl),t.temperature!==void 0&&(a.temperature=t.temperature),t.maxTokens!==void 0&&(a.maxTokens=t.maxTokens),s={provider:t.provider??"",model:t.model??"",apiKey:t.apiKey??"",baseUrl:t.baseUrl??"",temperature:t.temperature??a.temperature,maxTokens:t.maxTokens??a.maxTokens},_.success("配置已加载")}catch(n){_.error(`加载配置失败: ${n.message}`)}finally{w.value=!1}}async function O(){U.value=!0;const n=[],t=[];try{if(a.provider&&a.provider!==s.provider)try{await e.execute(`config set llm.provider ${a.provider}`,1e4),t.push("provider")}catch(c){n.push(`provider: ${c.message}`)}if(a.model&&a.model!==s.model)try{await e.execute(`config set llm.model ${a.model}`,1e4),t.push("model")}catch(c){n.push(`model: ${c.message}`)}if(a.apiKey&&a.apiKey!==s.apiKey)try{await e.execute(`config set llm.apiKey ${a.apiKey}`,1e4),t.push("apiKey")}catch(c){n.push(`apiKey: ${c.message}`)}if(a.baseUrl!==void 0&&a.baseUrl!==s.baseUrl)try{await e.execute(`config set llm.baseUrl ${a.baseUrl}`,1e4),t.push("baseUrl")}catch(c){n.push(`baseUrl: ${c.message}`)}if(a.temperature!==s.temperature)try{await e.execute(`config set llm.temperature ${a.temperature}`,1e4),t.push("temperature")}catch(c){n.push(`temperature: ${c.message}`)}if(a.maxTokens!==s.maxTokens)try{await e.execute(`config set llm.maxTokens ${a.maxTokens}`,1e4),t.push("maxTokens")}catch(c){n.push(`maxTokens: ${c.message}`)}n.length>0?_.warning(`部分配置保存失败: ${n.join("; ")}`):t.length>0?(_.success(`已保存 ${t.length} 项配置`),s={...a},(t.includes("apiKey")||t.includes("provider")||t.includes("baseUrl")||t.includes("model"))&&(y.value=!0),t.includes("provider")&&v.loadProviders()):_.info("没有检测到配置变更")}catch(c){_.error(`保存配置失败: ${c.message}`)}finally{U.value=!1}}function P(){a.provider=s.provider||void 0,a.model=s.model||"",a.apiKey=s.apiKey||"",a.baseUrl=s.baseUrl||"",a.temperature=s.temperature??.7,a.maxTokens=s.maxTokens??4096}I(()=>{v.loadProviders(),z()});const T={providersStore:v,ws:e,configLoading:w,configSaving:U,showRestartHint:y,configForm:a,get loadedConfig(){return s},set loadedConfig(n){s=n},knownProviders:f,providerLabels:p,providerOptions:b,switchProvider:h,test:L,loadConfig:z,saveConfig:O,resetForm:P,onMounted:I,reactive:A,ref:k,get ReloadOutlined(){return Z},get message(){return _},get useProvidersStore(){return B},get useWsStore(){return M},get parseLlmConfigOutput(){return j}};return Object.defineProperty(T,"__isScriptSetup",{enumerable:!1,value:!0}),T}},Q={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},X={key:1,style:{"text-align":"center",padding:"60px"}},Y={class:"providers-grid"},$={style:{display:"flex","align-items":"center",gap:"12px","margin-bottom":"12px"}},ee={style:{"font-size":"24px"}},oe={style:{flex:"1"}},ae={style:{color:"#e0e0e0","font-weight":"500"}},te={style:{color:"var(--text-secondary)","font-size":"11px","font-family":"monospace"}},re={style:{display:"flex",gap:"8px","justify-content":"flex-end"}},se={key:0,style:{"margin-top":"24px"}},ne={style:{color:"#ccc","font-family":"monospace","font-size":"13px"}},ie={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"16px"}},le={class:"config-grid"},de={style:{display:"flex","align-items":"center",gap:"12px"}},ce={style:{display:"flex",gap:"12px","justify-content":"flex-end","margin-top":"16px"}};function me(K,o,v,e,w,U){const y=m("a-button"),a=m("a-alert"),s=m("a-spin"),f=m("a-tag"),p=m("a-badge"),b=m("a-card"),h=m("a-list-item"),L=m("a-list"),z=m("a-divider"),O=m("a-select"),P=m("a-form-item"),T=m("a-input"),n=m("a-input-password"),t=m("a-slider"),c=m("a-input-number"),V=m("a-form");return g(),F("div",null,[d("div",Q,[o[10]||(o[10]=d("div",null,[d("h2",{class:"page-title"},"LLM 配置"),d("p",{class:"page-sub"},"管理 AI 服务提供商")],-1)),i(y,{type:"primary",ghost:"",loading:e.providersStore.loading,onClick:o[0]||(o[0]=r=>e.providersStore.loadProviders())},{icon:l(()=>[i(e.ReloadOutlined)]),default:l(()=>[o[9]||(o[9]=x(" 刷新 ",-1))]),_:1},8,["loading"])]),u(" Active Provider Banner "),e.providersStore.activeProvider?(g(),S(a,{key:0,type:"success",style:{"margin-bottom":"20px",background:"rgba(41,162,112,.08)","border-color":"rgba(41,162,112,.3)"},"show-icon":""},{message:l(()=>[d("span",null,[o[11]||(o[11]=x("当前激活:",-1)),d("strong",null,C(e.providersStore.activeProvider),1)])]),_:1})):u("v-if",!0),u(" Loading "),e.providersStore.loading?(g(),F("div",X,[i(s,{size:"large"}),o[12]||(o[12]=d("div",{style:{color:"var(--text-muted)","margin-top":"12px"}},"加载 LLM 信息中...",-1))])):(g(),F(R,{key:2},[u(" Providers Grid "),d("div",null,[d("div",Y,[(g(!0),F(R,null,q(e.providersStore.providers,r=>(g(),S(b,{key:r.name,class:E(["provider-card",{active:r.active}]),style:{background:"var(--bg-card)"},size:"small"},{default:l(()=>[d("div",$,[d("span",ee,C(r.icon),1),d("div",oe,[d("div",ae,C(r.label),1),d("div",te,C(r.name),1)]),d("div",null,[r.active?(g(),S(f,{key:0,color:"green"},{default:l(()=>[...o[13]||(o[13]=[x("活跃",-1)])]),_:1})):r.status==="ok"?(g(),S(p,{key:1,status:"success",text:""})):r.status==="error"?(g(),S(p,{key:2,status:"error",text:""})):u("v-if",!0)])]),d("div",re,[i(y,{size:"small",style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"},loading:e.providersStore.testing===r.name,onClick:G=>e.test(r.name)},{default:l(()=>[...o[14]||(o[14]=[x(" 测试 ",-1)])]),_:1},8,["loading","onClick"]),r.active?(g(),S(f,{key:1,color:"green",style:{margin:"0","line-height":"24px"}},{default:l(()=>[...o[16]||(o[16]=[x("当前",-1)])]),_:1})):(g(),S(y,{key:0,size:"small",type:"primary",ghost:"",onClick:G=>e.switchProvider(r.name)},{default:l(()=>[...o[15]||(o[15]=[x(" 切换 ",-1)])]),_:1},8,["onClick"]))])]),_:2},1032,["class"]))),128))]),u(" Local Models (Ollama) "),e.providersStore.localModels.length?(g(),F("div",se,[o[17]||(o[17]=d("h3",{style:{color:"#ccc","font-size":"15px","margin-bottom":"12px"}}," 本地模型(Ollama) ",-1)),i(L,{"data-source":e.providersStore.localModels,size:"small",style:{background:"var(--bg-card)","border-radius":"8px",border:"1px solid var(--border-color)"}},{renderItem:l(({item:r})=>[i(h,{style:{padding:"10px 16px","border-color":"#252525"}},{actions:l(()=>[i(f,{color:"cyan",style:{"font-size":"10px"}},{default:l(()=>[x(C(r.size||"local"),1)]),_:2},1024)]),default:l(()=>[d("span",ne,C(r.name),1)]),_:2},1024)]),_:1},8,["data-source"])])):u("v-if",!0),u(" LLM Parameter Settings "),i(z,{style:{"border-color":"var(--border-color)",margin:"32px 0 24px"}}),e.showRestartHint?(g(),S(a,{key:1,type:"warning","show-icon":"",closable:"",style:{"margin-bottom":"16px"},message:"配置已保存,但当前聊天会话仍在用旧 key",description:"桌面端的 LLM 会话只在新建会话时重读配置。请新建一个 Chat,或重启应用,新 key/Provider 才会生效。",onClose:o[1]||(o[1]=r=>e.showRestartHint=!1)})):u("v-if",!0),d("div",ie,[o[19]||(o[19]=d("h3",{class:"section-title"},"LLM 参数设置",-1)),i(y,{size:"small",loading:e.configLoading,onClick:e.loadConfig,style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:l(()=>[i(e.ReloadOutlined)]),default:l(()=>[o[18]||(o[18]=x(" 加载配置 ",-1))]),_:1},8,["loading"])]),i(b,{class:"config-card",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:l(()=>[i(V,{model:e.configForm,layout:"vertical",class:"config-form"},{default:l(()=>[d("div",le,[u(" Provider "),i(P,{label:"Provider(提供商)"},{default:l(()=>[i(O,{value:e.configForm.provider,"onUpdate:value":o[2]||(o[2]=r=>e.configForm.provider=r),placeholder:"选择 LLM 提供商",options:e.providerOptions,style:{width:"100%"},disabled:e.configSaving},null,8,["value","options","disabled"])]),_:1}),u(" Model "),i(P,{label:"Model(模型名称)"},{default:l(()=>[i(T,{value:e.configForm.model,"onUpdate:value":o[3]||(o[3]=r=>e.configForm.model=r),placeholder:"例如 doubao-seed-1-6-251015","allow-clear":"",disabled:e.configSaving},null,8,["value","disabled"])]),_:1}),u(" API Key "),i(P,{label:"API Key"},{default:l(()=>[i(n,{value:e.configForm.apiKey,"onUpdate:value":o[4]||(o[4]=r=>e.configForm.apiKey=r),placeholder:"输入 API Key",disabled:e.configSaving},null,8,["value","disabled"])]),_:1}),u(" Base URL "),i(P,{label:"Base URL"},{default:l(()=>[i(T,{value:e.configForm.baseUrl,"onUpdate:value":o[5]||(o[5]=r=>e.configForm.baseUrl=r),placeholder:"例如 https://ark.cn-beijing.volces.com/api/v3","allow-clear":"",disabled:e.configSaving},null,8,["value","disabled"])]),_:1}),u(" Temperature "),i(P,{label:"Temperature(温度)"},{default:l(()=>[d("div",de,[i(t,{value:e.configForm.temperature,"onUpdate:value":o[6]||(o[6]=r=>e.configForm.temperature=r),min:0,max:2,step:.1,style:{flex:"1"},disabled:e.configSaving},null,8,["value","disabled"]),i(c,{value:e.configForm.temperature,"onUpdate:value":o[7]||(o[7]=r=>e.configForm.temperature=r),min:0,max:2,step:.1,precision:1,style:{width:"80px"},disabled:e.configSaving},null,8,["value","disabled"])])]),_:1}),u(" Max Tokens "),i(P,{label:"Max Tokens(最大输出长度)"},{default:l(()=>[i(c,{value:e.configForm.maxTokens,"onUpdate:value":o[8]||(o[8]=r=>e.configForm.maxTokens=r),min:256,max:128e3,step:256,style:{width:"100%"},placeholder:"4096",disabled:e.configSaving},null,8,["value","disabled"])]),_:1})]),d("div",ce,[i(y,{onClick:e.resetForm,disabled:e.configSaving,style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{default:l(()=>[...o[20]||(o[20]=[x(" 重置 ",-1)])]),_:1},8,["disabled"]),i(y,{type:"primary",loading:e.configSaving,onClick:e.saveConfig},{default:l(()=>[...o[21]||(o[21]=[x(" 保存配置 ",-1)])]),_:1},8,["loading"])])]),_:1},8,["model"])]),_:1})])],2112))])}const ge=H(J,[["render",me],["__scopeId","data-v-64155d06"],["__file","/tmp/cc-web-panel-eXzh0Z/repo/packages/web-panel/src/views/Providers.vue"]]);export{ge as default};
@@ -1 +1 @@
1
- import{I as _,J as m,U as v,R as l,c as p,K as u,S as w,V as k,r as h,P as i,a1 as D,a2 as E,Q as b}from"./vendor-BvqAck49.js";import{u as P,_ as Q}from"./index-D9ImwlR4.js";import{b as V,f as B,S as K,al as T}from"./icons-DP3uiYxy.js";function L(){const n=[];let a=null,d=!1,e=null;return{push(o){if(n.push(o),a){const t=a;a=null,t()}},finish(o){if(d=!0,e=o||null,a){const t=a;a=null,t()}},async*iterate(){for(;;){for(;n.length>0;)yield n.shift();if(d){if(e)throw e;return}await new Promise(o=>{a=o})}}}}function N(){const n=P();function a(e){if(!e||!Array.isArray(e.messages))throw new Error("messages array is required");const o=L(),t=new AbortController;e.signal&&(e.signal.aborted?t.abort(e.signal.reason):e.signal.addEventListener("abort",()=>t.abort(e.signal.reason),{once:!0}));const s=n.sendStream({type:"llm.chat",messages:e.messages,options:e.options||{}},{onChunk:r=>o.push(r),idleMs:e.idleMs??6e4,signal:t.signal}).then(r=>(o.finish(null),r),r=>{throw o.finish(r),r});function c(){t.signal.aborted||t.abort(new Error("aborted"))}return{stream:o.iterate(),result:s,cancel:c}}async function d(e){const o=typeof e.onDelta=="function"?e.onDelta:()=>{},{stream:t,result:s}=a(e);try{for await(const c of t)o(c)}catch{}return s}return{chat:a,chatTo:d}}const U={__name:"QuickAsk",setup(n,{expose:a}){a();const d=N(),e=h(""),o=h(""),t=h(""),s=h(!1),c=h(""),r=h(null);let f=null;async function C(){if(!(s.value||!e.value.trim())){s.value=!0,t.value="",c.value="",r.value=null;try{const y=[{role:"user",content:e.value}],M={},z=o.value.trim();z&&(M.model=z);const x=d.chat({messages:y,options:M});f=x;try{for await(const S of x.stream)S?.content?t.value=S.content:S?.delta&&(t.value+=S.delta)}catch{}const A=await x.result;r.value={model:A?.model||null,tokens:A?.tokens??null},!t.value&&A?.message?.content&&(t.value=A.message.content)}catch(y){c.value=y?.message||String(y)}finally{s.value=!1,f=null}}}function q(){f?.cancel&&f.cancel()}function g(){t.value="",c.value="",r.value=null}const O={llm:d,prompt:e,model:o,answer:t,running:s,error:c,finalMeta:r,get activeChat(){return f},set activeChat(y){f=y},run:C,cancel:q,reset:g,ref:h,get SendOutlined(){return T},get SyncOutlined(){return K},get CheckCircleOutlined(){return B},get CloseOutlined(){return V},get useLlmChat(){return N}};return Object.defineProperty(O,"__isScriptSetup",{enumerable:!1,value:!0}),O}},j={style:{"margin-bottom":"24px"}},F={class:"page-title"},I={class:"page-sub"},J={style:{display:"flex","justify-content":"space-between","align-items":"center","margin-top":"12px"}},R={style:{display:"flex",gap:"8px","align-items":"center",color:"var(--text-muted)","font-size":"11px"}},W={key:0},G={key:1},H={key:2},X={key:0,style:{color:"#1677ff","font-size":"11px"}},Y={key:1,style:{color:"#52c41a","font-size":"11px"}},Z={key:0,style:{margin:"0","white-space":"pre-wrap","font-family":"var(--font-body, system-ui)","font-size":"13px"}},$={key:2,style:{background:"#2a1517",border:"1px solid #5c2426",padding:"8px","border-radius":"4px","margin-top":"8px"}},ee={style:{color:"#ff7875","font-size":"11px",margin:"0","white-space":"pre-wrap"}};function ne(n,a,d,e,o,t){const s=_("a-textarea"),c=_("a-input"),r=_("a-button"),f=_("a-space"),C=_("a-card"),q=_("a-empty");return i(),m("div",null,[v("div",j,[v("h2",F,l(n.$t("quickAsk.title")),1),v("p",I,l(n.$t("quickAsk.subtitle")),1)]),p(C,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:u(()=>[p(s,{value:e.prompt,"onUpdate:value":a[0]||(a[0]=g=>e.prompt=g),rows:4,placeholder:n.$t("quickAsk.promptPlaceholder"),disabled:e.running,onKeydown:[D(E(e.run,["ctrl","prevent"]),["enter"]),D(E(e.run,["meta","prevent"]),["enter"])]},null,8,["value","placeholder","disabled","onKeydown"]),v("div",J,[v("div",R,[p(c,{value:e.model,"onUpdate:value":a[1]||(a[1]=g=>e.model=g),placeholder:n.$t("quickAsk.modelPlaceholder"),size:"small",style:{width:"200px"},disabled:e.running,"allow-clear":""},null,8,["value","placeholder","disabled"]),e.answer?(i(),m("span",W,l(e.answer.length)+" "+l(n.$t("quickAsk.charsSuffix")),1)):k("v-if",!0),e.finalMeta?(i(),m("span",G,"· "+l(e.finalMeta.tokens??0)+" "+l(n.$t("quickAsk.tokensSuffix")),1)):k("v-if",!0),e.finalMeta?.model?(i(),m("span",H,"· "+l(e.finalMeta.model),1)):k("v-if",!0)]),p(f,null,{default:u(()=>[e.answer||e.error?(i(),w(r,{key:0,disabled:e.running,onClick:e.reset},{default:u(()=>[b(l(n.$t("quickAsk.clear")),1)]),_:1},8,["disabled"])):k("v-if",!0),e.running?(i(),w(r,{key:1,danger:"",onClick:e.cancel},{icon:u(()=>[p(e.CloseOutlined)]),default:u(()=>[b(" "+l(n.$t("quickAsk.cancel")),1)]),_:1})):(i(),w(r,{key:2,type:"primary",disabled:!e.prompt.trim(),onClick:e.run},{icon:u(()=>[p(e.SendOutlined)]),default:u(()=>[b(" "+l(n.$t("quickAsk.send")),1)]),_:1},8,["disabled"]))]),_:1})])]),_:1}),e.answer||e.running||e.error?(i(),w(C,{key:0,title:n.$t("quickAsk.answerCardTitle"),style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-top":"16px"}},{extra:u(()=>[e.running?(i(),m("span",X,[p(e.SyncOutlined,{spin:!0}),b(" "+l(n.$t("quickAsk.streaming")),1)])):e.finalMeta?(i(),m("span",Y,[p(e.CheckCircleOutlined),b(" "+l(n.$t("quickAsk.done")),1)])):k("v-if",!0)]),default:u(()=>[e.answer?(i(),m("pre",Z,l(e.answer),1)):e.running?(i(),w(q,{key:1,description:n.$t("quickAsk.waitingFirstToken")},null,8,["description"])):k("v-if",!0),e.error?(i(),m("div",$,[v("pre",ee,l(e.error),1)])):k("v-if",!0)]),_:1},8,["title"])):k("v-if",!0)])}const re=Q(U,[["render",ne],["__file","/tmp/cc-web-panel-DNn50E/repo/packages/web-panel/src/views/QuickAsk.vue"]]);export{re as default};
1
+ import{I as _,J as m,U as v,R as l,c as p,K as u,S as w,V as k,r as h,P as i,a1 as P,a2 as Q,Q as b}from"./vendor-BvqAck49.js";import{u as B,_ as D}from"./index-1iacQgo5.js";import{b as E,f as K,S as N,al as T}from"./icons-DP3uiYxy.js";function L(){const n=[];let a=null,d=!1,e=null;return{push(o){if(n.push(o),a){const t=a;a=null,t()}},finish(o){if(d=!0,e=o||null,a){const t=a;a=null,t()}},async*iterate(){for(;;){for(;n.length>0;)yield n.shift();if(d){if(e)throw e;return}await new Promise(o=>{a=o})}}}}function V(){const n=B();function a(e){if(!e||!Array.isArray(e.messages))throw new Error("messages array is required");const o=L(),t=new AbortController;e.signal&&(e.signal.aborted?t.abort(e.signal.reason):e.signal.addEventListener("abort",()=>t.abort(e.signal.reason),{once:!0}));const s=n.sendStream({type:"llm.chat",messages:e.messages,options:e.options||{}},{onChunk:r=>o.push(r),idleMs:e.idleMs??6e4,signal:t.signal}).then(r=>(o.finish(null),r),r=>{throw o.finish(r),r});function c(){t.signal.aborted||t.abort(new Error("aborted"))}return{stream:o.iterate(),result:s,cancel:c}}async function d(e){const o=typeof e.onDelta=="function"?e.onDelta:()=>{},{stream:t,result:s}=a(e);try{for await(const c of t)o(c)}catch{}return s}return{chat:a,chatTo:d}}const U={__name:"QuickAsk",setup(n,{expose:a}){a();const d=V(),e=h(""),o=h(""),t=h(""),s=h(!1),c=h(""),r=h(null);let f=null;async function C(){if(!(s.value||!e.value.trim())){s.value=!0,t.value="",c.value="",r.value=null;try{const y=[{role:"user",content:e.value}],M={},z=o.value.trim();z&&(M.model=z);const x=d.chat({messages:y,options:M});f=x;try{for await(const S of x.stream)S?.content?t.value=S.content:S?.delta&&(t.value+=S.delta)}catch{}const A=await x.result;r.value={model:A?.model||null,tokens:A?.tokens??null},!t.value&&A?.message?.content&&(t.value=A.message.content)}catch(y){c.value=y?.message||String(y)}finally{s.value=!1,f=null}}}function q(){f?.cancel&&f.cancel()}function g(){t.value="",c.value="",r.value=null}const O={llm:d,prompt:e,model:o,answer:t,running:s,error:c,finalMeta:r,get activeChat(){return f},set activeChat(y){f=y},run:C,cancel:q,reset:g,ref:h,get SendOutlined(){return T},get SyncOutlined(){return N},get CheckCircleOutlined(){return K},get CloseOutlined(){return E},get useLlmChat(){return V}};return Object.defineProperty(O,"__isScriptSetup",{enumerable:!1,value:!0}),O}},j={style:{"margin-bottom":"24px"}},F={class:"page-title"},I={class:"page-sub"},J={style:{display:"flex","justify-content":"space-between","align-items":"center","margin-top":"12px"}},R={style:{display:"flex",gap:"8px","align-items":"center",color:"var(--text-muted)","font-size":"11px"}},W={key:0},X={key:1},Z={key:2},G={key:0,style:{color:"#1677ff","font-size":"11px"}},H={key:1,style:{color:"#52c41a","font-size":"11px"}},Y={key:0,style:{margin:"0","white-space":"pre-wrap","font-family":"var(--font-body, system-ui)","font-size":"13px"}},$={key:2,style:{background:"#2a1517",border:"1px solid #5c2426",padding:"8px","border-radius":"4px","margin-top":"8px"}},ee={style:{color:"#ff7875","font-size":"11px",margin:"0","white-space":"pre-wrap"}};function ne(n,a,d,e,o,t){const s=_("a-textarea"),c=_("a-input"),r=_("a-button"),f=_("a-space"),C=_("a-card"),q=_("a-empty");return i(),m("div",null,[v("div",j,[v("h2",F,l(n.$t("quickAsk.title")),1),v("p",I,l(n.$t("quickAsk.subtitle")),1)]),p(C,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:u(()=>[p(s,{value:e.prompt,"onUpdate:value":a[0]||(a[0]=g=>e.prompt=g),rows:4,placeholder:n.$t("quickAsk.promptPlaceholder"),disabled:e.running,onKeydown:[P(Q(e.run,["ctrl","prevent"]),["enter"]),P(Q(e.run,["meta","prevent"]),["enter"])]},null,8,["value","placeholder","disabled","onKeydown"]),v("div",J,[v("div",R,[p(c,{value:e.model,"onUpdate:value":a[1]||(a[1]=g=>e.model=g),placeholder:n.$t("quickAsk.modelPlaceholder"),size:"small",style:{width:"200px"},disabled:e.running,"allow-clear":""},null,8,["value","placeholder","disabled"]),e.answer?(i(),m("span",W,l(e.answer.length)+" "+l(n.$t("quickAsk.charsSuffix")),1)):k("v-if",!0),e.finalMeta?(i(),m("span",X,"· "+l(e.finalMeta.tokens??0)+" "+l(n.$t("quickAsk.tokensSuffix")),1)):k("v-if",!0),e.finalMeta?.model?(i(),m("span",Z,"· "+l(e.finalMeta.model),1)):k("v-if",!0)]),p(f,null,{default:u(()=>[e.answer||e.error?(i(),w(r,{key:0,disabled:e.running,onClick:e.reset},{default:u(()=>[b(l(n.$t("quickAsk.clear")),1)]),_:1},8,["disabled"])):k("v-if",!0),e.running?(i(),w(r,{key:1,danger:"",onClick:e.cancel},{icon:u(()=>[p(e.CloseOutlined)]),default:u(()=>[b(" "+l(n.$t("quickAsk.cancel")),1)]),_:1})):(i(),w(r,{key:2,type:"primary",disabled:!e.prompt.trim(),onClick:e.run},{icon:u(()=>[p(e.SendOutlined)]),default:u(()=>[b(" "+l(n.$t("quickAsk.send")),1)]),_:1},8,["disabled"]))]),_:1})])]),_:1}),e.answer||e.running||e.error?(i(),w(C,{key:0,title:n.$t("quickAsk.answerCardTitle"),style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-top":"16px"}},{extra:u(()=>[e.running?(i(),m("span",G,[p(e.SyncOutlined,{spin:!0}),b(" "+l(n.$t("quickAsk.streaming")),1)])):e.finalMeta?(i(),m("span",H,[p(e.CheckCircleOutlined),b(" "+l(n.$t("quickAsk.done")),1)])):k("v-if",!0)]),default:u(()=>[e.answer?(i(),m("pre",Y,l(e.answer),1)):e.running?(i(),w(q,{key:1,description:n.$t("quickAsk.waitingFirstToken")},null,8,["description"])):k("v-if",!0),e.error?(i(),m("div",$,[v("pre",ee,l(e.error),1)])):k("v-if",!0)]),_:1},8,["title"])):k("v-if",!0)])}const re=D(U,[["render",ne],["__file","/tmp/cc-web-panel-eXzh0Z/repo/packages/web-panel/src/views/QuickAsk.vue"]]);export{re as default};
@@ -0,0 +1 @@
1
+ import{I as y,J as _,U as b,R as i,c as n,K as r,V as u,o as ce,a as de,b as K,r as h,P as d,Q as p,S as k,F as A,Z as q,$ as Pe}from"./vendor-BvqAck49.js";import{_ as Ae,b as me,u as ue,E as fe,d as g}from"./index-1iacQgo5.js";import{t as W}from"./community-parser-Cuyslaku.js";import{o as ze,aV as Ue,aA as Re,aT as Ee,aW as Me,F as je,ak as Ne,aP as Je,R as De}from"./icons-DP3uiYxy.js";const Le=Object.freeze(["note","post","article","document"]),Be=Object.freeze(["pending","viewed","dismissed"]);function I(l,a=0){return typeof l=="number"&&Number.isFinite(l)?l:a}function pe(l){if(!l||typeof l!="object"||Array.isArray(l))return{};const a={};for(const[t,e]of Object.entries(l))typeof e=="number"&&Number.isFinite(e)&&(a[t]=e);return a}function We(l,a=0){if(!l||typeof l!="object")return null;const t=l.user_id??l.userId??"";if(!t)return null;const e=l.topics&&typeof l.topics=="object"&&!Array.isArray(l.topics)?pe(l.topics):{},U=l.interaction_weights??l.interactionWeights,M=U&&typeof U=="object"&&!Array.isArray(U)?pe(U):{};return{key:t,id:String(l.id||""),userId:t,topics:e,topicCount:Object.keys(e).length,interactionWeights:M,decayFactor:I(l.decay_factor??l.decayFactor,.9),lastUpdated:l.last_updated??l.lastUpdated??null,updateCount:I(l.update_count??l.updateCount,0),_idx:a}}function ye(l){const a=W(l);return Array.isArray(a)?a.map(We).filter(Boolean):[]}function Ye(l,a=0){if(!l||typeof l!="object")return null;const t=l.id||"";return t?{key:t,id:t,userId:l.user_id??l.userId??"",contentId:l.content_id??l.contentId??"",contentType:String(l.content_type??l.contentType??"note").toLowerCase(),title:String(l.title||""),score:I(l.score,0),reason:String(l.reason||""),source:String(l.source||"heuristic"),status:String(l.status||"pending").toLowerCase(),feedback:l.feedback??null,createdAt:l.created_at??l.createdAt??null,viewedAt:l.viewed_at??l.viewedAt??null,_idx:a}:null}function ge(l){const a=W(l);return Array.isArray(a)?a.map(Ye).filter(Boolean):[]}const Ve={total:0,pending:0,viewed:0,dismissed:0,feedbackCount:0,feedbackRate:0,avgScore:0};function _e(l){const a={...Ve},t=W(l);return!t||typeof t!="object"||Array.isArray(t)||(a.total=I(t.total,0),a.pending=I(t.pending,0),a.viewed=I(t.viewed,0),a.dismissed=I(t.dismissed,0),a.feedbackCount=I(t.feedbackCount,0),a.feedbackRate=I(t.feedbackRate,0),a.avgScore=I(t.avgScore,0)),a}function ve(l){const a=W(l);return Array.isArray(a)?a.filter(t=>t&&typeof t=="object"&&typeof t.topic=="string").map((t,e)=>({key:`${t.topic}-${e}`,topic:t.topic,weight:I(t.weight,0)})):[]}function ke(l){const a=W(l);return Array.isArray(a)?a.filter(t=>t&&typeof t=="object"&&typeof t.topic=="string"&&typeof t.action=="string").map((t,e)=>({key:`${t.topic}-${e}`,topic:t.topic,action:t.action,amount:I(t.amount,0)})):[]}function E(l){const a=W(l);return!a||typeof a!="object"||Array.isArray(a)?{ok:!1,reason:"",profileId:null,topicCount:null}:{ok:!!(a.updated||a.deleted||a.marked||a.dismissed||a.recorded||a.applied||a.profileId),reason:a.reason?String(a.reason):"",profileId:a.profileId?String(a.profileId):null,topicCount:typeof a.topicCount=="number"?a.topicCount:null}}function Ge(l){if(l==null||l==="")return"—";const a=typeof l=="number"?new Date(l):new Date(String(l));return isNaN(a.getTime())?String(l):a.toLocaleString("zh-CN",{hour12:!1})}const Ke={__name:"Recommend",setup(l,{expose:a}){a();const{t}=me(),e=ue(),U=fe.PRESENTED_IMAGE_SIMPLE,M=h(!1),w=h(!1),Y=h(!1),j=h([]),S=h([]),O=h({total:0,pending:0,viewed:0,dismissed:0,feedbackCount:0,feedbackRate:0,avgScore:0}),T=h([]),F=h([]),v=h(null),z=h("recs"),N=h(""),P=h(""),J=h(!1),D=h(!1),x=de({userId:"",topicsJson:"",weightsJson:""}),Q=h(null),Z=K(()=>j.value.map(o=>({value:o.userId,label:`${o.userId} (${t("recommend.userBar.topicSuffix",{count:o.topicCount})})`}))),H=K(()=>[{title:t("recommend.recColumns.title"),key:"title"},{title:t("recommend.recColumns.contentType"),key:"contentType",width:"110px"},{title:t("recommend.recColumns.score"),key:"score",width:"180px"},{title:t("recommend.recColumns.reason"),key:"reason",width:"220px"},{title:t("recommend.recColumns.status"),key:"status",width:"100px"},{title:t("recommend.recColumns.feedback"),key:"feedback",width:"90px"},{title:t("recommend.recColumns.action"),key:"action",width:"210px"}]),V=K(()=>[{title:t("recommend.profileColumns.userId"),key:"userId"},{title:t("recommend.profileColumns.topicCount"),key:"topicCount",width:"110px"},{title:t("recommend.profileColumns.decayFactor"),key:"decayFactor",width:"110px"},{title:t("recommend.profileColumns.updateCount"),key:"updateCount",width:"110px"},{title:t("recommend.profileColumns.lastUpdated"),key:"lastUpdated",width:"180px"},{title:t("recommend.profileColumns.action"),key:"action",width:"200px"}]),ee=K(()=>{let o=S.value;return N.value&&(o=o.filter(c=>c.status===N.value)),P.value&&(o=o.filter(c=>c.contentType===P.value)),o});function te(o){const c=`recommend.type.${o}`,f=t(c);return f===c?o:f}function oe(o){return{note:"blue",post:"green",article:"purple",document:"orange"}[o]||"default"}function re(o){return{note:"#1677ff",post:"#52c41a",article:"#722ed1",document:"#fa8c16"}[o]||"#888"}function G(o){const c=`recommend.status.${o}`,f=t(c);return f===c?o:f}function X(o){return{pending:"processing",viewed:"green",dismissed:"default"}[o]||"default"}function ne(o){const c=`recommend.feedbackLabel.${o}`,f=t(c);return f===c?o:f}function $(o){return{like:"green",dislike:"red",later:"gold"}[o]||"default"}function R(o){return o>=.7?"#52c41a":o>=.4?"#1677ff":o>=.2?"#faad14":"#ff4d4f"}function ae(o){return o>=.7?"#52c41a":o>=.4?"#1677ff":o>=.2?"#faad14":"#888"}function s(o){try{return JSON.stringify(o,null,2)}catch{return String(o)}}async function m(){M.value=!0;try{const{output:o}=await e.execute("recommend profiles --json",1e4).catch(()=>({output:""}));j.value=ye(o),v.value&&!j.value.find(c=>c.userId===v.value)&&(v.value=null),v.value&&await C()}catch(o){g.error(t("recommend.messages.loadProfilesFailed",{err:o?.message||o}))}finally{M.value=!1}}async function C(){if(!v.value){S.value=[],O.value={total:0,pending:0,viewed:0,dismissed:0,feedbackCount:0,feedbackRate:0,avgScore:0},T.value=[];return}w.value=!0;try{const o=L(v.value),[c,f,B]=await Promise.all([e.execute(`recommend list ${o} --limit 200 --json`,1e4).catch(()=>({output:""})),e.execute(`recommend stats ${o} --json`,8e3).catch(()=>({output:""})),e.execute(`recommend top-interests ${o} --limit 30 --json`,8e3).catch(()=>({output:""}))]);S.value=ge(c.output),O.value=_e(f.output),T.value=ve(B.output)}catch(o){g.error(t("recommend.messages.loadUserFailed",{err:o?.message||o}))}finally{w.value=!1}}function L(o){return`"${String(o).replace(/"/g,'\\"')}"`}function be(){F.value=[],C()}function xe(o){v.value=o,z.value="recs",C()}async function he(){if(!x.userId.trim()){g.warning(t("recommend.messages.userIdRequired"));return}if(x.topicsJson.trim())try{JSON.parse(x.topicsJson)}catch{g.warning(t("recommend.messages.topicsJsonInvalid"));return}if(x.weightsJson.trim())try{JSON.parse(x.weightsJson)}catch{g.warning(t("recommend.messages.weightsJsonInvalid"));return}Y.value=!0;try{const o=[`recommend create-profile ${L(x.userId.trim())}`];x.topicsJson.trim()&&o.push(`-t ${se(x.topicsJson.trim())}`),x.weightsJson.trim()&&o.push(`-w ${se(x.weightsJson.trim())}`),o.push("--json");const{output:c}=await e.execute(o.join(" "),1e4),f=E(c);if(!f.ok){g.error(t("recommend.messages.createFailed",{err:f.reason||c.slice(0,120)}));return}g.success(t("recommend.messages.createOk",{id:f.profileId?.slice(0,8)||""})),J.value=!1;const B=x.userId.trim();le(),await m(),v.value=B,await C()}catch(o){g.error(t("recommend.messages.createFailed",{err:o?.message||o}))}finally{Y.value=!1}}function se(o){return`'${String(o).replace(/'/g,"'\\''")}'`}async function Ce(){if(v.value)try{const{output:o}=await e.execute(`recommend decay ${L(v.value)} --json`,8e3),c=E(o);if(!c.ok){g.error(t("recommend.messages.decayFailed",{err:c.reason||o.slice(0,120)}));return}g.success(c.topicCount!==null?t("recommend.messages.decayOkTopics",{count:c.topicCount}):t("recommend.messages.decayOk")),await m()}catch(o){g.error(t("recommend.messages.decayFailed",{err:o?.message||o}))}}async function we(){if(v.value)try{const{output:o}=await e.execute(`recommend suggest ${L(v.value)} --json`,8e3);F.value=ke(o),z.value="interests",F.value.length?g.success(t("recommend.messages.suggestFound",{count:F.value.length})):g.info(t("recommend.messages.suggestNone"))}catch(o){g.error(t("recommend.messages.loadSuggestFailed",{err:o?.message||o}))}}async function Se(o){try{const{output:c}=await e.execute(`recommend delete-profile ${L(o.userId)} --json`,8e3),f=E(c);if(!f.ok){g.error(t("recommend.messages.deleteFailed",{err:f.reason||c.slice(0,120)}));return}g.success(t("recommend.messages.deleteOk")),v.value===o.userId&&(v.value=null),await m()}catch(c){g.error(t("recommend.messages.deleteFailed",{err:c?.message||c}))}}function Te(o){Q.value=o,D.value=!0}async function Ie(o){try{const{output:c}=await e.execute(`recommend view ${o.id} --json`,8e3),f=E(c);if(!f.ok){g.error(t("recommend.messages.viewFailed",{err:f.reason||c.slice(0,120)}));return}g.success(t("recommend.messages.viewOk")),await C()}catch(c){g.error(t("recommend.messages.viewFailed",{err:c?.message||c}))}}async function Oe(o,c){try{const{output:f}=await e.execute(`recommend feedback ${o.id} ${c} --json`,8e3),B=E(f);if(!B.ok){g.error(t("recommend.messages.feedbackFailed",{err:B.reason||f.slice(0,120)}));return}g.success(t("recommend.messages.feedbackOk")),await C()}catch(f){g.error(t("recommend.messages.feedbackFailed",{err:f?.message||f}))}}async function Fe(o){try{const{output:c}=await e.execute(`recommend dismiss ${o.id} --json`,8e3),f=E(c);if(!f.ok){g.error(t("recommend.messages.dismissFailed",{err:f.reason||c.slice(0,120)}));return}g.success(t("recommend.messages.dismissOk")),await C()}catch(c){g.error(t("recommend.messages.dismissFailed",{err:c?.message||c}))}}function le(){x.userId="",x.topicsJson="",x.weightsJson=""}ce(m);const ie={t,ws:e,EMPTY_IMG:U,loading:M,loadingRecs:w,creating:Y,profiles:j,recs:S,userStats:O,topInterests:T,suggestions:F,selectedUser:v,activeTab:z,statusFilter:N,typeFilter:P,showCreateProfileModal:J,showDetailsModal:D,createForm:x,currentProfile:Q,userOptions:Z,recColumns:H,profileColumns:V,filteredRecs:ee,typeLabel:te,typeColor:oe,typeBarColor:re,statusLabel:G,statusColor:X,feedbackLabel:ne,feedbackColor:$,scoreColor:R,weightColor:ae,formatJson:s,loadAll:m,loadUserData:C,encodeArg:L,onUserChange:be,selectAndSwitch:xe,submitCreateProfile:he,shellQuote:se,applyDecay:Ce,loadSuggestions:we,deleteProfile:Se,viewProfileDetails:Te,markViewed:Ie,provideFeedback:Oe,dismissRec:Fe,resetCreateForm:le,ref:h,computed:K,onMounted:ce,reactive:de,get useI18n(){return me},get ReloadOutlined(){return De},get UserAddOutlined(){return Je},get UserOutlined(){return Ne},get FireOutlined(){return je},get EyeInvisibleOutlined(){return Me},get LikeOutlined(){return Ee},get StarOutlined(){return Re},get FieldTimeOutlined(){return Ue},get BulbOutlined(){return ze},get message(){return g},get Empty(){return fe},get useWsStore(){return ue},get parseProfiles(){return ye},get parseRecommendations(){return ge},get parseUserStats(){return _e},get parseTopInterests(){return ve},get parseSuggestions(){return ke},get parseActionResult(){return E},get formatRecommendTime(){return Ge},get CONTENT_TYPE_IDS(){return Le},get RECOMMENDATION_STATUSES(){return Be}};return Object.defineProperty(ie,"__isScriptSetup",{enumerable:!1,value:!0}),ie}},qe={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},Qe={class:"page-title"},Ze={class:"page-sub"},He={style:{display:"flex","align-items":"center",gap:"12px","flex-wrap":"wrap"}},Xe={style:{color:"var(--text-secondary)","font-size":"12px"}},$e={class:"type-name"},et={class:"filter-bar"},tt={style:{color:"var(--text-primary)","font-weight":"500"}},ot={style:{color:"var(--text-muted)","font-size":"11px","margin-top":"2px"}},rt={key:3,style:{color:"var(--text-secondary)","font-size":"12px"}},nt={key:1,style:{color:"var(--text-muted)"}},at={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},st={key:0,style:{color:"var(--text-primary)","font-family":"monospace","font-weight":"500"}},lt={key:2,style:{color:"var(--text-secondary)","font-family":"monospace","font-size":"12px"}},it={key:3,style:{color:"var(--text-secondary)"}},ct={key:4,style:{color:"var(--text-secondary)","font-size":"11px"}},dt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},mt={key:1},ut={class:"interest-topic"},ft={style:{"margin-left":"8px","font-family":"monospace",color:"var(--text-primary)"}},pt={style:{"margin-left":"auto",color:"var(--text-secondary)","font-size":"12px"}},yt={key:0,style:{"padding-top":"8px"}},gt={style:{"font-family":"monospace","font-size":"12px"}},_t={style:{color:"var(--text-primary)","font-size":"13px",margin:"16px 0 8px"}},vt={key:1},kt={class:"interest-topic"},bt={key:2,style:{color:"var(--text-primary)","font-size":"13px",margin:"16px 0 8px"}},xt={key:3,class:"weights-pre"};function ht(l,a,t,e,U,M){const w=y("a-button"),Y=y("a-space"),j=y("a-select"),S=y("a-card"),O=y("a-statistic"),T=y("a-col"),F=y("a-row"),v=y("a-tag"),z=y("a-radio-button"),N=y("a-radio-group"),P=y("a-empty"),J=y("a-progress"),D=y("a-menu-item"),x=y("a-menu"),Q=y("a-dropdown"),Z=y("a-popconfirm"),H=y("a-table"),V=y("a-tab-pane"),ee=y("a-list-item"),te=y("a-list"),oe=y("a-tabs"),re=y("a-input"),G=y("a-form-item"),X=y("a-textarea"),ne=y("a-form"),$=y("a-modal"),R=y("a-descriptions-item"),ae=y("a-descriptions");return d(),_("div",null,[b("div",qe,[b("div",null,[b("h2",Qe,i(e.t("recommend.title")),1),b("p",Ze,i(e.t("recommend.subtitle")),1)]),n(Y,null,{default:r(()=>[n(w,{loading:e.loading,onClick:e.loadAll},{icon:r(()=>[n(e.ReloadOutlined)]),default:r(()=>[p(" "+i(e.t("recommend.refresh")),1)]),_:1},8,["loading"]),n(w,{type:"primary",onClick:a[0]||(a[0]=s=>e.showCreateProfileModal=!0)},{icon:r(()=>[n(e.UserAddOutlined)]),default:r(()=>[p(" "+i(e.t("recommend.createProfile")),1)]),_:1})]),_:1})]),u(" User selector "),n(S,{size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"},"body-style":{padding:"10px 16px"}},{default:r(()=>[b("div",He,[b("span",Xe,i(e.t("recommend.userBar.currentUser")),1),n(j,{value:e.selectedUser,"onUpdate:value":a[1]||(a[1]=s=>e.selectedUser=s),options:e.userOptions,placeholder:e.t("recommend.userBar.selectPlaceholder"),style:{"min-width":"280px"},"allow-clear":"","show-search":"",onChange:e.onUserChange},null,8,["value","options","placeholder"]),e.selectedUser?(d(),k(w,{key:0,size:"small",onClick:e.applyDecay},{icon:r(()=>[n(e.FieldTimeOutlined)]),default:r(()=>[p(" "+i(e.t("recommend.userBar.applyDecay")),1)]),_:1})):u("v-if",!0),e.selectedUser?(d(),k(w,{key:1,size:"small",onClick:e.loadSuggestions},{icon:r(()=>[n(e.BulbOutlined)]),default:r(()=>[p(" "+i(e.t("recommend.userBar.suggest")),1)]),_:1})):u("v-if",!0)])]),_:1}),u(" Stat cards "),n(F,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:r(()=>[n(T,{xs:12,sm:8,lg:5},{default:r(()=>[n(S,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[n(O,{title:e.t("recommend.stats.profiles"),value:e.profiles.length,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:r(()=>[n(e.UserOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),n(T,{xs:12,sm:8,lg:5},{default:r(()=>[n(S,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[n(O,{title:e.t("recommend.stats.totalRecs"),value:e.userStats.total,"value-style":{color:"#722ed1",fontSize:"20px"}},{prefix:r(()=>[n(e.FireOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),n(T,{xs:12,sm:8,lg:5},{default:r(()=>[n(S,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[n(O,{title:e.t("recommend.stats.pending"),value:e.userStats.pending,"value-style":{color:e.userStats.pending>0?"#faad14":"#888",fontSize:"20px"}},{prefix:r(()=>[n(e.EyeInvisibleOutlined)]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),n(T,{xs:12,sm:8,lg:5},{default:r(()=>[n(S,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[n(O,{title:e.t("recommend.stats.feedbackRate"),value:e.userStats.feedbackRate*100,suffix:"%",precision:1,"value-style":{color:"#13c2c2",fontSize:"20px"}},{prefix:r(()=>[n(e.LikeOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),n(T,{xs:24,sm:8,lg:4},{default:r(()=>[n(S,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[n(O,{title:e.t("recommend.stats.avgScore"),value:e.userStats.avgScore,precision:3,"value-style":{color:e.scoreColor(e.userStats.avgScore),fontSize:"20px"}},{prefix:r(()=>[n(e.StarOutlined)]),_:1},8,["title","value","value-style"])]),_:1})]),_:1})]),_:1}),u(" Content type catalogue "),n(S,{title:e.t("recommend.typeCatalogue"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"},"body-style":{padding:"12px 16px"}},{default:r(()=>[n(F,{gutter:[12,12]},{default:r(()=>[(d(!0),_(A,null,q(e.CONTENT_TYPE_IDS,s=>(d(),k(T,{key:s,xs:12,sm:6},{default:r(()=>[b("div",{class:"type-pill",style:Pe({borderLeftColor:e.typeBarColor(s)})},[n(v,{color:e.typeColor(s),style:{"font-family":"monospace"}},{default:r(()=>[p(i(s),1)]),_:2},1032,["color"]),b("div",$e,i(e.typeLabel(s)),1)],4)]),_:2},1024))),128))]),_:1})]),_:1},8,["title"]),u(" Tabs "),n(oe,{activeKey:e.activeTab,"onUpdate:activeKey":a[4]||(a[4]=s=>e.activeTab=s),class:"recommend-tabs"},{default:r(()=>[u(" ── Recommendations tab ────────────────────────────────── "),n(V,{key:"recs",tab:e.t("recommend.tabs.recs")},{default:r(()=>[b("div",et,[n(N,{value:e.statusFilter,"onUpdate:value":a[2]||(a[2]=s=>e.statusFilter=s),size:"small","button-style":"solid"},{default:r(()=>[n(z,{value:""},{default:r(()=>[p(i(e.t("recommend.filter.allStatuses")),1)]),_:1}),(d(!0),_(A,null,q(e.RECOMMENDATION_STATUSES,s=>(d(),k(z,{key:s,value:s},{default:r(()=>[p(i(e.statusLabel(s)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),n(N,{value:e.typeFilter,"onUpdate:value":a[3]||(a[3]=s=>e.typeFilter=s),size:"small"},{default:r(()=>[n(z,{value:""},{default:r(()=>[p(i(e.t("recommend.filter.allTypes")),1)]),_:1}),(d(!0),_(A,null,q(e.CONTENT_TYPE_IDS,s=>(d(),k(z,{key:s,value:s},{default:r(()=>[p(i(e.typeLabel(s)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),e.selectedUser?(d(),k(H,{key:1,columns:e.recColumns,"data-source":e.filteredRecs,pagination:{pageSize:20,showTotal:s=>e.t("recommend.totals.rows",{count:s})},size:"small",loading:e.loadingRecs,style:{background:"var(--bg-card)"}},{bodyCell:r(({column:s,record:m})=>[s.key==="title"?(d(),_(A,{key:0},[b("span",tt,i(m.title||e.t("recommend.noTitle")),1),b("div",ot,i(m.contentId),1)],64)):u("v-if",!0),s.key==="contentType"?(d(),k(v,{key:1,color:e.typeColor(m.contentType),style:{"font-family":"monospace"}},{default:r(()=>[p(i(m.contentType),1)]),_:2},1032,["color"])):u("v-if",!0),s.key==="score"?(d(),k(J,{key:2,percent:Math.round(m.score*100),"stroke-color":e.scoreColor(m.score),size:"small",format:()=>m.score.toFixed(3)},null,8,["percent","stroke-color","format"])):u("v-if",!0),s.key==="reason"?(d(),_("span",rt,i(m.reason),1)):u("v-if",!0),s.key==="status"?(d(),k(v,{key:4,color:e.statusColor(m.status)},{default:r(()=>[p(i(e.statusLabel(m.status)),1)]),_:2},1032,["color"])):u("v-if",!0),s.key==="feedback"?(d(),_(A,{key:5},[m.feedback?(d(),k(v,{key:0,color:e.feedbackColor(m.feedback)},{default:r(()=>[p(i(e.feedbackLabel(m.feedback)),1)]),_:2},1032,["color"])):(d(),_("span",nt,"—"))],64)):u("v-if",!0),s.key==="action"?(d(),_(A,{key:6},[m.status==="pending"?(d(),k(w,{key:0,size:"small",type:"link",onClick:C=>e.markViewed(m)},{default:r(()=>[p(i(e.t("recommend.rowActions.view")),1)]),_:1},8,["onClick"])):u("v-if",!0),m.status!=="dismissed"?(d(),k(Q,{key:1},{overlay:r(()=>[n(x,{onClick:({key:C})=>e.provideFeedback(m,C)},{default:r(()=>[n(D,{key:"like",style:{color:"#52c41a"}},{default:r(()=>[p(i(e.t("recommend.feedbackMenu.like")),1)]),_:1}),n(D,{key:"dislike",style:{color:"#ff4d4f"}},{default:r(()=>[p(i(e.t("recommend.feedbackMenu.dislike")),1)]),_:1}),n(D,{key:"later"},{default:r(()=>[p(i(e.t("recommend.feedbackMenu.later")),1)]),_:1})]),_:1},8,["onClick"])]),default:r(()=>[n(w,{size:"small",type:"link"},{default:r(()=>[p(i(e.t("recommend.feedbackDropdown")),1)]),_:1})]),_:2},1024)):u("v-if",!0),m.status!=="dismissed"?(d(),k(Z,{key:2,title:e.t("recommend.rowActions.dismissConfirmTitle"),"ok-text":e.t("recommend.rowActions.dismissOk"),"cancel-text":e.t("common.cancel"),onConfirm:C=>e.dismissRec(m)},{default:r(()=>[n(w,{size:"small",type:"link",danger:""},{default:r(()=>[p(i(e.t("recommend.rowActions.dismiss")),1)]),_:1})]),_:1},8,["title","ok-text","cancel-text","onConfirm"])):u("v-if",!0)],64)):u("v-if",!0)]),emptyText:r(()=>[b("div",at,[n(e.FireOutlined,{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),p(" "+i(e.statusFilter||e.typeFilter?e.t("recommend.empty.filtered"):e.t("recommend.empty.noRecsHint")),1)])]),_:1},8,["columns","data-source","pagination","loading"])):(d(),k(P,{key:0,description:e.t("recommend.empty.selectUser"),image:e.EMPTY_IMG,style:{padding:"40px 0"}},null,8,["description","image"]))]),_:1},8,["tab"]),u(" ── Profiles tab ───────────────────────────────────────── "),n(V,{key:"profiles",tab:e.t("recommend.tabs.profiles")},{default:r(()=>[n(H,{columns:e.profileColumns,"data-source":e.profiles,pagination:{pageSize:20,showTotal:s=>e.t("recommend.totals.profiles",{count:s})},size:"small",loading:e.loading,style:{background:"var(--bg-card)"}},{bodyCell:r(({column:s,record:m})=>[s.key==="userId"?(d(),_("span",st,i(m.userId),1)):u("v-if",!0),s.key==="topicCount"?(d(),k(v,{key:1,color:"blue"},{default:r(()=>[p(i(e.t("recommend.topicTagSuffix",{count:m.topicCount})),1)]),_:2},1024)):u("v-if",!0),s.key==="decayFactor"?(d(),_("span",lt,i(m.decayFactor.toFixed(2)),1)):u("v-if",!0),s.key==="updateCount"?(d(),_("span",it,i(m.updateCount),1)):u("v-if",!0),s.key==="lastUpdated"?(d(),_("span",ct,i(e.formatRecommendTime(m.lastUpdated)),1)):u("v-if",!0),s.key==="action"?(d(),_(A,{key:5},[n(w,{size:"small",type:"link",onClick:C=>e.viewProfileDetails(m)},{default:r(()=>[p(i(e.t("recommend.rowActions.details")),1)]),_:1},8,["onClick"]),n(w,{size:"small",type:"link",onClick:C=>e.selectAndSwitch(m.userId)},{default:r(()=>[p(i(e.t("recommend.rowActions.switch")),1)]),_:1},8,["onClick"]),n(Z,{title:e.t("recommend.rowActions.deleteConfirmTitle"),"ok-text":e.t("recommend.rowActions.deleteOk"),"cancel-text":e.t("common.cancel"),onConfirm:C=>e.deleteProfile(m)},{default:r(()=>[n(w,{size:"small",type:"link",danger:""},{default:r(()=>[p(i(e.t("recommend.rowActions.delete")),1)]),_:1})]),_:1},8,["title","ok-text","cancel-text","onConfirm"])],64)):u("v-if",!0)]),emptyText:r(()=>[b("div",dt,[n(e.UserOutlined,{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),p(" "+i(e.t("recommend.empty.noProfiles")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),u(" ── Top interests tab ──────────────────────────────────── "),n(V,{key:"interests",tab:e.t("recommend.tabs.interests")},{default:r(()=>[e.selectedUser?(d(),k(F,{key:1,gutter:[16,16]},{default:r(()=>[n(T,{xs:24,lg:14},{default:r(()=>[n(S,{title:e.t("recommend.interest.topicWeights"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[e.topInterests.length?(d(),_("div",mt,[(d(!0),_(A,null,q(e.topInterests,s=>(d(),_("div",{key:s.key,class:"interest-row"},[b("span",ut,i(s.topic),1),n(J,{percent:Math.round(s.weight*100),"stroke-color":e.weightColor(s.weight),format:()=>s.weight.toFixed(3),size:"small",style:{flex:"1","margin-left":"12px"}},null,8,["percent","stroke-color","format"])]))),128))])):(d(),k(P,{key:0,description:e.t("recommend.empty.noInterests"),image:e.EMPTY_IMG},null,8,["description","image"]))]),_:1},8,["title"])]),_:1}),n(T,{xs:24,lg:10},{default:r(()=>[n(S,{title:e.t("recommend.interest.feedbackSuggest"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[e.suggestions.length?(d(),k(te,{key:1,size:"small","data-source":e.suggestions},{renderItem:r(({item:s})=>[n(ee,null,{default:r(()=>[n(v,{color:s.action==="boost"?"green":"orange"},{default:r(()=>[p(i(s.action==="boost"?e.t("recommend.interest.boost"):e.t("recommend.interest.lower")),1)]),_:2},1032,["color"]),b("span",ft,i(s.topic),1),b("span",pt,"±"+i(s.amount),1)]),_:2},1024)]),_:1},8,["data-source"])):(d(),k(P,{key:0,description:e.t("recommend.empty.noSuggestions"),image:e.EMPTY_IMG},null,8,["description","image"]))]),_:1},8,["title"])]),_:1})]),_:1})):(d(),k(P,{key:0,description:e.t("recommend.empty.selectUser"),image:e.EMPTY_IMG,style:{padding:"40px 0"}},null,8,["description","image"]))]),_:1},8,["tab"])]),_:1},8,["activeKey"]),u(" ── Create profile modal ───────────────────────────────── "),n($,{open:e.showCreateProfileModal,"onUpdate:open":a[8]||(a[8]=s=>e.showCreateProfileModal=s),title:e.t("recommend.create.title"),"confirm-loading":e.creating,width:560,"ok-text":e.t("recommend.create.ok"),"cancel-text":e.t("common.cancel"),onOk:e.submitCreateProfile,onCancel:e.resetCreateForm},{default:r(()=>[n(ne,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:r(()=>[n(G,{label:e.t("recommend.create.userIdLabel"),required:""},{default:r(()=>[n(re,{value:e.createForm.userId,"onUpdate:value":a[5]||(a[5]=s=>e.createForm.userId=s),placeholder:e.t("recommend.create.userIdPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),n(G,{label:e.t("recommend.create.topicsLabel")},{default:r(()=>[n(X,{value:e.createForm.topicsJson,"onUpdate:value":a[6]||(a[6]=s=>e.createForm.topicsJson=s),placeholder:e.t("recommend.create.topicsPlaceholder"),"auto-size":{minRows:2,maxRows:5}},null,8,["value","placeholder"])]),_:1},8,["label"]),n(G,{label:e.t("recommend.create.weightsLabel")},{default:r(()=>[n(X,{value:e.createForm.weightsJson,"onUpdate:value":a[7]||(a[7]=s=>e.createForm.weightsJson=s),placeholder:e.t("recommend.create.weightsPlaceholder"),"auto-size":{minRows:2,maxRows:5}},null,8,["value","placeholder"])]),_:1},8,["label"])]),_:1})]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),u(" ── Profile details modal ──────────────────────────────── "),n($,{open:e.showDetailsModal,"onUpdate:open":a[9]||(a[9]=s=>e.showDetailsModal=s),title:e.t("recommend.details.title",{userId:e.currentProfile?.userId||""}),width:680,footer:null},{default:r(()=>[e.currentProfile?(d(),_("div",yt,[n(ae,{column:2,size:"small",bordered:""},{default:r(()=>[n(R,{label:e.t("recommend.details.id"),span:2},{default:r(()=>[b("span",gt,i(e.currentProfile.id),1)]),_:1},8,["label"]),n(R,{label:e.t("recommend.details.topicCount")},{default:r(()=>[p(i(e.currentProfile.topicCount),1)]),_:1},8,["label"]),n(R,{label:e.t("recommend.details.decayFactor")},{default:r(()=>[p(i(e.currentProfile.decayFactor.toFixed(2)),1)]),_:1},8,["label"]),n(R,{label:e.t("recommend.details.updateCount")},{default:r(()=>[p(i(e.currentProfile.updateCount),1)]),_:1},8,["label"]),n(R,{label:e.t("recommend.details.lastUpdated")},{default:r(()=>[p(i(e.formatRecommendTime(e.currentProfile.lastUpdated)),1)]),_:1},8,["label"])]),_:1}),b("h4",_t,i(e.t("recommend.details.topicWeights")),1),Object.keys(e.currentProfile.topics).length?(d(),_("div",vt,[(d(!0),_(A,null,q(e.currentProfile.topics,(s,m)=>(d(),_("div",{key:m,class:"interest-row"},[b("span",kt,i(m),1),n(J,{percent:Math.round(s*100),"stroke-color":e.weightColor(s),format:()=>s.toFixed(3),size:"small",style:{flex:"1","margin-left":"12px"}},null,8,["percent","stroke-color","format"])]))),128))])):(d(),k(P,{key:0,description:e.t("recommend.empty.noTopics"),image:e.EMPTY_IMG},null,8,["description","image"])),Object.keys(e.currentProfile.interactionWeights).length?(d(),_("h4",bt,i(e.t("recommend.details.interactionWeights")),1)):u("v-if",!0),Object.keys(e.currentProfile.interactionWeights).length?(d(),_("pre",xt,i(e.formatJson(e.currentProfile.interactionWeights)),1)):u("v-if",!0)])):u("v-if",!0)]),_:1},8,["open","title"])])}const It=Ae(Ke,[["render",ht],["__scopeId","data-v-9cfd9dba"],["__file","/tmp/cc-web-panel-eXzh0Z/repo/packages/web-panel/src/views/Recommend.vue"]]);export{It as default};
@@ -0,0 +1 @@
1
+ import{I as m,J as p,U as v,R as s,c as o,K as n,V as d,S as x,o as me,b as se,a as te,r as _,P as u,Q as f,F,Z as L,_ as Ue,$ as pe}from"./vendor-BvqAck49.js";import{_ as Pe,b as fe,u as ye,E as be,d as g}from"./index-1iacQgo5.js";import{s as Be,t as q}from"./community-parser-Cuyslaku.js";import ve from"./index-DLyIxnjc.js";import{aU as Ve,l as Je,L as Ye,q as We,at as qe,ak as Ke,$ as Ze,am as He,as as Ge,R as Qe}from"./icons-DP3uiYxy.js";import"./KeyCode-D63Tfrq7.js";import"./omit-Dx0YMbWn.js";import"./pickAttrs-D-a8Fm6C.js";import"./initDefaultProps-D6QmlnQ-.js";import"./motion-BHrTGY1_.js";import"./raf-Deuc0E8-.js";import"./index-D3IVAG9l.js";import"./index-Sl-sLj3T.js";import"./isVisible-C7tPsqfj.js";import"./useState-BK4hy8Ma.js";import"./devWarning-B1j78JeH.js";import"./compact-item-BzXjd3wJ.js";import"./createContext-DhF9bi_u.js";import"./Compact-DM4ZgFSE.js";import"./_getTag-DnrRH4E6.js";import"./styleChecker-DCuq89M_.js";import"./zoom-DblBUHfi.js";import"./ActionButton-BugJtiJc.js";import"./vnode-D1ZmXyxM.js";const Se=Object.freeze(["accuracy","fairness","resilience","convergence_speed"]),Xe=Object.freeze(["none","exponential","linear","step"]),$e=Object.freeze(["z_score","iqr"]),Oe=Object.freeze(["running","complete","applied","failed","cancelled"]),et=Object.freeze(["generic","task","review","vote"]);function k(l,t=0){return typeof l=="number"&&Number.isFinite(l)?l:t}function N(l){if(!l)return{noDb:!1,error:""};const t=Be(l),r=/Database not available/i.test(t);return{noDb:r,error:r?"Database not available":""}}function tt(l,t=0){if(!l||typeof l!="object")return null;const r=l.did||"";return r?{key:r,did:r,score:k(l.score,0),observations:k(l.observations,0),decay:String(l.decay||"none"),weightTotal:k(l.weightTotal,0),_idx:t}:null}function ce(l){const t=q(l);return Array.isArray(t)?t.map(tt).filter(Boolean):[]}function ze(l,t=0){if(!l||typeof l!="object")return null;const r=l.did||"";return r?{key:`${r}-${t}`,did:r,score:k(l.score,0),reason:String(l.reason||""),zScore:typeof l.zScore=="number"?l.zScore:null,lower:typeof l.lower=="number"?l.lower:null,upper:typeof l.upper=="number"?l.upper:null}:null}function _e(l){const t=q(l);if(!t||typeof t!="object"||Array.isArray(t))return{method:"",threshold:0,totalSamples:0,anomalies:[],summary:"",message:""};const r=Array.isArray(t.anomalies)?t.anomalies.map(ze).filter(Boolean):[];return{method:String(t.method||""),threshold:k(t.threshold,0),totalSamples:k(t.totalSamples,0),anomalies:r,summary:t.summary?String(t.summary):"",message:t.message?String(t.message):""}}function Ae(l,t=0){if(!l||typeof l!="object")return null;const r=l.runId||"";return r?{key:r,runId:r,objective:String(l.objective||""),iterations:k(l.iterations,0),paramSpace:l.paramSpace??null,bestParams:l.bestParams??null,bestScore:k(l.bestScore,0),status:String(l.status||"complete").toLowerCase(),createdAt:l.createdAt??null,completedAt:l.completedAt??null,analytics:l.analytics??null,errorMessage:l.errorMessage??"",_idx:t}:null}function ge(l){const t=q(l);return Array.isArray(t)?t.map(Ae).filter(Boolean):[]}function xe(l){const t=q(l);return!t||typeof t!="object"||Array.isArray(t)?null:Ae(t,0)}function ke(l){const t=q(l);if(!t||typeof t!="object"||Array.isArray(t))return null;const r=t.reputationDistribution||{};return{analyticsId:String(t.analyticsId||""),runId:String(t.runId||""),reputationDistribution:{buckets:Array.isArray(r.buckets)?r.buckets.filter(e=>e&&typeof e=="object").map(e=>({label:String(e.label||""),count:k(e.count,0),min:typeof e.min=="number"?e.min:null,max:typeof e.max=="number"?e.max:null})):[],mean:typeof r.mean=="number"?r.mean:null,stdDev:typeof r.stdDev=="number"?r.stdDev:null},anomalies:t.anomalies&&typeof t.anomalies=="object"?{method:String(t.anomalies.method||""),totalSamples:k(t.anomalies.totalSamples,0),anomalies:Array.isArray(t.anomalies.anomalies)?t.anomalies.anomalies.map(ze).filter(Boolean):[],summary:t.anomalies.summary?String(t.anomalies.summary):"",message:t.anomalies.message?String(t.anomalies.message):""}:{method:"",totalSamples:0,anomalies:[],summary:"",message:""},recommendations:Array.isArray(t.recommendations)?t.recommendations.filter(e=>typeof e=="string"):[]}}const ot={totalRuns:0,activeRuns:0,maxConcurrentOptimizations:0,byStatus:{},byObjective:{},observations:{totalObservations:0,totalDids:0},bestScoreEver:0};function he(l){const t=JSON.parse(JSON.stringify(ot));for(const e of Oe)t.byStatus[e]=0;for(const e of Se)t.byObjective[e]=0;const r=q(l);if(!r||typeof r!="object"||Array.isArray(r))return t;if(t.totalRuns=k(r.totalRuns,0),t.activeRuns=k(r.activeRuns,0),t.maxConcurrentOptimizations=k(r.maxConcurrentOptimizations,0),t.bestScoreEver=k(r.bestScoreEver,0),r.byStatus&&typeof r.byStatus=="object")for(const[e,w]of Object.entries(r.byStatus))typeof w=="number"&&Number.isFinite(w)&&(t.byStatus[e]=w);if(r.byObjective&&typeof r.byObjective=="object")for(const[e,w]of Object.entries(r.byObjective))typeof w=="number"&&Number.isFinite(w)&&(t.byObjective[e]=w);return r.observations&&typeof r.observations=="object"&&(t.observations.totalObservations=k(r.observations.totalObservations,0),t.observations.totalDids=k(r.observations.totalDids,0)),t}function at(l){if(l==null||l==="")return"—";const t=typeof l=="number"?new Date(l):new Date(String(l));return isNaN(t.getTime())?String(l):t.toLocaleString("zh-CN",{hour12:!1})}const nt={__name:"Reputation",setup(l,{expose:t}){t();const{t:r}=fe(),e=ye(),w=be.PRESENTED_IMAGE_SIMPLE,Q=_(!1),R=_(!1),K=_(!1),U=_(!1),A=_(!1),O=_([]),z=_([]),V=_({totalRuns:0,activeRuns:0,maxConcurrentOptimizations:0,byStatus:{},byObjective:{},observations:{totalObservations:0,totalDids:0},bestScoreEver:0}),P=_({noDb:!1,error:""}),X=_("scores"),E=_("none"),Z=_(!1),J=_(!1),j=_(!1),H=_(!1),h=te({did:"",score:.8,kind:"generic",weight:1}),S=te({objective:"accuracy",iterations:50}),T=te({method:"z_score",threshold:2.5,decay:"none"}),D=_(null),I=_(null),B=_(null),Y=se(()=>[{title:r("reputation.scoreColumns.rank"),key:"rank",width:"60px"},{title:r("reputation.scoreColumns.did"),key:"did"},{title:r("reputation.scoreColumns.score"),key:"score",width:"220px"},{title:r("reputation.scoreColumns.observations"),key:"observations",width:"100px"},{title:r("reputation.scoreColumns.weightTotal"),key:"weightTotal",width:"100px"}]),oe=se(()=>[{title:r("reputation.runColumns.runId"),key:"runId",width:"140px"},{title:r("reputation.runColumns.objective"),key:"objective",width:"140px"},{title:r("reputation.runColumns.iterations"),key:"iterations",width:"80px"},{title:r("reputation.runColumns.bestScore"),key:"bestScore",width:"110px"},{title:r("reputation.runColumns.status"),key:"status",width:"100px"},{title:r("reputation.runColumns.createdAt"),key:"createdAt",width:"160px"},{title:r("reputation.runColumns.action"),key:"action",width:"160px"}]);function ae(i){const c=`reputation.decay.${i}`,y=r(c);return y===c?i:y}function $(i){const c=`reputation.kind.${i}`,y=r(c);return y===c?i:y}function ee(i){const c=`reputation.objective.${i}`,y=r(c);return y===c?i:y}function C(i){return{accuracy:"blue",fairness:"green",resilience:"purple",convergence_speed:"orange"}[i]||"default"}function ne(i){return{accuracy:"#1677ff",fairness:"#52c41a",resilience:"#722ed1",convergence_speed:"#fa8c16"}[i]||"#888"}function re(i){const c=`reputation.objectiveDesc.${i}`,y=r(c);return y===c?"":y}function a(i){const c=`reputation.status.${i}`,y=r(c);return y===c?i:y}function b(i){return{running:"processing",complete:"blue",applied:"green",failed:"red",cancelled:"default"}[i]||"default"}function W(i){return{running:"#1677ff",complete:"#13c2c2",applied:"#52c41a",failed:"#ff4d4f",cancelled:"#888"}[i]||"#888"}function Re(i){return i===0?"gold":i===1?"silver":i===2?"bronze":""}function we(i){return i>=.8?"#52c41a":i>=.5?"#1677ff":i>=.3?"#faad14":"#ff4d4f"}function je(i,c){return c?Math.round(i/c*100):0}function Ce(i){const c=I.value?.reputationDistribution.buckets.reduce((y,M)=>y+M.count,0)||0;return c?Math.round(i.count/c*100):0}function Te(i){if(typeof i=="string")return i;try{return JSON.stringify(i,null,2)}catch{return String(i)}}async function G(){Q.value=!0,P.value={noDb:!1,error:""};try{const[i,c,y]=await Promise.all([e.execute(`reputation list --decay ${E.value} --json`,1e4).catch(()=>({output:""})),e.execute("reputation runs --limit 50 --json",1e4).catch(()=>({output:""})),e.execute("reputation stats-v2 --json",8e3).catch(()=>({output:""}))]),M=[i,c,y].map(le=>N(le.output)).find(le=>le.noDb);M&&(P.value=M),O.value=ce(i.output),z.value=ge(c.output),V.value=he(y.output)}catch(i){g.error(r("reputation.messages.loadFailed",{err:i?.message||i}))}finally{Q.value=!1}}async function De(){try{const{output:i}=await e.execute(`reputation list --decay ${E.value} --json`,1e4),c=N(i);if(c.noDb){P.value=c;return}O.value=ce(i)}catch(i){g.error(r("reputation.messages.loadScoresFailed",{err:i?.message||i}))}}async function Fe(){if(!h.did.trim()){g.warning(r("reputation.messages.didRequired"));return}if(h.score<0||h.score>1){g.warning(r("reputation.messages.scoreRange"));return}R.value=!0;try{const i=[`reputation observe "${h.did.trim().replace(/"/g,'\\"')}"`,String(h.score),`-k ${h.kind}`,`-w ${h.weight}`,"--json"],{output:c}=await e.execute(i.join(" "),1e4);if(N(c).noDb){g.error(r("reputation.messages.needInit"));return}if(!/"did"/.test(c)){g.error(r("reputation.messages.observeFailed",{err:c.slice(0,120)}));return}g.success(r("reputation.messages.observeOk")),Z.value=!1,ue(),await G()}catch(i){g.error(r("reputation.messages.observeFailed",{err:i?.message||i}))}finally{R.value=!1}}async function Ee(){K.value=!0;try{const i=["reputation optimize",`-o ${S.objective}`,`-i ${S.iterations}`,"--json"],{output:c}=await e.execute(i.join(" "),6e4);if(N(c).noDb){g.error(r("reputation.messages.needInit"));return}const M=xe(c);if(!M){g.error(r("reputation.messages.optimizeFailed",{err:c.slice(0,120)}));return}J.value=!1,g.success(r("reputation.messages.optimizeOk",{score:M.bestScore.toFixed(4)})),await G(),D.value=M,H.value=!0,await ie()}catch(i){g.error(r("reputation.messages.optimizeFailed",{err:i?.message||i}))}finally{K.value=!1}}async function Ie(i){ve.confirm({title:r("reputation.applyConfirm.title"),content:r("reputation.applyConfirm.content",{runId:i.runId.slice(0,12)}),okText:r("reputation.applyConfirm.ok"),cancelText:r("reputation.applyConfirm.cancel"),onOk:async()=>{try{const{output:c}=await e.execute(`reputation apply ${i.runId}`,8e3);if(N(c).noDb){g.error(r("reputation.messages.needInit"));return}if(/Failed|Error/i.test(c)&&!/Applied/i.test(c)){g.error(r("reputation.messages.applyFailed",{err:c.slice(0,120)}));return}g.success(r("reputation.messages.applyOk")),await G()}catch(c){g.error(r("reputation.messages.applyFailed",{err:c?.message||c}))}}})}async function Me(i){D.value=i,I.value=null,H.value=!0,await ie()}async function ie(){if(D.value){A.value=!0;try{const{output:i}=await e.execute(`reputation analytics ${D.value.runId} --json`,8e3);if(N(i).noDb)return;I.value=ke(i)}catch{}finally{A.value=!1}}}function Le(){B.value=null,j.value=!0}async function Ne(){U.value=!0;try{const i=["reputation anomalies",`-m ${T.method}`,`-t ${T.threshold}`,`-d ${T.decay}`,"--json"],{output:c}=await e.execute(i.join(" "),1e4);if(N(c).noDb){g.error(r("reputation.messages.needInit"));return}B.value=_e(c)}catch(i){g.error(r("reputation.messages.detectFailed",{err:i?.message||i}))}finally{U.value=!1}}function ue(){h.did="",h.score=.8,h.kind="generic",h.weight=1}me(G);const de={t:r,ws:e,EMPTY_IMG:w,loading:Q,observing:R,optimizing:K,detectingAnomalies:U,loadingAnalytics:A,scores:O,runs:z,stats:V,errorState:P,activeTab:X,decayFilter:E,showObserveModal:Z,showOptimizeModal:J,showAnomaliesModal:j,showAnalyticsModal:H,observeForm:h,optimizeForm:S,anomalyForm:T,currentRun:D,currentAnalytics:I,anomalyResult:B,scoreColumns:Y,runColumns:oe,decayLabel:ae,kindLabel:$,objectiveLabel:ee,objectiveColor:C,objectiveBarColor:ne,objectiveDesc:re,statusLabel:a,statusColor:b,statusBarColor:W,rankClass:Re,scoreColor:we,pctOfTotal:je,bucketPct:Ce,formatParams:Te,loadAll:G,loadScores:De,submitObservation:Fe,submitOptimization:Ee,applyRun:Ie,viewRunAnalytics:Me,loadAnalyticsForCurrentRun:ie,openAnomaliesModal:Le,runAnomalyDetection:Ne,resetObserveForm:ue,ref:_,onMounted:me,reactive:te,computed:se,get useI18n(){return fe},get ReloadOutlined(){return Qe},get PlusOutlined(){return Ge},get WarningOutlined(){return He},get ThunderboltOutlined(){return Ze},get UserOutlined(){return Ke},get EyeOutlined(){return qe},get ExperimentOutlined(){return We},get LoadingOutlined(){return Ye},get TrophyOutlined(){return Je},get ArrowRightOutlined(){return Ve},get message(){return g},get Modal(){return ve},get Empty(){return be},get useWsStore(){return ye},get parseScores(){return ce},get parseAnomalies(){return _e},get parseRun(){return xe},get parseRuns(){return ge},get parseAnalytics(){return ke},get parseStatsV2(){return he},get detectReputationError(){return N},get formatReputationTime(){return at},get OPTIMIZATION_OBJECTIVES(){return Se},get DECAY_MODELS(){return Xe},get ANOMALY_METHODS(){return $e},get RUN_STATUSES(){return Oe},get OBSERVATION_KINDS(){return et}};return Object.defineProperty(de,"__isScriptSetup",{enumerable:!1,value:!0}),de}},rt={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},it={class:"page-title"},lt={class:"page-sub"},st={class:"filter-bar"},ct={style:{color:"var(--text-secondary)","font-size":"12px"}},ut={key:1,style:{color:"var(--text-primary)","font-family":"monospace","font-size":"12px"}},dt={key:3,style:{color:"var(--text-secondary)"}},mt={key:4,style:{color:"var(--text-secondary)","font-family":"monospace","font-size":"12px"}},pt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},ft={key:0,style:{color:"var(--text-primary)","font-family":"monospace","font-size":"12px"}},yt={key:2,style:{color:"var(--text-secondary)"}},bt={key:5,style:{color:"var(--text-secondary)","font-size":"11px"}},vt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},_t={style:{"margin-left":"8px",color:"var(--text-muted)","font-size":"12px"}},gt={style:{color:"var(--text-muted)","font-size":"11px","margin-top":"4px"}},xt={style:{"margin-left":"8px",color:"var(--text-muted)","font-size":"12px"}},kt={style:{"padding-top":"8px"}},ht={style:{"margin-left":"8px",color:"var(--text-muted)","font-size":"12px"}},St={key:1},Ot={style:{"font-family":"monospace","font-size":"12px",color:"var(--text-primary)"}},zt={style:{"margin-left":"8px",color:"var(--text-secondary)","font-size":"12px"}},At={key:0,style:{"margin-left":"8px",color:"var(--text-muted)","font-size":"11px"}},Rt={key:0,style:{"padding-top":"8px"}},wt={class:"params-pre"},jt={style:{color:"#ff4d4f"}},Ct={key:0,style:{"margin-top":"16px"}},Tt={style:{color:"var(--text-primary)","font-size":"13px",margin:"0 0 10px"}},Dt={class:"bucket-label"},Ft={key:0,style:{"margin-top":"8px",color:"var(--text-secondary)","font-size":"12px"}},Et={key:0,style:{"margin-left":"12px"}};function It(l,t,r,e,w,Q){const R=m("a-button"),K=m("a-space"),U=m("a-alert"),A=m("a-statistic"),O=m("a-card"),z=m("a-col"),V=m("a-row"),P=m("a-radio-button"),X=m("a-radio-group"),E=m("a-progress"),Z=m("a-table"),J=m("a-tab-pane"),j=m("a-tag"),H=m("a-tabs"),h=m("a-input"),S=m("a-form-item"),T=m("a-input-number"),D=m("a-select-option"),I=m("a-select"),B=m("a-form"),Y=m("a-modal"),oe=m("a-divider"),ae=m("a-empty"),$=m("a-list-item"),ee=m("a-list"),C=m("a-descriptions-item"),ne=m("a-descriptions"),re=m("a-spin");return u(),p("div",null,[v("div",rt,[v("div",null,[v("h2",it,s(e.t("reputation.title")),1),v("p",lt,s(e.t("reputation.subtitle")),1)]),o(K,null,{default:n(()=>[o(R,{loading:e.loading,onClick:e.loadAll},{icon:n(()=>[o(e.ReloadOutlined)]),default:n(()=>[f(" "+s(e.t("reputation.refresh")),1)]),_:1},8,["loading"]),o(R,{onClick:e.openAnomaliesModal},{icon:n(()=>[o(e.WarningOutlined)]),default:n(()=>[f(" "+s(e.t("reputation.actions.anomalies")),1)]),_:1}),o(R,{type:"primary",onClick:t[0]||(t[0]=a=>e.showOptimizeModal=!0)},{icon:n(()=>[o(e.ThunderboltOutlined)]),default:n(()=>[f(" "+s(e.t("reputation.actions.optimize")),1)]),_:1})]),_:1})]),d(" noDb banner "),e.errorState.noDb?(u(),x(U,{key:0,type:"info","show-icon":"",message:e.t("reputation.noDb.message"),description:e.t("reputation.noDb.description"),style:{"margin-bottom":"16px"}},null,8,["message","description"])):d("v-if",!0),d(" Stat cards "),o(V,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:n(()=>[o(z,{xs:12,sm:8,lg:5},{default:n(()=>[o(O,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[o(A,{title:e.t("reputation.stats.trackedDids"),value:e.stats.observations.totalDids,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:n(()=>[o(e.UserOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),o(z,{xs:12,sm:8,lg:5},{default:n(()=>[o(O,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[o(A,{title:e.t("reputation.stats.totalObservations"),value:e.stats.observations.totalObservations,"value-style":{color:"#722ed1",fontSize:"20px"}},{prefix:n(()=>[o(e.EyeOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),o(z,{xs:12,sm:8,lg:5},{default:n(()=>[o(O,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[o(A,{title:e.t("reputation.stats.optimizationRuns"),value:e.stats.totalRuns,"value-style":{color:"#13c2c2",fontSize:"20px"}},{prefix:n(()=>[o(e.ExperimentOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),o(z,{xs:12,sm:8,lg:5},{default:n(()=>[o(O,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[o(A,{title:e.t("reputation.stats.active"),value:e.stats.activeRuns,"value-style":{color:e.stats.activeRuns>0?"#1677ff":"#888",fontSize:"20px"},suffix:`/ ${e.stats.maxConcurrentOptimizations}`},{prefix:n(()=>[o(e.LoadingOutlined)]),_:1},8,["title","value","value-style","suffix"])]),_:1})]),_:1}),o(z,{xs:24,sm:8,lg:4},{default:n(()=>[o(O,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[o(A,{title:e.t("reputation.stats.bestEver"),value:e.stats.bestScoreEver,precision:3,"value-style":{color:"#52c41a",fontSize:"20px"}},{prefix:n(()=>[o(e.TrophyOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1})]),_:1}),d(" Tabs "),o(H,{activeKey:e.activeTab,"onUpdate:activeKey":t[3]||(t[3]=a=>e.activeTab=a),class:"reputation-tabs"},{default:n(()=>[d(" ── Scores tab ──────────────────────────────────────────── "),o(J,{key:"scores",tab:e.t("reputation.tabs.scores")},{default:n(()=>[v("div",st,[v("span",ct,s(e.t("reputation.filter.decayLabel")),1),o(X,{value:e.decayFilter,"onUpdate:value":t[1]||(t[1]=a=>e.decayFilter=a),size:"small","button-style":"solid",onChange:e.loadScores},{default:n(()=>[(u(!0),p(F,null,L(e.DECAY_MODELS,a=>(u(),x(P,{key:a,value:a},{default:n(()=>[f(s(e.decayLabel(a)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),o(R,{size:"small",onClick:t[2]||(t[2]=a=>e.showObserveModal=!0)},{icon:n(()=>[o(e.PlusOutlined)]),default:n(()=>[f(" "+s(e.t("reputation.filter.addObservation")),1)]),_:1})]),o(Z,{columns:e.scoreColumns,"data-source":e.scores,pagination:{pageSize:20,showTotal:a=>e.t("reputation.totals.dids",{count:a})},size:"small",loading:e.loading,style:{background:"var(--bg-card)"}},{bodyCell:n(({column:a,record:b,index:W})=>[a.key==="rank"?(u(),p("span",{key:0,class:Ue(["rank-pill",e.rankClass(W)])},s(W+1),3)):d("v-if",!0),a.key==="did"?(u(),p("span",ut,s(b.did),1)):d("v-if",!0),a.key==="score"?(u(),x(E,{key:2,percent:Math.round(b.score*100),"stroke-color":e.scoreColor(b.score),size:"small",format:()=>b.score.toFixed(4)},null,8,["percent","stroke-color","format"])):d("v-if",!0),a.key==="observations"?(u(),p("span",dt,s(b.observations),1)):d("v-if",!0),a.key==="weightTotal"?(u(),p("span",mt,s(b.weightTotal.toFixed(2)),1)):d("v-if",!0)]),emptyText:n(()=>[v("div",pt,[o(e.UserOutlined,{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),f(" "+s(e.t("reputation.empty.scores")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),d(" ── Runs tab ────────────────────────────────────────────── "),o(J,{key:"runs",tab:e.t("reputation.tabs.runs")},{default:n(()=>[o(Z,{columns:e.runColumns,"data-source":e.runs,pagination:{pageSize:20,showTotal:a=>e.t("reputation.totals.rows",{count:a})},size:"small",loading:e.loading,style:{background:"var(--bg-card)"}},{bodyCell:n(({column:a,record:b})=>[a.key==="runId"?(u(),p("span",ft,s(b.runId.slice(0,12)),1)):d("v-if",!0),a.key==="objective"?(u(),x(j,{key:1,color:e.objectiveColor(b.objective),style:{"font-family":"monospace"}},{default:n(()=>[f(s(e.objectiveLabel(b.objective)),1)]),_:2},1032,["color"])):d("v-if",!0),a.key==="iterations"?(u(),p("span",yt,s(b.iterations),1)):d("v-if",!0),a.key==="bestScore"?(u(),p("span",{key:3,style:pe({color:e.scoreColor(b.bestScore),fontWeight:500,fontFamily:"monospace"})},s(b.bestScore.toFixed(4)),5)):d("v-if",!0),a.key==="status"?(u(),x(j,{key:4,color:e.statusColor(b.status)},{default:n(()=>[f(s(e.statusLabel(b.status)),1)]),_:2},1032,["color"])):d("v-if",!0),a.key==="createdAt"?(u(),p("span",bt,s(e.formatReputationTime(b.createdAt)),1)):d("v-if",!0),a.key==="action"?(u(),p(F,{key:6},[o(R,{size:"small",type:"link",onClick:W=>e.viewRunAnalytics(b)},{default:n(()=>[f(s(e.t("reputation.rowActions.analyze")),1)]),_:1},8,["onClick"]),b.status==="complete"?(u(),x(R,{key:0,size:"small",type:"link",style:{color:"#52c41a"},onClick:W=>e.applyRun(b)},{default:n(()=>[f(s(e.t("reputation.rowActions.apply")),1)]),_:1},8,["onClick"])):d("v-if",!0)],64)):d("v-if",!0)]),emptyText:n(()=>[v("div",vt,[o(e.ExperimentOutlined,{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),f(" "+s(e.t("reputation.empty.runs")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),d(" ── Breakdown tab ───────────────────────────────────────── "),o(J,{key:"breakdown",tab:e.t("reputation.tabs.breakdown")},{default:n(()=>[o(V,{gutter:[16,16]},{default:n(()=>[o(z,{xs:24,lg:12},{default:n(()=>[o(O,{title:e.t("reputation.breakdown.byStatus"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[(u(!0),p(F,null,L(e.RUN_STATUSES,a=>(u(),p("div",{key:a,class:"bd-row"},[o(j,{color:e.statusColor(a),style:{"min-width":"80px","text-align":"center"}},{default:n(()=>[f(s(e.statusLabel(a)),1)]),_:2},1032,["color"]),o(E,{percent:e.pctOfTotal(e.stats.byStatus[a]||0,e.stats.totalRuns),"stroke-color":e.statusBarColor(a),format:()=>`${e.stats.byStatus[a]||0}`,size:"small",style:{flex:"1","margin-left":"12px"}},null,8,["percent","stroke-color","format"])]))),128))]),_:1},8,["title"])]),_:1}),o(z,{xs:24,lg:12},{default:n(()=>[o(O,{title:e.t("reputation.breakdown.byObjective"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[(u(!0),p(F,null,L(e.OPTIMIZATION_OBJECTIVES,a=>(u(),p("div",{key:a,class:"bd-row"},[o(j,{color:e.objectiveColor(a),style:{"min-width":"100px","text-align":"center","font-family":"monospace"}},{default:n(()=>[f(s(e.objectiveLabel(a)),1)]),_:2},1032,["color"]),o(E,{percent:e.pctOfTotal(e.stats.byObjective[a]||0,e.stats.totalRuns),"stroke-color":e.objectiveBarColor(a),format:()=>`${e.stats.byObjective[a]||0}`,size:"small",style:{flex:"1","margin-left":"12px"}},null,8,["percent","stroke-color","format"])]))),128))]),_:1},8,["title"])]),_:1})]),_:1})]),_:1},8,["tab"])]),_:1},8,["activeKey"]),d(" ── Add observation modal ──────────────────────────────── "),o(Y,{open:e.showObserveModal,"onUpdate:open":t[8]||(t[8]=a=>e.showObserveModal=a),title:e.t("reputation.observe.title"),"confirm-loading":e.observing,width:540,"ok-text":e.t("reputation.observe.ok"),"cancel-text":e.t("common.cancel"),onOk:e.submitObservation,onCancel:e.resetObserveForm},{default:n(()=>[o(B,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:n(()=>[o(S,{label:e.t("reputation.observe.didLabel"),required:""},{default:n(()=>[o(h,{value:e.observeForm.did,"onUpdate:value":t[4]||(t[4]=a=>e.observeForm.did=a),placeholder:e.t("reputation.observe.didPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),o(S,{label:e.t("reputation.observe.scoreLabel"),required:""},{default:n(()=>[o(T,{value:e.observeForm.score,"onUpdate:value":t[5]||(t[5]=a=>e.observeForm.score=a),min:0,max:1,step:.05,style:{width:"160px"}},null,8,["value"]),v("span",_t,s(e.t("reputation.observe.scoreRange")),1)]),_:1},8,["label"]),o(S,{label:e.t("reputation.observe.kindLabel")},{default:n(()=>[o(I,{value:e.observeForm.kind,"onUpdate:value":t[6]||(t[6]=a=>e.observeForm.kind=a)},{default:n(()=>[(u(!0),p(F,null,L(e.OBSERVATION_KINDS,a=>(u(),x(D,{key:a,value:a},{default:n(()=>[f(s(e.kindLabel(a)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"]),o(S,{label:e.t("reputation.observe.weightLabel")},{default:n(()=>[o(T,{value:e.observeForm.weight,"onUpdate:value":t[7]||(t[7]=a=>e.observeForm.weight=a),min:.1,step:.1,style:{width:"120px"}},null,8,["value"])]),_:1},8,["label"])]),_:1})]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),d(" ── Optimize modal ─────────────────────────────────────── "),o(Y,{open:e.showOptimizeModal,"onUpdate:open":t[11]||(t[11]=a=>e.showOptimizeModal=a),title:e.t("reputation.optimize.title"),"confirm-loading":e.optimizing,width:540,"ok-text":e.t("reputation.optimize.ok"),"cancel-text":e.t("common.cancel"),onOk:e.submitOptimization},{default:n(()=>[o(B,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:n(()=>[o(S,{label:e.t("reputation.optimize.objectiveLabel"),required:""},{default:n(()=>[o(I,{value:e.optimizeForm.objective,"onUpdate:value":t[9]||(t[9]=a=>e.optimizeForm.objective=a)},{default:n(()=>[(u(!0),p(F,null,L(e.OPTIMIZATION_OBJECTIVES,a=>(u(),x(D,{key:a,value:a},{default:n(()=>[f(s(e.objectiveLabel(a)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),v("div",gt,s(e.objectiveDesc(e.optimizeForm.objective)),1)]),_:1},8,["label"]),o(S,{label:e.t("reputation.optimize.iterationsLabel")},{default:n(()=>[o(T,{value:e.optimizeForm.iterations,"onUpdate:value":t[10]||(t[10]=a=>e.optimizeForm.iterations=a),min:1,max:1e3,step:10,style:{width:"160px"}},null,8,["value"]),v("span",xt,s(e.t("reputation.optimize.iterationsRange")),1)]),_:1},8,["label"])]),_:1}),o(U,{type:"info","show-icon":"",message:e.t("reputation.optimize.syncMessage"),description:e.t("reputation.optimize.syncDescription"),style:{"margin-top":"12px"}},null,8,["message","description"])]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),d(" ── Anomaly detection modal ────────────────────────────── "),o(Y,{open:e.showAnomaliesModal,"onUpdate:open":t[15]||(t[15]=a=>e.showAnomaliesModal=a),title:e.t("reputation.anomaly.title"),width:640,footer:null},{default:n(()=>[v("div",kt,[o(B,{"label-col":{span:5},"wrapper-col":{span:19}},{default:n(()=>[o(S,{label:e.t("reputation.anomaly.methodLabel")},{default:n(()=>[o(X,{value:e.anomalyForm.method,"onUpdate:value":t[12]||(t[12]=a=>e.anomalyForm.method=a),"button-style":"solid"},{default:n(()=>[(u(!0),p(F,null,L(e.ANOMALY_METHODS,a=>(u(),x(P,{key:a,value:a},{default:n(()=>[f(s(a==="z_score"?e.t("reputation.anomaly.zScoreLabel"):e.t("reputation.anomaly.iqrLabel")),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"]),o(S,{label:e.t("reputation.anomaly.thresholdLabel")},{default:n(()=>[o(T,{value:e.anomalyForm.threshold,"onUpdate:value":t[13]||(t[13]=a=>e.anomalyForm.threshold=a),min:.5,step:.1,style:{width:"120px"}},null,8,["value"]),v("span",ht,s(e.t("reputation.anomaly.thresholdHint")),1)]),_:1},8,["label"]),o(S,{label:e.t("reputation.anomaly.decayLabel")},{default:n(()=>[o(I,{value:e.anomalyForm.decay,"onUpdate:value":t[14]||(t[14]=a=>e.anomalyForm.decay=a),style:{width:"200px"}},{default:n(()=>[(u(!0),p(F,null,L(e.DECAY_MODELS,a=>(u(),x(D,{key:a,value:a},{default:n(()=>[f(s(e.decayLabel(a)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"]),o(S,{"wrapper-col":{offset:5,span:19}},{default:n(()=>[o(R,{type:"primary",loading:e.detectingAnomalies,onClick:e.runAnomalyDetection},{icon:n(()=>[o(e.WarningOutlined)]),default:n(()=>[f(" "+s(e.t("reputation.anomaly.start")),1)]),_:1},8,["loading"])]),_:1})]),_:1}),o(oe),e.anomalyResult?(u(),p("div",St,[o(V,{gutter:12,style:{"margin-bottom":"12px"}},{default:n(()=>[o(z,{span:8},{default:n(()=>[o(A,{title:e.t("reputation.anomaly.totalSamples"),value:e.anomalyResult.totalSamples,"value-style":{fontSize:"16px"}},null,8,["title","value"])]),_:1}),o(z,{span:8},{default:n(()=>[o(A,{title:e.t("reputation.anomaly.threshold"),value:e.anomalyResult.threshold,precision:2,"value-style":{fontSize:"16px"}},null,8,["title","value"])]),_:1}),o(z,{span:8},{default:n(()=>[o(A,{title:e.t("reputation.anomaly.anomalies"),value:e.anomalyResult.anomalies.length,"value-style":{color:e.anomalyResult.anomalies.length>0?"#ff4d4f":"#52c41a",fontSize:"16px"}},null,8,["title","value","value-style"])]),_:1})]),_:1}),e.anomalyResult.message?(u(),x(U,{key:0,message:e.anomalyResult.message,type:"warning","show-icon":"",style:{"margin-bottom":"12px"}},null,8,["message"])):d("v-if",!0),e.anomalyResult.anomalies.length?(u(),x(ee,{key:1,size:"small","data-source":e.anomalyResult.anomalies},{renderItem:n(({item:a})=>[o($,null,{default:n(()=>[v("span",Ot,s(a.did),1),o(j,{color:"red",style:{"margin-left":"8px"}},{default:n(()=>[f(s(e.t("reputation.anomaly.scoreTag",{score:a.score.toFixed(4)})),1)]),_:2},1024),v("span",zt,s(a.reason),1),a.zScore!==null?(u(),p("span",At,s(e.t("reputation.anomaly.zNote",{value:a.zScore.toFixed(2)})),1)):d("v-if",!0)]),_:2},1024)]),_:1},8,["data-source"])):d("v-if",!0)])):(u(),x(ae,{key:0,description:e.t("reputation.anomaly.notDetected"),image:e.EMPTY_IMG},null,8,["description","image"]))])]),_:1},8,["open","title"]),d(" ── Run analytics / details modal ──────────────────────── "),o(Y,{open:e.showAnalyticsModal,"onUpdate:open":t[16]||(t[16]=a=>e.showAnalyticsModal=a),title:e.t("reputation.analytics.title",{runId:e.currentRun?.runId?.slice(0,12)||""}),width:780,footer:null},{default:n(()=>[e.currentRun?(u(),p("div",Rt,[o(ne,{column:2,size:"small",bordered:""},{default:n(()=>[o(C,{label:e.t("reputation.analytics.objective")},{default:n(()=>[o(j,{color:e.objectiveColor(e.currentRun.objective)},{default:n(()=>[f(s(e.objectiveLabel(e.currentRun.objective)),1)]),_:1},8,["color"])]),_:1},8,["label"]),o(C,{label:e.t("reputation.analytics.status")},{default:n(()=>[o(j,{color:e.statusColor(e.currentRun.status)},{default:n(()=>[f(s(e.statusLabel(e.currentRun.status)),1)]),_:1},8,["color"])]),_:1},8,["label"]),o(C,{label:e.t("reputation.analytics.iterations")},{default:n(()=>[f(s(e.currentRun.iterations),1)]),_:1},8,["label"]),o(C,{label:e.t("reputation.analytics.bestScore")},{default:n(()=>[v("span",{style:pe({color:e.scoreColor(e.currentRun.bestScore),fontWeight:500,fontFamily:"monospace"})},s(e.currentRun.bestScore.toFixed(4)),5)]),_:1},8,["label"]),o(C,{label:e.t("reputation.analytics.createdAt")},{default:n(()=>[f(s(e.formatReputationTime(e.currentRun.createdAt)),1)]),_:1},8,["label"]),e.currentRun.completedAt?(u(),x(C,{key:0,label:e.t("reputation.analytics.completedAt")},{default:n(()=>[f(s(e.formatReputationTime(e.currentRun.completedAt)),1)]),_:1},8,["label"])):d("v-if",!0),e.currentRun.bestParams?(u(),x(C,{key:1,label:e.t("reputation.analytics.bestParams"),span:2},{default:n(()=>[v("pre",wt,s(e.formatParams(e.currentRun.bestParams)),1)]),_:1},8,["label"])):d("v-if",!0),e.currentRun.errorMessage?(u(),x(C,{key:2,label:e.t("reputation.analytics.errorMessage"),span:2},{default:n(()=>[v("span",jt,s(e.currentRun.errorMessage),1)]),_:1},8,["label"])):d("v-if",!0)]),_:1}),o(re,{spinning:e.loadingAnalytics},{default:n(()=>[e.currentAnalytics?(u(),p("div",Ct,[v("h4",Tt,s(e.t("reputation.analytics.distributionTitle")),1),o(O,{size:"small",style:{"margin-bottom":"12px"}},{default:n(()=>[(u(!0),p(F,null,L(e.currentAnalytics.reputationDistribution.buckets,a=>(u(),p("div",{key:a.label,class:"bucket-row"},[v("span",Dt,s(a.label),1),o(E,{percent:e.bucketPct(a),"stroke-color":a.count>0?"#1677ff":"#d9d9d9",format:()=>`${a.count}`,size:"small",style:{flex:"1","margin-left":"12px"}},null,8,["percent","stroke-color","format"])]))),128)),e.currentAnalytics.reputationDistribution.mean!==null?(u(),p("div",Ft,[f(s(e.t("reputation.analytics.mean",{value:e.currentAnalytics.reputationDistribution.mean.toFixed(4)}))+" ",1),e.currentAnalytics.reputationDistribution.stdDev!==null?(u(),p("span",Et,s(e.t("reputation.analytics.stdDev",{value:e.currentAnalytics.reputationDistribution.stdDev.toFixed(4)})),1)):d("v-if",!0)])):d("v-if",!0)]),_:1}),e.currentAnalytics.recommendations.length?(u(),x(O,{key:0,title:e.t("reputation.analytics.recommendations"),size:"small"},{default:n(()=>[o(ee,{size:"small","data-source":e.currentAnalytics.recommendations},{renderItem:n(({item:a})=>[o($,null,{default:n(()=>[o(e.ArrowRightOutlined,{style:{color:"#faad14","margin-right":"8px"}}),f(" "+s(a),1)]),_:2},1024)]),_:1},8,["data-source"])]),_:1},8,["title"])):d("v-if",!0)])):d("v-if",!0)]),_:1},8,["spinning"])])):d("v-if",!0)]),_:1},8,["open","title"])])}const io=Pe(nt,[["render",It],["__scopeId","data-v-c4829a4e"],["__file","/tmp/cc-web-panel-eXzh0Z/repo/packages/web-panel/src/views/Reputation.vue"]]);export{io as default};
@@ -1 +1 @@
1
- import{q as z,f as S,h as $,$ as f,i as N}from"./index-D9ImwlR4.js";import{d as _,o as E,f as F,b as o,c as I,r as h}from"./vendor-BvqAck49.js";import{u as M,r as u}from"./responsiveObserve-D7hnwzkh.js";import{u as T}from"./useFlexGapSupport-C4oscNMu.js";import{b as V,c as q}from"./index-BpBK2OXI.js";const D=()=>({align:f([String,Object]),justify:f([String,Object]),prefixCls:String,gutter:f([Number,Array,Object],0),wrap:{type:Boolean,default:void 0}}),P=_({compatConfig:{MODE:3},name:"ARow",inheritAttrs:!1,props:D(),setup(s,G){let{slots:d,attrs:l}=G;const{prefixCls:a,direction:R}=z("row",s),[O,C]=V(a);let m;const v=M(),p=h({xs:!0,sm:!0,md:!0,lg:!0,xl:!0,xxl:!0}),y=h({xs:!1,sm:!1,md:!1,lg:!1,xl:!1,xxl:!1}),g=e=>o(()=>{if(typeof s[e]=="string")return s[e];if(typeof s[e]!="object")return"";for(let t=0;t<u.length;t++){const n=u[t];if(!y.value[n])continue;const r=s[e][n];if(r!==void 0)return r}return""}),b=g("align"),x=g("justify"),w=T();E(()=>{m=v.value.subscribe(e=>{y.value=e;const t=s.gutter||0;(!Array.isArray(t)&&typeof t=="object"||Array.isArray(t)&&(typeof t[0]=="object"||typeof t[1]=="object"))&&(p.value=e)})}),F(()=>{v.value.unsubscribe(m)});const A=o(()=>{const e=[void 0,void 0],{gutter:t=0}=s;return(Array.isArray(t)?t:[t,void 0]).forEach((r,j)=>{if(typeof r=="object")for(let i=0;i<u.length;i++){const c=u[i];if(p.value[c]&&r[c]!==void 0){e[j]=r[c];break}}else e[j]=r}),e});q({gutter:A,supportFlexGap:w,wrap:o(()=>s.wrap)});const k=o(()=>N(a.value,{[`${a.value}-no-wrap`]:s.wrap===!1,[`${a.value}-${x.value}`]:x.value,[`${a.value}-${b.value}`]:b.value,[`${a.value}-rtl`]:R.value==="rtl"},l.class,C.value)),B=o(()=>{const e=A.value,t={},n=e[0]!=null&&e[0]>0?`${e[0]/-2}px`:void 0,r=e[1]!=null&&e[1]>0?`${e[1]/-2}px`:void 0;return n&&(t.marginLeft=n,t.marginRight=n),w.value?t.rowGap=`${e[1]}px`:r&&(t.marginTop=r,t.marginBottom=r),t});return()=>{var e;return O(I("div",S(S({},l),{},{class:k.value,style:$($({},B.value),l.style)}),[(e=d.default)===null||e===void 0?void 0:e.call(d)]))}}});export{P as A};
1
+ import{q as z,f as S,h as $,$ as f,i as N}from"./index-1iacQgo5.js";import{d as _,o as E,f as F,b as o,c as I,r as h}from"./vendor-BvqAck49.js";import{u as M,r as u}from"./responsiveObserve-CxhQ1EaK.js";import{u as T}from"./useFlexGapSupport-tfNE1ALO.js";import{b as V,c as q}from"./index-Dmjxpu0L.js";const D=()=>({align:f([String,Object]),justify:f([String,Object]),prefixCls:String,gutter:f([Number,Array,Object],0),wrap:{type:Boolean,default:void 0}}),P=_({compatConfig:{MODE:3},name:"ARow",inheritAttrs:!1,props:D(),setup(s,G){let{slots:d,attrs:l}=G;const{prefixCls:a,direction:R}=z("row",s),[O,C]=V(a);let m;const v=M(),p=h({xs:!0,sm:!0,md:!0,lg:!0,xl:!0,xxl:!0}),y=h({xs:!1,sm:!1,md:!1,lg:!1,xl:!1,xxl:!1}),g=e=>o(()=>{if(typeof s[e]=="string")return s[e];if(typeof s[e]!="object")return"";for(let t=0;t<u.length;t++){const n=u[t];if(!y.value[n])continue;const r=s[e][n];if(r!==void 0)return r}return""}),b=g("align"),x=g("justify"),w=T();E(()=>{m=v.value.subscribe(e=>{y.value=e;const t=s.gutter||0;(!Array.isArray(t)&&typeof t=="object"||Array.isArray(t)&&(typeof t[0]=="object"||typeof t[1]=="object"))&&(p.value=e)})}),F(()=>{v.value.unsubscribe(m)});const A=o(()=>{const e=[void 0,void 0],{gutter:t=0}=s;return(Array.isArray(t)?t:[t,void 0]).forEach((r,j)=>{if(typeof r=="object")for(let i=0;i<u.length;i++){const c=u[i];if(p.value[c]&&r[c]!==void 0){e[j]=r[c];break}}else e[j]=r}),e});q({gutter:A,supportFlexGap:w,wrap:o(()=>s.wrap)});const k=o(()=>N(a.value,{[`${a.value}-no-wrap`]:s.wrap===!1,[`${a.value}-${x.value}`]:x.value,[`${a.value}-${b.value}`]:b.value,[`${a.value}-rtl`]:R.value==="rtl"},l.class,C.value)),B=o(()=>{const e=A.value,t={},n=e[0]!=null&&e[0]>0?`${e[0]/-2}px`:void 0,r=e[1]!=null&&e[1]>0?`${e[1]/-2}px`:void 0;return n&&(t.marginLeft=n,t.marginRight=n),w.value?t.rowGap=`${e[1]}px`:r&&(t.marginTop=r,t.marginBottom=r),t});return()=>{var e;return O(I("div",S(S({},l),{},{class:k.value,style:$($({},B.value),l.style)}),[(e=d.default)===null||e===void 0?void 0:e.call(d)]))}}});export{P as A};