chainlesschain 0.162.136 → 0.162.138

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (153) hide show
  1. package/package.json +2 -2
  2. package/src/assets/web-panel/assets/{AIOps-BCbtd1Wt.js → AIOps-CuPMTsPl.js} +1 -1
  3. package/src/assets/web-panel/assets/{ActionButton-l-5EY84p.js → ActionButton-Pcw6Nehr.js} +1 -1
  4. package/src/assets/web-panel/assets/{Analytics-tqe4izkk.js → Analytics-CieGgEDR.js} +3 -3
  5. package/src/assets/web-panel/assets/{AppLayout-CHIGdNy5.js → AppLayout-zb-Tuj8P.js} +4 -4
  6. package/src/assets/web-panel/assets/{Audit-DoGy8tJV.js → Audit-Bl5hU9qI.js} +1 -1
  7. package/src/assets/web-panel/assets/{Backup-D4QmKO05.js → Backup-DNaYxZ6v.js} +1 -1
  8. package/src/assets/web-panel/assets/{BaseInput-BXtqNimf.js → BaseInput-dPZ-dsTl.js} +1 -1
  9. package/src/assets/web-panel/assets/{Chat-DrwZvmTE.js → Chat-BVcgPDj1.js} +6 -6
  10. package/src/assets/web-panel/assets/{ChatBubbleRenderer-D7xEGZ8V.js → ChatBubbleRenderer-44XDb8oI.js} +1 -1
  11. package/src/assets/web-panel/assets/{Checkbox-C7vmQvF_.js → Checkbox-aLXs1uti.js} +1 -1
  12. package/src/assets/web-panel/assets/Codegen-CwGpkO2P.js +1 -0
  13. package/src/assets/web-panel/assets/{Col-Wh2qHzCY.js → Col-CYZ20nTQ.js} +1 -1
  14. package/src/assets/web-panel/assets/{Community--JgtpkMN.js → Community-Ba30bSgI.js} +1 -1
  15. package/src/assets/web-panel/assets/{Compact-CYA0zQ2o.js → Compact-5ZdU4Ot5.js} +1 -1
  16. package/src/assets/web-panel/assets/Compliance-DoFMYDEx.js +1 -0
  17. package/src/assets/web-panel/assets/{Cowork-BkV1O7yG.js → Cowork-hJEAO23w.js} +3 -3
  18. package/src/assets/web-panel/assets/{Cron-D-H_AYdM.js → Cron-DUZqmMSA.js} +2 -2
  19. package/src/assets/web-panel/assets/{Crosschain-FjMDY8pJ.js → Crosschain-CeZm2yl1.js} +1 -1
  20. package/src/assets/web-panel/assets/{DID-LUMffREd.js → DID-CuG0n4cE.js} +2 -2
  21. package/src/assets/web-panel/assets/{Dashboard-BtnemOQy.js → Dashboard-93Wb_kK4.js} +2 -2
  22. package/src/assets/web-panel/assets/{Dropdown-BjIfBhgS.js → Dropdown-CKGGkbfB.js} +1 -1
  23. package/src/assets/web-panel/assets/{EmailListRenderer-kkJ3wUFH.js → EmailListRenderer-BscT321c.js} +1 -1
  24. package/src/assets/web-panel/assets/{FamilyGuardDashboard-COfVA8i-.js → FamilyGuardDashboard-DbhWii9j.js} +1 -1
  25. package/src/assets/web-panel/assets/{Federation-f0w3_1wG.js → Federation-DrDD75GW.js} +1 -1
  26. package/src/assets/web-panel/assets/{FormItemContext-CVP9HZzZ.js → FormItemContext-DnZFhXQk.js} +1 -1
  27. package/src/assets/web-panel/assets/{GenericCardRenderer-D9al_ovh.js → GenericCardRenderer-Cm9-z_vw.js} +1 -1
  28. package/src/assets/web-panel/assets/{Git-DngLyp6B.js → Git-D1glGFmw.js} +2 -2
  29. package/src/assets/web-panel/assets/{Governance-CoekTQFB.js → Governance-Xf75VdIY.js} +1 -1
  30. package/src/assets/web-panel/assets/{Inference-c65ZRlBj.js → Inference-BWBSGdwG.js} +1 -1
  31. package/src/assets/web-panel/assets/{KnowledgeGraph-DB5nximw.js → KnowledgeGraph-DwwINSlm.js} +1 -1
  32. package/src/assets/web-panel/assets/{Logs-DNkUzo0T.js → Logs-UIkOQs5w.js} +2 -2
  33. package/src/assets/web-panel/assets/{Marketplace-CR3MQByk.js → Marketplace-D9yeS1ZW.js} +1 -1
  34. package/src/assets/web-panel/assets/{McpTools-CG25_UsS.js → McpTools-CKmxSse5.js} +5 -5
  35. package/src/assets/web-panel/assets/{Memory-D52JKgAo.js → Memory-DQffKFFc.js} +2 -2
  36. package/src/assets/web-panel/assets/{MobileBridge-cZN2xRg0.js → MobileBridge-DAyR8I8a.js} +1 -1
  37. package/src/assets/web-panel/assets/{MobileProjects-cKCfuWoz.js → MobileProjects-DpfoO5f8.js} +1 -1
  38. package/src/assets/web-panel/assets/{Mtc-DmDYvDEV.js → Mtc-D6C8LSpp.js} +5 -5
  39. package/src/assets/web-panel/assets/{MtcAudit-Bf8Mi8tz.js → MtcAudit-Da3wssbR.js} +2 -2
  40. package/src/assets/web-panel/assets/{Multisig-DeukHd6F.js → Multisig-BHDgke1X.js} +3 -3
  41. package/src/assets/web-panel/assets/{NLProgramming-D3lXTwRy.js → NLProgramming-BDx3P3ux.js} +1 -1
  42. package/src/assets/web-panel/assets/{Notes-qghVAP0z.js → Notes-jeSS-7PQ.js} +3 -3
  43. package/src/assets/web-panel/assets/{NotificationSettings-BupFy0JT.js → NotificationSettings-DdN4hWFL.js} +1 -1
  44. package/src/assets/web-panel/assets/{OrderTableRenderer-nEDAjhsv.js → OrderTableRenderer-CdZIdIMR.js} +1 -1
  45. package/src/assets/web-panel/assets/{Organization-CeZC6-OD.js → Organization-CBYxcerk.js} +4 -4
  46. package/src/assets/web-panel/assets/{Overflow-Gn4quozC.js → Overflow-B10ibcqr.js} +1 -1
  47. package/src/assets/web-panel/assets/{P2P-DCjLA2gS.js → P2P-Mi93j-hW.js} +2 -2
  48. package/src/assets/web-panel/assets/{PdhVaultBrowser-csIVS_1B.js → PdhVaultBrowser-CJ-izVgS.js} +3 -3
  49. package/src/assets/web-panel/assets/{Permissions-C1Oo20LB.js → Permissions-H_VgO3BD.js} +4 -4
  50. package/src/assets/web-panel/assets/{PersonalDataHub-R4KLr8Ee.js → PersonalDataHub-DqNumQ9u.js} +3 -3
  51. package/src/assets/web-panel/assets/{Pipeline-BCoB-pL-.js → Pipeline-D76DlVwj.js} +1 -1
  52. package/src/assets/web-panel/assets/{Privacy-V66hdnHY.js → Privacy-COjrBObM.js} +1 -1
  53. package/src/assets/web-panel/assets/{ProjectInit-97Ij4qvk.js → ProjectInit-C_BzcMTx.js} +2 -2
  54. package/src/assets/web-panel/assets/{ProjectSettings-D30tCAKi.js → ProjectSettings-DjSiszub.js} +2 -2
  55. package/src/assets/web-panel/assets/Projects-CksWRc0_.js +1 -0
  56. package/src/assets/web-panel/assets/{Providers-CsndXhqQ.js → Providers-DSkUQSJy.js} +1 -1
  57. package/src/assets/web-panel/assets/{QuickAsk-9J7a-Wit.js → QuickAsk-vkWxqNXN.js} +1 -1
  58. package/src/assets/web-panel/assets/Recommend-CaHJ5YjP.js +1 -0
  59. package/src/assets/web-panel/assets/{Reputation-BQW7pAda.js → Reputation-BTpPsrWX.js} +1 -1
  60. package/src/assets/web-panel/assets/{Row-xRtHBnw6.js → Row-UkpIdv_5.js} +1 -1
  61. package/src/assets/web-panel/assets/{RssFeed-DZrbI2Gc.js → RssFeed-CShx4Tof.js} +3 -3
  62. package/src/assets/web-panel/assets/{Search-DHKSqCl1.js → Search-y_gmCTbc.js} +1 -1
  63. package/src/assets/web-panel/assets/{Security--cE1K8ka.js → Security-DOevA2tP.js} +3 -3
  64. package/src/assets/web-panel/assets/{Services-Bws9ixay.js → Services-vTNSkBu8.js} +2 -2
  65. package/src/assets/web-panel/assets/{Skeleton-Dj-bzkB7.js → Skeleton-BJqUn750.js} +1 -1
  66. package/src/assets/web-panel/assets/{Skills-BKrqOlUn.js → Skills-DVIOCnHU.js} +1 -1
  67. package/src/assets/web-panel/assets/{Sla-Da_SNe36.js → Sla-1gL55FO0.js} +1 -1
  68. package/src/assets/web-panel/assets/SpeechSettings-41p-Y13I.js +1 -0
  69. package/src/assets/web-panel/assets/{SyncSettings-DQCvMZSh.js → SyncSettings-DqlKeekk.js} +2 -2
  70. package/src/assets/web-panel/assets/{Tasks-BfSZDRq5.js → Tasks-DnYAmxUK.js} +1 -1
  71. package/src/assets/web-panel/assets/{Templates-CDRtxViB.js → Templates-7mQ2Y5aY.js} +1 -1
  72. package/src/assets/web-panel/assets/{Tenant-3QRm7Nry.js → Tenant-UOv9tHlz.js} +1 -1
  73. package/src/assets/web-panel/assets/Terminal-Dc5aH3eZ.js +3 -0
  74. package/src/assets/web-panel/assets/{TimelineRenderer-DLoyhlF5.js → TimelineRenderer-CkXcX7Kx.js} +1 -1
  75. package/src/assets/web-panel/assets/{Tokens-8NLe49e4.js → Tokens-CFpwWXql.js} +1 -1
  76. package/src/assets/web-panel/assets/{Trigger-hbe9gUXr.js → Trigger-C-qdyoCA.js} +1 -1
  77. package/src/assets/web-panel/assets/{Trust-BHgkWhCY.js → Trust-GQgHeP6y.js} +1 -1
  78. package/src/assets/web-panel/assets/{UkeySign-BmO-EyJ1.js → UkeySign-L3QNRCBa.js} +1 -1
  79. package/src/assets/web-panel/assets/{VideoEditing-LPgvmo_z.js → VideoEditing-o9IEduZP.js} +1 -1
  80. package/src/assets/web-panel/assets/{Wallet-BnKkAnOH.js → Wallet-CAF8ulAR.js} +4 -4
  81. package/src/assets/web-panel/assets/{WebAuthn-CIdoUjgo.js → WebAuthn-C0173yjI.js} +4 -4
  82. package/src/assets/web-panel/assets/{WorkflowEditor-BPeMHJyH.js → WorkflowEditor-ACXCzyXq.js} +1 -1
  83. package/src/assets/web-panel/assets/{chat-D8MVSTIr.js → chat-BS7lGBHP.js} +1 -1
  84. package/src/assets/web-panel/assets/{colors-DdPqDQ1L.js → colors-BfEp5UAL.js} +1 -1
  85. package/src/assets/web-panel/assets/{compact-item-DUZKsphf.js → compact-item-q8OE4Ozt.js} +1 -1
  86. package/src/assets/web-panel/assets/{createContext-D5p2CmQo.js → createContext-CKFXnLud.js} +1 -1
  87. package/src/assets/web-panel/assets/devWarning-W_a4Dw4t.js +1 -0
  88. package/src/assets/web-panel/assets/{hasIn-BTsp_hEF.js → hasIn-Cf5DP_7f.js} +1 -1
  89. package/src/assets/web-panel/assets/{index-CunDcO3C.js → index--jzP01Dj.js} +1 -1
  90. package/src/assets/web-panel/assets/{index-DXWjIyA-.js → index-1Da3-9ns.js} +1 -1
  91. package/src/assets/web-panel/assets/{index-BJWyBptG.js → index-5DxIt-Ur.js} +1 -1
  92. package/src/assets/web-panel/assets/{index-BNT2VsLb.js → index-8d4lYAnX.js} +1 -1
  93. package/src/assets/web-panel/assets/{index-DWwGeQvJ.js → index-B6ZMEstH.js} +1 -1
  94. package/src/assets/web-panel/assets/{index-BD3A6LLJ.js → index-BXfWxqTR.js} +1 -1
  95. package/src/assets/web-panel/assets/{index-D7zl6BHy.js → index-BcGfUFmL.js} +1 -1
  96. package/src/assets/web-panel/assets/{index-CMCre-L-.js → index-ByhdfDtv.js} +1 -1
  97. package/src/assets/web-panel/assets/{index-BNYA6P0Z.js → index-C3AVANs9.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-CuKonwkL.js → index-CHnc9BTl.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-GIPb2_fk.js → index-CS05FAIM.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-Doy_11av.js → index-CSkHnOBN.js} +1 -1
  101. package/src/assets/web-panel/assets/index-CZL0e3aH.js +1 -0
  102. package/src/assets/web-panel/assets/{index-DR3ACsiD.js → index-CbiOsq_p.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-D862jnkO.js → index-CcQdzuQg.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-DPJaX5ac.js → index-CdjHqYqj.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-Bow-XOs9.js → index-CzE1DfQ_.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-DaNcNCs6.js → index-D-UN86XJ.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-B399bCjT.js → index-D7oq_59Y.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-B8k7IxVj.js → index-DAJEOleL.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-CbjuKk7d.js → index-DAT9P_Mp.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-CKtejcd-.js → index-DCIFLx2r.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-B5vFq4Qm.js → index-DEL2Cxkq.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-31ytJYHw.js → index-DH0vQxUe.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-CXL0wioz.js → index-DJUlI6gf.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-BRwQvupf.js → index-DYKqvq8V.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-Chpwa107.js → index-DetDuxlQ.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-C1lWhMQw.js → index-Dh8r6PnR.js} +3 -3
  117. package/src/assets/web-panel/assets/index-DipwHsBu.js +1 -0
  118. package/src/assets/web-panel/assets/{index-BL3oN67Y.js → index-DnVxM_pX.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-JRar7P45.js → index-DyGGUw_t.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-Bsc2CYZq.js → index-DyRQ99wF.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-DMz6zzt2.js → index-c5-WuEIH.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-dbME8m0M.js → index-cnkpL_jy.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-Covx4knd.js → index-eY22W8SN.js} +1 -1
  124. package/src/assets/web-panel/assets/{index-DcwovLC7.js → index-grDQGSH_.js} +1 -1
  125. package/src/assets/web-panel/assets/{index-C8QqZYYD.js → index-nU0xnvE9.js} +1 -1
  126. package/src/assets/web-panel/assets/{index-BuFroE1S.js → index-r7ZY3ffW.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-CcG1FLEX.js → index-xM4jUoHW.js} +1 -1
  128. package/src/assets/web-panel/assets/{initDefaultProps-DeZSE2bu.js → initDefaultProps-Usi907C-.js} +1 -1
  129. package/src/assets/web-panel/assets/{motion-BGQcMeq4.js → motion-BisW42Zx.js} +1 -1
  130. package/src/assets/web-panel/assets/{move-BrFjgScn.js → move-DiQ9MJiV.js} +1 -1
  131. package/src/assets/web-panel/assets/{mtc-parser-CJOiLw4B.js → mtc-parser-2gfA5DGK.js} +1 -1
  132. package/src/assets/web-panel/assets/{omit-D-UZAj4p.js → omit-DV6-xyI5.js} +1 -1
  133. package/src/assets/web-panel/assets/{pickAttrs-CEZJAIg5.js → pickAttrs-CEa1NSzc.js} +1 -1
  134. package/src/assets/web-panel/assets/{placementArrow-C-9O2BpE.js → placementArrow-CRtBgFKf.js} +1 -1
  135. package/src/assets/web-panel/assets/{responsiveObserve-DObV9rnN.js → responsiveObserve-BcHZcnQx.js} +1 -1
  136. package/src/assets/web-panel/assets/{slide-Ccg8Ck9h.js → slide-PfuTm9Ex.js} +1 -1
  137. package/src/assets/web-panel/assets/{statusUtils-DVteAfrn.js → statusUtils-8IX7oIFo.js} +1 -1
  138. package/src/assets/web-panel/assets/{styleChecker-DJMHezhF.js → styleChecker-B4pe7rFW.js} +1 -1
  139. package/src/assets/web-panel/assets/{useFlexGapSupport-yuOExwOY.js → useFlexGapSupport-C7bjaPsk.js} +1 -1
  140. package/src/assets/web-panel/assets/{useFs-QUoeadth.js → useFs-BNvL4beQ.js} +1 -1
  141. package/src/assets/web-panel/assets/{usePersonalDataHub-8ZuMuAgm.js → usePersonalDataHub-Sj42Z-Ua.js} +1 -1
  142. package/src/assets/web-panel/assets/{vnode-CLlzeZv-.js → vnode-x93SN88L.js} +1 -1
  143. package/src/assets/web-panel/assets/{zoom-_aLiPW0u.js → zoom-CRzwdeCE.js} +1 -1
  144. package/src/assets/web-panel/index.html +1 -1
  145. package/src/assets/web-panel/assets/Codegen-BfH0gnrh.js +0 -1
  146. package/src/assets/web-panel/assets/Compliance-CNCXW8oZ.js +0 -1
  147. package/src/assets/web-panel/assets/Projects-DE3xI8DC.js +0 -1
  148. package/src/assets/web-panel/assets/Recommend-CCJOmNVS.js +0 -1
  149. package/src/assets/web-panel/assets/SpeechSettings-sspEE3dY.js +0 -1
  150. package/src/assets/web-panel/assets/Terminal-Bn2IxQFz.js +0 -3
  151. package/src/assets/web-panel/assets/devWarning-BzOE0TsJ.js +0 -1
  152. package/src/assets/web-panel/assets/index-B3qzNIBg.js +0 -1
  153. package/src/assets/web-panel/assets/index-DdAOmEhn.js +0 -1
