chainlesschain 0.162.87 → 0.162.89

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (155) hide show
  1. package/package.json +3 -3
  2. package/src/assets/web-panel/assets/{AIOps-B5qoKwDX.js → AIOps-DDKuDDBe.js} +1 -1
  3. package/src/assets/web-panel/assets/{ActionButton-BdKytPee.js → ActionButton-D_oEGk6a.js} +1 -1
  4. package/src/assets/web-panel/assets/{Analytics-CeSpW9WC.js → Analytics-1zi90Zqp.js} +2 -2
  5. package/src/assets/web-panel/assets/{AppLayout-CN0HcGHl.js → AppLayout-D5TSGV7Y.js} +5 -5
  6. package/src/assets/web-panel/assets/{Audit-DiLVSuxs.js → Audit-CAdM6ZWq.js} +1 -1
  7. package/src/assets/web-panel/assets/{Backup-RBZEr_Cm.js → Backup-Bbmq82UE.js} +1 -1
  8. package/src/assets/web-panel/assets/{BaseInput-BLwgjz7w.js → BaseInput-DdGZcAGo.js} +1 -1
  9. package/src/assets/web-panel/assets/{Chat-hWbKo3Y8.js → Chat-3p4ROvmy.js} +5 -5
  10. package/src/assets/web-panel/assets/{ChatBubbleRenderer-DCQz2Fh1.js → ChatBubbleRenderer-BORlWmtB.js} +1 -1
  11. package/src/assets/web-panel/assets/{Checkbox-DjSvCtwm.js → Checkbox-Bo5o4anX.js} +1 -1
  12. package/src/assets/web-panel/assets/{Codegen-CS5mCkDD.js → Codegen-BQNL8l9R.js} +1 -1
  13. package/src/assets/web-panel/assets/{Col-CXZT4-Kf.js → Col-Cw_UMO2L.js} +1 -1
  14. package/src/assets/web-panel/assets/{Community-sRpeoMwv.js → Community-BVyhXx_x.js} +1 -1
  15. package/src/assets/web-panel/assets/{Compact-DLud5sT4.js → Compact-ldL9fyLc.js} +1 -1
  16. package/src/assets/web-panel/assets/{Compliance-BaC6_OKU.js → Compliance-4TeKhiTd.js} +1 -1
  17. package/src/assets/web-panel/assets/{Cowork-CkDgjPCR.js → Cowork-Ch6QoB18.js} +4 -4
  18. package/src/assets/web-panel/assets/{Cron-JIyvROA6.js → Cron-LEjDutAK.js} +2 -2
  19. package/src/assets/web-panel/assets/{Crosschain-3zqCVPCv.js → Crosschain-bSr0mGyW.js} +1 -1
  20. package/src/assets/web-panel/assets/{DID-B3tgwNrV.js → DID-DVdHJJm3.js} +2 -2
  21. package/src/assets/web-panel/assets/{Dashboard-7bPbgI4P.js → Dashboard-xQ4mYwac.js} +2 -2
  22. package/src/assets/web-panel/assets/{Dropdown--vLJWMQt.js → Dropdown-CI2lo1UC.js} +1 -1
  23. package/src/assets/web-panel/assets/EmailListRenderer-2U85M3PG.js +1 -0
  24. package/src/assets/web-panel/assets/{FamilyGuardDashboard-CCox4cK9.js → FamilyGuardDashboard-DTvedZ4R.js} +1 -1
  25. package/src/assets/web-panel/assets/{Federation--4n8yx-h.js → Federation-_WEmATdN.js} +1 -1
  26. package/src/assets/web-panel/assets/{FormItemContext-CP8g135H.js → FormItemContext-CoJEED8P.js} +1 -1
  27. package/src/assets/web-panel/assets/{GenericCardRenderer-DhiGHyKC.js → GenericCardRenderer-8pTqC5Pa.js} +1 -1
  28. package/src/assets/web-panel/assets/{Git-CrnIJELY.js → Git-DEl-Ya7C.js} +2 -2
  29. package/src/assets/web-panel/assets/{Governance-BudsrPFK.js → Governance-BFhRzz-i.js} +1 -1
  30. package/src/assets/web-panel/assets/{Inference-Dmi_oji4.js → Inference-Bwtf10Lp.js} +1 -1
  31. package/src/assets/web-panel/assets/{KnowledgeGraph-C25fw0FO.js → KnowledgeGraph-DYbKYjzW.js} +1 -1
  32. package/src/assets/web-panel/assets/{Logs-DShQrjB9.js → Logs-Dbvs5Jqr.js} +2 -2
  33. package/src/assets/web-panel/assets/{Marketplace-Dkw8f7jY.js → Marketplace-C8Hwf7Nt.js} +1 -1
  34. package/src/assets/web-panel/assets/{McpTools-BHx1HO5R.js → McpTools-Dc06yx1O.js} +5 -5
  35. package/src/assets/web-panel/assets/{Memory-RI41JeXd.js → Memory-CjtfAYMK.js} +2 -2
  36. package/src/assets/web-panel/assets/{MobileBridge-CelTeD1k.js → MobileBridge-Bwg6Uv0-.js} +2 -2
  37. package/src/assets/web-panel/assets/MobileProjects-D_Yayger.js +1 -0
  38. package/src/assets/web-panel/assets/{Mtc-CK1SSiwH.js → Mtc-DimSkHYd.js} +2 -2
  39. package/src/assets/web-panel/assets/{MtcAudit-CRdIoMd4.js → MtcAudit-D7g1pn11.js} +2 -2
  40. package/src/assets/web-panel/assets/{Multisig-Bw-b9lKa.js → Multisig-Be-fsQin.js} +3 -3
  41. package/src/assets/web-panel/assets/{NLProgramming-BwwxruYQ.js → NLProgramming-DcNcXu3l.js} +1 -1
  42. package/src/assets/web-panel/assets/{Notes-D4u4Q26j.js → Notes-pv6Ot-V-.js} +4 -4
  43. package/src/assets/web-panel/assets/{NotificationSettings-C6NlrEiz.js → NotificationSettings-CEi4Stfz.js} +1 -1
  44. package/src/assets/web-panel/assets/OrderTableRenderer-CN8i3BFY.js +1 -0
  45. package/src/assets/web-panel/assets/{Organization-CJ-HZOGl.js → Organization-DtU9aIk3.js} +2 -2
  46. package/src/assets/web-panel/assets/{Overflow-DP-Gr0MB.js → Overflow-DhpkM6SB.js} +1 -1
  47. package/src/assets/web-panel/assets/{P2P-ClZ8vSAq.js → P2P-CUBG6AI4.js} +2 -2
  48. package/src/assets/web-panel/assets/PdhVaultBrowser-qN193Lvq.js +7 -0
  49. package/src/assets/web-panel/assets/{Permissions-CFNoSn65.js → Permissions-Co0mmuhn.js} +4 -4
  50. package/src/assets/web-panel/assets/{PersonalDataHub-BB7QWWJg.js → PersonalDataHub-CTBvxlRG.js} +2 -2
  51. package/src/assets/web-panel/assets/{Pipeline-X8zOudQr.js → Pipeline-KxsyMqPq.js} +1 -1
  52. package/src/assets/web-panel/assets/{Privacy-BhHTcrIP.js → Privacy-B5jrzQJA.js} +1 -1
  53. package/src/assets/web-panel/assets/{ProjectInit-DyexCLNd.js → ProjectInit-B7OcgjxJ.js} +2 -2
  54. package/src/assets/web-panel/assets/{ProjectSettings-6OwfY6DN.js → ProjectSettings-Ci4PDOdj.js} +2 -2
  55. package/src/assets/web-panel/assets/{Projects-CXz0fJTM.js → Projects-BJKdEvTl.js} +1 -1
  56. package/src/assets/web-panel/assets/{Providers-DcV93Yo5.js → Providers-yVfFgGST.js} +1 -1
  57. package/src/assets/web-panel/assets/{QuickAsk-D-hrghMC.js → QuickAsk-Bc79xdK2.js} +1 -1
  58. package/src/assets/web-panel/assets/{Recommend-zaqUMInK.js → Recommend-CkTvhsKQ.js} +1 -1
  59. package/src/assets/web-panel/assets/{Reputation-F6S8NTxc.js → Reputation-ijWjqEZm.js} +1 -1
  60. package/src/assets/web-panel/assets/{Row-DAH0pXst.js → Row-oV-drKth.js} +1 -1
  61. package/src/assets/web-panel/assets/{RssFeed-CiAB906Z.js → RssFeed-B1hkOEjr.js} +3 -3
  62. package/src/assets/web-panel/assets/{Search-Coqx1seG.js → Search-bjiydP4_.js} +1 -1
  63. package/src/assets/web-panel/assets/{Security-BoxcgnJV.js → Security-D07XF2NJ.js} +4 -4
  64. package/src/assets/web-panel/assets/{Services-COCvhr-B.js → Services-D1XZW1VI.js} +2 -2
  65. package/src/assets/web-panel/assets/{Skeleton-B1eVJHIi.js → Skeleton-bWZHM36K.js} +1 -1
  66. package/src/assets/web-panel/assets/{Skills-CE9Dmx9j.js → Skills-DprqZ58V.js} +1 -1
  67. package/src/assets/web-panel/assets/{Sla-BNTAqoF4.js → Sla-CiaKZ3op.js} +1 -1
  68. package/src/assets/web-panel/assets/{SpeechSettings-Bcz7uwC6.js → SpeechSettings-AFDTRPq8.js} +1 -1
  69. package/src/assets/web-panel/assets/{SyncSettings-BYavRqFb.js → SyncSettings-lVnKrdHt.js} +2 -2
  70. package/src/assets/web-panel/assets/{Tasks-DIChx79b.js → Tasks-DnvbnNTF.js} +1 -1
  71. package/src/assets/web-panel/assets/{Templates-CtFWI9Wo.js → Templates-CSvO-rac.js} +1 -1
  72. package/src/assets/web-panel/assets/{Tenant-D3_a2Q-F.js → Tenant-CTS6CF8D.js} +1 -1
  73. package/src/assets/web-panel/assets/{Terminal-tUKKFhFe.js → Terminal-FhG6jIdV.js} +2 -2
  74. package/src/assets/web-panel/assets/{TimelineRenderer-CAuPIfP3.js → TimelineRenderer-CqwbzI2B.js} +1 -1
  75. package/src/assets/web-panel/assets/{Tokens-HwfHQxS6.js → Tokens-CmXW3LL1.js} +1 -1
  76. package/src/assets/web-panel/assets/{Trigger-DqBh0u8h.js → Trigger-DwoNiFAw.js} +1 -1
  77. package/src/assets/web-panel/assets/{Trust-BZisudc4.js → Trust-D5rW48PN.js} +1 -1
  78. package/src/assets/web-panel/assets/{UkeySign-BDVHNHgW.js → UkeySign-CrvoDfjI.js} +1 -1
  79. package/src/assets/web-panel/assets/{VideoEditing-CVg27K9W.js → VideoEditing-DTvhmxtn.js} +1 -1
  80. package/src/assets/web-panel/assets/{Wallet-C_C9Uozu.js → Wallet-R-NDs-nS.js} +3 -3
  81. package/src/assets/web-panel/assets/{WebAuthn-BJOqrscu.js → WebAuthn-Bc6TtMHJ.js} +4 -4
  82. package/src/assets/web-panel/assets/{WorkflowEditor-D371gIHp.js → WorkflowEditor-TyS8hVP3.js} +1 -1
  83. package/src/assets/web-panel/assets/{chat-Bg3mtk60.js → chat-De1UwIe9.js} +1 -1
  84. package/src/assets/web-panel/assets/{colors-DbsZDd0h.js → colors-YLnxJgpV.js} +1 -1
  85. package/src/assets/web-panel/assets/{compact-item-DdUiFvWf.js → compact-item-DBW4zsaa.js} +1 -1
  86. package/src/assets/web-panel/assets/{createContext-CdIrP9Fp.js → createContext-D-UkFz2M.js} +1 -1
  87. package/src/assets/web-panel/assets/devWarning-DD8LWYUk.js +1 -0
  88. package/src/assets/web-panel/assets/{hasIn-yRPIU6sb.js → hasIn-DV4XA-9Q.js} +1 -1
  89. package/src/assets/web-panel/assets/{index-06QSa3lu.js → index-B7vJw85L.js} +1 -1
  90. package/src/assets/web-panel/assets/{index-BMtLrQ_2.js → index-B8lFTKvB.js} +1 -1
  91. package/src/assets/web-panel/assets/{index-Ca_WrpLv.js → index-BG8q2ruP.js} +1 -1
  92. package/src/assets/web-panel/assets/{index-BB6vndQ4.js → index-BLnhTvTW.js} +1 -1
  93. package/src/assets/web-panel/assets/{index-g_ZbMU32.js → index-BRzvcnNa.js} +1 -1
  94. package/src/assets/web-panel/assets/{index-Co41LvAQ.js → index-BVoAVyxu.js} +1 -1
  95. package/src/assets/web-panel/assets/{index-C1qvwqu6.js → index-BdWZ8SkV.js} +1 -1
  96. package/src/assets/web-panel/assets/{index-DPG-ZpDS.js → index-Bie6wUJF.js} +1 -1
  97. package/src/assets/web-panel/assets/{index-C1TOvQrI.js → index-CHRF04G3.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-C9vGPhlv.js → index-CRhQZ2Qm.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-CkJ_vwPY.js → index-CS6TRyFe.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-CI9zX_HP.js → index-CWdRRtPj.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-DVdMu7WX.js → index-CYOu0-kh.js} +1 -1
  102. package/src/assets/web-panel/assets/{index-DhZHHas9.js → index-ClZBGDhE.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-DoR3E0kH.js → index-Clq1H8f_.js} +1 -1
  104. package/src/assets/web-panel/assets/index-Cnx1SQa9.js +1 -0
  105. package/src/assets/web-panel/assets/{index-DmN9cfv0.js → index-CpEfuVwR.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-BVzaPW2D.js → index-D6wDswfi.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-xOjyFW4Q.js → index-D8AhGIum.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-6AVqepI5.js → index-D8wpSmf5.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-DXK5QEYX.js → index-DMH0Yf1N.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-DFREoy8V.js → index-DcUjc_dL.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-BSg5Da6w.js → index-DeN7De7q.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-CO_F1Qu3.js → index-DjOtMRdu.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-XLmzFKoX.js → index-DkMRQlNy.js} +1 -1
  114. package/src/assets/web-panel/assets/{index--f_sM-jB.js → index-DnETiQYX.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-M2Kx4V8G.js → index-Drhspi9z.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-DTV6uuEg.js → index-KgCbeEHM.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-CiSWEzLQ.js → index-L-uPkzzS.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-CbVz-2sW.js → index-OxVLKI4_.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-3ByeAY2K.js → index-PrmHq4aD.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-Be6UZot2.js → index-RXPhl0sY.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-Bqz7zZa7.js → index-ULxnYhN-.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-CI6-JPV0.js → index-asF__VSG.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-D_OnF9Ge.js → index-jsH5BzXV.js} +1 -1
  124. package/src/assets/web-panel/assets/{index-DilAf_75.js → index-r7CI1rPG.js} +1 -1
  125. package/src/assets/web-panel/assets/{index-C-KhRvoX.js → index-siuu7iQC.js} +1 -1
  126. package/src/assets/web-panel/assets/index-vTEl5Ekh.js +1 -0
  127. package/src/assets/web-panel/assets/{index-7ME2_dHQ.js → index-wEmgmG9r.js} +3 -3
  128. package/src/assets/web-panel/assets/{initDefaultProps-CziU9pk-.js → initDefaultProps-BcboSW0u.js} +1 -1
  129. package/src/assets/web-panel/assets/{motion-BOZPhyUp.js → motion-CJFBvrIr.js} +1 -1
  130. package/src/assets/web-panel/assets/{move-BwhvSRTb.js → move-Cn1g7xYn.js} +1 -1
  131. package/src/assets/web-panel/assets/{omit-BfU3fObW.js → omit-BfJzbWsb.js} +1 -1
  132. package/src/assets/web-panel/assets/{pickAttrs-eGMYizN6.js → pickAttrs-CmfqYIiL.js} +1 -1
  133. package/src/assets/web-panel/assets/{placementArrow-8A1qsZl_.js → placementArrow-Cta7hqTC.js} +1 -1
  134. package/src/assets/web-panel/assets/{responsiveObserve-BU9yRWZK.js → responsiveObserve-DaEkOCb-.js} +1 -1
  135. package/src/assets/web-panel/assets/{slide-BG428wmF.js → slide-CHTJZhYO.js} +1 -1
  136. package/src/assets/web-panel/assets/{statusUtils-_TFDDXxp.js → statusUtils-1p-VPpRr.js} +1 -1
  137. package/src/assets/web-panel/assets/{styleChecker-DuM2cLhx.js → styleChecker-ZSwUScrp.js} +1 -1
  138. package/src/assets/web-panel/assets/{useFlexGapSupport-fg8Q35CB.js → useFlexGapSupport-Viy5DmaP.js} +1 -1
  139. package/src/assets/web-panel/assets/{useFs-3EiVX8L4.js → useFs-OkD_oGXm.js} +1 -1
  140. package/src/assets/web-panel/assets/{usePersonalDataHub-C8OgHGoE.js → usePersonalDataHub-CRAxqDR6.js} +1 -1
  141. package/src/assets/web-panel/assets/{vnode--NhVoccz.js → vnode-TfIXtx5S.js} +1 -1
  142. package/src/assets/web-panel/assets/{zoom-Bf0hAHy7.js → zoom-Cyvmz3v6.js} +1 -1
  143. package/src/assets/web-panel/index.html +1 -1
  144. package/src/lib/agent-core.js +6 -6
  145. package/src/lib/terminal-setup.js +8 -4
  146. package/src/runtime/agent-core.js +33 -1
  147. package/src/runtime/coding-agent-policy.cjs +69 -0
  148. package/src/runtime/coding-agent-shell-policy.cjs +80 -15
  149. package/src/assets/web-panel/assets/EmailListRenderer-By5OyD2q.js +0 -1
  150. package/src/assets/web-panel/assets/MobileProjects-B8pQWHvj.js +0 -1
  151. package/src/assets/web-panel/assets/OrderTableRenderer-B085DzwZ.js +0 -1
  152. package/src/assets/web-panel/assets/PdhVaultBrowser-Cp_Cp_QM.js +0 -7
  153. package/src/assets/web-panel/assets/devWarning-Cx5sL2Te.js +0 -1
  154. package/src/assets/web-panel/assets/index-A3QJglda.js +0 -1
  155. package/src/assets/web-panel/assets/index-DYZJhSD2.js +0 -1
