chainlesschain 0.162.3 → 0.162.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/assets/web-panel/.build-hash +1 -1
- package/src/assets/web-panel/assets/{AIOps-BHcJlF4M.js → AIOps-BXQ92dvI.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-QNqNYP_E.js → ActionButton-DjmolmAS.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-DWrmU2MM.js → Analytics-LUUOS78B.js} +1 -1
- package/src/assets/web-panel/assets/{AppLayout-0BXhjvFX.js → AppLayout-DeAq-Waa.js} +2 -2
- package/src/assets/web-panel/assets/{Audit-Cns_OJ3y.js → Audit-De_86BpN.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-BWXKm8S2.js → Backup-CAqIbrb5.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-DMtM90I4.js → BaseInput-CwTVDavS.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-CPSQIJkd.js → Chat-BnihAKiI.js} +1 -1
- package/src/assets/web-panel/assets/{Checkbox-CdoTzEcu.js → Checkbox-BDrCuC9m.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-DiMm-2CJ.js → Codegen-DWqN0jpL.js} +1 -1
- package/src/assets/web-panel/assets/{Col-Dw8uRsh8.js → Col-B7rIr4g3.js} +1 -1
- package/src/assets/web-panel/assets/{Community-DF6oPrrt.js → Community-YYEO8SY3.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-DDeBOvFc.js → Compact-DZHWn-_j.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-cpcX8foc.js → Compliance-CCYzk_rt.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-BnF4dCvO.js → Cowork-D9G6khOx.js} +1 -1
- package/src/assets/web-panel/assets/{Cron-CNm5yzGt.js → Cron-IbwddEeZ.js} +1 -1
- package/src/assets/web-panel/assets/{Crosschain-1fdaoWnO.js → Crosschain-Bct133LN.js} +1 -1
- package/src/assets/web-panel/assets/{DID-CgWgrQjr.js → DID-32J0mXoS.js} +1 -1
- package/src/assets/web-panel/assets/{Dashboard-dGcTq_hg.js → Dashboard-TaPAK2WV.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-CMcWp2f1.js → Dropdown-Df4hUeIm.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-BVmtVOzD.js → Federation-C0xfKoZr.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-BTuMR6zf.js → FormItemContext-CoacTa1H.js} +1 -1
- package/src/assets/web-panel/assets/{Git-2itzzOWU.js → Git-DZZF1lrY.js} +1 -1
- package/src/assets/web-panel/assets/{Governance-BD5nFtjx.js → Governance-Bo-P_BP3.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-BqTjotuw.js → Inference-agx6qPl9.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-CkJCUp_X.js → KnowledgeGraph-Dc8YZGiO.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-BezIQuu3.js → Logs-njAOFc0W.js} +1 -1
- package/src/assets/web-panel/assets/{Marketplace-BQi8NC94.js → Marketplace-Yu-RUTN2.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-UDm4tI8g.js → McpTools-BuzdmOwR.js} +1 -1
- package/src/assets/web-panel/assets/{Memory-b3k3SJXP.js → Memory-DJyWxXM0.js} +1 -1
- package/src/assets/web-panel/assets/{MobileBridge-CHysUGzj.js → MobileBridge-CIKfLcfn.js} +1 -1
- package/src/assets/web-panel/assets/{MobileProjects-H5DjqNIw.js → MobileProjects-B1OZ0_b1.js} +1 -1
- package/src/assets/web-panel/assets/{Mtc-B-kn2cbZ.js → Mtc-CJHI9qG0.js} +1 -1
- package/src/assets/web-panel/assets/{MtcAudit-BSeDGJAO.js → MtcAudit-cSrqcG3H.js} +1 -1
- package/src/assets/web-panel/assets/{Multisig-BSwWbNCn.js → Multisig-DTVo9GFR.js} +1 -1
- package/src/assets/web-panel/assets/{NLProgramming-B7fTKT9-.js → NLProgramming-NqfB2jLI.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-CE7Dxyik.js → Notes-MuMFfs67.js} +1 -1
- package/src/assets/web-panel/assets/{NotificationSettings-BrWPb12X.js → NotificationSettings-B5ECNQNW.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-BvMcmpZ-.js → Organization-Dn98sbrZ.js} +1 -1
- package/src/assets/web-panel/assets/{Overflow-9VpUiyX3.js → Overflow-Sl5FJV2c.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-CZiZLuH6.js → P2P-58-TvQSE.js} +1 -1
- package/src/assets/web-panel/assets/{Permissions-7xPYU8o3.js → Permissions-BFtHCNck.js} +1 -1
- package/src/assets/web-panel/assets/PersonalDataHub-CVH9NAfL.css +1 -0
- package/src/assets/web-panel/assets/PersonalDataHub-Cu--XeWZ.js +1 -0
- package/src/assets/web-panel/assets/{Pipeline-BXmWkBtJ.js → Pipeline-DWt_M98L.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-Bowi-wqF.js → Privacy-BUX3yRZc.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-BW1Xj7_l.js → ProjectInit-wYWMWfxy.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectSettings-pDbBvJFG.js → ProjectSettings-CIRbqu0F.js} +1 -1
- package/src/assets/web-panel/assets/{Projects-D32hRs2K.js → Projects-CDFkiEL3.js} +1 -1
- package/src/assets/web-panel/assets/{Providers-fvnKRdFc.js → Providers-CnPu1q45.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-DBZrimTb.js → QuickAsk-mwOI7Tc-.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-B_leuPdE.js → Recommend-Ct6SM2HV.js} +1 -1
- package/src/assets/web-panel/assets/{Reputation-9YJu2Q0s.js → Reputation-D7D6rp3d.js} +1 -1
- package/src/assets/web-panel/assets/{Row-BwDaJw-R.js → Row-CX03nw4D.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-CCwGtGbs.js → RssFeed-BRyNIOp0.js} +1 -1
- package/src/assets/web-panel/assets/{Search-CLdXqpfz.js → Search-Dh-jwNaq.js} +1 -1
- package/src/assets/web-panel/assets/{Security-_It0GsWS.js → Security-C53OqK_S.js} +1 -1
- package/src/assets/web-panel/assets/{Services-jBxBWGGT.js → Services-nXK7991F.js} +1 -1
- package/src/assets/web-panel/assets/{Skeleton-DR_EuFFW.js → Skeleton-mVGGUSnx.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-DsHcMNEk.js → Skills-AVICQyr7.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-Be0UaX-h.js → Sla-BO-jiswJ.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-uUhDyyHj.js → SpeechSettings-CQ73BtGw.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-CUAwaSnj.js → SyncSettings-ozTu_ihm.js} +1 -1
- package/src/assets/web-panel/assets/{Tasks-CUVZww9Q.js → Tasks-CwTiFnau.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-WLZcNzJ_.js → Templates-PJ-SYUEg.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-FgN0uYm6.js → Tenant-DeckYbHe.js} +1 -1
- package/src/assets/web-panel/assets/{Terminal-BzLHjHyj.js → Terminal-CIn4gdxj.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-z7lyRr40.js → Tokens-Bc40cdFh.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-HxLdC9ne.js → Trigger-BERtmWcc.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-DggmMxpI.js → Trust-_ktoDZt-.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-BO-pKTZ_.js → UkeySign-DecT3_Zy.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-DdLdJ9Ps.js → VideoEditing-AqPQa7a7.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-F8EfdQDN.js → Wallet-CL303fn9.js} +1 -1
- package/src/assets/web-panel/assets/{WebAuthn-Bi2Kf8Ev.js → WebAuthn-Bwy0YO-u.js} +1 -1
- package/src/assets/web-panel/assets/{WorkflowEditor-DUHk4Y0A.js → WorkflowEditor-Bbewn3S4.js} +1 -1
- package/src/assets/web-panel/assets/{chat-BMz8ik6R.js → chat-CDIxA8Km.js} +1 -1
- package/src/assets/web-panel/assets/{colors-DTTx1bVY.js → colors-rQIxLS12.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-BjZyyKpa.js → compact-item-1jZiKenx.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-D0Ztn7R_.js → createContext-B3FjOuaT.js} +1 -1
- package/src/assets/web-panel/assets/{hasIn-BeXm1bJ2.js → hasIn-dZ195iTN.js} +1 -1
- package/src/assets/web-panel/assets/{index-DTzwBmBS.js → index--NxZmEUk.js} +1 -1
- package/src/assets/web-panel/assets/{index-B_juAGfN.js → index-19d37fVJ.js} +3 -3
- package/src/assets/web-panel/assets/{index-BDRzvi5v.js → index-AHCOz9NC.js} +1 -1
- package/src/assets/web-panel/assets/{index-aBdRRXWO.js → index-BByVZ5fI.js} +1 -1
- package/src/assets/web-panel/assets/{index-OjH2wDtW.js → index-BC6wcYy3.js} +1 -1
- package/src/assets/web-panel/assets/{index-DMvkBq2d.js → index-BDZd1181.js} +1 -1
- package/src/assets/web-panel/assets/{index-DB1i3Cfr.js → index-BOiuM69x.js} +1 -1
- package/src/assets/web-panel/assets/{index-D-niPBwZ.js → index-Bq8fsYQ6.js} +1 -1
- package/src/assets/web-panel/assets/{index-xN0WCVmC.js → index-Br6-EXdw.js} +1 -1
- package/src/assets/web-panel/assets/{index-DIoinlAY.js → index-BsUXzEb2.js} +1 -1
- package/src/assets/web-panel/assets/{index-CobyvwP0.js → index-BwIwGE8Y.js} +1 -1
- package/src/assets/web-panel/assets/{index-BiAjZ9Iq.js → index-Bx15E0JQ.js} +1 -1
- package/src/assets/web-panel/assets/{index-tUIluCPu.js → index-BxnEM3za.js} +1 -1
- package/src/assets/web-panel/assets/{index-DLJnAsec.js → index-C0YzTiiB.js} +1 -1
- package/src/assets/web-panel/assets/{index-BUFpZk0I.js → index-C3SVypM3.js} +1 -1
- package/src/assets/web-panel/assets/{index-BODKOjRZ.js → index-C3rYUvdl.js} +1 -1
- package/src/assets/web-panel/assets/{index-BWRsbH6v.js → index-C4jmdcCs.js} +1 -1
- package/src/assets/web-panel/assets/index-C5Ifo5EH.js +1 -0
- package/src/assets/web-panel/assets/{index-DRNxWV3i.js → index-C8IGQbfQ.js} +1 -1
- package/src/assets/web-panel/assets/{index-CuDNPqlD.js → index-CDL_WWYl.js} +1 -1
- package/src/assets/web-panel/assets/{index-D1coHqyT.js → index-CDkCJPtr.js} +1 -1
- package/src/assets/web-panel/assets/{index-DLDHcuz4.js → index-D0DtKH7N.js} +1 -1
- package/src/assets/web-panel/assets/{index-Dx7XPVkb.js → index-D3QDmYBa.js} +1 -1
- package/src/assets/web-panel/assets/{index-BDmMBKM_.js → index-DP5rV4eS.js} +1 -1
- package/src/assets/web-panel/assets/{index-CqkwXe3s.js → index-DQXt91YA.js} +1 -1
- package/src/assets/web-panel/assets/{index-BHuIMHcS.js → index-DRIQpe4j.js} +1 -1
- package/src/assets/web-panel/assets/{index-By4zsU8r.js → index-DWJ5GzxU.js} +1 -1
- package/src/assets/web-panel/assets/{index-nwkYgoRS.js → index-Dvg5ymRK.js} +1 -1
- package/src/assets/web-panel/assets/{index-NppMuZBM.js → index-DxwYB7eB.js} +1 -1
- package/src/assets/web-panel/assets/{index-Da_XUjv2.js → index-U5Y4YNZC.js} +1 -1
- package/src/assets/web-panel/assets/{index-DfxUN2LB.js → index-XDvSQBl5.js} +1 -1
- package/src/assets/web-panel/assets/{index-D1CV-6q1.js → index-aaHXeryL.js} +1 -1
- package/src/assets/web-panel/assets/index-efjrWv6y.js +1 -0
- package/src/assets/web-panel/assets/{index-C6Isxhje.js → index-hNSGbn-4.js} +1 -1
- package/src/assets/web-panel/assets/{index-BxIq_rps.js → index-kg4NgBuP.js} +1 -1
- package/src/assets/web-panel/assets/{index-CGudWWwE.js → index-lSnZsO_d.js} +1 -1
- package/src/assets/web-panel/assets/{index-JTN4jzka.js → index-sygYO1j4.js} +1 -1
- package/src/assets/web-panel/assets/{index-DXSXIknb.js → index-uL0KmFyf.js} +1 -1
- package/src/assets/web-panel/assets/{index-DnATlZR7.js → index-xKOyC0Cx.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-DE_gVS_i.js → initDefaultProps-GbvcoqYL.js} +1 -1
- package/src/assets/web-panel/assets/{motion-BiRUGscQ.js → motion-VM5YQ6Mf.js} +1 -1
- package/src/assets/web-panel/assets/{move-DMEzVMJZ.js → move-CJvGLYlg.js} +1 -1
- package/src/assets/web-panel/assets/{omit-DBh74Ui4.js → omit-3oHJWwWB.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-D6PQbWuo.js → pickAttrs-BWBtl13u.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-BYkdt9jF.js → placementArrow-CVESPqrs.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-C2ES6P0V.js → responsiveObserve-BOvUPufq.js} +1 -1
- package/src/assets/web-panel/assets/{slide-zGdjevxe.js → slide-W_P685Dw.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-Cf6eRpR7.js → statusUtils-BnIQmxwT.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-DZZx_bHs.js → styleChecker-BMXx5Ie5.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-B6q6zt9X.js → useFlexGapSupport-DSJ4Pl17.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-DjaBUk_P.js → useFs-BPbHm7Yn.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-CDF4X084.js → vnode-HDTJKu2B.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-C9FCvBpV.js → zoom-BqKDJys9.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/gateways/ws/message-dispatcher.js +35 -1
- package/src/gateways/ws/personal-data-hub-protocol.js +134 -3
- package/src/lib/personal-data-hub-wiring.js +115 -0
- package/src/assets/web-panel/assets/PersonalDataHub-BoAsj3rP.js +0 -1
- package/src/assets/web-panel/assets/PersonalDataHub-C5HcGC5x.css +0 -1
- package/src/assets/web-panel/assets/index-DJOgV0SI.js +0 -1
- package/src/assets/web-panel/assets/index-FpewH8xy.js +0 -1
package/src/assets/web-panel/assets/{ProjectSettings-pDbBvJFG.js → ProjectSettings-CIRbqu0F.js}
RENAMED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{_ as R,u as V,d as k}from"./index-
|
|
1
|
+
import{_ as R,u as V,d as k}from"./index-19d37fVJ.js";import{R as A,F as E}from"./icons-BFHq5fEF.js";import{a as L,r as P,o as T,M as O,R as v,c as a,N as l,K as i,L as M,O as B,u as I,Q as D,S as N,f as W}from"./vendor-M5lGV-wr.js";const c=Object.freeze({rootPath:"",maxSizeMB:1e3,autoSync:!1,syncIntervalSeconds:300});function K(s){if(!s)return null;const e=s.trim();try{return JSON.parse(e)}catch{const o=e.match(/(\{[\s\S]*\}|\[[\s\S]*\])/);if(!o)return null;try{return JSON.parse(o[1])}catch{return null}}}function $(s){if(typeof s=="boolean")return s;const e=String(s).trim().toLowerCase();return e==="true"||e==="1"||e==="yes"||e==="on"}function j(s,e){if(typeof s=="number"&&Number.isFinite(s))return s;const o=parseFloat(s);return Number.isFinite(o)?o:e}function Q(s){const e={...c};if(!s)return e;const o=s.trim();if(!o||/key not found/i.test(o))return e;const n=K(o);if(n&&typeof n=="object"&&!Array.isArray(n))return n.rootPath!==void 0&&(e.rootPath=String(n.rootPath||"")),n.maxSizeMB!==void 0&&(e.maxSizeMB=j(n.maxSizeMB,c.maxSizeMB)),n.autoSync!==void 0&&(e.autoSync=$(n.autoSync)),n.syncIntervalSeconds!==void 0&&(e.syncIntervalSeconds=j(n.syncIntervalSeconds,c.syncIntervalSeconds)),e;const r=o.split(`
|
|
2
2
|
`);for(const u of r){const p=u.trim().match(/^(?:project\.)?(rootPath|maxSizeMB|autoSync|syncIntervalSeconds)\s*[=:]\s*(.+)$/i);if(!p)continue;const b=p[1],g=p[2].trim();b==="rootPath"?e.rootPath=g:b==="maxSizeMB"?e.maxSizeMB=j(g,c.maxSizeMB):b==="autoSync"?e.autoSync=$(g):b==="syncIntervalSeconds"&&(e.syncIntervalSeconds=j(g,c.syncIntervalSeconds))}return e}function F(s,e){const o={};for(const n of Object.keys(c))s[n]!==e[n]&&(o[n]=e[n]);return o}const q={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},G={style:{color:"var(--text-primary)"}},H={key:0,style:{color:"#faad14","font-size":"12px","margin-left":"8px"}},X={__name:"ProjectSettings",setup(s){const e=V(),o=P(!1),n=P(!1),r=L({...c}),u=P({...c}),h=W(()=>Object.keys(F(u.value,r)).length>0);async function p(){o.value=!0;try{const{output:d}=await e.execute("config get project",1e4),t=Q(d);Object.assign(r,t),u.value={...t}}catch(d){/key not found/i.test(d.message)?(Object.assign(r,c),u.value={...c}):k.error("加载配置失败: "+d.message)}finally{o.value=!1}}function b(){Object.assign(r,u.value)}async function g(){const d=F(u.value,r),t=Object.keys(d);if(t.length===0){k.info("没有需要保存的修改");return}n.value=!0;let f=0,S=0;for(const _ of t){const m=d[_],w=String(m).replace(/"/g,'\\"'),z=`config set project.${_} "${w}"`;try{const{output:x,exitCode:C}=await e.execute(z,1e4);C!==0||/error|failed|失败/i.test(x)?(S++,k.error(`保存 ${_} 失败: ${x.slice(0,80)}`)):f++}catch(x){S++,k.error(`保存 ${_} 失败: ${x.message}`)}}n.value=!1,S===0?(k.success(`保存成功(${f} 项)`),u.value={...r}):f>0&&(k.warning(`部分保存成功:${f} 成功 / ${S} 失败`),await p())}return T(()=>{p()}),(d,t)=>{const f=i("a-button"),S=i("a-alert"),_=i("a-input"),m=i("a-form-item"),w=i("a-input-number"),z=i("a-switch"),x=i("a-space"),C=i("a-form"),U=i("a-spin"),J=i("a-card");return M(),O("div",null,[v("div",q,[t[5]||(t[5]=v("div",null,[v("h2",{class:"page-title"},"项目存储配置"),v("p",{class:"page-sub"},"根目录 / 配额 / 自动同步")],-1)),a(f,{loading:o.value,onClick:p},{icon:l(()=>[a(I(A))]),default:l(()=>[t[4]||(t[4]=B(" 刷新 ",-1))]),_:1},8,["loading"])]),a(S,{message:"仅 Web 模式",description:"目录选择器(原生文件对话框)仅在桌面端可用,本页面需手动输入路径。修改根目录后需重启桌面应用生效;web 端只影响后端配置文件。",type:"info","show-icon":"",closable:"",style:{"margin-bottom":"16px"}}),a(J,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{title:l(()=>[v("span",G,[a(I(E),{style:{"margin-right":"8px"}}),t[6]||(t[6]=B("项目存储 ",-1))])]),default:l(()=>[a(U,{spinning:o.value},{default:l(()=>[a(C,{"label-col":{span:6},"wrapper-col":{span:18},style:{"max-width":"720px"}},{default:l(()=>[a(m,{label:"项目根目录"},{extra:l(()=>[...t[7]||(t[7]=[v("span",{style:{color:"var(--text-muted)","font-size":"11px"}}," 需绝对路径;修改后重启桌面应用生效 ",-1)])]),default:l(()=>[a(_,{value:r.rootPath,"onUpdate:value":t[0]||(t[0]=y=>r.rootPath=y),placeholder:"项目文件存储的根目录绝对路径",disabled:n.value},null,8,["value","disabled"])]),_:1}),a(m,{label:"最大项目大小"},{default:l(()=>[a(w,{value:r.maxSizeMB,"onUpdate:value":t[1]||(t[1]=y=>r.maxSizeMB=y),min:100,max:1e4,step:100,"addon-after":"MB",style:{width:"220px"},disabled:n.value},null,8,["value","disabled"])]),_:1}),a(m,{label:"自动同步"},{default:l(()=>[a(z,{checked:r.autoSync,"onUpdate:checked":t[2]||(t[2]=y=>r.autoSync=y),disabled:n.value},null,8,["checked","disabled"]),t[8]||(t[8]=v("span",{style:{"margin-left":"12px",color:"var(--text-secondary)","font-size":"12px"}}," 自动同步项目到后端服务器 ",-1))]),_:1}),r.autoSync?(M(),D(m,{key:0,label:"同步间隔"},{default:l(()=>[a(w,{value:r.syncIntervalSeconds,"onUpdate:value":t[3]||(t[3]=y=>r.syncIntervalSeconds=y),min:60,max:3600,step:60,"addon-after":"秒",style:{width:"220px"},disabled:n.value},null,8,["value","disabled"])]),_:1})):N("",!0),a(m,{"wrapper-col":{offset:6,span:18}},{default:l(()=>[a(x,null,{default:l(()=>[a(f,{onClick:b,disabled:n.value||o.value},{default:l(()=>[...t[9]||(t[9]=[B(" 重置 ",-1)])]),_:1},8,["disabled"]),a(f,{type:"primary",loading:n.value,disabled:!h.value,onClick:g},{default:l(()=>[...t[10]||(t[10]=[B(" 保存配置 ",-1)])]),_:1},8,["loading","disabled"]),h.value?(M(),O("span",H," 有未保存的修改 ")):N("",!0)]),_:1})]),_:1})]),_:1})]),_:1},8,["spinning"])]),_:1})])}}},te=R(X,[["__scopeId","data-v-17603429"]]);export{te as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{o as Ne,M as x,R as C,P as i,u as k,O as n,c as t,N as a,Q as w,S as A,K as r,r as d,f as ie,L as c,F as de,a1 as Te}from"./vendor-M5lGV-wr.js";import{_ as qe,b as Me,u as Ve,d as u}from"./index-B_juAGfN.js";import{u as We}from"./useShellMode-CgR0wCYM.js";import{R as Ge,ar as He,F as Je,f as Ke,l as Qe,aG as Xe,aH as Ye,aI as Ze}from"./icons-BFHq5fEF.js";const et={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},tt={class:"page-title"},at={class:"page-sub"},lt={class:"filter-bar",style:{"margin-bottom":"12px",display:"flex",gap:"12px","align-items":"center"}},ot={key:0,style:{"font-size":"12px",color:"#888"}},nt={key:0,style:{color:"#888","font-size":"12px"}},rt={key:0},st={key:1,style:{color:"#888"}},ut=["onClick"],it={key:0,style:{color:"#888","font-size":"12px"}},dt={__name:"Projects",setup(ct){const{t:ce}=Me(),oe=Ve(),{isEmbedded:fe}=We();async function _(l,e,te,m=8e3){if(fe){const b=await oe.sendRaw({...e,type:l},m);if(!b?.ok){const j=b?.error;throw new Error(typeof j=="string"?j:j?.message||`${l} failed`)}return b.result}return oe.executeJson(te,m)}const S=d(!1),F=d([]),L=d(""),h=d(""),B=d(!1),s=d(null),O=d([]),I=d(!1),E=d(!1),K=d(!1),f=d({name:"",description:"",type:"document",rootPath:""}),pe=[{title:"ID",key:"id",width:110},{title:"名称",key:"name"},{title:"类型",key:"project_type",width:120},{title:"状态",key:"status",width:100},{title:"同步",key:"sync_status",width:100},{title:"更新",key:"updated_at",width:160},{title:"操作",key:"actions",width:180,fixed:"right"}],Q=ie(()=>{const l={active:0,draft:0,completed:0,archived:0};for(const e of F.value)l[e.status]!==void 0&&(l[e.status]+=1);return l}),ve=ie(()=>F.value.filter(l=>!(L.value&&l.status!==L.value||h.value&&!l.name.toLowerCase().includes(h.value.toLowerCase()))));function ne(l){switch(l){case"active":return"green";case"draft":return"default";case"completed":return"cyan";case"archived":return"gold";default:return"default"}}function re(l){switch(l){case"synced":return"green";case"pending":return"orange";case"conflict":return"red";case"error":return"red";default:return"default"}}function X(l){return!l&&l!==0?"-":new Date(typeof l=="number"?l:parseInt(l,10)).toLocaleString("zh-CN",{hour12:!1})}async function $(){S.value=!0;try{const l=await _("project.list",{limit:500},"project list --limit 500 --json",1e4);F.value=Array.isArray(l?.projects)?l.projects:Array.isArray(l)?l:[]}catch(l){u.error("加载失败: "+(l.message||l)),F.value=[]}finally{S.value=!1}}function _e(l){return{onClick:()=>se(l)}}async function se(l){s.value=l,B.value=!0,I.value=!0,O.value=[];try{const e=await _("project.listFiles",{projectId:l.id,limit:200},`project list-files ${l.id} --json`,8e3);O.value=Array.isArray(e?.files)?e.files:[]}catch{O.value=[]}finally{I.value=!1}}async function me(l){try{(await _("project.delete",{id:l.id},`project delete ${l.id} --json`,8e3))?.ok?(u.success(`已删除项目 '${l.name}'`),B.value=!1,await $()):u.error("删除失败")}catch(e){u.error(e.message||String(e))}}function ye(){f.value={name:"",description:"",type:"document",rootPath:""},E.value=!0}async function ge(){if(!f.value.name.trim()){u.warning("请输入项目名称");return}K.value=!0;try{const l=await _("project.init",{name:f.value.name.trim(),description:f.value.description||null,projectType:f.value.type,rootPath:f.value.rootPath||null},`project init "${f.value.name.trim()}" --type ${f.value.type} --json`,8e3);l?.id?(u.success(`已创建项目 '${l.name}'`),E.value=!1,await $()):u.error("创建失败")}catch(l){u.error(l.message||String(l))}finally{K.value=!1}}const N=d(!1),Y=d(!1),g=d({path:"",content:""}),T=d(!1),Z=d(!1),P=d({path:""}),q=d(!1),D=d(null),M=d(""),ee=d(!1);function ke(){g.value={path:"",content:""},N.value=!0}function we(){P.value={path:""},T.value=!0}async function V(){if(s.value){I.value=!0;try{const l=await _("project.listFiles",{projectId:s.value.id,limit:200},`project list-files ${s.value.id} --json`,8e3);O.value=Array.isArray(l?.files)?l.files:[]}catch(l){u.error("刷新文件失败: "+(l.message||l))}finally{I.value=!1}}}async function be(){if(!g.value.path.trim()){u.warning("请输入文件路径");return}if(s.value){Y.value=!0;try{const l=await _("project.createFile",{projectId:s.value.id,filePath:g.value.path.trim(),content:g.value.content||""},`project create-file ${s.value.id} "${g.value.path.trim()}" --json`,8e3);l?.id?(u.success(`已创建文件 '${l.file_name}'`),N.value=!1,await V(),await $()):u.error("创建文件失败")}catch(l){u.error(l.message||String(l))}finally{Y.value=!1}}}async function je(){if(!P.value.path.trim()){u.warning("请输入文件夹路径");return}if(s.value){Z.value=!0;try{const l=await _("project.createFolder",{projectId:s.value.id,folderPath:P.value.path.trim()},`project create-folder ${s.value.id} "${P.value.path.trim()}" --json`,8e3);l?.id?(u.success(`已创建文件夹 '${l.file_name}'`),T.value=!1,await V(),await $()):u.error("创建文件夹失败")}catch(l){u.error(l.message||String(l))}finally{Z.value=!1}}}async function xe(l){try{(await _("project.deleteFile",{fileId:l.id},`project delete-file ${l.id} --json`,8e3))?.deleted?(u.success(`已删除 '${l.file_name}'`),await V(),await $()):u.error("删除失败")}catch(e){u.error(e.message||String(e))}}async function Ce(l){if(l.is_folder){u.info("文件夹无内容可编辑");return}try{const e=await _("project.getFile",{fileId:l.id},`project get-file ${l.id} --json`,8e3);D.value=l,M.value=e?.content||"",q.value=!0}catch(e){u.error("读取文件失败: "+(e.message||e))}}async function Fe(){if(D.value){ee.value=!0;try{(await _("project.writeFile",{fileId:D.value.id,content:M.value},`project write-file ${D.value.id} --json`,8e3))?.id?(u.success("已保存"),q.value=!1,await V()):u.error("保存失败")}catch(l){u.error(l.message||String(l))}finally{ee.value=!1}}}return Ne(()=>{$()}),(l,e)=>{const te=r("router-link"),m=r("a-button"),b=r("a-space"),j=r("a-statistic"),W=r("a-card"),G=r("a-col"),$e=r("a-row"),R=r("a-radio-button"),ze=r("a-radio-group"),Se=r("a-input-search"),Oe=r("a-alert"),U=r("a-tag"),ue=r("a-popconfirm"),Ie=r("a-table"),v=r("a-descriptions-item"),Pe=r("a-descriptions"),Ue=r("a-divider"),Ae=r("a-empty"),De=r("a-list-item"),Re=r("a-list"),Le=r("a-spin"),he=r("a-drawer"),H=r("a-input"),z=r("a-form-item"),ae=r("a-textarea"),le=r("a-form"),J=r("a-modal"),y=r("a-select-option"),Be=r("a-select");return c(),x("div",null,[C("div",et,[C("div",null,[C("h2",tt,i(k(ce)("projects.title")),1),C("p",at,[e[17]||(e[17]=n("桌面 / CLI / 手机 三端共享同一份项目数据,Phase 3d sync 自动同步 (",-1)),t(te,{to:"/project-init"},{default:a(()=>[...e[16]||(e[16]=[n("项目初始化 / 环境设置",-1)])]),_:1}),e[18]||(e[18]=n(")",-1))])]),t(b,null,{default:a(()=>[t(m,{loading:S.value,onClick:$},{icon:a(()=>[t(k(Ge))]),default:a(()=>[e[19]||(e[19]=n(" 刷新 ",-1))]),_:1},8,["loading"]),t(m,{type:"primary",onClick:ye},{icon:a(()=>[t(k(He))]),default:a(()=>[e[20]||(e[20]=n(" 新建项目 ",-1))]),_:1})]),_:1})]),t($e,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:a(()=>[t(G,{xs:12,sm:8,lg:6},{default:a(()=>[t(W,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(j,{title:"总项目",value:F.value.length,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:a(()=>[t(k(Je))]),_:1},8,["value"])]),_:1})]),_:1}),t(G,{xs:12,sm:8,lg:6},{default:a(()=>[t(W,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(j,{title:"活跃",value:Q.value.active,"value-style":{color:"#52c41a",fontSize:"20px"}},{prefix:a(()=>[t(k(Ke))]),_:1},8,["value"])]),_:1})]),_:1}),t(G,{xs:12,sm:8,lg:6},{default:a(()=>[t(W,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(j,{title:"草稿",value:Q.value.draft,"value-style":{color:"#8c8c8c",fontSize:"20px"}},{prefix:a(()=>[t(k(Qe))]),_:1},8,["value"])]),_:1})]),_:1}),t(G,{xs:12,sm:8,lg:6},{default:a(()=>[t(W,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(j,{title:"已完成",value:Q.value.completed,"value-style":{color:"#13c2c2",fontSize:"20px"}},{prefix:a(()=>[t(k(Xe))]),_:1},8,["value"])]),_:1})]),_:1})]),_:1}),C("div",lt,[t(ze,{value:L.value,"onUpdate:value":e[0]||(e[0]=o=>L.value=o),size:"small","button-style":"solid"},{default:a(()=>[t(R,{value:""},{default:a(()=>[...e[21]||(e[21]=[n("全部",-1)])]),_:1}),t(R,{value:"active"},{default:a(()=>[...e[22]||(e[22]=[n("活跃",-1)])]),_:1}),t(R,{value:"draft"},{default:a(()=>[...e[23]||(e[23]=[n("草稿",-1)])]),_:1}),t(R,{value:"completed"},{default:a(()=>[...e[24]||(e[24]=[n("已完成",-1)])]),_:1}),t(R,{value:"archived"},{default:a(()=>[...e[25]||(e[25]=[n("已归档",-1)])]),_:1})]),_:1},8,["value"]),t(Se,{value:h.value,"onUpdate:value":e[1]||(e[1]=o=>h.value=o),placeholder:"按名称过滤",style:{"max-width":"260px"},"allow-clear":""},null,8,["value"])]),!F.value.length&&!S.value?(c(),w(Oe,{key:0,type:"info",message:"还没有项目",description:'运行 `cc project init <name>` 或点击右上角"新建项目"按钮创建。桌面 / CLI / 手机三端共享同一份数据。',"show-icon":"",style:{"margin-bottom":"16px"}})):A("",!0),F.value.length||S.value?(c(),w(Ie,{key:1,columns:pe,"data-source":ve.value,loading:S.value,pagination:{pageSize:20,showSizeChanger:!0},"row-key":"id","custom-row":_e},{bodyCell:a(({column:o,record:p})=>[o.key==="id"?(c(),x("code",ot,i(p.id.slice(0,8))+"…",1)):o.key==="name"?(c(),x(de,{key:1},[C("strong",null,i(p.name),1),p.description?(c(),x("div",nt,i(p.description),1)):A("",!0)],64)):o.key==="project_type"?(c(),w(U,{key:2},{default:a(()=>[n(i(p.project_type),1)]),_:2},1024)):o.key==="status"?(c(),w(U,{key:3,color:ne(p.status)},{default:a(()=>[n(i(p.status),1)]),_:2},1032,["color"])):o.key==="sync_status"?(c(),w(U,{key:4,color:re(p.sync_status)},{default:a(()=>[n(i(p.sync_status||"unknown"),1)]),_:2},1032,["color"])):o.key==="updated_at"?(c(),x(de,{key:5},[n(i(X(p.updated_at)),1)],64)):o.key==="actions"?(c(),w(b,{key:6,onClick:e[2]||(e[2]=Te(()=>{},["stop"]))},{default:a(()=>[t(m,{size:"small",onClick:Ee=>se(p)},{default:a(()=>[...e[26]||(e[26]=[n("详情",-1)])]),_:1},8,["onClick"]),t(ue,{title:`删除项目 '${p.name}' ?`,"ok-text":"删除","ok-type":"danger","cancel-text":"取消",onConfirm:Ee=>me(p)},{default:a(()=>[t(m,{size:"small",danger:""},{default:a(()=>[...e[27]||(e[27]=[n("删除",-1)])]),_:1})]),_:1},8,["title","onConfirm"])]),_:2},1024)):A("",!0)]),_:1},8,["data-source","loading"])):A("",!0),t(he,{open:B.value,"onUpdate:open":e[3]||(e[3]=o=>B.value=o),title:s.value?.name||"项目详情",width:"640",placement:"right"},{default:a(()=>[s.value?(c(),w(Pe,{key:0,column:1,bordered:"",size:"small"},{default:a(()=>[t(v,{label:"ID"},{default:a(()=>[C("code",null,i(s.value.id),1)]),_:1}),t(v,{label:"名称"},{default:a(()=>[n(i(s.value.name),1)]),_:1}),t(v,{label:"描述"},{default:a(()=>[n(i(s.value.description||"-"),1)]),_:1}),t(v,{label:"类型"},{default:a(()=>[t(U,null,{default:a(()=>[n(i(s.value.project_type),1)]),_:1})]),_:1}),t(v,{label:"状态"},{default:a(()=>[t(U,{color:ne(s.value.status)},{default:a(()=>[n(i(s.value.status),1)]),_:1},8,["color"])]),_:1}),t(v,{label:"同步状态"},{default:a(()=>[t(U,{color:re(s.value.sync_status)},{default:a(()=>[n(i(s.value.sync_status||"unknown"),1)]),_:1},8,["color"])]),_:1}),t(v,{label:"用户"},{default:a(()=>[n(i(s.value.user_id),1)]),_:1}),t(v,{label:"根路径"},{default:a(()=>[s.value.root_path?(c(),x("code",rt,i(s.value.root_path),1)):(c(),x("span",st,"(无)"))]),_:1}),t(v,{label:"文件数"},{default:a(()=>[n(i(s.value.file_count||0),1)]),_:1}),t(v,{label:"创建"},{default:a(()=>[n(i(X(s.value.created_at)),1)]),_:1}),t(v,{label:"更新"},{default:a(()=>[n(i(X(s.value.updated_at)),1)]),_:1})]),_:1})):A("",!0),t(Ue,null,{default:a(()=>[...e[28]||(e[28]=[n("文件",-1)])]),_:1}),t(b,{style:{"margin-bottom":"12px"}},{default:a(()=>[t(m,{size:"small",type:"primary",disabled:!s.value,onClick:ke},{default:a(()=>[t(k(Ye)),e[29]||(e[29]=n(" 新建文件 ",-1))]),_:1},8,["disabled"]),t(m,{size:"small",disabled:!s.value,onClick:we},{default:a(()=>[t(k(Ze)),e[30]||(e[30]=n(" 新建文件夹 ",-1))]),_:1},8,["disabled"])]),_:1}),t(Le,{spinning:I.value},{default:a(()=>[!O.value.length&&!I.value?(c(),w(Ae,{key:0,description:"无文件 (点上方按钮新建)"})):(c(),w(Re,{key:1,size:"small","data-source":O.value},{renderItem:a(({item:o})=>[t(De,null,{extra:a(()=>[t(b,null,{default:a(()=>[o.file_size?(c(),x("span",it,i(o.file_size)+" B",1)):A("",!0),t(ue,{title:`删除 ${o.is_folder?"文件夹":"文件"} '${o.file_name}' ?`,"ok-text":"删除","ok-type":"danger","cancel-text":"取消",onConfirm:p=>xe(o)},{default:a(()=>[t(m,{size:"small",danger:""},{default:a(()=>[...e[31]||(e[31]=[n("×",-1)])]),_:1})]),_:1},8,["title","onConfirm"])]),_:2},1024)]),default:a(()=>[C("span",{style:{cursor:"pointer"},onClick:p=>Ce(o)},i(o.is_folder?"📁":"📄")+" "+i(o.file_path),9,ut)]),_:2},1024)]),_:1},8,["data-source"]))]),_:1},8,["spinning"])]),_:1},8,["open","title"]),t(J,{open:N.value,"onUpdate:open":e[6]||(e[6]=o=>N.value=o),title:"新建文件","confirm-loading":Y.value,"ok-text":"创建","cancel-text":"取消",onOk:be},{default:a(()=>[t(le,{layout:"vertical"},{default:a(()=>[t(z,{label:"文件路径(项目内)",required:""},{default:a(()=>[t(H,{value:g.value.path,"onUpdate:value":e[4]||(e[4]=o=>g.value.path=o),placeholder:"例如 README.md 或 src/main.kt"},null,8,["value"])]),_:1}),t(z,{label:"初始内容(可选)"},{default:a(()=>[t(ae,{value:g.value.content,"onUpdate:value":e[5]||(e[5]=o=>g.value.content=o),rows:6,placeholder:"留空创建空文件"},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"]),t(J,{open:T.value,"onUpdate:open":e[8]||(e[8]=o=>T.value=o),title:"新建文件夹","confirm-loading":Z.value,"ok-text":"创建","cancel-text":"取消",onOk:je},{default:a(()=>[t(le,{layout:"vertical"},{default:a(()=>[t(z,{label:"文件夹路径(项目内)",required:""},{default:a(()=>[t(H,{value:P.value.path,"onUpdate:value":e[7]||(e[7]=o=>P.value.path=o),placeholder:"例如 src/utils"},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"]),t(J,{open:q.value,"onUpdate:open":e[10]||(e[10]=o=>q.value=o),title:`编辑 ${D.value?.file_name||""}`,"confirm-loading":ee.value,"ok-text":"保存","cancel-text":"取消",onOk:Fe,width:"720"},{default:a(()=>[t(ae,{value:M.value,"onUpdate:value":e[9]||(e[9]=o=>M.value=o),rows:18,"auto-size":{minRows:12,maxRows:24},style:{"font-family":"monospace"}},null,8,["value"])]),_:1},8,["open","title","confirm-loading"]),t(J,{open:E.value,"onUpdate:open":e[15]||(e[15]=o=>E.value=o),title:"新建项目","confirm-loading":K.value,"ok-text":"创建","cancel-text":"取消",onOk:ge},{default:a(()=>[t(le,{layout:"vertical"},{default:a(()=>[t(z,{label:"项目名称",required:""},{default:a(()=>[t(H,{value:f.value.name,"onUpdate:value":e[11]||(e[11]=o=>f.value.name=o),placeholder:"例如:旅行计划-上海"},null,8,["value"])]),_:1}),t(z,{label:"描述"},{default:a(()=>[t(ae,{value:f.value.description,"onUpdate:value":e[12]||(e[12]=o=>f.value.description=o),rows:2},null,8,["value"])]),_:1}),t(z,{label:"类型"},{default:a(()=>[t(Be,{value:f.value.type,"onUpdate:value":e[13]||(e[13]=o=>f.value.type=o)},{default:a(()=>[t(y,{value:"document"},{default:a(()=>[...e[32]||(e[32]=[n("文档 (document)",-1)])]),_:1}),t(y,{value:"data"},{default:a(()=>[...e[33]||(e[33]=[n("数据 (data)",-1)])]),_:1}),t(y,{value:"web"},{default:a(()=>[...e[34]||(e[34]=[n("Web",-1)])]),_:1}),t(y,{value:"app"},{default:a(()=>[...e[35]||(e[35]=[n("应用 (app)",-1)])]),_:1}),t(y,{value:"presentation"},{default:a(()=>[...e[36]||(e[36]=[n("演示文稿",-1)])]),_:1}),t(y,{value:"spreadsheet"},{default:a(()=>[...e[37]||(e[37]=[n("表格",-1)])]),_:1}),t(y,{value:"design"},{default:a(()=>[...e[38]||(e[38]=[n("设计",-1)])]),_:1}),t(y,{value:"code"},{default:a(()=>[...e[39]||(e[39]=[n("代码",-1)])]),_:1}),t(y,{value:"workflow"},{default:a(()=>[...e[40]||(e[40]=[n("工作流",-1)])]),_:1}),t(y,{value:"knowledge"},{default:a(()=>[...e[41]||(e[41]=[n("知识库",-1)])]),_:1})]),_:1},8,["value"])]),_:1}),t(z,{label:"根路径 (可选)"},{default:a(()=>[t(H,{value:f.value.rootPath,"onUpdate:value":e[14]||(e[14]=o=>f.value.rootPath=o),placeholder:"留空则仅元数据"},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"])])}}},mt=qe(dt,[["__scopeId","data-v-e27c9ce1"]]);export{mt as default};
|
|
1
|
+
import{o as Ne,M as x,R as C,P as i,u as k,O as n,c as t,N as a,Q as w,S as A,K as r,r as d,f as ie,L as c,F as de,a1 as Te}from"./vendor-M5lGV-wr.js";import{_ as qe,b as Me,u as Ve,d as u}from"./index-19d37fVJ.js";import{u as We}from"./useShellMode-CgR0wCYM.js";import{R as Ge,ar as He,F as Je,f as Ke,l as Qe,aG as Xe,aH as Ye,aI as Ze}from"./icons-BFHq5fEF.js";const et={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},tt={class:"page-title"},at={class:"page-sub"},lt={class:"filter-bar",style:{"margin-bottom":"12px",display:"flex",gap:"12px","align-items":"center"}},ot={key:0,style:{"font-size":"12px",color:"#888"}},nt={key:0,style:{color:"#888","font-size":"12px"}},rt={key:0},st={key:1,style:{color:"#888"}},ut=["onClick"],it={key:0,style:{color:"#888","font-size":"12px"}},dt={__name:"Projects",setup(ct){const{t:ce}=Me(),oe=Ve(),{isEmbedded:fe}=We();async function _(l,e,te,m=8e3){if(fe){const b=await oe.sendRaw({...e,type:l},m);if(!b?.ok){const j=b?.error;throw new Error(typeof j=="string"?j:j?.message||`${l} failed`)}return b.result}return oe.executeJson(te,m)}const S=d(!1),F=d([]),L=d(""),h=d(""),B=d(!1),s=d(null),O=d([]),I=d(!1),E=d(!1),K=d(!1),f=d({name:"",description:"",type:"document",rootPath:""}),pe=[{title:"ID",key:"id",width:110},{title:"名称",key:"name"},{title:"类型",key:"project_type",width:120},{title:"状态",key:"status",width:100},{title:"同步",key:"sync_status",width:100},{title:"更新",key:"updated_at",width:160},{title:"操作",key:"actions",width:180,fixed:"right"}],Q=ie(()=>{const l={active:0,draft:0,completed:0,archived:0};for(const e of F.value)l[e.status]!==void 0&&(l[e.status]+=1);return l}),ve=ie(()=>F.value.filter(l=>!(L.value&&l.status!==L.value||h.value&&!l.name.toLowerCase().includes(h.value.toLowerCase()))));function ne(l){switch(l){case"active":return"green";case"draft":return"default";case"completed":return"cyan";case"archived":return"gold";default:return"default"}}function re(l){switch(l){case"synced":return"green";case"pending":return"orange";case"conflict":return"red";case"error":return"red";default:return"default"}}function X(l){return!l&&l!==0?"-":new Date(typeof l=="number"?l:parseInt(l,10)).toLocaleString("zh-CN",{hour12:!1})}async function $(){S.value=!0;try{const l=await _("project.list",{limit:500},"project list --limit 500 --json",1e4);F.value=Array.isArray(l?.projects)?l.projects:Array.isArray(l)?l:[]}catch(l){u.error("加载失败: "+(l.message||l)),F.value=[]}finally{S.value=!1}}function _e(l){return{onClick:()=>se(l)}}async function se(l){s.value=l,B.value=!0,I.value=!0,O.value=[];try{const e=await _("project.listFiles",{projectId:l.id,limit:200},`project list-files ${l.id} --json`,8e3);O.value=Array.isArray(e?.files)?e.files:[]}catch{O.value=[]}finally{I.value=!1}}async function me(l){try{(await _("project.delete",{id:l.id},`project delete ${l.id} --json`,8e3))?.ok?(u.success(`已删除项目 '${l.name}'`),B.value=!1,await $()):u.error("删除失败")}catch(e){u.error(e.message||String(e))}}function ye(){f.value={name:"",description:"",type:"document",rootPath:""},E.value=!0}async function ge(){if(!f.value.name.trim()){u.warning("请输入项目名称");return}K.value=!0;try{const l=await _("project.init",{name:f.value.name.trim(),description:f.value.description||null,projectType:f.value.type,rootPath:f.value.rootPath||null},`project init "${f.value.name.trim()}" --type ${f.value.type} --json`,8e3);l?.id?(u.success(`已创建项目 '${l.name}'`),E.value=!1,await $()):u.error("创建失败")}catch(l){u.error(l.message||String(l))}finally{K.value=!1}}const N=d(!1),Y=d(!1),g=d({path:"",content:""}),T=d(!1),Z=d(!1),P=d({path:""}),q=d(!1),D=d(null),M=d(""),ee=d(!1);function ke(){g.value={path:"",content:""},N.value=!0}function we(){P.value={path:""},T.value=!0}async function V(){if(s.value){I.value=!0;try{const l=await _("project.listFiles",{projectId:s.value.id,limit:200},`project list-files ${s.value.id} --json`,8e3);O.value=Array.isArray(l?.files)?l.files:[]}catch(l){u.error("刷新文件失败: "+(l.message||l))}finally{I.value=!1}}}async function be(){if(!g.value.path.trim()){u.warning("请输入文件路径");return}if(s.value){Y.value=!0;try{const l=await _("project.createFile",{projectId:s.value.id,filePath:g.value.path.trim(),content:g.value.content||""},`project create-file ${s.value.id} "${g.value.path.trim()}" --json`,8e3);l?.id?(u.success(`已创建文件 '${l.file_name}'`),N.value=!1,await V(),await $()):u.error("创建文件失败")}catch(l){u.error(l.message||String(l))}finally{Y.value=!1}}}async function je(){if(!P.value.path.trim()){u.warning("请输入文件夹路径");return}if(s.value){Z.value=!0;try{const l=await _("project.createFolder",{projectId:s.value.id,folderPath:P.value.path.trim()},`project create-folder ${s.value.id} "${P.value.path.trim()}" --json`,8e3);l?.id?(u.success(`已创建文件夹 '${l.file_name}'`),T.value=!1,await V(),await $()):u.error("创建文件夹失败")}catch(l){u.error(l.message||String(l))}finally{Z.value=!1}}}async function xe(l){try{(await _("project.deleteFile",{fileId:l.id},`project delete-file ${l.id} --json`,8e3))?.deleted?(u.success(`已删除 '${l.file_name}'`),await V(),await $()):u.error("删除失败")}catch(e){u.error(e.message||String(e))}}async function Ce(l){if(l.is_folder){u.info("文件夹无内容可编辑");return}try{const e=await _("project.getFile",{fileId:l.id},`project get-file ${l.id} --json`,8e3);D.value=l,M.value=e?.content||"",q.value=!0}catch(e){u.error("读取文件失败: "+(e.message||e))}}async function Fe(){if(D.value){ee.value=!0;try{(await _("project.writeFile",{fileId:D.value.id,content:M.value},`project write-file ${D.value.id} --json`,8e3))?.id?(u.success("已保存"),q.value=!1,await V()):u.error("保存失败")}catch(l){u.error(l.message||String(l))}finally{ee.value=!1}}}return Ne(()=>{$()}),(l,e)=>{const te=r("router-link"),m=r("a-button"),b=r("a-space"),j=r("a-statistic"),W=r("a-card"),G=r("a-col"),$e=r("a-row"),R=r("a-radio-button"),ze=r("a-radio-group"),Se=r("a-input-search"),Oe=r("a-alert"),U=r("a-tag"),ue=r("a-popconfirm"),Ie=r("a-table"),v=r("a-descriptions-item"),Pe=r("a-descriptions"),Ue=r("a-divider"),Ae=r("a-empty"),De=r("a-list-item"),Re=r("a-list"),Le=r("a-spin"),he=r("a-drawer"),H=r("a-input"),z=r("a-form-item"),ae=r("a-textarea"),le=r("a-form"),J=r("a-modal"),y=r("a-select-option"),Be=r("a-select");return c(),x("div",null,[C("div",et,[C("div",null,[C("h2",tt,i(k(ce)("projects.title")),1),C("p",at,[e[17]||(e[17]=n("桌面 / CLI / 手机 三端共享同一份项目数据,Phase 3d sync 自动同步 (",-1)),t(te,{to:"/project-init"},{default:a(()=>[...e[16]||(e[16]=[n("项目初始化 / 环境设置",-1)])]),_:1}),e[18]||(e[18]=n(")",-1))])]),t(b,null,{default:a(()=>[t(m,{loading:S.value,onClick:$},{icon:a(()=>[t(k(Ge))]),default:a(()=>[e[19]||(e[19]=n(" 刷新 ",-1))]),_:1},8,["loading"]),t(m,{type:"primary",onClick:ye},{icon:a(()=>[t(k(He))]),default:a(()=>[e[20]||(e[20]=n(" 新建项目 ",-1))]),_:1})]),_:1})]),t($e,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:a(()=>[t(G,{xs:12,sm:8,lg:6},{default:a(()=>[t(W,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(j,{title:"总项目",value:F.value.length,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:a(()=>[t(k(Je))]),_:1},8,["value"])]),_:1})]),_:1}),t(G,{xs:12,sm:8,lg:6},{default:a(()=>[t(W,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(j,{title:"活跃",value:Q.value.active,"value-style":{color:"#52c41a",fontSize:"20px"}},{prefix:a(()=>[t(k(Ke))]),_:1},8,["value"])]),_:1})]),_:1}),t(G,{xs:12,sm:8,lg:6},{default:a(()=>[t(W,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(j,{title:"草稿",value:Q.value.draft,"value-style":{color:"#8c8c8c",fontSize:"20px"}},{prefix:a(()=>[t(k(Qe))]),_:1},8,["value"])]),_:1})]),_:1}),t(G,{xs:12,sm:8,lg:6},{default:a(()=>[t(W,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(j,{title:"已完成",value:Q.value.completed,"value-style":{color:"#13c2c2",fontSize:"20px"}},{prefix:a(()=>[t(k(Xe))]),_:1},8,["value"])]),_:1})]),_:1})]),_:1}),C("div",lt,[t(ze,{value:L.value,"onUpdate:value":e[0]||(e[0]=o=>L.value=o),size:"small","button-style":"solid"},{default:a(()=>[t(R,{value:""},{default:a(()=>[...e[21]||(e[21]=[n("全部",-1)])]),_:1}),t(R,{value:"active"},{default:a(()=>[...e[22]||(e[22]=[n("活跃",-1)])]),_:1}),t(R,{value:"draft"},{default:a(()=>[...e[23]||(e[23]=[n("草稿",-1)])]),_:1}),t(R,{value:"completed"},{default:a(()=>[...e[24]||(e[24]=[n("已完成",-1)])]),_:1}),t(R,{value:"archived"},{default:a(()=>[...e[25]||(e[25]=[n("已归档",-1)])]),_:1})]),_:1},8,["value"]),t(Se,{value:h.value,"onUpdate:value":e[1]||(e[1]=o=>h.value=o),placeholder:"按名称过滤",style:{"max-width":"260px"},"allow-clear":""},null,8,["value"])]),!F.value.length&&!S.value?(c(),w(Oe,{key:0,type:"info",message:"还没有项目",description:'运行 `cc project init <name>` 或点击右上角"新建项目"按钮创建。桌面 / CLI / 手机三端共享同一份数据。',"show-icon":"",style:{"margin-bottom":"16px"}})):A("",!0),F.value.length||S.value?(c(),w(Ie,{key:1,columns:pe,"data-source":ve.value,loading:S.value,pagination:{pageSize:20,showSizeChanger:!0},"row-key":"id","custom-row":_e},{bodyCell:a(({column:o,record:p})=>[o.key==="id"?(c(),x("code",ot,i(p.id.slice(0,8))+"…",1)):o.key==="name"?(c(),x(de,{key:1},[C("strong",null,i(p.name),1),p.description?(c(),x("div",nt,i(p.description),1)):A("",!0)],64)):o.key==="project_type"?(c(),w(U,{key:2},{default:a(()=>[n(i(p.project_type),1)]),_:2},1024)):o.key==="status"?(c(),w(U,{key:3,color:ne(p.status)},{default:a(()=>[n(i(p.status),1)]),_:2},1032,["color"])):o.key==="sync_status"?(c(),w(U,{key:4,color:re(p.sync_status)},{default:a(()=>[n(i(p.sync_status||"unknown"),1)]),_:2},1032,["color"])):o.key==="updated_at"?(c(),x(de,{key:5},[n(i(X(p.updated_at)),1)],64)):o.key==="actions"?(c(),w(b,{key:6,onClick:e[2]||(e[2]=Te(()=>{},["stop"]))},{default:a(()=>[t(m,{size:"small",onClick:Ee=>se(p)},{default:a(()=>[...e[26]||(e[26]=[n("详情",-1)])]),_:1},8,["onClick"]),t(ue,{title:`删除项目 '${p.name}' ?`,"ok-text":"删除","ok-type":"danger","cancel-text":"取消",onConfirm:Ee=>me(p)},{default:a(()=>[t(m,{size:"small",danger:""},{default:a(()=>[...e[27]||(e[27]=[n("删除",-1)])]),_:1})]),_:1},8,["title","onConfirm"])]),_:2},1024)):A("",!0)]),_:1},8,["data-source","loading"])):A("",!0),t(he,{open:B.value,"onUpdate:open":e[3]||(e[3]=o=>B.value=o),title:s.value?.name||"项目详情",width:"640",placement:"right"},{default:a(()=>[s.value?(c(),w(Pe,{key:0,column:1,bordered:"",size:"small"},{default:a(()=>[t(v,{label:"ID"},{default:a(()=>[C("code",null,i(s.value.id),1)]),_:1}),t(v,{label:"名称"},{default:a(()=>[n(i(s.value.name),1)]),_:1}),t(v,{label:"描述"},{default:a(()=>[n(i(s.value.description||"-"),1)]),_:1}),t(v,{label:"类型"},{default:a(()=>[t(U,null,{default:a(()=>[n(i(s.value.project_type),1)]),_:1})]),_:1}),t(v,{label:"状态"},{default:a(()=>[t(U,{color:ne(s.value.status)},{default:a(()=>[n(i(s.value.status),1)]),_:1},8,["color"])]),_:1}),t(v,{label:"同步状态"},{default:a(()=>[t(U,{color:re(s.value.sync_status)},{default:a(()=>[n(i(s.value.sync_status||"unknown"),1)]),_:1},8,["color"])]),_:1}),t(v,{label:"用户"},{default:a(()=>[n(i(s.value.user_id),1)]),_:1}),t(v,{label:"根路径"},{default:a(()=>[s.value.root_path?(c(),x("code",rt,i(s.value.root_path),1)):(c(),x("span",st,"(无)"))]),_:1}),t(v,{label:"文件数"},{default:a(()=>[n(i(s.value.file_count||0),1)]),_:1}),t(v,{label:"创建"},{default:a(()=>[n(i(X(s.value.created_at)),1)]),_:1}),t(v,{label:"更新"},{default:a(()=>[n(i(X(s.value.updated_at)),1)]),_:1})]),_:1})):A("",!0),t(Ue,null,{default:a(()=>[...e[28]||(e[28]=[n("文件",-1)])]),_:1}),t(b,{style:{"margin-bottom":"12px"}},{default:a(()=>[t(m,{size:"small",type:"primary",disabled:!s.value,onClick:ke},{default:a(()=>[t(k(Ye)),e[29]||(e[29]=n(" 新建文件 ",-1))]),_:1},8,["disabled"]),t(m,{size:"small",disabled:!s.value,onClick:we},{default:a(()=>[t(k(Ze)),e[30]||(e[30]=n(" 新建文件夹 ",-1))]),_:1},8,["disabled"])]),_:1}),t(Le,{spinning:I.value},{default:a(()=>[!O.value.length&&!I.value?(c(),w(Ae,{key:0,description:"无文件 (点上方按钮新建)"})):(c(),w(Re,{key:1,size:"small","data-source":O.value},{renderItem:a(({item:o})=>[t(De,null,{extra:a(()=>[t(b,null,{default:a(()=>[o.file_size?(c(),x("span",it,i(o.file_size)+" B",1)):A("",!0),t(ue,{title:`删除 ${o.is_folder?"文件夹":"文件"} '${o.file_name}' ?`,"ok-text":"删除","ok-type":"danger","cancel-text":"取消",onConfirm:p=>xe(o)},{default:a(()=>[t(m,{size:"small",danger:""},{default:a(()=>[...e[31]||(e[31]=[n("×",-1)])]),_:1})]),_:1},8,["title","onConfirm"])]),_:2},1024)]),default:a(()=>[C("span",{style:{cursor:"pointer"},onClick:p=>Ce(o)},i(o.is_folder?"📁":"📄")+" "+i(o.file_path),9,ut)]),_:2},1024)]),_:1},8,["data-source"]))]),_:1},8,["spinning"])]),_:1},8,["open","title"]),t(J,{open:N.value,"onUpdate:open":e[6]||(e[6]=o=>N.value=o),title:"新建文件","confirm-loading":Y.value,"ok-text":"创建","cancel-text":"取消",onOk:be},{default:a(()=>[t(le,{layout:"vertical"},{default:a(()=>[t(z,{label:"文件路径(项目内)",required:""},{default:a(()=>[t(H,{value:g.value.path,"onUpdate:value":e[4]||(e[4]=o=>g.value.path=o),placeholder:"例如 README.md 或 src/main.kt"},null,8,["value"])]),_:1}),t(z,{label:"初始内容(可选)"},{default:a(()=>[t(ae,{value:g.value.content,"onUpdate:value":e[5]||(e[5]=o=>g.value.content=o),rows:6,placeholder:"留空创建空文件"},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"]),t(J,{open:T.value,"onUpdate:open":e[8]||(e[8]=o=>T.value=o),title:"新建文件夹","confirm-loading":Z.value,"ok-text":"创建","cancel-text":"取消",onOk:je},{default:a(()=>[t(le,{layout:"vertical"},{default:a(()=>[t(z,{label:"文件夹路径(项目内)",required:""},{default:a(()=>[t(H,{value:P.value.path,"onUpdate:value":e[7]||(e[7]=o=>P.value.path=o),placeholder:"例如 src/utils"},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"]),t(J,{open:q.value,"onUpdate:open":e[10]||(e[10]=o=>q.value=o),title:`编辑 ${D.value?.file_name||""}`,"confirm-loading":ee.value,"ok-text":"保存","cancel-text":"取消",onOk:Fe,width:"720"},{default:a(()=>[t(ae,{value:M.value,"onUpdate:value":e[9]||(e[9]=o=>M.value=o),rows:18,"auto-size":{minRows:12,maxRows:24},style:{"font-family":"monospace"}},null,8,["value"])]),_:1},8,["open","title","confirm-loading"]),t(J,{open:E.value,"onUpdate:open":e[15]||(e[15]=o=>E.value=o),title:"新建项目","confirm-loading":K.value,"ok-text":"创建","cancel-text":"取消",onOk:ge},{default:a(()=>[t(le,{layout:"vertical"},{default:a(()=>[t(z,{label:"项目名称",required:""},{default:a(()=>[t(H,{value:f.value.name,"onUpdate:value":e[11]||(e[11]=o=>f.value.name=o),placeholder:"例如:旅行计划-上海"},null,8,["value"])]),_:1}),t(z,{label:"描述"},{default:a(()=>[t(ae,{value:f.value.description,"onUpdate:value":e[12]||(e[12]=o=>f.value.description=o),rows:2},null,8,["value"])]),_:1}),t(z,{label:"类型"},{default:a(()=>[t(Be,{value:f.value.type,"onUpdate:value":e[13]||(e[13]=o=>f.value.type=o)},{default:a(()=>[t(y,{value:"document"},{default:a(()=>[...e[32]||(e[32]=[n("文档 (document)",-1)])]),_:1}),t(y,{value:"data"},{default:a(()=>[...e[33]||(e[33]=[n("数据 (data)",-1)])]),_:1}),t(y,{value:"web"},{default:a(()=>[...e[34]||(e[34]=[n("Web",-1)])]),_:1}),t(y,{value:"app"},{default:a(()=>[...e[35]||(e[35]=[n("应用 (app)",-1)])]),_:1}),t(y,{value:"presentation"},{default:a(()=>[...e[36]||(e[36]=[n("演示文稿",-1)])]),_:1}),t(y,{value:"spreadsheet"},{default:a(()=>[...e[37]||(e[37]=[n("表格",-1)])]),_:1}),t(y,{value:"design"},{default:a(()=>[...e[38]||(e[38]=[n("设计",-1)])]),_:1}),t(y,{value:"code"},{default:a(()=>[...e[39]||(e[39]=[n("代码",-1)])]),_:1}),t(y,{value:"workflow"},{default:a(()=>[...e[40]||(e[40]=[n("工作流",-1)])]),_:1}),t(y,{value:"knowledge"},{default:a(()=>[...e[41]||(e[41]=[n("知识库",-1)])]),_:1})]),_:1},8,["value"])]),_:1}),t(z,{label:"根路径 (可选)"},{default:a(()=>[t(H,{value:f.value.rootPath,"onUpdate:value":e[14]||(e[14]=o=>f.value.rootPath=o),placeholder:"留空则仅元数据"},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"])])}}},mt=qe(dt,[["__scopeId","data-v-e27c9ce1"]]);export{mt as default};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{E as Z,r as P,o as H,M as N,R as n,c as s,N as l,u as g,Q as K,S as B,F as X,Y as ee,K as u,a as te,L as y,O as x,P as M,Z as oe}from"./vendor-M5lGV-wr.js";import{u as A,_ as ae,d as _}from"./index-
|
|
1
|
+
import{E as Z,r as P,o as H,M as N,R as n,c as s,N as l,u as g,Q as K,S as B,F as X,Y as ee,K as u,a as te,L as y,O as x,P as M,Z as oe}from"./vendor-M5lGV-wr.js";import{u as A,_ as ae,d as _}from"./index-19d37fVJ.js";import{a as se,b as le}from"./parsers-DftYMnlk.js";import{R as q}from"./icons-BFHq5fEF.js";const re=Z("providers",()=>{const O=P(!1),i=P(null),m=P([]),T=P([]),c=P(null);async function t(){const v=A();O.value=!0;try{const{output:k}=await v.execute("llm providers",15e3);m.value=se(k);const b=m.value.find(C=>C.active);b&&(c.value=b.name);const{output:w}=await v.execute("llm models",15e3);T.value=le(w)}catch(k){console.error("Failed to load providers:",k)}finally{O.value=!1}}async function d(v){await A().execute(`llm switch ${v}`,1e4),m.value.forEach(b=>b.active=b.name===v),c.value=v}async function F(v){const k=A();i.value=v;try{const{output:b,exitCode:w}=await k.execute("llm test",3e4),C=m.value.find(S=>S.name===v);return C&&(C.status=w===0?"ok":"error"),w===0}catch{const b=m.value.find(w=>w.name===v);return b&&(b.status="error"),!1}finally{i.value=null}}return{loading:O,testing:i,providers:m,localModels:T,activeProvider:c,loadProviders:t,switchProvider:d,testProvider:F}}),ne={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},ie={key:1,style:{"text-align":"center",padding:"60px"}},de={key:2},ue={class:"providers-grid"},ce={style:{display:"flex","align-items":"center",gap:"12px","margin-bottom":"12px"}},pe={style:{"font-size":"24px"}},me={style:{flex:"1"}},ve={style:{color:"#e0e0e0","font-weight":"500"}},fe={style:{color:"var(--text-secondary)","font-size":"11px","font-family":"monospace"}},ge={style:{display:"flex",gap:"8px","justify-content":"flex-end"}},ye={key:0,style:{"margin-top":"24px"}},be={style:{color:"#ccc","font-family":"monospace","font-size":"13px"}},xe={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"16px"}},_e={class:"config-grid"},ke={style:{display:"flex","align-items":"center",gap:"12px"}},we={style:{display:"flex",gap:"12px","justify-content":"flex-end","margin-top":"16px"}},he={__name:"Providers",setup(O){const i=re(),m=A(),T=P(!1),c=P(!1),t=te({provider:void 0,model:"",apiKey:"",baseUrl:"",temperature:.7,maxTokens:4096});let d={};const F=["ollama","openai","anthropic","volcengine","deepseek","gemini","groq","mistral","custom","zhipu"],v={ollama:"Ollama(本地)",openai:"OpenAI",anthropic:"Anthropic",volcengine:"火山引擎(豆包)",deepseek:"DeepSeek",gemini:"Google Gemini",groq:"Groq",mistral:"Mistral",custom:"Custom(自定义)",zhipu:"智谱 AI"},k=F.map(a=>({value:a,label:v[a]||a}));async function b(a){try{await i.switchProvider(a),_.success(`已切换到 ${a}`)}catch(e){_.error(`切换失败: ${e.message}`)}}async function w(a){await i.testProvider(a)?_.success(`${a} 连接正常`):_.warning(`${a} 连接失败,请检查配置`)}function C(a){const e={};if(!a)return e;try{const U=JSON.parse(a.trim()),p=U.llm||U;return p.provider&&(e.provider=p.provider),p.model&&(e.model=p.model),p.apiKey&&(e.apiKey=p.apiKey),p.baseUrl&&(e.baseUrl=p.baseUrl),p.temperature!==void 0&&(e.temperature=Number(p.temperature)),p.maxTokens!==void 0&&(e.maxTokens=Number(p.maxTokens)),e}catch{}const r=a.split(`
|
|
2
2
|
`);for(const U of r){const z=U.trim().match(/^(?:llm\.)?(\w+)\s*[=:]\s*(.+)$/i);if(!z)continue;const[,I,j]=z,f=j.trim(),h=I.toLowerCase();if(h==="provider"&&f)e.provider=f;else if(h==="model"&&f)e.model=f;else if(h==="apikey"&&f)f.includes("***")||(e.apiKey=f);else if(h==="baseurl")e.baseUrl=f;else if(h==="temperature"){const $=parseFloat(f);isNaN($)||(e.temperature=$)}else if(h==="maxtokens"){const $=parseInt(f,10);isNaN($)||(e.maxTokens=$)}}return e}async function S(){T.value=!0;try{const{output:a}=await m.execute("config list",15e3),e=C(a);e.provider&&(t.provider=e.provider),e.model&&(t.model=e.model),e.apiKey&&(t.apiKey=e.apiKey),e.baseUrl&&(t.baseUrl=e.baseUrl),e.temperature!==void 0&&(t.temperature=e.temperature),e.maxTokens!==void 0&&(t.maxTokens=e.maxTokens),d={...t},_.success("配置已加载")}catch(a){_.error(`加载配置失败: ${a.message}`)}finally{T.value=!1}}async function E(){c.value=!0;const a=[],e=[];try{if(t.provider&&t.provider!==d.provider)try{await m.execute(`config set llm.provider ${t.provider}`,1e4),e.push("provider")}catch(r){a.push(`provider: ${r.message}`)}if(t.model&&t.model!==d.model)try{await m.execute(`config set llm.model ${t.model}`,1e4),e.push("model")}catch(r){a.push(`model: ${r.message}`)}if(t.apiKey&&t.apiKey!==d.apiKey)try{await m.execute(`config set llm.apiKey ${t.apiKey}`,1e4),e.push("apiKey")}catch(r){a.push(`apiKey: ${r.message}`)}if(t.baseUrl!==void 0&&t.baseUrl!==d.baseUrl)try{await m.execute(`config set llm.baseUrl ${t.baseUrl}`,1e4),e.push("baseUrl")}catch(r){a.push(`baseUrl: ${r.message}`)}if(t.temperature!==d.temperature)try{await m.execute(`config set llm.temperature ${t.temperature}`,1e4),e.push("temperature")}catch(r){a.push(`temperature: ${r.message}`)}if(t.maxTokens!==d.maxTokens)try{await m.execute(`config set llm.maxTokens ${t.maxTokens}`,1e4),e.push("maxTokens")}catch(r){a.push(`maxTokens: ${r.message}`)}a.length>0?_.warning(`部分配置保存失败: ${a.join("; ")}`):e.length>0?(_.success(`已保存 ${e.length} 项配置`),d={...t},e.includes("provider")&&i.loadProviders()):_.info("没有检测到配置变更")}catch(r){_.error(`保存配置失败: ${r.message}`)}finally{c.value=!1}}function G(){t.provider=d.provider||void 0,t.model=d.model||"",t.apiKey=d.apiKey||"",t.baseUrl=d.baseUrl||"",t.temperature=d.temperature??.7,t.maxTokens=d.maxTokens??4096}return H(()=>{i.loadProviders(),S()}),(a,e)=>{const r=u("a-button"),U=u("a-alert"),p=u("a-spin"),z=u("a-tag"),I=u("a-badge"),j=u("a-card"),f=u("a-list-item"),h=u("a-list"),$=u("a-divider"),D=u("a-select"),L=u("a-form-item"),R=u("a-input"),J=u("a-input-password"),Q=u("a-slider"),V=u("a-input-number"),W=u("a-form");return y(),N("div",null,[n("div",ne,[e[9]||(e[9]=n("div",null,[n("h2",{class:"page-title"},"LLM 配置"),n("p",{class:"page-sub"},"管理 AI 服务提供商")],-1)),s(r,{type:"primary",ghost:"",loading:g(i).loading,onClick:e[0]||(e[0]=o=>g(i).loadProviders())},{icon:l(()=>[s(g(q))]),default:l(()=>[e[8]||(e[8]=x(" 刷新 ",-1))]),_:1},8,["loading"])]),g(i).activeProvider?(y(),K(U,{key:0,type:"success",style:{"margin-bottom":"20px",background:"rgba(41,162,112,.08)","border-color":"rgba(41,162,112,.3)"},"show-icon":""},{message:l(()=>[n("span",null,[e[10]||(e[10]=x("当前激活:",-1)),n("strong",null,M(g(i).activeProvider),1)])]),_:1})):B("",!0),g(i).loading?(y(),N("div",ie,[s(p,{size:"large"}),e[11]||(e[11]=n("div",{style:{color:"var(--text-muted)","margin-top":"12px"}},"加载 LLM 信息中...",-1))])):(y(),N("div",de,[n("div",ue,[(y(!0),N(X,null,ee(g(i).providers,o=>(y(),K(j,{key:o.name,class:oe(["provider-card",{active:o.active}]),style:{background:"var(--bg-card)"},size:"small"},{default:l(()=>[n("div",ce,[n("span",pe,M(o.icon),1),n("div",me,[n("div",ve,M(o.label),1),n("div",fe,M(o.name),1)]),n("div",null,[o.active?(y(),K(z,{key:0,color:"green"},{default:l(()=>[...e[12]||(e[12]=[x("活跃",-1)])]),_:1})):o.status==="ok"?(y(),K(I,{key:1,status:"success",text:""})):o.status==="error"?(y(),K(I,{key:2,status:"error",text:""})):B("",!0)])]),n("div",ge,[s(r,{size:"small",style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"},loading:g(i).testing===o.name,onClick:Y=>w(o.name)},{default:l(()=>[...e[13]||(e[13]=[x(" 测试 ",-1)])]),_:1},8,["loading","onClick"]),o.active?(y(),K(z,{key:1,color:"green",style:{margin:"0","line-height":"24px"}},{default:l(()=>[...e[15]||(e[15]=[x("当前",-1)])]),_:1})):(y(),K(r,{key:0,size:"small",type:"primary",ghost:"",onClick:Y=>b(o.name)},{default:l(()=>[...e[14]||(e[14]=[x(" 切换 ",-1)])]),_:1},8,["onClick"]))])]),_:2},1032,["class"]))),128))]),g(i).localModels.length?(y(),N("div",ye,[e[16]||(e[16]=n("h3",{style:{color:"#ccc","font-size":"15px","margin-bottom":"12px"}}," 本地模型(Ollama) ",-1)),s(h,{"data-source":g(i).localModels,size:"small",style:{background:"var(--bg-card)","border-radius":"8px",border:"1px solid var(--border-color)"}},{renderItem:l(({item:o})=>[s(f,{style:{padding:"10px 16px","border-color":"#252525"}},{actions:l(()=>[s(z,{color:"cyan",style:{"font-size":"10px"}},{default:l(()=>[x(M(o.size||"local"),1)]),_:2},1024)]),default:l(()=>[n("span",be,M(o.name),1)]),_:2},1024)]),_:1},8,["data-source"])])):B("",!0),s($,{style:{"border-color":"var(--border-color)",margin:"32px 0 24px"}}),n("div",xe,[e[18]||(e[18]=n("h3",{class:"section-title"},"LLM 参数设置",-1)),s(r,{size:"small",loading:T.value,onClick:S,style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:l(()=>[s(g(q))]),default:l(()=>[e[17]||(e[17]=x(" 加载配置 ",-1))]),_:1},8,["loading"])]),s(j,{class:"config-card",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:l(()=>[s(W,{model:t,layout:"vertical",class:"config-form"},{default:l(()=>[n("div",_e,[s(L,{label:"Provider(提供商)"},{default:l(()=>[s(D,{value:t.provider,"onUpdate:value":e[1]||(e[1]=o=>t.provider=o),placeholder:"选择 LLM 提供商",options:g(k),style:{width:"100%"},disabled:c.value},null,8,["value","options","disabled"])]),_:1}),s(L,{label:"Model(模型名称)"},{default:l(()=>[s(R,{value:t.model,"onUpdate:value":e[2]||(e[2]=o=>t.model=o),placeholder:"例如 doubao-seed-1-6-251015","allow-clear":"",disabled:c.value},null,8,["value","disabled"])]),_:1}),s(L,{label:"API Key"},{default:l(()=>[s(J,{value:t.apiKey,"onUpdate:value":e[3]||(e[3]=o=>t.apiKey=o),placeholder:"输入 API Key",disabled:c.value},null,8,["value","disabled"])]),_:1}),s(L,{label:"Base URL"},{default:l(()=>[s(R,{value:t.baseUrl,"onUpdate:value":e[4]||(e[4]=o=>t.baseUrl=o),placeholder:"例如 https://ark.cn-beijing.volces.com/api/v3","allow-clear":"",disabled:c.value},null,8,["value","disabled"])]),_:1}),s(L,{label:"Temperature(温度)"},{default:l(()=>[n("div",ke,[s(Q,{value:t.temperature,"onUpdate:value":e[5]||(e[5]=o=>t.temperature=o),min:0,max:2,step:.1,style:{flex:"1"},disabled:c.value},null,8,["value","disabled"]),s(V,{value:t.temperature,"onUpdate:value":e[6]||(e[6]=o=>t.temperature=o),min:0,max:2,step:.1,precision:1,style:{width:"80px"},disabled:c.value},null,8,["value","disabled"])])]),_:1}),s(L,{label:"Max Tokens(最大输出长度)"},{default:l(()=>[s(V,{value:t.maxTokens,"onUpdate:value":e[7]||(e[7]=o=>t.maxTokens=o),min:256,max:128e3,step:256,style:{width:"100%"},placeholder:"4096",disabled:c.value},null,8,["value","disabled"])]),_:1})]),n("div",we,[s(r,{onClick:G,disabled:c.value,style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{default:l(()=>[...e[19]||(e[19]=[x(" 重置 ",-1)])]),_:1},8,["disabled"]),s(r,{type:"primary",loading:c.value,onClick:E},{default:l(()=>[...e[20]||(e[20]=[x(" 保存配置 ",-1)])]),_:1},8,["loading"])])]),_:1},8,["model"])]),_:1})]))])}}},Te=ae(he,[["__scopeId","data-v-38d68389"]]);export{Te as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{M as f,R as _,P as l,c as m,N as d,Q as A,S as v,K as b,r as w,L as o,a0 as M,a1 as N,O as q,u as x}from"./vendor-M5lGV-wr.js";import{u as E}from"./index-
|
|
1
|
+
import{M as f,R as _,P as l,c as m,N as d,Q as A,S as v,K as b,r as w,L as o,a0 as M,a1 as N,O as q,u as x}from"./vendor-M5lGV-wr.js";import{u as E}from"./index-19d37fVJ.js";import{b as K,ak as P,p as T,f as V}from"./icons-BFHq5fEF.js";function L(){const h=[];let s=null,c=!1,t=null;return{push(e){if(h.push(e),s){const a=s;s=null,a()}},finish(e){if(c=!0,t=e||null,s){const a=s;s=null,a()}},async*iterate(){for(;;){for(;h.length>0;)yield h.shift();if(c){if(t)throw t;return}await new Promise(e=>{s=e})}}}}function Q(){const h=E();function s(t){if(!t||!Array.isArray(t.messages))throw new Error("messages array is required");const e=L(),a=new AbortController;t.signal&&(t.signal.aborted?a.abort(t.signal.reason):t.signal.addEventListener("abort",()=>a.abort(t.signal.reason),{once:!0}));const i=h.sendStream({type:"llm.chat",messages:t.messages,options:t.options||{}},{onChunk:u=>e.push(u),idleMs:t.idleMs??6e4,signal:a.signal}).then(u=>(e.finish(null),u),u=>{throw e.finish(u),u});function r(){a.signal.aborted||a.abort(new Error("aborted"))}return{stream:e.iterate(),result:i,cancel:r}}async function c(t){const e=typeof t.onDelta=="function"?t.onDelta:()=>{},{stream:a,result:i}=s(t);try{for await(const r of a)e(r)}catch{}return i}return{chat:s,chatTo:c}}const U={style:{"margin-bottom":"24px"}},j={class:"page-title"},F={class:"page-sub"},R={style:{display:"flex","justify-content":"space-between","align-items":"center","margin-top":"12px"}},W={style:{display:"flex",gap:"8px","align-items":"center",color:"var(--text-muted)","font-size":"11px"}},G={key:0},H={key:1},I={key:2},J={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"}},Z={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"}},le={__name:"QuickAsk",setup(h){const s=Q(),c=w(""),t=w(""),e=w(""),a=w(!1),i=w(""),r=w(null);let u=null;async function $(){if(!(a.value||!c.value.trim())){a.value=!0,e.value="",i.value="",r.value=null;try{const n=[{role:"user",content:c.value}],k={},C=t.value.trim();C&&(k.model=C);const g=s.chat({messages:n,options:k});u=g;try{for await(const y of g.stream)y?.content?e.value=y.content:y?.delta&&(e.value+=y.delta)}catch{}const p=await g.result;r.value={model:p?.model||null,tokens:p?.tokens??null},!e.value&&p?.message?.content&&(e.value=p.message.content)}catch(n){i.value=n?.message||String(n)}finally{a.value=!1,u=null}}}function O(){u?.cancel&&u.cancel()}function B(){e.value="",i.value="",r.value=null}return(n,k)=>{const C=b("a-textarea"),g=b("a-input"),p=b("a-button"),y=b("a-space"),z=b("a-card"),D=b("a-empty");return o(),f("div",null,[_("div",U,[_("h2",j,l(n.$t("quickAsk.title")),1),_("p",F,l(n.$t("quickAsk.subtitle")),1)]),m(z,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:d(()=>[m(C,{value:c.value,"onUpdate:value":k[0]||(k[0]=S=>c.value=S),rows:4,placeholder:n.$t("quickAsk.promptPlaceholder"),disabled:a.value,onKeydown:[M(N($,["ctrl","prevent"]),["enter"]),M(N($,["meta","prevent"]),["enter"])]},null,8,["value","placeholder","disabled","onKeydown"]),_("div",R,[_("div",W,[m(g,{value:t.value,"onUpdate:value":k[1]||(k[1]=S=>t.value=S),placeholder:n.$t("quickAsk.modelPlaceholder"),size:"small",style:{width:"200px"},disabled:a.value,"allow-clear":""},null,8,["value","placeholder","disabled"]),e.value?(o(),f("span",G,l(e.value.length)+" "+l(n.$t("quickAsk.charsSuffix")),1)):v("",!0),r.value?(o(),f("span",H,"· "+l(r.value.tokens??0)+" "+l(n.$t("quickAsk.tokensSuffix")),1)):v("",!0),r.value?.model?(o(),f("span",I,"· "+l(r.value.model),1)):v("",!0)]),m(y,null,{default:d(()=>[e.value||i.value?(o(),A(p,{key:0,disabled:a.value,onClick:B},{default:d(()=>[q(l(n.$t("quickAsk.clear")),1)]),_:1},8,["disabled"])):v("",!0),a.value?(o(),A(p,{key:1,danger:"",onClick:O},{icon:d(()=>[m(x(K))]),default:d(()=>[q(" "+l(n.$t("quickAsk.cancel")),1)]),_:1})):(o(),A(p,{key:2,type:"primary",disabled:!c.value.trim(),onClick:$},{icon:d(()=>[m(x(P))]),default:d(()=>[q(" "+l(n.$t("quickAsk.send")),1)]),_:1},8,["disabled"]))]),_:1})])]),_:1}),e.value||a.value||i.value?(o(),A(z,{key:0,title:n.$t("quickAsk.answerCardTitle"),style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-top":"16px"}},{extra:d(()=>[a.value?(o(),f("span",J,[m(x(T),{spin:!0}),q(" "+l(n.$t("quickAsk.streaming")),1)])):r.value?(o(),f("span",X,[m(x(V)),q(" "+l(n.$t("quickAsk.done")),1)])):v("",!0)]),default:d(()=>[e.value?(o(),f("pre",Y,l(e.value),1)):a.value?(o(),A(D,{key:1,description:n.$t("quickAsk.waitingFirstToken")},null,8,["description"])):v("",!0),i.value?(o(),f("div",Z,[_("pre",ee,l(i.value),1)])):v("",!0)]),_:1},8,["title"])):v("",!0)])}}};export{le as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{_ as Xe,b as Ze,u as et,E as tt,d as y}from"./index-B_juAGfN.js";import{s as ot}from"./community-parser-CO25nZFt.js";import{R as nt,aJ as at,aR as st,q as rt,aj as ke,a9 as be,aS as lt,aP as it,az as ct}from"./icons-BFHq5fEF.js";import{o as dt,M as g,R as x,P as c,u as t,c as a,N as n,K as f,r as C,L as d,O as p,Q as _,S as v,F as A,Y as q,_ as ut,f as X,a as mt}from"./vendor-M5lGV-wr.js";function P(s){const e=ot(s);if(!e)return null;try{return JSON.parse(e)}catch{}const i=e.match(/\{[\s\S]*\}|\[[\s\S]*\]/);if(!i)return null;try{return JSON.parse(i[0])}catch{return null}}const xe=Object.freeze(["note","post","article","document"]),pt=Object.freeze(["pending","viewed","dismissed"]);function S(s,e=0){return typeof s=="number"&&Number.isFinite(s)?s:e}function he(s){if(!s||typeof s!="object"||Array.isArray(s))return{};const e={};for(const[i,h]of Object.entries(s))typeof h=="number"&&Number.isFinite(h)&&(e[i]=h);return e}function ft(s,e=0){if(!s||typeof s!="object")return null;const i=s.user_id??s.userId??"";if(!i)return null;const h=s.topics&&typeof s.topics=="object"&&!Array.isArray(s.topics)?he(s.topics):{},I=s.interaction_weights??s.interactionWeights,N=I&&typeof I=="object"&&!Array.isArray(I)?he(I):{};return{key:i,id:String(s.id||""),userId:i,topics:h,topicCount:Object.keys(h).length,interactionWeights:N,decayFactor:S(s.decay_factor??s.decayFactor,.9),lastUpdated:s.last_updated??s.lastUpdated??null,updateCount:S(s.update_count??s.updateCount,0),_idx:e}}function yt(s){const e=P(s);return Array.isArray(e)?e.map(ft).filter(Boolean):[]}function gt(s,e=0){if(!s||typeof s!="object")return null;const i=s.id||"";return i?{key:i,id:i,userId:s.user_id??s.userId??"",contentId:s.content_id??s.contentId??"",contentType:String(s.content_type??s.contentType??"note").toLowerCase(),title:String(s.title||""),score:S(s.score,0),reason:String(s.reason||""),source:String(s.source||"heuristic"),status:String(s.status||"pending").toLowerCase(),feedback:s.feedback??null,createdAt:s.created_at??s.createdAt??null,viewedAt:s.viewed_at??s.viewedAt??null,_idx:e}:null}function _t(s){const e=P(s);return Array.isArray(e)?e.map(gt).filter(Boolean):[]}const vt={total:0,pending:0,viewed:0,dismissed:0,feedbackCount:0,feedbackRate:0,avgScore:0};function kt(s){const e={...vt},i=P(s);return!i||typeof i!="object"||Array.isArray(i)||(e.total=S(i.total,0),e.pending=S(i.pending,0),e.viewed=S(i.viewed,0),e.dismissed=S(i.dismissed,0),e.feedbackCount=S(i.feedbackCount,0),e.feedbackRate=S(i.feedbackRate,0),e.avgScore=S(i.avgScore,0)),e}function bt(s){const e=P(s);return Array.isArray(e)?e.filter(i=>i&&typeof i=="object"&&typeof i.topic=="string").map((i,h)=>({key:`${i.topic}-${h}`,topic:i.topic,weight:S(i.weight,0)})):[]}function xt(s){const e=P(s);return Array.isArray(e)?e.filter(i=>i&&typeof i=="object"&&typeof i.topic=="string"&&typeof i.action=="string").map((i,h)=>({key:`${i.topic}-${h}`,topic:i.topic,action:i.action,amount:S(i.amount,0)})):[]}function J(s){const e=P(s);return!e||typeof e!="object"||Array.isArray(e)?{ok:!1,reason:"",profileId:null,topicCount:null}:{ok:!!(e.updated||e.deleted||e.marked||e.dismissed||e.recorded||e.applied||e.profileId),reason:e.reason?String(e.reason):"",profileId:e.profileId?String(e.profileId):null,topicCount:typeof e.topicCount=="number"?e.topicCount:null}}function Ce(s){if(s==null||s==="")return"—";const e=typeof s=="number"?new Date(s):new Date(String(s));return isNaN(e.getTime())?String(s):e.toLocaleString("zh-CN",{hour12:!1})}const ht={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},Ct={class:"page-title"},wt={class:"page-sub"},St={style:{display:"flex","align-items":"center",gap:"12px","flex-wrap":"wrap"}},It={style:{color:"var(--text-secondary)","font-size":"12px"}},zt={class:"type-name"},At={class:"filter-bar"},Ft={style:{color:"var(--text-primary)","font-weight":"500"}},Ot={style:{color:"var(--text-muted)","font-size":"11px","margin-top":"2px"}},Tt={key:3,style:{color:"var(--text-secondary)","font-size":"12px"}},Rt={key:1,style:{color:"var(--text-muted)"}},Ut={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},$t={key:0,style:{color:"var(--text-primary)","font-family":"monospace","font-weight":"500"}},jt={key:2,style:{color:"var(--text-secondary)","font-family":"monospace","font-size":"12px"}},Jt={key:3,style:{color:"var(--text-secondary)"}},Pt={key:4,style:{color:"var(--text-secondary)","font-size":"11px"}},Nt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},Et={key:1},Lt={class:"interest-topic"},Mt={style:{"margin-left":"8px","font-family":"monospace",color:"var(--text-primary)"}},Dt={style:{"margin-left":"auto",color:"var(--text-secondary)","font-size":"12px"}},Bt={key:0,style:{"padding-top":"8px"}},Wt={style:{"font-family":"monospace","font-size":"12px"}},Vt={style:{color:"var(--text-primary)","font-size":"13px",margin:"16px 0 8px"}},Kt={key:1},qt={class:"interest-topic"},Yt={key:2,style:{color:"var(--text-primary)","font-size":"13px",margin:"16px 0 8px"}},Gt={key:3,class:"weights-pre"},Qt={__name:"Recommend",setup(s){const{t:e}=Ze(),i=et(),h=tt.PRESENTED_IMAGE_SIMPLE,I=C(!1),N=C(!1),Z=C(!1),E=C([]),ee=C([]),F=C({total:0,pending:0,viewed:0,dismissed:0,feedbackCount:0,feedbackRate:0,avgScore:0}),Y=C([]),U=C([]),k=C(null),G=C("recs"),L=C(""),M=C(""),Q=C(!1),te=C(!1),b=mt({userId:"",topicsJson:"",weightsJson:""}),w=C(null),we=X(()=>E.value.map(o=>({value:o.userId,label:`${o.userId} (${e("recommend.userBar.topicSuffix",{count:o.topicCount})})`}))),Se=X(()=>[{title:e("recommend.recColumns.title"),key:"title"},{title:e("recommend.recColumns.contentType"),key:"contentType",width:"110px"},{title:e("recommend.recColumns.score"),key:"score",width:"180px"},{title:e("recommend.recColumns.reason"),key:"reason",width:"220px"},{title:e("recommend.recColumns.status"),key:"status",width:"100px"},{title:e("recommend.recColumns.feedback"),key:"feedback",width:"90px"},{title:e("recommend.recColumns.action"),key:"action",width:"210px"}]),Ie=X(()=>[{title:e("recommend.profileColumns.userId"),key:"userId"},{title:e("recommend.profileColumns.topicCount"),key:"topicCount",width:"110px"},{title:e("recommend.profileColumns.decayFactor"),key:"decayFactor",width:"110px"},{title:e("recommend.profileColumns.updateCount"),key:"updateCount",width:"110px"},{title:e("recommend.profileColumns.lastUpdated"),key:"lastUpdated",width:"180px"},{title:e("recommend.profileColumns.action"),key:"action",width:"200px"}]),ze=X(()=>{let o=ee.value;return L.value&&(o=o.filter(l=>l.status===L.value)),M.value&&(o=o.filter(l=>l.contentType===M.value)),o});function le(o){const l=`recommend.type.${o}`,u=e(l);return u===l?o:u}function ie(o){return{note:"blue",post:"green",article:"purple",document:"orange"}[o]||"default"}function Ae(o){return{note:"#1677ff",post:"#52c41a",article:"#722ed1",document:"#fa8c16"}[o]||"#888"}function ce(o){const l=`recommend.status.${o}`,u=e(l);return u===l?o:u}function Fe(o){return{pending:"processing",viewed:"green",dismissed:"default"}[o]||"default"}function Oe(o){const l=`recommend.feedbackLabel.${o}`,u=e(l);return u===l?o:u}function Te(o){return{like:"green",dislike:"red",later:"gold"}[o]||"default"}function de(o){return o>=.7?"#52c41a":o>=.4?"#1677ff":o>=.2?"#faad14":"#ff4d4f"}function ue(o){return o>=.7?"#52c41a":o>=.4?"#1677ff":o>=.2?"#faad14":"#888"}function Re(o){try{return JSON.stringify(o,null,2)}catch{return String(o)}}async function D(){I.value=!0;try{const{output:o}=await i.execute("recommend profiles --json",1e4).catch(()=>({output:""}));E.value=yt(o),k.value&&!E.value.find(l=>l.userId===k.value)&&(k.value=null),k.value&&await R()}catch(o){y.error(e("recommend.messages.loadProfilesFailed",{err:o?.message||o}))}finally{I.value=!1}}async function R(){if(!k.value){ee.value=[],F.value={total:0,pending:0,viewed:0,dismissed:0,feedbackCount:0,feedbackRate:0,avgScore:0},Y.value=[];return}N.value=!0;try{const o=B(k.value),[l,u,O]=await Promise.all([i.execute(`recommend list ${o} --limit 200 --json`,1e4).catch(()=>({output:""})),i.execute(`recommend stats ${o} --json`,8e3).catch(()=>({output:""})),i.execute(`recommend top-interests ${o} --limit 30 --json`,8e3).catch(()=>({output:""}))]);ee.value=_t(l.output),F.value=kt(u.output),Y.value=bt(O.output)}catch(o){y.error(e("recommend.messages.loadUserFailed",{err:o?.message||o}))}finally{N.value=!1}}function B(o){return`"${String(o).replace(/"/g,'\\"')}"`}function Ue(){U.value=[],R()}function $e(o){k.value=o,G.value="recs",R()}async function je(){if(!b.userId.trim()){y.warning(e("recommend.messages.userIdRequired"));return}if(b.topicsJson.trim())try{JSON.parse(b.topicsJson)}catch{y.warning(e("recommend.messages.topicsJsonInvalid"));return}if(b.weightsJson.trim())try{JSON.parse(b.weightsJson)}catch{y.warning(e("recommend.messages.weightsJsonInvalid"));return}Z.value=!0;try{const o=[`recommend create-profile ${B(b.userId.trim())}`];b.topicsJson.trim()&&o.push(`-t ${me(b.topicsJson.trim())}`),b.weightsJson.trim()&&o.push(`-w ${me(b.weightsJson.trim())}`),o.push("--json");const{output:l}=await i.execute(o.join(" "),1e4),u=J(l);if(!u.ok){y.error(e("recommend.messages.createFailed",{err:u.reason||l.slice(0,120)}));return}y.success(e("recommend.messages.createOk",{id:u.profileId?.slice(0,8)||""})),Q.value=!1;const O=b.userId.trim();pe(),await D(),k.value=O,await R()}catch(o){y.error(e("recommend.messages.createFailed",{err:o?.message||o}))}finally{Z.value=!1}}function me(o){return`'${String(o).replace(/'/g,"'\\''")}'`}async function Je(){if(k.value)try{const{output:o}=await i.execute(`recommend decay ${B(k.value)} --json`,8e3),l=J(o);if(!l.ok){y.error(e("recommend.messages.decayFailed",{err:l.reason||o.slice(0,120)}));return}y.success(l.topicCount!==null?e("recommend.messages.decayOkTopics",{count:l.topicCount}):e("recommend.messages.decayOk")),await D()}catch(o){y.error(e("recommend.messages.decayFailed",{err:o?.message||o}))}}async function Pe(){if(k.value)try{const{output:o}=await i.execute(`recommend suggest ${B(k.value)} --json`,8e3);U.value=xt(o),G.value="interests",U.value.length?y.success(e("recommend.messages.suggestFound",{count:U.value.length})):y.info(e("recommend.messages.suggestNone"))}catch(o){y.error(e("recommend.messages.loadSuggestFailed",{err:o?.message||o}))}}async function Ne(o){try{const{output:l}=await i.execute(`recommend delete-profile ${B(o.userId)} --json`,8e3),u=J(l);if(!u.ok){y.error(e("recommend.messages.deleteFailed",{err:u.reason||l.slice(0,120)}));return}y.success(e("recommend.messages.deleteOk")),k.value===o.userId&&(k.value=null),await D()}catch(l){y.error(e("recommend.messages.deleteFailed",{err:l?.message||l}))}}function Ee(o){w.value=o,te.value=!0}async function Le(o){try{const{output:l}=await i.execute(`recommend view ${o.id} --json`,8e3),u=J(l);if(!u.ok){y.error(e("recommend.messages.viewFailed",{err:u.reason||l.slice(0,120)}));return}y.success(e("recommend.messages.viewOk")),await R()}catch(l){y.error(e("recommend.messages.viewFailed",{err:l?.message||l}))}}async function Me(o,l){try{const{output:u}=await i.execute(`recommend feedback ${o.id} ${l} --json`,8e3),O=J(u);if(!O.ok){y.error(e("recommend.messages.feedbackFailed",{err:O.reason||u.slice(0,120)}));return}y.success(e("recommend.messages.feedbackOk")),await R()}catch(u){y.error(e("recommend.messages.feedbackFailed",{err:u?.message||u}))}}async function De(o){try{const{output:l}=await i.execute(`recommend dismiss ${o.id} --json`,8e3),u=J(l);if(!u.ok){y.error(e("recommend.messages.dismissFailed",{err:u.reason||l.slice(0,120)}));return}y.success(e("recommend.messages.dismissOk")),await R()}catch(l){y.error(e("recommend.messages.dismissFailed",{err:l?.message||l}))}}function pe(){b.userId="",b.topicsJson="",b.weightsJson=""}return dt(D),(o,l)=>{const u=f("a-button"),O=f("a-space"),Be=f("a-select"),z=f("a-card"),W=f("a-statistic"),T=f("a-col"),oe=f("a-row"),$=f("a-tag"),H=f("a-radio-button"),fe=f("a-radio-group"),V=f("a-empty"),ne=f("a-progress"),ae=f("a-menu-item"),We=f("a-menu"),Ve=f("a-dropdown"),ye=f("a-popconfirm"),ge=f("a-table"),se=f("a-tab-pane"),Ke=f("a-list-item"),qe=f("a-list"),Ye=f("a-tabs"),Ge=f("a-input"),re=f("a-form-item"),_e=f("a-textarea"),Qe=f("a-form"),ve=f("a-modal"),K=f("a-descriptions-item"),He=f("a-descriptions");return d(),g("div",null,[x("div",ht,[x("div",null,[x("h2",Ct,c(t(e)("recommend.title")),1),x("p",wt,c(t(e)("recommend.subtitle")),1)]),a(O,null,{default:n(()=>[a(u,{loading:I.value,onClick:D},{icon:n(()=>[a(t(nt))]),default:n(()=>[p(" "+c(t(e)("recommend.refresh")),1)]),_:1},8,["loading"]),a(u,{type:"primary",onClick:l[0]||(l[0]=r=>Q.value=!0)},{icon:n(()=>[a(t(at))]),default:n(()=>[p(" "+c(t(e)("recommend.createProfile")),1)]),_:1})]),_:1})]),a(z,{size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"},"body-style":{padding:"10px 16px"}},{default:n(()=>[x("div",St,[x("span",It,c(t(e)("recommend.userBar.currentUser")),1),a(Be,{value:k.value,"onUpdate:value":l[1]||(l[1]=r=>k.value=r),options:we.value,placeholder:t(e)("recommend.userBar.selectPlaceholder"),style:{"min-width":"280px"},"allow-clear":"","show-search":"",onChange:Ue},null,8,["value","options","placeholder"]),k.value?(d(),_(u,{key:0,size:"small",onClick:Je},{icon:n(()=>[a(t(st))]),default:n(()=>[p(" "+c(t(e)("recommend.userBar.applyDecay")),1)]),_:1})):v("",!0),k.value?(d(),_(u,{key:1,size:"small",onClick:Pe},{icon:n(()=>[a(t(rt))]),default:n(()=>[p(" "+c(t(e)("recommend.userBar.suggest")),1)]),_:1})):v("",!0)])]),_:1}),a(oe,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:n(()=>[a(T,{xs:12,sm:8,lg:5},{default:n(()=>[a(z,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[a(W,{title:t(e)("recommend.stats.profiles"),value:E.value.length,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:n(()=>[a(t(ke))]),_:1},8,["title","value"])]),_:1})]),_:1}),a(T,{xs:12,sm:8,lg:5},{default:n(()=>[a(z,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[a(W,{title:t(e)("recommend.stats.totalRecs"),value:F.value.total,"value-style":{color:"#722ed1",fontSize:"20px"}},{prefix:n(()=>[a(t(be))]),_:1},8,["title","value"])]),_:1})]),_:1}),a(T,{xs:12,sm:8,lg:5},{default:n(()=>[a(z,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[a(W,{title:t(e)("recommend.stats.pending"),value:F.value.pending,"value-style":{color:F.value.pending>0?"#faad14":"#888",fontSize:"20px"}},{prefix:n(()=>[a(t(lt))]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),a(T,{xs:12,sm:8,lg:5},{default:n(()=>[a(z,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[a(W,{title:t(e)("recommend.stats.feedbackRate"),value:F.value.feedbackRate*100,suffix:"%",precision:1,"value-style":{color:"#13c2c2",fontSize:"20px"}},{prefix:n(()=>[a(t(it))]),_:1},8,["title","value"])]),_:1})]),_:1}),a(T,{xs:24,sm:8,lg:4},{default:n(()=>[a(z,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[a(W,{title:t(e)("recommend.stats.avgScore"),value:F.value.avgScore,precision:3,"value-style":{color:de(F.value.avgScore),fontSize:"20px"}},{prefix:n(()=>[a(t(ct))]),_:1},8,["title","value","value-style"])]),_:1})]),_:1})]),_:1}),a(z,{title:t(e)("recommend.typeCatalogue"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"},"body-style":{padding:"12px 16px"}},{default:n(()=>[a(oe,{gutter:[12,12]},{default:n(()=>[(d(!0),g(A,null,q(t(xe),r=>(d(),_(T,{key:r,xs:12,sm:6},{default:n(()=>[x("div",{class:"type-pill",style:ut({borderLeftColor:Ae(r)})},[a($,{color:ie(r),style:{"font-family":"monospace"}},{default:n(()=>[p(c(r),1)]),_:2},1032,["color"]),x("div",zt,c(le(r)),1)],4)]),_:2},1024))),128))]),_:1})]),_:1},8,["title"]),a(Ye,{activeKey:G.value,"onUpdate:activeKey":l[4]||(l[4]=r=>G.value=r),class:"recommend-tabs"},{default:n(()=>[a(se,{key:"recs",tab:t(e)("recommend.tabs.recs")},{default:n(()=>[x("div",At,[a(fe,{value:L.value,"onUpdate:value":l[2]||(l[2]=r=>L.value=r),size:"small","button-style":"solid"},{default:n(()=>[a(H,{value:""},{default:n(()=>[p(c(t(e)("recommend.filter.allStatuses")),1)]),_:1}),(d(!0),g(A,null,q(t(pt),r=>(d(),_(H,{key:r,value:r},{default:n(()=>[p(c(ce(r)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),a(fe,{value:M.value,"onUpdate:value":l[3]||(l[3]=r=>M.value=r),size:"small"},{default:n(()=>[a(H,{value:""},{default:n(()=>[p(c(t(e)("recommend.filter.allTypes")),1)]),_:1}),(d(!0),g(A,null,q(t(xe),r=>(d(),_(H,{key:r,value:r},{default:n(()=>[p(c(le(r)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),k.value?(d(),_(ge,{key:1,columns:Se.value,"data-source":ze.value,pagination:{pageSize:20,showTotal:r=>t(e)("recommend.totals.rows",{count:r})},size:"small",loading:N.value,style:{background:"var(--bg-card)"}},{bodyCell:n(({column:r,record:m})=>[r.key==="title"?(d(),g(A,{key:0},[x("span",Ft,c(m.title||t(e)("recommend.noTitle")),1),x("div",Ot,c(m.contentId),1)],64)):v("",!0),r.key==="contentType"?(d(),_($,{key:1,color:ie(m.contentType),style:{"font-family":"monospace"}},{default:n(()=>[p(c(m.contentType),1)]),_:2},1032,["color"])):v("",!0),r.key==="score"?(d(),_(ne,{key:2,percent:Math.round(m.score*100),"stroke-color":de(m.score),size:"small",format:()=>m.score.toFixed(3)},null,8,["percent","stroke-color","format"])):v("",!0),r.key==="reason"?(d(),g("span",Tt,c(m.reason),1)):v("",!0),r.key==="status"?(d(),_($,{key:4,color:Fe(m.status)},{default:n(()=>[p(c(ce(m.status)),1)]),_:2},1032,["color"])):v("",!0),r.key==="feedback"?(d(),g(A,{key:5},[m.feedback?(d(),_($,{key:0,color:Te(m.feedback)},{default:n(()=>[p(c(Oe(m.feedback)),1)]),_:2},1032,["color"])):(d(),g("span",Rt,"—"))],64)):v("",!0),r.key==="action"?(d(),g(A,{key:6},[m.status==="pending"?(d(),_(u,{key:0,size:"small",type:"link",onClick:j=>Le(m)},{default:n(()=>[p(c(t(e)("recommend.rowActions.view")),1)]),_:1},8,["onClick"])):v("",!0),m.status!=="dismissed"?(d(),_(Ve,{key:1},{overlay:n(()=>[a(We,{onClick:({key:j})=>Me(m,j)},{default:n(()=>[a(ae,{key:"like",style:{color:"#52c41a"}},{default:n(()=>[p(c(t(e)("recommend.feedbackMenu.like")),1)]),_:1}),a(ae,{key:"dislike",style:{color:"#ff4d4f"}},{default:n(()=>[p(c(t(e)("recommend.feedbackMenu.dislike")),1)]),_:1}),a(ae,{key:"later"},{default:n(()=>[p(c(t(e)("recommend.feedbackMenu.later")),1)]),_:1})]),_:1},8,["onClick"])]),default:n(()=>[a(u,{size:"small",type:"link"},{default:n(()=>[p(c(t(e)("recommend.feedbackDropdown")),1)]),_:1})]),_:2},1024)):v("",!0),m.status!=="dismissed"?(d(),_(ye,{key:2,title:t(e)("recommend.rowActions.dismissConfirmTitle"),"ok-text":t(e)("recommend.rowActions.dismissOk"),"cancel-text":t(e)("common.cancel"),onConfirm:j=>De(m)},{default:n(()=>[a(u,{size:"small",type:"link",danger:""},{default:n(()=>[p(c(t(e)("recommend.rowActions.dismiss")),1)]),_:1})]),_:1},8,["title","ok-text","cancel-text","onConfirm"])):v("",!0)],64)):v("",!0)]),emptyText:n(()=>[x("div",Ut,[a(t(be),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),p(" "+c(L.value||M.value?t(e)("recommend.empty.filtered"):t(e)("recommend.empty.noRecsHint")),1)])]),_:1},8,["columns","data-source","pagination","loading"])):(d(),_(V,{key:0,description:t(e)("recommend.empty.selectUser"),image:t(h),style:{padding:"40px 0"}},null,8,["description","image"]))]),_:1},8,["tab"]),a(se,{key:"profiles",tab:t(e)("recommend.tabs.profiles")},{default:n(()=>[a(ge,{columns:Ie.value,"data-source":E.value,pagination:{pageSize:20,showTotal:r=>t(e)("recommend.totals.profiles",{count:r})},size:"small",loading:I.value,style:{background:"var(--bg-card)"}},{bodyCell:n(({column:r,record:m})=>[r.key==="userId"?(d(),g("span",$t,c(m.userId),1)):v("",!0),r.key==="topicCount"?(d(),_($,{key:1,color:"blue"},{default:n(()=>[p(c(t(e)("recommend.topicTagSuffix",{count:m.topicCount})),1)]),_:2},1024)):v("",!0),r.key==="decayFactor"?(d(),g("span",jt,c(m.decayFactor.toFixed(2)),1)):v("",!0),r.key==="updateCount"?(d(),g("span",Jt,c(m.updateCount),1)):v("",!0),r.key==="lastUpdated"?(d(),g("span",Pt,c(t(Ce)(m.lastUpdated)),1)):v("",!0),r.key==="action"?(d(),g(A,{key:5},[a(u,{size:"small",type:"link",onClick:j=>Ee(m)},{default:n(()=>[p(c(t(e)("recommend.rowActions.details")),1)]),_:1},8,["onClick"]),a(u,{size:"small",type:"link",onClick:j=>$e(m.userId)},{default:n(()=>[p(c(t(e)("recommend.rowActions.switch")),1)]),_:1},8,["onClick"]),a(ye,{title:t(e)("recommend.rowActions.deleteConfirmTitle"),"ok-text":t(e)("recommend.rowActions.deleteOk"),"cancel-text":t(e)("common.cancel"),onConfirm:j=>Ne(m)},{default:n(()=>[a(u,{size:"small",type:"link",danger:""},{default:n(()=>[p(c(t(e)("recommend.rowActions.delete")),1)]),_:1})]),_:1},8,["title","ok-text","cancel-text","onConfirm"])],64)):v("",!0)]),emptyText:n(()=>[x("div",Nt,[a(t(ke),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),p(" "+c(t(e)("recommend.empty.noProfiles")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),a(se,{key:"interests",tab:t(e)("recommend.tabs.interests")},{default:n(()=>[k.value?(d(),_(oe,{key:1,gutter:[16,16]},{default:n(()=>[a(T,{xs:24,lg:14},{default:n(()=>[a(z,{title:t(e)("recommend.interest.topicWeights"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[Y.value.length?(d(),g("div",Et,[(d(!0),g(A,null,q(Y.value,r=>(d(),g("div",{key:r.key,class:"interest-row"},[x("span",Lt,c(r.topic),1),a(ne,{percent:Math.round(r.weight*100),"stroke-color":ue(r.weight),format:()=>r.weight.toFixed(3),size:"small",style:{flex:"1","margin-left":"12px"}},null,8,["percent","stroke-color","format"])]))),128))])):(d(),_(V,{key:0,description:t(e)("recommend.empty.noInterests"),image:t(h)},null,8,["description","image"]))]),_:1},8,["title"])]),_:1}),a(T,{xs:24,lg:10},{default:n(()=>[a(z,{title:t(e)("recommend.interest.feedbackSuggest"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[U.value.length?(d(),_(qe,{key:1,size:"small","data-source":U.value},{renderItem:n(({item:r})=>[a(Ke,null,{default:n(()=>[a($,{color:r.action==="boost"?"green":"orange"},{default:n(()=>[p(c(r.action==="boost"?t(e)("recommend.interest.boost"):t(e)("recommend.interest.lower")),1)]),_:2},1032,["color"]),x("span",Mt,c(r.topic),1),x("span",Dt,"±"+c(r.amount),1)]),_:2},1024)]),_:1},8,["data-source"])):(d(),_(V,{key:0,description:t(e)("recommend.empty.noSuggestions"),image:t(h)},null,8,["description","image"]))]),_:1},8,["title"])]),_:1})]),_:1})):(d(),_(V,{key:0,description:t(e)("recommend.empty.selectUser"),image:t(h),style:{padding:"40px 0"}},null,8,["description","image"]))]),_:1},8,["tab"])]),_:1},8,["activeKey"]),a(ve,{open:Q.value,"onUpdate:open":l[8]||(l[8]=r=>Q.value=r),title:t(e)("recommend.create.title"),"confirm-loading":Z.value,width:560,"ok-text":t(e)("recommend.create.ok"),"cancel-text":t(e)("common.cancel"),onOk:je,onCancel:pe},{default:n(()=>[a(Qe,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:n(()=>[a(re,{label:t(e)("recommend.create.userIdLabel"),required:""},{default:n(()=>[a(Ge,{value:b.userId,"onUpdate:value":l[5]||(l[5]=r=>b.userId=r),placeholder:t(e)("recommend.create.userIdPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),a(re,{label:t(e)("recommend.create.topicsLabel")},{default:n(()=>[a(_e,{value:b.topicsJson,"onUpdate:value":l[6]||(l[6]=r=>b.topicsJson=r),placeholder:t(e)("recommend.create.topicsPlaceholder"),"auto-size":{minRows:2,maxRows:5}},null,8,["value","placeholder"])]),_:1},8,["label"]),a(re,{label:t(e)("recommend.create.weightsLabel")},{default:n(()=>[a(_e,{value:b.weightsJson,"onUpdate:value":l[7]||(l[7]=r=>b.weightsJson=r),placeholder:t(e)("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"]),a(ve,{open:te.value,"onUpdate:open":l[9]||(l[9]=r=>te.value=r),title:t(e)("recommend.details.title",{userId:w.value?.userId||""}),width:680,footer:null},{default:n(()=>[w.value?(d(),g("div",Bt,[a(He,{column:2,size:"small",bordered:""},{default:n(()=>[a(K,{label:t(e)("recommend.details.id"),span:2},{default:n(()=>[x("span",Wt,c(w.value.id),1)]),_:1},8,["label"]),a(K,{label:t(e)("recommend.details.topicCount")},{default:n(()=>[p(c(w.value.topicCount),1)]),_:1},8,["label"]),a(K,{label:t(e)("recommend.details.decayFactor")},{default:n(()=>[p(c(w.value.decayFactor.toFixed(2)),1)]),_:1},8,["label"]),a(K,{label:t(e)("recommend.details.updateCount")},{default:n(()=>[p(c(w.value.updateCount),1)]),_:1},8,["label"]),a(K,{label:t(e)("recommend.details.lastUpdated")},{default:n(()=>[p(c(t(Ce)(w.value.lastUpdated)),1)]),_:1},8,["label"])]),_:1}),x("h4",Vt,c(t(e)("recommend.details.topicWeights")),1),Object.keys(w.value.topics).length?(d(),g("div",Kt,[(d(!0),g(A,null,q(w.value.topics,(r,m)=>(d(),g("div",{key:m,class:"interest-row"},[x("span",qt,c(m),1),a(ne,{percent:Math.round(r*100),"stroke-color":ue(r),format:()=>r.toFixed(3),size:"small",style:{flex:"1","margin-left":"12px"}},null,8,["percent","stroke-color","format"])]))),128))])):(d(),_(V,{key:0,description:t(e)("recommend.empty.noTopics"),image:t(h)},null,8,["description","image"])),Object.keys(w.value.interactionWeights).length?(d(),g("h4",Yt,c(t(e)("recommend.details.interactionWeights")),1)):v("",!0),Object.keys(w.value.interactionWeights).length?(d(),g("pre",Gt,c(Re(w.value.interactionWeights)),1)):v("",!0)])):v("",!0)]),_:1},8,["open","title"])])}}},to=Xe(Qt,[["__scopeId","data-v-16fcadc2"]]);export{to as default};
|
|
1
|
+
import{_ as Xe,b as Ze,u as et,E as tt,d as y}from"./index-19d37fVJ.js";import{s as ot}from"./community-parser-CO25nZFt.js";import{R as nt,aJ as at,aR as st,q as rt,aj as ke,a9 as be,aS as lt,aP as it,az as ct}from"./icons-BFHq5fEF.js";import{o as dt,M as g,R as x,P as c,u as t,c as a,N as n,K as f,r as C,L as d,O as p,Q as _,S as v,F as A,Y as q,_ as ut,f as X,a as mt}from"./vendor-M5lGV-wr.js";function P(s){const e=ot(s);if(!e)return null;try{return JSON.parse(e)}catch{}const i=e.match(/\{[\s\S]*\}|\[[\s\S]*\]/);if(!i)return null;try{return JSON.parse(i[0])}catch{return null}}const xe=Object.freeze(["note","post","article","document"]),pt=Object.freeze(["pending","viewed","dismissed"]);function S(s,e=0){return typeof s=="number"&&Number.isFinite(s)?s:e}function he(s){if(!s||typeof s!="object"||Array.isArray(s))return{};const e={};for(const[i,h]of Object.entries(s))typeof h=="number"&&Number.isFinite(h)&&(e[i]=h);return e}function ft(s,e=0){if(!s||typeof s!="object")return null;const i=s.user_id??s.userId??"";if(!i)return null;const h=s.topics&&typeof s.topics=="object"&&!Array.isArray(s.topics)?he(s.topics):{},I=s.interaction_weights??s.interactionWeights,N=I&&typeof I=="object"&&!Array.isArray(I)?he(I):{};return{key:i,id:String(s.id||""),userId:i,topics:h,topicCount:Object.keys(h).length,interactionWeights:N,decayFactor:S(s.decay_factor??s.decayFactor,.9),lastUpdated:s.last_updated??s.lastUpdated??null,updateCount:S(s.update_count??s.updateCount,0),_idx:e}}function yt(s){const e=P(s);return Array.isArray(e)?e.map(ft).filter(Boolean):[]}function gt(s,e=0){if(!s||typeof s!="object")return null;const i=s.id||"";return i?{key:i,id:i,userId:s.user_id??s.userId??"",contentId:s.content_id??s.contentId??"",contentType:String(s.content_type??s.contentType??"note").toLowerCase(),title:String(s.title||""),score:S(s.score,0),reason:String(s.reason||""),source:String(s.source||"heuristic"),status:String(s.status||"pending").toLowerCase(),feedback:s.feedback??null,createdAt:s.created_at??s.createdAt??null,viewedAt:s.viewed_at??s.viewedAt??null,_idx:e}:null}function _t(s){const e=P(s);return Array.isArray(e)?e.map(gt).filter(Boolean):[]}const vt={total:0,pending:0,viewed:0,dismissed:0,feedbackCount:0,feedbackRate:0,avgScore:0};function kt(s){const e={...vt},i=P(s);return!i||typeof i!="object"||Array.isArray(i)||(e.total=S(i.total,0),e.pending=S(i.pending,0),e.viewed=S(i.viewed,0),e.dismissed=S(i.dismissed,0),e.feedbackCount=S(i.feedbackCount,0),e.feedbackRate=S(i.feedbackRate,0),e.avgScore=S(i.avgScore,0)),e}function bt(s){const e=P(s);return Array.isArray(e)?e.filter(i=>i&&typeof i=="object"&&typeof i.topic=="string").map((i,h)=>({key:`${i.topic}-${h}`,topic:i.topic,weight:S(i.weight,0)})):[]}function xt(s){const e=P(s);return Array.isArray(e)?e.filter(i=>i&&typeof i=="object"&&typeof i.topic=="string"&&typeof i.action=="string").map((i,h)=>({key:`${i.topic}-${h}`,topic:i.topic,action:i.action,amount:S(i.amount,0)})):[]}function J(s){const e=P(s);return!e||typeof e!="object"||Array.isArray(e)?{ok:!1,reason:"",profileId:null,topicCount:null}:{ok:!!(e.updated||e.deleted||e.marked||e.dismissed||e.recorded||e.applied||e.profileId),reason:e.reason?String(e.reason):"",profileId:e.profileId?String(e.profileId):null,topicCount:typeof e.topicCount=="number"?e.topicCount:null}}function Ce(s){if(s==null||s==="")return"—";const e=typeof s=="number"?new Date(s):new Date(String(s));return isNaN(e.getTime())?String(s):e.toLocaleString("zh-CN",{hour12:!1})}const ht={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},Ct={class:"page-title"},wt={class:"page-sub"},St={style:{display:"flex","align-items":"center",gap:"12px","flex-wrap":"wrap"}},It={style:{color:"var(--text-secondary)","font-size":"12px"}},zt={class:"type-name"},At={class:"filter-bar"},Ft={style:{color:"var(--text-primary)","font-weight":"500"}},Ot={style:{color:"var(--text-muted)","font-size":"11px","margin-top":"2px"}},Tt={key:3,style:{color:"var(--text-secondary)","font-size":"12px"}},Rt={key:1,style:{color:"var(--text-muted)"}},Ut={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},$t={key:0,style:{color:"var(--text-primary)","font-family":"monospace","font-weight":"500"}},jt={key:2,style:{color:"var(--text-secondary)","font-family":"monospace","font-size":"12px"}},Jt={key:3,style:{color:"var(--text-secondary)"}},Pt={key:4,style:{color:"var(--text-secondary)","font-size":"11px"}},Nt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},Et={key:1},Lt={class:"interest-topic"},Mt={style:{"margin-left":"8px","font-family":"monospace",color:"var(--text-primary)"}},Dt={style:{"margin-left":"auto",color:"var(--text-secondary)","font-size":"12px"}},Bt={key:0,style:{"padding-top":"8px"}},Wt={style:{"font-family":"monospace","font-size":"12px"}},Vt={style:{color:"var(--text-primary)","font-size":"13px",margin:"16px 0 8px"}},Kt={key:1},qt={class:"interest-topic"},Yt={key:2,style:{color:"var(--text-primary)","font-size":"13px",margin:"16px 0 8px"}},Gt={key:3,class:"weights-pre"},Qt={__name:"Recommend",setup(s){const{t:e}=Ze(),i=et(),h=tt.PRESENTED_IMAGE_SIMPLE,I=C(!1),N=C(!1),Z=C(!1),E=C([]),ee=C([]),F=C({total:0,pending:0,viewed:0,dismissed:0,feedbackCount:0,feedbackRate:0,avgScore:0}),Y=C([]),U=C([]),k=C(null),G=C("recs"),L=C(""),M=C(""),Q=C(!1),te=C(!1),b=mt({userId:"",topicsJson:"",weightsJson:""}),w=C(null),we=X(()=>E.value.map(o=>({value:o.userId,label:`${o.userId} (${e("recommend.userBar.topicSuffix",{count:o.topicCount})})`}))),Se=X(()=>[{title:e("recommend.recColumns.title"),key:"title"},{title:e("recommend.recColumns.contentType"),key:"contentType",width:"110px"},{title:e("recommend.recColumns.score"),key:"score",width:"180px"},{title:e("recommend.recColumns.reason"),key:"reason",width:"220px"},{title:e("recommend.recColumns.status"),key:"status",width:"100px"},{title:e("recommend.recColumns.feedback"),key:"feedback",width:"90px"},{title:e("recommend.recColumns.action"),key:"action",width:"210px"}]),Ie=X(()=>[{title:e("recommend.profileColumns.userId"),key:"userId"},{title:e("recommend.profileColumns.topicCount"),key:"topicCount",width:"110px"},{title:e("recommend.profileColumns.decayFactor"),key:"decayFactor",width:"110px"},{title:e("recommend.profileColumns.updateCount"),key:"updateCount",width:"110px"},{title:e("recommend.profileColumns.lastUpdated"),key:"lastUpdated",width:"180px"},{title:e("recommend.profileColumns.action"),key:"action",width:"200px"}]),ze=X(()=>{let o=ee.value;return L.value&&(o=o.filter(l=>l.status===L.value)),M.value&&(o=o.filter(l=>l.contentType===M.value)),o});function le(o){const l=`recommend.type.${o}`,u=e(l);return u===l?o:u}function ie(o){return{note:"blue",post:"green",article:"purple",document:"orange"}[o]||"default"}function Ae(o){return{note:"#1677ff",post:"#52c41a",article:"#722ed1",document:"#fa8c16"}[o]||"#888"}function ce(o){const l=`recommend.status.${o}`,u=e(l);return u===l?o:u}function Fe(o){return{pending:"processing",viewed:"green",dismissed:"default"}[o]||"default"}function Oe(o){const l=`recommend.feedbackLabel.${o}`,u=e(l);return u===l?o:u}function Te(o){return{like:"green",dislike:"red",later:"gold"}[o]||"default"}function de(o){return o>=.7?"#52c41a":o>=.4?"#1677ff":o>=.2?"#faad14":"#ff4d4f"}function ue(o){return o>=.7?"#52c41a":o>=.4?"#1677ff":o>=.2?"#faad14":"#888"}function Re(o){try{return JSON.stringify(o,null,2)}catch{return String(o)}}async function D(){I.value=!0;try{const{output:o}=await i.execute("recommend profiles --json",1e4).catch(()=>({output:""}));E.value=yt(o),k.value&&!E.value.find(l=>l.userId===k.value)&&(k.value=null),k.value&&await R()}catch(o){y.error(e("recommend.messages.loadProfilesFailed",{err:o?.message||o}))}finally{I.value=!1}}async function R(){if(!k.value){ee.value=[],F.value={total:0,pending:0,viewed:0,dismissed:0,feedbackCount:0,feedbackRate:0,avgScore:0},Y.value=[];return}N.value=!0;try{const o=B(k.value),[l,u,O]=await Promise.all([i.execute(`recommend list ${o} --limit 200 --json`,1e4).catch(()=>({output:""})),i.execute(`recommend stats ${o} --json`,8e3).catch(()=>({output:""})),i.execute(`recommend top-interests ${o} --limit 30 --json`,8e3).catch(()=>({output:""}))]);ee.value=_t(l.output),F.value=kt(u.output),Y.value=bt(O.output)}catch(o){y.error(e("recommend.messages.loadUserFailed",{err:o?.message||o}))}finally{N.value=!1}}function B(o){return`"${String(o).replace(/"/g,'\\"')}"`}function Ue(){U.value=[],R()}function $e(o){k.value=o,G.value="recs",R()}async function je(){if(!b.userId.trim()){y.warning(e("recommend.messages.userIdRequired"));return}if(b.topicsJson.trim())try{JSON.parse(b.topicsJson)}catch{y.warning(e("recommend.messages.topicsJsonInvalid"));return}if(b.weightsJson.trim())try{JSON.parse(b.weightsJson)}catch{y.warning(e("recommend.messages.weightsJsonInvalid"));return}Z.value=!0;try{const o=[`recommend create-profile ${B(b.userId.trim())}`];b.topicsJson.trim()&&o.push(`-t ${me(b.topicsJson.trim())}`),b.weightsJson.trim()&&o.push(`-w ${me(b.weightsJson.trim())}`),o.push("--json");const{output:l}=await i.execute(o.join(" "),1e4),u=J(l);if(!u.ok){y.error(e("recommend.messages.createFailed",{err:u.reason||l.slice(0,120)}));return}y.success(e("recommend.messages.createOk",{id:u.profileId?.slice(0,8)||""})),Q.value=!1;const O=b.userId.trim();pe(),await D(),k.value=O,await R()}catch(o){y.error(e("recommend.messages.createFailed",{err:o?.message||o}))}finally{Z.value=!1}}function me(o){return`'${String(o).replace(/'/g,"'\\''")}'`}async function Je(){if(k.value)try{const{output:o}=await i.execute(`recommend decay ${B(k.value)} --json`,8e3),l=J(o);if(!l.ok){y.error(e("recommend.messages.decayFailed",{err:l.reason||o.slice(0,120)}));return}y.success(l.topicCount!==null?e("recommend.messages.decayOkTopics",{count:l.topicCount}):e("recommend.messages.decayOk")),await D()}catch(o){y.error(e("recommend.messages.decayFailed",{err:o?.message||o}))}}async function Pe(){if(k.value)try{const{output:o}=await i.execute(`recommend suggest ${B(k.value)} --json`,8e3);U.value=xt(o),G.value="interests",U.value.length?y.success(e("recommend.messages.suggestFound",{count:U.value.length})):y.info(e("recommend.messages.suggestNone"))}catch(o){y.error(e("recommend.messages.loadSuggestFailed",{err:o?.message||o}))}}async function Ne(o){try{const{output:l}=await i.execute(`recommend delete-profile ${B(o.userId)} --json`,8e3),u=J(l);if(!u.ok){y.error(e("recommend.messages.deleteFailed",{err:u.reason||l.slice(0,120)}));return}y.success(e("recommend.messages.deleteOk")),k.value===o.userId&&(k.value=null),await D()}catch(l){y.error(e("recommend.messages.deleteFailed",{err:l?.message||l}))}}function Ee(o){w.value=o,te.value=!0}async function Le(o){try{const{output:l}=await i.execute(`recommend view ${o.id} --json`,8e3),u=J(l);if(!u.ok){y.error(e("recommend.messages.viewFailed",{err:u.reason||l.slice(0,120)}));return}y.success(e("recommend.messages.viewOk")),await R()}catch(l){y.error(e("recommend.messages.viewFailed",{err:l?.message||l}))}}async function Me(o,l){try{const{output:u}=await i.execute(`recommend feedback ${o.id} ${l} --json`,8e3),O=J(u);if(!O.ok){y.error(e("recommend.messages.feedbackFailed",{err:O.reason||u.slice(0,120)}));return}y.success(e("recommend.messages.feedbackOk")),await R()}catch(u){y.error(e("recommend.messages.feedbackFailed",{err:u?.message||u}))}}async function De(o){try{const{output:l}=await i.execute(`recommend dismiss ${o.id} --json`,8e3),u=J(l);if(!u.ok){y.error(e("recommend.messages.dismissFailed",{err:u.reason||l.slice(0,120)}));return}y.success(e("recommend.messages.dismissOk")),await R()}catch(l){y.error(e("recommend.messages.dismissFailed",{err:l?.message||l}))}}function pe(){b.userId="",b.topicsJson="",b.weightsJson=""}return dt(D),(o,l)=>{const u=f("a-button"),O=f("a-space"),Be=f("a-select"),z=f("a-card"),W=f("a-statistic"),T=f("a-col"),oe=f("a-row"),$=f("a-tag"),H=f("a-radio-button"),fe=f("a-radio-group"),V=f("a-empty"),ne=f("a-progress"),ae=f("a-menu-item"),We=f("a-menu"),Ve=f("a-dropdown"),ye=f("a-popconfirm"),ge=f("a-table"),se=f("a-tab-pane"),Ke=f("a-list-item"),qe=f("a-list"),Ye=f("a-tabs"),Ge=f("a-input"),re=f("a-form-item"),_e=f("a-textarea"),Qe=f("a-form"),ve=f("a-modal"),K=f("a-descriptions-item"),He=f("a-descriptions");return d(),g("div",null,[x("div",ht,[x("div",null,[x("h2",Ct,c(t(e)("recommend.title")),1),x("p",wt,c(t(e)("recommend.subtitle")),1)]),a(O,null,{default:n(()=>[a(u,{loading:I.value,onClick:D},{icon:n(()=>[a(t(nt))]),default:n(()=>[p(" "+c(t(e)("recommend.refresh")),1)]),_:1},8,["loading"]),a(u,{type:"primary",onClick:l[0]||(l[0]=r=>Q.value=!0)},{icon:n(()=>[a(t(at))]),default:n(()=>[p(" "+c(t(e)("recommend.createProfile")),1)]),_:1})]),_:1})]),a(z,{size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"},"body-style":{padding:"10px 16px"}},{default:n(()=>[x("div",St,[x("span",It,c(t(e)("recommend.userBar.currentUser")),1),a(Be,{value:k.value,"onUpdate:value":l[1]||(l[1]=r=>k.value=r),options:we.value,placeholder:t(e)("recommend.userBar.selectPlaceholder"),style:{"min-width":"280px"},"allow-clear":"","show-search":"",onChange:Ue},null,8,["value","options","placeholder"]),k.value?(d(),_(u,{key:0,size:"small",onClick:Je},{icon:n(()=>[a(t(st))]),default:n(()=>[p(" "+c(t(e)("recommend.userBar.applyDecay")),1)]),_:1})):v("",!0),k.value?(d(),_(u,{key:1,size:"small",onClick:Pe},{icon:n(()=>[a(t(rt))]),default:n(()=>[p(" "+c(t(e)("recommend.userBar.suggest")),1)]),_:1})):v("",!0)])]),_:1}),a(oe,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:n(()=>[a(T,{xs:12,sm:8,lg:5},{default:n(()=>[a(z,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[a(W,{title:t(e)("recommend.stats.profiles"),value:E.value.length,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:n(()=>[a(t(ke))]),_:1},8,["title","value"])]),_:1})]),_:1}),a(T,{xs:12,sm:8,lg:5},{default:n(()=>[a(z,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[a(W,{title:t(e)("recommend.stats.totalRecs"),value:F.value.total,"value-style":{color:"#722ed1",fontSize:"20px"}},{prefix:n(()=>[a(t(be))]),_:1},8,["title","value"])]),_:1})]),_:1}),a(T,{xs:12,sm:8,lg:5},{default:n(()=>[a(z,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[a(W,{title:t(e)("recommend.stats.pending"),value:F.value.pending,"value-style":{color:F.value.pending>0?"#faad14":"#888",fontSize:"20px"}},{prefix:n(()=>[a(t(lt))]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),a(T,{xs:12,sm:8,lg:5},{default:n(()=>[a(z,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[a(W,{title:t(e)("recommend.stats.feedbackRate"),value:F.value.feedbackRate*100,suffix:"%",precision:1,"value-style":{color:"#13c2c2",fontSize:"20px"}},{prefix:n(()=>[a(t(it))]),_:1},8,["title","value"])]),_:1})]),_:1}),a(T,{xs:24,sm:8,lg:4},{default:n(()=>[a(z,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[a(W,{title:t(e)("recommend.stats.avgScore"),value:F.value.avgScore,precision:3,"value-style":{color:de(F.value.avgScore),fontSize:"20px"}},{prefix:n(()=>[a(t(ct))]),_:1},8,["title","value","value-style"])]),_:1})]),_:1})]),_:1}),a(z,{title:t(e)("recommend.typeCatalogue"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"},"body-style":{padding:"12px 16px"}},{default:n(()=>[a(oe,{gutter:[12,12]},{default:n(()=>[(d(!0),g(A,null,q(t(xe),r=>(d(),_(T,{key:r,xs:12,sm:6},{default:n(()=>[x("div",{class:"type-pill",style:ut({borderLeftColor:Ae(r)})},[a($,{color:ie(r),style:{"font-family":"monospace"}},{default:n(()=>[p(c(r),1)]),_:2},1032,["color"]),x("div",zt,c(le(r)),1)],4)]),_:2},1024))),128))]),_:1})]),_:1},8,["title"]),a(Ye,{activeKey:G.value,"onUpdate:activeKey":l[4]||(l[4]=r=>G.value=r),class:"recommend-tabs"},{default:n(()=>[a(se,{key:"recs",tab:t(e)("recommend.tabs.recs")},{default:n(()=>[x("div",At,[a(fe,{value:L.value,"onUpdate:value":l[2]||(l[2]=r=>L.value=r),size:"small","button-style":"solid"},{default:n(()=>[a(H,{value:""},{default:n(()=>[p(c(t(e)("recommend.filter.allStatuses")),1)]),_:1}),(d(!0),g(A,null,q(t(pt),r=>(d(),_(H,{key:r,value:r},{default:n(()=>[p(c(ce(r)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),a(fe,{value:M.value,"onUpdate:value":l[3]||(l[3]=r=>M.value=r),size:"small"},{default:n(()=>[a(H,{value:""},{default:n(()=>[p(c(t(e)("recommend.filter.allTypes")),1)]),_:1}),(d(!0),g(A,null,q(t(xe),r=>(d(),_(H,{key:r,value:r},{default:n(()=>[p(c(le(r)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),k.value?(d(),_(ge,{key:1,columns:Se.value,"data-source":ze.value,pagination:{pageSize:20,showTotal:r=>t(e)("recommend.totals.rows",{count:r})},size:"small",loading:N.value,style:{background:"var(--bg-card)"}},{bodyCell:n(({column:r,record:m})=>[r.key==="title"?(d(),g(A,{key:0},[x("span",Ft,c(m.title||t(e)("recommend.noTitle")),1),x("div",Ot,c(m.contentId),1)],64)):v("",!0),r.key==="contentType"?(d(),_($,{key:1,color:ie(m.contentType),style:{"font-family":"monospace"}},{default:n(()=>[p(c(m.contentType),1)]),_:2},1032,["color"])):v("",!0),r.key==="score"?(d(),_(ne,{key:2,percent:Math.round(m.score*100),"stroke-color":de(m.score),size:"small",format:()=>m.score.toFixed(3)},null,8,["percent","stroke-color","format"])):v("",!0),r.key==="reason"?(d(),g("span",Tt,c(m.reason),1)):v("",!0),r.key==="status"?(d(),_($,{key:4,color:Fe(m.status)},{default:n(()=>[p(c(ce(m.status)),1)]),_:2},1032,["color"])):v("",!0),r.key==="feedback"?(d(),g(A,{key:5},[m.feedback?(d(),_($,{key:0,color:Te(m.feedback)},{default:n(()=>[p(c(Oe(m.feedback)),1)]),_:2},1032,["color"])):(d(),g("span",Rt,"—"))],64)):v("",!0),r.key==="action"?(d(),g(A,{key:6},[m.status==="pending"?(d(),_(u,{key:0,size:"small",type:"link",onClick:j=>Le(m)},{default:n(()=>[p(c(t(e)("recommend.rowActions.view")),1)]),_:1},8,["onClick"])):v("",!0),m.status!=="dismissed"?(d(),_(Ve,{key:1},{overlay:n(()=>[a(We,{onClick:({key:j})=>Me(m,j)},{default:n(()=>[a(ae,{key:"like",style:{color:"#52c41a"}},{default:n(()=>[p(c(t(e)("recommend.feedbackMenu.like")),1)]),_:1}),a(ae,{key:"dislike",style:{color:"#ff4d4f"}},{default:n(()=>[p(c(t(e)("recommend.feedbackMenu.dislike")),1)]),_:1}),a(ae,{key:"later"},{default:n(()=>[p(c(t(e)("recommend.feedbackMenu.later")),1)]),_:1})]),_:1},8,["onClick"])]),default:n(()=>[a(u,{size:"small",type:"link"},{default:n(()=>[p(c(t(e)("recommend.feedbackDropdown")),1)]),_:1})]),_:2},1024)):v("",!0),m.status!=="dismissed"?(d(),_(ye,{key:2,title:t(e)("recommend.rowActions.dismissConfirmTitle"),"ok-text":t(e)("recommend.rowActions.dismissOk"),"cancel-text":t(e)("common.cancel"),onConfirm:j=>De(m)},{default:n(()=>[a(u,{size:"small",type:"link",danger:""},{default:n(()=>[p(c(t(e)("recommend.rowActions.dismiss")),1)]),_:1})]),_:1},8,["title","ok-text","cancel-text","onConfirm"])):v("",!0)],64)):v("",!0)]),emptyText:n(()=>[x("div",Ut,[a(t(be),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),p(" "+c(L.value||M.value?t(e)("recommend.empty.filtered"):t(e)("recommend.empty.noRecsHint")),1)])]),_:1},8,["columns","data-source","pagination","loading"])):(d(),_(V,{key:0,description:t(e)("recommend.empty.selectUser"),image:t(h),style:{padding:"40px 0"}},null,8,["description","image"]))]),_:1},8,["tab"]),a(se,{key:"profiles",tab:t(e)("recommend.tabs.profiles")},{default:n(()=>[a(ge,{columns:Ie.value,"data-source":E.value,pagination:{pageSize:20,showTotal:r=>t(e)("recommend.totals.profiles",{count:r})},size:"small",loading:I.value,style:{background:"var(--bg-card)"}},{bodyCell:n(({column:r,record:m})=>[r.key==="userId"?(d(),g("span",$t,c(m.userId),1)):v("",!0),r.key==="topicCount"?(d(),_($,{key:1,color:"blue"},{default:n(()=>[p(c(t(e)("recommend.topicTagSuffix",{count:m.topicCount})),1)]),_:2},1024)):v("",!0),r.key==="decayFactor"?(d(),g("span",jt,c(m.decayFactor.toFixed(2)),1)):v("",!0),r.key==="updateCount"?(d(),g("span",Jt,c(m.updateCount),1)):v("",!0),r.key==="lastUpdated"?(d(),g("span",Pt,c(t(Ce)(m.lastUpdated)),1)):v("",!0),r.key==="action"?(d(),g(A,{key:5},[a(u,{size:"small",type:"link",onClick:j=>Ee(m)},{default:n(()=>[p(c(t(e)("recommend.rowActions.details")),1)]),_:1},8,["onClick"]),a(u,{size:"small",type:"link",onClick:j=>$e(m.userId)},{default:n(()=>[p(c(t(e)("recommend.rowActions.switch")),1)]),_:1},8,["onClick"]),a(ye,{title:t(e)("recommend.rowActions.deleteConfirmTitle"),"ok-text":t(e)("recommend.rowActions.deleteOk"),"cancel-text":t(e)("common.cancel"),onConfirm:j=>Ne(m)},{default:n(()=>[a(u,{size:"small",type:"link",danger:""},{default:n(()=>[p(c(t(e)("recommend.rowActions.delete")),1)]),_:1})]),_:1},8,["title","ok-text","cancel-text","onConfirm"])],64)):v("",!0)]),emptyText:n(()=>[x("div",Nt,[a(t(ke),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),p(" "+c(t(e)("recommend.empty.noProfiles")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),a(se,{key:"interests",tab:t(e)("recommend.tabs.interests")},{default:n(()=>[k.value?(d(),_(oe,{key:1,gutter:[16,16]},{default:n(()=>[a(T,{xs:24,lg:14},{default:n(()=>[a(z,{title:t(e)("recommend.interest.topicWeights"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[Y.value.length?(d(),g("div",Et,[(d(!0),g(A,null,q(Y.value,r=>(d(),g("div",{key:r.key,class:"interest-row"},[x("span",Lt,c(r.topic),1),a(ne,{percent:Math.round(r.weight*100),"stroke-color":ue(r.weight),format:()=>r.weight.toFixed(3),size:"small",style:{flex:"1","margin-left":"12px"}},null,8,["percent","stroke-color","format"])]))),128))])):(d(),_(V,{key:0,description:t(e)("recommend.empty.noInterests"),image:t(h)},null,8,["description","image"]))]),_:1},8,["title"])]),_:1}),a(T,{xs:24,lg:10},{default:n(()=>[a(z,{title:t(e)("recommend.interest.feedbackSuggest"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[U.value.length?(d(),_(qe,{key:1,size:"small","data-source":U.value},{renderItem:n(({item:r})=>[a(Ke,null,{default:n(()=>[a($,{color:r.action==="boost"?"green":"orange"},{default:n(()=>[p(c(r.action==="boost"?t(e)("recommend.interest.boost"):t(e)("recommend.interest.lower")),1)]),_:2},1032,["color"]),x("span",Mt,c(r.topic),1),x("span",Dt,"±"+c(r.amount),1)]),_:2},1024)]),_:1},8,["data-source"])):(d(),_(V,{key:0,description:t(e)("recommend.empty.noSuggestions"),image:t(h)},null,8,["description","image"]))]),_:1},8,["title"])]),_:1})]),_:1})):(d(),_(V,{key:0,description:t(e)("recommend.empty.selectUser"),image:t(h),style:{padding:"40px 0"}},null,8,["description","image"]))]),_:1},8,["tab"])]),_:1},8,["activeKey"]),a(ve,{open:Q.value,"onUpdate:open":l[8]||(l[8]=r=>Q.value=r),title:t(e)("recommend.create.title"),"confirm-loading":Z.value,width:560,"ok-text":t(e)("recommend.create.ok"),"cancel-text":t(e)("common.cancel"),onOk:je,onCancel:pe},{default:n(()=>[a(Qe,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:n(()=>[a(re,{label:t(e)("recommend.create.userIdLabel"),required:""},{default:n(()=>[a(Ge,{value:b.userId,"onUpdate:value":l[5]||(l[5]=r=>b.userId=r),placeholder:t(e)("recommend.create.userIdPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),a(re,{label:t(e)("recommend.create.topicsLabel")},{default:n(()=>[a(_e,{value:b.topicsJson,"onUpdate:value":l[6]||(l[6]=r=>b.topicsJson=r),placeholder:t(e)("recommend.create.topicsPlaceholder"),"auto-size":{minRows:2,maxRows:5}},null,8,["value","placeholder"])]),_:1},8,["label"]),a(re,{label:t(e)("recommend.create.weightsLabel")},{default:n(()=>[a(_e,{value:b.weightsJson,"onUpdate:value":l[7]||(l[7]=r=>b.weightsJson=r),placeholder:t(e)("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"]),a(ve,{open:te.value,"onUpdate:open":l[9]||(l[9]=r=>te.value=r),title:t(e)("recommend.details.title",{userId:w.value?.userId||""}),width:680,footer:null},{default:n(()=>[w.value?(d(),g("div",Bt,[a(He,{column:2,size:"small",bordered:""},{default:n(()=>[a(K,{label:t(e)("recommend.details.id"),span:2},{default:n(()=>[x("span",Wt,c(w.value.id),1)]),_:1},8,["label"]),a(K,{label:t(e)("recommend.details.topicCount")},{default:n(()=>[p(c(w.value.topicCount),1)]),_:1},8,["label"]),a(K,{label:t(e)("recommend.details.decayFactor")},{default:n(()=>[p(c(w.value.decayFactor.toFixed(2)),1)]),_:1},8,["label"]),a(K,{label:t(e)("recommend.details.updateCount")},{default:n(()=>[p(c(w.value.updateCount),1)]),_:1},8,["label"]),a(K,{label:t(e)("recommend.details.lastUpdated")},{default:n(()=>[p(c(t(Ce)(w.value.lastUpdated)),1)]),_:1},8,["label"])]),_:1}),x("h4",Vt,c(t(e)("recommend.details.topicWeights")),1),Object.keys(w.value.topics).length?(d(),g("div",Kt,[(d(!0),g(A,null,q(w.value.topics,(r,m)=>(d(),g("div",{key:m,class:"interest-row"},[x("span",qt,c(m),1),a(ne,{percent:Math.round(r*100),"stroke-color":ue(r),format:()=>r.toFixed(3),size:"small",style:{flex:"1","margin-left":"12px"}},null,8,["percent","stroke-color","format"])]))),128))])):(d(),_(V,{key:0,description:t(e)("recommend.empty.noTopics"),image:t(h)},null,8,["description","image"])),Object.keys(w.value.interactionWeights).length?(d(),g("h4",Yt,c(t(e)("recommend.details.interactionWeights")),1)):v("",!0),Object.keys(w.value.interactionWeights).length?(d(),g("pre",Gt,c(Re(w.value.interactionWeights)),1)):v("",!0)])):v("",!0)]),_:1},8,["open","title"])])}}},to=Xe(Qt,[["__scopeId","data-v-16fcadc2"]]);export{to as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{_ as it,b as ut,u as ct,E as pt,d as k}from"./index-B_juAGfN.js";import{s as Ee}from"./community-parser-CO25nZFt.js";import{R as dt,al as Ce,i as mt,aj as De,as as ft,$ as Re,L as yt,a8 as vt,ar as bt,aQ as _t}from"./icons-BFHq5fEF.js";import gt from"./index-D-niPBwZ.js";import{o as xt,M as m,R as _,P as u,u as n,c as t,N as o,Q as S,S as y,K as d,r as h,L as c,O as f,F as T,Y as L,Z as kt,_ as Fe,f as Ie,a as ye}from"./vendor-M5lGV-wr.js";import"./KeyCode-D63Tfrq7.js";import"./omit-DBh74Ui4.js";import"./pickAttrs-D6PQbWuo.js";import"./initDefaultProps-DE_gVS_i.js";import"./motion-BiRUGscQ.js";import"./raf-Deuc0E8-.js";import"./index-D1CV-6q1.js";import"./index-CobyvwP0.js";import"./isVisible-C7tPsqfj.js";import"./useState-CSzR8F8O.js";import"./devWarning-CNIS3FrJ.js";import"./warning-Pq00owYb.js";import"./compact-item-BjZyyKpa.js";import"./createContext-D0Ztn7R_.js";import"./Compact-DDeBOvFc.js";import"./_getTag-BVc6NQ_K.js";import"./styleChecker-DZZx_bHs.js";import"./zoom-C9FCvBpV.js";import"./ActionButton-QNqNYP_E.js";import"./vnode-CDF4X084.js";function B(s){const e=Ee(s);if(!e)return null;try{return JSON.parse(e)}catch{}const i=e.match(/\{[\s\S]*\}|\[[\s\S]*\]/);if(!i)return null;try{return JSON.parse(i[0])}catch{return null}}const be=Object.freeze(["accuracy","fairness","resilience","convergence_speed"]),Te=Object.freeze(["none","exponential","linear","step"]),ht=Object.freeze(["z_score","iqr"]),Le=Object.freeze(["running","complete","applied","failed","cancelled"]),St=Object.freeze(["generic","task","review","vote"]);function z(s,e=0){return typeof s=="number"&&Number.isFinite(s)?s:e}function P(s){if(!s)return{noDb:!1,error:""};const e=Ee(s),i=/Database not available/i.test(e);return{noDb:i,error:i?"Database not available":""}}function zt(s,e=0){if(!s||typeof s!="object")return null;const i=s.did||"";return i?{key:i,did:i,score:z(s.score,0),observations:z(s.observations,0),decay:String(s.decay||"none"),weightTotal:z(s.weightTotal,0),_idx:e}:null}function $e(s){const e=B(s);return Array.isArray(e)?e.map(zt).filter(Boolean):[]}function Me(s,e=0){if(!s||typeof s!="object")return null;const i=s.did||"";return i?{key:`${i}-${e}`,did:i,score:z(s.score,0),reason:String(s.reason||""),zScore:typeof s.zScore=="number"?s.zScore:null,lower:typeof s.lower=="number"?s.lower:null,upper:typeof s.upper=="number"?s.upper:null}:null}function Ot(s){const e=B(s);if(!e||typeof e!="object"||Array.isArray(e))return{method:"",threshold:0,totalSamples:0,anomalies:[],summary:"",message:""};const i=Array.isArray(e.anomalies)?e.anomalies.map(Me).filter(Boolean):[];return{method:String(e.method||""),threshold:z(e.threshold,0),totalSamples:z(e.totalSamples,0),anomalies:i,summary:e.summary?String(e.summary):"",message:e.message?String(e.message):""}}function Ne(s,e=0){if(!s||typeof s!="object")return null;const i=s.runId||"";return i?{key:i,runId:i,objective:String(s.objective||""),iterations:z(s.iterations,0),paramSpace:s.paramSpace??null,bestParams:s.bestParams??null,bestScore:z(s.bestScore,0),status:String(s.status||"complete").toLowerCase(),createdAt:s.createdAt??null,completedAt:s.completedAt??null,analytics:s.analytics??null,errorMessage:s.errorMessage??"",_idx:e}:null}function jt(s){const e=B(s);return Array.isArray(e)?e.map(Ne).filter(Boolean):[]}function wt(s){const e=B(s);return!e||typeof e!="object"||Array.isArray(e)?null:Ne(e,0)}function At(s){const e=B(s);if(!e||typeof e!="object"||Array.isArray(e))return null;const i=e.reputationDistribution||{};return{analyticsId:String(e.analyticsId||""),runId:String(e.runId||""),reputationDistribution:{buckets:Array.isArray(i.buckets)?i.buckets.filter(v=>v&&typeof v=="object").map(v=>({label:String(v.label||""),count:z(v.count,0),min:typeof v.min=="number"?v.min:null,max:typeof v.max=="number"?v.max:null})):[],mean:typeof i.mean=="number"?i.mean:null,stdDev:typeof i.stdDev=="number"?i.stdDev:null},anomalies:e.anomalies&&typeof e.anomalies=="object"?{method:String(e.anomalies.method||""),totalSamples:z(e.anomalies.totalSamples,0),anomalies:Array.isArray(e.anomalies.anomalies)?e.anomalies.anomalies.map(Me).filter(Boolean):[],summary:e.anomalies.summary?String(e.anomalies.summary):"",message:e.anomalies.message?String(e.anomalies.message):""}:{method:"",totalSamples:0,anomalies:[],summary:"",message:""},recommendations:Array.isArray(e.recommendations)?e.recommendations.filter(v=>typeof v=="string"):[]}}const Ct={totalRuns:0,activeRuns:0,maxConcurrentOptimizations:0,byStatus:{},byObjective:{},observations:{totalObservations:0,totalDids:0},bestScoreEver:0};function Dt(s){const e=JSON.parse(JSON.stringify(Ct));for(const v of Le)e.byStatus[v]=0;for(const v of be)e.byObjective[v]=0;const i=B(s);if(!i||typeof i!="object"||Array.isArray(i))return e;if(e.totalRuns=z(i.totalRuns,0),e.activeRuns=z(i.activeRuns,0),e.maxConcurrentOptimizations=z(i.maxConcurrentOptimizations,0),e.bestScoreEver=z(i.bestScoreEver,0),i.byStatus&&typeof i.byStatus=="object")for(const[v,j]of Object.entries(i.byStatus))typeof j=="number"&&Number.isFinite(j)&&(e.byStatus[v]=j);if(i.byObjective&&typeof i.byObjective=="object")for(const[v,j]of Object.entries(i.byObjective))typeof j=="number"&&Number.isFinite(j)&&(e.byObjective[v]=j);return i.observations&&typeof i.observations=="object"&&(e.observations.totalObservations=z(i.observations.totalObservations,0),e.observations.totalDids=z(i.observations.totalDids,0)),e}function ve(s){if(s==null||s==="")return"—";const e=typeof s=="number"?new Date(s):new Date(String(s));return isNaN(e.getTime())?String(s):e.toLocaleString("zh-CN",{hour12:!1})}const Rt={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},Ft={class:"page-title"},It={class:"page-sub"},Tt={class:"filter-bar"},$t={style:{color:"var(--text-secondary)","font-size":"12px"}},Et={key:1,style:{color:"var(--text-primary)","font-family":"monospace","font-size":"12px"}},Lt={key:3,style:{color:"var(--text-secondary)"}},Mt={key:4,style:{color:"var(--text-secondary)","font-family":"monospace","font-size":"12px"}},Nt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},Ut={key:0,style:{color:"var(--text-primary)","font-family":"monospace","font-size":"12px"}},Pt={key:2,style:{color:"var(--text-secondary)"}},Bt={key:5,style:{color:"var(--text-secondary)","font-size":"11px"}},Jt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},Vt={style:{"margin-left":"8px",color:"var(--text-muted)","font-size":"12px"}},qt={style:{color:"var(--text-muted)","font-size":"11px","margin-top":"4px"}},Kt={style:{"margin-left":"8px",color:"var(--text-muted)","font-size":"12px"}},Wt={style:{"padding-top":"8px"}},Yt={style:{"margin-left":"8px",color:"var(--text-muted)","font-size":"12px"}},Gt={key:1},Ht={style:{"font-family":"monospace","font-size":"12px",color:"var(--text-primary)"}},Qt={style:{"margin-left":"8px",color:"var(--text-secondary)","font-size":"12px"}},Zt={key:0,style:{"margin-left":"8px",color:"var(--text-muted)","font-size":"11px"}},Xt={key:0,style:{"padding-top":"8px"}},ea={class:"params-pre"},ta={style:{color:"#ff4d4f"}},aa={key:0,style:{"margin-top":"16px"}},oa={style:{color:"var(--text-primary)","font-size":"13px",margin:"0 0 10px"}},na={class:"bucket-label"},ra={key:0,style:{"margin-top":"8px",color:"var(--text-secondary)","font-size":"12px"}},la={key:0,style:{"margin-left":"12px"}},sa={__name:"Reputation",setup(s){const{t:e}=ut(),i=ct(),v=pt.PRESENTED_IMAGE_SIMPLE,j=h(!1),ee=h(!1),te=h(!1),ae=h(!1),oe=h(!1),ne=h([]),_e=h([]),O=h({totalRuns:0,activeRuns:0,maxConcurrentOptimizations:0,byStatus:{},byObjective:{},observations:{totalObservations:0,totalDids:0},bestScoreEver:0}),V=h({noDb:!1,error:""}),ge=h("scores"),q=h("none"),K=h(!1),W=h(!1),re=h(!1),Y=h(!1),g=ye({did:"",score:.8,kind:"generic",weight:1}),M=ye({objective:"accuracy",iterations:50}),F=ye({method:"z_score",threshold:2.5,decay:"none"}),b=h(null),w=h(null),A=h(null),Ue=Ie(()=>[{title:e("reputation.scoreColumns.rank"),key:"rank",width:"60px"},{title:e("reputation.scoreColumns.did"),key:"did"},{title:e("reputation.scoreColumns.score"),key:"score",width:"220px"},{title:e("reputation.scoreColumns.observations"),key:"observations",width:"100px"},{title:e("reputation.scoreColumns.weightTotal"),key:"weightTotal",width:"100px"}]),Pe=Ie(()=>[{title:e("reputation.runColumns.runId"),key:"runId",width:"140px"},{title:e("reputation.runColumns.objective"),key:"objective",width:"140px"},{title:e("reputation.runColumns.iterations"),key:"iterations",width:"80px"},{title:e("reputation.runColumns.bestScore"),key:"bestScore",width:"110px"},{title:e("reputation.runColumns.status"),key:"status",width:"100px"},{title:e("reputation.runColumns.createdAt"),key:"createdAt",width:"160px"},{title:e("reputation.runColumns.action"),key:"action",width:"160px"}]);function xe(l){const r=`reputation.decay.${l}`,p=e(r);return p===r?l:p}function Be(l){const r=`reputation.kind.${l}`,p=e(r);return p===r?l:p}function G(l){const r=`reputation.objective.${l}`,p=e(r);return p===r?l:p}function le(l){return{accuracy:"blue",fairness:"green",resilience:"purple",convergence_speed:"orange"}[l]||"default"}function Je(l){return{accuracy:"#1677ff",fairness:"#52c41a",resilience:"#722ed1",convergence_speed:"#fa8c16"}[l]||"#888"}function Ve(l){const r=`reputation.objectiveDesc.${l}`,p=e(r);return p===r?"":p}function se(l){const r=`reputation.status.${l}`,p=e(r);return p===r?l:p}function ie(l){return{running:"processing",complete:"blue",applied:"green",failed:"red",cancelled:"default"}[l]||"default"}function qe(l){return{running:"#1677ff",complete:"#13c2c2",applied:"#52c41a",failed:"#ff4d4f",cancelled:"#888"}[l]||"#888"}function Ke(l){return l===0?"gold":l===1?"silver":l===2?"bronze":""}function ue(l){return l>=.8?"#52c41a":l>=.5?"#1677ff":l>=.3?"#faad14":"#ff4d4f"}function ke(l,r){return r?Math.round(l/r*100):0}function We(l){const r=w.value?.reputationDistribution.buckets.reduce((p,C)=>p+C.count,0)||0;return r?Math.round(l.count/r*100):0}function Ye(l){if(typeof l=="string")return l;try{return JSON.stringify(l,null,2)}catch{return String(l)}}async function J(){j.value=!0,V.value={noDb:!1,error:""};try{const[l,r,p]=await Promise.all([i.execute(`reputation list --decay ${q.value} --json`,1e4).catch(()=>({output:""})),i.execute("reputation runs --limit 50 --json",1e4).catch(()=>({output:""})),i.execute("reputation stats-v2 --json",8e3).catch(()=>({output:""}))]),C=[l,r,p].map(N=>P(N.output)).find(N=>N.noDb);C&&(V.value=C),ne.value=$e(l.output),_e.value=jt(r.output),O.value=Dt(p.output)}catch(l){k.error(e("reputation.messages.loadFailed",{err:l?.message||l}))}finally{j.value=!1}}async function Ge(){try{const{output:l}=await i.execute(`reputation list --decay ${q.value} --json`,1e4),r=P(l);if(r.noDb){V.value=r;return}ne.value=$e(l)}catch(l){k.error(e("reputation.messages.loadScoresFailed",{err:l?.message||l}))}}async function He(){if(!g.did.trim()){k.warning(e("reputation.messages.didRequired"));return}if(g.score<0||g.score>1){k.warning(e("reputation.messages.scoreRange"));return}ee.value=!0;try{const l=[`reputation observe "${g.did.trim().replace(/"/g,'\\"')}"`,String(g.score),`-k ${g.kind}`,`-w ${g.weight}`,"--json"],{output:r}=await i.execute(l.join(" "),1e4);if(P(r).noDb){k.error(e("reputation.messages.needInit"));return}if(!/"did"/.test(r)){k.error(e("reputation.messages.observeFailed",{err:r.slice(0,120)}));return}k.success(e("reputation.messages.observeOk")),K.value=!1,Se(),await J()}catch(l){k.error(e("reputation.messages.observeFailed",{err:l?.message||l}))}finally{ee.value=!1}}async function Qe(){te.value=!0;try{const l=["reputation optimize",`-o ${M.objective}`,`-i ${M.iterations}`,"--json"],{output:r}=await i.execute(l.join(" "),6e4);if(P(r).noDb){k.error(e("reputation.messages.needInit"));return}const C=wt(r);if(!C){k.error(e("reputation.messages.optimizeFailed",{err:r.slice(0,120)}));return}W.value=!1,k.success(e("reputation.messages.optimizeOk",{score:C.bestScore.toFixed(4)})),await J(),b.value=C,Y.value=!0,await he()}catch(l){k.error(e("reputation.messages.optimizeFailed",{err:l?.message||l}))}finally{te.value=!1}}async function Ze(l){gt.confirm({title:e("reputation.applyConfirm.title"),content:e("reputation.applyConfirm.content",{runId:l.runId.slice(0,12)}),okText:e("reputation.applyConfirm.ok"),cancelText:e("reputation.applyConfirm.cancel"),onOk:async()=>{try{const{output:r}=await i.execute(`reputation apply ${l.runId}`,8e3);if(P(r).noDb){k.error(e("reputation.messages.needInit"));return}if(/Failed|Error/i.test(r)&&!/Applied/i.test(r)){k.error(e("reputation.messages.applyFailed",{err:r.slice(0,120)}));return}k.success(e("reputation.messages.applyOk")),await J()}catch(r){k.error(e("reputation.messages.applyFailed",{err:r?.message||r}))}}})}async function Xe(l){b.value=l,w.value=null,Y.value=!0,await he()}async function he(){if(b.value){oe.value=!0;try{const{output:l}=await i.execute(`reputation analytics ${b.value.runId} --json`,8e3);if(P(l).noDb)return;w.value=At(l)}catch{}finally{oe.value=!1}}}function et(){A.value=null,re.value=!0}async function tt(){ae.value=!0;try{const l=["reputation anomalies",`-m ${F.method}`,`-t ${F.threshold}`,`-d ${F.decay}`,"--json"],{output:r}=await i.execute(l.join(" "),1e4);if(P(r).noDb){k.error(e("reputation.messages.needInit"));return}A.value=Ot(r)}catch(l){k.error(e("reputation.messages.detectFailed",{err:l?.message||l}))}finally{ae.value=!1}}function Se(){g.did="",g.score=.8,g.kind="generic",g.weight=1}return xt(J),(l,r)=>{const p=d("a-button"),C=d("a-space"),N=d("a-alert"),$=d("a-statistic"),I=d("a-card"),D=d("a-col"),ce=d("a-row"),ze=d("a-radio-button"),Oe=d("a-radio-group"),H=d("a-progress"),je=d("a-table"),pe=d("a-tab-pane"),U=d("a-tag"),at=d("a-tabs"),ot=d("a-input"),R=d("a-form-item"),Q=d("a-input-number"),de=d("a-select-option"),me=d("a-select"),fe=d("a-form"),Z=d("a-modal"),nt=d("a-divider"),rt=d("a-empty"),we=d("a-list-item"),Ae=d("a-list"),E=d("a-descriptions-item"),lt=d("a-descriptions"),st=d("a-spin");return c(),m("div",null,[_("div",Rt,[_("div",null,[_("h2",Ft,u(n(e)("reputation.title")),1),_("p",It,u(n(e)("reputation.subtitle")),1)]),t(C,null,{default:o(()=>[t(p,{loading:j.value,onClick:J},{icon:o(()=>[t(n(dt))]),default:o(()=>[f(" "+u(n(e)("reputation.refresh")),1)]),_:1},8,["loading"]),t(p,{onClick:et},{icon:o(()=>[t(n(Ce))]),default:o(()=>[f(" "+u(n(e)("reputation.actions.anomalies")),1)]),_:1}),t(p,{type:"primary",onClick:r[0]||(r[0]=a=>W.value=!0)},{icon:o(()=>[t(n(mt))]),default:o(()=>[f(" "+u(n(e)("reputation.actions.optimize")),1)]),_:1})]),_:1})]),V.value.noDb?(c(),S(N,{key:0,type:"info","show-icon":"",message:n(e)("reputation.noDb.message"),description:n(e)("reputation.noDb.description"),style:{"margin-bottom":"16px"}},null,8,["message","description"])):y("",!0),t(ce,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:o(()=>[t(D,{xs:12,sm:8,lg:5},{default:o(()=>[t(I,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[t($,{title:n(e)("reputation.stats.trackedDids"),value:O.value.observations.totalDids,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:o(()=>[t(n(De))]),_:1},8,["title","value"])]),_:1})]),_:1}),t(D,{xs:12,sm:8,lg:5},{default:o(()=>[t(I,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[t($,{title:n(e)("reputation.stats.totalObservations"),value:O.value.observations.totalObservations,"value-style":{color:"#722ed1",fontSize:"20px"}},{prefix:o(()=>[t(n(ft))]),_:1},8,["title","value"])]),_:1})]),_:1}),t(D,{xs:12,sm:8,lg:5},{default:o(()=>[t(I,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[t($,{title:n(e)("reputation.stats.optimizationRuns"),value:O.value.totalRuns,"value-style":{color:"#13c2c2",fontSize:"20px"}},{prefix:o(()=>[t(n(Re))]),_:1},8,["title","value"])]),_:1})]),_:1}),t(D,{xs:12,sm:8,lg:5},{default:o(()=>[t(I,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[t($,{title:n(e)("reputation.stats.active"),value:O.value.activeRuns,"value-style":{color:O.value.activeRuns>0?"#1677ff":"#888",fontSize:"20px"},suffix:`/ ${O.value.maxConcurrentOptimizations}`},{prefix:o(()=>[t(n(yt))]),_:1},8,["title","value","value-style","suffix"])]),_:1})]),_:1}),t(D,{xs:24,sm:8,lg:4},{default:o(()=>[t(I,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[t($,{title:n(e)("reputation.stats.bestEver"),value:O.value.bestScoreEver,precision:3,"value-style":{color:"#52c41a",fontSize:"20px"}},{prefix:o(()=>[t(n(vt))]),_:1},8,["title","value"])]),_:1})]),_:1})]),_:1}),t(at,{activeKey:ge.value,"onUpdate:activeKey":r[3]||(r[3]=a=>ge.value=a),class:"reputation-tabs"},{default:o(()=>[t(pe,{key:"scores",tab:n(e)("reputation.tabs.scores")},{default:o(()=>[_("div",Tt,[_("span",$t,u(n(e)("reputation.filter.decayLabel")),1),t(Oe,{value:q.value,"onUpdate:value":r[1]||(r[1]=a=>q.value=a),size:"small","button-style":"solid",onChange:Ge},{default:o(()=>[(c(!0),m(T,null,L(n(Te),a=>(c(),S(ze,{key:a,value:a},{default:o(()=>[f(u(xe(a)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),t(p,{size:"small",onClick:r[2]||(r[2]=a=>K.value=!0)},{icon:o(()=>[t(n(bt))]),default:o(()=>[f(" "+u(n(e)("reputation.filter.addObservation")),1)]),_:1})]),t(je,{columns:Ue.value,"data-source":ne.value,pagination:{pageSize:20,showTotal:a=>n(e)("reputation.totals.dids",{count:a})},size:"small",loading:j.value,style:{background:"var(--bg-card)"}},{bodyCell:o(({column:a,record:x,index:X})=>[a.key==="rank"?(c(),m("span",{key:0,class:kt(["rank-pill",Ke(X)])},u(X+1),3)):y("",!0),a.key==="did"?(c(),m("span",Et,u(x.did),1)):y("",!0),a.key==="score"?(c(),S(H,{key:2,percent:Math.round(x.score*100),"stroke-color":ue(x.score),size:"small",format:()=>x.score.toFixed(4)},null,8,["percent","stroke-color","format"])):y("",!0),a.key==="observations"?(c(),m("span",Lt,u(x.observations),1)):y("",!0),a.key==="weightTotal"?(c(),m("span",Mt,u(x.weightTotal.toFixed(2)),1)):y("",!0)]),emptyText:o(()=>[_("div",Nt,[t(n(De),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),f(" "+u(n(e)("reputation.empty.scores")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),t(pe,{key:"runs",tab:n(e)("reputation.tabs.runs")},{default:o(()=>[t(je,{columns:Pe.value,"data-source":_e.value,pagination:{pageSize:20,showTotal:a=>n(e)("reputation.totals.rows",{count:a})},size:"small",loading:j.value,style:{background:"var(--bg-card)"}},{bodyCell:o(({column:a,record:x})=>[a.key==="runId"?(c(),m("span",Ut,u(x.runId.slice(0,12)),1)):y("",!0),a.key==="objective"?(c(),S(U,{key:1,color:le(x.objective),style:{"font-family":"monospace"}},{default:o(()=>[f(u(G(x.objective)),1)]),_:2},1032,["color"])):y("",!0),a.key==="iterations"?(c(),m("span",Pt,u(x.iterations),1)):y("",!0),a.key==="bestScore"?(c(),m("span",{key:3,style:Fe({color:ue(x.bestScore),fontWeight:500,fontFamily:"monospace"})},u(x.bestScore.toFixed(4)),5)):y("",!0),a.key==="status"?(c(),S(U,{key:4,color:ie(x.status)},{default:o(()=>[f(u(se(x.status)),1)]),_:2},1032,["color"])):y("",!0),a.key==="createdAt"?(c(),m("span",Bt,u(n(ve)(x.createdAt)),1)):y("",!0),a.key==="action"?(c(),m(T,{key:6},[t(p,{size:"small",type:"link",onClick:X=>Xe(x)},{default:o(()=>[f(u(n(e)("reputation.rowActions.analyze")),1)]),_:1},8,["onClick"]),x.status==="complete"?(c(),S(p,{key:0,size:"small",type:"link",style:{color:"#52c41a"},onClick:X=>Ze(x)},{default:o(()=>[f(u(n(e)("reputation.rowActions.apply")),1)]),_:1},8,["onClick"])):y("",!0)],64)):y("",!0)]),emptyText:o(()=>[_("div",Jt,[t(n(Re),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),f(" "+u(n(e)("reputation.empty.runs")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),t(pe,{key:"breakdown",tab:n(e)("reputation.tabs.breakdown")},{default:o(()=>[t(ce,{gutter:[16,16]},{default:o(()=>[t(D,{xs:24,lg:12},{default:o(()=>[t(I,{title:n(e)("reputation.breakdown.byStatus"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[(c(!0),m(T,null,L(n(Le),a=>(c(),m("div",{key:a,class:"bd-row"},[t(U,{color:ie(a),style:{"min-width":"80px","text-align":"center"}},{default:o(()=>[f(u(se(a)),1)]),_:2},1032,["color"]),t(H,{percent:ke(O.value.byStatus[a]||0,O.value.totalRuns),"stroke-color":qe(a),format:()=>`${O.value.byStatus[a]||0}`,size:"small",style:{flex:"1","margin-left":"12px"}},null,8,["percent","stroke-color","format"])]))),128))]),_:1},8,["title"])]),_:1}),t(D,{xs:24,lg:12},{default:o(()=>[t(I,{title:n(e)("reputation.breakdown.byObjective"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[(c(!0),m(T,null,L(n(be),a=>(c(),m("div",{key:a,class:"bd-row"},[t(U,{color:le(a),style:{"min-width":"100px","text-align":"center","font-family":"monospace"}},{default:o(()=>[f(u(G(a)),1)]),_:2},1032,["color"]),t(H,{percent:ke(O.value.byObjective[a]||0,O.value.totalRuns),"stroke-color":Je(a),format:()=>`${O.value.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"]),t(Z,{open:K.value,"onUpdate:open":r[8]||(r[8]=a=>K.value=a),title:n(e)("reputation.observe.title"),"confirm-loading":ee.value,width:540,"ok-text":n(e)("reputation.observe.ok"),"cancel-text":n(e)("common.cancel"),onOk:He,onCancel:Se},{default:o(()=>[t(fe,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:o(()=>[t(R,{label:n(e)("reputation.observe.didLabel"),required:""},{default:o(()=>[t(ot,{value:g.did,"onUpdate:value":r[4]||(r[4]=a=>g.did=a),placeholder:n(e)("reputation.observe.didPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),t(R,{label:n(e)("reputation.observe.scoreLabel"),required:""},{default:o(()=>[t(Q,{value:g.score,"onUpdate:value":r[5]||(r[5]=a=>g.score=a),min:0,max:1,step:.05,style:{width:"160px"}},null,8,["value"]),_("span",Vt,u(n(e)("reputation.observe.scoreRange")),1)]),_:1},8,["label"]),t(R,{label:n(e)("reputation.observe.kindLabel")},{default:o(()=>[t(me,{value:g.kind,"onUpdate:value":r[6]||(r[6]=a=>g.kind=a)},{default:o(()=>[(c(!0),m(T,null,L(n(St),a=>(c(),S(de,{key:a,value:a},{default:o(()=>[f(u(Be(a)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"]),t(R,{label:n(e)("reputation.observe.weightLabel")},{default:o(()=>[t(Q,{value:g.weight,"onUpdate:value":r[7]||(r[7]=a=>g.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"]),t(Z,{open:W.value,"onUpdate:open":r[11]||(r[11]=a=>W.value=a),title:n(e)("reputation.optimize.title"),"confirm-loading":te.value,width:540,"ok-text":n(e)("reputation.optimize.ok"),"cancel-text":n(e)("common.cancel"),onOk:Qe},{default:o(()=>[t(fe,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:o(()=>[t(R,{label:n(e)("reputation.optimize.objectiveLabel"),required:""},{default:o(()=>[t(me,{value:M.objective,"onUpdate:value":r[9]||(r[9]=a=>M.objective=a)},{default:o(()=>[(c(!0),m(T,null,L(n(be),a=>(c(),S(de,{key:a,value:a},{default:o(()=>[f(u(G(a)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),_("div",qt,u(Ve(M.objective)),1)]),_:1},8,["label"]),t(R,{label:n(e)("reputation.optimize.iterationsLabel")},{default:o(()=>[t(Q,{value:M.iterations,"onUpdate:value":r[10]||(r[10]=a=>M.iterations=a),min:1,max:1e3,step:10,style:{width:"160px"}},null,8,["value"]),_("span",Kt,u(n(e)("reputation.optimize.iterationsRange")),1)]),_:1},8,["label"])]),_:1}),t(N,{type:"info","show-icon":"",message:n(e)("reputation.optimize.syncMessage"),description:n(e)("reputation.optimize.syncDescription"),style:{"margin-top":"12px"}},null,8,["message","description"])]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),t(Z,{open:re.value,"onUpdate:open":r[15]||(r[15]=a=>re.value=a),title:n(e)("reputation.anomaly.title"),width:640,footer:null},{default:o(()=>[_("div",Wt,[t(fe,{"label-col":{span:5},"wrapper-col":{span:19}},{default:o(()=>[t(R,{label:n(e)("reputation.anomaly.methodLabel")},{default:o(()=>[t(Oe,{value:F.method,"onUpdate:value":r[12]||(r[12]=a=>F.method=a),"button-style":"solid"},{default:o(()=>[(c(!0),m(T,null,L(n(ht),a=>(c(),S(ze,{key:a,value:a},{default:o(()=>[f(u(a==="z_score"?n(e)("reputation.anomaly.zScoreLabel"):n(e)("reputation.anomaly.iqrLabel")),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"]),t(R,{label:n(e)("reputation.anomaly.thresholdLabel")},{default:o(()=>[t(Q,{value:F.threshold,"onUpdate:value":r[13]||(r[13]=a=>F.threshold=a),min:.5,step:.1,style:{width:"120px"}},null,8,["value"]),_("span",Yt,u(n(e)("reputation.anomaly.thresholdHint")),1)]),_:1},8,["label"]),t(R,{label:n(e)("reputation.anomaly.decayLabel")},{default:o(()=>[t(me,{value:F.decay,"onUpdate:value":r[14]||(r[14]=a=>F.decay=a),style:{width:"200px"}},{default:o(()=>[(c(!0),m(T,null,L(n(Te),a=>(c(),S(de,{key:a,value:a},{default:o(()=>[f(u(xe(a)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"]),t(R,{"wrapper-col":{offset:5,span:19}},{default:o(()=>[t(p,{type:"primary",loading:ae.value,onClick:tt},{icon:o(()=>[t(n(Ce))]),default:o(()=>[f(" "+u(n(e)("reputation.anomaly.start")),1)]),_:1},8,["loading"])]),_:1})]),_:1}),t(nt),A.value?(c(),m("div",Gt,[t(ce,{gutter:12,style:{"margin-bottom":"12px"}},{default:o(()=>[t(D,{span:8},{default:o(()=>[t($,{title:n(e)("reputation.anomaly.totalSamples"),value:A.value.totalSamples,"value-style":{fontSize:"16px"}},null,8,["title","value"])]),_:1}),t(D,{span:8},{default:o(()=>[t($,{title:n(e)("reputation.anomaly.threshold"),value:A.value.threshold,precision:2,"value-style":{fontSize:"16px"}},null,8,["title","value"])]),_:1}),t(D,{span:8},{default:o(()=>[t($,{title:n(e)("reputation.anomaly.anomalies"),value:A.value.anomalies.length,"value-style":{color:A.value.anomalies.length>0?"#ff4d4f":"#52c41a",fontSize:"16px"}},null,8,["title","value","value-style"])]),_:1})]),_:1}),A.value.message?(c(),S(N,{key:0,message:A.value.message,type:"warning","show-icon":"",style:{"margin-bottom":"12px"}},null,8,["message"])):y("",!0),A.value.anomalies.length?(c(),S(Ae,{key:1,size:"small","data-source":A.value.anomalies},{renderItem:o(({item:a})=>[t(we,null,{default:o(()=>[_("span",Ht,u(a.did),1),t(U,{color:"red",style:{"margin-left":"8px"}},{default:o(()=>[f(u(n(e)("reputation.anomaly.scoreTag",{score:a.score.toFixed(4)})),1)]),_:2},1024),_("span",Qt,u(a.reason),1),a.zScore!==null?(c(),m("span",Zt,u(n(e)("reputation.anomaly.zNote",{value:a.zScore.toFixed(2)})),1)):y("",!0)]),_:2},1024)]),_:1},8,["data-source"])):y("",!0)])):(c(),S(rt,{key:0,description:n(e)("reputation.anomaly.notDetected"),image:n(v)},null,8,["description","image"]))])]),_:1},8,["open","title"]),t(Z,{open:Y.value,"onUpdate:open":r[16]||(r[16]=a=>Y.value=a),title:n(e)("reputation.analytics.title",{runId:b.value?.runId?.slice(0,12)||""}),width:780,footer:null},{default:o(()=>[b.value?(c(),m("div",Xt,[t(lt,{column:2,size:"small",bordered:""},{default:o(()=>[t(E,{label:n(e)("reputation.analytics.objective")},{default:o(()=>[t(U,{color:le(b.value.objective)},{default:o(()=>[f(u(G(b.value.objective)),1)]),_:1},8,["color"])]),_:1},8,["label"]),t(E,{label:n(e)("reputation.analytics.status")},{default:o(()=>[t(U,{color:ie(b.value.status)},{default:o(()=>[f(u(se(b.value.status)),1)]),_:1},8,["color"])]),_:1},8,["label"]),t(E,{label:n(e)("reputation.analytics.iterations")},{default:o(()=>[f(u(b.value.iterations),1)]),_:1},8,["label"]),t(E,{label:n(e)("reputation.analytics.bestScore")},{default:o(()=>[_("span",{style:Fe({color:ue(b.value.bestScore),fontWeight:500,fontFamily:"monospace"})},u(b.value.bestScore.toFixed(4)),5)]),_:1},8,["label"]),t(E,{label:n(e)("reputation.analytics.createdAt")},{default:o(()=>[f(u(n(ve)(b.value.createdAt)),1)]),_:1},8,["label"]),b.value.completedAt?(c(),S(E,{key:0,label:n(e)("reputation.analytics.completedAt")},{default:o(()=>[f(u(n(ve)(b.value.completedAt)),1)]),_:1},8,["label"])):y("",!0),b.value.bestParams?(c(),S(E,{key:1,label:n(e)("reputation.analytics.bestParams"),span:2},{default:o(()=>[_("pre",ea,u(Ye(b.value.bestParams)),1)]),_:1},8,["label"])):y("",!0),b.value.errorMessage?(c(),S(E,{key:2,label:n(e)("reputation.analytics.errorMessage"),span:2},{default:o(()=>[_("span",ta,u(b.value.errorMessage),1)]),_:1},8,["label"])):y("",!0)]),_:1}),t(st,{spinning:oe.value},{default:o(()=>[w.value?(c(),m("div",aa,[_("h4",oa,u(n(e)("reputation.analytics.distributionTitle")),1),t(I,{size:"small",style:{"margin-bottom":"12px"}},{default:o(()=>[(c(!0),m(T,null,L(w.value.reputationDistribution.buckets,a=>(c(),m("div",{key:a.label,class:"bucket-row"},[_("span",na,u(a.label),1),t(H,{percent:We(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)),w.value.reputationDistribution.mean!==null?(c(),m("div",ra,[f(u(n(e)("reputation.analytics.mean",{value:w.value.reputationDistribution.mean.toFixed(4)}))+" ",1),w.value.reputationDistribution.stdDev!==null?(c(),m("span",la,u(n(e)("reputation.analytics.stdDev",{value:w.value.reputationDistribution.stdDev.toFixed(4)})),1)):y("",!0)])):y("",!0)]),_:1}),w.value.recommendations.length?(c(),S(I,{key:0,title:n(e)("reputation.analytics.recommendations"),size:"small"},{default:o(()=>[t(Ae,{size:"small","data-source":w.value.recommendations},{renderItem:o(({item:a})=>[t(we,null,{default:o(()=>[t(n(_t),{style:{color:"#faad14","margin-right":"8px"}}),f(" "+u(a),1)]),_:2},1024)]),_:1},8,["data-source"])]),_:1},8,["title"])):y("",!0)])):y("",!0)]),_:1},8,["spinning"])])):y("",!0)]),_:1},8,["open","title"])])}}},Ia=it(sa,[["__scopeId","data-v-9561b6cc"]]);export{Ia as default};
|
|
1
|
+
import{_ as it,b as ut,u as ct,E as pt,d as k}from"./index-19d37fVJ.js";import{s as Ee}from"./community-parser-CO25nZFt.js";import{R as dt,al as Ce,i as mt,aj as De,as as ft,$ as Re,L as yt,a8 as vt,ar as bt,aQ as _t}from"./icons-BFHq5fEF.js";import gt from"./index-Bq8fsYQ6.js";import{o as xt,M as m,R as _,P as u,u as n,c as t,N as o,Q as S,S as y,K as d,r as h,L as c,O as f,F as T,Y as L,Z as kt,_ as Fe,f as Ie,a as ye}from"./vendor-M5lGV-wr.js";import"./KeyCode-D63Tfrq7.js";import"./omit-3oHJWwWB.js";import"./pickAttrs-BWBtl13u.js";import"./initDefaultProps-GbvcoqYL.js";import"./motion-VM5YQ6Mf.js";import"./raf-Deuc0E8-.js";import"./index-aaHXeryL.js";import"./index-BwIwGE8Y.js";import"./isVisible-C7tPsqfj.js";import"./useState-CSzR8F8O.js";import"./devWarning-CNIS3FrJ.js";import"./warning-Pq00owYb.js";import"./compact-item-1jZiKenx.js";import"./createContext-B3FjOuaT.js";import"./Compact-DZHWn-_j.js";import"./_getTag-BVc6NQ_K.js";import"./styleChecker-BMXx5Ie5.js";import"./zoom-BqKDJys9.js";import"./ActionButton-DjmolmAS.js";import"./vnode-HDTJKu2B.js";function B(s){const e=Ee(s);if(!e)return null;try{return JSON.parse(e)}catch{}const i=e.match(/\{[\s\S]*\}|\[[\s\S]*\]/);if(!i)return null;try{return JSON.parse(i[0])}catch{return null}}const be=Object.freeze(["accuracy","fairness","resilience","convergence_speed"]),Te=Object.freeze(["none","exponential","linear","step"]),ht=Object.freeze(["z_score","iqr"]),Le=Object.freeze(["running","complete","applied","failed","cancelled"]),St=Object.freeze(["generic","task","review","vote"]);function z(s,e=0){return typeof s=="number"&&Number.isFinite(s)?s:e}function P(s){if(!s)return{noDb:!1,error:""};const e=Ee(s),i=/Database not available/i.test(e);return{noDb:i,error:i?"Database not available":""}}function zt(s,e=0){if(!s||typeof s!="object")return null;const i=s.did||"";return i?{key:i,did:i,score:z(s.score,0),observations:z(s.observations,0),decay:String(s.decay||"none"),weightTotal:z(s.weightTotal,0),_idx:e}:null}function $e(s){const e=B(s);return Array.isArray(e)?e.map(zt).filter(Boolean):[]}function Me(s,e=0){if(!s||typeof s!="object")return null;const i=s.did||"";return i?{key:`${i}-${e}`,did:i,score:z(s.score,0),reason:String(s.reason||""),zScore:typeof s.zScore=="number"?s.zScore:null,lower:typeof s.lower=="number"?s.lower:null,upper:typeof s.upper=="number"?s.upper:null}:null}function Ot(s){const e=B(s);if(!e||typeof e!="object"||Array.isArray(e))return{method:"",threshold:0,totalSamples:0,anomalies:[],summary:"",message:""};const i=Array.isArray(e.anomalies)?e.anomalies.map(Me).filter(Boolean):[];return{method:String(e.method||""),threshold:z(e.threshold,0),totalSamples:z(e.totalSamples,0),anomalies:i,summary:e.summary?String(e.summary):"",message:e.message?String(e.message):""}}function Ne(s,e=0){if(!s||typeof s!="object")return null;const i=s.runId||"";return i?{key:i,runId:i,objective:String(s.objective||""),iterations:z(s.iterations,0),paramSpace:s.paramSpace??null,bestParams:s.bestParams??null,bestScore:z(s.bestScore,0),status:String(s.status||"complete").toLowerCase(),createdAt:s.createdAt??null,completedAt:s.completedAt??null,analytics:s.analytics??null,errorMessage:s.errorMessage??"",_idx:e}:null}function jt(s){const e=B(s);return Array.isArray(e)?e.map(Ne).filter(Boolean):[]}function wt(s){const e=B(s);return!e||typeof e!="object"||Array.isArray(e)?null:Ne(e,0)}function At(s){const e=B(s);if(!e||typeof e!="object"||Array.isArray(e))return null;const i=e.reputationDistribution||{};return{analyticsId:String(e.analyticsId||""),runId:String(e.runId||""),reputationDistribution:{buckets:Array.isArray(i.buckets)?i.buckets.filter(v=>v&&typeof v=="object").map(v=>({label:String(v.label||""),count:z(v.count,0),min:typeof v.min=="number"?v.min:null,max:typeof v.max=="number"?v.max:null})):[],mean:typeof i.mean=="number"?i.mean:null,stdDev:typeof i.stdDev=="number"?i.stdDev:null},anomalies:e.anomalies&&typeof e.anomalies=="object"?{method:String(e.anomalies.method||""),totalSamples:z(e.anomalies.totalSamples,0),anomalies:Array.isArray(e.anomalies.anomalies)?e.anomalies.anomalies.map(Me).filter(Boolean):[],summary:e.anomalies.summary?String(e.anomalies.summary):"",message:e.anomalies.message?String(e.anomalies.message):""}:{method:"",totalSamples:0,anomalies:[],summary:"",message:""},recommendations:Array.isArray(e.recommendations)?e.recommendations.filter(v=>typeof v=="string"):[]}}const Ct={totalRuns:0,activeRuns:0,maxConcurrentOptimizations:0,byStatus:{},byObjective:{},observations:{totalObservations:0,totalDids:0},bestScoreEver:0};function Dt(s){const e=JSON.parse(JSON.stringify(Ct));for(const v of Le)e.byStatus[v]=0;for(const v of be)e.byObjective[v]=0;const i=B(s);if(!i||typeof i!="object"||Array.isArray(i))return e;if(e.totalRuns=z(i.totalRuns,0),e.activeRuns=z(i.activeRuns,0),e.maxConcurrentOptimizations=z(i.maxConcurrentOptimizations,0),e.bestScoreEver=z(i.bestScoreEver,0),i.byStatus&&typeof i.byStatus=="object")for(const[v,j]of Object.entries(i.byStatus))typeof j=="number"&&Number.isFinite(j)&&(e.byStatus[v]=j);if(i.byObjective&&typeof i.byObjective=="object")for(const[v,j]of Object.entries(i.byObjective))typeof j=="number"&&Number.isFinite(j)&&(e.byObjective[v]=j);return i.observations&&typeof i.observations=="object"&&(e.observations.totalObservations=z(i.observations.totalObservations,0),e.observations.totalDids=z(i.observations.totalDids,0)),e}function ve(s){if(s==null||s==="")return"—";const e=typeof s=="number"?new Date(s):new Date(String(s));return isNaN(e.getTime())?String(s):e.toLocaleString("zh-CN",{hour12:!1})}const Rt={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},Ft={class:"page-title"},It={class:"page-sub"},Tt={class:"filter-bar"},$t={style:{color:"var(--text-secondary)","font-size":"12px"}},Et={key:1,style:{color:"var(--text-primary)","font-family":"monospace","font-size":"12px"}},Lt={key:3,style:{color:"var(--text-secondary)"}},Mt={key:4,style:{color:"var(--text-secondary)","font-family":"monospace","font-size":"12px"}},Nt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},Ut={key:0,style:{color:"var(--text-primary)","font-family":"monospace","font-size":"12px"}},Pt={key:2,style:{color:"var(--text-secondary)"}},Bt={key:5,style:{color:"var(--text-secondary)","font-size":"11px"}},Jt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},Vt={style:{"margin-left":"8px",color:"var(--text-muted)","font-size":"12px"}},qt={style:{color:"var(--text-muted)","font-size":"11px","margin-top":"4px"}},Kt={style:{"margin-left":"8px",color:"var(--text-muted)","font-size":"12px"}},Wt={style:{"padding-top":"8px"}},Yt={style:{"margin-left":"8px",color:"var(--text-muted)","font-size":"12px"}},Gt={key:1},Ht={style:{"font-family":"monospace","font-size":"12px",color:"var(--text-primary)"}},Qt={style:{"margin-left":"8px",color:"var(--text-secondary)","font-size":"12px"}},Zt={key:0,style:{"margin-left":"8px",color:"var(--text-muted)","font-size":"11px"}},Xt={key:0,style:{"padding-top":"8px"}},ea={class:"params-pre"},ta={style:{color:"#ff4d4f"}},aa={key:0,style:{"margin-top":"16px"}},oa={style:{color:"var(--text-primary)","font-size":"13px",margin:"0 0 10px"}},na={class:"bucket-label"},ra={key:0,style:{"margin-top":"8px",color:"var(--text-secondary)","font-size":"12px"}},la={key:0,style:{"margin-left":"12px"}},sa={__name:"Reputation",setup(s){const{t:e}=ut(),i=ct(),v=pt.PRESENTED_IMAGE_SIMPLE,j=h(!1),ee=h(!1),te=h(!1),ae=h(!1),oe=h(!1),ne=h([]),_e=h([]),O=h({totalRuns:0,activeRuns:0,maxConcurrentOptimizations:0,byStatus:{},byObjective:{},observations:{totalObservations:0,totalDids:0},bestScoreEver:0}),V=h({noDb:!1,error:""}),ge=h("scores"),q=h("none"),K=h(!1),W=h(!1),re=h(!1),Y=h(!1),g=ye({did:"",score:.8,kind:"generic",weight:1}),M=ye({objective:"accuracy",iterations:50}),F=ye({method:"z_score",threshold:2.5,decay:"none"}),b=h(null),w=h(null),A=h(null),Ue=Ie(()=>[{title:e("reputation.scoreColumns.rank"),key:"rank",width:"60px"},{title:e("reputation.scoreColumns.did"),key:"did"},{title:e("reputation.scoreColumns.score"),key:"score",width:"220px"},{title:e("reputation.scoreColumns.observations"),key:"observations",width:"100px"},{title:e("reputation.scoreColumns.weightTotal"),key:"weightTotal",width:"100px"}]),Pe=Ie(()=>[{title:e("reputation.runColumns.runId"),key:"runId",width:"140px"},{title:e("reputation.runColumns.objective"),key:"objective",width:"140px"},{title:e("reputation.runColumns.iterations"),key:"iterations",width:"80px"},{title:e("reputation.runColumns.bestScore"),key:"bestScore",width:"110px"},{title:e("reputation.runColumns.status"),key:"status",width:"100px"},{title:e("reputation.runColumns.createdAt"),key:"createdAt",width:"160px"},{title:e("reputation.runColumns.action"),key:"action",width:"160px"}]);function xe(l){const r=`reputation.decay.${l}`,p=e(r);return p===r?l:p}function Be(l){const r=`reputation.kind.${l}`,p=e(r);return p===r?l:p}function G(l){const r=`reputation.objective.${l}`,p=e(r);return p===r?l:p}function le(l){return{accuracy:"blue",fairness:"green",resilience:"purple",convergence_speed:"orange"}[l]||"default"}function Je(l){return{accuracy:"#1677ff",fairness:"#52c41a",resilience:"#722ed1",convergence_speed:"#fa8c16"}[l]||"#888"}function Ve(l){const r=`reputation.objectiveDesc.${l}`,p=e(r);return p===r?"":p}function se(l){const r=`reputation.status.${l}`,p=e(r);return p===r?l:p}function ie(l){return{running:"processing",complete:"blue",applied:"green",failed:"red",cancelled:"default"}[l]||"default"}function qe(l){return{running:"#1677ff",complete:"#13c2c2",applied:"#52c41a",failed:"#ff4d4f",cancelled:"#888"}[l]||"#888"}function Ke(l){return l===0?"gold":l===1?"silver":l===2?"bronze":""}function ue(l){return l>=.8?"#52c41a":l>=.5?"#1677ff":l>=.3?"#faad14":"#ff4d4f"}function ke(l,r){return r?Math.round(l/r*100):0}function We(l){const r=w.value?.reputationDistribution.buckets.reduce((p,C)=>p+C.count,0)||0;return r?Math.round(l.count/r*100):0}function Ye(l){if(typeof l=="string")return l;try{return JSON.stringify(l,null,2)}catch{return String(l)}}async function J(){j.value=!0,V.value={noDb:!1,error:""};try{const[l,r,p]=await Promise.all([i.execute(`reputation list --decay ${q.value} --json`,1e4).catch(()=>({output:""})),i.execute("reputation runs --limit 50 --json",1e4).catch(()=>({output:""})),i.execute("reputation stats-v2 --json",8e3).catch(()=>({output:""}))]),C=[l,r,p].map(N=>P(N.output)).find(N=>N.noDb);C&&(V.value=C),ne.value=$e(l.output),_e.value=jt(r.output),O.value=Dt(p.output)}catch(l){k.error(e("reputation.messages.loadFailed",{err:l?.message||l}))}finally{j.value=!1}}async function Ge(){try{const{output:l}=await i.execute(`reputation list --decay ${q.value} --json`,1e4),r=P(l);if(r.noDb){V.value=r;return}ne.value=$e(l)}catch(l){k.error(e("reputation.messages.loadScoresFailed",{err:l?.message||l}))}}async function He(){if(!g.did.trim()){k.warning(e("reputation.messages.didRequired"));return}if(g.score<0||g.score>1){k.warning(e("reputation.messages.scoreRange"));return}ee.value=!0;try{const l=[`reputation observe "${g.did.trim().replace(/"/g,'\\"')}"`,String(g.score),`-k ${g.kind}`,`-w ${g.weight}`,"--json"],{output:r}=await i.execute(l.join(" "),1e4);if(P(r).noDb){k.error(e("reputation.messages.needInit"));return}if(!/"did"/.test(r)){k.error(e("reputation.messages.observeFailed",{err:r.slice(0,120)}));return}k.success(e("reputation.messages.observeOk")),K.value=!1,Se(),await J()}catch(l){k.error(e("reputation.messages.observeFailed",{err:l?.message||l}))}finally{ee.value=!1}}async function Qe(){te.value=!0;try{const l=["reputation optimize",`-o ${M.objective}`,`-i ${M.iterations}`,"--json"],{output:r}=await i.execute(l.join(" "),6e4);if(P(r).noDb){k.error(e("reputation.messages.needInit"));return}const C=wt(r);if(!C){k.error(e("reputation.messages.optimizeFailed",{err:r.slice(0,120)}));return}W.value=!1,k.success(e("reputation.messages.optimizeOk",{score:C.bestScore.toFixed(4)})),await J(),b.value=C,Y.value=!0,await he()}catch(l){k.error(e("reputation.messages.optimizeFailed",{err:l?.message||l}))}finally{te.value=!1}}async function Ze(l){gt.confirm({title:e("reputation.applyConfirm.title"),content:e("reputation.applyConfirm.content",{runId:l.runId.slice(0,12)}),okText:e("reputation.applyConfirm.ok"),cancelText:e("reputation.applyConfirm.cancel"),onOk:async()=>{try{const{output:r}=await i.execute(`reputation apply ${l.runId}`,8e3);if(P(r).noDb){k.error(e("reputation.messages.needInit"));return}if(/Failed|Error/i.test(r)&&!/Applied/i.test(r)){k.error(e("reputation.messages.applyFailed",{err:r.slice(0,120)}));return}k.success(e("reputation.messages.applyOk")),await J()}catch(r){k.error(e("reputation.messages.applyFailed",{err:r?.message||r}))}}})}async function Xe(l){b.value=l,w.value=null,Y.value=!0,await he()}async function he(){if(b.value){oe.value=!0;try{const{output:l}=await i.execute(`reputation analytics ${b.value.runId} --json`,8e3);if(P(l).noDb)return;w.value=At(l)}catch{}finally{oe.value=!1}}}function et(){A.value=null,re.value=!0}async function tt(){ae.value=!0;try{const l=["reputation anomalies",`-m ${F.method}`,`-t ${F.threshold}`,`-d ${F.decay}`,"--json"],{output:r}=await i.execute(l.join(" "),1e4);if(P(r).noDb){k.error(e("reputation.messages.needInit"));return}A.value=Ot(r)}catch(l){k.error(e("reputation.messages.detectFailed",{err:l?.message||l}))}finally{ae.value=!1}}function Se(){g.did="",g.score=.8,g.kind="generic",g.weight=1}return xt(J),(l,r)=>{const p=d("a-button"),C=d("a-space"),N=d("a-alert"),$=d("a-statistic"),I=d("a-card"),D=d("a-col"),ce=d("a-row"),ze=d("a-radio-button"),Oe=d("a-radio-group"),H=d("a-progress"),je=d("a-table"),pe=d("a-tab-pane"),U=d("a-tag"),at=d("a-tabs"),ot=d("a-input"),R=d("a-form-item"),Q=d("a-input-number"),de=d("a-select-option"),me=d("a-select"),fe=d("a-form"),Z=d("a-modal"),nt=d("a-divider"),rt=d("a-empty"),we=d("a-list-item"),Ae=d("a-list"),E=d("a-descriptions-item"),lt=d("a-descriptions"),st=d("a-spin");return c(),m("div",null,[_("div",Rt,[_("div",null,[_("h2",Ft,u(n(e)("reputation.title")),1),_("p",It,u(n(e)("reputation.subtitle")),1)]),t(C,null,{default:o(()=>[t(p,{loading:j.value,onClick:J},{icon:o(()=>[t(n(dt))]),default:o(()=>[f(" "+u(n(e)("reputation.refresh")),1)]),_:1},8,["loading"]),t(p,{onClick:et},{icon:o(()=>[t(n(Ce))]),default:o(()=>[f(" "+u(n(e)("reputation.actions.anomalies")),1)]),_:1}),t(p,{type:"primary",onClick:r[0]||(r[0]=a=>W.value=!0)},{icon:o(()=>[t(n(mt))]),default:o(()=>[f(" "+u(n(e)("reputation.actions.optimize")),1)]),_:1})]),_:1})]),V.value.noDb?(c(),S(N,{key:0,type:"info","show-icon":"",message:n(e)("reputation.noDb.message"),description:n(e)("reputation.noDb.description"),style:{"margin-bottom":"16px"}},null,8,["message","description"])):y("",!0),t(ce,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:o(()=>[t(D,{xs:12,sm:8,lg:5},{default:o(()=>[t(I,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[t($,{title:n(e)("reputation.stats.trackedDids"),value:O.value.observations.totalDids,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:o(()=>[t(n(De))]),_:1},8,["title","value"])]),_:1})]),_:1}),t(D,{xs:12,sm:8,lg:5},{default:o(()=>[t(I,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[t($,{title:n(e)("reputation.stats.totalObservations"),value:O.value.observations.totalObservations,"value-style":{color:"#722ed1",fontSize:"20px"}},{prefix:o(()=>[t(n(ft))]),_:1},8,["title","value"])]),_:1})]),_:1}),t(D,{xs:12,sm:8,lg:5},{default:o(()=>[t(I,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[t($,{title:n(e)("reputation.stats.optimizationRuns"),value:O.value.totalRuns,"value-style":{color:"#13c2c2",fontSize:"20px"}},{prefix:o(()=>[t(n(Re))]),_:1},8,["title","value"])]),_:1})]),_:1}),t(D,{xs:12,sm:8,lg:5},{default:o(()=>[t(I,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[t($,{title:n(e)("reputation.stats.active"),value:O.value.activeRuns,"value-style":{color:O.value.activeRuns>0?"#1677ff":"#888",fontSize:"20px"},suffix:`/ ${O.value.maxConcurrentOptimizations}`},{prefix:o(()=>[t(n(yt))]),_:1},8,["title","value","value-style","suffix"])]),_:1})]),_:1}),t(D,{xs:24,sm:8,lg:4},{default:o(()=>[t(I,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[t($,{title:n(e)("reputation.stats.bestEver"),value:O.value.bestScoreEver,precision:3,"value-style":{color:"#52c41a",fontSize:"20px"}},{prefix:o(()=>[t(n(vt))]),_:1},8,["title","value"])]),_:1})]),_:1})]),_:1}),t(at,{activeKey:ge.value,"onUpdate:activeKey":r[3]||(r[3]=a=>ge.value=a),class:"reputation-tabs"},{default:o(()=>[t(pe,{key:"scores",tab:n(e)("reputation.tabs.scores")},{default:o(()=>[_("div",Tt,[_("span",$t,u(n(e)("reputation.filter.decayLabel")),1),t(Oe,{value:q.value,"onUpdate:value":r[1]||(r[1]=a=>q.value=a),size:"small","button-style":"solid",onChange:Ge},{default:o(()=>[(c(!0),m(T,null,L(n(Te),a=>(c(),S(ze,{key:a,value:a},{default:o(()=>[f(u(xe(a)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),t(p,{size:"small",onClick:r[2]||(r[2]=a=>K.value=!0)},{icon:o(()=>[t(n(bt))]),default:o(()=>[f(" "+u(n(e)("reputation.filter.addObservation")),1)]),_:1})]),t(je,{columns:Ue.value,"data-source":ne.value,pagination:{pageSize:20,showTotal:a=>n(e)("reputation.totals.dids",{count:a})},size:"small",loading:j.value,style:{background:"var(--bg-card)"}},{bodyCell:o(({column:a,record:x,index:X})=>[a.key==="rank"?(c(),m("span",{key:0,class:kt(["rank-pill",Ke(X)])},u(X+1),3)):y("",!0),a.key==="did"?(c(),m("span",Et,u(x.did),1)):y("",!0),a.key==="score"?(c(),S(H,{key:2,percent:Math.round(x.score*100),"stroke-color":ue(x.score),size:"small",format:()=>x.score.toFixed(4)},null,8,["percent","stroke-color","format"])):y("",!0),a.key==="observations"?(c(),m("span",Lt,u(x.observations),1)):y("",!0),a.key==="weightTotal"?(c(),m("span",Mt,u(x.weightTotal.toFixed(2)),1)):y("",!0)]),emptyText:o(()=>[_("div",Nt,[t(n(De),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),f(" "+u(n(e)("reputation.empty.scores")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),t(pe,{key:"runs",tab:n(e)("reputation.tabs.runs")},{default:o(()=>[t(je,{columns:Pe.value,"data-source":_e.value,pagination:{pageSize:20,showTotal:a=>n(e)("reputation.totals.rows",{count:a})},size:"small",loading:j.value,style:{background:"var(--bg-card)"}},{bodyCell:o(({column:a,record:x})=>[a.key==="runId"?(c(),m("span",Ut,u(x.runId.slice(0,12)),1)):y("",!0),a.key==="objective"?(c(),S(U,{key:1,color:le(x.objective),style:{"font-family":"monospace"}},{default:o(()=>[f(u(G(x.objective)),1)]),_:2},1032,["color"])):y("",!0),a.key==="iterations"?(c(),m("span",Pt,u(x.iterations),1)):y("",!0),a.key==="bestScore"?(c(),m("span",{key:3,style:Fe({color:ue(x.bestScore),fontWeight:500,fontFamily:"monospace"})},u(x.bestScore.toFixed(4)),5)):y("",!0),a.key==="status"?(c(),S(U,{key:4,color:ie(x.status)},{default:o(()=>[f(u(se(x.status)),1)]),_:2},1032,["color"])):y("",!0),a.key==="createdAt"?(c(),m("span",Bt,u(n(ve)(x.createdAt)),1)):y("",!0),a.key==="action"?(c(),m(T,{key:6},[t(p,{size:"small",type:"link",onClick:X=>Xe(x)},{default:o(()=>[f(u(n(e)("reputation.rowActions.analyze")),1)]),_:1},8,["onClick"]),x.status==="complete"?(c(),S(p,{key:0,size:"small",type:"link",style:{color:"#52c41a"},onClick:X=>Ze(x)},{default:o(()=>[f(u(n(e)("reputation.rowActions.apply")),1)]),_:1},8,["onClick"])):y("",!0)],64)):y("",!0)]),emptyText:o(()=>[_("div",Jt,[t(n(Re),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),f(" "+u(n(e)("reputation.empty.runs")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),t(pe,{key:"breakdown",tab:n(e)("reputation.tabs.breakdown")},{default:o(()=>[t(ce,{gutter:[16,16]},{default:o(()=>[t(D,{xs:24,lg:12},{default:o(()=>[t(I,{title:n(e)("reputation.breakdown.byStatus"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[(c(!0),m(T,null,L(n(Le),a=>(c(),m("div",{key:a,class:"bd-row"},[t(U,{color:ie(a),style:{"min-width":"80px","text-align":"center"}},{default:o(()=>[f(u(se(a)),1)]),_:2},1032,["color"]),t(H,{percent:ke(O.value.byStatus[a]||0,O.value.totalRuns),"stroke-color":qe(a),format:()=>`${O.value.byStatus[a]||0}`,size:"small",style:{flex:"1","margin-left":"12px"}},null,8,["percent","stroke-color","format"])]))),128))]),_:1},8,["title"])]),_:1}),t(D,{xs:24,lg:12},{default:o(()=>[t(I,{title:n(e)("reputation.breakdown.byObjective"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[(c(!0),m(T,null,L(n(be),a=>(c(),m("div",{key:a,class:"bd-row"},[t(U,{color:le(a),style:{"min-width":"100px","text-align":"center","font-family":"monospace"}},{default:o(()=>[f(u(G(a)),1)]),_:2},1032,["color"]),t(H,{percent:ke(O.value.byObjective[a]||0,O.value.totalRuns),"stroke-color":Je(a),format:()=>`${O.value.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"]),t(Z,{open:K.value,"onUpdate:open":r[8]||(r[8]=a=>K.value=a),title:n(e)("reputation.observe.title"),"confirm-loading":ee.value,width:540,"ok-text":n(e)("reputation.observe.ok"),"cancel-text":n(e)("common.cancel"),onOk:He,onCancel:Se},{default:o(()=>[t(fe,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:o(()=>[t(R,{label:n(e)("reputation.observe.didLabel"),required:""},{default:o(()=>[t(ot,{value:g.did,"onUpdate:value":r[4]||(r[4]=a=>g.did=a),placeholder:n(e)("reputation.observe.didPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),t(R,{label:n(e)("reputation.observe.scoreLabel"),required:""},{default:o(()=>[t(Q,{value:g.score,"onUpdate:value":r[5]||(r[5]=a=>g.score=a),min:0,max:1,step:.05,style:{width:"160px"}},null,8,["value"]),_("span",Vt,u(n(e)("reputation.observe.scoreRange")),1)]),_:1},8,["label"]),t(R,{label:n(e)("reputation.observe.kindLabel")},{default:o(()=>[t(me,{value:g.kind,"onUpdate:value":r[6]||(r[6]=a=>g.kind=a)},{default:o(()=>[(c(!0),m(T,null,L(n(St),a=>(c(),S(de,{key:a,value:a},{default:o(()=>[f(u(Be(a)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"]),t(R,{label:n(e)("reputation.observe.weightLabel")},{default:o(()=>[t(Q,{value:g.weight,"onUpdate:value":r[7]||(r[7]=a=>g.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"]),t(Z,{open:W.value,"onUpdate:open":r[11]||(r[11]=a=>W.value=a),title:n(e)("reputation.optimize.title"),"confirm-loading":te.value,width:540,"ok-text":n(e)("reputation.optimize.ok"),"cancel-text":n(e)("common.cancel"),onOk:Qe},{default:o(()=>[t(fe,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:o(()=>[t(R,{label:n(e)("reputation.optimize.objectiveLabel"),required:""},{default:o(()=>[t(me,{value:M.objective,"onUpdate:value":r[9]||(r[9]=a=>M.objective=a)},{default:o(()=>[(c(!0),m(T,null,L(n(be),a=>(c(),S(de,{key:a,value:a},{default:o(()=>[f(u(G(a)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),_("div",qt,u(Ve(M.objective)),1)]),_:1},8,["label"]),t(R,{label:n(e)("reputation.optimize.iterationsLabel")},{default:o(()=>[t(Q,{value:M.iterations,"onUpdate:value":r[10]||(r[10]=a=>M.iterations=a),min:1,max:1e3,step:10,style:{width:"160px"}},null,8,["value"]),_("span",Kt,u(n(e)("reputation.optimize.iterationsRange")),1)]),_:1},8,["label"])]),_:1}),t(N,{type:"info","show-icon":"",message:n(e)("reputation.optimize.syncMessage"),description:n(e)("reputation.optimize.syncDescription"),style:{"margin-top":"12px"}},null,8,["message","description"])]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),t(Z,{open:re.value,"onUpdate:open":r[15]||(r[15]=a=>re.value=a),title:n(e)("reputation.anomaly.title"),width:640,footer:null},{default:o(()=>[_("div",Wt,[t(fe,{"label-col":{span:5},"wrapper-col":{span:19}},{default:o(()=>[t(R,{label:n(e)("reputation.anomaly.methodLabel")},{default:o(()=>[t(Oe,{value:F.method,"onUpdate:value":r[12]||(r[12]=a=>F.method=a),"button-style":"solid"},{default:o(()=>[(c(!0),m(T,null,L(n(ht),a=>(c(),S(ze,{key:a,value:a},{default:o(()=>[f(u(a==="z_score"?n(e)("reputation.anomaly.zScoreLabel"):n(e)("reputation.anomaly.iqrLabel")),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"]),t(R,{label:n(e)("reputation.anomaly.thresholdLabel")},{default:o(()=>[t(Q,{value:F.threshold,"onUpdate:value":r[13]||(r[13]=a=>F.threshold=a),min:.5,step:.1,style:{width:"120px"}},null,8,["value"]),_("span",Yt,u(n(e)("reputation.anomaly.thresholdHint")),1)]),_:1},8,["label"]),t(R,{label:n(e)("reputation.anomaly.decayLabel")},{default:o(()=>[t(me,{value:F.decay,"onUpdate:value":r[14]||(r[14]=a=>F.decay=a),style:{width:"200px"}},{default:o(()=>[(c(!0),m(T,null,L(n(Te),a=>(c(),S(de,{key:a,value:a},{default:o(()=>[f(u(xe(a)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"]),t(R,{"wrapper-col":{offset:5,span:19}},{default:o(()=>[t(p,{type:"primary",loading:ae.value,onClick:tt},{icon:o(()=>[t(n(Ce))]),default:o(()=>[f(" "+u(n(e)("reputation.anomaly.start")),1)]),_:1},8,["loading"])]),_:1})]),_:1}),t(nt),A.value?(c(),m("div",Gt,[t(ce,{gutter:12,style:{"margin-bottom":"12px"}},{default:o(()=>[t(D,{span:8},{default:o(()=>[t($,{title:n(e)("reputation.anomaly.totalSamples"),value:A.value.totalSamples,"value-style":{fontSize:"16px"}},null,8,["title","value"])]),_:1}),t(D,{span:8},{default:o(()=>[t($,{title:n(e)("reputation.anomaly.threshold"),value:A.value.threshold,precision:2,"value-style":{fontSize:"16px"}},null,8,["title","value"])]),_:1}),t(D,{span:8},{default:o(()=>[t($,{title:n(e)("reputation.anomaly.anomalies"),value:A.value.anomalies.length,"value-style":{color:A.value.anomalies.length>0?"#ff4d4f":"#52c41a",fontSize:"16px"}},null,8,["title","value","value-style"])]),_:1})]),_:1}),A.value.message?(c(),S(N,{key:0,message:A.value.message,type:"warning","show-icon":"",style:{"margin-bottom":"12px"}},null,8,["message"])):y("",!0),A.value.anomalies.length?(c(),S(Ae,{key:1,size:"small","data-source":A.value.anomalies},{renderItem:o(({item:a})=>[t(we,null,{default:o(()=>[_("span",Ht,u(a.did),1),t(U,{color:"red",style:{"margin-left":"8px"}},{default:o(()=>[f(u(n(e)("reputation.anomaly.scoreTag",{score:a.score.toFixed(4)})),1)]),_:2},1024),_("span",Qt,u(a.reason),1),a.zScore!==null?(c(),m("span",Zt,u(n(e)("reputation.anomaly.zNote",{value:a.zScore.toFixed(2)})),1)):y("",!0)]),_:2},1024)]),_:1},8,["data-source"])):y("",!0)])):(c(),S(rt,{key:0,description:n(e)("reputation.anomaly.notDetected"),image:n(v)},null,8,["description","image"]))])]),_:1},8,["open","title"]),t(Z,{open:Y.value,"onUpdate:open":r[16]||(r[16]=a=>Y.value=a),title:n(e)("reputation.analytics.title",{runId:b.value?.runId?.slice(0,12)||""}),width:780,footer:null},{default:o(()=>[b.value?(c(),m("div",Xt,[t(lt,{column:2,size:"small",bordered:""},{default:o(()=>[t(E,{label:n(e)("reputation.analytics.objective")},{default:o(()=>[t(U,{color:le(b.value.objective)},{default:o(()=>[f(u(G(b.value.objective)),1)]),_:1},8,["color"])]),_:1},8,["label"]),t(E,{label:n(e)("reputation.analytics.status")},{default:o(()=>[t(U,{color:ie(b.value.status)},{default:o(()=>[f(u(se(b.value.status)),1)]),_:1},8,["color"])]),_:1},8,["label"]),t(E,{label:n(e)("reputation.analytics.iterations")},{default:o(()=>[f(u(b.value.iterations),1)]),_:1},8,["label"]),t(E,{label:n(e)("reputation.analytics.bestScore")},{default:o(()=>[_("span",{style:Fe({color:ue(b.value.bestScore),fontWeight:500,fontFamily:"monospace"})},u(b.value.bestScore.toFixed(4)),5)]),_:1},8,["label"]),t(E,{label:n(e)("reputation.analytics.createdAt")},{default:o(()=>[f(u(n(ve)(b.value.createdAt)),1)]),_:1},8,["label"]),b.value.completedAt?(c(),S(E,{key:0,label:n(e)("reputation.analytics.completedAt")},{default:o(()=>[f(u(n(ve)(b.value.completedAt)),1)]),_:1},8,["label"])):y("",!0),b.value.bestParams?(c(),S(E,{key:1,label:n(e)("reputation.analytics.bestParams"),span:2},{default:o(()=>[_("pre",ea,u(Ye(b.value.bestParams)),1)]),_:1},8,["label"])):y("",!0),b.value.errorMessage?(c(),S(E,{key:2,label:n(e)("reputation.analytics.errorMessage"),span:2},{default:o(()=>[_("span",ta,u(b.value.errorMessage),1)]),_:1},8,["label"])):y("",!0)]),_:1}),t(st,{spinning:oe.value},{default:o(()=>[w.value?(c(),m("div",aa,[_("h4",oa,u(n(e)("reputation.analytics.distributionTitle")),1),t(I,{size:"small",style:{"margin-bottom":"12px"}},{default:o(()=>[(c(!0),m(T,null,L(w.value.reputationDistribution.buckets,a=>(c(),m("div",{key:a.label,class:"bucket-row"},[_("span",na,u(a.label),1),t(H,{percent:We(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)),w.value.reputationDistribution.mean!==null?(c(),m("div",ra,[f(u(n(e)("reputation.analytics.mean",{value:w.value.reputationDistribution.mean.toFixed(4)}))+" ",1),w.value.reputationDistribution.stdDev!==null?(c(),m("span",la,u(n(e)("reputation.analytics.stdDev",{value:w.value.reputationDistribution.stdDev.toFixed(4)})),1)):y("",!0)])):y("",!0)]),_:1}),w.value.recommendations.length?(c(),S(I,{key:0,title:n(e)("reputation.analytics.recommendations"),size:"small"},{default:o(()=>[t(Ae,{size:"small","data-source":w.value.recommendations},{renderItem:o(({item:a})=>[t(we,null,{default:o(()=>[t(n(_t),{style:{color:"#faad14","margin-right":"8px"}}),f(" "+u(a),1)]),_:2},1024)]),_:1},8,["data-source"])]),_:1},8,["title"])):y("",!0)])):y("",!0)]),_:1},8,["spinning"])])):y("",!0)]),_:1},8,["open","title"])])}}},Ia=it(sa,[["__scopeId","data-v-9561b6cc"]]);export{Ia as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{q as z,f as S,h,a0 as f,i as N}from"./index-
|
|
1
|
+
import{q as z,f as S,h,a0 as f,i as N}from"./index-19d37fVJ.js";import{u as _,r as u}from"./responsiveObserve-BOvUPufq.js";import{u as E}from"./useFlexGapSupport-DSJ4Pl17.js";import{u as F,a as I}from"./index-DWJ5GzxU.js";import{d as M,o as T,e as V,c as q,r as $,f as o}from"./vendor-M5lGV-wr.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=M({compatConfig:{MODE:3},name:"ARow",inheritAttrs:!1,props:D(),setup(s,G){let{slots:d,attrs:l}=G;const{prefixCls:n,direction:R}=z("row",s),[O,C]=F(n);let m;const v=_(),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 a=u[t];if(!y.value[a])continue;const r=s[e][a];if(r!==void 0)return r}return""}),b=g("align"),x=g("justify"),w=E();T(()=>{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)})}),V(()=>{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});I({gutter:A,supportFlexGap:w,wrap:o(()=>s.wrap)});const k=o(()=>N(n.value,{[`${n.value}-no-wrap`]:s.wrap===!1,[`${n.value}-${x.value}`]:x.value,[`${n.value}-${b.value}`]:b.value,[`${n.value}-rtl`]:R.value==="rtl"},l.class,C.value)),B=o(()=>{const e=A.value,t={},a=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 a&&(t.marginLeft=a,t.marginRight=a),w.value?t.rowGap=`${e[1]}px`:r&&(t.marginTop=r,t.marginBottom=r),t});return()=>{var e;return O(q("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};
|