@@ -1 +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-C1lWhMQw.js";import{a as D,b as Q,c as j}from"./parsers-UEvh_ShA.js";import{R as W}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=Q(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 W},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}},Z={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",Z,[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-ehQgdt/repo/packages/web-panel/src/views/Providers.vue"]]);export{ge as default};
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 j,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-Dh8r6PnR.js";import{a as Z,b as D,c as A}from"./parsers-UEvh_ShA.js";import{R as W}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=Z(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=D(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=j({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=A(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:j,ref:k,get ReloadOutlined(){return W},get message(){return _},get useProvidersStore(){return B},get useWsStore(){return M},get parseLlmConfigOutput(){return A}};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-2pZejZ/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 Q,a2 as P,Q as b}from"./vendor-BvqAck49.js";import{u as B,_ as D}from"./index-C1lWhMQw.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},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:[Q(P(e.run,["ctrl","prevent"]),["enter"]),Q(P(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=D(U,[["render",ne],["__file","/tmp/cc-web-panel-ehQgdt/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-Dh8r6PnR.js";import{b as E,f as K,S as N,al as T}from"./icons-DP3uiYxy.js";function j(){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=j(),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 L={__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}},U={style:{"margin-bottom":"24px"}},Z={class:"page-title"},F={class:"page-sub"},I={style:{display:"flex","justify-content":"space-between","align-items":"center","margin-top":"12px"}},J={style:{display:"flex",gap:"8px","align-items":"center",color:"var(--text-muted)","font-size":"11px"}},R={key:0},W={key:1},G={key:2},H={key:0,style:{color:"#1677ff","font-size":"11px"}},X={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",U,[v("h2",Z,l(n.$t("quickAsk.title")),1),v("p",F,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",I,[v("div",J,[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",R,l(e.answer.length)+" "+l(n.$t("quickAsk.charsSuffix")),1)):k("v-if",!0),e.finalMeta?(i(),m("span",W,"· "+l(e.finalMeta.tokens??0)+" "+l(n.$t("quickAsk.tokensSuffix")),1)):k("v-if",!0),e.finalMeta?.model?(i(),m("span",G,"· "+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",H,[p(e.SyncOutlined,{spin:!0}),b(" "+l(n.$t("quickAsk.streaming")),1)])):e.finalMeta?(i(),m("span",X,[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(L,[["render",ne],["__file","/tmp/cc-web-panel-2pZejZ/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 Pe}from"./vendor-BvqAck49.js";import{t as W,_ as Ae,b as me,u as ue,E as fe,d as g}from"./index-Dh8r6PnR.js";import{o as Ue,aV as ze,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):{},z=l.interaction_weights??l.interactionWeights,M=z&&typeof z=="object"&&!Array.isArray(z)?pe(z):{};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(),z=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),U=h("recs"),N=h(""),P=h(""),J=h(!1),D=h(!1),x=de({userId:"",topicsJson:"",weightsJson:""}),q=h(null),Q=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,U.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),U.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:z,loading:M,loadingRecs:w,creating:Y,profiles:j,recs:S,userStats:O,topInterests:T,suggestions:F,selectedUser:v,activeTab:U,statusFilter:N,typeFilter:P,showCreateProfileModal:J,showDetailsModal:D,createForm:x,currentProfile:q,userOptions:Q,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 ze},get BulbOutlined(){return Ue},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}},Ze={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},qe={class:"page-title"},Qe={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,z,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"),U=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"),Q=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",Ze,[b("div",null,[b("h2",qe,i(e.t("recommend.title")),1),b("p",Qe,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,Z(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(U,{value:""},{default:r(()=>[p(i(e.t("recommend.filter.allStatuses")),1)]),_:1}),(d(!0),_(A,null,Z(e.RECOMMENDATION_STATUSES,s=>(d(),k(U,{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(U,{value:""},{default:r(()=>[p(i(e.t("recommend.filter.allTypes")),1)]),_:1}),(d(!0),_(A,null,Z(e.CONTENT_TYPE_IDS,s=>(d(),k(U,{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(Q,{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(Q,{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,Z(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,Z(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 Tt=Ae(Ke,[["render",ht],["__scopeId","data-v-9cfd9dba"],["__file","/tmp/cc-web-panel-2pZejZ/repo/packages/web-panel/src/views/Recommend.vue"]]);export{Tt as default};
@@ -1 +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{Y as Pe,t as q,_ as Be,b as fe,u as ye,E as be,d as g}from"./index-C1lWhMQw.js";import ve from"./index-CunDcO3C.js";import{aU as Ve,l as Ye,L as Je,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-D-UZAj4p.js";import"./pickAttrs-CEZJAIg5.js";import"./initDefaultProps-DeZSE2bu.js";import"./motion-BGQcMeq4.js";import"./raf-Deuc0E8-.js";import"./index-Chpwa107.js";import"./index-C8QqZYYD.js";import"./isVisible-C7tPsqfj.js";import"./useState-BK4hy8Ma.js";import"./devWarning-BzOE0TsJ.js";import"./compact-item-DUZKsphf.js";import"./createContext-D5p2CmQo.js";import"./Compact-CYA0zQ2o.js";import"./_getTag-DnrRH4E6.js";import"./styleChecker-DJMHezhF.js";import"./zoom-_aLiPW0u.js";import"./ActionButton-l-5EY84p.js";import"./vnode-CLlzeZv-.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=Pe(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),Y=_(!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),J=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}Y.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:Y,showAnomaliesModal:j,showAnalyticsModal:H,observeForm:h,optimizeForm:S,anomalyForm:T,currentRun:D,currentAnalytics:I,anomalyResult:B,scoreColumns:J,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 Je},get TrophyOutlined(){return Ye},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"),Y=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"),J=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(Y,{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(Y,{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(Y,{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(J,{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(J,{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(J,{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(J,{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 ro=Be(nt,[["render",It],["__scopeId","data-v-c4829a4e"],["__file","/tmp/cc-web-panel-ehQgdt/repo/packages/web-panel/src/views/Reputation.vue"]]);export{ro as default};
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{Y as Pe,t as q,_ as Be,b as fe,u as ye,E as be,d as g}from"./index-Dh8r6PnR.js";import ve from"./index--jzP01Dj.js";import{aU as Ve,l as Ye,L as Je,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-DV6-xyI5.js";import"./pickAttrs-CEa1NSzc.js";import"./initDefaultProps-Usi907C-.js";import"./motion-BisW42Zx.js";import"./raf-Deuc0E8-.js";import"./index-DetDuxlQ.js";import"./index-nU0xnvE9.js";import"./isVisible-C7tPsqfj.js";import"./useState-BK4hy8Ma.js";import"./devWarning-W_a4Dw4t.js";import"./compact-item-q8OE4Ozt.js";import"./createContext-CKFXnLud.js";import"./Compact-5ZdU4Ot5.js";import"./_getTag-DnrRH4E6.js";import"./styleChecker-B4pe7rFW.js";import"./zoom-CRzwdeCE.js";import"./ActionButton-Pcw6Nehr.js";import"./vnode-x93SN88L.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=Pe(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),Y=_(!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),J=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}Y.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:Y,showAnomaliesModal:j,showAnalyticsModal:H,observeForm:h,optimizeForm:S,anomalyForm:T,currentRun:D,currentAnalytics:I,anomalyResult:B,scoreColumns:J,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 Je},get TrophyOutlined(){return Ye},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"),Y=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"),J=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(Y,{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(Y,{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(Y,{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(J,{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(J,{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(J,{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(J,{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 ro=Be(nt,[["render",It],["__scopeId","data-v-c4829a4e"],["__file","/tmp/cc-web-panel-2pZejZ/repo/packages/web-panel/src/views/Reputation.vue"]]);export{ro as default};
@@ -1 +1 @@
1
- import{q as z,f as S,h,a6 as f,i as N}from"./index-C1lWhMQw.js";import{d as _,o as E,f as F,b as o,c as I,r as $}from"./vendor-BvqAck49.js";import{u as M,r as u}from"./responsiveObserve-DObV9rnN.js";import{u as T}from"./useFlexGapSupport-yuOExwOY.js";import{b as V,c as q}from"./index-CXL0wioz.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=$({xs:!0,sm:!0,md:!0,lg:!0,xl:!0,xxl:!0}),y=$({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:h(h({},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,a6 as f,i as N}from"./index-Dh8r6PnR.js";import{d as _,o as E,f as F,b as o,c as I,r as $}from"./vendor-BvqAck49.js";import{u as M,r as u}from"./responsiveObserve-BcHZcnQx.js";import{u as T}from"./useFlexGapSupport-C7bjaPsk.js";import{b as V,c as q}from"./index-DJUlI6gf.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=$({xs:!0,sm:!0,md:!0,lg:!0,xl:!0,xxl:!0}),y=$({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:h(h({},B.value),l.style)}),[(e=d.default)===null||e===void 0?void 0:e.call(d)]))}}});export{P as A};
@@ -1,3 +1,3 @@
1
- import{I as m,J as y,U as f,c as s,K as o,V as v,S as R,Q as g,o as H,b as q,r as x,P as i,F as N,Z as J,R as k,a2 as $}from"./vendor-BvqAck49.js";import{_ as ee,u as Z,d as u,t as G}from"./index-C1lWhMQw.js";import{aB as te,aQ as ne,R as le,as as ae,y as oe}from"./icons-DP3uiYxy.js";const se={__name:"RssFeed",setup(X,{expose:a}){a();const h=Z(),e=x(!1),M=x(!1),D=x(!1),w=x(!1),b=x([]),C=x([]),S=x(""),L=x(!1),O=x(""),z=x([]),I=q(()=>{const n=b.value.length,l=C.value.length,d=C.value.filter(p=>!p.read).length,r=b.value.filter(p=>p.lastUpdated).sort((p,Y)=>new Date(Y.lastUpdated)-new Date(p.lastUpdated))[0],c=r?P(r.lastUpdated):"-";return[{label:"订阅源数",value:n,color:"#1677ff"},{label:"文章总数",value:l,color:"#52c41a"},{label:"未读文章",value:d,color:"#faad14"},{label:"最近刷新",value:c,color:"#13c2c2"}]}),W=[{title:"标题",key:"title",dataIndex:"title",ellipsis:!0},{title:"来源",key:"source",dataIndex:"source",width:"140px"},{title:"发布时间",key:"publishedAt",dataIndex:"publishedAt",width:"160px"},{title:"状态",key:"status",width:"80px"},{title:"操作",key:"actions",width:"100px"}];function P(n){if(!n)return"-";try{const l=new Date(n);return isNaN(l.getTime())?n:l.toLocaleString("zh-CN",{month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"})}catch{return n}}function U(n){return G(n)}async function A(){e.value=!0;try{const{output:n}=await h.execute("rss list --json",2e4),l=U(n);Array.isArray(l)?b.value=l.map((d,r)=>({key:d.id||d.url||r,id:d.id||String(r),title:d.title||d.name||"",url:d.url||d.feedUrl||"",itemCount:d.itemCount??d.articleCount??d.count??0,lastUpdated:d.lastUpdated||d.updatedAt||d.lastRefresh||""})):b.value=T(n)}catch(n){u.error("加载订阅源失败: "+n.message)}finally{e.value=!1}}function T(n){const l=[],d=n.split(`
2
- `);for(const r of d){const c=r.trim();if(!c||c.startsWith("─")||c.match(/^\d+ feed/i)||c.startsWith("RSS")||c.startsWith("No "))continue;const p=c.match(/^(\d+)\.\s+(.+?)(?:\s+[-–]\s+(.+))?$/);p?l.push({key:p[1],id:p[1],title:p[2].trim(),url:(p[3]||"").trim(),itemCount:0,lastUpdated:""}):c.length>5&&l.push({key:String(l.length),id:String(l.length),title:c.slice(0,80),url:"",itemCount:0,lastUpdated:""})}return l}async function F(){M.value=!0,z.value=[];try{let n="rss articles --limit 30 --json";S.value&&(n=`rss articles --feed ${S.value} --limit 30 --json`);const{output:l}=await h.execute(n,2e4),d=U(l);Array.isArray(d)?C.value=d.map((r,c)=>({key:r.id||String(c),id:r.id||String(c),title:r.title||"无标题",link:r.link||r.url||"",source:r.source||r.feedTitle||r.feedName||"",publishedAt:r.publishedAt||r.pubDate||r.date||"",read:!!r.read,summary:r.summary||r.description||"",content:r.content||""})):C.value=j(l)}catch(n){u.error("加载文章失败: "+n.message)}finally{M.value=!1}}function j(n){const l=[],d=n.split(`
3
- `);for(const r of d){const c=r.trim();if(!c||c.startsWith("─")||c.match(/^\d+ article/i)||c.startsWith("No "))continue;const p=c.match(/^(\d+)\.\s+(.+?)(?:\s+[-–]\s+(.+))?$/);p&&l.push({key:p[1],id:p[1],title:p[2].trim(),link:"",source:(p[3]||"").trim(),publishedAt:"",read:!1,summary:"",content:""})}return l}async function B(){const n=O.value.trim();if(!n){u.warning("请输入订阅源地址");return}w.value=!0;try{const{output:l}=await h.execute(`rss add "${n}"`,3e4);l.includes("error")||l.includes("失败")||l.includes("Error")?u.error("添加失败: "+l.slice(0,120)):(u.success("订阅源已添加"),L.value=!1,O.value="",await A(),await F())}catch(l){u.error("添加失败: "+l.message)}finally{w.value=!1}}async function E(n){try{u.loading({content:`正在刷新 ${n.title||n.id}...`,key:"refreshFeed"}),await h.execute(`rss refresh ${n.id}`,3e4),u.success({content:"刷新完成",key:"refreshFeed"}),await A(),await F()}catch(l){u.error({content:"刷新失败: "+l.message,key:"refreshFeed"})}}async function V(n){try{u.loading({content:`正在删除 ${n.title||n.id}...`,key:"removeFeed"});const{output:l}=await h.execute(`rss remove ${n.id}`,2e4);l.includes("error")||l.includes("失败")?u.error({content:"删除失败: "+l.slice(0,120),key:"removeFeed"}):(u.success({content:"已删除订阅源",key:"removeFeed"}),await A(),await F())}catch(l){u.error({content:"删除失败: "+l.message,key:"removeFeed"})}}async function t(){D.value=!0;try{u.loading({content:"正在刷新所有订阅源...",key:"refreshAll"}),await h.execute("rss refresh-all",6e4),u.success({content:"全部刷新完成",key:"refreshAll"}),await A(),await F()}catch(n){u.error({content:"刷新失败: "+n.message,key:"refreshAll"})}finally{D.value=!1}}async function _(n){try{await h.execute(`rss mark-read ${n.id}`,1e4),n.read=!0,u.success("已标记已读")}catch(l){u.error("操作失败: "+l.message)}}function K(n,l){z.value=n?[l.key]:[]}H(async()=>{await A(),await F()});const Q={ws:h,feedsLoading:e,articlesLoading:M,refreshingAll:D,adding:w,feeds:b,articles:C,selectedFeedId:S,showAddModal:L,newFeedUrl:O,expandedKeys:z,statsCards:I,articleColumns:W,formatTime:P,safeParseJson:U,loadFeeds:A,parseFeedListText:T,loadArticles:F,parseArticlesText:j,addFeed:B,refreshFeed:E,removeFeed:V,refreshAllFeeds:t,markRead:_,onExpandArticle:K,ref:x,computed:q,onMounted:H,get ReadOutlined(){return oe},get PlusOutlined(){return ae},get ReloadOutlined(){return le},get DeleteOutlined(){return ne},get LinkOutlined(){return te},get message(){return u},get useWsStore(){return Z},get tryParseJson(){return G}};return Object.defineProperty(Q,"__isScriptSetup",{enumerable:!1,value:!0}),Q}},re={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},ie={key:0,style:{"text-align":"center",padding:"60px"}},de={style:{display:"flex","align-items":"center",gap:"6px",overflow:"hidden"}},ce={style:{color:"#e0e0e0","font-size":"13px",overflow:"hidden","text-overflow":"ellipsis","white-space":"nowrap"}},ue={style:{color:"var(--text-muted)","font-size":"11px","margin-bottom":"6px",overflow:"hidden","text-overflow":"ellipsis","white-space":"nowrap"}},me={style:{display:"flex","justify-content":"space-between",color:"var(--text-secondary)","font-size":"12px"}},pe={key:2,style:{"text-align":"center",padding:"40px",color:"var(--text-muted)","margin-bottom":"24px"}},ye={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"12px"}},fe={key:3,style:{"text-align":"center",padding:"60px"}},ge=["href"],_e={key:1,style:{color:"#e0e0e0","font-weight":"500"}},ve={key:2,style:{color:"var(--text-secondary)","font-size":"12px"}},xe={key:1,style:{color:"var(--text-muted)","font-size":"12px"}},ke={style:{padding:"8px 16px",color:"var(--text-secondary)","font-size":"13px","line-height":"1.8","max-height":"300px","overflow-y":"auto"}},he={key:0,style:{"margin-bottom":"8px"}},we=["innerHTML"],be={key:2,style:{color:"var(--text-muted)"}},Ae={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}};function Fe(X,a,h,e,M,D){const w=m("a-button"),b=m("a-space"),C=m("a-statistic"),S=m("a-card"),L=m("a-col"),O=m("a-row"),z=m("a-spin"),I=m("a-menu-item"),W=m("a-menu"),P=m("a-dropdown"),U=m("a-select-option"),A=m("a-select"),T=m("a-tag"),F=m("a-table"),j=m("a-input"),B=m("a-form-item"),E=m("a-form"),V=m("a-modal");return i(),y("div",null,[f("div",re,[a[6]||(a[6]=f("div",null,[f("h2",{class:"page-title"},"RSS 订阅"),f("p",{class:"page-sub"},"订阅源 / 文章阅读")],-1)),s(b,null,{default:o(()=>[s(w,{type:"primary",onClick:a[0]||(a[0]=t=>e.showAddModal=!0)},{icon:o(()=>[s(e.PlusOutlined)]),default:o(()=>[a[4]||(a[4]=g(" 添加订阅 ",-1))]),_:1}),s(w,{ghost:"",loading:e.refreshingAll,onClick:e.refreshAllFeeds},{icon:o(()=>[s(e.ReloadOutlined)]),default:o(()=>[a[5]||(a[5]=g(" 全部刷新 ",-1))]),_:1},8,["loading"])]),_:1})]),v(" Stats Cards "),s(O,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:o(()=>[(i(!0),y(N,null,J(e.statsCards,t=>(i(),R(L,{xs:12,sm:6,key:t.label},{default:o(()=>[s(S,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"},size:"small"},{default:o(()=>[s(C,{title:t.label,value:t.value,"value-style":{color:t.color,fontSize:"20px"}},null,8,["title","value","value-style"])]),_:2},1024)]),_:2},1024))),128))]),_:1}),v(" Section 1: Feed Sources "),a[16]||(a[16]=f("h3",{style:{color:"var(--text-primary)","margin-bottom":"12px"}},"订阅源管理",-1)),e.feedsLoading?(i(),y("div",ie,[s(z,{size:"large"})])):e.feeds.length>0?(i(),R(O,{key:1,gutter:[16,16],style:{"margin-bottom":"24px"}},{default:o(()=>[(i(!0),y(N,null,J(e.feeds,t=>(i(),R(L,{xs:24,sm:12,md:8,lg:6,key:t.id||t.url},{default:o(()=>[s(S,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"},size:"small",hoverable:!0},{title:o(()=>[f("div",de,[s(e.ReadOutlined,{style:{color:"#1677ff","flex-shrink":"0"}}),f("span",ce,k(t.title||"未命名订阅"),1)])]),extra:o(()=>[s(P,null,{overlay:o(()=>[s(W,null,{default:o(()=>[s(I,{onClick:_=>e.refreshFeed(t)},{default:o(()=>[s(e.ReloadOutlined),a[8]||(a[8]=g(" 刷新 ",-1))]),_:1},8,["onClick"]),s(I,{onClick:_=>e.removeFeed(t),danger:""},{default:o(()=>[s(e.DeleteOutlined),a[9]||(a[9]=g(" 删除 ",-1))]),_:1},8,["onClick"])]),_:2},1024)]),default:o(()=>[s(w,{size:"small",type:"text",style:{color:"var(--text-muted)"}},{default:o(()=>[...a[7]||(a[7]=[g("...",-1)])]),_:1})]),_:2},1024)]),default:o(()=>[f("p",ue,[s(e.LinkOutlined),g(" "+k(t.url||"-"),1)]),f("div",me,[f("span",null,k(t.itemCount??"-")+" 篇文章",1),f("span",null,k(e.formatTime(t.lastUpdated)),1)])]),_:2},1024)]),_:2},1024))),128))]),_:1})):(i(),y("div",pe,[s(e.ReadOutlined,{style:{"font-size":"40px","margin-bottom":"12px",display:"block"}}),a[10]||(a[10]=g(' 暂无订阅源,点击"添加订阅"开始 ',-1))])),v(" Section 2: Articles "),f("div",ye,[a[12]||(a[12]=f("h3",{style:{color:"var(--text-primary)",margin:"0"}},"文章列表",-1)),s(b,null,{default:o(()=>[s(A,{value:e.selectedFeedId,"onUpdate:value":a[1]||(a[1]=t=>e.selectedFeedId=t),style:{"min-width":"180px"},placeholder:"筛选订阅源","allow-clear":"",onChange:e.loadArticles},{default:o(()=>[s(U,{value:""},{default:o(()=>[...a[11]||(a[11]=[g("全部订阅",-1)])]),_:1}),(i(!0),y(N,null,J(e.feeds,t=>(i(),R(U,{key:t.id,value:t.id},{default:o(()=>[g(k(t.title||t.url),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),s(w,{loading:e.articlesLoading,onClick:e.loadArticles},{icon:o(()=>[s(e.ReloadOutlined)]),_:1},8,["loading"])]),_:1})]),e.articlesLoading?(i(),y("div",fe,[s(z,{size:"large"})])):(i(),R(F,{key:4,columns:e.articleColumns,"data-source":e.articles,pagination:{pageSize:20,showTotal:t=>`共 ${t} 条`},size:"small",style:{background:"var(--bg-card)"},"row-class-name":()=>"rss-row",expandable:{expandedRowKeys:e.expandedKeys,onExpand:e.onExpandArticle}},{bodyCell:o(({column:t,record:_})=>[t.key==="title"?(i(),y(N,{key:0},[_.link?(i(),y("a",{key:0,href:_.link,target:"_blank",rel:"noopener noreferrer",style:{color:"#1677ff","font-weight":"500"}},[s(e.LinkOutlined,{style:{"margin-right":"4px"}}),g(k(_.title),1)],8,ge)):(i(),y("span",_e,k(_.title),1))],64)):v("v-if",!0),t.key==="source"?(i(),R(T,{key:1,color:"blue",style:{"font-size":"10px"}},{default:o(()=>[g(k(_.source||"-"),1)]),_:2},1024)):v("v-if",!0),t.key==="publishedAt"?(i(),y("span",ve,k(e.formatTime(_.publishedAt)),1)):v("v-if",!0),t.key==="status"?(i(),R(T,{key:3,color:_.read?"default":"green"},{default:o(()=>[g(k(_.read?"已读":"未读"),1)]),_:2},1032,["color"])):v("v-if",!0),t.key==="actions"?(i(),y(N,{key:4},[_.read?(i(),y("span",xe,"--")):(i(),R(w,{key:0,size:"small",type:"link",onClick:$(K=>e.markRead(_),["stop"])},{default:o(()=>[...a[13]||(a[13]=[g(" 标记已读 ",-1)])]),_:1},8,["onClick"]))],64)):v("v-if",!0)]),expandedRowRender:o(({record:t})=>[f("div",ke,[t.summary?(i(),y("div",he,[a[14]||(a[14]=f("strong",{style:{color:"var(--text-primary)"}},"摘要: ",-1)),g(k(t.summary),1)])):v("v-if",!0),t.content?(i(),y("div",{key:1,innerHTML:t.content,style:{color:"var(--text-secondary)"}},null,8,we)):v("v-if",!0),!t.summary&&!t.content?(i(),y("div",be,"暂无内容预览")):v("v-if",!0)])]),emptyText:o(()=>[f("div",Ae,[s(e.ReadOutlined,{style:{"font-size":"40px","margin-bottom":"12px",display:"block"}}),a[15]||(a[15]=g(" 暂无文章 ",-1))])]),_:1},8,["data-source","pagination","expandable"])),v(" Add Feed Modal "),s(V,{open:e.showAddModal,"onUpdate:open":a[3]||(a[3]=t=>e.showAddModal=t),title:"添加订阅源","confirm-loading":e.adding,onOk:e.addFeed,"ok-text":"添加","cancel-text":"取消"},{default:o(()=>[s(E,{"label-col":{span:4},"wrapper-col":{span:20},style:{"margin-top":"16px"}},{default:o(()=>[s(B,{label:"URL",required:""},{default:o(()=>[s(j,{value:e.newFeedUrl,"onUpdate:value":a[2]||(a[2]=t=>e.newFeedUrl=t),placeholder:"输入 RSS 订阅源地址,如 https://example.com/feed.xml"},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"])])}const Oe=ee(se,[["render",Fe],["__scopeId","data-v-59e72a50"],["__file","/tmp/cc-web-panel-ehQgdt/repo/packages/web-panel/src/views/RssFeed.vue"]]);export{Oe as default};
1
+ import{I as m,J as y,U as f,c as s,K as o,V as v,S as R,Q as g,o as H,b as Q,r as x,P as i,F as N,Z as J,R as k,a2 as $}from"./vendor-BvqAck49.js";import{_ as ee,u as q,d as u,t as G}from"./index-Dh8r6PnR.js";import{aB as te,aQ as ne,R as le,as as ae,y as oe}from"./icons-DP3uiYxy.js";const se={__name:"RssFeed",setup(X,{expose:a}){a();const h=q(),e=x(!1),M=x(!1),j=x(!1),w=x(!1),b=x([]),C=x([]),S=x(""),L=x(!1),O=x(""),z=x([]),D=Q(()=>{const n=b.value.length,l=C.value.length,d=C.value.filter(p=>!p.read).length,r=b.value.filter(p=>p.lastUpdated).sort((p,Y)=>new Date(Y.lastUpdated)-new Date(p.lastUpdated))[0],c=r?I(r.lastUpdated):"-";return[{label:"订阅源数",value:n,color:"#1677ff"},{label:"文章总数",value:l,color:"#52c41a"},{label:"未读文章",value:d,color:"#faad14"},{label:"最近刷新",value:c,color:"#13c2c2"}]}),W=[{title:"标题",key:"title",dataIndex:"title",ellipsis:!0},{title:"来源",key:"source",dataIndex:"source",width:"140px"},{title:"发布时间",key:"publishedAt",dataIndex:"publishedAt",width:"160px"},{title:"状态",key:"status",width:"80px"},{title:"操作",key:"actions",width:"100px"}];function I(n){if(!n)return"-";try{const l=new Date(n);return isNaN(l.getTime())?n:l.toLocaleString("zh-CN",{month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"})}catch{return n}}function U(n){return G(n)}async function A(){e.value=!0;try{const{output:n}=await h.execute("rss list --json",2e4),l=U(n);Array.isArray(l)?b.value=l.map((d,r)=>({key:d.id||d.url||r,id:d.id||String(r),title:d.title||d.name||"",url:d.url||d.feedUrl||"",itemCount:d.itemCount??d.articleCount??d.count??0,lastUpdated:d.lastUpdated||d.updatedAt||d.lastRefresh||""})):b.value=T(n)}catch(n){u.error("加载订阅源失败: "+n.message)}finally{e.value=!1}}function T(n){const l=[],d=n.split(`
2
+ `);for(const r of d){const c=r.trim();if(!c||c.startsWith("─")||c.match(/^\d+ feed/i)||c.startsWith("RSS")||c.startsWith("No "))continue;const p=c.match(/^(\d+)\.\s+(.+?)(?:\s+[-–]\s+(.+))?$/);p?l.push({key:p[1],id:p[1],title:p[2].trim(),url:(p[3]||"").trim(),itemCount:0,lastUpdated:""}):c.length>5&&l.push({key:String(l.length),id:String(l.length),title:c.slice(0,80),url:"",itemCount:0,lastUpdated:""})}return l}async function F(){M.value=!0,z.value=[];try{let n="rss articles --limit 30 --json";S.value&&(n=`rss articles --feed ${S.value} --limit 30 --json`);const{output:l}=await h.execute(n,2e4),d=U(l);Array.isArray(d)?C.value=d.map((r,c)=>({key:r.id||String(c),id:r.id||String(c),title:r.title||"无标题",link:r.link||r.url||"",source:r.source||r.feedTitle||r.feedName||"",publishedAt:r.publishedAt||r.pubDate||r.date||"",read:!!r.read,summary:r.summary||r.description||"",content:r.content||""})):C.value=P(l)}catch(n){u.error("加载文章失败: "+n.message)}finally{M.value=!1}}function P(n){const l=[],d=n.split(`
3
+ `);for(const r of d){const c=r.trim();if(!c||c.startsWith("─")||c.match(/^\d+ article/i)||c.startsWith("No "))continue;const p=c.match(/^(\d+)\.\s+(.+?)(?:\s+[-–]\s+(.+))?$/);p&&l.push({key:p[1],id:p[1],title:p[2].trim(),link:"",source:(p[3]||"").trim(),publishedAt:"",read:!1,summary:"",content:""})}return l}async function B(){const n=O.value.trim();if(!n){u.warning("请输入订阅源地址");return}w.value=!0;try{const{output:l}=await h.execute(`rss add "${n}"`,3e4);l.includes("error")||l.includes("失败")||l.includes("Error")?u.error("添加失败: "+l.slice(0,120)):(u.success("订阅源已添加"),L.value=!1,O.value="",await A(),await F())}catch(l){u.error("添加失败: "+l.message)}finally{w.value=!1}}async function E(n){try{u.loading({content:`正在刷新 ${n.title||n.id}...`,key:"refreshFeed"}),await h.execute(`rss refresh ${n.id}`,3e4),u.success({content:"刷新完成",key:"refreshFeed"}),await A(),await F()}catch(l){u.error({content:"刷新失败: "+l.message,key:"refreshFeed"})}}async function V(n){try{u.loading({content:`正在删除 ${n.title||n.id}...`,key:"removeFeed"});const{output:l}=await h.execute(`rss remove ${n.id}`,2e4);l.includes("error")||l.includes("失败")?u.error({content:"删除失败: "+l.slice(0,120),key:"removeFeed"}):(u.success({content:"已删除订阅源",key:"removeFeed"}),await A(),await F())}catch(l){u.error({content:"删除失败: "+l.message,key:"removeFeed"})}}async function t(){j.value=!0;try{u.loading({content:"正在刷新所有订阅源...",key:"refreshAll"}),await h.execute("rss refresh-all",6e4),u.success({content:"全部刷新完成",key:"refreshAll"}),await A(),await F()}catch(n){u.error({content:"刷新失败: "+n.message,key:"refreshAll"})}finally{j.value=!1}}async function _(n){try{await h.execute(`rss mark-read ${n.id}`,1e4),n.read=!0,u.success("已标记已读")}catch(l){u.error("操作失败: "+l.message)}}function K(n,l){z.value=n?[l.key]:[]}H(async()=>{await A(),await F()});const Z={ws:h,feedsLoading:e,articlesLoading:M,refreshingAll:j,adding:w,feeds:b,articles:C,selectedFeedId:S,showAddModal:L,newFeedUrl:O,expandedKeys:z,statsCards:D,articleColumns:W,formatTime:I,safeParseJson:U,loadFeeds:A,parseFeedListText:T,loadArticles:F,parseArticlesText:P,addFeed:B,refreshFeed:E,removeFeed:V,refreshAllFeeds:t,markRead:_,onExpandArticle:K,ref:x,computed:Q,onMounted:H,get ReadOutlined(){return oe},get PlusOutlined(){return ae},get ReloadOutlined(){return le},get DeleteOutlined(){return ne},get LinkOutlined(){return te},get message(){return u},get useWsStore(){return q},get tryParseJson(){return G}};return Object.defineProperty(Z,"__isScriptSetup",{enumerable:!1,value:!0}),Z}},re={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},ie={key:0,style:{"text-align":"center",padding:"60px"}},de={style:{display:"flex","align-items":"center",gap:"6px",overflow:"hidden"}},ce={style:{color:"#e0e0e0","font-size":"13px",overflow:"hidden","text-overflow":"ellipsis","white-space":"nowrap"}},ue={style:{color:"var(--text-muted)","font-size":"11px","margin-bottom":"6px",overflow:"hidden","text-overflow":"ellipsis","white-space":"nowrap"}},me={style:{display:"flex","justify-content":"space-between",color:"var(--text-secondary)","font-size":"12px"}},pe={key:2,style:{"text-align":"center",padding:"40px",color:"var(--text-muted)","margin-bottom":"24px"}},ye={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"12px"}},fe={key:3,style:{"text-align":"center",padding:"60px"}},ge=["href"],_e={key:1,style:{color:"#e0e0e0","font-weight":"500"}},ve={key:2,style:{color:"var(--text-secondary)","font-size":"12px"}},xe={key:1,style:{color:"var(--text-muted)","font-size":"12px"}},ke={style:{padding:"8px 16px",color:"var(--text-secondary)","font-size":"13px","line-height":"1.8","max-height":"300px","overflow-y":"auto"}},he={key:0,style:{"margin-bottom":"8px"}},we=["innerHTML"],be={key:2,style:{color:"var(--text-muted)"}},Ae={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}};function Fe(X,a,h,e,M,j){const w=m("a-button"),b=m("a-space"),C=m("a-statistic"),S=m("a-card"),L=m("a-col"),O=m("a-row"),z=m("a-spin"),D=m("a-menu-item"),W=m("a-menu"),I=m("a-dropdown"),U=m("a-select-option"),A=m("a-select"),T=m("a-tag"),F=m("a-table"),P=m("a-input"),B=m("a-form-item"),E=m("a-form"),V=m("a-modal");return i(),y("div",null,[f("div",re,[a[6]||(a[6]=f("div",null,[f("h2",{class:"page-title"},"RSS 订阅"),f("p",{class:"page-sub"},"订阅源 / 文章阅读")],-1)),s(b,null,{default:o(()=>[s(w,{type:"primary",onClick:a[0]||(a[0]=t=>e.showAddModal=!0)},{icon:o(()=>[s(e.PlusOutlined)]),default:o(()=>[a[4]||(a[4]=g(" 添加订阅 ",-1))]),_:1}),s(w,{ghost:"",loading:e.refreshingAll,onClick:e.refreshAllFeeds},{icon:o(()=>[s(e.ReloadOutlined)]),default:o(()=>[a[5]||(a[5]=g(" 全部刷新 ",-1))]),_:1},8,["loading"])]),_:1})]),v(" Stats Cards "),s(O,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:o(()=>[(i(!0),y(N,null,J(e.statsCards,t=>(i(),R(L,{xs:12,sm:6,key:t.label},{default:o(()=>[s(S,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"},size:"small"},{default:o(()=>[s(C,{title:t.label,value:t.value,"value-style":{color:t.color,fontSize:"20px"}},null,8,["title","value","value-style"])]),_:2},1024)]),_:2},1024))),128))]),_:1}),v(" Section 1: Feed Sources "),a[16]||(a[16]=f("h3",{style:{color:"var(--text-primary)","margin-bottom":"12px"}},"订阅源管理",-1)),e.feedsLoading?(i(),y("div",ie,[s(z,{size:"large"})])):e.feeds.length>0?(i(),R(O,{key:1,gutter:[16,16],style:{"margin-bottom":"24px"}},{default:o(()=>[(i(!0),y(N,null,J(e.feeds,t=>(i(),R(L,{xs:24,sm:12,md:8,lg:6,key:t.id||t.url},{default:o(()=>[s(S,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"},size:"small",hoverable:!0},{title:o(()=>[f("div",de,[s(e.ReadOutlined,{style:{color:"#1677ff","flex-shrink":"0"}}),f("span",ce,k(t.title||"未命名订阅"),1)])]),extra:o(()=>[s(I,null,{overlay:o(()=>[s(W,null,{default:o(()=>[s(D,{onClick:_=>e.refreshFeed(t)},{default:o(()=>[s(e.ReloadOutlined),a[8]||(a[8]=g(" 刷新 ",-1))]),_:1},8,["onClick"]),s(D,{onClick:_=>e.removeFeed(t),danger:""},{default:o(()=>[s(e.DeleteOutlined),a[9]||(a[9]=g(" 删除 ",-1))]),_:1},8,["onClick"])]),_:2},1024)]),default:o(()=>[s(w,{size:"small",type:"text",style:{color:"var(--text-muted)"}},{default:o(()=>[...a[7]||(a[7]=[g("...",-1)])]),_:1})]),_:2},1024)]),default:o(()=>[f("p",ue,[s(e.LinkOutlined),g(" "+k(t.url||"-"),1)]),f("div",me,[f("span",null,k(t.itemCount??"-")+" 篇文章",1),f("span",null,k(e.formatTime(t.lastUpdated)),1)])]),_:2},1024)]),_:2},1024))),128))]),_:1})):(i(),y("div",pe,[s(e.ReadOutlined,{style:{"font-size":"40px","margin-bottom":"12px",display:"block"}}),a[10]||(a[10]=g(' 暂无订阅源,点击"添加订阅"开始 ',-1))])),v(" Section 2: Articles "),f("div",ye,[a[12]||(a[12]=f("h3",{style:{color:"var(--text-primary)",margin:"0"}},"文章列表",-1)),s(b,null,{default:o(()=>[s(A,{value:e.selectedFeedId,"onUpdate:value":a[1]||(a[1]=t=>e.selectedFeedId=t),style:{"min-width":"180px"},placeholder:"筛选订阅源","allow-clear":"",onChange:e.loadArticles},{default:o(()=>[s(U,{value:""},{default:o(()=>[...a[11]||(a[11]=[g("全部订阅",-1)])]),_:1}),(i(!0),y(N,null,J(e.feeds,t=>(i(),R(U,{key:t.id,value:t.id},{default:o(()=>[g(k(t.title||t.url),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),s(w,{loading:e.articlesLoading,onClick:e.loadArticles},{icon:o(()=>[s(e.ReloadOutlined)]),_:1},8,["loading"])]),_:1})]),e.articlesLoading?(i(),y("div",fe,[s(z,{size:"large"})])):(i(),R(F,{key:4,columns:e.articleColumns,"data-source":e.articles,pagination:{pageSize:20,showTotal:t=>`共 ${t} 条`},size:"small",style:{background:"var(--bg-card)"},"row-class-name":()=>"rss-row",expandable:{expandedRowKeys:e.expandedKeys,onExpand:e.onExpandArticle}},{bodyCell:o(({column:t,record:_})=>[t.key==="title"?(i(),y(N,{key:0},[_.link?(i(),y("a",{key:0,href:_.link,target:"_blank",rel:"noopener noreferrer",style:{color:"#1677ff","font-weight":"500"}},[s(e.LinkOutlined,{style:{"margin-right":"4px"}}),g(k(_.title),1)],8,ge)):(i(),y("span",_e,k(_.title),1))],64)):v("v-if",!0),t.key==="source"?(i(),R(T,{key:1,color:"blue",style:{"font-size":"10px"}},{default:o(()=>[g(k(_.source||"-"),1)]),_:2},1024)):v("v-if",!0),t.key==="publishedAt"?(i(),y("span",ve,k(e.formatTime(_.publishedAt)),1)):v("v-if",!0),t.key==="status"?(i(),R(T,{key:3,color:_.read?"default":"green"},{default:o(()=>[g(k(_.read?"已读":"未读"),1)]),_:2},1032,["color"])):v("v-if",!0),t.key==="actions"?(i(),y(N,{key:4},[_.read?(i(),y("span",xe,"--")):(i(),R(w,{key:0,size:"small",type:"link",onClick:$(K=>e.markRead(_),["stop"])},{default:o(()=>[...a[13]||(a[13]=[g(" 标记已读 ",-1)])]),_:1},8,["onClick"]))],64)):v("v-if",!0)]),expandedRowRender:o(({record:t})=>[f("div",ke,[t.summary?(i(),y("div",he,[a[14]||(a[14]=f("strong",{style:{color:"var(--text-primary)"}},"摘要: ",-1)),g(k(t.summary),1)])):v("v-if",!0),t.content?(i(),y("div",{key:1,innerHTML:t.content,style:{color:"var(--text-secondary)"}},null,8,we)):v("v-if",!0),!t.summary&&!t.content?(i(),y("div",be,"暂无内容预览")):v("v-if",!0)])]),emptyText:o(()=>[f("div",Ae,[s(e.ReadOutlined,{style:{"font-size":"40px","margin-bottom":"12px",display:"block"}}),a[15]||(a[15]=g(" 暂无文章 ",-1))])]),_:1},8,["data-source","pagination","expandable"])),v(" Add Feed Modal "),s(V,{open:e.showAddModal,"onUpdate:open":a[3]||(a[3]=t=>e.showAddModal=t),title:"添加订阅源","confirm-loading":e.adding,onOk:e.addFeed,"ok-text":"添加","cancel-text":"取消"},{default:o(()=>[s(E,{"label-col":{span:4},"wrapper-col":{span:20},style:{"margin-top":"16px"}},{default:o(()=>[s(B,{label:"URL",required:""},{default:o(()=>[s(P,{value:e.newFeedUrl,"onUpdate:value":a[2]||(a[2]=t=>e.newFeedUrl=t),placeholder:"输入 RSS 订阅源地址,如 https://example.com/feed.xml"},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"])])}const Oe=ee(se,[["render",Fe],["__scopeId","data-v-59e72a50"],["__file","/tmp/cc-web-panel-2pZejZ/repo/packages/web-panel/src/views/RssFeed.vue"]]);export{Oe as default};