@@ -1 +1 @@
1
- import{I as y,J as _,U as b,R as i,c as a,K as r,V as u,o as ce,a as de,b as K,r as h,P as d,Q as p,S as k,F as A,Z as q,$ as Pe}from"./vendor-BvqAck49.js";import{_ as Ae,b as me,u as ue,E as fe,d as g}from"./index-7ME2_dHQ.js";import{s as Ue}from"./community-parser-CO25nZFt.js";import{o as ze,aV as Re,aA as Ee,aT as Me,aW as Ne,F as je,ak as Je,aP as De,R as Le}from"./icons-DP3uiYxy.js";function W(s){const n=Ue(s);if(!n)return null;try{return JSON.parse(n)}catch{}const t=n.match(/\{[\s\S]*\}|\[[\s\S]*\]/);if(!t)return null;try{return JSON.parse(t[0])}catch{return null}}const Be=Object.freeze(["note","post","article","document"]),We=Object.freeze(["pending","viewed","dismissed"]);function I(s,n=0){return typeof s=="number"&&Number.isFinite(s)?s:n}function pe(s){if(!s||typeof s!="object"||Array.isArray(s))return{};const n={};for(const[t,e]of Object.entries(s))typeof e=="number"&&Number.isFinite(e)&&(n[t]=e);return n}function Ye(s,n=0){if(!s||typeof s!="object")return null;const t=s.user_id??s.userId??"";if(!t)return null;const e=s.topics&&typeof s.topics=="object"&&!Array.isArray(s.topics)?pe(s.topics):{},z=s.interaction_weights??s.interactionWeights,M=z&&typeof z=="object"&&!Array.isArray(z)?pe(z):{};return{key:t,id:String(s.id||""),userId:t,topics:e,topicCount:Object.keys(e).length,interactionWeights:M,decayFactor:I(s.decay_factor??s.decayFactor,.9),lastUpdated:s.last_updated??s.lastUpdated??null,updateCount:I(s.update_count??s.updateCount,0),_idx:n}}function ye(s){const n=W(s);return Array.isArray(n)?n.map(Ye).filter(Boolean):[]}function Ve(s,n=0){if(!s||typeof s!="object")return null;const t=s.id||"";return t?{key:t,id:t,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:I(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:n}:null}function ge(s){const n=W(s);return Array.isArray(n)?n.map(Ve).filter(Boolean):[]}const Ge={total:0,pending:0,viewed:0,dismissed:0,feedbackCount:0,feedbackRate:0,avgScore:0};function _e(s){const n={...Ge},t=W(s);return!t||typeof t!="object"||Array.isArray(t)||(n.total=I(t.total,0),n.pending=I(t.pending,0),n.viewed=I(t.viewed,0),n.dismissed=I(t.dismissed,0),n.feedbackCount=I(t.feedbackCount,0),n.feedbackRate=I(t.feedbackRate,0),n.avgScore=I(t.avgScore,0)),n}function ve(s){const n=W(s);return Array.isArray(n)?n.filter(t=>t&&typeof t=="object"&&typeof t.topic=="string").map((t,e)=>({key:`${t.topic}-${e}`,topic:t.topic,weight:I(t.weight,0)})):[]}function ke(s){const n=W(s);return Array.isArray(n)?n.filter(t=>t&&typeof t=="object"&&typeof t.topic=="string"&&typeof t.action=="string").map((t,e)=>({key:`${t.topic}-${e}`,topic:t.topic,action:t.action,amount:I(t.amount,0)})):[]}function E(s){const n=W(s);return!n||typeof n!="object"||Array.isArray(n)?{ok:!1,reason:"",profileId:null,topicCount:null}:{ok:!!(n.updated||n.deleted||n.marked||n.dismissed||n.recorded||n.applied||n.profileId),reason:n.reason?String(n.reason):"",profileId:n.profileId?String(n.profileId):null,topicCount:typeof n.topicCount=="number"?n.topicCount:null}}function Ke(s){if(s==null||s==="")return"—";const n=typeof s=="number"?new Date(s):new Date(String(s));return isNaN(n.getTime())?String(s):n.toLocaleString("zh-CN",{hour12:!1})}const qe={__name:"Recommend",setup(s,{expose:n}){n();const{t}=me(),e=ue(),z=fe.PRESENTED_IMAGE_SIMPLE,M=h(!1),w=h(!1),Y=h(!1),N=h([]),S=h([]),O=h({total:0,pending:0,viewed:0,dismissed:0,feedbackCount:0,feedbackRate:0,avgScore:0}),T=h([]),F=h([]),v=h(null),U=h("recs"),j=h(""),P=h(""),J=h(!1),D=h(!1),x=de({userId:"",topicsJson:"",weightsJson:""}),Q=h(null),H=K(()=>N.value.map(o=>({value:o.userId,label:`${o.userId} (${t("recommend.userBar.topicSuffix",{count:o.topicCount})})`}))),Z=K(()=>[{title:t("recommend.recColumns.title"),key:"title"},{title:t("recommend.recColumns.contentType"),key:"contentType",width:"110px"},{title:t("recommend.recColumns.score"),key:"score",width:"180px"},{title:t("recommend.recColumns.reason"),key:"reason",width:"220px"},{title:t("recommend.recColumns.status"),key:"status",width:"100px"},{title:t("recommend.recColumns.feedback"),key:"feedback",width:"90px"},{title:t("recommend.recColumns.action"),key:"action",width:"210px"}]),V=K(()=>[{title:t("recommend.profileColumns.userId"),key:"userId"},{title:t("recommend.profileColumns.topicCount"),key:"topicCount",width:"110px"},{title:t("recommend.profileColumns.decayFactor"),key:"decayFactor",width:"110px"},{title:t("recommend.profileColumns.updateCount"),key:"updateCount",width:"110px"},{title:t("recommend.profileColumns.lastUpdated"),key:"lastUpdated",width:"180px"},{title:t("recommend.profileColumns.action"),key:"action",width:"200px"}]),ee=K(()=>{let o=S.value;return j.value&&(o=o.filter(c=>c.status===j.value)),P.value&&(o=o.filter(c=>c.contentType===P.value)),o});function te(o){const c=`recommend.type.${o}`,f=t(c);return f===c?o:f}function oe(o){return{note:"blue",post:"green",article:"purple",document:"orange"}[o]||"default"}function re(o){return{note:"#1677ff",post:"#52c41a",article:"#722ed1",document:"#fa8c16"}[o]||"#888"}function G(o){const c=`recommend.status.${o}`,f=t(c);return f===c?o:f}function X(o){return{pending:"processing",viewed:"green",dismissed:"default"}[o]||"default"}function ne(o){const c=`recommend.feedbackLabel.${o}`,f=t(c);return f===c?o:f}function $(o){return{like:"green",dislike:"red",later:"gold"}[o]||"default"}function R(o){return o>=.7?"#52c41a":o>=.4?"#1677ff":o>=.2?"#faad14":"#ff4d4f"}function ae(o){return o>=.7?"#52c41a":o>=.4?"#1677ff":o>=.2?"#faad14":"#888"}function l(o){try{return JSON.stringify(o,null,2)}catch{return String(o)}}async function m(){M.value=!0;try{const{output:o}=await e.execute("recommend profiles --json",1e4).catch(()=>({output:""}));N.value=ye(o),v.value&&!N.value.find(c=>c.userId===v.value)&&(v.value=null),v.value&&await C()}catch(o){g.error(t("recommend.messages.loadProfilesFailed",{err:o?.message||o}))}finally{M.value=!1}}async function C(){if(!v.value){S.value=[],O.value={total:0,pending:0,viewed:0,dismissed:0,feedbackCount:0,feedbackRate:0,avgScore:0},T.value=[];return}w.value=!0;try{const o=L(v.value),[c,f,B]=await Promise.all([e.execute(`recommend list ${o} --limit 200 --json`,1e4).catch(()=>({output:""})),e.execute(`recommend stats ${o} --json`,8e3).catch(()=>({output:""})),e.execute(`recommend top-interests ${o} --limit 30 --json`,8e3).catch(()=>({output:""}))]);S.value=ge(c.output),O.value=_e(f.output),T.value=ve(B.output)}catch(o){g.error(t("recommend.messages.loadUserFailed",{err:o?.message||o}))}finally{w.value=!1}}function L(o){return`"${String(o).replace(/"/g,'\\"')}"`}function be(){F.value=[],C()}function xe(o){v.value=o,U.value="recs",C()}async function he(){if(!x.userId.trim()){g.warning(t("recommend.messages.userIdRequired"));return}if(x.topicsJson.trim())try{JSON.parse(x.topicsJson)}catch{g.warning(t("recommend.messages.topicsJsonInvalid"));return}if(x.weightsJson.trim())try{JSON.parse(x.weightsJson)}catch{g.warning(t("recommend.messages.weightsJsonInvalid"));return}Y.value=!0;try{const o=[`recommend create-profile ${L(x.userId.trim())}`];x.topicsJson.trim()&&o.push(`-t ${se(x.topicsJson.trim())}`),x.weightsJson.trim()&&o.push(`-w ${se(x.weightsJson.trim())}`),o.push("--json");const{output:c}=await e.execute(o.join(" "),1e4),f=E(c);if(!f.ok){g.error(t("recommend.messages.createFailed",{err:f.reason||c.slice(0,120)}));return}g.success(t("recommend.messages.createOk",{id:f.profileId?.slice(0,8)||""})),J.value=!1;const B=x.userId.trim();le(),await m(),v.value=B,await C()}catch(o){g.error(t("recommend.messages.createFailed",{err:o?.message||o}))}finally{Y.value=!1}}function se(o){return`'${String(o).replace(/'/g,"'\\''")}'`}async function Ce(){if(v.value)try{const{output:o}=await e.execute(`recommend decay ${L(v.value)} --json`,8e3),c=E(o);if(!c.ok){g.error(t("recommend.messages.decayFailed",{err:c.reason||o.slice(0,120)}));return}g.success(c.topicCount!==null?t("recommend.messages.decayOkTopics",{count:c.topicCount}):t("recommend.messages.decayOk")),await m()}catch(o){g.error(t("recommend.messages.decayFailed",{err:o?.message||o}))}}async function we(){if(v.value)try{const{output:o}=await e.execute(`recommend suggest ${L(v.value)} --json`,8e3);F.value=ke(o),U.value="interests",F.value.length?g.success(t("recommend.messages.suggestFound",{count:F.value.length})):g.info(t("recommend.messages.suggestNone"))}catch(o){g.error(t("recommend.messages.loadSuggestFailed",{err:o?.message||o}))}}async function Se(o){try{const{output:c}=await e.execute(`recommend delete-profile ${L(o.userId)} --json`,8e3),f=E(c);if(!f.ok){g.error(t("recommend.messages.deleteFailed",{err:f.reason||c.slice(0,120)}));return}g.success(t("recommend.messages.deleteOk")),v.value===o.userId&&(v.value=null),await m()}catch(c){g.error(t("recommend.messages.deleteFailed",{err:c?.message||c}))}}function Te(o){Q.value=o,D.value=!0}async function Ie(o){try{const{output:c}=await e.execute(`recommend view ${o.id} --json`,8e3),f=E(c);if(!f.ok){g.error(t("recommend.messages.viewFailed",{err:f.reason||c.slice(0,120)}));return}g.success(t("recommend.messages.viewOk")),await C()}catch(c){g.error(t("recommend.messages.viewFailed",{err:c?.message||c}))}}async function Oe(o,c){try{const{output:f}=await e.execute(`recommend feedback ${o.id} ${c} --json`,8e3),B=E(f);if(!B.ok){g.error(t("recommend.messages.feedbackFailed",{err:B.reason||f.slice(0,120)}));return}g.success(t("recommend.messages.feedbackOk")),await C()}catch(f){g.error(t("recommend.messages.feedbackFailed",{err:f?.message||f}))}}async function Fe(o){try{const{output:c}=await e.execute(`recommend dismiss ${o.id} --json`,8e3),f=E(c);if(!f.ok){g.error(t("recommend.messages.dismissFailed",{err:f.reason||c.slice(0,120)}));return}g.success(t("recommend.messages.dismissOk")),await C()}catch(c){g.error(t("recommend.messages.dismissFailed",{err:c?.message||c}))}}function le(){x.userId="",x.topicsJson="",x.weightsJson=""}ce(m);const ie={t,ws:e,EMPTY_IMG:z,loading:M,loadingRecs:w,creating:Y,profiles:N,recs:S,userStats:O,topInterests:T,suggestions:F,selectedUser:v,activeTab:U,statusFilter:j,typeFilter:P,showCreateProfileModal:J,showDetailsModal:D,createForm:x,currentProfile:Q,userOptions:H,recColumns:Z,profileColumns:V,filteredRecs:ee,typeLabel:te,typeColor:oe,typeBarColor:re,statusLabel:G,statusColor:X,feedbackLabel:ne,feedbackColor:$,scoreColor:R,weightColor:ae,formatJson:l,loadAll:m,loadUserData:C,encodeArg:L,onUserChange:be,selectAndSwitch:xe,submitCreateProfile:he,shellQuote:se,applyDecay:Ce,loadSuggestions:we,deleteProfile:Se,viewProfileDetails:Te,markViewed:Ie,provideFeedback:Oe,dismissRec:Fe,resetCreateForm:le,ref:h,computed:K,onMounted:ce,reactive:de,get useI18n(){return me},get ReloadOutlined(){return Le},get UserAddOutlined(){return De},get UserOutlined(){return Je},get FireOutlined(){return je},get EyeInvisibleOutlined(){return Ne},get LikeOutlined(){return Me},get StarOutlined(){return Ee},get FieldTimeOutlined(){return Re},get BulbOutlined(){return ze},get message(){return g},get Empty(){return fe},get useWsStore(){return ue},get parseProfiles(){return ye},get parseRecommendations(){return ge},get parseUserStats(){return _e},get parseTopInterests(){return ve},get parseSuggestions(){return ke},get parseActionResult(){return E},get formatRecommendTime(){return Ke},get CONTENT_TYPE_IDS(){return Be},get RECOMMENDATION_STATUSES(){return We}};return Object.defineProperty(ie,"__isScriptSetup",{enumerable:!1,value:!0}),ie}},Qe={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},He={class:"page-title"},Ze={class:"page-sub"},Xe={style:{display:"flex","align-items":"center",gap:"12px","flex-wrap":"wrap"}},$e={style:{color:"var(--text-secondary)","font-size":"12px"}},et={class:"type-name"},tt={class:"filter-bar"},ot={style:{color:"var(--text-primary)","font-weight":"500"}},rt={style:{color:"var(--text-muted)","font-size":"11px","margin-top":"2px"}},nt={key:3,style:{color:"var(--text-secondary)","font-size":"12px"}},at={key:1,style:{color:"var(--text-muted)"}},st={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},lt={key:0,style:{color:"var(--text-primary)","font-family":"monospace","font-weight":"500"}},it={key:2,style:{color:"var(--text-secondary)","font-family":"monospace","font-size":"12px"}},ct={key:3,style:{color:"var(--text-secondary)"}},dt={key:4,style:{color:"var(--text-secondary)","font-size":"11px"}},mt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},ut={key:1},ft={class:"interest-topic"},pt={style:{"margin-left":"8px","font-family":"monospace",color:"var(--text-primary)"}},yt={style:{"margin-left":"auto",color:"var(--text-secondary)","font-size":"12px"}},gt={key:0,style:{"padding-top":"8px"}},_t={style:{"font-family":"monospace","font-size":"12px"}},vt={style:{color:"var(--text-primary)","font-size":"13px",margin:"16px 0 8px"}},kt={key:1},bt={class:"interest-topic"},xt={key:2,style:{color:"var(--text-primary)","font-size":"13px",margin:"16px 0 8px"}},ht={key:3,class:"weights-pre"};function Ct(s,n,t,e,z,M){const w=y("a-button"),Y=y("a-space"),N=y("a-select"),S=y("a-card"),O=y("a-statistic"),T=y("a-col"),F=y("a-row"),v=y("a-tag"),U=y("a-radio-button"),j=y("a-radio-group"),P=y("a-empty"),J=y("a-progress"),D=y("a-menu-item"),x=y("a-menu"),Q=y("a-dropdown"),H=y("a-popconfirm"),Z=y("a-table"),V=y("a-tab-pane"),ee=y("a-list-item"),te=y("a-list"),oe=y("a-tabs"),re=y("a-input"),G=y("a-form-item"),X=y("a-textarea"),ne=y("a-form"),$=y("a-modal"),R=y("a-descriptions-item"),ae=y("a-descriptions");return d(),_("div",null,[b("div",Qe,[b("div",null,[b("h2",He,i(e.t("recommend.title")),1),b("p",Ze,i(e.t("recommend.subtitle")),1)]),a(Y,null,{default:r(()=>[a(w,{loading:e.loading,onClick:e.loadAll},{icon:r(()=>[a(e.ReloadOutlined)]),default:r(()=>[p(" "+i(e.t("recommend.refresh")),1)]),_:1},8,["loading"]),a(w,{type:"primary",onClick:n[0]||(n[0]=l=>e.showCreateProfileModal=!0)},{icon:r(()=>[a(e.UserAddOutlined)]),default:r(()=>[p(" "+i(e.t("recommend.createProfile")),1)]),_:1})]),_:1})]),u(" User selector "),a(S,{size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"},"body-style":{padding:"10px 16px"}},{default:r(()=>[b("div",Xe,[b("span",$e,i(e.t("recommend.userBar.currentUser")),1),a(N,{value:e.selectedUser,"onUpdate:value":n[1]||(n[1]=l=>e.selectedUser=l),options:e.userOptions,placeholder:e.t("recommend.userBar.selectPlaceholder"),style:{"min-width":"280px"},"allow-clear":"","show-search":"",onChange:e.onUserChange},null,8,["value","options","placeholder"]),e.selectedUser?(d(),k(w,{key:0,size:"small",onClick:e.applyDecay},{icon:r(()=>[a(e.FieldTimeOutlined)]),default:r(()=>[p(" "+i(e.t("recommend.userBar.applyDecay")),1)]),_:1})):u("v-if",!0),e.selectedUser?(d(),k(w,{key:1,size:"small",onClick:e.loadSuggestions},{icon:r(()=>[a(e.BulbOutlined)]),default:r(()=>[p(" "+i(e.t("recommend.userBar.suggest")),1)]),_:1})):u("v-if",!0)])]),_:1}),u(" Stat cards "),a(F,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:r(()=>[a(T,{xs:12,sm:8,lg:5},{default:r(()=>[a(S,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[a(O,{title:e.t("recommend.stats.profiles"),value:e.profiles.length,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:r(()=>[a(e.UserOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),a(T,{xs:12,sm:8,lg:5},{default:r(()=>[a(S,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[a(O,{title:e.t("recommend.stats.totalRecs"),value:e.userStats.total,"value-style":{color:"#722ed1",fontSize:"20px"}},{prefix:r(()=>[a(e.FireOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),a(T,{xs:12,sm:8,lg:5},{default:r(()=>[a(S,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[a(O,{title:e.t("recommend.stats.pending"),value:e.userStats.pending,"value-style":{color:e.userStats.pending>0?"#faad14":"#888",fontSize:"20px"}},{prefix:r(()=>[a(e.EyeInvisibleOutlined)]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),a(T,{xs:12,sm:8,lg:5},{default:r(()=>[a(S,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[a(O,{title:e.t("recommend.stats.feedbackRate"),value:e.userStats.feedbackRate*100,suffix:"%",precision:1,"value-style":{color:"#13c2c2",fontSize:"20px"}},{prefix:r(()=>[a(e.LikeOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),a(T,{xs:24,sm:8,lg:4},{default:r(()=>[a(S,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[a(O,{title:e.t("recommend.stats.avgScore"),value:e.userStats.avgScore,precision:3,"value-style":{color:e.scoreColor(e.userStats.avgScore),fontSize:"20px"}},{prefix:r(()=>[a(e.StarOutlined)]),_:1},8,["title","value","value-style"])]),_:1})]),_:1})]),_:1}),u(" Content type catalogue "),a(S,{title:e.t("recommend.typeCatalogue"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"},"body-style":{padding:"12px 16px"}},{default:r(()=>[a(F,{gutter:[12,12]},{default:r(()=>[(d(!0),_(A,null,q(e.CONTENT_TYPE_IDS,l=>(d(),k(T,{key:l,xs:12,sm:6},{default:r(()=>[b("div",{class:"type-pill",style:Pe({borderLeftColor:e.typeBarColor(l)})},[a(v,{color:e.typeColor(l),style:{"font-family":"monospace"}},{default:r(()=>[p(i(l),1)]),_:2},1032,["color"]),b("div",et,i(e.typeLabel(l)),1)],4)]),_:2},1024))),128))]),_:1})]),_:1},8,["title"]),u(" Tabs "),a(oe,{activeKey:e.activeTab,"onUpdate:activeKey":n[4]||(n[4]=l=>e.activeTab=l),class:"recommend-tabs"},{default:r(()=>[u(" ── Recommendations tab ────────────────────────────────── "),a(V,{key:"recs",tab:e.t("recommend.tabs.recs")},{default:r(()=>[b("div",tt,[a(j,{value:e.statusFilter,"onUpdate:value":n[2]||(n[2]=l=>e.statusFilter=l),size:"small","button-style":"solid"},{default:r(()=>[a(U,{value:""},{default:r(()=>[p(i(e.t("recommend.filter.allStatuses")),1)]),_:1}),(d(!0),_(A,null,q(e.RECOMMENDATION_STATUSES,l=>(d(),k(U,{key:l,value:l},{default:r(()=>[p(i(e.statusLabel(l)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),a(j,{value:e.typeFilter,"onUpdate:value":n[3]||(n[3]=l=>e.typeFilter=l),size:"small"},{default:r(()=>[a(U,{value:""},{default:r(()=>[p(i(e.t("recommend.filter.allTypes")),1)]),_:1}),(d(!0),_(A,null,q(e.CONTENT_TYPE_IDS,l=>(d(),k(U,{key:l,value:l},{default:r(()=>[p(i(e.typeLabel(l)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),e.selectedUser?(d(),k(Z,{key:1,columns:e.recColumns,"data-source":e.filteredRecs,pagination:{pageSize:20,showTotal:l=>e.t("recommend.totals.rows",{count:l})},size:"small",loading:e.loadingRecs,style:{background:"var(--bg-card)"}},{bodyCell:r(({column:l,record:m})=>[l.key==="title"?(d(),_(A,{key:0},[b("span",ot,i(m.title||e.t("recommend.noTitle")),1),b("div",rt,i(m.contentId),1)],64)):u("v-if",!0),l.key==="contentType"?(d(),k(v,{key:1,color:e.typeColor(m.contentType),style:{"font-family":"monospace"}},{default:r(()=>[p(i(m.contentType),1)]),_:2},1032,["color"])):u("v-if",!0),l.key==="score"?(d(),k(J,{key:2,percent:Math.round(m.score*100),"stroke-color":e.scoreColor(m.score),size:"small",format:()=>m.score.toFixed(3)},null,8,["percent","stroke-color","format"])):u("v-if",!0),l.key==="reason"?(d(),_("span",nt,i(m.reason),1)):u("v-if",!0),l.key==="status"?(d(),k(v,{key:4,color:e.statusColor(m.status)},{default:r(()=>[p(i(e.statusLabel(m.status)),1)]),_:2},1032,["color"])):u("v-if",!0),l.key==="feedback"?(d(),_(A,{key:5},[m.feedback?(d(),k(v,{key:0,color:e.feedbackColor(m.feedback)},{default:r(()=>[p(i(e.feedbackLabel(m.feedback)),1)]),_:2},1032,["color"])):(d(),_("span",at,"—"))],64)):u("v-if",!0),l.key==="action"?(d(),_(A,{key:6},[m.status==="pending"?(d(),k(w,{key:0,size:"small",type:"link",onClick:C=>e.markViewed(m)},{default:r(()=>[p(i(e.t("recommend.rowActions.view")),1)]),_:1},8,["onClick"])):u("v-if",!0),m.status!=="dismissed"?(d(),k(Q,{key:1},{overlay:r(()=>[a(x,{onClick:({key:C})=>e.provideFeedback(m,C)},{default:r(()=>[a(D,{key:"like",style:{color:"#52c41a"}},{default:r(()=>[p(i(e.t("recommend.feedbackMenu.like")),1)]),_:1}),a(D,{key:"dislike",style:{color:"#ff4d4f"}},{default:r(()=>[p(i(e.t("recommend.feedbackMenu.dislike")),1)]),_:1}),a(D,{key:"later"},{default:r(()=>[p(i(e.t("recommend.feedbackMenu.later")),1)]),_:1})]),_:1},8,["onClick"])]),default:r(()=>[a(w,{size:"small",type:"link"},{default:r(()=>[p(i(e.t("recommend.feedbackDropdown")),1)]),_:1})]),_:2},1024)):u("v-if",!0),m.status!=="dismissed"?(d(),k(H,{key:2,title:e.t("recommend.rowActions.dismissConfirmTitle"),"ok-text":e.t("recommend.rowActions.dismissOk"),"cancel-text":e.t("common.cancel"),onConfirm:C=>e.dismissRec(m)},{default:r(()=>[a(w,{size:"small",type:"link",danger:""},{default:r(()=>[p(i(e.t("recommend.rowActions.dismiss")),1)]),_:1})]),_:1},8,["title","ok-text","cancel-text","onConfirm"])):u("v-if",!0)],64)):u("v-if",!0)]),emptyText:r(()=>[b("div",st,[a(e.FireOutlined,{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),p(" "+i(e.statusFilter||e.typeFilter?e.t("recommend.empty.filtered"):e.t("recommend.empty.noRecsHint")),1)])]),_:1},8,["columns","data-source","pagination","loading"])):(d(),k(P,{key:0,description:e.t("recommend.empty.selectUser"),image:e.EMPTY_IMG,style:{padding:"40px 0"}},null,8,["description","image"]))]),_:1},8,["tab"]),u(" ── Profiles tab ───────────────────────────────────────── "),a(V,{key:"profiles",tab:e.t("recommend.tabs.profiles")},{default:r(()=>[a(Z,{columns:e.profileColumns,"data-source":e.profiles,pagination:{pageSize:20,showTotal:l=>e.t("recommend.totals.profiles",{count:l})},size:"small",loading:e.loading,style:{background:"var(--bg-card)"}},{bodyCell:r(({column:l,record:m})=>[l.key==="userId"?(d(),_("span",lt,i(m.userId),1)):u("v-if",!0),l.key==="topicCount"?(d(),k(v,{key:1,color:"blue"},{default:r(()=>[p(i(e.t("recommend.topicTagSuffix",{count:m.topicCount})),1)]),_:2},1024)):u("v-if",!0),l.key==="decayFactor"?(d(),_("span",it,i(m.decayFactor.toFixed(2)),1)):u("v-if",!0),l.key==="updateCount"?(d(),_("span",ct,i(m.updateCount),1)):u("v-if",!0),l.key==="lastUpdated"?(d(),_("span",dt,i(e.formatRecommendTime(m.lastUpdated)),1)):u("v-if",!0),l.key==="action"?(d(),_(A,{key:5},[a(w,{size:"small",type:"link",onClick:C=>e.viewProfileDetails(m)},{default:r(()=>[p(i(e.t("recommend.rowActions.details")),1)]),_:1},8,["onClick"]),a(w,{size:"small",type:"link",onClick:C=>e.selectAndSwitch(m.userId)},{default:r(()=>[p(i(e.t("recommend.rowActions.switch")),1)]),_:1},8,["onClick"]),a(H,{title:e.t("recommend.rowActions.deleteConfirmTitle"),"ok-text":e.t("recommend.rowActions.deleteOk"),"cancel-text":e.t("common.cancel"),onConfirm:C=>e.deleteProfile(m)},{default:r(()=>[a(w,{size:"small",type:"link",danger:""},{default:r(()=>[p(i(e.t("recommend.rowActions.delete")),1)]),_:1})]),_:1},8,["title","ok-text","cancel-text","onConfirm"])],64)):u("v-if",!0)]),emptyText:r(()=>[b("div",mt,[a(e.UserOutlined,{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),p(" "+i(e.t("recommend.empty.noProfiles")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),u(" ── Top interests tab ──────────────────────────────────── "),a(V,{key:"interests",tab:e.t("recommend.tabs.interests")},{default:r(()=>[e.selectedUser?(d(),k(F,{key:1,gutter:[16,16]},{default:r(()=>[a(T,{xs:24,lg:14},{default:r(()=>[a(S,{title:e.t("recommend.interest.topicWeights"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[e.topInterests.length?(d(),_("div",ut,[(d(!0),_(A,null,q(e.topInterests,l=>(d(),_("div",{key:l.key,class:"interest-row"},[b("span",ft,i(l.topic),1),a(J,{percent:Math.round(l.weight*100),"stroke-color":e.weightColor(l.weight),format:()=>l.weight.toFixed(3),size:"small",style:{flex:"1","margin-left":"12px"}},null,8,["percent","stroke-color","format"])]))),128))])):(d(),k(P,{key:0,description:e.t("recommend.empty.noInterests"),image:e.EMPTY_IMG},null,8,["description","image"]))]),_:1},8,["title"])]),_:1}),a(T,{xs:24,lg:10},{default:r(()=>[a(S,{title:e.t("recommend.interest.feedbackSuggest"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[e.suggestions.length?(d(),k(te,{key:1,size:"small","data-source":e.suggestions},{renderItem:r(({item:l})=>[a(ee,null,{default:r(()=>[a(v,{color:l.action==="boost"?"green":"orange"},{default:r(()=>[p(i(l.action==="boost"?e.t("recommend.interest.boost"):e.t("recommend.interest.lower")),1)]),_:2},1032,["color"]),b("span",pt,i(l.topic),1),b("span",yt,"±"+i(l.amount),1)]),_:2},1024)]),_:1},8,["data-source"])):(d(),k(P,{key:0,description:e.t("recommend.empty.noSuggestions"),image:e.EMPTY_IMG},null,8,["description","image"]))]),_:1},8,["title"])]),_:1})]),_:1})):(d(),k(P,{key:0,description:e.t("recommend.empty.selectUser"),image:e.EMPTY_IMG,style:{padding:"40px 0"}},null,8,["description","image"]))]),_:1},8,["tab"])]),_:1},8,["activeKey"]),u(" ── Create profile modal ───────────────────────────────── "),a($,{open:e.showCreateProfileModal,"onUpdate:open":n[8]||(n[8]=l=>e.showCreateProfileModal=l),title:e.t("recommend.create.title"),"confirm-loading":e.creating,width:560,"ok-text":e.t("recommend.create.ok"),"cancel-text":e.t("common.cancel"),onOk:e.submitCreateProfile,onCancel:e.resetCreateForm},{default:r(()=>[a(ne,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:r(()=>[a(G,{label:e.t("recommend.create.userIdLabel"),required:""},{default:r(()=>[a(re,{value:e.createForm.userId,"onUpdate:value":n[5]||(n[5]=l=>e.createForm.userId=l),placeholder:e.t("recommend.create.userIdPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),a(G,{label:e.t("recommend.create.topicsLabel")},{default:r(()=>[a(X,{value:e.createForm.topicsJson,"onUpdate:value":n[6]||(n[6]=l=>e.createForm.topicsJson=l),placeholder:e.t("recommend.create.topicsPlaceholder"),"auto-size":{minRows:2,maxRows:5}},null,8,["value","placeholder"])]),_:1},8,["label"]),a(G,{label:e.t("recommend.create.weightsLabel")},{default:r(()=>[a(X,{value:e.createForm.weightsJson,"onUpdate:value":n[7]||(n[7]=l=>e.createForm.weightsJson=l),placeholder:e.t("recommend.create.weightsPlaceholder"),"auto-size":{minRows:2,maxRows:5}},null,8,["value","placeholder"])]),_:1},8,["label"])]),_:1})]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),u(" ── Profile details modal ──────────────────────────────── "),a($,{open:e.showDetailsModal,"onUpdate:open":n[9]||(n[9]=l=>e.showDetailsModal=l),title:e.t("recommend.details.title",{userId:e.currentProfile?.userId||""}),width:680,footer:null},{default:r(()=>[e.currentProfile?(d(),_("div",gt,[a(ae,{column:2,size:"small",bordered:""},{default:r(()=>[a(R,{label:e.t("recommend.details.id"),span:2},{default:r(()=>[b("span",_t,i(e.currentProfile.id),1)]),_:1},8,["label"]),a(R,{label:e.t("recommend.details.topicCount")},{default:r(()=>[p(i(e.currentProfile.topicCount),1)]),_:1},8,["label"]),a(R,{label:e.t("recommend.details.decayFactor")},{default:r(()=>[p(i(e.currentProfile.decayFactor.toFixed(2)),1)]),_:1},8,["label"]),a(R,{label:e.t("recommend.details.updateCount")},{default:r(()=>[p(i(e.currentProfile.updateCount),1)]),_:1},8,["label"]),a(R,{label:e.t("recommend.details.lastUpdated")},{default:r(()=>[p(i(e.formatRecommendTime(e.currentProfile.lastUpdated)),1)]),_:1},8,["label"])]),_:1}),b("h4",vt,i(e.t("recommend.details.topicWeights")),1),Object.keys(e.currentProfile.topics).length?(d(),_("div",kt,[(d(!0),_(A,null,q(e.currentProfile.topics,(l,m)=>(d(),_("div",{key:m,class:"interest-row"},[b("span",bt,i(m),1),a(J,{percent:Math.round(l*100),"stroke-color":e.weightColor(l),format:()=>l.toFixed(3),size:"small",style:{flex:"1","margin-left":"12px"}},null,8,["percent","stroke-color","format"])]))),128))])):(d(),k(P,{key:0,description:e.t("recommend.empty.noTopics"),image:e.EMPTY_IMG},null,8,["description","image"])),Object.keys(e.currentProfile.interactionWeights).length?(d(),_("h4",xt,i(e.t("recommend.details.interactionWeights")),1)):u("v-if",!0),Object.keys(e.currentProfile.interactionWeights).length?(d(),_("pre",ht,i(e.formatJson(e.currentProfile.interactionWeights)),1)):u("v-if",!0)])):u("v-if",!0)]),_:1},8,["open","title"])])}const Ot=Ae(qe,[["render",Ct],["__scopeId","data-v-9cfd9dba"],["__file","/tmp/cc-web-panel-PV9Dxg/repo/packages/web-panel/src/views/Recommend.vue"]]);export{Ot as default};
1
+ import{I as y,J as _,U as b,R as i,c as a,K as r,V as u,o as ce,a as de,b as K,r as h,P as d,Q as p,S as k,F as A,Z as q,$ as Pe}from"./vendor-BvqAck49.js";import{_ as Ae,b as me,u as ue,E as fe,d as g}from"./index-wEmgmG9r.js";import{s as Ue}from"./community-parser-CO25nZFt.js";import{o as ze,aV as Re,aA as Ee,aT as Me,aW as Ne,F as je,ak as Je,aP as De,R as Le}from"./icons-DP3uiYxy.js";function W(s){const n=Ue(s);if(!n)return null;try{return JSON.parse(n)}catch{}const t=n.match(/\{[\s\S]*\}|\[[\s\S]*\]/);if(!t)return null;try{return JSON.parse(t[0])}catch{return null}}const Be=Object.freeze(["note","post","article","document"]),We=Object.freeze(["pending","viewed","dismissed"]);function I(s,n=0){return typeof s=="number"&&Number.isFinite(s)?s:n}function pe(s){if(!s||typeof s!="object"||Array.isArray(s))return{};const n={};for(const[t,e]of Object.entries(s))typeof e=="number"&&Number.isFinite(e)&&(n[t]=e);return n}function Ye(s,n=0){if(!s||typeof s!="object")return null;const t=s.user_id??s.userId??"";if(!t)return null;const e=s.topics&&typeof s.topics=="object"&&!Array.isArray(s.topics)?pe(s.topics):{},z=s.interaction_weights??s.interactionWeights,M=z&&typeof z=="object"&&!Array.isArray(z)?pe(z):{};return{key:t,id:String(s.id||""),userId:t,topics:e,topicCount:Object.keys(e).length,interactionWeights:M,decayFactor:I(s.decay_factor??s.decayFactor,.9),lastUpdated:s.last_updated??s.lastUpdated??null,updateCount:I(s.update_count??s.updateCount,0),_idx:n}}function ye(s){const n=W(s);return Array.isArray(n)?n.map(Ye).filter(Boolean):[]}function Ve(s,n=0){if(!s||typeof s!="object")return null;const t=s.id||"";return t?{key:t,id:t,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:I(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:n}:null}function ge(s){const n=W(s);return Array.isArray(n)?n.map(Ve).filter(Boolean):[]}const Ge={total:0,pending:0,viewed:0,dismissed:0,feedbackCount:0,feedbackRate:0,avgScore:0};function _e(s){const n={...Ge},t=W(s);return!t||typeof t!="object"||Array.isArray(t)||(n.total=I(t.total,0),n.pending=I(t.pending,0),n.viewed=I(t.viewed,0),n.dismissed=I(t.dismissed,0),n.feedbackCount=I(t.feedbackCount,0),n.feedbackRate=I(t.feedbackRate,0),n.avgScore=I(t.avgScore,0)),n}function ve(s){const n=W(s);return Array.isArray(n)?n.filter(t=>t&&typeof t=="object"&&typeof t.topic=="string").map((t,e)=>({key:`${t.topic}-${e}`,topic:t.topic,weight:I(t.weight,0)})):[]}function ke(s){const n=W(s);return Array.isArray(n)?n.filter(t=>t&&typeof t=="object"&&typeof t.topic=="string"&&typeof t.action=="string").map((t,e)=>({key:`${t.topic}-${e}`,topic:t.topic,action:t.action,amount:I(t.amount,0)})):[]}function E(s){const n=W(s);return!n||typeof n!="object"||Array.isArray(n)?{ok:!1,reason:"",profileId:null,topicCount:null}:{ok:!!(n.updated||n.deleted||n.marked||n.dismissed||n.recorded||n.applied||n.profileId),reason:n.reason?String(n.reason):"",profileId:n.profileId?String(n.profileId):null,topicCount:typeof n.topicCount=="number"?n.topicCount:null}}function Ke(s){if(s==null||s==="")return"—";const n=typeof s=="number"?new Date(s):new Date(String(s));return isNaN(n.getTime())?String(s):n.toLocaleString("zh-CN",{hour12:!1})}const qe={__name:"Recommend",setup(s,{expose:n}){n();const{t}=me(),e=ue(),z=fe.PRESENTED_IMAGE_SIMPLE,M=h(!1),w=h(!1),Y=h(!1),N=h([]),S=h([]),O=h({total:0,pending:0,viewed:0,dismissed:0,feedbackCount:0,feedbackRate:0,avgScore:0}),T=h([]),F=h([]),v=h(null),U=h("recs"),j=h(""),P=h(""),J=h(!1),D=h(!1),x=de({userId:"",topicsJson:"",weightsJson:""}),Q=h(null),H=K(()=>N.value.map(o=>({value:o.userId,label:`${o.userId} (${t("recommend.userBar.topicSuffix",{count:o.topicCount})})`}))),Z=K(()=>[{title:t("recommend.recColumns.title"),key:"title"},{title:t("recommend.recColumns.contentType"),key:"contentType",width:"110px"},{title:t("recommend.recColumns.score"),key:"score",width:"180px"},{title:t("recommend.recColumns.reason"),key:"reason",width:"220px"},{title:t("recommend.recColumns.status"),key:"status",width:"100px"},{title:t("recommend.recColumns.feedback"),key:"feedback",width:"90px"},{title:t("recommend.recColumns.action"),key:"action",width:"210px"}]),V=K(()=>[{title:t("recommend.profileColumns.userId"),key:"userId"},{title:t("recommend.profileColumns.topicCount"),key:"topicCount",width:"110px"},{title:t("recommend.profileColumns.decayFactor"),key:"decayFactor",width:"110px"},{title:t("recommend.profileColumns.updateCount"),key:"updateCount",width:"110px"},{title:t("recommend.profileColumns.lastUpdated"),key:"lastUpdated",width:"180px"},{title:t("recommend.profileColumns.action"),key:"action",width:"200px"}]),ee=K(()=>{let o=S.value;return j.value&&(o=o.filter(c=>c.status===j.value)),P.value&&(o=o.filter(c=>c.contentType===P.value)),o});function te(o){const c=`recommend.type.${o}`,f=t(c);return f===c?o:f}function oe(o){return{note:"blue",post:"green",article:"purple",document:"orange"}[o]||"default"}function re(o){return{note:"#1677ff",post:"#52c41a",article:"#722ed1",document:"#fa8c16"}[o]||"#888"}function G(o){const c=`recommend.status.${o}`,f=t(c);return f===c?o:f}function X(o){return{pending:"processing",viewed:"green",dismissed:"default"}[o]||"default"}function ne(o){const c=`recommend.feedbackLabel.${o}`,f=t(c);return f===c?o:f}function $(o){return{like:"green",dislike:"red",later:"gold"}[o]||"default"}function R(o){return o>=.7?"#52c41a":o>=.4?"#1677ff":o>=.2?"#faad14":"#ff4d4f"}function ae(o){return o>=.7?"#52c41a":o>=.4?"#1677ff":o>=.2?"#faad14":"#888"}function l(o){try{return JSON.stringify(o,null,2)}catch{return String(o)}}async function m(){M.value=!0;try{const{output:o}=await e.execute("recommend profiles --json",1e4).catch(()=>({output:""}));N.value=ye(o),v.value&&!N.value.find(c=>c.userId===v.value)&&(v.value=null),v.value&&await C()}catch(o){g.error(t("recommend.messages.loadProfilesFailed",{err:o?.message||o}))}finally{M.value=!1}}async function C(){if(!v.value){S.value=[],O.value={total:0,pending:0,viewed:0,dismissed:0,feedbackCount:0,feedbackRate:0,avgScore:0},T.value=[];return}w.value=!0;try{const o=L(v.value),[c,f,B]=await Promise.all([e.execute(`recommend list ${o} --limit 200 --json`,1e4).catch(()=>({output:""})),e.execute(`recommend stats ${o} --json`,8e3).catch(()=>({output:""})),e.execute(`recommend top-interests ${o} --limit 30 --json`,8e3).catch(()=>({output:""}))]);S.value=ge(c.output),O.value=_e(f.output),T.value=ve(B.output)}catch(o){g.error(t("recommend.messages.loadUserFailed",{err:o?.message||o}))}finally{w.value=!1}}function L(o){return`"${String(o).replace(/"/g,'\\"')}"`}function be(){F.value=[],C()}function xe(o){v.value=o,U.value="recs",C()}async function he(){if(!x.userId.trim()){g.warning(t("recommend.messages.userIdRequired"));return}if(x.topicsJson.trim())try{JSON.parse(x.topicsJson)}catch{g.warning(t("recommend.messages.topicsJsonInvalid"));return}if(x.weightsJson.trim())try{JSON.parse(x.weightsJson)}catch{g.warning(t("recommend.messages.weightsJsonInvalid"));return}Y.value=!0;try{const o=[`recommend create-profile ${L(x.userId.trim())}`];x.topicsJson.trim()&&o.push(`-t ${se(x.topicsJson.trim())}`),x.weightsJson.trim()&&o.push(`-w ${se(x.weightsJson.trim())}`),o.push("--json");const{output:c}=await e.execute(o.join(" "),1e4),f=E(c);if(!f.ok){g.error(t("recommend.messages.createFailed",{err:f.reason||c.slice(0,120)}));return}g.success(t("recommend.messages.createOk",{id:f.profileId?.slice(0,8)||""})),J.value=!1;const B=x.userId.trim();le(),await m(),v.value=B,await C()}catch(o){g.error(t("recommend.messages.createFailed",{err:o?.message||o}))}finally{Y.value=!1}}function se(o){return`'${String(o).replace(/'/g,"'\\''")}'`}async function Ce(){if(v.value)try{const{output:o}=await e.execute(`recommend decay ${L(v.value)} --json`,8e3),c=E(o);if(!c.ok){g.error(t("recommend.messages.decayFailed",{err:c.reason||o.slice(0,120)}));return}g.success(c.topicCount!==null?t("recommend.messages.decayOkTopics",{count:c.topicCount}):t("recommend.messages.decayOk")),await m()}catch(o){g.error(t("recommend.messages.decayFailed",{err:o?.message||o}))}}async function we(){if(v.value)try{const{output:o}=await e.execute(`recommend suggest ${L(v.value)} --json`,8e3);F.value=ke(o),U.value="interests",F.value.length?g.success(t("recommend.messages.suggestFound",{count:F.value.length})):g.info(t("recommend.messages.suggestNone"))}catch(o){g.error(t("recommend.messages.loadSuggestFailed",{err:o?.message||o}))}}async function Se(o){try{const{output:c}=await e.execute(`recommend delete-profile ${L(o.userId)} --json`,8e3),f=E(c);if(!f.ok){g.error(t("recommend.messages.deleteFailed",{err:f.reason||c.slice(0,120)}));return}g.success(t("recommend.messages.deleteOk")),v.value===o.userId&&(v.value=null),await m()}catch(c){g.error(t("recommend.messages.deleteFailed",{err:c?.message||c}))}}function Te(o){Q.value=o,D.value=!0}async function Ie(o){try{const{output:c}=await e.execute(`recommend view ${o.id} --json`,8e3),f=E(c);if(!f.ok){g.error(t("recommend.messages.viewFailed",{err:f.reason||c.slice(0,120)}));return}g.success(t("recommend.messages.viewOk")),await C()}catch(c){g.error(t("recommend.messages.viewFailed",{err:c?.message||c}))}}async function Oe(o,c){try{const{output:f}=await e.execute(`recommend feedback ${o.id} ${c} --json`,8e3),B=E(f);if(!B.ok){g.error(t("recommend.messages.feedbackFailed",{err:B.reason||f.slice(0,120)}));return}g.success(t("recommend.messages.feedbackOk")),await C()}catch(f){g.error(t("recommend.messages.feedbackFailed",{err:f?.message||f}))}}async function Fe(o){try{const{output:c}=await e.execute(`recommend dismiss ${o.id} --json`,8e3),f=E(c);if(!f.ok){g.error(t("recommend.messages.dismissFailed",{err:f.reason||c.slice(0,120)}));return}g.success(t("recommend.messages.dismissOk")),await C()}catch(c){g.error(t("recommend.messages.dismissFailed",{err:c?.message||c}))}}function le(){x.userId="",x.topicsJson="",x.weightsJson=""}ce(m);const ie={t,ws:e,EMPTY_IMG:z,loading:M,loadingRecs:w,creating:Y,profiles:N,recs:S,userStats:O,topInterests:T,suggestions:F,selectedUser:v,activeTab:U,statusFilter:j,typeFilter:P,showCreateProfileModal:J,showDetailsModal:D,createForm:x,currentProfile:Q,userOptions:H,recColumns:Z,profileColumns:V,filteredRecs:ee,typeLabel:te,typeColor:oe,typeBarColor:re,statusLabel:G,statusColor:X,feedbackLabel:ne,feedbackColor:$,scoreColor:R,weightColor:ae,formatJson:l,loadAll:m,loadUserData:C,encodeArg:L,onUserChange:be,selectAndSwitch:xe,submitCreateProfile:he,shellQuote:se,applyDecay:Ce,loadSuggestions:we,deleteProfile:Se,viewProfileDetails:Te,markViewed:Ie,provideFeedback:Oe,dismissRec:Fe,resetCreateForm:le,ref:h,computed:K,onMounted:ce,reactive:de,get useI18n(){return me},get ReloadOutlined(){return Le},get UserAddOutlined(){return De},get UserOutlined(){return Je},get FireOutlined(){return je},get EyeInvisibleOutlined(){return Ne},get LikeOutlined(){return Me},get StarOutlined(){return Ee},get FieldTimeOutlined(){return Re},get BulbOutlined(){return ze},get message(){return g},get Empty(){return fe},get useWsStore(){return ue},get parseProfiles(){return ye},get parseRecommendations(){return ge},get parseUserStats(){return _e},get parseTopInterests(){return ve},get parseSuggestions(){return ke},get parseActionResult(){return E},get formatRecommendTime(){return Ke},get CONTENT_TYPE_IDS(){return Be},get RECOMMENDATION_STATUSES(){return We}};return Object.defineProperty(ie,"__isScriptSetup",{enumerable:!1,value:!0}),ie}},Qe={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},He={class:"page-title"},Ze={class:"page-sub"},Xe={style:{display:"flex","align-items":"center",gap:"12px","flex-wrap":"wrap"}},$e={style:{color:"var(--text-secondary)","font-size":"12px"}},et={class:"type-name"},tt={class:"filter-bar"},ot={style:{color:"var(--text-primary)","font-weight":"500"}},rt={style:{color:"var(--text-muted)","font-size":"11px","margin-top":"2px"}},nt={key:3,style:{color:"var(--text-secondary)","font-size":"12px"}},at={key:1,style:{color:"var(--text-muted)"}},st={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},lt={key:0,style:{color:"var(--text-primary)","font-family":"monospace","font-weight":"500"}},it={key:2,style:{color:"var(--text-secondary)","font-family":"monospace","font-size":"12px"}},ct={key:3,style:{color:"var(--text-secondary)"}},dt={key:4,style:{color:"var(--text-secondary)","font-size":"11px"}},mt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},ut={key:1},ft={class:"interest-topic"},pt={style:{"margin-left":"8px","font-family":"monospace",color:"var(--text-primary)"}},yt={style:{"margin-left":"auto",color:"var(--text-secondary)","font-size":"12px"}},gt={key:0,style:{"padding-top":"8px"}},_t={style:{"font-family":"monospace","font-size":"12px"}},vt={style:{color:"var(--text-primary)","font-size":"13px",margin:"16px 0 8px"}},kt={key:1},bt={class:"interest-topic"},xt={key:2,style:{color:"var(--text-primary)","font-size":"13px",margin:"16px 0 8px"}},ht={key:3,class:"weights-pre"};function Ct(s,n,t,e,z,M){const w=y("a-button"),Y=y("a-space"),N=y("a-select"),S=y("a-card"),O=y("a-statistic"),T=y("a-col"),F=y("a-row"),v=y("a-tag"),U=y("a-radio-button"),j=y("a-radio-group"),P=y("a-empty"),J=y("a-progress"),D=y("a-menu-item"),x=y("a-menu"),Q=y("a-dropdown"),H=y("a-popconfirm"),Z=y("a-table"),V=y("a-tab-pane"),ee=y("a-list-item"),te=y("a-list"),oe=y("a-tabs"),re=y("a-input"),G=y("a-form-item"),X=y("a-textarea"),ne=y("a-form"),$=y("a-modal"),R=y("a-descriptions-item"),ae=y("a-descriptions");return d(),_("div",null,[b("div",Qe,[b("div",null,[b("h2",He,i(e.t("recommend.title")),1),b("p",Ze,i(e.t("recommend.subtitle")),1)]),a(Y,null,{default:r(()=>[a(w,{loading:e.loading,onClick:e.loadAll},{icon:r(()=>[a(e.ReloadOutlined)]),default:r(()=>[p(" "+i(e.t("recommend.refresh")),1)]),_:1},8,["loading"]),a(w,{type:"primary",onClick:n[0]||(n[0]=l=>e.showCreateProfileModal=!0)},{icon:r(()=>[a(e.UserAddOutlined)]),default:r(()=>[p(" "+i(e.t("recommend.createProfile")),1)]),_:1})]),_:1})]),u(" User selector "),a(S,{size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"},"body-style":{padding:"10px 16px"}},{default:r(()=>[b("div",Xe,[b("span",$e,i(e.t("recommend.userBar.currentUser")),1),a(N,{value:e.selectedUser,"onUpdate:value":n[1]||(n[1]=l=>e.selectedUser=l),options:e.userOptions,placeholder:e.t("recommend.userBar.selectPlaceholder"),style:{"min-width":"280px"},"allow-clear":"","show-search":"",onChange:e.onUserChange},null,8,["value","options","placeholder"]),e.selectedUser?(d(),k(w,{key:0,size:"small",onClick:e.applyDecay},{icon:r(()=>[a(e.FieldTimeOutlined)]),default:r(()=>[p(" "+i(e.t("recommend.userBar.applyDecay")),1)]),_:1})):u("v-if",!0),e.selectedUser?(d(),k(w,{key:1,size:"small",onClick:e.loadSuggestions},{icon:r(()=>[a(e.BulbOutlined)]),default:r(()=>[p(" "+i(e.t("recommend.userBar.suggest")),1)]),_:1})):u("v-if",!0)])]),_:1}),u(" Stat cards "),a(F,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:r(()=>[a(T,{xs:12,sm:8,lg:5},{default:r(()=>[a(S,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[a(O,{title:e.t("recommend.stats.profiles"),value:e.profiles.length,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:r(()=>[a(e.UserOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),a(T,{xs:12,sm:8,lg:5},{default:r(()=>[a(S,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[a(O,{title:e.t("recommend.stats.totalRecs"),value:e.userStats.total,"value-style":{color:"#722ed1",fontSize:"20px"}},{prefix:r(()=>[a(e.FireOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),a(T,{xs:12,sm:8,lg:5},{default:r(()=>[a(S,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[a(O,{title:e.t("recommend.stats.pending"),value:e.userStats.pending,"value-style":{color:e.userStats.pending>0?"#faad14":"#888",fontSize:"20px"}},{prefix:r(()=>[a(e.EyeInvisibleOutlined)]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),a(T,{xs:12,sm:8,lg:5},{default:r(()=>[a(S,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[a(O,{title:e.t("recommend.stats.feedbackRate"),value:e.userStats.feedbackRate*100,suffix:"%",precision:1,"value-style":{color:"#13c2c2",fontSize:"20px"}},{prefix:r(()=>[a(e.LikeOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),a(T,{xs:24,sm:8,lg:4},{default:r(()=>[a(S,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[a(O,{title:e.t("recommend.stats.avgScore"),value:e.userStats.avgScore,precision:3,"value-style":{color:e.scoreColor(e.userStats.avgScore),fontSize:"20px"}},{prefix:r(()=>[a(e.StarOutlined)]),_:1},8,["title","value","value-style"])]),_:1})]),_:1})]),_:1}),u(" Content type catalogue "),a(S,{title:e.t("recommend.typeCatalogue"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"},"body-style":{padding:"12px 16px"}},{default:r(()=>[a(F,{gutter:[12,12]},{default:r(()=>[(d(!0),_(A,null,q(e.CONTENT_TYPE_IDS,l=>(d(),k(T,{key:l,xs:12,sm:6},{default:r(()=>[b("div",{class:"type-pill",style:Pe({borderLeftColor:e.typeBarColor(l)})},[a(v,{color:e.typeColor(l),style:{"font-family":"monospace"}},{default:r(()=>[p(i(l),1)]),_:2},1032,["color"]),b("div",et,i(e.typeLabel(l)),1)],4)]),_:2},1024))),128))]),_:1})]),_:1},8,["title"]),u(" Tabs "),a(oe,{activeKey:e.activeTab,"onUpdate:activeKey":n[4]||(n[4]=l=>e.activeTab=l),class:"recommend-tabs"},{default:r(()=>[u(" ── Recommendations tab ────────────────────────────────── "),a(V,{key:"recs",tab:e.t("recommend.tabs.recs")},{default:r(()=>[b("div",tt,[a(j,{value:e.statusFilter,"onUpdate:value":n[2]||(n[2]=l=>e.statusFilter=l),size:"small","button-style":"solid"},{default:r(()=>[a(U,{value:""},{default:r(()=>[p(i(e.t("recommend.filter.allStatuses")),1)]),_:1}),(d(!0),_(A,null,q(e.RECOMMENDATION_STATUSES,l=>(d(),k(U,{key:l,value:l},{default:r(()=>[p(i(e.statusLabel(l)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),a(j,{value:e.typeFilter,"onUpdate:value":n[3]||(n[3]=l=>e.typeFilter=l),size:"small"},{default:r(()=>[a(U,{value:""},{default:r(()=>[p(i(e.t("recommend.filter.allTypes")),1)]),_:1}),(d(!0),_(A,null,q(e.CONTENT_TYPE_IDS,l=>(d(),k(U,{key:l,value:l},{default:r(()=>[p(i(e.typeLabel(l)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),e.selectedUser?(d(),k(Z,{key:1,columns:e.recColumns,"data-source":e.filteredRecs,pagination:{pageSize:20,showTotal:l=>e.t("recommend.totals.rows",{count:l})},size:"small",loading:e.loadingRecs,style:{background:"var(--bg-card)"}},{bodyCell:r(({column:l,record:m})=>[l.key==="title"?(d(),_(A,{key:0},[b("span",ot,i(m.title||e.t("recommend.noTitle")),1),b("div",rt,i(m.contentId),1)],64)):u("v-if",!0),l.key==="contentType"?(d(),k(v,{key:1,color:e.typeColor(m.contentType),style:{"font-family":"monospace"}},{default:r(()=>[p(i(m.contentType),1)]),_:2},1032,["color"])):u("v-if",!0),l.key==="score"?(d(),k(J,{key:2,percent:Math.round(m.score*100),"stroke-color":e.scoreColor(m.score),size:"small",format:()=>m.score.toFixed(3)},null,8,["percent","stroke-color","format"])):u("v-if",!0),l.key==="reason"?(d(),_("span",nt,i(m.reason),1)):u("v-if",!0),l.key==="status"?(d(),k(v,{key:4,color:e.statusColor(m.status)},{default:r(()=>[p(i(e.statusLabel(m.status)),1)]),_:2},1032,["color"])):u("v-if",!0),l.key==="feedback"?(d(),_(A,{key:5},[m.feedback?(d(),k(v,{key:0,color:e.feedbackColor(m.feedback)},{default:r(()=>[p(i(e.feedbackLabel(m.feedback)),1)]),_:2},1032,["color"])):(d(),_("span",at,"—"))],64)):u("v-if",!0),l.key==="action"?(d(),_(A,{key:6},[m.status==="pending"?(d(),k(w,{key:0,size:"small",type:"link",onClick:C=>e.markViewed(m)},{default:r(()=>[p(i(e.t("recommend.rowActions.view")),1)]),_:1},8,["onClick"])):u("v-if",!0),m.status!=="dismissed"?(d(),k(Q,{key:1},{overlay:r(()=>[a(x,{onClick:({key:C})=>e.provideFeedback(m,C)},{default:r(()=>[a(D,{key:"like",style:{color:"#52c41a"}},{default:r(()=>[p(i(e.t("recommend.feedbackMenu.like")),1)]),_:1}),a(D,{key:"dislike",style:{color:"#ff4d4f"}},{default:r(()=>[p(i(e.t("recommend.feedbackMenu.dislike")),1)]),_:1}),a(D,{key:"later"},{default:r(()=>[p(i(e.t("recommend.feedbackMenu.later")),1)]),_:1})]),_:1},8,["onClick"])]),default:r(()=>[a(w,{size:"small",type:"link"},{default:r(()=>[p(i(e.t("recommend.feedbackDropdown")),1)]),_:1})]),_:2},1024)):u("v-if",!0),m.status!=="dismissed"?(d(),k(H,{key:2,title:e.t("recommend.rowActions.dismissConfirmTitle"),"ok-text":e.t("recommend.rowActions.dismissOk"),"cancel-text":e.t("common.cancel"),onConfirm:C=>e.dismissRec(m)},{default:r(()=>[a(w,{size:"small",type:"link",danger:""},{default:r(()=>[p(i(e.t("recommend.rowActions.dismiss")),1)]),_:1})]),_:1},8,["title","ok-text","cancel-text","onConfirm"])):u("v-if",!0)],64)):u("v-if",!0)]),emptyText:r(()=>[b("div",st,[a(e.FireOutlined,{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),p(" "+i(e.statusFilter||e.typeFilter?e.t("recommend.empty.filtered"):e.t("recommend.empty.noRecsHint")),1)])]),_:1},8,["columns","data-source","pagination","loading"])):(d(),k(P,{key:0,description:e.t("recommend.empty.selectUser"),image:e.EMPTY_IMG,style:{padding:"40px 0"}},null,8,["description","image"]))]),_:1},8,["tab"]),u(" ── Profiles tab ───────────────────────────────────────── "),a(V,{key:"profiles",tab:e.t("recommend.tabs.profiles")},{default:r(()=>[a(Z,{columns:e.profileColumns,"data-source":e.profiles,pagination:{pageSize:20,showTotal:l=>e.t("recommend.totals.profiles",{count:l})},size:"small",loading:e.loading,style:{background:"var(--bg-card)"}},{bodyCell:r(({column:l,record:m})=>[l.key==="userId"?(d(),_("span",lt,i(m.userId),1)):u("v-if",!0),l.key==="topicCount"?(d(),k(v,{key:1,color:"blue"},{default:r(()=>[p(i(e.t("recommend.topicTagSuffix",{count:m.topicCount})),1)]),_:2},1024)):u("v-if",!0),l.key==="decayFactor"?(d(),_("span",it,i(m.decayFactor.toFixed(2)),1)):u("v-if",!0),l.key==="updateCount"?(d(),_("span",ct,i(m.updateCount),1)):u("v-if",!0),l.key==="lastUpdated"?(d(),_("span",dt,i(e.formatRecommendTime(m.lastUpdated)),1)):u("v-if",!0),l.key==="action"?(d(),_(A,{key:5},[a(w,{size:"small",type:"link",onClick:C=>e.viewProfileDetails(m)},{default:r(()=>[p(i(e.t("recommend.rowActions.details")),1)]),_:1},8,["onClick"]),a(w,{size:"small",type:"link",onClick:C=>e.selectAndSwitch(m.userId)},{default:r(()=>[p(i(e.t("recommend.rowActions.switch")),1)]),_:1},8,["onClick"]),a(H,{title:e.t("recommend.rowActions.deleteConfirmTitle"),"ok-text":e.t("recommend.rowActions.deleteOk"),"cancel-text":e.t("common.cancel"),onConfirm:C=>e.deleteProfile(m)},{default:r(()=>[a(w,{size:"small",type:"link",danger:""},{default:r(()=>[p(i(e.t("recommend.rowActions.delete")),1)]),_:1})]),_:1},8,["title","ok-text","cancel-text","onConfirm"])],64)):u("v-if",!0)]),emptyText:r(()=>[b("div",mt,[a(e.UserOutlined,{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),p(" "+i(e.t("recommend.empty.noProfiles")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),u(" ── Top interests tab ──────────────────────────────────── "),a(V,{key:"interests",tab:e.t("recommend.tabs.interests")},{default:r(()=>[e.selectedUser?(d(),k(F,{key:1,gutter:[16,16]},{default:r(()=>[a(T,{xs:24,lg:14},{default:r(()=>[a(S,{title:e.t("recommend.interest.topicWeights"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[e.topInterests.length?(d(),_("div",ut,[(d(!0),_(A,null,q(e.topInterests,l=>(d(),_("div",{key:l.key,class:"interest-row"},[b("span",ft,i(l.topic),1),a(J,{percent:Math.round(l.weight*100),"stroke-color":e.weightColor(l.weight),format:()=>l.weight.toFixed(3),size:"small",style:{flex:"1","margin-left":"12px"}},null,8,["percent","stroke-color","format"])]))),128))])):(d(),k(P,{key:0,description:e.t("recommend.empty.noInterests"),image:e.EMPTY_IMG},null,8,["description","image"]))]),_:1},8,["title"])]),_:1}),a(T,{xs:24,lg:10},{default:r(()=>[a(S,{title:e.t("recommend.interest.feedbackSuggest"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:r(()=>[e.suggestions.length?(d(),k(te,{key:1,size:"small","data-source":e.suggestions},{renderItem:r(({item:l})=>[a(ee,null,{default:r(()=>[a(v,{color:l.action==="boost"?"green":"orange"},{default:r(()=>[p(i(l.action==="boost"?e.t("recommend.interest.boost"):e.t("recommend.interest.lower")),1)]),_:2},1032,["color"]),b("span",pt,i(l.topic),1),b("span",yt,"±"+i(l.amount),1)]),_:2},1024)]),_:1},8,["data-source"])):(d(),k(P,{key:0,description:e.t("recommend.empty.noSuggestions"),image:e.EMPTY_IMG},null,8,["description","image"]))]),_:1},8,["title"])]),_:1})]),_:1})):(d(),k(P,{key:0,description:e.t("recommend.empty.selectUser"),image:e.EMPTY_IMG,style:{padding:"40px 0"}},null,8,["description","image"]))]),_:1},8,["tab"])]),_:1},8,["activeKey"]),u(" ── Create profile modal ───────────────────────────────── "),a($,{open:e.showCreateProfileModal,"onUpdate:open":n[8]||(n[8]=l=>e.showCreateProfileModal=l),title:e.t("recommend.create.title"),"confirm-loading":e.creating,width:560,"ok-text":e.t("recommend.create.ok"),"cancel-text":e.t("common.cancel"),onOk:e.submitCreateProfile,onCancel:e.resetCreateForm},{default:r(()=>[a(ne,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:r(()=>[a(G,{label:e.t("recommend.create.userIdLabel"),required:""},{default:r(()=>[a(re,{value:e.createForm.userId,"onUpdate:value":n[5]||(n[5]=l=>e.createForm.userId=l),placeholder:e.t("recommend.create.userIdPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),a(G,{label:e.t("recommend.create.topicsLabel")},{default:r(()=>[a(X,{value:e.createForm.topicsJson,"onUpdate:value":n[6]||(n[6]=l=>e.createForm.topicsJson=l),placeholder:e.t("recommend.create.topicsPlaceholder"),"auto-size":{minRows:2,maxRows:5}},null,8,["value","placeholder"])]),_:1},8,["label"]),a(G,{label:e.t("recommend.create.weightsLabel")},{default:r(()=>[a(X,{value:e.createForm.weightsJson,"onUpdate:value":n[7]||(n[7]=l=>e.createForm.weightsJson=l),placeholder:e.t("recommend.create.weightsPlaceholder"),"auto-size":{minRows:2,maxRows:5}},null,8,["value","placeholder"])]),_:1},8,["label"])]),_:1})]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),u(" ── Profile details modal ──────────────────────────────── "),a($,{open:e.showDetailsModal,"onUpdate:open":n[9]||(n[9]=l=>e.showDetailsModal=l),title:e.t("recommend.details.title",{userId:e.currentProfile?.userId||""}),width:680,footer:null},{default:r(()=>[e.currentProfile?(d(),_("div",gt,[a(ae,{column:2,size:"small",bordered:""},{default:r(()=>[a(R,{label:e.t("recommend.details.id"),span:2},{default:r(()=>[b("span",_t,i(e.currentProfile.id),1)]),_:1},8,["label"]),a(R,{label:e.t("recommend.details.topicCount")},{default:r(()=>[p(i(e.currentProfile.topicCount),1)]),_:1},8,["label"]),a(R,{label:e.t("recommend.details.decayFactor")},{default:r(()=>[p(i(e.currentProfile.decayFactor.toFixed(2)),1)]),_:1},8,["label"]),a(R,{label:e.t("recommend.details.updateCount")},{default:r(()=>[p(i(e.currentProfile.updateCount),1)]),_:1},8,["label"]),a(R,{label:e.t("recommend.details.lastUpdated")},{default:r(()=>[p(i(e.formatRecommendTime(e.currentProfile.lastUpdated)),1)]),_:1},8,["label"])]),_:1}),b("h4",vt,i(e.t("recommend.details.topicWeights")),1),Object.keys(e.currentProfile.topics).length?(d(),_("div",kt,[(d(!0),_(A,null,q(e.currentProfile.topics,(l,m)=>(d(),_("div",{key:m,class:"interest-row"},[b("span",bt,i(m),1),a(J,{percent:Math.round(l*100),"stroke-color":e.weightColor(l),format:()=>l.toFixed(3),size:"small",style:{flex:"1","margin-left":"12px"}},null,8,["percent","stroke-color","format"])]))),128))])):(d(),k(P,{key:0,description:e.t("recommend.empty.noTopics"),image:e.EMPTY_IMG},null,8,["description","image"])),Object.keys(e.currentProfile.interactionWeights).length?(d(),_("h4",xt,i(e.t("recommend.details.interactionWeights")),1)):u("v-if",!0),Object.keys(e.currentProfile.interactionWeights).length?(d(),_("pre",ht,i(e.formatJson(e.currentProfile.interactionWeights)),1)):u("v-if",!0)])):u("v-if",!0)]),_:1},8,["open","title"])])}const Ot=Ae(qe,[["render",Ct],["__scopeId","data-v-9cfd9dba"],["__file","/tmp/cc-web-panel-drwr9c/repo/packages/web-panel/src/views/Recommend.vue"]]);export{Ot as default};
@@ -1 +1 @@
1
- import{I as m,J as p,U as v,R as s,c as o,K as n,V as d,S as x,o as me,b as se,a as te,r as _,P as u,Q as f,F,Z as L,_ as Pe,$ as pe}from"./vendor-BvqAck49.js";import{_ as Be,b as fe,u as ye,E as be,d as g}from"./index-7ME2_dHQ.js";import{s as he}from"./community-parser-CO25nZFt.js";import ve from"./index-BSg5Da6w.js";import{aU as Ve,l as Je,L as Ye,q as We,at as qe,ak as Ke,$ as Ze,am as He,as as Ge,R as Qe}from"./icons-DP3uiYxy.js";import"./KeyCode-D63Tfrq7.js";import"./omit-BfU3fObW.js";import"./pickAttrs-eGMYizN6.js";import"./initDefaultProps-CziU9pk-.js";import"./motion-BOZPhyUp.js";import"./raf-Deuc0E8-.js";import"./index-CiSWEzLQ.js";import"./index-M2Kx4V8G.js";import"./isVisible-C7tPsqfj.js";import"./useState-BK4hy8Ma.js";import"./devWarning-Cx5sL2Te.js";import"./compact-item-DdUiFvWf.js";import"./createContext-CdIrP9Fp.js";import"./Compact-DLud5sT4.js";import"./_getTag-DnrRH4E6.js";import"./styleChecker-DuM2cLhx.js";import"./zoom-Bf0hAHy7.js";import"./ActionButton-BdKytPee.js";import"./vnode--NhVoccz.js";function q(l){const t=he(l);if(!t)return null;try{return JSON.parse(t)}catch{}const r=t.match(/\{[\s\S]*\}|\[[\s\S]*\]/);if(!r)return null;try{return JSON.parse(r[0])}catch{return null}}const Oe=Object.freeze(["accuracy","fairness","resilience","convergence_speed"]),Xe=Object.freeze(["none","exponential","linear","step"]),$e=Object.freeze(["z_score","iqr"]),ze=Object.freeze(["running","complete","applied","failed","cancelled"]),et=Object.freeze(["generic","task","review","vote"]);function k(l,t=0){return typeof l=="number"&&Number.isFinite(l)?l:t}function N(l){if(!l)return{noDb:!1,error:""};const t=he(l),r=/Database not available/i.test(t);return{noDb:r,error:r?"Database not available":""}}function tt(l,t=0){if(!l||typeof l!="object")return null;const r=l.did||"";return r?{key:r,did:r,score:k(l.score,0),observations:k(l.observations,0),decay:String(l.decay||"none"),weightTotal:k(l.weightTotal,0),_idx:t}:null}function ce(l){const t=q(l);return Array.isArray(t)?t.map(tt).filter(Boolean):[]}function Ae(l,t=0){if(!l||typeof l!="object")return null;const r=l.did||"";return r?{key:`${r}-${t}`,did:r,score:k(l.score,0),reason:String(l.reason||""),zScore:typeof l.zScore=="number"?l.zScore:null,lower:typeof l.lower=="number"?l.lower:null,upper:typeof l.upper=="number"?l.upper:null}:null}function _e(l){const t=q(l);if(!t||typeof t!="object"||Array.isArray(t))return{method:"",threshold:0,totalSamples:0,anomalies:[],summary:"",message:""};const r=Array.isArray(t.anomalies)?t.anomalies.map(Ae).filter(Boolean):[];return{method:String(t.method||""),threshold:k(t.threshold,0),totalSamples:k(t.totalSamples,0),anomalies:r,summary:t.summary?String(t.summary):"",message:t.message?String(t.message):""}}function Re(l,t=0){if(!l||typeof l!="object")return null;const r=l.runId||"";return r?{key:r,runId:r,objective:String(l.objective||""),iterations:k(l.iterations,0),paramSpace:l.paramSpace??null,bestParams:l.bestParams??null,bestScore:k(l.bestScore,0),status:String(l.status||"complete").toLowerCase(),createdAt:l.createdAt??null,completedAt:l.completedAt??null,analytics:l.analytics??null,errorMessage:l.errorMessage??"",_idx:t}:null}function ge(l){const t=q(l);return Array.isArray(t)?t.map(Re).filter(Boolean):[]}function xe(l){const t=q(l);return!t||typeof t!="object"||Array.isArray(t)?null:Re(t,0)}function ke(l){const t=q(l);if(!t||typeof t!="object"||Array.isArray(t))return null;const r=t.reputationDistribution||{};return{analyticsId:String(t.analyticsId||""),runId:String(t.runId||""),reputationDistribution:{buckets:Array.isArray(r.buckets)?r.buckets.filter(e=>e&&typeof e=="object").map(e=>({label:String(e.label||""),count:k(e.count,0),min:typeof e.min=="number"?e.min:null,max:typeof e.max=="number"?e.max:null})):[],mean:typeof r.mean=="number"?r.mean:null,stdDev:typeof r.stdDev=="number"?r.stdDev:null},anomalies:t.anomalies&&typeof t.anomalies=="object"?{method:String(t.anomalies.method||""),totalSamples:k(t.anomalies.totalSamples,0),anomalies:Array.isArray(t.anomalies.anomalies)?t.anomalies.anomalies.map(Ae).filter(Boolean):[],summary:t.anomalies.summary?String(t.anomalies.summary):"",message:t.anomalies.message?String(t.anomalies.message):""}:{method:"",totalSamples:0,anomalies:[],summary:"",message:""},recommendations:Array.isArray(t.recommendations)?t.recommendations.filter(e=>typeof e=="string"):[]}}const ot={totalRuns:0,activeRuns:0,maxConcurrentOptimizations:0,byStatus:{},byObjective:{},observations:{totalObservations:0,totalDids:0},bestScoreEver:0};function Se(l){const t=JSON.parse(JSON.stringify(ot));for(const e of ze)t.byStatus[e]=0;for(const e of Oe)t.byObjective[e]=0;const r=q(l);if(!r||typeof r!="object"||Array.isArray(r))return t;if(t.totalRuns=k(r.totalRuns,0),t.activeRuns=k(r.activeRuns,0),t.maxConcurrentOptimizations=k(r.maxConcurrentOptimizations,0),t.bestScoreEver=k(r.bestScoreEver,0),r.byStatus&&typeof r.byStatus=="object")for(const[e,w]of Object.entries(r.byStatus))typeof w=="number"&&Number.isFinite(w)&&(t.byStatus[e]=w);if(r.byObjective&&typeof r.byObjective=="object")for(const[e,w]of Object.entries(r.byObjective))typeof w=="number"&&Number.isFinite(w)&&(t.byObjective[e]=w);return r.observations&&typeof r.observations=="object"&&(t.observations.totalObservations=k(r.observations.totalObservations,0),t.observations.totalDids=k(r.observations.totalDids,0)),t}function at(l){if(l==null||l==="")return"—";const t=typeof l=="number"?new Date(l):new Date(String(l));return isNaN(t.getTime())?String(l):t.toLocaleString("zh-CN",{hour12:!1})}const nt={__name:"Reputation",setup(l,{expose:t}){t();const{t:r}=fe(),e=ye(),w=be.PRESENTED_IMAGE_SIMPLE,Q=_(!1),R=_(!1),K=_(!1),U=_(!1),A=_(!1),O=_([]),z=_([]),V=_({totalRuns:0,activeRuns:0,maxConcurrentOptimizations:0,byStatus:{},byObjective:{},observations:{totalObservations:0,totalDids:0},bestScoreEver:0}),P=_({noDb:!1,error:""}),X=_("scores"),E=_("none"),Z=_(!1),J=_(!1),j=_(!1),H=_(!1),S=te({did:"",score:.8,kind:"generic",weight:1}),h=te({objective:"accuracy",iterations:50}),D=te({method:"z_score",threshold:2.5,decay:"none"}),T=_(null),I=_(null),B=_(null),Y=se(()=>[{title:r("reputation.scoreColumns.rank"),key:"rank",width:"60px"},{title:r("reputation.scoreColumns.did"),key:"did"},{title:r("reputation.scoreColumns.score"),key:"score",width:"220px"},{title:r("reputation.scoreColumns.observations"),key:"observations",width:"100px"},{title:r("reputation.scoreColumns.weightTotal"),key:"weightTotal",width:"100px"}]),oe=se(()=>[{title:r("reputation.runColumns.runId"),key:"runId",width:"140px"},{title:r("reputation.runColumns.objective"),key:"objective",width:"140px"},{title:r("reputation.runColumns.iterations"),key:"iterations",width:"80px"},{title:r("reputation.runColumns.bestScore"),key:"bestScore",width:"110px"},{title:r("reputation.runColumns.status"),key:"status",width:"100px"},{title:r("reputation.runColumns.createdAt"),key:"createdAt",width:"160px"},{title:r("reputation.runColumns.action"),key:"action",width:"160px"}]);function ae(i){const c=`reputation.decay.${i}`,y=r(c);return y===c?i:y}function $(i){const c=`reputation.kind.${i}`,y=r(c);return y===c?i:y}function ee(i){const c=`reputation.objective.${i}`,y=r(c);return y===c?i:y}function C(i){return{accuracy:"blue",fairness:"green",resilience:"purple",convergence_speed:"orange"}[i]||"default"}function ne(i){return{accuracy:"#1677ff",fairness:"#52c41a",resilience:"#722ed1",convergence_speed:"#fa8c16"}[i]||"#888"}function re(i){const c=`reputation.objectiveDesc.${i}`,y=r(c);return y===c?"":y}function a(i){const c=`reputation.status.${i}`,y=r(c);return y===c?i:y}function b(i){return{running:"processing",complete:"blue",applied:"green",failed:"red",cancelled:"default"}[i]||"default"}function W(i){return{running:"#1677ff",complete:"#13c2c2",applied:"#52c41a",failed:"#ff4d4f",cancelled:"#888"}[i]||"#888"}function we(i){return i===0?"gold":i===1?"silver":i===2?"bronze":""}function je(i){return i>=.8?"#52c41a":i>=.5?"#1677ff":i>=.3?"#faad14":"#ff4d4f"}function Ce(i,c){return c?Math.round(i/c*100):0}function De(i){const c=I.value?.reputationDistribution.buckets.reduce((y,M)=>y+M.count,0)||0;return c?Math.round(i.count/c*100):0}function Te(i){if(typeof i=="string")return i;try{return JSON.stringify(i,null,2)}catch{return String(i)}}async function G(){Q.value=!0,P.value={noDb:!1,error:""};try{const[i,c,y]=await Promise.all([e.execute(`reputation list --decay ${E.value} --json`,1e4).catch(()=>({output:""})),e.execute("reputation runs --limit 50 --json",1e4).catch(()=>({output:""})),e.execute("reputation stats-v2 --json",8e3).catch(()=>({output:""}))]),M=[i,c,y].map(le=>N(le.output)).find(le=>le.noDb);M&&(P.value=M),O.value=ce(i.output),z.value=ge(c.output),V.value=Se(y.output)}catch(i){g.error(r("reputation.messages.loadFailed",{err:i?.message||i}))}finally{Q.value=!1}}async function Fe(){try{const{output:i}=await e.execute(`reputation list --decay ${E.value} --json`,1e4),c=N(i);if(c.noDb){P.value=c;return}O.value=ce(i)}catch(i){g.error(r("reputation.messages.loadScoresFailed",{err:i?.message||i}))}}async function Ee(){if(!S.did.trim()){g.warning(r("reputation.messages.didRequired"));return}if(S.score<0||S.score>1){g.warning(r("reputation.messages.scoreRange"));return}R.value=!0;try{const i=[`reputation observe "${S.did.trim().replace(/"/g,'\\"')}"`,String(S.score),`-k ${S.kind}`,`-w ${S.weight}`,"--json"],{output:c}=await e.execute(i.join(" "),1e4);if(N(c).noDb){g.error(r("reputation.messages.needInit"));return}if(!/"did"/.test(c)){g.error(r("reputation.messages.observeFailed",{err:c.slice(0,120)}));return}g.success(r("reputation.messages.observeOk")),Z.value=!1,ue(),await G()}catch(i){g.error(r("reputation.messages.observeFailed",{err:i?.message||i}))}finally{R.value=!1}}async function Ie(){K.value=!0;try{const i=["reputation optimize",`-o ${h.objective}`,`-i ${h.iterations}`,"--json"],{output:c}=await e.execute(i.join(" "),6e4);if(N(c).noDb){g.error(r("reputation.messages.needInit"));return}const M=xe(c);if(!M){g.error(r("reputation.messages.optimizeFailed",{err:c.slice(0,120)}));return}J.value=!1,g.success(r("reputation.messages.optimizeOk",{score:M.bestScore.toFixed(4)})),await G(),T.value=M,H.value=!0,await ie()}catch(i){g.error(r("reputation.messages.optimizeFailed",{err:i?.message||i}))}finally{K.value=!1}}async function Me(i){ve.confirm({title:r("reputation.applyConfirm.title"),content:r("reputation.applyConfirm.content",{runId:i.runId.slice(0,12)}),okText:r("reputation.applyConfirm.ok"),cancelText:r("reputation.applyConfirm.cancel"),onOk:async()=>{try{const{output:c}=await e.execute(`reputation apply ${i.runId}`,8e3);if(N(c).noDb){g.error(r("reputation.messages.needInit"));return}if(/Failed|Error/i.test(c)&&!/Applied/i.test(c)){g.error(r("reputation.messages.applyFailed",{err:c.slice(0,120)}));return}g.success(r("reputation.messages.applyOk")),await G()}catch(c){g.error(r("reputation.messages.applyFailed",{err:c?.message||c}))}}})}async function Le(i){T.value=i,I.value=null,H.value=!0,await ie()}async function ie(){if(T.value){A.value=!0;try{const{output:i}=await e.execute(`reputation analytics ${T.value.runId} --json`,8e3);if(N(i).noDb)return;I.value=ke(i)}catch{}finally{A.value=!1}}}function Ne(){B.value=null,j.value=!0}async function Ue(){U.value=!0;try{const i=["reputation anomalies",`-m ${D.method}`,`-t ${D.threshold}`,`-d ${D.decay}`,"--json"],{output:c}=await e.execute(i.join(" "),1e4);if(N(c).noDb){g.error(r("reputation.messages.needInit"));return}B.value=_e(c)}catch(i){g.error(r("reputation.messages.detectFailed",{err:i?.message||i}))}finally{U.value=!1}}function ue(){S.did="",S.score=.8,S.kind="generic",S.weight=1}me(G);const de={t:r,ws:e,EMPTY_IMG:w,loading:Q,observing:R,optimizing:K,detectingAnomalies:U,loadingAnalytics:A,scores:O,runs:z,stats:V,errorState:P,activeTab:X,decayFilter:E,showObserveModal:Z,showOptimizeModal:J,showAnomaliesModal:j,showAnalyticsModal:H,observeForm:S,optimizeForm:h,anomalyForm:D,currentRun:T,currentAnalytics:I,anomalyResult:B,scoreColumns:Y,runColumns:oe,decayLabel:ae,kindLabel:$,objectiveLabel:ee,objectiveColor:C,objectiveBarColor:ne,objectiveDesc:re,statusLabel:a,statusColor:b,statusBarColor:W,rankClass:we,scoreColor:je,pctOfTotal:Ce,bucketPct:De,formatParams:Te,loadAll:G,loadScores:Fe,submitObservation:Ee,submitOptimization:Ie,applyRun:Me,viewRunAnalytics:Le,loadAnalyticsForCurrentRun:ie,openAnomaliesModal:Ne,runAnomalyDetection:Ue,resetObserveForm:ue,ref:_,onMounted:me,reactive:te,computed:se,get useI18n(){return fe},get ReloadOutlined(){return Qe},get PlusOutlined(){return Ge},get WarningOutlined(){return He},get ThunderboltOutlined(){return Ze},get UserOutlined(){return Ke},get EyeOutlined(){return qe},get ExperimentOutlined(){return We},get LoadingOutlined(){return Ye},get TrophyOutlined(){return Je},get ArrowRightOutlined(){return Ve},get message(){return g},get Modal(){return ve},get Empty(){return be},get useWsStore(){return ye},get parseScores(){return ce},get parseAnomalies(){return _e},get parseRun(){return xe},get parseRuns(){return ge},get parseAnalytics(){return ke},get parseStatsV2(){return Se},get detectReputationError(){return N},get formatReputationTime(){return at},get OPTIMIZATION_OBJECTIVES(){return Oe},get DECAY_MODELS(){return Xe},get ANOMALY_METHODS(){return $e},get RUN_STATUSES(){return ze},get OBSERVATION_KINDS(){return et}};return Object.defineProperty(de,"__isScriptSetup",{enumerable:!1,value:!0}),de}},rt={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},it={class:"page-title"},lt={class:"page-sub"},st={class:"filter-bar"},ct={style:{color:"var(--text-secondary)","font-size":"12px"}},ut={key:1,style:{color:"var(--text-primary)","font-family":"monospace","font-size":"12px"}},dt={key:3,style:{color:"var(--text-secondary)"}},mt={key:4,style:{color:"var(--text-secondary)","font-family":"monospace","font-size":"12px"}},pt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},ft={key:0,style:{color:"var(--text-primary)","font-family":"monospace","font-size":"12px"}},yt={key:2,style:{color:"var(--text-secondary)"}},bt={key:5,style:{color:"var(--text-secondary)","font-size":"11px"}},vt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},_t={style:{"margin-left":"8px",color:"var(--text-muted)","font-size":"12px"}},gt={style:{color:"var(--text-muted)","font-size":"11px","margin-top":"4px"}},xt={style:{"margin-left":"8px",color:"var(--text-muted)","font-size":"12px"}},kt={style:{"padding-top":"8px"}},St={style:{"margin-left":"8px",color:"var(--text-muted)","font-size":"12px"}},ht={key:1},Ot={style:{"font-family":"monospace","font-size":"12px",color:"var(--text-primary)"}},zt={style:{"margin-left":"8px",color:"var(--text-secondary)","font-size":"12px"}},At={key:0,style:{"margin-left":"8px",color:"var(--text-muted)","font-size":"11px"}},Rt={key:0,style:{"padding-top":"8px"}},wt={class:"params-pre"},jt={style:{color:"#ff4d4f"}},Ct={key:0,style:{"margin-top":"16px"}},Dt={style:{color:"var(--text-primary)","font-size":"13px",margin:"0 0 10px"}},Tt={class:"bucket-label"},Ft={key:0,style:{"margin-top":"8px",color:"var(--text-secondary)","font-size":"12px"}},Et={key:0,style:{"margin-left":"12px"}};function It(l,t,r,e,w,Q){const R=m("a-button"),K=m("a-space"),U=m("a-alert"),A=m("a-statistic"),O=m("a-card"),z=m("a-col"),V=m("a-row"),P=m("a-radio-button"),X=m("a-radio-group"),E=m("a-progress"),Z=m("a-table"),J=m("a-tab-pane"),j=m("a-tag"),H=m("a-tabs"),S=m("a-input"),h=m("a-form-item"),D=m("a-input-number"),T=m("a-select-option"),I=m("a-select"),B=m("a-form"),Y=m("a-modal"),oe=m("a-divider"),ae=m("a-empty"),$=m("a-list-item"),ee=m("a-list"),C=m("a-descriptions-item"),ne=m("a-descriptions"),re=m("a-spin");return u(),p("div",null,[v("div",rt,[v("div",null,[v("h2",it,s(e.t("reputation.title")),1),v("p",lt,s(e.t("reputation.subtitle")),1)]),o(K,null,{default:n(()=>[o(R,{loading:e.loading,onClick:e.loadAll},{icon:n(()=>[o(e.ReloadOutlined)]),default:n(()=>[f(" "+s(e.t("reputation.refresh")),1)]),_:1},8,["loading"]),o(R,{onClick:e.openAnomaliesModal},{icon:n(()=>[o(e.WarningOutlined)]),default:n(()=>[f(" "+s(e.t("reputation.actions.anomalies")),1)]),_:1}),o(R,{type:"primary",onClick:t[0]||(t[0]=a=>e.showOptimizeModal=!0)},{icon:n(()=>[o(e.ThunderboltOutlined)]),default:n(()=>[f(" "+s(e.t("reputation.actions.optimize")),1)]),_:1})]),_:1})]),d(" noDb banner "),e.errorState.noDb?(u(),x(U,{key:0,type:"info","show-icon":"",message:e.t("reputation.noDb.message"),description:e.t("reputation.noDb.description"),style:{"margin-bottom":"16px"}},null,8,["message","description"])):d("v-if",!0),d(" Stat cards "),o(V,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:n(()=>[o(z,{xs:12,sm:8,lg:5},{default:n(()=>[o(O,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[o(A,{title:e.t("reputation.stats.trackedDids"),value:e.stats.observations.totalDids,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:n(()=>[o(e.UserOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),o(z,{xs:12,sm:8,lg:5},{default:n(()=>[o(O,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[o(A,{title:e.t("reputation.stats.totalObservations"),value:e.stats.observations.totalObservations,"value-style":{color:"#722ed1",fontSize:"20px"}},{prefix:n(()=>[o(e.EyeOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),o(z,{xs:12,sm:8,lg:5},{default:n(()=>[o(O,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[o(A,{title:e.t("reputation.stats.optimizationRuns"),value:e.stats.totalRuns,"value-style":{color:"#13c2c2",fontSize:"20px"}},{prefix:n(()=>[o(e.ExperimentOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),o(z,{xs:12,sm:8,lg:5},{default:n(()=>[o(O,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[o(A,{title:e.t("reputation.stats.active"),value:e.stats.activeRuns,"value-style":{color:e.stats.activeRuns>0?"#1677ff":"#888",fontSize:"20px"},suffix:`/ ${e.stats.maxConcurrentOptimizations}`},{prefix:n(()=>[o(e.LoadingOutlined)]),_:1},8,["title","value","value-style","suffix"])]),_:1})]),_:1}),o(z,{xs:24,sm:8,lg:4},{default:n(()=>[o(O,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[o(A,{title:e.t("reputation.stats.bestEver"),value:e.stats.bestScoreEver,precision:3,"value-style":{color:"#52c41a",fontSize:"20px"}},{prefix:n(()=>[o(e.TrophyOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1})]),_:1}),d(" Tabs "),o(H,{activeKey:e.activeTab,"onUpdate:activeKey":t[3]||(t[3]=a=>e.activeTab=a),class:"reputation-tabs"},{default:n(()=>[d(" ── Scores tab ──────────────────────────────────────────── "),o(J,{key:"scores",tab:e.t("reputation.tabs.scores")},{default:n(()=>[v("div",st,[v("span",ct,s(e.t("reputation.filter.decayLabel")),1),o(X,{value:e.decayFilter,"onUpdate:value":t[1]||(t[1]=a=>e.decayFilter=a),size:"small","button-style":"solid",onChange:e.loadScores},{default:n(()=>[(u(!0),p(F,null,L(e.DECAY_MODELS,a=>(u(),x(P,{key:a,value:a},{default:n(()=>[f(s(e.decayLabel(a)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),o(R,{size:"small",onClick:t[2]||(t[2]=a=>e.showObserveModal=!0)},{icon:n(()=>[o(e.PlusOutlined)]),default:n(()=>[f(" "+s(e.t("reputation.filter.addObservation")),1)]),_:1})]),o(Z,{columns:e.scoreColumns,"data-source":e.scores,pagination:{pageSize:20,showTotal:a=>e.t("reputation.totals.dids",{count:a})},size:"small",loading:e.loading,style:{background:"var(--bg-card)"}},{bodyCell:n(({column:a,record:b,index:W})=>[a.key==="rank"?(u(),p("span",{key:0,class:Pe(["rank-pill",e.rankClass(W)])},s(W+1),3)):d("v-if",!0),a.key==="did"?(u(),p("span",ut,s(b.did),1)):d("v-if",!0),a.key==="score"?(u(),x(E,{key:2,percent:Math.round(b.score*100),"stroke-color":e.scoreColor(b.score),size:"small",format:()=>b.score.toFixed(4)},null,8,["percent","stroke-color","format"])):d("v-if",!0),a.key==="observations"?(u(),p("span",dt,s(b.observations),1)):d("v-if",!0),a.key==="weightTotal"?(u(),p("span",mt,s(b.weightTotal.toFixed(2)),1)):d("v-if",!0)]),emptyText:n(()=>[v("div",pt,[o(e.UserOutlined,{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),f(" "+s(e.t("reputation.empty.scores")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),d(" ── Runs tab ────────────────────────────────────────────── "),o(J,{key:"runs",tab:e.t("reputation.tabs.runs")},{default:n(()=>[o(Z,{columns:e.runColumns,"data-source":e.runs,pagination:{pageSize:20,showTotal:a=>e.t("reputation.totals.rows",{count:a})},size:"small",loading:e.loading,style:{background:"var(--bg-card)"}},{bodyCell:n(({column:a,record:b})=>[a.key==="runId"?(u(),p("span",ft,s(b.runId.slice(0,12)),1)):d("v-if",!0),a.key==="objective"?(u(),x(j,{key:1,color:e.objectiveColor(b.objective),style:{"font-family":"monospace"}},{default:n(()=>[f(s(e.objectiveLabel(b.objective)),1)]),_:2},1032,["color"])):d("v-if",!0),a.key==="iterations"?(u(),p("span",yt,s(b.iterations),1)):d("v-if",!0),a.key==="bestScore"?(u(),p("span",{key:3,style:pe({color:e.scoreColor(b.bestScore),fontWeight:500,fontFamily:"monospace"})},s(b.bestScore.toFixed(4)),5)):d("v-if",!0),a.key==="status"?(u(),x(j,{key:4,color:e.statusColor(b.status)},{default:n(()=>[f(s(e.statusLabel(b.status)),1)]),_:2},1032,["color"])):d("v-if",!0),a.key==="createdAt"?(u(),p("span",bt,s(e.formatReputationTime(b.createdAt)),1)):d("v-if",!0),a.key==="action"?(u(),p(F,{key:6},[o(R,{size:"small",type:"link",onClick:W=>e.viewRunAnalytics(b)},{default:n(()=>[f(s(e.t("reputation.rowActions.analyze")),1)]),_:1},8,["onClick"]),b.status==="complete"?(u(),x(R,{key:0,size:"small",type:"link",style:{color:"#52c41a"},onClick:W=>e.applyRun(b)},{default:n(()=>[f(s(e.t("reputation.rowActions.apply")),1)]),_:1},8,["onClick"])):d("v-if",!0)],64)):d("v-if",!0)]),emptyText:n(()=>[v("div",vt,[o(e.ExperimentOutlined,{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),f(" "+s(e.t("reputation.empty.runs")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),d(" ── Breakdown tab ───────────────────────────────────────── "),o(J,{key:"breakdown",tab:e.t("reputation.tabs.breakdown")},{default:n(()=>[o(V,{gutter:[16,16]},{default:n(()=>[o(z,{xs:24,lg:12},{default:n(()=>[o(O,{title:e.t("reputation.breakdown.byStatus"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[(u(!0),p(F,null,L(e.RUN_STATUSES,a=>(u(),p("div",{key:a,class:"bd-row"},[o(j,{color:e.statusColor(a),style:{"min-width":"80px","text-align":"center"}},{default:n(()=>[f(s(e.statusLabel(a)),1)]),_:2},1032,["color"]),o(E,{percent:e.pctOfTotal(e.stats.byStatus[a]||0,e.stats.totalRuns),"stroke-color":e.statusBarColor(a),format:()=>`${e.stats.byStatus[a]||0}`,size:"small",style:{flex:"1","margin-left":"12px"}},null,8,["percent","stroke-color","format"])]))),128))]),_:1},8,["title"])]),_:1}),o(z,{xs:24,lg:12},{default:n(()=>[o(O,{title:e.t("reputation.breakdown.byObjective"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[(u(!0),p(F,null,L(e.OPTIMIZATION_OBJECTIVES,a=>(u(),p("div",{key:a,class:"bd-row"},[o(j,{color:e.objectiveColor(a),style:{"min-width":"100px","text-align":"center","font-family":"monospace"}},{default:n(()=>[f(s(e.objectiveLabel(a)),1)]),_:2},1032,["color"]),o(E,{percent:e.pctOfTotal(e.stats.byObjective[a]||0,e.stats.totalRuns),"stroke-color":e.objectiveBarColor(a),format:()=>`${e.stats.byObjective[a]||0}`,size:"small",style:{flex:"1","margin-left":"12px"}},null,8,["percent","stroke-color","format"])]))),128))]),_:1},8,["title"])]),_:1})]),_:1})]),_:1},8,["tab"])]),_:1},8,["activeKey"]),d(" ── Add observation modal ──────────────────────────────── "),o(Y,{open:e.showObserveModal,"onUpdate:open":t[8]||(t[8]=a=>e.showObserveModal=a),title:e.t("reputation.observe.title"),"confirm-loading":e.observing,width:540,"ok-text":e.t("reputation.observe.ok"),"cancel-text":e.t("common.cancel"),onOk:e.submitObservation,onCancel:e.resetObserveForm},{default:n(()=>[o(B,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:n(()=>[o(h,{label:e.t("reputation.observe.didLabel"),required:""},{default:n(()=>[o(S,{value:e.observeForm.did,"onUpdate:value":t[4]||(t[4]=a=>e.observeForm.did=a),placeholder:e.t("reputation.observe.didPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),o(h,{label:e.t("reputation.observe.scoreLabel"),required:""},{default:n(()=>[o(D,{value:e.observeForm.score,"onUpdate:value":t[5]||(t[5]=a=>e.observeForm.score=a),min:0,max:1,step:.05,style:{width:"160px"}},null,8,["value"]),v("span",_t,s(e.t("reputation.observe.scoreRange")),1)]),_:1},8,["label"]),o(h,{label:e.t("reputation.observe.kindLabel")},{default:n(()=>[o(I,{value:e.observeForm.kind,"onUpdate:value":t[6]||(t[6]=a=>e.observeForm.kind=a)},{default:n(()=>[(u(!0),p(F,null,L(e.OBSERVATION_KINDS,a=>(u(),x(T,{key:a,value:a},{default:n(()=>[f(s(e.kindLabel(a)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"]),o(h,{label:e.t("reputation.observe.weightLabel")},{default:n(()=>[o(D,{value:e.observeForm.weight,"onUpdate:value":t[7]||(t[7]=a=>e.observeForm.weight=a),min:.1,step:.1,style:{width:"120px"}},null,8,["value"])]),_:1},8,["label"])]),_:1})]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),d(" ── Optimize modal ─────────────────────────────────────── "),o(Y,{open:e.showOptimizeModal,"onUpdate:open":t[11]||(t[11]=a=>e.showOptimizeModal=a),title:e.t("reputation.optimize.title"),"confirm-loading":e.optimizing,width:540,"ok-text":e.t("reputation.optimize.ok"),"cancel-text":e.t("common.cancel"),onOk:e.submitOptimization},{default:n(()=>[o(B,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:n(()=>[o(h,{label:e.t("reputation.optimize.objectiveLabel"),required:""},{default:n(()=>[o(I,{value:e.optimizeForm.objective,"onUpdate:value":t[9]||(t[9]=a=>e.optimizeForm.objective=a)},{default:n(()=>[(u(!0),p(F,null,L(e.OPTIMIZATION_OBJECTIVES,a=>(u(),x(T,{key:a,value:a},{default:n(()=>[f(s(e.objectiveLabel(a)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),v("div",gt,s(e.objectiveDesc(e.optimizeForm.objective)),1)]),_:1},8,["label"]),o(h,{label:e.t("reputation.optimize.iterationsLabel")},{default:n(()=>[o(D,{value:e.optimizeForm.iterations,"onUpdate:value":t[10]||(t[10]=a=>e.optimizeForm.iterations=a),min:1,max:1e3,step:10,style:{width:"160px"}},null,8,["value"]),v("span",xt,s(e.t("reputation.optimize.iterationsRange")),1)]),_:1},8,["label"])]),_:1}),o(U,{type:"info","show-icon":"",message:e.t("reputation.optimize.syncMessage"),description:e.t("reputation.optimize.syncDescription"),style:{"margin-top":"12px"}},null,8,["message","description"])]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),d(" ── Anomaly detection modal ────────────────────────────── "),o(Y,{open:e.showAnomaliesModal,"onUpdate:open":t[15]||(t[15]=a=>e.showAnomaliesModal=a),title:e.t("reputation.anomaly.title"),width:640,footer:null},{default:n(()=>[v("div",kt,[o(B,{"label-col":{span:5},"wrapper-col":{span:19}},{default:n(()=>[o(h,{label:e.t("reputation.anomaly.methodLabel")},{default:n(()=>[o(X,{value:e.anomalyForm.method,"onUpdate:value":t[12]||(t[12]=a=>e.anomalyForm.method=a),"button-style":"solid"},{default:n(()=>[(u(!0),p(F,null,L(e.ANOMALY_METHODS,a=>(u(),x(P,{key:a,value:a},{default:n(()=>[f(s(a==="z_score"?e.t("reputation.anomaly.zScoreLabel"):e.t("reputation.anomaly.iqrLabel")),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"]),o(h,{label:e.t("reputation.anomaly.thresholdLabel")},{default:n(()=>[o(D,{value:e.anomalyForm.threshold,"onUpdate:value":t[13]||(t[13]=a=>e.anomalyForm.threshold=a),min:.5,step:.1,style:{width:"120px"}},null,8,["value"]),v("span",St,s(e.t("reputation.anomaly.thresholdHint")),1)]),_:1},8,["label"]),o(h,{label:e.t("reputation.anomaly.decayLabel")},{default:n(()=>[o(I,{value:e.anomalyForm.decay,"onUpdate:value":t[14]||(t[14]=a=>e.anomalyForm.decay=a),style:{width:"200px"}},{default:n(()=>[(u(!0),p(F,null,L(e.DECAY_MODELS,a=>(u(),x(T,{key:a,value:a},{default:n(()=>[f(s(e.decayLabel(a)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"]),o(h,{"wrapper-col":{offset:5,span:19}},{default:n(()=>[o(R,{type:"primary",loading:e.detectingAnomalies,onClick:e.runAnomalyDetection},{icon:n(()=>[o(e.WarningOutlined)]),default:n(()=>[f(" "+s(e.t("reputation.anomaly.start")),1)]),_:1},8,["loading"])]),_:1})]),_:1}),o(oe),e.anomalyResult?(u(),p("div",ht,[o(V,{gutter:12,style:{"margin-bottom":"12px"}},{default:n(()=>[o(z,{span:8},{default:n(()=>[o(A,{title:e.t("reputation.anomaly.totalSamples"),value:e.anomalyResult.totalSamples,"value-style":{fontSize:"16px"}},null,8,["title","value"])]),_:1}),o(z,{span:8},{default:n(()=>[o(A,{title:e.t("reputation.anomaly.threshold"),value:e.anomalyResult.threshold,precision:2,"value-style":{fontSize:"16px"}},null,8,["title","value"])]),_:1}),o(z,{span:8},{default:n(()=>[o(A,{title:e.t("reputation.anomaly.anomalies"),value:e.anomalyResult.anomalies.length,"value-style":{color:e.anomalyResult.anomalies.length>0?"#ff4d4f":"#52c41a",fontSize:"16px"}},null,8,["title","value","value-style"])]),_:1})]),_:1}),e.anomalyResult.message?(u(),x(U,{key:0,message:e.anomalyResult.message,type:"warning","show-icon":"",style:{"margin-bottom":"12px"}},null,8,["message"])):d("v-if",!0),e.anomalyResult.anomalies.length?(u(),x(ee,{key:1,size:"small","data-source":e.anomalyResult.anomalies},{renderItem:n(({item:a})=>[o($,null,{default:n(()=>[v("span",Ot,s(a.did),1),o(j,{color:"red",style:{"margin-left":"8px"}},{default:n(()=>[f(s(e.t("reputation.anomaly.scoreTag",{score:a.score.toFixed(4)})),1)]),_:2},1024),v("span",zt,s(a.reason),1),a.zScore!==null?(u(),p("span",At,s(e.t("reputation.anomaly.zNote",{value:a.zScore.toFixed(2)})),1)):d("v-if",!0)]),_:2},1024)]),_:1},8,["data-source"])):d("v-if",!0)])):(u(),x(ae,{key:0,description:e.t("reputation.anomaly.notDetected"),image:e.EMPTY_IMG},null,8,["description","image"]))])]),_:1},8,["open","title"]),d(" ── Run analytics / details modal ──────────────────────── "),o(Y,{open:e.showAnalyticsModal,"onUpdate:open":t[16]||(t[16]=a=>e.showAnalyticsModal=a),title:e.t("reputation.analytics.title",{runId:e.currentRun?.runId?.slice(0,12)||""}),width:780,footer:null},{default:n(()=>[e.currentRun?(u(),p("div",Rt,[o(ne,{column:2,size:"small",bordered:""},{default:n(()=>[o(C,{label:e.t("reputation.analytics.objective")},{default:n(()=>[o(j,{color:e.objectiveColor(e.currentRun.objective)},{default:n(()=>[f(s(e.objectiveLabel(e.currentRun.objective)),1)]),_:1},8,["color"])]),_:1},8,["label"]),o(C,{label:e.t("reputation.analytics.status")},{default:n(()=>[o(j,{color:e.statusColor(e.currentRun.status)},{default:n(()=>[f(s(e.statusLabel(e.currentRun.status)),1)]),_:1},8,["color"])]),_:1},8,["label"]),o(C,{label:e.t("reputation.analytics.iterations")},{default:n(()=>[f(s(e.currentRun.iterations),1)]),_:1},8,["label"]),o(C,{label:e.t("reputation.analytics.bestScore")},{default:n(()=>[v("span",{style:pe({color:e.scoreColor(e.currentRun.bestScore),fontWeight:500,fontFamily:"monospace"})},s(e.currentRun.bestScore.toFixed(4)),5)]),_:1},8,["label"]),o(C,{label:e.t("reputation.analytics.createdAt")},{default:n(()=>[f(s(e.formatReputationTime(e.currentRun.createdAt)),1)]),_:1},8,["label"]),e.currentRun.completedAt?(u(),x(C,{key:0,label:e.t("reputation.analytics.completedAt")},{default:n(()=>[f(s(e.formatReputationTime(e.currentRun.completedAt)),1)]),_:1},8,["label"])):d("v-if",!0),e.currentRun.bestParams?(u(),x(C,{key:1,label:e.t("reputation.analytics.bestParams"),span:2},{default:n(()=>[v("pre",wt,s(e.formatParams(e.currentRun.bestParams)),1)]),_:1},8,["label"])):d("v-if",!0),e.currentRun.errorMessage?(u(),x(C,{key:2,label:e.t("reputation.analytics.errorMessage"),span:2},{default:n(()=>[v("span",jt,s(e.currentRun.errorMessage),1)]),_:1},8,["label"])):d("v-if",!0)]),_:1}),o(re,{spinning:e.loadingAnalytics},{default:n(()=>[e.currentAnalytics?(u(),p("div",Ct,[v("h4",Dt,s(e.t("reputation.analytics.distributionTitle")),1),o(O,{size:"small",style:{"margin-bottom":"12px"}},{default:n(()=>[(u(!0),p(F,null,L(e.currentAnalytics.reputationDistribution.buckets,a=>(u(),p("div",{key:a.label,class:"bucket-row"},[v("span",Tt,s(a.label),1),o(E,{percent:e.bucketPct(a),"stroke-color":a.count>0?"#1677ff":"#d9d9d9",format:()=>`${a.count}`,size:"small",style:{flex:"1","margin-left":"12px"}},null,8,["percent","stroke-color","format"])]))),128)),e.currentAnalytics.reputationDistribution.mean!==null?(u(),p("div",Ft,[f(s(e.t("reputation.analytics.mean",{value:e.currentAnalytics.reputationDistribution.mean.toFixed(4)}))+" ",1),e.currentAnalytics.reputationDistribution.stdDev!==null?(u(),p("span",Et,s(e.t("reputation.analytics.stdDev",{value:e.currentAnalytics.reputationDistribution.stdDev.toFixed(4)})),1)):d("v-if",!0)])):d("v-if",!0)]),_:1}),e.currentAnalytics.recommendations.length?(u(),x(O,{key:0,title:e.t("reputation.analytics.recommendations"),size:"small"},{default:n(()=>[o(ee,{size:"small","data-source":e.currentAnalytics.recommendations},{renderItem:n(({item:a})=>[o($,null,{default:n(()=>[o(e.ArrowRightOutlined,{style:{color:"#faad14","margin-right":"8px"}}),f(" "+s(a),1)]),_:2},1024)]),_:1},8,["data-source"])]),_:1},8,["title"])):d("v-if",!0)])):d("v-if",!0)]),_:1},8,["spinning"])])):d("v-if",!0)]),_:1},8,["open","title"])])}const io=Be(nt,[["render",It],["__scopeId","data-v-c4829a4e"],["__file","/tmp/cc-web-panel-PV9Dxg/repo/packages/web-panel/src/views/Reputation.vue"]]);export{io as default};
1
+ import{I as m,J as p,U as v,R as s,c as o,K as n,V as d,S as x,o as me,b as se,a as te,r as _,P as u,Q as f,F,Z as L,_ as Pe,$ as pe}from"./vendor-BvqAck49.js";import{_ as Be,b as fe,u as ye,E as be,d as g}from"./index-wEmgmG9r.js";import{s as he}from"./community-parser-CO25nZFt.js";import ve from"./index-DeN7De7q.js";import{aU as Ve,l as Je,L as Ye,q as We,at as qe,ak as Ke,$ as Ze,am as He,as as Ge,R as Qe}from"./icons-DP3uiYxy.js";import"./KeyCode-D63Tfrq7.js";import"./omit-BfJzbWsb.js";import"./pickAttrs-CmfqYIiL.js";import"./initDefaultProps-BcboSW0u.js";import"./motion-CJFBvrIr.js";import"./raf-Deuc0E8-.js";import"./index-L-uPkzzS.js";import"./index-Drhspi9z.js";import"./isVisible-C7tPsqfj.js";import"./useState-BK4hy8Ma.js";import"./devWarning-DD8LWYUk.js";import"./compact-item-DBW4zsaa.js";import"./createContext-D-UkFz2M.js";import"./Compact-ldL9fyLc.js";import"./_getTag-DnrRH4E6.js";import"./styleChecker-ZSwUScrp.js";import"./zoom-Cyvmz3v6.js";import"./ActionButton-D_oEGk6a.js";import"./vnode-TfIXtx5S.js";function q(l){const t=he(l);if(!t)return null;try{return JSON.parse(t)}catch{}const r=t.match(/\{[\s\S]*\}|\[[\s\S]*\]/);if(!r)return null;try{return JSON.parse(r[0])}catch{return null}}const Oe=Object.freeze(["accuracy","fairness","resilience","convergence_speed"]),Xe=Object.freeze(["none","exponential","linear","step"]),$e=Object.freeze(["z_score","iqr"]),ze=Object.freeze(["running","complete","applied","failed","cancelled"]),et=Object.freeze(["generic","task","review","vote"]);function k(l,t=0){return typeof l=="number"&&Number.isFinite(l)?l:t}function N(l){if(!l)return{noDb:!1,error:""};const t=he(l),r=/Database not available/i.test(t);return{noDb:r,error:r?"Database not available":""}}function tt(l,t=0){if(!l||typeof l!="object")return null;const r=l.did||"";return r?{key:r,did:r,score:k(l.score,0),observations:k(l.observations,0),decay:String(l.decay||"none"),weightTotal:k(l.weightTotal,0),_idx:t}:null}function ce(l){const t=q(l);return Array.isArray(t)?t.map(tt).filter(Boolean):[]}function Ae(l,t=0){if(!l||typeof l!="object")return null;const r=l.did||"";return r?{key:`${r}-${t}`,did:r,score:k(l.score,0),reason:String(l.reason||""),zScore:typeof l.zScore=="number"?l.zScore:null,lower:typeof l.lower=="number"?l.lower:null,upper:typeof l.upper=="number"?l.upper:null}:null}function _e(l){const t=q(l);if(!t||typeof t!="object"||Array.isArray(t))return{method:"",threshold:0,totalSamples:0,anomalies:[],summary:"",message:""};const r=Array.isArray(t.anomalies)?t.anomalies.map(Ae).filter(Boolean):[];return{method:String(t.method||""),threshold:k(t.threshold,0),totalSamples:k(t.totalSamples,0),anomalies:r,summary:t.summary?String(t.summary):"",message:t.message?String(t.message):""}}function Re(l,t=0){if(!l||typeof l!="object")return null;const r=l.runId||"";return r?{key:r,runId:r,objective:String(l.objective||""),iterations:k(l.iterations,0),paramSpace:l.paramSpace??null,bestParams:l.bestParams??null,bestScore:k(l.bestScore,0),status:String(l.status||"complete").toLowerCase(),createdAt:l.createdAt??null,completedAt:l.completedAt??null,analytics:l.analytics??null,errorMessage:l.errorMessage??"",_idx:t}:null}function ge(l){const t=q(l);return Array.isArray(t)?t.map(Re).filter(Boolean):[]}function xe(l){const t=q(l);return!t||typeof t!="object"||Array.isArray(t)?null:Re(t,0)}function ke(l){const t=q(l);if(!t||typeof t!="object"||Array.isArray(t))return null;const r=t.reputationDistribution||{};return{analyticsId:String(t.analyticsId||""),runId:String(t.runId||""),reputationDistribution:{buckets:Array.isArray(r.buckets)?r.buckets.filter(e=>e&&typeof e=="object").map(e=>({label:String(e.label||""),count:k(e.count,0),min:typeof e.min=="number"?e.min:null,max:typeof e.max=="number"?e.max:null})):[],mean:typeof r.mean=="number"?r.mean:null,stdDev:typeof r.stdDev=="number"?r.stdDev:null},anomalies:t.anomalies&&typeof t.anomalies=="object"?{method:String(t.anomalies.method||""),totalSamples:k(t.anomalies.totalSamples,0),anomalies:Array.isArray(t.anomalies.anomalies)?t.anomalies.anomalies.map(Ae).filter(Boolean):[],summary:t.anomalies.summary?String(t.anomalies.summary):"",message:t.anomalies.message?String(t.anomalies.message):""}:{method:"",totalSamples:0,anomalies:[],summary:"",message:""},recommendations:Array.isArray(t.recommendations)?t.recommendations.filter(e=>typeof e=="string"):[]}}const ot={totalRuns:0,activeRuns:0,maxConcurrentOptimizations:0,byStatus:{},byObjective:{},observations:{totalObservations:0,totalDids:0},bestScoreEver:0};function Se(l){const t=JSON.parse(JSON.stringify(ot));for(const e of ze)t.byStatus[e]=0;for(const e of Oe)t.byObjective[e]=0;const r=q(l);if(!r||typeof r!="object"||Array.isArray(r))return t;if(t.totalRuns=k(r.totalRuns,0),t.activeRuns=k(r.activeRuns,0),t.maxConcurrentOptimizations=k(r.maxConcurrentOptimizations,0),t.bestScoreEver=k(r.bestScoreEver,0),r.byStatus&&typeof r.byStatus=="object")for(const[e,w]of Object.entries(r.byStatus))typeof w=="number"&&Number.isFinite(w)&&(t.byStatus[e]=w);if(r.byObjective&&typeof r.byObjective=="object")for(const[e,w]of Object.entries(r.byObjective))typeof w=="number"&&Number.isFinite(w)&&(t.byObjective[e]=w);return r.observations&&typeof r.observations=="object"&&(t.observations.totalObservations=k(r.observations.totalObservations,0),t.observations.totalDids=k(r.observations.totalDids,0)),t}function at(l){if(l==null||l==="")return"—";const t=typeof l=="number"?new Date(l):new Date(String(l));return isNaN(t.getTime())?String(l):t.toLocaleString("zh-CN",{hour12:!1})}const nt={__name:"Reputation",setup(l,{expose:t}){t();const{t:r}=fe(),e=ye(),w=be.PRESENTED_IMAGE_SIMPLE,Q=_(!1),R=_(!1),K=_(!1),U=_(!1),A=_(!1),O=_([]),z=_([]),V=_({totalRuns:0,activeRuns:0,maxConcurrentOptimizations:0,byStatus:{},byObjective:{},observations:{totalObservations:0,totalDids:0},bestScoreEver:0}),P=_({noDb:!1,error:""}),X=_("scores"),E=_("none"),Z=_(!1),J=_(!1),j=_(!1),H=_(!1),S=te({did:"",score:.8,kind:"generic",weight:1}),h=te({objective:"accuracy",iterations:50}),T=te({method:"z_score",threshold:2.5,decay:"none"}),D=_(null),I=_(null),B=_(null),Y=se(()=>[{title:r("reputation.scoreColumns.rank"),key:"rank",width:"60px"},{title:r("reputation.scoreColumns.did"),key:"did"},{title:r("reputation.scoreColumns.score"),key:"score",width:"220px"},{title:r("reputation.scoreColumns.observations"),key:"observations",width:"100px"},{title:r("reputation.scoreColumns.weightTotal"),key:"weightTotal",width:"100px"}]),oe=se(()=>[{title:r("reputation.runColumns.runId"),key:"runId",width:"140px"},{title:r("reputation.runColumns.objective"),key:"objective",width:"140px"},{title:r("reputation.runColumns.iterations"),key:"iterations",width:"80px"},{title:r("reputation.runColumns.bestScore"),key:"bestScore",width:"110px"},{title:r("reputation.runColumns.status"),key:"status",width:"100px"},{title:r("reputation.runColumns.createdAt"),key:"createdAt",width:"160px"},{title:r("reputation.runColumns.action"),key:"action",width:"160px"}]);function ae(i){const c=`reputation.decay.${i}`,y=r(c);return y===c?i:y}function $(i){const c=`reputation.kind.${i}`,y=r(c);return y===c?i:y}function ee(i){const c=`reputation.objective.${i}`,y=r(c);return y===c?i:y}function C(i){return{accuracy:"blue",fairness:"green",resilience:"purple",convergence_speed:"orange"}[i]||"default"}function ne(i){return{accuracy:"#1677ff",fairness:"#52c41a",resilience:"#722ed1",convergence_speed:"#fa8c16"}[i]||"#888"}function re(i){const c=`reputation.objectiveDesc.${i}`,y=r(c);return y===c?"":y}function a(i){const c=`reputation.status.${i}`,y=r(c);return y===c?i:y}function b(i){return{running:"processing",complete:"blue",applied:"green",failed:"red",cancelled:"default"}[i]||"default"}function W(i){return{running:"#1677ff",complete:"#13c2c2",applied:"#52c41a",failed:"#ff4d4f",cancelled:"#888"}[i]||"#888"}function we(i){return i===0?"gold":i===1?"silver":i===2?"bronze":""}function je(i){return i>=.8?"#52c41a":i>=.5?"#1677ff":i>=.3?"#faad14":"#ff4d4f"}function Ce(i,c){return c?Math.round(i/c*100):0}function Te(i){const c=I.value?.reputationDistribution.buckets.reduce((y,M)=>y+M.count,0)||0;return c?Math.round(i.count/c*100):0}function De(i){if(typeof i=="string")return i;try{return JSON.stringify(i,null,2)}catch{return String(i)}}async function G(){Q.value=!0,P.value={noDb:!1,error:""};try{const[i,c,y]=await Promise.all([e.execute(`reputation list --decay ${E.value} --json`,1e4).catch(()=>({output:""})),e.execute("reputation runs --limit 50 --json",1e4).catch(()=>({output:""})),e.execute("reputation stats-v2 --json",8e3).catch(()=>({output:""}))]),M=[i,c,y].map(le=>N(le.output)).find(le=>le.noDb);M&&(P.value=M),O.value=ce(i.output),z.value=ge(c.output),V.value=Se(y.output)}catch(i){g.error(r("reputation.messages.loadFailed",{err:i?.message||i}))}finally{Q.value=!1}}async function Fe(){try{const{output:i}=await e.execute(`reputation list --decay ${E.value} --json`,1e4),c=N(i);if(c.noDb){P.value=c;return}O.value=ce(i)}catch(i){g.error(r("reputation.messages.loadScoresFailed",{err:i?.message||i}))}}async function Ee(){if(!S.did.trim()){g.warning(r("reputation.messages.didRequired"));return}if(S.score<0||S.score>1){g.warning(r("reputation.messages.scoreRange"));return}R.value=!0;try{const i=[`reputation observe "${S.did.trim().replace(/"/g,'\\"')}"`,String(S.score),`-k ${S.kind}`,`-w ${S.weight}`,"--json"],{output:c}=await e.execute(i.join(" "),1e4);if(N(c).noDb){g.error(r("reputation.messages.needInit"));return}if(!/"did"/.test(c)){g.error(r("reputation.messages.observeFailed",{err:c.slice(0,120)}));return}g.success(r("reputation.messages.observeOk")),Z.value=!1,ue(),await G()}catch(i){g.error(r("reputation.messages.observeFailed",{err:i?.message||i}))}finally{R.value=!1}}async function Ie(){K.value=!0;try{const i=["reputation optimize",`-o ${h.objective}`,`-i ${h.iterations}`,"--json"],{output:c}=await e.execute(i.join(" "),6e4);if(N(c).noDb){g.error(r("reputation.messages.needInit"));return}const M=xe(c);if(!M){g.error(r("reputation.messages.optimizeFailed",{err:c.slice(0,120)}));return}J.value=!1,g.success(r("reputation.messages.optimizeOk",{score:M.bestScore.toFixed(4)})),await G(),D.value=M,H.value=!0,await ie()}catch(i){g.error(r("reputation.messages.optimizeFailed",{err:i?.message||i}))}finally{K.value=!1}}async function Me(i){ve.confirm({title:r("reputation.applyConfirm.title"),content:r("reputation.applyConfirm.content",{runId:i.runId.slice(0,12)}),okText:r("reputation.applyConfirm.ok"),cancelText:r("reputation.applyConfirm.cancel"),onOk:async()=>{try{const{output:c}=await e.execute(`reputation apply ${i.runId}`,8e3);if(N(c).noDb){g.error(r("reputation.messages.needInit"));return}if(/Failed|Error/i.test(c)&&!/Applied/i.test(c)){g.error(r("reputation.messages.applyFailed",{err:c.slice(0,120)}));return}g.success(r("reputation.messages.applyOk")),await G()}catch(c){g.error(r("reputation.messages.applyFailed",{err:c?.message||c}))}}})}async function Le(i){D.value=i,I.value=null,H.value=!0,await ie()}async function ie(){if(D.value){A.value=!0;try{const{output:i}=await e.execute(`reputation analytics ${D.value.runId} --json`,8e3);if(N(i).noDb)return;I.value=ke(i)}catch{}finally{A.value=!1}}}function Ne(){B.value=null,j.value=!0}async function Ue(){U.value=!0;try{const i=["reputation anomalies",`-m ${T.method}`,`-t ${T.threshold}`,`-d ${T.decay}`,"--json"],{output:c}=await e.execute(i.join(" "),1e4);if(N(c).noDb){g.error(r("reputation.messages.needInit"));return}B.value=_e(c)}catch(i){g.error(r("reputation.messages.detectFailed",{err:i?.message||i}))}finally{U.value=!1}}function ue(){S.did="",S.score=.8,S.kind="generic",S.weight=1}me(G);const de={t:r,ws:e,EMPTY_IMG:w,loading:Q,observing:R,optimizing:K,detectingAnomalies:U,loadingAnalytics:A,scores:O,runs:z,stats:V,errorState:P,activeTab:X,decayFilter:E,showObserveModal:Z,showOptimizeModal:J,showAnomaliesModal:j,showAnalyticsModal:H,observeForm:S,optimizeForm:h,anomalyForm:T,currentRun:D,currentAnalytics:I,anomalyResult:B,scoreColumns:Y,runColumns:oe,decayLabel:ae,kindLabel:$,objectiveLabel:ee,objectiveColor:C,objectiveBarColor:ne,objectiveDesc:re,statusLabel:a,statusColor:b,statusBarColor:W,rankClass:we,scoreColor:je,pctOfTotal:Ce,bucketPct:Te,formatParams:De,loadAll:G,loadScores:Fe,submitObservation:Ee,submitOptimization:Ie,applyRun:Me,viewRunAnalytics:Le,loadAnalyticsForCurrentRun:ie,openAnomaliesModal:Ne,runAnomalyDetection:Ue,resetObserveForm:ue,ref:_,onMounted:me,reactive:te,computed:se,get useI18n(){return fe},get ReloadOutlined(){return Qe},get PlusOutlined(){return Ge},get WarningOutlined(){return He},get ThunderboltOutlined(){return Ze},get UserOutlined(){return Ke},get EyeOutlined(){return qe},get ExperimentOutlined(){return We},get LoadingOutlined(){return Ye},get TrophyOutlined(){return Je},get ArrowRightOutlined(){return Ve},get message(){return g},get Modal(){return ve},get Empty(){return be},get useWsStore(){return ye},get parseScores(){return ce},get parseAnomalies(){return _e},get parseRun(){return xe},get parseRuns(){return ge},get parseAnalytics(){return ke},get parseStatsV2(){return Se},get detectReputationError(){return N},get formatReputationTime(){return at},get OPTIMIZATION_OBJECTIVES(){return Oe},get DECAY_MODELS(){return Xe},get ANOMALY_METHODS(){return $e},get RUN_STATUSES(){return ze},get OBSERVATION_KINDS(){return et}};return Object.defineProperty(de,"__isScriptSetup",{enumerable:!1,value:!0}),de}},rt={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},it={class:"page-title"},lt={class:"page-sub"},st={class:"filter-bar"},ct={style:{color:"var(--text-secondary)","font-size":"12px"}},ut={key:1,style:{color:"var(--text-primary)","font-family":"monospace","font-size":"12px"}},dt={key:3,style:{color:"var(--text-secondary)"}},mt={key:4,style:{color:"var(--text-secondary)","font-family":"monospace","font-size":"12px"}},pt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},ft={key:0,style:{color:"var(--text-primary)","font-family":"monospace","font-size":"12px"}},yt={key:2,style:{color:"var(--text-secondary)"}},bt={key:5,style:{color:"var(--text-secondary)","font-size":"11px"}},vt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},_t={style:{"margin-left":"8px",color:"var(--text-muted)","font-size":"12px"}},gt={style:{color:"var(--text-muted)","font-size":"11px","margin-top":"4px"}},xt={style:{"margin-left":"8px",color:"var(--text-muted)","font-size":"12px"}},kt={style:{"padding-top":"8px"}},St={style:{"margin-left":"8px",color:"var(--text-muted)","font-size":"12px"}},ht={key:1},Ot={style:{"font-family":"monospace","font-size":"12px",color:"var(--text-primary)"}},zt={style:{"margin-left":"8px",color:"var(--text-secondary)","font-size":"12px"}},At={key:0,style:{"margin-left":"8px",color:"var(--text-muted)","font-size":"11px"}},Rt={key:0,style:{"padding-top":"8px"}},wt={class:"params-pre"},jt={style:{color:"#ff4d4f"}},Ct={key:0,style:{"margin-top":"16px"}},Tt={style:{color:"var(--text-primary)","font-size":"13px",margin:"0 0 10px"}},Dt={class:"bucket-label"},Ft={key:0,style:{"margin-top":"8px",color:"var(--text-secondary)","font-size":"12px"}},Et={key:0,style:{"margin-left":"12px"}};function It(l,t,r,e,w,Q){const R=m("a-button"),K=m("a-space"),U=m("a-alert"),A=m("a-statistic"),O=m("a-card"),z=m("a-col"),V=m("a-row"),P=m("a-radio-button"),X=m("a-radio-group"),E=m("a-progress"),Z=m("a-table"),J=m("a-tab-pane"),j=m("a-tag"),H=m("a-tabs"),S=m("a-input"),h=m("a-form-item"),T=m("a-input-number"),D=m("a-select-option"),I=m("a-select"),B=m("a-form"),Y=m("a-modal"),oe=m("a-divider"),ae=m("a-empty"),$=m("a-list-item"),ee=m("a-list"),C=m("a-descriptions-item"),ne=m("a-descriptions"),re=m("a-spin");return u(),p("div",null,[v("div",rt,[v("div",null,[v("h2",it,s(e.t("reputation.title")),1),v("p",lt,s(e.t("reputation.subtitle")),1)]),o(K,null,{default:n(()=>[o(R,{loading:e.loading,onClick:e.loadAll},{icon:n(()=>[o(e.ReloadOutlined)]),default:n(()=>[f(" "+s(e.t("reputation.refresh")),1)]),_:1},8,["loading"]),o(R,{onClick:e.openAnomaliesModal},{icon:n(()=>[o(e.WarningOutlined)]),default:n(()=>[f(" "+s(e.t("reputation.actions.anomalies")),1)]),_:1}),o(R,{type:"primary",onClick:t[0]||(t[0]=a=>e.showOptimizeModal=!0)},{icon:n(()=>[o(e.ThunderboltOutlined)]),default:n(()=>[f(" "+s(e.t("reputation.actions.optimize")),1)]),_:1})]),_:1})]),d(" noDb banner "),e.errorState.noDb?(u(),x(U,{key:0,type:"info","show-icon":"",message:e.t("reputation.noDb.message"),description:e.t("reputation.noDb.description"),style:{"margin-bottom":"16px"}},null,8,["message","description"])):d("v-if",!0),d(" Stat cards "),o(V,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:n(()=>[o(z,{xs:12,sm:8,lg:5},{default:n(()=>[o(O,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[o(A,{title:e.t("reputation.stats.trackedDids"),value:e.stats.observations.totalDids,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:n(()=>[o(e.UserOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),o(z,{xs:12,sm:8,lg:5},{default:n(()=>[o(O,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[o(A,{title:e.t("reputation.stats.totalObservations"),value:e.stats.observations.totalObservations,"value-style":{color:"#722ed1",fontSize:"20px"}},{prefix:n(()=>[o(e.EyeOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),o(z,{xs:12,sm:8,lg:5},{default:n(()=>[o(O,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[o(A,{title:e.t("reputation.stats.optimizationRuns"),value:e.stats.totalRuns,"value-style":{color:"#13c2c2",fontSize:"20px"}},{prefix:n(()=>[o(e.ExperimentOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),o(z,{xs:12,sm:8,lg:5},{default:n(()=>[o(O,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[o(A,{title:e.t("reputation.stats.active"),value:e.stats.activeRuns,"value-style":{color:e.stats.activeRuns>0?"#1677ff":"#888",fontSize:"20px"},suffix:`/ ${e.stats.maxConcurrentOptimizations}`},{prefix:n(()=>[o(e.LoadingOutlined)]),_:1},8,["title","value","value-style","suffix"])]),_:1})]),_:1}),o(z,{xs:24,sm:8,lg:4},{default:n(()=>[o(O,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[o(A,{title:e.t("reputation.stats.bestEver"),value:e.stats.bestScoreEver,precision:3,"value-style":{color:"#52c41a",fontSize:"20px"}},{prefix:n(()=>[o(e.TrophyOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1})]),_:1}),d(" Tabs "),o(H,{activeKey:e.activeTab,"onUpdate:activeKey":t[3]||(t[3]=a=>e.activeTab=a),class:"reputation-tabs"},{default:n(()=>[d(" ── Scores tab ──────────────────────────────────────────── "),o(J,{key:"scores",tab:e.t("reputation.tabs.scores")},{default:n(()=>[v("div",st,[v("span",ct,s(e.t("reputation.filter.decayLabel")),1),o(X,{value:e.decayFilter,"onUpdate:value":t[1]||(t[1]=a=>e.decayFilter=a),size:"small","button-style":"solid",onChange:e.loadScores},{default:n(()=>[(u(!0),p(F,null,L(e.DECAY_MODELS,a=>(u(),x(P,{key:a,value:a},{default:n(()=>[f(s(e.decayLabel(a)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),o(R,{size:"small",onClick:t[2]||(t[2]=a=>e.showObserveModal=!0)},{icon:n(()=>[o(e.PlusOutlined)]),default:n(()=>[f(" "+s(e.t("reputation.filter.addObservation")),1)]),_:1})]),o(Z,{columns:e.scoreColumns,"data-source":e.scores,pagination:{pageSize:20,showTotal:a=>e.t("reputation.totals.dids",{count:a})},size:"small",loading:e.loading,style:{background:"var(--bg-card)"}},{bodyCell:n(({column:a,record:b,index:W})=>[a.key==="rank"?(u(),p("span",{key:0,class:Pe(["rank-pill",e.rankClass(W)])},s(W+1),3)):d("v-if",!0),a.key==="did"?(u(),p("span",ut,s(b.did),1)):d("v-if",!0),a.key==="score"?(u(),x(E,{key:2,percent:Math.round(b.score*100),"stroke-color":e.scoreColor(b.score),size:"small",format:()=>b.score.toFixed(4)},null,8,["percent","stroke-color","format"])):d("v-if",!0),a.key==="observations"?(u(),p("span",dt,s(b.observations),1)):d("v-if",!0),a.key==="weightTotal"?(u(),p("span",mt,s(b.weightTotal.toFixed(2)),1)):d("v-if",!0)]),emptyText:n(()=>[v("div",pt,[o(e.UserOutlined,{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),f(" "+s(e.t("reputation.empty.scores")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),d(" ── Runs tab ────────────────────────────────────────────── "),o(J,{key:"runs",tab:e.t("reputation.tabs.runs")},{default:n(()=>[o(Z,{columns:e.runColumns,"data-source":e.runs,pagination:{pageSize:20,showTotal:a=>e.t("reputation.totals.rows",{count:a})},size:"small",loading:e.loading,style:{background:"var(--bg-card)"}},{bodyCell:n(({column:a,record:b})=>[a.key==="runId"?(u(),p("span",ft,s(b.runId.slice(0,12)),1)):d("v-if",!0),a.key==="objective"?(u(),x(j,{key:1,color:e.objectiveColor(b.objective),style:{"font-family":"monospace"}},{default:n(()=>[f(s(e.objectiveLabel(b.objective)),1)]),_:2},1032,["color"])):d("v-if",!0),a.key==="iterations"?(u(),p("span",yt,s(b.iterations),1)):d("v-if",!0),a.key==="bestScore"?(u(),p("span",{key:3,style:pe({color:e.scoreColor(b.bestScore),fontWeight:500,fontFamily:"monospace"})},s(b.bestScore.toFixed(4)),5)):d("v-if",!0),a.key==="status"?(u(),x(j,{key:4,color:e.statusColor(b.status)},{default:n(()=>[f(s(e.statusLabel(b.status)),1)]),_:2},1032,["color"])):d("v-if",!0),a.key==="createdAt"?(u(),p("span",bt,s(e.formatReputationTime(b.createdAt)),1)):d("v-if",!0),a.key==="action"?(u(),p(F,{key:6},[o(R,{size:"small",type:"link",onClick:W=>e.viewRunAnalytics(b)},{default:n(()=>[f(s(e.t("reputation.rowActions.analyze")),1)]),_:1},8,["onClick"]),b.status==="complete"?(u(),x(R,{key:0,size:"small",type:"link",style:{color:"#52c41a"},onClick:W=>e.applyRun(b)},{default:n(()=>[f(s(e.t("reputation.rowActions.apply")),1)]),_:1},8,["onClick"])):d("v-if",!0)],64)):d("v-if",!0)]),emptyText:n(()=>[v("div",vt,[o(e.ExperimentOutlined,{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),f(" "+s(e.t("reputation.empty.runs")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),d(" ── Breakdown tab ───────────────────────────────────────── "),o(J,{key:"breakdown",tab:e.t("reputation.tabs.breakdown")},{default:n(()=>[o(V,{gutter:[16,16]},{default:n(()=>[o(z,{xs:24,lg:12},{default:n(()=>[o(O,{title:e.t("reputation.breakdown.byStatus"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[(u(!0),p(F,null,L(e.RUN_STATUSES,a=>(u(),p("div",{key:a,class:"bd-row"},[o(j,{color:e.statusColor(a),style:{"min-width":"80px","text-align":"center"}},{default:n(()=>[f(s(e.statusLabel(a)),1)]),_:2},1032,["color"]),o(E,{percent:e.pctOfTotal(e.stats.byStatus[a]||0,e.stats.totalRuns),"stroke-color":e.statusBarColor(a),format:()=>`${e.stats.byStatus[a]||0}`,size:"small",style:{flex:"1","margin-left":"12px"}},null,8,["percent","stroke-color","format"])]))),128))]),_:1},8,["title"])]),_:1}),o(z,{xs:24,lg:12},{default:n(()=>[o(O,{title:e.t("reputation.breakdown.byObjective"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[(u(!0),p(F,null,L(e.OPTIMIZATION_OBJECTIVES,a=>(u(),p("div",{key:a,class:"bd-row"},[o(j,{color:e.objectiveColor(a),style:{"min-width":"100px","text-align":"center","font-family":"monospace"}},{default:n(()=>[f(s(e.objectiveLabel(a)),1)]),_:2},1032,["color"]),o(E,{percent:e.pctOfTotal(e.stats.byObjective[a]||0,e.stats.totalRuns),"stroke-color":e.objectiveBarColor(a),format:()=>`${e.stats.byObjective[a]||0}`,size:"small",style:{flex:"1","margin-left":"12px"}},null,8,["percent","stroke-color","format"])]))),128))]),_:1},8,["title"])]),_:1})]),_:1})]),_:1},8,["tab"])]),_:1},8,["activeKey"]),d(" ── Add observation modal ──────────────────────────────── "),o(Y,{open:e.showObserveModal,"onUpdate:open":t[8]||(t[8]=a=>e.showObserveModal=a),title:e.t("reputation.observe.title"),"confirm-loading":e.observing,width:540,"ok-text":e.t("reputation.observe.ok"),"cancel-text":e.t("common.cancel"),onOk:e.submitObservation,onCancel:e.resetObserveForm},{default:n(()=>[o(B,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:n(()=>[o(h,{label:e.t("reputation.observe.didLabel"),required:""},{default:n(()=>[o(S,{value:e.observeForm.did,"onUpdate:value":t[4]||(t[4]=a=>e.observeForm.did=a),placeholder:e.t("reputation.observe.didPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),o(h,{label:e.t("reputation.observe.scoreLabel"),required:""},{default:n(()=>[o(T,{value:e.observeForm.score,"onUpdate:value":t[5]||(t[5]=a=>e.observeForm.score=a),min:0,max:1,step:.05,style:{width:"160px"}},null,8,["value"]),v("span",_t,s(e.t("reputation.observe.scoreRange")),1)]),_:1},8,["label"]),o(h,{label:e.t("reputation.observe.kindLabel")},{default:n(()=>[o(I,{value:e.observeForm.kind,"onUpdate:value":t[6]||(t[6]=a=>e.observeForm.kind=a)},{default:n(()=>[(u(!0),p(F,null,L(e.OBSERVATION_KINDS,a=>(u(),x(D,{key:a,value:a},{default:n(()=>[f(s(e.kindLabel(a)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"]),o(h,{label:e.t("reputation.observe.weightLabel")},{default:n(()=>[o(T,{value:e.observeForm.weight,"onUpdate:value":t[7]||(t[7]=a=>e.observeForm.weight=a),min:.1,step:.1,style:{width:"120px"}},null,8,["value"])]),_:1},8,["label"])]),_:1})]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),d(" ── Optimize modal ─────────────────────────────────────── "),o(Y,{open:e.showOptimizeModal,"onUpdate:open":t[11]||(t[11]=a=>e.showOptimizeModal=a),title:e.t("reputation.optimize.title"),"confirm-loading":e.optimizing,width:540,"ok-text":e.t("reputation.optimize.ok"),"cancel-text":e.t("common.cancel"),onOk:e.submitOptimization},{default:n(()=>[o(B,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:n(()=>[o(h,{label:e.t("reputation.optimize.objectiveLabel"),required:""},{default:n(()=>[o(I,{value:e.optimizeForm.objective,"onUpdate:value":t[9]||(t[9]=a=>e.optimizeForm.objective=a)},{default:n(()=>[(u(!0),p(F,null,L(e.OPTIMIZATION_OBJECTIVES,a=>(u(),x(D,{key:a,value:a},{default:n(()=>[f(s(e.objectiveLabel(a)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),v("div",gt,s(e.objectiveDesc(e.optimizeForm.objective)),1)]),_:1},8,["label"]),o(h,{label:e.t("reputation.optimize.iterationsLabel")},{default:n(()=>[o(T,{value:e.optimizeForm.iterations,"onUpdate:value":t[10]||(t[10]=a=>e.optimizeForm.iterations=a),min:1,max:1e3,step:10,style:{width:"160px"}},null,8,["value"]),v("span",xt,s(e.t("reputation.optimize.iterationsRange")),1)]),_:1},8,["label"])]),_:1}),o(U,{type:"info","show-icon":"",message:e.t("reputation.optimize.syncMessage"),description:e.t("reputation.optimize.syncDescription"),style:{"margin-top":"12px"}},null,8,["message","description"])]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),d(" ── Anomaly detection modal ────────────────────────────── "),o(Y,{open:e.showAnomaliesModal,"onUpdate:open":t[15]||(t[15]=a=>e.showAnomaliesModal=a),title:e.t("reputation.anomaly.title"),width:640,footer:null},{default:n(()=>[v("div",kt,[o(B,{"label-col":{span:5},"wrapper-col":{span:19}},{default:n(()=>[o(h,{label:e.t("reputation.anomaly.methodLabel")},{default:n(()=>[o(X,{value:e.anomalyForm.method,"onUpdate:value":t[12]||(t[12]=a=>e.anomalyForm.method=a),"button-style":"solid"},{default:n(()=>[(u(!0),p(F,null,L(e.ANOMALY_METHODS,a=>(u(),x(P,{key:a,value:a},{default:n(()=>[f(s(a==="z_score"?e.t("reputation.anomaly.zScoreLabel"):e.t("reputation.anomaly.iqrLabel")),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"]),o(h,{label:e.t("reputation.anomaly.thresholdLabel")},{default:n(()=>[o(T,{value:e.anomalyForm.threshold,"onUpdate:value":t[13]||(t[13]=a=>e.anomalyForm.threshold=a),min:.5,step:.1,style:{width:"120px"}},null,8,["value"]),v("span",St,s(e.t("reputation.anomaly.thresholdHint")),1)]),_:1},8,["label"]),o(h,{label:e.t("reputation.anomaly.decayLabel")},{default:n(()=>[o(I,{value:e.anomalyForm.decay,"onUpdate:value":t[14]||(t[14]=a=>e.anomalyForm.decay=a),style:{width:"200px"}},{default:n(()=>[(u(!0),p(F,null,L(e.DECAY_MODELS,a=>(u(),x(D,{key:a,value:a},{default:n(()=>[f(s(e.decayLabel(a)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"]),o(h,{"wrapper-col":{offset:5,span:19}},{default:n(()=>[o(R,{type:"primary",loading:e.detectingAnomalies,onClick:e.runAnomalyDetection},{icon:n(()=>[o(e.WarningOutlined)]),default:n(()=>[f(" "+s(e.t("reputation.anomaly.start")),1)]),_:1},8,["loading"])]),_:1})]),_:1}),o(oe),e.anomalyResult?(u(),p("div",ht,[o(V,{gutter:12,style:{"margin-bottom":"12px"}},{default:n(()=>[o(z,{span:8},{default:n(()=>[o(A,{title:e.t("reputation.anomaly.totalSamples"),value:e.anomalyResult.totalSamples,"value-style":{fontSize:"16px"}},null,8,["title","value"])]),_:1}),o(z,{span:8},{default:n(()=>[o(A,{title:e.t("reputation.anomaly.threshold"),value:e.anomalyResult.threshold,precision:2,"value-style":{fontSize:"16px"}},null,8,["title","value"])]),_:1}),o(z,{span:8},{default:n(()=>[o(A,{title:e.t("reputation.anomaly.anomalies"),value:e.anomalyResult.anomalies.length,"value-style":{color:e.anomalyResult.anomalies.length>0?"#ff4d4f":"#52c41a",fontSize:"16px"}},null,8,["title","value","value-style"])]),_:1})]),_:1}),e.anomalyResult.message?(u(),x(U,{key:0,message:e.anomalyResult.message,type:"warning","show-icon":"",style:{"margin-bottom":"12px"}},null,8,["message"])):d("v-if",!0),e.anomalyResult.anomalies.length?(u(),x(ee,{key:1,size:"small","data-source":e.anomalyResult.anomalies},{renderItem:n(({item:a})=>[o($,null,{default:n(()=>[v("span",Ot,s(a.did),1),o(j,{color:"red",style:{"margin-left":"8px"}},{default:n(()=>[f(s(e.t("reputation.anomaly.scoreTag",{score:a.score.toFixed(4)})),1)]),_:2},1024),v("span",zt,s(a.reason),1),a.zScore!==null?(u(),p("span",At,s(e.t("reputation.anomaly.zNote",{value:a.zScore.toFixed(2)})),1)):d("v-if",!0)]),_:2},1024)]),_:1},8,["data-source"])):d("v-if",!0)])):(u(),x(ae,{key:0,description:e.t("reputation.anomaly.notDetected"),image:e.EMPTY_IMG},null,8,["description","image"]))])]),_:1},8,["open","title"]),d(" ── Run analytics / details modal ──────────────────────── "),o(Y,{open:e.showAnalyticsModal,"onUpdate:open":t[16]||(t[16]=a=>e.showAnalyticsModal=a),title:e.t("reputation.analytics.title",{runId:e.currentRun?.runId?.slice(0,12)||""}),width:780,footer:null},{default:n(()=>[e.currentRun?(u(),p("div",Rt,[o(ne,{column:2,size:"small",bordered:""},{default:n(()=>[o(C,{label:e.t("reputation.analytics.objective")},{default:n(()=>[o(j,{color:e.objectiveColor(e.currentRun.objective)},{default:n(()=>[f(s(e.objectiveLabel(e.currentRun.objective)),1)]),_:1},8,["color"])]),_:1},8,["label"]),o(C,{label:e.t("reputation.analytics.status")},{default:n(()=>[o(j,{color:e.statusColor(e.currentRun.status)},{default:n(()=>[f(s(e.statusLabel(e.currentRun.status)),1)]),_:1},8,["color"])]),_:1},8,["label"]),o(C,{label:e.t("reputation.analytics.iterations")},{default:n(()=>[f(s(e.currentRun.iterations),1)]),_:1},8,["label"]),o(C,{label:e.t("reputation.analytics.bestScore")},{default:n(()=>[v("span",{style:pe({color:e.scoreColor(e.currentRun.bestScore),fontWeight:500,fontFamily:"monospace"})},s(e.currentRun.bestScore.toFixed(4)),5)]),_:1},8,["label"]),o(C,{label:e.t("reputation.analytics.createdAt")},{default:n(()=>[f(s(e.formatReputationTime(e.currentRun.createdAt)),1)]),_:1},8,["label"]),e.currentRun.completedAt?(u(),x(C,{key:0,label:e.t("reputation.analytics.completedAt")},{default:n(()=>[f(s(e.formatReputationTime(e.currentRun.completedAt)),1)]),_:1},8,["label"])):d("v-if",!0),e.currentRun.bestParams?(u(),x(C,{key:1,label:e.t("reputation.analytics.bestParams"),span:2},{default:n(()=>[v("pre",wt,s(e.formatParams(e.currentRun.bestParams)),1)]),_:1},8,["label"])):d("v-if",!0),e.currentRun.errorMessage?(u(),x(C,{key:2,label:e.t("reputation.analytics.errorMessage"),span:2},{default:n(()=>[v("span",jt,s(e.currentRun.errorMessage),1)]),_:1},8,["label"])):d("v-if",!0)]),_:1}),o(re,{spinning:e.loadingAnalytics},{default:n(()=>[e.currentAnalytics?(u(),p("div",Ct,[v("h4",Tt,s(e.t("reputation.analytics.distributionTitle")),1),o(O,{size:"small",style:{"margin-bottom":"12px"}},{default:n(()=>[(u(!0),p(F,null,L(e.currentAnalytics.reputationDistribution.buckets,a=>(u(),p("div",{key:a.label,class:"bucket-row"},[v("span",Dt,s(a.label),1),o(E,{percent:e.bucketPct(a),"stroke-color":a.count>0?"#1677ff":"#d9d9d9",format:()=>`${a.count}`,size:"small",style:{flex:"1","margin-left":"12px"}},null,8,["percent","stroke-color","format"])]))),128)),e.currentAnalytics.reputationDistribution.mean!==null?(u(),p("div",Ft,[f(s(e.t("reputation.analytics.mean",{value:e.currentAnalytics.reputationDistribution.mean.toFixed(4)}))+" ",1),e.currentAnalytics.reputationDistribution.stdDev!==null?(u(),p("span",Et,s(e.t("reputation.analytics.stdDev",{value:e.currentAnalytics.reputationDistribution.stdDev.toFixed(4)})),1)):d("v-if",!0)])):d("v-if",!0)]),_:1}),e.currentAnalytics.recommendations.length?(u(),x(O,{key:0,title:e.t("reputation.analytics.recommendations"),size:"small"},{default:n(()=>[o(ee,{size:"small","data-source":e.currentAnalytics.recommendations},{renderItem:n(({item:a})=>[o($,null,{default:n(()=>[o(e.ArrowRightOutlined,{style:{color:"#faad14","margin-right":"8px"}}),f(" "+s(a),1)]),_:2},1024)]),_:1},8,["data-source"])]),_:1},8,["title"])):d("v-if",!0)])):d("v-if",!0)]),_:1},8,["spinning"])])):d("v-if",!0)]),_:1},8,["open","title"])])}const io=Be(nt,[["render",It],["__scopeId","data-v-c4829a4e"],["__file","/tmp/cc-web-panel-drwr9c/repo/packages/web-panel/src/views/Reputation.vue"]]);export{io as default};
@@ -1 +1 @@
1
- import{q as z,f as S,h as $,$ as f,i as N}from"./index-7ME2_dHQ.js";import{d as _,o as E,f as F,b as o,c as I,r as h}from"./vendor-BvqAck49.js";import{u as M,r as u}from"./responsiveObserve-BU9yRWZK.js";import{u as T}from"./useFlexGapSupport-fg8Q35CB.js";import{b as V,c as q}from"./index-Bqz7zZa7.js";const D=()=>({align:f([String,Object]),justify:f([String,Object]),prefixCls:String,gutter:f([Number,Array,Object],0),wrap:{type:Boolean,default:void 0}}),P=_({compatConfig:{MODE:3},name:"ARow",inheritAttrs:!1,props:D(),setup(s,G){let{slots:d,attrs:l}=G;const{prefixCls:a,direction:R}=z("row",s),[O,C]=V(a);let m;const v=M(),p=h({xs:!0,sm:!0,md:!0,lg:!0,xl:!0,xxl:!0}),y=h({xs:!1,sm:!1,md:!1,lg:!1,xl:!1,xxl:!1}),g=e=>o(()=>{if(typeof s[e]=="string")return s[e];if(typeof s[e]!="object")return"";for(let t=0;t<u.length;t++){const n=u[t];if(!y.value[n])continue;const r=s[e][n];if(r!==void 0)return r}return""}),b=g("align"),x=g("justify"),w=T();E(()=>{m=v.value.subscribe(e=>{y.value=e;const t=s.gutter||0;(!Array.isArray(t)&&typeof t=="object"||Array.isArray(t)&&(typeof t[0]=="object"||typeof t[1]=="object"))&&(p.value=e)})}),F(()=>{v.value.unsubscribe(m)});const A=o(()=>{const e=[void 0,void 0],{gutter:t=0}=s;return(Array.isArray(t)?t:[t,void 0]).forEach((r,j)=>{if(typeof r=="object")for(let i=0;i<u.length;i++){const c=u[i];if(p.value[c]&&r[c]!==void 0){e[j]=r[c];break}}else e[j]=r}),e});q({gutter:A,supportFlexGap:w,wrap:o(()=>s.wrap)});const k=o(()=>N(a.value,{[`${a.value}-no-wrap`]:s.wrap===!1,[`${a.value}-${x.value}`]:x.value,[`${a.value}-${b.value}`]:b.value,[`${a.value}-rtl`]:R.value==="rtl"},l.class,C.value)),B=o(()=>{const e=A.value,t={},n=e[0]!=null&&e[0]>0?`${e[0]/-2}px`:void 0,r=e[1]!=null&&e[1]>0?`${e[1]/-2}px`:void 0;return n&&(t.marginLeft=n,t.marginRight=n),w.value?t.rowGap=`${e[1]}px`:r&&(t.marginTop=r,t.marginBottom=r),t});return()=>{var e;return O(I("div",S(S({},l),{},{class:k.value,style:$($({},B.value),l.style)}),[(e=d.default)===null||e===void 0?void 0:e.call(d)]))}}});export{P as A};
1
+ import{q as z,f as S,h as $,$ as f,i as N}from"./index-wEmgmG9r.js";import{d as _,o as E,f as F,b as o,c as I,r as h}from"./vendor-BvqAck49.js";import{u as M,r as u}from"./responsiveObserve-DaEkOCb-.js";import{u as T}from"./useFlexGapSupport-Viy5DmaP.js";import{b as V,c as q}from"./index-ULxnYhN-.js";const D=()=>({align:f([String,Object]),justify:f([String,Object]),prefixCls:String,gutter:f([Number,Array,Object],0),wrap:{type:Boolean,default:void 0}}),P=_({compatConfig:{MODE:3},name:"ARow",inheritAttrs:!1,props:D(),setup(s,G){let{slots:d,attrs:l}=G;const{prefixCls:a,direction:R}=z("row",s),[O,C]=V(a);let m;const v=M(),p=h({xs:!0,sm:!0,md:!0,lg:!0,xl:!0,xxl:!0}),y=h({xs:!1,sm:!1,md:!1,lg:!1,xl:!1,xxl:!1}),g=e=>o(()=>{if(typeof s[e]=="string")return s[e];if(typeof s[e]!="object")return"";for(let t=0;t<u.length;t++){const n=u[t];if(!y.value[n])continue;const r=s[e][n];if(r!==void 0)return r}return""}),b=g("align"),x=g("justify"),w=T();E(()=>{m=v.value.subscribe(e=>{y.value=e;const t=s.gutter||0;(!Array.isArray(t)&&typeof t=="object"||Array.isArray(t)&&(typeof t[0]=="object"||typeof t[1]=="object"))&&(p.value=e)})}),F(()=>{v.value.unsubscribe(m)});const A=o(()=>{const e=[void 0,void 0],{gutter:t=0}=s;return(Array.isArray(t)?t:[t,void 0]).forEach((r,j)=>{if(typeof r=="object")for(let i=0;i<u.length;i++){const c=u[i];if(p.value[c]&&r[c]!==void 0){e[j]=r[c];break}}else e[j]=r}),e});q({gutter:A,supportFlexGap:w,wrap:o(()=>s.wrap)});const k=o(()=>N(a.value,{[`${a.value}-no-wrap`]:s.wrap===!1,[`${a.value}-${x.value}`]:x.value,[`${a.value}-${b.value}`]:b.value,[`${a.value}-rtl`]:R.value==="rtl"},l.class,C.value)),B=o(()=>{const e=A.value,t={},n=e[0]!=null&&e[0]>0?`${e[0]/-2}px`:void 0,r=e[1]!=null&&e[1]>0?`${e[1]/-2}px`:void 0;return n&&(t.marginLeft=n,t.marginRight=n),w.value?t.rowGap=`${e[1]}px`:r&&(t.marginTop=r,t.marginBottom=r),t});return()=>{var e;return O(I("div",S(S({},l),{},{class:k.value,style:$($({},B.value),l.style)}),[(e=d.default)===null||e===void 0?void 0:e.call(d)]))}}});export{P as A};
@@ -1,3 +1,3 @@
1
- import{I as m,J as y,U as f,c as s,K as o,V as v,S as R,Q as g,o as Q,b as q,r as x,P as i,F as N,Z as K,R as k,a2 as Y}from"./vendor-BvqAck49.js";import{_ as $,u as Z,d as u}from"./index-7ME2_dHQ.js";import{aB as ee,aQ as te,R as ne,as as le,y as ae}from"./icons-DP3uiYxy.js";const oe={__name:"RssFeed",setup(G,{expose:a}){a();const h=Z(),e=x(!1),M=x(!1),D=x(!1),w=x(!1),b=x([]),S=x([]),C=x(""),L=x(!1),O=x(""),z=x([]),j=q(()=>{const l=b.value.length,n=S.value.length,d=S.value.filter(p=>!p.read).length,r=b.value.filter(p=>p.lastUpdated).sort((p,X)=>new Date(X.lastUpdated)-new Date(p.lastUpdated))[0],c=r?I(r.lastUpdated):"-";return[{label:"订阅源数",value:l,color:"#1677ff"},{label:"文章总数",value:n,color:"#52c41a"},{label:"未读文章",value:d,color:"#faad14"},{label:"最近刷新",value:c,color:"#13c2c2"}]}),W=[{title:"标题",key:"title",dataIndex:"title",ellipsis:!0},{title:"来源",key:"source",dataIndex:"source",width:"140px"},{title:"发布时间",key:"publishedAt",dataIndex:"publishedAt",width:"160px"},{title:"状态",key:"status",width:"80px"},{title:"操作",key:"actions",width:"100px"}];function I(l){if(!l)return"-";try{const n=new Date(l);return isNaN(n.getTime())?l:n.toLocaleString("zh-CN",{month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"})}catch{return l}}function U(l){try{const n=l.match(/(\[[\s\S]*\]|\{[\s\S]*\})/);if(n)return JSON.parse(n[1])}catch{}return null}async function A(){e.value=!0;try{const{output:l}=await h.execute("rss list --json",2e4),n=U(l);Array.isArray(n)?b.value=n.map((d,r)=>({key:d.id||d.url||r,id:d.id||String(r),title:d.title||d.name||"",url:d.url||d.feedUrl||"",itemCount:d.itemCount??d.articleCount??d.count??0,lastUpdated:d.lastUpdated||d.updatedAt||d.lastRefresh||""})):b.value=T(l)}catch(l){u.error("加载订阅源失败: "+l.message)}finally{e.value=!1}}function T(l){const n=[],d=l.split(`
2
- `);for(const r of d){const c=r.trim();if(!c||c.startsWith("─")||c.match(/^\d+ feed/i)||c.startsWith("RSS")||c.startsWith("No "))continue;const p=c.match(/^(\d+)\.\s+(.+?)(?:\s+[-–]\s+(.+))?$/);p?n.push({key:p[1],id:p[1],title:p[2].trim(),url:(p[3]||"").trim(),itemCount:0,lastUpdated:""}):c.length>5&&n.push({key:String(n.length),id:String(n.length),title:c.slice(0,80),url:"",itemCount:0,lastUpdated:""})}return n}async function F(){M.value=!0,z.value=[];try{let l="rss articles --limit 30 --json";C.value&&(l=`rss articles --feed ${C.value} --limit 30 --json`);const{output:n}=await h.execute(l,2e4),d=U(n);Array.isArray(d)?S.value=d.map((r,c)=>({key:r.id||String(c),id:r.id||String(c),title:r.title||"无标题",link:r.link||r.url||"",source:r.source||r.feedTitle||r.feedName||"",publishedAt:r.publishedAt||r.pubDate||r.date||"",read:!!r.read,summary:r.summary||r.description||"",content:r.content||""})):S.value=P(n)}catch(l){u.error("加载文章失败: "+l.message)}finally{M.value=!1}}function P(l){const n=[],d=l.split(`
3
- `);for(const r of d){const c=r.trim();if(!c||c.startsWith("─")||c.match(/^\d+ article/i)||c.startsWith("No "))continue;const p=c.match(/^(\d+)\.\s+(.+?)(?:\s+[-–]\s+(.+))?$/);p&&n.push({key:p[1],id:p[1],title:p[2].trim(),link:"",source:(p[3]||"").trim(),publishedAt:"",read:!1,summary:"",content:""})}return n}async function V(){const l=O.value.trim();if(!l){u.warning("请输入订阅源地址");return}w.value=!0;try{const{output:n}=await h.execute(`rss add "${l}"`,3e4);n.includes("error")||n.includes("失败")||n.includes("Error")?u.error("添加失败: "+n.slice(0,120)):(u.success("订阅源已添加"),L.value=!1,O.value="",await A(),await F())}catch(n){u.error("添加失败: "+n.message)}finally{w.value=!1}}async function B(l){try{u.loading({content:`正在刷新 ${l.title||l.id}...`,key:"refreshFeed"}),await h.execute(`rss refresh ${l.id}`,3e4),u.success({content:"刷新完成",key:"refreshFeed"}),await A(),await F()}catch(n){u.error({content:"刷新失败: "+n.message,key:"refreshFeed"})}}async function E(l){try{u.loading({content:`正在删除 ${l.title||l.id}...`,key:"removeFeed"});const{output:n}=await h.execute(`rss remove ${l.id}`,2e4);n.includes("error")||n.includes("失败")?u.error({content:"删除失败: "+n.slice(0,120),key:"removeFeed"}):(u.success({content:"已删除订阅源",key:"removeFeed"}),await A(),await F())}catch(n){u.error({content:"删除失败: "+n.message,key:"removeFeed"})}}async function t(){D.value=!0;try{u.loading({content:"正在刷新所有订阅源...",key:"refreshAll"}),await h.execute("rss refresh-all",6e4),u.success({content:"全部刷新完成",key:"refreshAll"}),await A(),await F()}catch(l){u.error({content:"刷新失败: "+l.message,key:"refreshAll"})}finally{D.value=!1}}async function _(l){try{await h.execute(`rss mark-read ${l.id}`,1e4),l.read=!0,u.success("已标记已读")}catch(n){u.error("操作失败: "+n.message)}}function J(l,n){z.value=l?[n.key]:[]}Q(async()=>{await A(),await F()});const H={ws:h,feedsLoading:e,articlesLoading:M,refreshingAll:D,adding:w,feeds:b,articles:S,selectedFeedId:C,showAddModal:L,newFeedUrl:O,expandedKeys:z,statsCards:j,articleColumns:W,formatTime:I,safeParseJson:U,loadFeeds:A,parseFeedListText:T,loadArticles:F,parseArticlesText:P,addFeed:V,refreshFeed:B,removeFeed:E,refreshAllFeeds:t,markRead:_,onExpandArticle:J,ref:x,computed:q,onMounted:Q,get ReadOutlined(){return ae},get PlusOutlined(){return le},get ReloadOutlined(){return ne},get DeleteOutlined(){return te},get LinkOutlined(){return ee},get message(){return u},get useWsStore(){return Z}};return Object.defineProperty(H,"__isScriptSetup",{enumerable:!1,value:!0}),H}},se={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},re={key:0,style:{"text-align":"center",padding:"60px"}},ie={style:{display:"flex","align-items":"center",gap:"6px",overflow:"hidden"}},de={style:{color:"#e0e0e0","font-size":"13px",overflow:"hidden","text-overflow":"ellipsis","white-space":"nowrap"}},ce={style:{color:"var(--text-muted)","font-size":"11px","margin-bottom":"6px",overflow:"hidden","text-overflow":"ellipsis","white-space":"nowrap"}},ue={style:{display:"flex","justify-content":"space-between",color:"var(--text-secondary)","font-size":"12px"}},me={key:2,style:{"text-align":"center",padding:"40px",color:"var(--text-muted)","margin-bottom":"24px"}},pe={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"12px"}},ye={key:3,style:{"text-align":"center",padding:"60px"}},fe=["href"],ge={key:1,style:{color:"#e0e0e0","font-weight":"500"}},_e={key:2,style:{color:"var(--text-secondary)","font-size":"12px"}},ve={key:1,style:{color:"var(--text-muted)","font-size":"12px"}},xe={style:{padding:"8px 16px",color:"var(--text-secondary)","font-size":"13px","line-height":"1.8","max-height":"300px","overflow-y":"auto"}},ke={key:0,style:{"margin-bottom":"8px"}},he=["innerHTML"],we={key:2,style:{color:"var(--text-muted)"}},be={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}};function Ae(G,a,h,e,M,D){const w=m("a-button"),b=m("a-space"),S=m("a-statistic"),C=m("a-card"),L=m("a-col"),O=m("a-row"),z=m("a-spin"),j=m("a-menu-item"),W=m("a-menu"),I=m("a-dropdown"),U=m("a-select-option"),A=m("a-select"),T=m("a-tag"),F=m("a-table"),P=m("a-input"),V=m("a-form-item"),B=m("a-form"),E=m("a-modal");return i(),y("div",null,[f("div",se,[a[6]||(a[6]=f("div",null,[f("h2",{class:"page-title"},"RSS 订阅"),f("p",{class:"page-sub"},"订阅源 / 文章阅读")],-1)),s(b,null,{default:o(()=>[s(w,{type:"primary",onClick:a[0]||(a[0]=t=>e.showAddModal=!0)},{icon:o(()=>[s(e.PlusOutlined)]),default:o(()=>[a[4]||(a[4]=g(" 添加订阅 ",-1))]),_:1}),s(w,{ghost:"",loading:e.refreshingAll,onClick:e.refreshAllFeeds},{icon:o(()=>[s(e.ReloadOutlined)]),default:o(()=>[a[5]||(a[5]=g(" 全部刷新 ",-1))]),_:1},8,["loading"])]),_:1})]),v(" Stats Cards "),s(O,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:o(()=>[(i(!0),y(N,null,K(e.statsCards,t=>(i(),R(L,{xs:12,sm:6,key:t.label},{default:o(()=>[s(C,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"},size:"small"},{default:o(()=>[s(S,{title:t.label,value:t.value,"value-style":{color:t.color,fontSize:"20px"}},null,8,["title","value","value-style"])]),_:2},1024)]),_:2},1024))),128))]),_:1}),v(" Section 1: Feed Sources "),a[16]||(a[16]=f("h3",{style:{color:"var(--text-primary)","margin-bottom":"12px"}},"订阅源管理",-1)),e.feedsLoading?(i(),y("div",re,[s(z,{size:"large"})])):e.feeds.length>0?(i(),R(O,{key:1,gutter:[16,16],style:{"margin-bottom":"24px"}},{default:o(()=>[(i(!0),y(N,null,K(e.feeds,t=>(i(),R(L,{xs:24,sm:12,md:8,lg:6,key:t.id||t.url},{default:o(()=>[s(C,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"},size:"small",hoverable:!0},{title:o(()=>[f("div",ie,[s(e.ReadOutlined,{style:{color:"#1677ff","flex-shrink":"0"}}),f("span",de,k(t.title||"未命名订阅"),1)])]),extra:o(()=>[s(I,null,{overlay:o(()=>[s(W,null,{default:o(()=>[s(j,{onClick:_=>e.refreshFeed(t)},{default:o(()=>[s(e.ReloadOutlined),a[8]||(a[8]=g(" 刷新 ",-1))]),_:1},8,["onClick"]),s(j,{onClick:_=>e.removeFeed(t),danger:""},{default:o(()=>[s(e.DeleteOutlined),a[9]||(a[9]=g(" 删除 ",-1))]),_:1},8,["onClick"])]),_:2},1024)]),default:o(()=>[s(w,{size:"small",type:"text",style:{color:"var(--text-muted)"}},{default:o(()=>[...a[7]||(a[7]=[g("...",-1)])]),_:1})]),_:2},1024)]),default:o(()=>[f("p",ce,[s(e.LinkOutlined),g(" "+k(t.url||"-"),1)]),f("div",ue,[f("span",null,k(t.itemCount??"-")+" 篇文章",1),f("span",null,k(e.formatTime(t.lastUpdated)),1)])]),_:2},1024)]),_:2},1024))),128))]),_:1})):(i(),y("div",me,[s(e.ReadOutlined,{style:{"font-size":"40px","margin-bottom":"12px",display:"block"}}),a[10]||(a[10]=g(' 暂无订阅源,点击"添加订阅"开始 ',-1))])),v(" Section 2: Articles "),f("div",pe,[a[12]||(a[12]=f("h3",{style:{color:"var(--text-primary)",margin:"0"}},"文章列表",-1)),s(b,null,{default:o(()=>[s(A,{value:e.selectedFeedId,"onUpdate:value":a[1]||(a[1]=t=>e.selectedFeedId=t),style:{"min-width":"180px"},placeholder:"筛选订阅源","allow-clear":"",onChange:e.loadArticles},{default:o(()=>[s(U,{value:""},{default:o(()=>[...a[11]||(a[11]=[g("全部订阅",-1)])]),_:1}),(i(!0),y(N,null,K(e.feeds,t=>(i(),R(U,{key:t.id,value:t.id},{default:o(()=>[g(k(t.title||t.url),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),s(w,{loading:e.articlesLoading,onClick:e.loadArticles},{icon:o(()=>[s(e.ReloadOutlined)]),_:1},8,["loading"])]),_:1})]),e.articlesLoading?(i(),y("div",ye,[s(z,{size:"large"})])):(i(),R(F,{key:4,columns:e.articleColumns,"data-source":e.articles,pagination:{pageSize:20,showTotal:t=>`共 ${t} 条`},size:"small",style:{background:"var(--bg-card)"},"row-class-name":()=>"rss-row",expandable:{expandedRowKeys:e.expandedKeys,onExpand:e.onExpandArticle}},{bodyCell:o(({column:t,record:_})=>[t.key==="title"?(i(),y(N,{key:0},[_.link?(i(),y("a",{key:0,href:_.link,target:"_blank",rel:"noopener noreferrer",style:{color:"#1677ff","font-weight":"500"}},[s(e.LinkOutlined,{style:{"margin-right":"4px"}}),g(k(_.title),1)],8,fe)):(i(),y("span",ge,k(_.title),1))],64)):v("v-if",!0),t.key==="source"?(i(),R(T,{key:1,color:"blue",style:{"font-size":"10px"}},{default:o(()=>[g(k(_.source||"-"),1)]),_:2},1024)):v("v-if",!0),t.key==="publishedAt"?(i(),y("span",_e,k(e.formatTime(_.publishedAt)),1)):v("v-if",!0),t.key==="status"?(i(),R(T,{key:3,color:_.read?"default":"green"},{default:o(()=>[g(k(_.read?"已读":"未读"),1)]),_:2},1032,["color"])):v("v-if",!0),t.key==="actions"?(i(),y(N,{key:4},[_.read?(i(),y("span",ve,"--")):(i(),R(w,{key:0,size:"small",type:"link",onClick:Y(J=>e.markRead(_),["stop"])},{default:o(()=>[...a[13]||(a[13]=[g(" 标记已读 ",-1)])]),_:1},8,["onClick"]))],64)):v("v-if",!0)]),expandedRowRender:o(({record:t})=>[f("div",xe,[t.summary?(i(),y("div",ke,[a[14]||(a[14]=f("strong",{style:{color:"var(--text-primary)"}},"摘要: ",-1)),g(k(t.summary),1)])):v("v-if",!0),t.content?(i(),y("div",{key:1,innerHTML:t.content,style:{color:"var(--text-secondary)"}},null,8,he)):v("v-if",!0),!t.summary&&!t.content?(i(),y("div",we,"暂无内容预览")):v("v-if",!0)])]),emptyText:o(()=>[f("div",be,[s(e.ReadOutlined,{style:{"font-size":"40px","margin-bottom":"12px",display:"block"}}),a[15]||(a[15]=g(" 暂无文章 ",-1))])]),_:1},8,["data-source","pagination","expandable"])),v(" Add Feed Modal "),s(E,{open:e.showAddModal,"onUpdate:open":a[3]||(a[3]=t=>e.showAddModal=t),title:"添加订阅源","confirm-loading":e.adding,onOk:e.addFeed,"ok-text":"添加","cancel-text":"取消"},{default:o(()=>[s(B,{"label-col":{span:4},"wrapper-col":{span:20},style:{"margin-top":"16px"}},{default:o(()=>[s(V,{label:"URL",required:""},{default:o(()=>[s(P,{value:e.newFeedUrl,"onUpdate:value":a[2]||(a[2]=t=>e.newFeedUrl=t),placeholder:"输入 RSS 订阅源地址,如 https://example.com/feed.xml"},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"])])}const Ce=$(oe,[["render",Ae],["__scopeId","data-v-59e72a50"],["__file","/tmp/cc-web-panel-PV9Dxg/repo/packages/web-panel/src/views/RssFeed.vue"]]);export{Ce as default};
1
+ import{I as m,J as y,U as f,c as s,K as o,V as v,S as R,Q as g,o as Q,b as q,r as x,P as i,F as N,Z as K,R as k,a2 as Y}from"./vendor-BvqAck49.js";import{_ as $,u as Z,d as u}from"./index-wEmgmG9r.js";import{aB as ee,aQ as te,R as ne,as as le,y as ae}from"./icons-DP3uiYxy.js";const oe={__name:"RssFeed",setup(G,{expose:a}){a();const h=Z(),e=x(!1),M=x(!1),j=x(!1),w=x(!1),b=x([]),S=x([]),C=x(""),L=x(!1),O=x(""),z=x([]),D=q(()=>{const l=b.value.length,n=S.value.length,d=S.value.filter(p=>!p.read).length,r=b.value.filter(p=>p.lastUpdated).sort((p,X)=>new Date(X.lastUpdated)-new Date(p.lastUpdated))[0],c=r?I(r.lastUpdated):"-";return[{label:"订阅源数",value:l,color:"#1677ff"},{label:"文章总数",value:n,color:"#52c41a"},{label:"未读文章",value:d,color:"#faad14"},{label:"最近刷新",value:c,color:"#13c2c2"}]}),P=[{title:"标题",key:"title",dataIndex:"title",ellipsis:!0},{title:"来源",key:"source",dataIndex:"source",width:"140px"},{title:"发布时间",key:"publishedAt",dataIndex:"publishedAt",width:"160px"},{title:"状态",key:"status",width:"80px"},{title:"操作",key:"actions",width:"100px"}];function I(l){if(!l)return"-";try{const n=new Date(l);return isNaN(n.getTime())?l:n.toLocaleString("zh-CN",{month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"})}catch{return l}}function U(l){try{const n=l.match(/(\[[\s\S]*\]|\{[\s\S]*\})/);if(n)return JSON.parse(n[1])}catch{}return null}async function A(){e.value=!0;try{const{output:l}=await h.execute("rss list --json",2e4),n=U(l);Array.isArray(n)?b.value=n.map((d,r)=>({key:d.id||d.url||r,id:d.id||String(r),title:d.title||d.name||"",url:d.url||d.feedUrl||"",itemCount:d.itemCount??d.articleCount??d.count??0,lastUpdated:d.lastUpdated||d.updatedAt||d.lastRefresh||""})):b.value=T(l)}catch(l){u.error("加载订阅源失败: "+l.message)}finally{e.value=!1}}function T(l){const n=[],d=l.split(`
2
+ `);for(const r of d){const c=r.trim();if(!c||c.startsWith("─")||c.match(/^\d+ feed/i)||c.startsWith("RSS")||c.startsWith("No "))continue;const p=c.match(/^(\d+)\.\s+(.+?)(?:\s+[-–]\s+(.+))?$/);p?n.push({key:p[1],id:p[1],title:p[2].trim(),url:(p[3]||"").trim(),itemCount:0,lastUpdated:""}):c.length>5&&n.push({key:String(n.length),id:String(n.length),title:c.slice(0,80),url:"",itemCount:0,lastUpdated:""})}return n}async function F(){M.value=!0,z.value=[];try{let l="rss articles --limit 30 --json";C.value&&(l=`rss articles --feed ${C.value} --limit 30 --json`);const{output:n}=await h.execute(l,2e4),d=U(n);Array.isArray(d)?S.value=d.map((r,c)=>({key:r.id||String(c),id:r.id||String(c),title:r.title||"无标题",link:r.link||r.url||"",source:r.source||r.feedTitle||r.feedName||"",publishedAt:r.publishedAt||r.pubDate||r.date||"",read:!!r.read,summary:r.summary||r.description||"",content:r.content||""})):S.value=W(n)}catch(l){u.error("加载文章失败: "+l.message)}finally{M.value=!1}}function W(l){const n=[],d=l.split(`
3
+ `);for(const r of d){const c=r.trim();if(!c||c.startsWith("─")||c.match(/^\d+ article/i)||c.startsWith("No "))continue;const p=c.match(/^(\d+)\.\s+(.+?)(?:\s+[-–]\s+(.+))?$/);p&&n.push({key:p[1],id:p[1],title:p[2].trim(),link:"",source:(p[3]||"").trim(),publishedAt:"",read:!1,summary:"",content:""})}return n}async function B(){const l=O.value.trim();if(!l){u.warning("请输入订阅源地址");return}w.value=!0;try{const{output:n}=await h.execute(`rss add "${l}"`,3e4);n.includes("error")||n.includes("失败")||n.includes("Error")?u.error("添加失败: "+n.slice(0,120)):(u.success("订阅源已添加"),L.value=!1,O.value="",await A(),await F())}catch(n){u.error("添加失败: "+n.message)}finally{w.value=!1}}async function E(l){try{u.loading({content:`正在刷新 ${l.title||l.id}...`,key:"refreshFeed"}),await h.execute(`rss refresh ${l.id}`,3e4),u.success({content:"刷新完成",key:"refreshFeed"}),await A(),await F()}catch(n){u.error({content:"刷新失败: "+n.message,key:"refreshFeed"})}}async function V(l){try{u.loading({content:`正在删除 ${l.title||l.id}...`,key:"removeFeed"});const{output:n}=await h.execute(`rss remove ${l.id}`,2e4);n.includes("error")||n.includes("失败")?u.error({content:"删除失败: "+n.slice(0,120),key:"removeFeed"}):(u.success({content:"已删除订阅源",key:"removeFeed"}),await A(),await F())}catch(n){u.error({content:"删除失败: "+n.message,key:"removeFeed"})}}async function t(){j.value=!0;try{u.loading({content:"正在刷新所有订阅源...",key:"refreshAll"}),await h.execute("rss refresh-all",6e4),u.success({content:"全部刷新完成",key:"refreshAll"}),await A(),await F()}catch(l){u.error({content:"刷新失败: "+l.message,key:"refreshAll"})}finally{j.value=!1}}async function _(l){try{await h.execute(`rss mark-read ${l.id}`,1e4),l.read=!0,u.success("已标记已读")}catch(n){u.error("操作失败: "+n.message)}}function J(l,n){z.value=l?[n.key]:[]}Q(async()=>{await A(),await F()});const H={ws:h,feedsLoading:e,articlesLoading:M,refreshingAll:j,adding:w,feeds:b,articles:S,selectedFeedId:C,showAddModal:L,newFeedUrl:O,expandedKeys:z,statsCards:D,articleColumns:P,formatTime:I,safeParseJson:U,loadFeeds:A,parseFeedListText:T,loadArticles:F,parseArticlesText:W,addFeed:B,refreshFeed:E,removeFeed:V,refreshAllFeeds:t,markRead:_,onExpandArticle:J,ref:x,computed:q,onMounted:Q,get ReadOutlined(){return ae},get PlusOutlined(){return le},get ReloadOutlined(){return ne},get DeleteOutlined(){return te},get LinkOutlined(){return ee},get message(){return u},get useWsStore(){return Z}};return Object.defineProperty(H,"__isScriptSetup",{enumerable:!1,value:!0}),H}},se={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},re={key:0,style:{"text-align":"center",padding:"60px"}},ie={style:{display:"flex","align-items":"center",gap:"6px",overflow:"hidden"}},de={style:{color:"#e0e0e0","font-size":"13px",overflow:"hidden","text-overflow":"ellipsis","white-space":"nowrap"}},ce={style:{color:"var(--text-muted)","font-size":"11px","margin-bottom":"6px",overflow:"hidden","text-overflow":"ellipsis","white-space":"nowrap"}},ue={style:{display:"flex","justify-content":"space-between",color:"var(--text-secondary)","font-size":"12px"}},me={key:2,style:{"text-align":"center",padding:"40px",color:"var(--text-muted)","margin-bottom":"24px"}},pe={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"12px"}},ye={key:3,style:{"text-align":"center",padding:"60px"}},fe=["href"],ge={key:1,style:{color:"#e0e0e0","font-weight":"500"}},_e={key:2,style:{color:"var(--text-secondary)","font-size":"12px"}},ve={key:1,style:{color:"var(--text-muted)","font-size":"12px"}},xe={style:{padding:"8px 16px",color:"var(--text-secondary)","font-size":"13px","line-height":"1.8","max-height":"300px","overflow-y":"auto"}},ke={key:0,style:{"margin-bottom":"8px"}},he=["innerHTML"],we={key:2,style:{color:"var(--text-muted)"}},be={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}};function Ae(G,a,h,e,M,j){const w=m("a-button"),b=m("a-space"),S=m("a-statistic"),C=m("a-card"),L=m("a-col"),O=m("a-row"),z=m("a-spin"),D=m("a-menu-item"),P=m("a-menu"),I=m("a-dropdown"),U=m("a-select-option"),A=m("a-select"),T=m("a-tag"),F=m("a-table"),W=m("a-input"),B=m("a-form-item"),E=m("a-form"),V=m("a-modal");return i(),y("div",null,[f("div",se,[a[6]||(a[6]=f("div",null,[f("h2",{class:"page-title"},"RSS 订阅"),f("p",{class:"page-sub"},"订阅源 / 文章阅读")],-1)),s(b,null,{default:o(()=>[s(w,{type:"primary",onClick:a[0]||(a[0]=t=>e.showAddModal=!0)},{icon:o(()=>[s(e.PlusOutlined)]),default:o(()=>[a[4]||(a[4]=g(" 添加订阅 ",-1))]),_:1}),s(w,{ghost:"",loading:e.refreshingAll,onClick:e.refreshAllFeeds},{icon:o(()=>[s(e.ReloadOutlined)]),default:o(()=>[a[5]||(a[5]=g(" 全部刷新 ",-1))]),_:1},8,["loading"])]),_:1})]),v(" Stats Cards "),s(O,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:o(()=>[(i(!0),y(N,null,K(e.statsCards,t=>(i(),R(L,{xs:12,sm:6,key:t.label},{default:o(()=>[s(C,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"},size:"small"},{default:o(()=>[s(S,{title:t.label,value:t.value,"value-style":{color:t.color,fontSize:"20px"}},null,8,["title","value","value-style"])]),_:2},1024)]),_:2},1024))),128))]),_:1}),v(" Section 1: Feed Sources "),a[16]||(a[16]=f("h3",{style:{color:"var(--text-primary)","margin-bottom":"12px"}},"订阅源管理",-1)),e.feedsLoading?(i(),y("div",re,[s(z,{size:"large"})])):e.feeds.length>0?(i(),R(O,{key:1,gutter:[16,16],style:{"margin-bottom":"24px"}},{default:o(()=>[(i(!0),y(N,null,K(e.feeds,t=>(i(),R(L,{xs:24,sm:12,md:8,lg:6,key:t.id||t.url},{default:o(()=>[s(C,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"},size:"small",hoverable:!0},{title:o(()=>[f("div",ie,[s(e.ReadOutlined,{style:{color:"#1677ff","flex-shrink":"0"}}),f("span",de,k(t.title||"未命名订阅"),1)])]),extra:o(()=>[s(I,null,{overlay:o(()=>[s(P,null,{default:o(()=>[s(D,{onClick:_=>e.refreshFeed(t)},{default:o(()=>[s(e.ReloadOutlined),a[8]||(a[8]=g(" 刷新 ",-1))]),_:1},8,["onClick"]),s(D,{onClick:_=>e.removeFeed(t),danger:""},{default:o(()=>[s(e.DeleteOutlined),a[9]||(a[9]=g(" 删除 ",-1))]),_:1},8,["onClick"])]),_:2},1024)]),default:o(()=>[s(w,{size:"small",type:"text",style:{color:"var(--text-muted)"}},{default:o(()=>[...a[7]||(a[7]=[g("...",-1)])]),_:1})]),_:2},1024)]),default:o(()=>[f("p",ce,[s(e.LinkOutlined),g(" "+k(t.url||"-"),1)]),f("div",ue,[f("span",null,k(t.itemCount??"-")+" 篇文章",1),f("span",null,k(e.formatTime(t.lastUpdated)),1)])]),_:2},1024)]),_:2},1024))),128))]),_:1})):(i(),y("div",me,[s(e.ReadOutlined,{style:{"font-size":"40px","margin-bottom":"12px",display:"block"}}),a[10]||(a[10]=g(' 暂无订阅源,点击"添加订阅"开始 ',-1))])),v(" Section 2: Articles "),f("div",pe,[a[12]||(a[12]=f("h3",{style:{color:"var(--text-primary)",margin:"0"}},"文章列表",-1)),s(b,null,{default:o(()=>[s(A,{value:e.selectedFeedId,"onUpdate:value":a[1]||(a[1]=t=>e.selectedFeedId=t),style:{"min-width":"180px"},placeholder:"筛选订阅源","allow-clear":"",onChange:e.loadArticles},{default:o(()=>[s(U,{value:""},{default:o(()=>[...a[11]||(a[11]=[g("全部订阅",-1)])]),_:1}),(i(!0),y(N,null,K(e.feeds,t=>(i(),R(U,{key:t.id,value:t.id},{default:o(()=>[g(k(t.title||t.url),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),s(w,{loading:e.articlesLoading,onClick:e.loadArticles},{icon:o(()=>[s(e.ReloadOutlined)]),_:1},8,["loading"])]),_:1})]),e.articlesLoading?(i(),y("div",ye,[s(z,{size:"large"})])):(i(),R(F,{key:4,columns:e.articleColumns,"data-source":e.articles,pagination:{pageSize:20,showTotal:t=>`共 ${t} 条`},size:"small",style:{background:"var(--bg-card)"},"row-class-name":()=>"rss-row",expandable:{expandedRowKeys:e.expandedKeys,onExpand:e.onExpandArticle}},{bodyCell:o(({column:t,record:_})=>[t.key==="title"?(i(),y(N,{key:0},[_.link?(i(),y("a",{key:0,href:_.link,target:"_blank",rel:"noopener noreferrer",style:{color:"#1677ff","font-weight":"500"}},[s(e.LinkOutlined,{style:{"margin-right":"4px"}}),g(k(_.title),1)],8,fe)):(i(),y("span",ge,k(_.title),1))],64)):v("v-if",!0),t.key==="source"?(i(),R(T,{key:1,color:"blue",style:{"font-size":"10px"}},{default:o(()=>[g(k(_.source||"-"),1)]),_:2},1024)):v("v-if",!0),t.key==="publishedAt"?(i(),y("span",_e,k(e.formatTime(_.publishedAt)),1)):v("v-if",!0),t.key==="status"?(i(),R(T,{key:3,color:_.read?"default":"green"},{default:o(()=>[g(k(_.read?"已读":"未读"),1)]),_:2},1032,["color"])):v("v-if",!0),t.key==="actions"?(i(),y(N,{key:4},[_.read?(i(),y("span",ve,"--")):(i(),R(w,{key:0,size:"small",type:"link",onClick:Y(J=>e.markRead(_),["stop"])},{default:o(()=>[...a[13]||(a[13]=[g(" 标记已读 ",-1)])]),_:1},8,["onClick"]))],64)):v("v-if",!0)]),expandedRowRender:o(({record:t})=>[f("div",xe,[t.summary?(i(),y("div",ke,[a[14]||(a[14]=f("strong",{style:{color:"var(--text-primary)"}},"摘要: ",-1)),g(k(t.summary),1)])):v("v-if",!0),t.content?(i(),y("div",{key:1,innerHTML:t.content,style:{color:"var(--text-secondary)"}},null,8,he)):v("v-if",!0),!t.summary&&!t.content?(i(),y("div",we,"暂无内容预览")):v("v-if",!0)])]),emptyText:o(()=>[f("div",be,[s(e.ReadOutlined,{style:{"font-size":"40px","margin-bottom":"12px",display:"block"}}),a[15]||(a[15]=g(" 暂无文章 ",-1))])]),_:1},8,["data-source","pagination","expandable"])),v(" Add Feed Modal "),s(V,{open:e.showAddModal,"onUpdate:open":a[3]||(a[3]=t=>e.showAddModal=t),title:"添加订阅源","confirm-loading":e.adding,onOk:e.addFeed,"ok-text":"添加","cancel-text":"取消"},{default:o(()=>[s(E,{"label-col":{span:4},"wrapper-col":{span:20},style:{"margin-top":"16px"}},{default:o(()=>[s(B,{label:"URL",required:""},{default:o(()=>[s(W,{value:e.newFeedUrl,"onUpdate:value":a[2]||(a[2]=t=>e.newFeedUrl=t),placeholder:"输入 RSS 订阅源地址,如 https://example.com/feed.xml"},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"])])}const Ce=$(oe,[["render",Ae],["__scopeId","data-v-59e72a50"],["__file","/tmp/cc-web-panel-drwr9c/repo/packages/web-panel/src/views/RssFeed.vue"]]);export{Ce as default};
@@ -1 +1 @@
1
- import{I as u,J as g,U as m,R as c,c as r,K as t,V as f,S as k,r as v,o as se,a as ie,b as j,P as d,Q as _,a2 as ke,F as O,Z as L}from"./vendor-BvqAck49.js";import{_ as Se,b as ce,u as de,E as ue,d as F}from"./index-7ME2_dHQ.js";import{s as ye}from"./community-parser-CO25nZFt.js";import{at as Ce,l as Te,a4 as Ne,a_ as Ae,a9 as Oe,a2 as ze,$ as we,k as Ee,R as Me}from"./icons-DP3uiYxy.js";function ae(n){const o=ye(n);if(!o)return null;try{return JSON.parse(o)}catch{}const s=o.match(/\{[\s\S]*\}|\[[\s\S]*\]/);if(!s)return null;try{return JSON.parse(s[0])}catch{return null}}const Ie=Object.freeze(["bm25","vector","hybrid"]);function Fe(n,o=0){return typeof n=="number"&&Number.isFinite(n)?n:o}function Re(n){if(Array.isArray(n))return n.filter(o=>typeof o=="string");if(typeof n!="string")return[];try{const o=JSON.parse(n);if(Array.isArray(o))return o.filter(s=>typeof s=="string")}catch{}return[]}function J(n){if(!n)return{noDb:!1,error:""};const o=ye(n),s=/Database not available/i.test(o);return{noDb:s,error:s?"Database not available":""}}function De(n,o=0){if(!n||typeof n!="object")return null;const s=n.id||"";return s?{key:s,id:s,score:Fe(n.score,0),title:String(n.title||""),category:String(n.category||"general"),createdAt:n.created_at??n.createdAt??"",snippet:String(n.snippet||""),_idx:o}:null}function fe(n){const o=ae(n);return Array.isArray(o)?o.map(De).filter(Boolean):[]}function he(n,o=0){if(!n||typeof n!="object")return null;const s=n.id||"";return s?{key:s,id:s,title:String(n.title||""),content:n.content??"",tags:Re(n.tags),category:String(n.category||"general"),createdAt:n.created_at??n.createdAt??"",updatedAt:n.updated_at??n.updatedAt??"",_idx:o}:null}function ge(n){const o=ae(n);return Array.isArray(o)?o.map(he).filter(Boolean):[]}function me(n){const o=ae(n);return!o||typeof o!="object"||Array.isArray(o)?null:he(o,0)}function _e(n){if(!Array.isArray(n)||n.length===0)return{total:0,categories:[],tags:[]};const o=new Map,s=new Map;for(const e of n){o.set(e.category,(o.get(e.category)||0)+1);for(const x of e.tags)s.set(x,(s.get(x)||0)+1)}return{total:n.length,categories:[...o.entries()].map(([e,x])=>({name:e,count:x})).sort((e,x)=>x.count-e.count),tags:[...s.entries()].map(([e,x])=>({name:e,count:x})).sort((e,x)=>x.count-e.count)}}function Le(n){if(n==null||n==="")return"—";const o=String(n),s=o.includes(" ")&&!o.includes("T")?o.replace(" ","T")+"Z":o,e=new Date(s);return isNaN(e.getTime())?o:e.toLocaleString("zh-CN",{hour12:!1})}const V="cc.web-panel.search.recent",re=8,Pe={__name:"Search",setup(n,{expose:o}){o();const{t:s}=ce(),e=de(),x=ue.PRESENTED_IMAGE_SIMPLE,q=v(!1),C=v(!1),P=v(!1),B=v(!1),z=v([]),h=v([]),A=v({noDb:!1,error:""}),T=ie({query:"",mode:"hybrid",topK:10}),Q=v(""),w=v(U()),K=v("results"),S=v(""),N=v(""),E=v(!1),M=v(null),G=j(()=>_e(z.value)),Y=j(()=>h.value.length?Math.max(...h.value.map(l=>l.score)):0),W=j(()=>[{title:s("search.noteColumns.title"),key:"title"},{title:s("search.noteColumns.category"),key:"category",width:"120px"},{title:s("search.noteColumns.tags"),key:"tags",width:"240px"},{title:s("search.noteColumns.createdAt"),key:"createdAt",width:"180px"},{title:s("search.noteColumns.action"),key:"action",width:"180px"}]),Z=j(()=>{let l=z.value;if(S.value&&(l=l.filter(i=>i.category===S.value)),N.value.trim()){const i=N.value.trim().toLowerCase();l=l.filter(y=>y.tags.some(b=>b.toLowerCase().includes(i)))}return l});function H(l){const i=`search.mode.${l}`,y=s(i);return y===i?l:y}function X(l){const i=["blue","green","purple","orange","cyan","magenta","gold","volcano"];let y=0;for(let b=0;b<(l||"").length;b++)y=y*31+l.charCodeAt(b)>>>0;return i[y%i.length]}function $(l){return l>=.7?"#52c41a":l>=.5?"#1677ff":l>=.3?"#faad14":"#ff4d4f"}function R(l){return String(l).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}function I(l,i){if(!i||!l)return R(l);const y=i.split(/\s+/).filter(Boolean);let b=R(l);for(const be of y){const xe=new RegExp(`(${be.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")})`,"gi");b=b.replace(xe,"<mark>$1</mark>")}return b}function ee(l,i){return i?I(l,i):R(l)}function U(){try{const l=localStorage.getItem(V);if(l){const i=JSON.parse(l);if(Array.isArray(i))return i.filter(y=>typeof y=="string").slice(0,re)}}catch{}return[]}function a(l){const i=l.trim();if(!i)return;const y=[i,...w.value.filter(b=>b!==i)];w.value=y.slice(0,re);try{localStorage.setItem(V,JSON.stringify(w.value))}catch{}}function p(){w.value=[];try{localStorage.removeItem(V)}catch{}}function D(l){T.query=l,te()}async function oe(){q.value=!0,A.value={noDb:!1,error:""};try{const{output:l}=await e.execute("note list -n 500 --json",12e3).catch(()=>({output:""})),i=J(l);if(i.noDb){A.value=i,z.value=[];return}z.value=ge(l)}catch(l){F.error(s("search.messages.loadIndexFailed",{err:l?.message||l}))}finally{q.value=!1}}async function te(){const l=T.query.trim();if(!l){F.warning(s("search.messages.queryRequired"));return}P.value=!0,A.value={noDb:!1,error:""};try{const i=[`search ${ne(l)}`,`--mode ${T.mode}`,`--top-k ${T.topK||10}`,"--json"],{output:y}=await e.execute(i.join(" "),15e3),b=J(y);if(b.noDb){A.value=b,h.value=[],B.value=!0,Q.value=l;return}h.value=fe(y),Q.value=l,B.value=!0,a(l),K.value="results"}catch(i){F.error(s("search.messages.searchFailed",{err:i?.message||i}))}finally{P.value=!1}}function ne(l){return`"${String(l).replace(/"/g,'\\"')}"`}function pe(l){T.query=l.title,T.mode="vector",te()}async function ve(l){E.value=!0,C.value=!0,M.value=null;try{const{output:i}=await e.execute(`note show ${l} --json`,8e3);if(J(i).noDb){F.error(s("search.messages.needInit"));return}M.value=me(i),M.value||F.error(s("search.messages.noteLoadFailed"))}catch(i){F.error(s("search.messages.loadFailed",{err:i?.message||i}))}finally{C.value=!1}}se(oe);const le={t:s,ws:e,EMPTY_IMG:x,RECENT_LS:V,RECENT_MAX:re,loadingIndex:q,loadingNote:C,searching:P,searched:B,notes:z,results:h,errorState:A,form:T,currentQuery:Q,recentQueries:w,activeTab:K,indexCategoryFilter:S,indexTagFilter:N,showNoteModal:E,currentNote:M,indexSummary:G,topScore:Y,noteColumns:W,filteredNotes:Z,modeLabel:H,categoryColor:X,scoreColor:$,escapeHtml:R,highlightSnippet:I,highlightContent:ee,loadRecent:U,pushRecent:a,clearRecent:p,rerunQuery:D,loadIndex:oe,runSearch:te,shellQuote:ne,searchSimilar:pe,viewNote:ve,ref:v,computed:j,onMounted:se,reactive:ie,get useI18n(){return ce},get ReloadOutlined(){return Me},get SearchOutlined(){return Ee},get ThunderboltOutlined(){return we},get BookOutlined(){return ze},get AppstoreOutlined(){return Oe},get TagsOutlined(){return Ae},get FileTextOutlined(){return Ne},get TrophyOutlined(){return Te},get EyeOutlined(){return Ce},get message(){return F},get Empty(){return ue},get useWsStore(){return de},get parseSearchResults(){return fe},get parseNotes(){return ge},get parseNote(){return me},get buildIndexSummary(){return _e},get detectSearchError(){return J},get formatSearchTime(){return Le},get SEARCH_MODES(){return Ie}};return Object.defineProperty(le,"__isScriptSetup",{enumerable:!1,value:!0}),le}},Be={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},Qe={class:"page-title"},je={class:"page-sub"},qe={key:0,class:"recent-row"},Ke={class:"recent-label"},He={class:"score-block"},Ue={class:"result-title"},Je={style:{color:"var(--text-muted)","font-size":"11px","font-family":"monospace"}},Ve={style:{"margin-left":"8px",color:"var(--text-secondary)","font-size":"11px"}},Ge={key:0,class:"result-snippet"},Ye=["innerHTML"],We={class:"filter-bar"},Ze={key:0,class:"tag-row"},Xe={class:"tag-row-label"},$e={class:"tag-count"},et={style:{color:"var(--text-primary)","font-weight":"500"}},tt={style:{color:"var(--text-muted)","font-size":"11px","font-family":"monospace","margin-top":"2px"}},rt={key:0,style:{color:"var(--text-muted)","font-size":"11px"}},at={key:3,style:{color:"var(--text-secondary)","font-size":"11px"}},ot={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},nt={key:0,style:{padding:"40px","text-align":"center"}},lt={key:1,style:{"padding-top":"8px"}},st={style:{"font-family":"monospace","font-size":"12px"}},it={key:0,style:{color:"var(--text-muted)"}},ct={style:{color:"var(--text-primary)","font-size":"13px",margin:"16px 0 8px"}},dt={key:0,class:"note-content"},ut=["innerHTML"];function ft(n,o,s,e,x,q){const C=u("a-button"),P=u("a-space"),B=u("a-alert"),z=u("a-input"),h=u("a-col"),A=u("a-radio-button"),T=u("a-radio-group"),Q=u("a-input-number"),w=u("a-row"),K=u("a-form"),S=u("a-tag"),N=u("a-card"),E=u("a-statistic"),M=u("a-empty"),G=u("a-progress"),Y=u("a-list-item-meta"),W=u("a-list-item"),Z=u("a-list"),H=u("a-tab-pane"),X=u("a-table"),$=u("a-tabs"),R=u("a-spin"),I=u("a-descriptions-item"),ee=u("a-descriptions"),U=u("a-modal");return d(),g("div",null,[m("div",Be,[m("div",null,[m("h2",Qe,c(e.t("search.title")),1),m("p",je,c(e.t("search.subtitle")),1)]),r(P,null,{default:t(()=>[r(C,{loading:e.loadingIndex,onClick:e.loadIndex},{icon:t(()=>[r(e.ReloadOutlined)]),default:t(()=>[_(" "+c(e.t("search.refreshIndex")),1)]),_:1},8,["loading"])]),_:1})]),f(" noDb banner "),e.errorState.noDb?(d(),k(B,{key:0,type:"info","show-icon":"",message:e.t("search.noDb.message"),description:e.t("search.noDb.description"),style:{"margin-bottom":"16px"}},null,8,["message","description"])):f("v-if",!0),f(" Search bar "),r(N,{size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"},"body-style":{padding:"14px 16px"}},{default:t(()=>[r(K,{layout:"vertical",model:e.form,onSubmit:ke(e.runSearch,["prevent"])},{default:t(()=>[r(w,{gutter:12},{default:t(()=>[r(h,{span:14},{default:t(()=>[r(z,{value:e.form.query,"onUpdate:value":o[0]||(o[0]=a=>e.form.query=a),size:"large",placeholder:e.t("search.form.queryPlaceholder"),"allow-clear":"",onPressEnter:e.runSearch},{prefix:t(()=>[r(e.SearchOutlined)]),_:1},8,["value","placeholder"])]),_:1}),r(h,{span:4},{default:t(()=>[r(T,{value:e.form.mode,"onUpdate:value":o[1]||(o[1]=a=>e.form.mode=a),size:"large","button-style":"solid"},{default:t(()=>[(d(!0),g(O,null,L(e.SEARCH_MODES,a=>(d(),k(A,{key:a,value:a},{default:t(()=>[_(c(e.modeLabel(a)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1}),r(h,{span:3},{default:t(()=>[r(Q,{value:e.form.topK,"onUpdate:value":o[2]||(o[2]=a=>e.form.topK=a),min:1,max:50,placeholder:e.t("search.form.topKPlaceholder"),size:"large",style:{width:"100%"}},null,8,["value","placeholder"])]),_:1}),r(h,{span:3},{default:t(()=>[r(C,{type:"primary",size:"large",loading:e.searching,block:"",onClick:e.runSearch},{icon:t(()=>[r(e.ThunderboltOutlined)]),default:t(()=>[_(" "+c(e.t("search.form.submit")),1)]),_:1},8,["loading"])]),_:1})]),_:1})]),_:1},8,["model"]),f(" Recent queries chips "),e.recentQueries.length?(d(),g("div",qe,[m("span",Ke,c(e.t("search.recent.label")),1),(d(!0),g(O,null,L(e.recentQueries,a=>(d(),k(S,{key:a,color:"blue",class:"recent-chip",onClick:p=>e.rerunQuery(a)},{default:t(()=>[_(c(a),1)]),_:2},1032,["onClick"]))),128)),r(C,{size:"small",type:"link",danger:"",onClick:e.clearRecent},{default:t(()=>[_(c(e.t("search.recent.clear")),1)]),_:1})])):f("v-if",!0)]),_:1}),f(" Stat cards "),r(w,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:t(()=>[r(h,{xs:12,sm:8,lg:5},{default:t(()=>[r(N,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[r(E,{title:e.t("search.stats.indexedNotes"),value:e.indexSummary.total,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:t(()=>[r(e.BookOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),r(h,{xs:12,sm:8,lg:5},{default:t(()=>[r(N,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[r(E,{title:e.t("search.stats.categories"),value:e.indexSummary.categories.length,"value-style":{color:"#722ed1",fontSize:"20px"}},{prefix:t(()=>[r(e.AppstoreOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),r(h,{xs:12,sm:8,lg:5},{default:t(()=>[r(N,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[r(E,{title:e.t("search.stats.tags"),value:e.indexSummary.tags.length,"value-style":{color:"#13c2c2",fontSize:"20px"}},{prefix:t(()=>[r(e.TagsOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),r(h,{xs:12,sm:8,lg:5},{default:t(()=>[r(N,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[r(E,{title:e.t("search.stats.results"),value:e.results.length,"value-style":{color:e.results.length>0?"#52c41a":"#888",fontSize:"20px"}},{prefix:t(()=>[r(e.FileTextOutlined)]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),r(h,{xs:24,sm:8,lg:4},{default:t(()=>[r(N,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[r(E,{title:e.t("search.stats.topScore"),value:e.topScore,precision:3,"value-style":{color:e.scoreColor(e.topScore),fontSize:"20px"}},{prefix:t(()=>[r(e.TrophyOutlined)]),_:1},8,["title","value","value-style"])]),_:1})]),_:1})]),_:1}),f(" Tabs "),r($,{activeKey:e.activeTab,"onUpdate:activeKey":o[5]||(o[5]=a=>e.activeTab=a),class:"search-tabs"},{default:t(()=>[f(" ── Results tab ───────────────────────────────────────── "),r(H,{key:"results",tab:e.t("search.tabs.results")},{default:t(()=>[e.searched?e.results.length?(d(),k(Z,{key:2,"data-source":e.results,"item-layout":"vertical",size:"large"},{renderItem:t(({item:a})=>[r(W,{class:"result-row"},{actions:t(()=>[r(C,{type:"link",size:"small",onClick:p=>e.viewNote(a.id)},{icon:t(()=>[r(e.EyeOutlined)]),default:t(()=>[_(" "+c(e.t("search.results.viewFull")),1)]),_:1},8,["onClick"])]),extra:t(()=>[m("div",He,[r(G,{type:"circle",percent:Math.round(Math.min(1,a.score)*100),"stroke-color":e.scoreColor(a.score),format:()=>a.score.toFixed(3),width:60},null,8,["percent","stroke-color","format"])])]),default:t(()=>[r(Y,null,{title:t(()=>[m("span",Ue,c(a.title||e.t("search.results.noTitle")),1),r(S,{color:e.categoryColor(a.category),style:{"margin-left":"8px"}},{default:t(()=>[_(c(a.category),1)]),_:2},1032,["color"])]),description:t(()=>[m("span",Je,c(a.id.slice(0,16)),1),m("span",Ve,c(e.formatSearchTime(a.createdAt)),1)]),_:2},1024),a.snippet?(d(),g("div",Ge,[m("span",{innerHTML:e.highlightSnippet(a.snippet,e.currentQuery)},null,8,Ye)])):f("v-if",!0)]),_:2},1024)]),_:1},8,["data-source"])):(d(),k(M,{key:1,description:e.t("search.results.noMatch",{query:e.currentQuery}),image:e.EMPTY_IMG,style:{padding:"40px 0"}},null,8,["description","image"])):(d(),k(M,{key:0,description:e.t("search.results.promptEmpty"),image:e.EMPTY_IMG,style:{padding:"40px 0"}},null,8,["description","image"]))]),_:1},8,["tab"]),f(" ── Index browser tab ────────────────────────────────── "),r(H,{key:"index",tab:e.t("search.tabs.index")},{default:t(()=>[m("div",We,[r(T,{value:e.indexCategoryFilter,"onUpdate:value":o[3]||(o[3]=a=>e.indexCategoryFilter=a),size:"small","button-style":"solid"},{default:t(()=>[r(A,{value:""},{default:t(()=>[_(c(e.t("search.index.allCategories")),1)]),_:1}),(d(!0),g(O,null,L(e.indexSummary.categories.slice(0,6),a=>(d(),k(A,{key:a.name,value:a.name},{default:t(()=>[_(c(a.name)+" ("+c(a.count)+") ",1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),r(z,{value:e.indexTagFilter,"onUpdate:value":o[4]||(o[4]=a=>e.indexTagFilter=a),placeholder:e.t("search.index.tagFilterPlaceholder"),"allow-clear":"",size:"small",style:{"max-width":"180px"}},null,8,["value","placeholder"])]),f(" Top tags chips "),e.indexSummary.tags.length?(d(),g("div",Ze,[m("span",Xe,c(e.t("search.index.topTagsLabel")),1),(d(!0),g(O,null,L(e.indexSummary.tags.slice(0,12),a=>(d(),k(S,{key:a.name,color:e.indexTagFilter===a.name?"blue":"default",class:"tag-chip",onClick:p=>e.indexTagFilter=e.indexTagFilter===a.name?"":a.name},{default:t(()=>[_(c(a.name)+" ",1),m("span",$e,c(a.count),1)]),_:2},1032,["color","onClick"]))),128))])):f("v-if",!0),r(X,{columns:e.noteColumns,"data-source":e.filteredNotes,pagination:{pageSize:20,showTotal:a=>e.t("search.totals.rows",{count:a})},size:"small",loading:e.loadingIndex,style:{background:"var(--bg-card)"}},{bodyCell:t(({column:a,record:p})=>[a.key==="title"?(d(),g(O,{key:0},[m("span",et,c(p.title||e.t("search.results.noTitle")),1),m("div",tt,c(p.id.slice(0,16)),1)],64)):f("v-if",!0),a.key==="category"?(d(),k(S,{key:1,color:e.categoryColor(p.category)},{default:t(()=>[_(c(p.category),1)]),_:2},1032,["color"])):f("v-if",!0),a.key==="tags"?(d(),g(O,{key:2},[(d(!0),g(O,null,L(p.tags.slice(0,4),D=>(d(),k(S,{key:D,color:"default",style:{"font-size":"11px"}},{default:t(()=>[_(c(D),1)]),_:2},1024))),128)),p.tags.length>4?(d(),g("span",rt,"+"+c(p.tags.length-4),1)):f("v-if",!0)],64)):f("v-if",!0),a.key==="createdAt"?(d(),g("span",at,c(e.formatSearchTime(p.createdAt)),1)):f("v-if",!0),a.key==="action"?(d(),g(O,{key:4},[r(C,{size:"small",type:"link",onClick:D=>e.viewNote(p.id)},{default:t(()=>[_(c(e.t("search.index.rowAction.view")),1)]),_:1},8,["onClick"]),r(C,{size:"small",type:"link",onClick:D=>e.searchSimilar(p)},{default:t(()=>[_(c(e.t("search.index.rowAction.similar")),1)]),_:1},8,["onClick"])],64)):f("v-if",!0)]),emptyText:t(()=>[m("div",ot,[r(e.BookOutlined,{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),_(" "+c(e.indexCategoryFilter||e.indexTagFilter?e.t("search.empty.filtered"):e.t("search.empty.noNotes")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"])]),_:1},8,["activeKey"]),f(" ── Note detail modal ─────────────────────────────────── "),r(U,{open:e.showNoteModal,"onUpdate:open":o[6]||(o[6]=a=>e.showNoteModal=a),title:e.t("search.note.title",{title:e.currentNote?.title||""}),width:780,footer:null},{default:t(()=>[e.loadingNote?(d(),g("div",nt,[r(R)])):e.currentNote?(d(),g("div",lt,[r(ee,{column:2,size:"small",bordered:""},{default:t(()=>[r(I,{label:e.t("search.note.id"),span:2},{default:t(()=>[m("span",st,c(e.currentNote.id),1)]),_:1},8,["label"]),r(I,{label:e.t("search.note.category")},{default:t(()=>[r(S,{color:e.categoryColor(e.currentNote.category)},{default:t(()=>[_(c(e.currentNote.category),1)]),_:1},8,["color"])]),_:1},8,["label"]),r(I,{label:e.t("search.note.tags")},{default:t(()=>[(d(!0),g(O,null,L(e.currentNote.tags,a=>(d(),k(S,{key:a,color:"default"},{default:t(()=>[_(c(a),1)]),_:2},1024))),128)),e.currentNote.tags.length?f("v-if",!0):(d(),g("span",it,"—"))]),_:1},8,["label"]),r(I,{label:e.t("search.note.createdAt")},{default:t(()=>[_(c(e.formatSearchTime(e.currentNote.createdAt)),1)]),_:1},8,["label"]),r(I,{label:e.t("search.note.updatedAt")},{default:t(()=>[_(c(e.formatSearchTime(e.currentNote.updatedAt)),1)]),_:1},8,["label"])]),_:1}),m("h4",ct,c(e.t("search.note.content")),1),e.currentNote.content?(d(),g("div",dt,[m("span",{innerHTML:e.highlightContent(e.currentNote.content,e.currentQuery)},null,8,ut)])):(d(),k(M,{key:1,description:e.t("search.note.emptyContent"),image:e.EMPTY_IMG},null,8,["description","image"]))])):f("v-if",!0)]),_:1},8,["open","title"])])}const ht=Se(Pe,[["render",ft],["__scopeId","data-v-d2b94ce3"],["__file","/tmp/cc-web-panel-PV9Dxg/repo/packages/web-panel/src/views/Search.vue"]]);export{ht as default};
1
+ import{I as u,J as g,U as m,R as c,c as r,K as t,V as f,S as k,r as v,o as se,a as ie,b as j,P as d,Q as _,a2 as ke,F as O,Z as L}from"./vendor-BvqAck49.js";import{_ as Se,b as ce,u as de,E as ue,d as F}from"./index-wEmgmG9r.js";import{s as ye}from"./community-parser-CO25nZFt.js";import{at as Ce,l as Te,a4 as Ne,a_ as Ae,a9 as Oe,a2 as ze,$ as we,k as Ee,R as Me}from"./icons-DP3uiYxy.js";function ae(n){const o=ye(n);if(!o)return null;try{return JSON.parse(o)}catch{}const s=o.match(/\{[\s\S]*\}|\[[\s\S]*\]/);if(!s)return null;try{return JSON.parse(s[0])}catch{return null}}const Ie=Object.freeze(["bm25","vector","hybrid"]);function Fe(n,o=0){return typeof n=="number"&&Number.isFinite(n)?n:o}function Re(n){if(Array.isArray(n))return n.filter(o=>typeof o=="string");if(typeof n!="string")return[];try{const o=JSON.parse(n);if(Array.isArray(o))return o.filter(s=>typeof s=="string")}catch{}return[]}function J(n){if(!n)return{noDb:!1,error:""};const o=ye(n),s=/Database not available/i.test(o);return{noDb:s,error:s?"Database not available":""}}function De(n,o=0){if(!n||typeof n!="object")return null;const s=n.id||"";return s?{key:s,id:s,score:Fe(n.score,0),title:String(n.title||""),category:String(n.category||"general"),createdAt:n.created_at??n.createdAt??"",snippet:String(n.snippet||""),_idx:o}:null}function fe(n){const o=ae(n);return Array.isArray(o)?o.map(De).filter(Boolean):[]}function he(n,o=0){if(!n||typeof n!="object")return null;const s=n.id||"";return s?{key:s,id:s,title:String(n.title||""),content:n.content??"",tags:Re(n.tags),category:String(n.category||"general"),createdAt:n.created_at??n.createdAt??"",updatedAt:n.updated_at??n.updatedAt??"",_idx:o}:null}function ge(n){const o=ae(n);return Array.isArray(o)?o.map(he).filter(Boolean):[]}function me(n){const o=ae(n);return!o||typeof o!="object"||Array.isArray(o)?null:he(o,0)}function _e(n){if(!Array.isArray(n)||n.length===0)return{total:0,categories:[],tags:[]};const o=new Map,s=new Map;for(const e of n){o.set(e.category,(o.get(e.category)||0)+1);for(const x of e.tags)s.set(x,(s.get(x)||0)+1)}return{total:n.length,categories:[...o.entries()].map(([e,x])=>({name:e,count:x})).sort((e,x)=>x.count-e.count),tags:[...s.entries()].map(([e,x])=>({name:e,count:x})).sort((e,x)=>x.count-e.count)}}function Le(n){if(n==null||n==="")return"—";const o=String(n),s=o.includes(" ")&&!o.includes("T")?o.replace(" ","T")+"Z":o,e=new Date(s);return isNaN(e.getTime())?o:e.toLocaleString("zh-CN",{hour12:!1})}const G="cc.web-panel.search.recent",re=8,Pe={__name:"Search",setup(n,{expose:o}){o();const{t:s}=ce(),e=de(),x=ue.PRESENTED_IMAGE_SIMPLE,q=v(!1),C=v(!1),P=v(!1),B=v(!1),z=v([]),h=v([]),A=v({noDb:!1,error:""}),T=ie({query:"",mode:"hybrid",topK:10}),Q=v(""),w=v(U()),K=v("results"),S=v(""),N=v(""),E=v(!1),M=v(null),V=j(()=>_e(z.value)),Y=j(()=>h.value.length?Math.max(...h.value.map(l=>l.score)):0),W=j(()=>[{title:s("search.noteColumns.title"),key:"title"},{title:s("search.noteColumns.category"),key:"category",width:"120px"},{title:s("search.noteColumns.tags"),key:"tags",width:"240px"},{title:s("search.noteColumns.createdAt"),key:"createdAt",width:"180px"},{title:s("search.noteColumns.action"),key:"action",width:"180px"}]),Z=j(()=>{let l=z.value;if(S.value&&(l=l.filter(i=>i.category===S.value)),N.value.trim()){const i=N.value.trim().toLowerCase();l=l.filter(y=>y.tags.some(b=>b.toLowerCase().includes(i)))}return l});function H(l){const i=`search.mode.${l}`,y=s(i);return y===i?l:y}function X(l){const i=["blue","green","purple","orange","cyan","magenta","gold","volcano"];let y=0;for(let b=0;b<(l||"").length;b++)y=y*31+l.charCodeAt(b)>>>0;return i[y%i.length]}function $(l){return l>=.7?"#52c41a":l>=.5?"#1677ff":l>=.3?"#faad14":"#ff4d4f"}function R(l){return String(l).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}function I(l,i){if(!i||!l)return R(l);const y=i.split(/\s+/).filter(Boolean);let b=R(l);for(const be of y){const xe=new RegExp(`(${be.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")})`,"gi");b=b.replace(xe,"<mark>$1</mark>")}return b}function ee(l,i){return i?I(l,i):R(l)}function U(){try{const l=localStorage.getItem(G);if(l){const i=JSON.parse(l);if(Array.isArray(i))return i.filter(y=>typeof y=="string").slice(0,re)}}catch{}return[]}function a(l){const i=l.trim();if(!i)return;const y=[i,...w.value.filter(b=>b!==i)];w.value=y.slice(0,re);try{localStorage.setItem(G,JSON.stringify(w.value))}catch{}}function p(){w.value=[];try{localStorage.removeItem(G)}catch{}}function D(l){T.query=l,te()}async function oe(){q.value=!0,A.value={noDb:!1,error:""};try{const{output:l}=await e.execute("note list -n 500 --json",12e3).catch(()=>({output:""})),i=J(l);if(i.noDb){A.value=i,z.value=[];return}z.value=ge(l)}catch(l){F.error(s("search.messages.loadIndexFailed",{err:l?.message||l}))}finally{q.value=!1}}async function te(){const l=T.query.trim();if(!l){F.warning(s("search.messages.queryRequired"));return}P.value=!0,A.value={noDb:!1,error:""};try{const i=[`search ${ne(l)}`,`--mode ${T.mode}`,`--top-k ${T.topK||10}`,"--json"],{output:y}=await e.execute(i.join(" "),15e3),b=J(y);if(b.noDb){A.value=b,h.value=[],B.value=!0,Q.value=l;return}h.value=fe(y),Q.value=l,B.value=!0,a(l),K.value="results"}catch(i){F.error(s("search.messages.searchFailed",{err:i?.message||i}))}finally{P.value=!1}}function ne(l){return`"${String(l).replace(/"/g,'\\"')}"`}function pe(l){T.query=l.title,T.mode="vector",te()}async function ve(l){E.value=!0,C.value=!0,M.value=null;try{const{output:i}=await e.execute(`note show ${l} --json`,8e3);if(J(i).noDb){F.error(s("search.messages.needInit"));return}M.value=me(i),M.value||F.error(s("search.messages.noteLoadFailed"))}catch(i){F.error(s("search.messages.loadFailed",{err:i?.message||i}))}finally{C.value=!1}}se(oe);const le={t:s,ws:e,EMPTY_IMG:x,RECENT_LS:G,RECENT_MAX:re,loadingIndex:q,loadingNote:C,searching:P,searched:B,notes:z,results:h,errorState:A,form:T,currentQuery:Q,recentQueries:w,activeTab:K,indexCategoryFilter:S,indexTagFilter:N,showNoteModal:E,currentNote:M,indexSummary:V,topScore:Y,noteColumns:W,filteredNotes:Z,modeLabel:H,categoryColor:X,scoreColor:$,escapeHtml:R,highlightSnippet:I,highlightContent:ee,loadRecent:U,pushRecent:a,clearRecent:p,rerunQuery:D,loadIndex:oe,runSearch:te,shellQuote:ne,searchSimilar:pe,viewNote:ve,ref:v,computed:j,onMounted:se,reactive:ie,get useI18n(){return ce},get ReloadOutlined(){return Me},get SearchOutlined(){return Ee},get ThunderboltOutlined(){return we},get BookOutlined(){return ze},get AppstoreOutlined(){return Oe},get TagsOutlined(){return Ae},get FileTextOutlined(){return Ne},get TrophyOutlined(){return Te},get EyeOutlined(){return Ce},get message(){return F},get Empty(){return ue},get useWsStore(){return de},get parseSearchResults(){return fe},get parseNotes(){return ge},get parseNote(){return me},get buildIndexSummary(){return _e},get detectSearchError(){return J},get formatSearchTime(){return Le},get SEARCH_MODES(){return Ie}};return Object.defineProperty(le,"__isScriptSetup",{enumerable:!1,value:!0}),le}},Be={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},Qe={class:"page-title"},je={class:"page-sub"},qe={key:0,class:"recent-row"},Ke={class:"recent-label"},He={class:"score-block"},Ue={class:"result-title"},Je={style:{color:"var(--text-muted)","font-size":"11px","font-family":"monospace"}},Ge={style:{"margin-left":"8px",color:"var(--text-secondary)","font-size":"11px"}},Ve={key:0,class:"result-snippet"},Ye=["innerHTML"],We={class:"filter-bar"},Ze={key:0,class:"tag-row"},Xe={class:"tag-row-label"},$e={class:"tag-count"},et={style:{color:"var(--text-primary)","font-weight":"500"}},tt={style:{color:"var(--text-muted)","font-size":"11px","font-family":"monospace","margin-top":"2px"}},rt={key:0,style:{color:"var(--text-muted)","font-size":"11px"}},at={key:3,style:{color:"var(--text-secondary)","font-size":"11px"}},ot={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},nt={key:0,style:{padding:"40px","text-align":"center"}},lt={key:1,style:{"padding-top":"8px"}},st={style:{"font-family":"monospace","font-size":"12px"}},it={key:0,style:{color:"var(--text-muted)"}},ct={style:{color:"var(--text-primary)","font-size":"13px",margin:"16px 0 8px"}},dt={key:0,class:"note-content"},ut=["innerHTML"];function ft(n,o,s,e,x,q){const C=u("a-button"),P=u("a-space"),B=u("a-alert"),z=u("a-input"),h=u("a-col"),A=u("a-radio-button"),T=u("a-radio-group"),Q=u("a-input-number"),w=u("a-row"),K=u("a-form"),S=u("a-tag"),N=u("a-card"),E=u("a-statistic"),M=u("a-empty"),V=u("a-progress"),Y=u("a-list-item-meta"),W=u("a-list-item"),Z=u("a-list"),H=u("a-tab-pane"),X=u("a-table"),$=u("a-tabs"),R=u("a-spin"),I=u("a-descriptions-item"),ee=u("a-descriptions"),U=u("a-modal");return d(),g("div",null,[m("div",Be,[m("div",null,[m("h2",Qe,c(e.t("search.title")),1),m("p",je,c(e.t("search.subtitle")),1)]),r(P,null,{default:t(()=>[r(C,{loading:e.loadingIndex,onClick:e.loadIndex},{icon:t(()=>[r(e.ReloadOutlined)]),default:t(()=>[_(" "+c(e.t("search.refreshIndex")),1)]),_:1},8,["loading"])]),_:1})]),f(" noDb banner "),e.errorState.noDb?(d(),k(B,{key:0,type:"info","show-icon":"",message:e.t("search.noDb.message"),description:e.t("search.noDb.description"),style:{"margin-bottom":"16px"}},null,8,["message","description"])):f("v-if",!0),f(" Search bar "),r(N,{size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"},"body-style":{padding:"14px 16px"}},{default:t(()=>[r(K,{layout:"vertical",model:e.form,onSubmit:ke(e.runSearch,["prevent"])},{default:t(()=>[r(w,{gutter:12},{default:t(()=>[r(h,{span:14},{default:t(()=>[r(z,{value:e.form.query,"onUpdate:value":o[0]||(o[0]=a=>e.form.query=a),size:"large",placeholder:e.t("search.form.queryPlaceholder"),"allow-clear":"",onPressEnter:e.runSearch},{prefix:t(()=>[r(e.SearchOutlined)]),_:1},8,["value","placeholder"])]),_:1}),r(h,{span:4},{default:t(()=>[r(T,{value:e.form.mode,"onUpdate:value":o[1]||(o[1]=a=>e.form.mode=a),size:"large","button-style":"solid"},{default:t(()=>[(d(!0),g(O,null,L(e.SEARCH_MODES,a=>(d(),k(A,{key:a,value:a},{default:t(()=>[_(c(e.modeLabel(a)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1}),r(h,{span:3},{default:t(()=>[r(Q,{value:e.form.topK,"onUpdate:value":o[2]||(o[2]=a=>e.form.topK=a),min:1,max:50,placeholder:e.t("search.form.topKPlaceholder"),size:"large",style:{width:"100%"}},null,8,["value","placeholder"])]),_:1}),r(h,{span:3},{default:t(()=>[r(C,{type:"primary",size:"large",loading:e.searching,block:"",onClick:e.runSearch},{icon:t(()=>[r(e.ThunderboltOutlined)]),default:t(()=>[_(" "+c(e.t("search.form.submit")),1)]),_:1},8,["loading"])]),_:1})]),_:1})]),_:1},8,["model"]),f(" Recent queries chips "),e.recentQueries.length?(d(),g("div",qe,[m("span",Ke,c(e.t("search.recent.label")),1),(d(!0),g(O,null,L(e.recentQueries,a=>(d(),k(S,{key:a,color:"blue",class:"recent-chip",onClick:p=>e.rerunQuery(a)},{default:t(()=>[_(c(a),1)]),_:2},1032,["onClick"]))),128)),r(C,{size:"small",type:"link",danger:"",onClick:e.clearRecent},{default:t(()=>[_(c(e.t("search.recent.clear")),1)]),_:1})])):f("v-if",!0)]),_:1}),f(" Stat cards "),r(w,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:t(()=>[r(h,{xs:12,sm:8,lg:5},{default:t(()=>[r(N,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[r(E,{title:e.t("search.stats.indexedNotes"),value:e.indexSummary.total,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:t(()=>[r(e.BookOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),r(h,{xs:12,sm:8,lg:5},{default:t(()=>[r(N,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[r(E,{title:e.t("search.stats.categories"),value:e.indexSummary.categories.length,"value-style":{color:"#722ed1",fontSize:"20px"}},{prefix:t(()=>[r(e.AppstoreOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),r(h,{xs:12,sm:8,lg:5},{default:t(()=>[r(N,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[r(E,{title:e.t("search.stats.tags"),value:e.indexSummary.tags.length,"value-style":{color:"#13c2c2",fontSize:"20px"}},{prefix:t(()=>[r(e.TagsOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),r(h,{xs:12,sm:8,lg:5},{default:t(()=>[r(N,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[r(E,{title:e.t("search.stats.results"),value:e.results.length,"value-style":{color:e.results.length>0?"#52c41a":"#888",fontSize:"20px"}},{prefix:t(()=>[r(e.FileTextOutlined)]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),r(h,{xs:24,sm:8,lg:4},{default:t(()=>[r(N,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[r(E,{title:e.t("search.stats.topScore"),value:e.topScore,precision:3,"value-style":{color:e.scoreColor(e.topScore),fontSize:"20px"}},{prefix:t(()=>[r(e.TrophyOutlined)]),_:1},8,["title","value","value-style"])]),_:1})]),_:1})]),_:1}),f(" Tabs "),r($,{activeKey:e.activeTab,"onUpdate:activeKey":o[5]||(o[5]=a=>e.activeTab=a),class:"search-tabs"},{default:t(()=>[f(" ── Results tab ───────────────────────────────────────── "),r(H,{key:"results",tab:e.t("search.tabs.results")},{default:t(()=>[e.searched?e.results.length?(d(),k(Z,{key:2,"data-source":e.results,"item-layout":"vertical",size:"large"},{renderItem:t(({item:a})=>[r(W,{class:"result-row"},{actions:t(()=>[r(C,{type:"link",size:"small",onClick:p=>e.viewNote(a.id)},{icon:t(()=>[r(e.EyeOutlined)]),default:t(()=>[_(" "+c(e.t("search.results.viewFull")),1)]),_:1},8,["onClick"])]),extra:t(()=>[m("div",He,[r(V,{type:"circle",percent:Math.round(Math.min(1,a.score)*100),"stroke-color":e.scoreColor(a.score),format:()=>a.score.toFixed(3),width:60},null,8,["percent","stroke-color","format"])])]),default:t(()=>[r(Y,null,{title:t(()=>[m("span",Ue,c(a.title||e.t("search.results.noTitle")),1),r(S,{color:e.categoryColor(a.category),style:{"margin-left":"8px"}},{default:t(()=>[_(c(a.category),1)]),_:2},1032,["color"])]),description:t(()=>[m("span",Je,c(a.id.slice(0,16)),1),m("span",Ge,c(e.formatSearchTime(a.createdAt)),1)]),_:2},1024),a.snippet?(d(),g("div",Ve,[m("span",{innerHTML:e.highlightSnippet(a.snippet,e.currentQuery)},null,8,Ye)])):f("v-if",!0)]),_:2},1024)]),_:1},8,["data-source"])):(d(),k(M,{key:1,description:e.t("search.results.noMatch",{query:e.currentQuery}),image:e.EMPTY_IMG,style:{padding:"40px 0"}},null,8,["description","image"])):(d(),k(M,{key:0,description:e.t("search.results.promptEmpty"),image:e.EMPTY_IMG,style:{padding:"40px 0"}},null,8,["description","image"]))]),_:1},8,["tab"]),f(" ── Index browser tab ────────────────────────────────── "),r(H,{key:"index",tab:e.t("search.tabs.index")},{default:t(()=>[m("div",We,[r(T,{value:e.indexCategoryFilter,"onUpdate:value":o[3]||(o[3]=a=>e.indexCategoryFilter=a),size:"small","button-style":"solid"},{default:t(()=>[r(A,{value:""},{default:t(()=>[_(c(e.t("search.index.allCategories")),1)]),_:1}),(d(!0),g(O,null,L(e.indexSummary.categories.slice(0,6),a=>(d(),k(A,{key:a.name,value:a.name},{default:t(()=>[_(c(a.name)+" ("+c(a.count)+") ",1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),r(z,{value:e.indexTagFilter,"onUpdate:value":o[4]||(o[4]=a=>e.indexTagFilter=a),placeholder:e.t("search.index.tagFilterPlaceholder"),"allow-clear":"",size:"small",style:{"max-width":"180px"}},null,8,["value","placeholder"])]),f(" Top tags chips "),e.indexSummary.tags.length?(d(),g("div",Ze,[m("span",Xe,c(e.t("search.index.topTagsLabel")),1),(d(!0),g(O,null,L(e.indexSummary.tags.slice(0,12),a=>(d(),k(S,{key:a.name,color:e.indexTagFilter===a.name?"blue":"default",class:"tag-chip",onClick:p=>e.indexTagFilter=e.indexTagFilter===a.name?"":a.name},{default:t(()=>[_(c(a.name)+" ",1),m("span",$e,c(a.count),1)]),_:2},1032,["color","onClick"]))),128))])):f("v-if",!0),r(X,{columns:e.noteColumns,"data-source":e.filteredNotes,pagination:{pageSize:20,showTotal:a=>e.t("search.totals.rows",{count:a})},size:"small",loading:e.loadingIndex,style:{background:"var(--bg-card)"}},{bodyCell:t(({column:a,record:p})=>[a.key==="title"?(d(),g(O,{key:0},[m("span",et,c(p.title||e.t("search.results.noTitle")),1),m("div",tt,c(p.id.slice(0,16)),1)],64)):f("v-if",!0),a.key==="category"?(d(),k(S,{key:1,color:e.categoryColor(p.category)},{default:t(()=>[_(c(p.category),1)]),_:2},1032,["color"])):f("v-if",!0),a.key==="tags"?(d(),g(O,{key:2},[(d(!0),g(O,null,L(p.tags.slice(0,4),D=>(d(),k(S,{key:D,color:"default",style:{"font-size":"11px"}},{default:t(()=>[_(c(D),1)]),_:2},1024))),128)),p.tags.length>4?(d(),g("span",rt,"+"+c(p.tags.length-4),1)):f("v-if",!0)],64)):f("v-if",!0),a.key==="createdAt"?(d(),g("span",at,c(e.formatSearchTime(p.createdAt)),1)):f("v-if",!0),a.key==="action"?(d(),g(O,{key:4},[r(C,{size:"small",type:"link",onClick:D=>e.viewNote(p.id)},{default:t(()=>[_(c(e.t("search.index.rowAction.view")),1)]),_:1},8,["onClick"]),r(C,{size:"small",type:"link",onClick:D=>e.searchSimilar(p)},{default:t(()=>[_(c(e.t("search.index.rowAction.similar")),1)]),_:1},8,["onClick"])],64)):f("v-if",!0)]),emptyText:t(()=>[m("div",ot,[r(e.BookOutlined,{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),_(" "+c(e.indexCategoryFilter||e.indexTagFilter?e.t("search.empty.filtered"):e.t("search.empty.noNotes")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"])]),_:1},8,["activeKey"]),f(" ── Note detail modal ─────────────────────────────────── "),r(U,{open:e.showNoteModal,"onUpdate:open":o[6]||(o[6]=a=>e.showNoteModal=a),title:e.t("search.note.title",{title:e.currentNote?.title||""}),width:780,footer:null},{default:t(()=>[e.loadingNote?(d(),g("div",nt,[r(R)])):e.currentNote?(d(),g("div",lt,[r(ee,{column:2,size:"small",bordered:""},{default:t(()=>[r(I,{label:e.t("search.note.id"),span:2},{default:t(()=>[m("span",st,c(e.currentNote.id),1)]),_:1},8,["label"]),r(I,{label:e.t("search.note.category")},{default:t(()=>[r(S,{color:e.categoryColor(e.currentNote.category)},{default:t(()=>[_(c(e.currentNote.category),1)]),_:1},8,["color"])]),_:1},8,["label"]),r(I,{label:e.t("search.note.tags")},{default:t(()=>[(d(!0),g(O,null,L(e.currentNote.tags,a=>(d(),k(S,{key:a,color:"default"},{default:t(()=>[_(c(a),1)]),_:2},1024))),128)),e.currentNote.tags.length?f("v-if",!0):(d(),g("span",it,"—"))]),_:1},8,["label"]),r(I,{label:e.t("search.note.createdAt")},{default:t(()=>[_(c(e.formatSearchTime(e.currentNote.createdAt)),1)]),_:1},8,["label"]),r(I,{label:e.t("search.note.updatedAt")},{default:t(()=>[_(c(e.formatSearchTime(e.currentNote.updatedAt)),1)]),_:1},8,["label"])]),_:1}),m("h4",ct,c(e.t("search.note.content")),1),e.currentNote.content?(d(),g("div",dt,[m("span",{innerHTML:e.highlightContent(e.currentNote.content,e.currentQuery)},null,8,ut)])):(d(),k(M,{key:1,description:e.t("search.note.emptyContent"),image:e.EMPTY_IMG},null,8,["description","image"]))])):f("v-if",!0)]),_:1},8,["open","title"])])}const ht=Se(Pe,[["render",ft],["__scopeId","data-v-d2b94ce3"],["__file","/tmp/cc-web-panel-drwr9c/repo/packages/web-panel/src/views/Search.vue"]]);export{ht as default};