chainlesschain 0.162.1 → 0.162.3

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 (156) hide show
  1. package/package.json +2 -1
  2. package/src/assets/web-panel/.build-hash +1 -1
  3. package/src/assets/web-panel/assets/{AIOps-5A54O3wF.js → AIOps-BHcJlF4M.js} +1 -1
  4. package/src/assets/web-panel/assets/{ActionButton-epuY2GkZ.js → ActionButton-QNqNYP_E.js} +1 -1
  5. package/src/assets/web-panel/assets/{Analytics-CIdxw7T5.js → Analytics-DWrmU2MM.js} +2 -2
  6. package/src/assets/web-panel/assets/AppLayout-0BXhjvFX.js +3 -0
  7. package/src/assets/web-panel/assets/{AppLayout-DBgtkmP7.css → AppLayout-BLCe1k8m.css} +1 -1
  8. package/src/assets/web-panel/assets/{Audit-D95nRcdZ.js → Audit-Cns_OJ3y.js} +1 -1
  9. package/src/assets/web-panel/assets/{Backup-Cmw7ZTJD.js → Backup-BWXKm8S2.js} +1 -1
  10. package/src/assets/web-panel/assets/{BaseInput-DgCEAL_E.js → BaseInput-DMtM90I4.js} +1 -1
  11. package/src/assets/web-panel/assets/{Chat-DAQAzZsA.js → Chat-CPSQIJkd.js} +1 -1
  12. package/src/assets/web-panel/assets/{Checkbox-GRxUANnE.js → Checkbox-CdoTzEcu.js} +1 -1
  13. package/src/assets/web-panel/assets/{Codegen--6KIDt1W.js → Codegen-DiMm-2CJ.js} +1 -1
  14. package/src/assets/web-panel/assets/{Col-3s6dxuMx.js → Col-Dw8uRsh8.js} +1 -1
  15. package/src/assets/web-panel/assets/{Community-D60pkEBz.js → Community-DF6oPrrt.js} +1 -1
  16. package/src/assets/web-panel/assets/{Compact-CQR4QsWP.js → Compact-DDeBOvFc.js} +1 -1
  17. package/src/assets/web-panel/assets/Compliance-cpcX8foc.js +1 -0
  18. package/src/assets/web-panel/assets/{Cowork-Yrrf_Vuu.js → Cowork-BnF4dCvO.js} +3 -3
  19. package/src/assets/web-panel/assets/{Cron-DSuuSKIQ.js → Cron-CNm5yzGt.js} +2 -2
  20. package/src/assets/web-panel/assets/{Crosschain-Dub0G9i4.js → Crosschain-1fdaoWnO.js} +1 -1
  21. package/src/assets/web-panel/assets/{DID-CbpCGV51.js → DID-CgWgrQjr.js} +2 -2
  22. package/src/assets/web-panel/assets/{Dashboard-D29e0y01.js → Dashboard-dGcTq_hg.js} +2 -2
  23. package/src/assets/web-panel/assets/{Dropdown-DZY7X5v2.js → Dropdown-CMcWp2f1.js} +1 -1
  24. package/src/assets/web-panel/assets/{Federation-dmrLzzMB.js → Federation-BVmtVOzD.js} +1 -1
  25. package/src/assets/web-panel/assets/{FormItemContext-EopsCGez.js → FormItemContext-BTuMR6zf.js} +1 -1
  26. package/src/assets/web-panel/assets/{Git-D3mb4RhK.js → Git-2itzzOWU.js} +2 -2
  27. package/src/assets/web-panel/assets/{Governance-8v034-Nr.js → Governance-BD5nFtjx.js} +1 -1
  28. package/src/assets/web-panel/assets/{Inference-Ddl-HQwQ.js → Inference-BqTjotuw.js} +1 -1
  29. package/src/assets/web-panel/assets/KnowledgeGraph-CkJCUp_X.js +1 -0
  30. package/src/assets/web-panel/assets/{Logs-Bsu6lYQe.js → Logs-BezIQuu3.js} +1 -1
  31. package/src/assets/web-panel/assets/{Marketplace-Iyf2Xc23.js → Marketplace-BQi8NC94.js} +1 -1
  32. package/src/assets/web-panel/assets/{McpTools-ljVE1lIN.js → McpTools-UDm4tI8g.js} +1 -1
  33. package/src/assets/web-panel/assets/{Memory-Ca48TtDU.js → Memory-b3k3SJXP.js} +2 -2
  34. package/src/assets/web-panel/assets/{MobileBridge-DZ3Ar6da.js → MobileBridge-CHysUGzj.js} +1 -1
  35. package/src/assets/web-panel/assets/MobileProjects-Ceaxrqzc.css +1 -0
  36. package/src/assets/web-panel/assets/MobileProjects-H5DjqNIw.js +1 -0
  37. package/src/assets/web-panel/assets/{Mtc-CRjBnVAT.js → Mtc-B-kn2cbZ.js} +4 -4
  38. package/src/assets/web-panel/assets/{MtcAudit-CEC2eKez.js → MtcAudit-BSeDGJAO.js} +1 -1
  39. package/src/assets/web-panel/assets/{Multisig-BHoQvNeL.js → Multisig-BSwWbNCn.js} +2 -2
  40. package/src/assets/web-panel/assets/{NLProgramming-9e5hIFvL.js → NLProgramming-B7fTKT9-.js} +1 -1
  41. package/src/assets/web-panel/assets/{Notes-BEhZRadw.js → Notes-CE7Dxyik.js} +3 -3
  42. package/src/assets/web-panel/assets/{NotificationSettings-CzPbT9UE.js → NotificationSettings-BrWPb12X.js} +1 -1
  43. package/src/assets/web-panel/assets/{Organization-CvFg4VAr.js → Organization-BvMcmpZ-.js} +4 -4
  44. package/src/assets/web-panel/assets/{Overflow-Cm7ISeJl.js → Overflow-9VpUiyX3.js} +1 -1
  45. package/src/assets/web-panel/assets/{P2P-BWN-wdfH.js → P2P-CZiZLuH6.js} +2 -2
  46. package/src/assets/web-panel/assets/{Permissions-C4vKkP_t.js → Permissions-7xPYU8o3.js} +4 -4
  47. package/src/assets/web-panel/assets/PersonalDataHub-BoAsj3rP.js +1 -0
  48. package/src/assets/web-panel/assets/PersonalDataHub-C5HcGC5x.css +1 -0
  49. package/src/assets/web-panel/assets/{Pipeline-DQCShDeT.js → Pipeline-BXmWkBtJ.js} +1 -1
  50. package/src/assets/web-panel/assets/{Privacy-Nc7LlSr3.js → Privacy-Bowi-wqF.js} +1 -1
  51. package/src/assets/web-panel/assets/{ProjectInit-DDkqXAED.js → ProjectInit-BW1Xj7_l.js} +2 -2
  52. package/src/assets/web-panel/assets/{ProjectSettings-ia6GQr6A.js → ProjectSettings-pDbBvJFG.js} +1 -1
  53. package/src/assets/web-panel/assets/Projects-BX-SG9R4.css +1 -0
  54. package/src/assets/web-panel/assets/Projects-D32hRs2K.js +1 -0
  55. package/src/assets/web-panel/assets/{Providers-EwarbUb8.js → Providers-fvnKRdFc.js} +1 -1
  56. package/src/assets/web-panel/assets/{QuickAsk-BAHQBw0d.js → QuickAsk-DBZrimTb.js} +1 -1
  57. package/src/assets/web-panel/assets/Recommend-B_leuPdE.js +1 -0
  58. package/src/assets/web-panel/assets/{Reputation-ai0gRNpj.js → Reputation-9YJu2Q0s.js} +1 -1
  59. package/src/assets/web-panel/assets/{Row-BWLfAhHC.js → Row-BwDaJw-R.js} +1 -1
  60. package/src/assets/web-panel/assets/{RssFeed-CnuRtiQH.js → RssFeed-CCwGtGbs.js} +3 -3
  61. package/src/assets/web-panel/assets/{Search-Da0CvI_2.js → Search-CLdXqpfz.js} +1 -1
  62. package/src/assets/web-panel/assets/{Security-DEFeOeUv.js → Security-_It0GsWS.js} +3 -3
  63. package/src/assets/web-panel/assets/Services-jBxBWGGT.js +2 -0
  64. package/src/assets/web-panel/assets/{Skeleton-DlRaGj_n.js → Skeleton-DR_EuFFW.js} +1 -1
  65. package/src/assets/web-panel/assets/{Skills-fjlZrsYq.js → Skills-DsHcMNEk.js} +1 -1
  66. package/src/assets/web-panel/assets/{Sla-DNSDuEt2.js → Sla-Be0UaX-h.js} +1 -1
  67. package/src/assets/web-panel/assets/{SpeechSettings-Bj0t-JCf.js → SpeechSettings-uUhDyyHj.js} +1 -1
  68. package/src/assets/web-panel/assets/{SyncSettings-uO7Gy-BB.js → SyncSettings-CUAwaSnj.js} +1 -1
  69. package/src/assets/web-panel/assets/{Tasks-BSjsO-m8.js → Tasks-CUVZww9Q.js} +1 -1
  70. package/src/assets/web-panel/assets/{Templates-B03SSuXn.js → Templates-WLZcNzJ_.js} +1 -1
  71. package/src/assets/web-panel/assets/{Tenant-CTCPIBzq.js → Tenant-FgN0uYm6.js} +1 -1
  72. package/src/assets/web-panel/assets/Terminal-BzLHjHyj.js +3 -0
  73. package/src/assets/web-panel/assets/Tokens-z7lyRr40.js +1 -0
  74. package/src/assets/web-panel/assets/{Trigger-kYPQmm6P.js → Trigger-HxLdC9ne.js} +1 -1
  75. package/src/assets/web-panel/assets/{Trust-mt-MiBeI.js → Trust-DggmMxpI.js} +1 -1
  76. package/src/assets/web-panel/assets/{UkeySign-DBi8jgXw.js → UkeySign-BO-pKTZ_.js} +1 -1
  77. package/src/assets/web-panel/assets/{VideoEditing-CINSMEf5.js → VideoEditing-DdLdJ9Ps.js} +1 -1
  78. package/src/assets/web-panel/assets/{Wallet-DCVMgW0U.js → Wallet-F8EfdQDN.js} +4 -4
  79. package/src/assets/web-panel/assets/{WebAuthn-C9OjbTBs.js → WebAuthn-Bi2Kf8Ev.js} +5 -5
  80. package/src/assets/web-panel/assets/{WorkflowEditor-LM1HJs-S.js → WorkflowEditor-DUHk4Y0A.js} +1 -1
  81. package/src/assets/web-panel/assets/{chat-Dz68Ixdp.js → chat-BMz8ik6R.js} +1 -1
  82. package/src/assets/web-panel/assets/{colors-qf63Eax9.js → colors-DTTx1bVY.js} +1 -1
  83. package/src/assets/web-panel/assets/{compact-item-r4YWRFGQ.js → compact-item-BjZyyKpa.js} +1 -1
  84. package/src/assets/web-panel/assets/{createContext-C8Lwrn-C.js → createContext-D0Ztn7R_.js} +1 -1
  85. package/src/assets/web-panel/assets/{hasIn-DsPi2kPP.js → hasIn-BeXm1bJ2.js} +1 -1
  86. package/src/assets/web-panel/assets/{icons-NT6gy8Ee.js → icons-BFHq5fEF.js} +4 -4
  87. package/src/assets/web-panel/assets/{index-C8SY0_S8.js → index-BDRzvi5v.js} +1 -1
  88. package/src/assets/web-panel/assets/{index-BfdIkZnT.js → index-BDmMBKM_.js} +1 -1
  89. package/src/assets/web-panel/assets/{index-BxNXO95B.js → index-BHuIMHcS.js} +1 -1
  90. package/src/assets/web-panel/assets/{index-C2OFaKmx.js → index-BODKOjRZ.js} +1 -1
  91. package/src/assets/web-panel/assets/{index-Bz1O2KhE.js → index-BUFpZk0I.js} +1 -1
  92. package/src/assets/web-panel/assets/{index-qcVx0s-M.js → index-BWRsbH6v.js} +1 -1
  93. package/src/assets/web-panel/assets/{index-CEbbycgJ.js → index-B_juAGfN.js} +4 -4
  94. package/src/assets/web-panel/assets/{index-B8gs4g1v.js → index-BiAjZ9Iq.js} +1 -1
  95. package/src/assets/web-panel/assets/{index-DGXVjiyF.js → index-BxIq_rps.js} +1 -1
  96. package/src/assets/web-panel/assets/{index-CSCb-EY9.js → index-By4zsU8r.js} +1 -1
  97. package/src/assets/web-panel/assets/{index-BFV6aAoX.js → index-C6Isxhje.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-1xqIvVM5.js → index-CGudWWwE.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-C3VVwJcn.js → index-CobyvwP0.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-cTFVNgoS.js → index-CqkwXe3s.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-BtCSUUKm.js → index-CuDNPqlD.js} +1 -1
  102. package/src/assets/web-panel/assets/{index-Cw48kkkH.js → index-D-niPBwZ.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-BzzFMBIM.js → index-D1CV-6q1.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-B0KxtBNy.js → index-D1coHqyT.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-CY5X4uXO.js → index-DB1i3Cfr.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-D2BR3WQ-.js → index-DIoinlAY.js} +1 -1
  107. package/src/assets/web-panel/assets/index-DJOgV0SI.js +1 -0
  108. package/src/assets/web-panel/assets/{index-BKEl9Ahm.js → index-DLDHcuz4.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-CqmyLTa_.js → index-DLJnAsec.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-D4XgKgOF.js → index-DMvkBq2d.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-LQYz2tRO.js → index-DRNxWV3i.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-BjPHuhxG.js → index-DTzwBmBS.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-CINVudo7.js → index-DXSXIknb.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-DycrmZ_r.js → index-Da_XUjv2.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-CKRXnUTD.js → index-DfxUN2LB.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-DBpVVgRI.js → index-DnATlZR7.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-D0mFFS7Y.js → index-Dx7XPVkb.js} +1 -1
  118. package/src/assets/web-panel/assets/index-FpewH8xy.js +1 -0
  119. package/src/assets/web-panel/assets/{index-qLyVEtRM.js → index-JTN4jzka.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-CCCX2ZSH.js → index-NppMuZBM.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-DQSweK5-.js → index-OjH2wDtW.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-5nOMJaLt.js → index-aBdRRXWO.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-DXBc_lyR.js → index-nwkYgoRS.js} +1 -1
  124. package/src/assets/web-panel/assets/{index-wVpfPJXE.js → index-tUIluCPu.js} +1 -1
  125. package/src/assets/web-panel/assets/{index-I55BAmVG.js → index-xN0WCVmC.js} +1 -1
  126. package/src/assets/web-panel/assets/{initDefaultProps-CAgx2aHm.js → initDefaultProps-DE_gVS_i.js} +1 -1
  127. package/src/assets/web-panel/assets/{motion-DFuREFOd.js → motion-BiRUGscQ.js} +1 -1
  128. package/src/assets/web-panel/assets/{move-DfcQIXuy.js → move-DMEzVMJZ.js} +1 -1
  129. package/src/assets/web-panel/assets/{omit-BFZV2hmZ.js → omit-DBh74Ui4.js} +1 -1
  130. package/src/assets/web-panel/assets/{pickAttrs-D98WQSur.js → pickAttrs-D6PQbWuo.js} +1 -1
  131. package/src/assets/web-panel/assets/{placementArrow-BlP2AN9q.js → placementArrow-BYkdt9jF.js} +1 -1
  132. package/src/assets/web-panel/assets/{responsiveObserve-DuI2xGQd.js → responsiveObserve-C2ES6P0V.js} +1 -1
  133. package/src/assets/web-panel/assets/{slide-DSvqah_S.js → slide-zGdjevxe.js} +1 -1
  134. package/src/assets/web-panel/assets/{statusUtils-B-96ZLWF.js → statusUtils-Cf6eRpR7.js} +1 -1
  135. package/src/assets/web-panel/assets/{styleChecker-Br0YrCOO.js → styleChecker-DZZx_bHs.js} +1 -1
  136. package/src/assets/web-panel/assets/{useFlexGapSupport-BD4Xr9XU.js → useFlexGapSupport-B6q6zt9X.js} +1 -1
  137. package/src/assets/web-panel/assets/{useFs-Ch5L3BnA.js → useFs-DjaBUk_P.js} +1 -1
  138. package/src/assets/web-panel/assets/{vnode-BQi3uWRC.js → vnode-CDF4X084.js} +1 -1
  139. package/src/assets/web-panel/assets/{zoom-DaW-jbu7.js → zoom-C9FCvBpV.js} +1 -1
  140. package/src/assets/web-panel/index.html +2 -2
  141. package/src/commands/ui.js +21 -3
  142. package/src/gateways/ws/message-dispatcher.js +34 -0
  143. package/src/gateways/ws/personal-data-hub-protocol.js +133 -0
  144. package/src/lib/personal-data-hub-wiring.js +310 -0
  145. package/src/runtime/agent-runtime.js +85 -11
  146. package/src/assets/web-panel/assets/AppLayout-xR6YUHsS.js +0 -3
  147. package/src/assets/web-panel/assets/Compliance-KySNEhMK.js +0 -1
  148. package/src/assets/web-panel/assets/KnowledgeGraph-DrRruyud.js +0 -1
  149. package/src/assets/web-panel/assets/Projects-0OrfK90x.css +0 -1
  150. package/src/assets/web-panel/assets/Projects-CNqXa5XY.js +0 -1
  151. package/src/assets/web-panel/assets/Recommend-Ccgu6elV.js +0 -1
  152. package/src/assets/web-panel/assets/Services-CsfvCqCH.js +0 -2
  153. package/src/assets/web-panel/assets/Terminal-CQZcdArx.js +0 -3
  154. package/src/assets/web-panel/assets/Tokens-CsNJIdNl.js +0 -1
  155. package/src/assets/web-panel/assets/index-B3blziag.js +0 -1
  156. package/src/assets/web-panel/assets/index-D1XYuPHf.js +0 -1
@@ -1 +0,0 @@
1
- import{o as xe,M as y,R as g,P as u,u as x,O as o,c as t,N as a,Q as v,S,K as n,r as f,f as G,L as i,F as H,a1 as je}from"./vendor-M5lGV-wr.js";import{_ as Ce,b as ze,u as Se,d as k}from"./index-CEbbycgJ.js";import{u as Pe}from"./useShellMode-CgR0wCYM.js";import{R as Oe,aq as $e,F as Ie,f as Fe,l as Ue,aE as Ae}from"./icons-NT6gy8Ee.js";const Le={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},Be={class:"page-title"},De={class:"page-sub"},Ne={class:"filter-bar",style:{"margin-bottom":"12px",display:"flex",gap:"12px","align-items":"center"}},Re={key:0,style:{"font-size":"12px",color:"#888"}},Ee={key:0,style:{color:"#888","font-size":"12px"}},Te={key:0},Ve={key:1,style:{color:"#888"}},qe={key:0,style:{color:"#888","font-size":"12px"}},Me={__name:"Projects",setup(We){const{t:X}=ze(),M=Se(),{isEmbedded:Y}=Pe();async function $(l,e,q,w=8e3){if(Y){const C=await M.sendRaw({type:l,...e},w);if(!C?.ok){const m=C?.error;throw new Error(typeof m=="string"?m:m?.message||`${l} failed`)}return C.result}return M.executeJson(q,w)}const j=f(!1),b=f([]),I=f(""),F=f(""),U=f(!1),r=f(null),P=f([]),A=f(!1),L=f(!1),E=f(!1),d=f({name:"",description:"",type:"document",rootPath:""}),Z=[{title:"ID",key:"id",width:110},{title:"名称",key:"name"},{title:"类型",key:"project_type",width:120},{title:"状态",key:"status",width:100},{title:"同步",key:"sync_status",width:100},{title:"更新",key:"updated_at",width:160},{title:"操作",key:"actions",width:180,fixed:"right"}],T=G(()=>{const l={active:0,draft:0,completed:0,archived:0};for(const e of b.value)l[e.status]!==void 0&&(l[e.status]+=1);return l}),h=G(()=>b.value.filter(l=>!(I.value&&l.status!==I.value||F.value&&!l.name.toLowerCase().includes(F.value.toLowerCase()))));function W(l){switch(l){case"active":return"green";case"draft":return"default";case"completed":return"cyan";case"archived":return"gold";default:return"default"}}function J(l){switch(l){case"synced":return"green";case"pending":return"orange";case"conflict":return"red";case"error":return"red";default:return"default"}}function V(l){return!l&&l!==0?"-":new Date(typeof l=="number"?l:parseInt(l,10)).toLocaleString("zh-CN",{hour12:!1})}async function B(){j.value=!0;try{const l=await $("project.list",{limit:500},"project list --limit 500 --json",1e4);b.value=Array.isArray(l?.projects)?l.projects:Array.isArray(l)?l:[]}catch(l){k.error("加载失败: "+(l.message||l)),b.value=[]}finally{j.value=!1}}function ee(l){return{onClick:()=>K(l)}}async function K(l){r.value=l,U.value=!0,A.value=!0,P.value=[];try{const e=await $("project.listFiles",{projectId:l.id,limit:200},`project list-files ${l.id} --json`,8e3);P.value=Array.isArray(e?.files)?e.files:[]}catch{P.value=[]}finally{A.value=!1}}async function te(l){try{(await $("project.delete",{id:l.id},`project delete ${l.id} --json`,8e3))?.ok?(k.success(`已删除项目 '${l.name}'`),U.value=!1,await B()):k.error("删除失败")}catch(e){k.error(e.message||String(e))}}function ae(){d.value={name:"",description:"",type:"document",rootPath:""},L.value=!0}async function le(){if(!d.value.name.trim()){k.warning("请输入项目名称");return}E.value=!0;try{const l=await $("project.init",{name:d.value.name.trim(),description:d.value.description||null,type:d.value.type,rootPath:d.value.rootPath||null},`project init "${d.value.name.trim()}" --type ${d.value.type} --json`,8e3);l?.id?(k.success(`已创建项目 '${l.name}'`),L.value=!1,await B()):k.error("创建失败")}catch(l){k.error(l.message||String(l))}finally{E.value=!1}}return xe(()=>{B()}),(l,e)=>{const q=n("router-link"),w=n("a-button"),C=n("a-space"),m=n("a-statistic"),D=n("a-card"),N=n("a-col"),oe=n("a-row"),O=n("a-radio-button"),ne=n("a-radio-group"),se=n("a-input-search"),ue=n("a-alert"),z=n("a-tag"),re=n("a-popconfirm"),ie=n("a-table"),c=n("a-descriptions-item"),de=n("a-descriptions"),pe=n("a-divider"),ce=n("a-empty"),fe=n("a-list-item"),_e=n("a-list"),ve=n("a-spin"),me=n("a-drawer"),Q=n("a-input"),R=n("a-form-item"),ye=n("a-textarea"),_=n("a-select-option"),ge=n("a-select"),ke=n("a-form"),be=n("a-modal");return i(),y("div",null,[g("div",Le,[g("div",null,[g("h2",Be,u(x(X)("projects.title")),1),g("p",De,[e[10]||(e[10]=o("桌面 / CLI / 手机 三端共享同一份项目数据,Phase 3d sync 自动同步 (",-1)),t(q,{to:"/project-init"},{default:a(()=>[...e[9]||(e[9]=[o("项目初始化 / 环境设置",-1)])]),_:1}),e[11]||(e[11]=o(")",-1))])]),t(C,null,{default:a(()=>[t(w,{loading:j.value,onClick:B},{icon:a(()=>[t(x(Oe))]),default:a(()=>[e[12]||(e[12]=o(" 刷新 ",-1))]),_:1},8,["loading"]),t(w,{type:"primary",onClick:ae},{icon:a(()=>[t(x($e))]),default:a(()=>[e[13]||(e[13]=o(" 新建项目 ",-1))]),_:1})]),_:1})]),t(oe,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:a(()=>[t(N,{xs:12,sm:8,lg:6},{default:a(()=>[t(D,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(m,{title:"总项目",value:b.value.length,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:a(()=>[t(x(Ie))]),_:1},8,["value"])]),_:1})]),_:1}),t(N,{xs:12,sm:8,lg:6},{default:a(()=>[t(D,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(m,{title:"活跃",value:T.value.active,"value-style":{color:"#52c41a",fontSize:"20px"}},{prefix:a(()=>[t(x(Fe))]),_:1},8,["value"])]),_:1})]),_:1}),t(N,{xs:12,sm:8,lg:6},{default:a(()=>[t(D,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(m,{title:"草稿",value:T.value.draft,"value-style":{color:"#8c8c8c",fontSize:"20px"}},{prefix:a(()=>[t(x(Ue))]),_:1},8,["value"])]),_:1})]),_:1}),t(N,{xs:12,sm:8,lg:6},{default:a(()=>[t(D,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(m,{title:"已完成",value:T.value.completed,"value-style":{color:"#13c2c2",fontSize:"20px"}},{prefix:a(()=>[t(x(Ae))]),_:1},8,["value"])]),_:1})]),_:1})]),_:1}),g("div",Ne,[t(ne,{value:I.value,"onUpdate:value":e[0]||(e[0]=s=>I.value=s),size:"small","button-style":"solid"},{default:a(()=>[t(O,{value:""},{default:a(()=>[...e[14]||(e[14]=[o("全部",-1)])]),_:1}),t(O,{value:"active"},{default:a(()=>[...e[15]||(e[15]=[o("活跃",-1)])]),_:1}),t(O,{value:"draft"},{default:a(()=>[...e[16]||(e[16]=[o("草稿",-1)])]),_:1}),t(O,{value:"completed"},{default:a(()=>[...e[17]||(e[17]=[o("已完成",-1)])]),_:1}),t(O,{value:"archived"},{default:a(()=>[...e[18]||(e[18]=[o("已归档",-1)])]),_:1})]),_:1},8,["value"]),t(se,{value:F.value,"onUpdate:value":e[1]||(e[1]=s=>F.value=s),placeholder:"按名称过滤",style:{"max-width":"260px"},"allow-clear":""},null,8,["value"])]),!b.value.length&&!j.value?(i(),v(ue,{key:0,type:"info",message:"还没有项目",description:'运行 `cc project init <name>` 或点击右上角"新建项目"按钮创建。桌面 / CLI / 手机三端共享同一份数据。',"show-icon":"",style:{"margin-bottom":"16px"}})):S("",!0),b.value.length||j.value?(i(),v(ie,{key:1,columns:Z,"data-source":h.value,loading:j.value,pagination:{pageSize:20,showSizeChanger:!0},"row-key":"id","custom-row":ee},{bodyCell:a(({column:s,record:p})=>[s.key==="id"?(i(),y("code",Re,u(p.id.slice(0,8))+"…",1)):s.key==="name"?(i(),y(H,{key:1},[g("strong",null,u(p.name),1),p.description?(i(),y("div",Ee,u(p.description),1)):S("",!0)],64)):s.key==="project_type"?(i(),v(z,{key:2},{default:a(()=>[o(u(p.project_type),1)]),_:2},1024)):s.key==="status"?(i(),v(z,{key:3,color:W(p.status)},{default:a(()=>[o(u(p.status),1)]),_:2},1032,["color"])):s.key==="sync_status"?(i(),v(z,{key:4,color:J(p.sync_status)},{default:a(()=>[o(u(p.sync_status||"unknown"),1)]),_:2},1032,["color"])):s.key==="updated_at"?(i(),y(H,{key:5},[o(u(V(p.updated_at)),1)],64)):s.key==="actions"?(i(),v(C,{key:6,onClick:e[2]||(e[2]=je(()=>{},["stop"]))},{default:a(()=>[t(w,{size:"small",onClick:we=>K(p)},{default:a(()=>[...e[19]||(e[19]=[o("详情",-1)])]),_:1},8,["onClick"]),t(re,{title:`删除项目 '${p.name}' ?`,"ok-text":"删除","ok-type":"danger","cancel-text":"取消",onConfirm:we=>te(p)},{default:a(()=>[t(w,{size:"small",danger:""},{default:a(()=>[...e[20]||(e[20]=[o("删除",-1)])]),_:1})]),_:1},8,["title","onConfirm"])]),_:2},1024)):S("",!0)]),_:1},8,["data-source","loading"])):S("",!0),t(me,{open:U.value,"onUpdate:open":e[3]||(e[3]=s=>U.value=s),title:r.value?.name||"项目详情",width:"640",placement:"right"},{default:a(()=>[r.value?(i(),v(de,{key:0,column:1,bordered:"",size:"small"},{default:a(()=>[t(c,{label:"ID"},{default:a(()=>[g("code",null,u(r.value.id),1)]),_:1}),t(c,{label:"名称"},{default:a(()=>[o(u(r.value.name),1)]),_:1}),t(c,{label:"描述"},{default:a(()=>[o(u(r.value.description||"-"),1)]),_:1}),t(c,{label:"类型"},{default:a(()=>[t(z,null,{default:a(()=>[o(u(r.value.project_type),1)]),_:1})]),_:1}),t(c,{label:"状态"},{default:a(()=>[t(z,{color:W(r.value.status)},{default:a(()=>[o(u(r.value.status),1)]),_:1},8,["color"])]),_:1}),t(c,{label:"同步状态"},{default:a(()=>[t(z,{color:J(r.value.sync_status)},{default:a(()=>[o(u(r.value.sync_status||"unknown"),1)]),_:1},8,["color"])]),_:1}),t(c,{label:"用户"},{default:a(()=>[o(u(r.value.user_id),1)]),_:1}),t(c,{label:"根路径"},{default:a(()=>[r.value.root_path?(i(),y("code",Te,u(r.value.root_path),1)):(i(),y("span",Ve,"(无)"))]),_:1}),t(c,{label:"文件数"},{default:a(()=>[o(u(r.value.file_count||0),1)]),_:1}),t(c,{label:"创建"},{default:a(()=>[o(u(V(r.value.created_at)),1)]),_:1}),t(c,{label:"更新"},{default:a(()=>[o(u(V(r.value.updated_at)),1)]),_:1})]),_:1})):S("",!0),t(pe,null,{default:a(()=>[...e[21]||(e[21]=[o("文件",-1)])]),_:1}),t(ve,{spinning:A.value},{default:a(()=>[!P.value.length&&!A.value?(i(),v(ce,{key:0,description:"无文件 (仅元数据项目)"})):(i(),v(_e,{key:1,size:"small","data-source":P.value},{renderItem:a(({item:s})=>[t(fe,null,{extra:a(()=>[s.file_size?(i(),y("span",qe,u(s.file_size)+" B",1)):S("",!0)]),default:a(()=>[g("span",null,u(s.is_folder?"📁":"📄")+" "+u(s.file_path),1)]),_:2},1024)]),_:1},8,["data-source"]))]),_:1},8,["spinning"])]),_:1},8,["open","title"]),t(be,{open:L.value,"onUpdate:open":e[8]||(e[8]=s=>L.value=s),title:"新建项目","confirm-loading":E.value,"ok-text":"创建","cancel-text":"取消",onOk:le},{default:a(()=>[t(ke,{layout:"vertical"},{default:a(()=>[t(R,{label:"项目名称",required:""},{default:a(()=>[t(Q,{value:d.value.name,"onUpdate:value":e[4]||(e[4]=s=>d.value.name=s),placeholder:"例如:旅行计划-上海"},null,8,["value"])]),_:1}),t(R,{label:"描述"},{default:a(()=>[t(ye,{value:d.value.description,"onUpdate:value":e[5]||(e[5]=s=>d.value.description=s),rows:2},null,8,["value"])]),_:1}),t(R,{label:"类型"},{default:a(()=>[t(ge,{value:d.value.type,"onUpdate:value":e[6]||(e[6]=s=>d.value.type=s)},{default:a(()=>[t(_,{value:"document"},{default:a(()=>[...e[22]||(e[22]=[o("文档 (document)",-1)])]),_:1}),t(_,{value:"data"},{default:a(()=>[...e[23]||(e[23]=[o("数据 (data)",-1)])]),_:1}),t(_,{value:"web"},{default:a(()=>[...e[24]||(e[24]=[o("Web",-1)])]),_:1}),t(_,{value:"app"},{default:a(()=>[...e[25]||(e[25]=[o("应用 (app)",-1)])]),_:1}),t(_,{value:"presentation"},{default:a(()=>[...e[26]||(e[26]=[o("演示文稿",-1)])]),_:1}),t(_,{value:"spreadsheet"},{default:a(()=>[...e[27]||(e[27]=[o("表格",-1)])]),_:1}),t(_,{value:"design"},{default:a(()=>[...e[28]||(e[28]=[o("设计",-1)])]),_:1}),t(_,{value:"code"},{default:a(()=>[...e[29]||(e[29]=[o("代码",-1)])]),_:1}),t(_,{value:"workflow"},{default:a(()=>[...e[30]||(e[30]=[o("工作流",-1)])]),_:1}),t(_,{value:"knowledge"},{default:a(()=>[...e[31]||(e[31]=[o("知识库",-1)])]),_:1})]),_:1},8,["value"])]),_:1}),t(R,{label:"根路径 (可选)"},{default:a(()=>[t(Q,{value:d.value.rootPath,"onUpdate:value":e[7]||(e[7]=s=>d.value.rootPath=s),placeholder:"留空则仅元数据"},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"])])}}},He=Ce(Me,[["__scopeId","data-v-4f26d5df"]]);export{He as default};
@@ -1 +0,0 @@
1
- import{_ as Xe,b as Ze,u as et,E as tt,d as y}from"./index-CEbbycgJ.js";import{s as ot}from"./community-parser-CO25nZFt.js";import{R as nt,aF as at,aO as st,q as rt,ai as ke,a8 as be,aP as lt,aM as it,ay as ct}from"./icons-NT6gy8Ee.js";import{o as dt,M as g,R as x,P as c,u as t,c as a,N as n,K as f,r as C,L as d,O as p,Q as _,S as v,F,Y as q,_ as ut,f as X,a as mt}from"./vendor-M5lGV-wr.js";function P(s){const e=ot(s);if(!e)return null;try{return JSON.parse(e)}catch{}const i=e.match(/\{[\s\S]*\}|\[[\s\S]*\]/);if(!i)return null;try{return JSON.parse(i[0])}catch{return null}}const xe=Object.freeze(["note","post","article","document"]),pt=Object.freeze(["pending","viewed","dismissed"]);function S(s,e=0){return typeof s=="number"&&Number.isFinite(s)?s:e}function he(s){if(!s||typeof s!="object"||Array.isArray(s))return{};const e={};for(const[i,h]of Object.entries(s))typeof h=="number"&&Number.isFinite(h)&&(e[i]=h);return e}function ft(s,e=0){if(!s||typeof s!="object")return null;const i=s.user_id??s.userId??"";if(!i)return null;const h=s.topics&&typeof s.topics=="object"&&!Array.isArray(s.topics)?he(s.topics):{},I=s.interaction_weights??s.interactionWeights,N=I&&typeof I=="object"&&!Array.isArray(I)?he(I):{};return{key:i,id:String(s.id||""),userId:i,topics:h,topicCount:Object.keys(h).length,interactionWeights:N,decayFactor:S(s.decay_factor??s.decayFactor,.9),lastUpdated:s.last_updated??s.lastUpdated??null,updateCount:S(s.update_count??s.updateCount,0),_idx:e}}function yt(s){const e=P(s);return Array.isArray(e)?e.map(ft).filter(Boolean):[]}function gt(s,e=0){if(!s||typeof s!="object")return null;const i=s.id||"";return i?{key:i,id:i,userId:s.user_id??s.userId??"",contentId:s.content_id??s.contentId??"",contentType:String(s.content_type??s.contentType??"note").toLowerCase(),title:String(s.title||""),score:S(s.score,0),reason:String(s.reason||""),source:String(s.source||"heuristic"),status:String(s.status||"pending").toLowerCase(),feedback:s.feedback??null,createdAt:s.created_at??s.createdAt??null,viewedAt:s.viewed_at??s.viewedAt??null,_idx:e}:null}function _t(s){const e=P(s);return Array.isArray(e)?e.map(gt).filter(Boolean):[]}const vt={total:0,pending:0,viewed:0,dismissed:0,feedbackCount:0,feedbackRate:0,avgScore:0};function kt(s){const e={...vt},i=P(s);return!i||typeof i!="object"||Array.isArray(i)||(e.total=S(i.total,0),e.pending=S(i.pending,0),e.viewed=S(i.viewed,0),e.dismissed=S(i.dismissed,0),e.feedbackCount=S(i.feedbackCount,0),e.feedbackRate=S(i.feedbackRate,0),e.avgScore=S(i.avgScore,0)),e}function bt(s){const e=P(s);return Array.isArray(e)?e.filter(i=>i&&typeof i=="object"&&typeof i.topic=="string").map((i,h)=>({key:`${i.topic}-${h}`,topic:i.topic,weight:S(i.weight,0)})):[]}function xt(s){const e=P(s);return Array.isArray(e)?e.filter(i=>i&&typeof i=="object"&&typeof i.topic=="string"&&typeof i.action=="string").map((i,h)=>({key:`${i.topic}-${h}`,topic:i.topic,action:i.action,amount:S(i.amount,0)})):[]}function J(s){const e=P(s);return!e||typeof e!="object"||Array.isArray(e)?{ok:!1,reason:"",profileId:null,topicCount:null}:{ok:!!(e.updated||e.deleted||e.marked||e.dismissed||e.recorded||e.applied||e.profileId),reason:e.reason?String(e.reason):"",profileId:e.profileId?String(e.profileId):null,topicCount:typeof e.topicCount=="number"?e.topicCount:null}}function Ce(s){if(s==null||s==="")return"—";const e=typeof s=="number"?new Date(s):new Date(String(s));return isNaN(e.getTime())?String(s):e.toLocaleString("zh-CN",{hour12:!1})}const ht={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},Ct={class:"page-title"},wt={class:"page-sub"},St={style:{display:"flex","align-items":"center",gap:"12px","flex-wrap":"wrap"}},It={style:{color:"var(--text-secondary)","font-size":"12px"}},zt={class:"type-name"},Ft={class:"filter-bar"},At={style:{color:"var(--text-primary)","font-weight":"500"}},Ot={style:{color:"var(--text-muted)","font-size":"11px","margin-top":"2px"}},Tt={key:3,style:{color:"var(--text-secondary)","font-size":"12px"}},Rt={key:1,style:{color:"var(--text-muted)"}},Ut={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},$t={key:0,style:{color:"var(--text-primary)","font-family":"monospace","font-weight":"500"}},jt={key:2,style:{color:"var(--text-secondary)","font-family":"monospace","font-size":"12px"}},Jt={key:3,style:{color:"var(--text-secondary)"}},Pt={key:4,style:{color:"var(--text-secondary)","font-size":"11px"}},Nt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},Et={key:1},Mt={class:"interest-topic"},Lt={style:{"margin-left":"8px","font-family":"monospace",color:"var(--text-primary)"}},Dt={style:{"margin-left":"auto",color:"var(--text-secondary)","font-size":"12px"}},Bt={key:0,style:{"padding-top":"8px"}},Wt={style:{"font-family":"monospace","font-size":"12px"}},Vt={style:{color:"var(--text-primary)","font-size":"13px",margin:"16px 0 8px"}},Kt={key:1},qt={class:"interest-topic"},Yt={key:2,style:{color:"var(--text-primary)","font-size":"13px",margin:"16px 0 8px"}},Gt={key:3,class:"weights-pre"},Qt={__name:"Recommend",setup(s){const{t:e}=Ze(),i=et(),h=tt.PRESENTED_IMAGE_SIMPLE,I=C(!1),N=C(!1),Z=C(!1),E=C([]),ee=C([]),A=C({total:0,pending:0,viewed:0,dismissed:0,feedbackCount:0,feedbackRate:0,avgScore:0}),Y=C([]),U=C([]),k=C(null),G=C("recs"),M=C(""),L=C(""),Q=C(!1),te=C(!1),b=mt({userId:"",topicsJson:"",weightsJson:""}),w=C(null),we=X(()=>E.value.map(o=>({value:o.userId,label:`${o.userId} (${e("recommend.userBar.topicSuffix",{count:o.topicCount})})`}))),Se=X(()=>[{title:e("recommend.recColumns.title"),key:"title"},{title:e("recommend.recColumns.contentType"),key:"contentType",width:"110px"},{title:e("recommend.recColumns.score"),key:"score",width:"180px"},{title:e("recommend.recColumns.reason"),key:"reason",width:"220px"},{title:e("recommend.recColumns.status"),key:"status",width:"100px"},{title:e("recommend.recColumns.feedback"),key:"feedback",width:"90px"},{title:e("recommend.recColumns.action"),key:"action",width:"210px"}]),Ie=X(()=>[{title:e("recommend.profileColumns.userId"),key:"userId"},{title:e("recommend.profileColumns.topicCount"),key:"topicCount",width:"110px"},{title:e("recommend.profileColumns.decayFactor"),key:"decayFactor",width:"110px"},{title:e("recommend.profileColumns.updateCount"),key:"updateCount",width:"110px"},{title:e("recommend.profileColumns.lastUpdated"),key:"lastUpdated",width:"180px"},{title:e("recommend.profileColumns.action"),key:"action",width:"200px"}]),ze=X(()=>{let o=ee.value;return M.value&&(o=o.filter(l=>l.status===M.value)),L.value&&(o=o.filter(l=>l.contentType===L.value)),o});function le(o){const l=`recommend.type.${o}`,u=e(l);return u===l?o:u}function ie(o){return{note:"blue",post:"green",article:"purple",document:"orange"}[o]||"default"}function Fe(o){return{note:"#1677ff",post:"#52c41a",article:"#722ed1",document:"#fa8c16"}[o]||"#888"}function ce(o){const l=`recommend.status.${o}`,u=e(l);return u===l?o:u}function Ae(o){return{pending:"processing",viewed:"green",dismissed:"default"}[o]||"default"}function Oe(o){const l=`recommend.feedbackLabel.${o}`,u=e(l);return u===l?o:u}function Te(o){return{like:"green",dislike:"red",later:"gold"}[o]||"default"}function de(o){return o>=.7?"#52c41a":o>=.4?"#1677ff":o>=.2?"#faad14":"#ff4d4f"}function ue(o){return o>=.7?"#52c41a":o>=.4?"#1677ff":o>=.2?"#faad14":"#888"}function Re(o){try{return JSON.stringify(o,null,2)}catch{return String(o)}}async function D(){I.value=!0;try{const{output:o}=await i.execute("recommend profiles --json",1e4).catch(()=>({output:""}));E.value=yt(o),k.value&&!E.value.find(l=>l.userId===k.value)&&(k.value=null),k.value&&await R()}catch(o){y.error(e("recommend.messages.loadProfilesFailed",{err:o?.message||o}))}finally{I.value=!1}}async function R(){if(!k.value){ee.value=[],A.value={total:0,pending:0,viewed:0,dismissed:0,feedbackCount:0,feedbackRate:0,avgScore:0},Y.value=[];return}N.value=!0;try{const o=B(k.value),[l,u,O]=await Promise.all([i.execute(`recommend list ${o} --limit 200 --json`,1e4).catch(()=>({output:""})),i.execute(`recommend stats ${o} --json`,8e3).catch(()=>({output:""})),i.execute(`recommend top-interests ${o} --limit 30 --json`,8e3).catch(()=>({output:""}))]);ee.value=_t(l.output),A.value=kt(u.output),Y.value=bt(O.output)}catch(o){y.error(e("recommend.messages.loadUserFailed",{err:o?.message||o}))}finally{N.value=!1}}function B(o){return`"${String(o).replace(/"/g,'\\"')}"`}function Ue(){U.value=[],R()}function $e(o){k.value=o,G.value="recs",R()}async function je(){if(!b.userId.trim()){y.warning(e("recommend.messages.userIdRequired"));return}if(b.topicsJson.trim())try{JSON.parse(b.topicsJson)}catch{y.warning(e("recommend.messages.topicsJsonInvalid"));return}if(b.weightsJson.trim())try{JSON.parse(b.weightsJson)}catch{y.warning(e("recommend.messages.weightsJsonInvalid"));return}Z.value=!0;try{const o=[`recommend create-profile ${B(b.userId.trim())}`];b.topicsJson.trim()&&o.push(`-t ${me(b.topicsJson.trim())}`),b.weightsJson.trim()&&o.push(`-w ${me(b.weightsJson.trim())}`),o.push("--json");const{output:l}=await i.execute(o.join(" "),1e4),u=J(l);if(!u.ok){y.error(e("recommend.messages.createFailed",{err:u.reason||l.slice(0,120)}));return}y.success(e("recommend.messages.createOk",{id:u.profileId?.slice(0,8)||""})),Q.value=!1;const O=b.userId.trim();pe(),await D(),k.value=O,await R()}catch(o){y.error(e("recommend.messages.createFailed",{err:o?.message||o}))}finally{Z.value=!1}}function me(o){return`'${String(o).replace(/'/g,"'\\''")}'`}async function Je(){if(k.value)try{const{output:o}=await i.execute(`recommend decay ${B(k.value)} --json`,8e3),l=J(o);if(!l.ok){y.error(e("recommend.messages.decayFailed",{err:l.reason||o.slice(0,120)}));return}y.success(l.topicCount!==null?e("recommend.messages.decayOkTopics",{count:l.topicCount}):e("recommend.messages.decayOk")),await D()}catch(o){y.error(e("recommend.messages.decayFailed",{err:o?.message||o}))}}async function Pe(){if(k.value)try{const{output:o}=await i.execute(`recommend suggest ${B(k.value)} --json`,8e3);U.value=xt(o),G.value="interests",U.value.length?y.success(e("recommend.messages.suggestFound",{count:U.value.length})):y.info(e("recommend.messages.suggestNone"))}catch(o){y.error(e("recommend.messages.loadSuggestFailed",{err:o?.message||o}))}}async function Ne(o){try{const{output:l}=await i.execute(`recommend delete-profile ${B(o.userId)} --json`,8e3),u=J(l);if(!u.ok){y.error(e("recommend.messages.deleteFailed",{err:u.reason||l.slice(0,120)}));return}y.success(e("recommend.messages.deleteOk")),k.value===o.userId&&(k.value=null),await D()}catch(l){y.error(e("recommend.messages.deleteFailed",{err:l?.message||l}))}}function Ee(o){w.value=o,te.value=!0}async function Me(o){try{const{output:l}=await i.execute(`recommend view ${o.id} --json`,8e3),u=J(l);if(!u.ok){y.error(e("recommend.messages.viewFailed",{err:u.reason||l.slice(0,120)}));return}y.success(e("recommend.messages.viewOk")),await R()}catch(l){y.error(e("recommend.messages.viewFailed",{err:l?.message||l}))}}async function Le(o,l){try{const{output:u}=await i.execute(`recommend feedback ${o.id} ${l} --json`,8e3),O=J(u);if(!O.ok){y.error(e("recommend.messages.feedbackFailed",{err:O.reason||u.slice(0,120)}));return}y.success(e("recommend.messages.feedbackOk")),await R()}catch(u){y.error(e("recommend.messages.feedbackFailed",{err:u?.message||u}))}}async function De(o){try{const{output:l}=await i.execute(`recommend dismiss ${o.id} --json`,8e3),u=J(l);if(!u.ok){y.error(e("recommend.messages.dismissFailed",{err:u.reason||l.slice(0,120)}));return}y.success(e("recommend.messages.dismissOk")),await R()}catch(l){y.error(e("recommend.messages.dismissFailed",{err:l?.message||l}))}}function pe(){b.userId="",b.topicsJson="",b.weightsJson=""}return dt(D),(o,l)=>{const u=f("a-button"),O=f("a-space"),Be=f("a-select"),z=f("a-card"),W=f("a-statistic"),T=f("a-col"),oe=f("a-row"),$=f("a-tag"),H=f("a-radio-button"),fe=f("a-radio-group"),V=f("a-empty"),ne=f("a-progress"),ae=f("a-menu-item"),We=f("a-menu"),Ve=f("a-dropdown"),ye=f("a-popconfirm"),ge=f("a-table"),se=f("a-tab-pane"),Ke=f("a-list-item"),qe=f("a-list"),Ye=f("a-tabs"),Ge=f("a-input"),re=f("a-form-item"),_e=f("a-textarea"),Qe=f("a-form"),ve=f("a-modal"),K=f("a-descriptions-item"),He=f("a-descriptions");return d(),g("div",null,[x("div",ht,[x("div",null,[x("h2",Ct,c(t(e)("recommend.title")),1),x("p",wt,c(t(e)("recommend.subtitle")),1)]),a(O,null,{default:n(()=>[a(u,{loading:I.value,onClick:D},{icon:n(()=>[a(t(nt))]),default:n(()=>[p(" "+c(t(e)("recommend.refresh")),1)]),_:1},8,["loading"]),a(u,{type:"primary",onClick:l[0]||(l[0]=r=>Q.value=!0)},{icon:n(()=>[a(t(at))]),default:n(()=>[p(" "+c(t(e)("recommend.createProfile")),1)]),_:1})]),_:1})]),a(z,{size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"},"body-style":{padding:"10px 16px"}},{default:n(()=>[x("div",St,[x("span",It,c(t(e)("recommend.userBar.currentUser")),1),a(Be,{value:k.value,"onUpdate:value":l[1]||(l[1]=r=>k.value=r),options:we.value,placeholder:t(e)("recommend.userBar.selectPlaceholder"),style:{"min-width":"280px"},"allow-clear":"","show-search":"",onChange:Ue},null,8,["value","options","placeholder"]),k.value?(d(),_(u,{key:0,size:"small",onClick:Je},{icon:n(()=>[a(t(st))]),default:n(()=>[p(" "+c(t(e)("recommend.userBar.applyDecay")),1)]),_:1})):v("",!0),k.value?(d(),_(u,{key:1,size:"small",onClick:Pe},{icon:n(()=>[a(t(rt))]),default:n(()=>[p(" "+c(t(e)("recommend.userBar.suggest")),1)]),_:1})):v("",!0)])]),_:1}),a(oe,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:n(()=>[a(T,{xs:12,sm:8,lg:5},{default:n(()=>[a(z,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[a(W,{title:t(e)("recommend.stats.profiles"),value:E.value.length,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:n(()=>[a(t(ke))]),_:1},8,["title","value"])]),_:1})]),_:1}),a(T,{xs:12,sm:8,lg:5},{default:n(()=>[a(z,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[a(W,{title:t(e)("recommend.stats.totalRecs"),value:A.value.total,"value-style":{color:"#722ed1",fontSize:"20px"}},{prefix:n(()=>[a(t(be))]),_:1},8,["title","value"])]),_:1})]),_:1}),a(T,{xs:12,sm:8,lg:5},{default:n(()=>[a(z,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[a(W,{title:t(e)("recommend.stats.pending"),value:A.value.pending,"value-style":{color:A.value.pending>0?"#faad14":"#888",fontSize:"20px"}},{prefix:n(()=>[a(t(lt))]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),a(T,{xs:12,sm:8,lg:5},{default:n(()=>[a(z,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[a(W,{title:t(e)("recommend.stats.feedbackRate"),value:A.value.feedbackRate*100,suffix:"%",precision:1,"value-style":{color:"#13c2c2",fontSize:"20px"}},{prefix:n(()=>[a(t(it))]),_:1},8,["title","value"])]),_:1})]),_:1}),a(T,{xs:24,sm:8,lg:4},{default:n(()=>[a(z,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[a(W,{title:t(e)("recommend.stats.avgScore"),value:A.value.avgScore,precision:3,"value-style":{color:de(A.value.avgScore),fontSize:"20px"}},{prefix:n(()=>[a(t(ct))]),_:1},8,["title","value","value-style"])]),_:1})]),_:1})]),_:1}),a(z,{title:t(e)("recommend.typeCatalogue"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"},"body-style":{padding:"12px 16px"}},{default:n(()=>[a(oe,{gutter:[12,12]},{default:n(()=>[(d(!0),g(F,null,q(t(xe),r=>(d(),_(T,{key:r,xs:12,sm:6},{default:n(()=>[x("div",{class:"type-pill",style:ut({borderLeftColor:Fe(r)})},[a($,{color:ie(r),style:{"font-family":"monospace"}},{default:n(()=>[p(c(r),1)]),_:2},1032,["color"]),x("div",zt,c(le(r)),1)],4)]),_:2},1024))),128))]),_:1})]),_:1},8,["title"]),a(Ye,{activeKey:G.value,"onUpdate:activeKey":l[4]||(l[4]=r=>G.value=r),class:"recommend-tabs"},{default:n(()=>[a(se,{key:"recs",tab:t(e)("recommend.tabs.recs")},{default:n(()=>[x("div",Ft,[a(fe,{value:M.value,"onUpdate:value":l[2]||(l[2]=r=>M.value=r),size:"small","button-style":"solid"},{default:n(()=>[a(H,{value:""},{default:n(()=>[p(c(t(e)("recommend.filter.allStatuses")),1)]),_:1}),(d(!0),g(F,null,q(t(pt),r=>(d(),_(H,{key:r,value:r},{default:n(()=>[p(c(ce(r)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),a(fe,{value:L.value,"onUpdate:value":l[3]||(l[3]=r=>L.value=r),size:"small"},{default:n(()=>[a(H,{value:""},{default:n(()=>[p(c(t(e)("recommend.filter.allTypes")),1)]),_:1}),(d(!0),g(F,null,q(t(xe),r=>(d(),_(H,{key:r,value:r},{default:n(()=>[p(c(le(r)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),k.value?(d(),_(ge,{key:1,columns:Se.value,"data-source":ze.value,pagination:{pageSize:20,showTotal:r=>t(e)("recommend.totals.rows",{count:r})},size:"small",loading:N.value,style:{background:"var(--bg-card)"}},{bodyCell:n(({column:r,record:m})=>[r.key==="title"?(d(),g(F,{key:0},[x("span",At,c(m.title||t(e)("recommend.noTitle")),1),x("div",Ot,c(m.contentId),1)],64)):v("",!0),r.key==="contentType"?(d(),_($,{key:1,color:ie(m.contentType),style:{"font-family":"monospace"}},{default:n(()=>[p(c(m.contentType),1)]),_:2},1032,["color"])):v("",!0),r.key==="score"?(d(),_(ne,{key:2,percent:Math.round(m.score*100),"stroke-color":de(m.score),size:"small",format:()=>m.score.toFixed(3)},null,8,["percent","stroke-color","format"])):v("",!0),r.key==="reason"?(d(),g("span",Tt,c(m.reason),1)):v("",!0),r.key==="status"?(d(),_($,{key:4,color:Ae(m.status)},{default:n(()=>[p(c(ce(m.status)),1)]),_:2},1032,["color"])):v("",!0),r.key==="feedback"?(d(),g(F,{key:5},[m.feedback?(d(),_($,{key:0,color:Te(m.feedback)},{default:n(()=>[p(c(Oe(m.feedback)),1)]),_:2},1032,["color"])):(d(),g("span",Rt,"—"))],64)):v("",!0),r.key==="action"?(d(),g(F,{key:6},[m.status==="pending"?(d(),_(u,{key:0,size:"small",type:"link",onClick:j=>Me(m)},{default:n(()=>[p(c(t(e)("recommend.rowActions.view")),1)]),_:1},8,["onClick"])):v("",!0),m.status!=="dismissed"?(d(),_(Ve,{key:1},{overlay:n(()=>[a(We,{onClick:({key:j})=>Le(m,j)},{default:n(()=>[a(ae,{key:"like",style:{color:"#52c41a"}},{default:n(()=>[p(c(t(e)("recommend.feedbackMenu.like")),1)]),_:1}),a(ae,{key:"dislike",style:{color:"#ff4d4f"}},{default:n(()=>[p(c(t(e)("recommend.feedbackMenu.dislike")),1)]),_:1}),a(ae,{key:"later"},{default:n(()=>[p(c(t(e)("recommend.feedbackMenu.later")),1)]),_:1})]),_:1},8,["onClick"])]),default:n(()=>[a(u,{size:"small",type:"link"},{default:n(()=>[p(c(t(e)("recommend.feedbackDropdown")),1)]),_:1})]),_:2},1024)):v("",!0),m.status!=="dismissed"?(d(),_(ye,{key:2,title:t(e)("recommend.rowActions.dismissConfirmTitle"),"ok-text":t(e)("recommend.rowActions.dismissOk"),"cancel-text":t(e)("common.cancel"),onConfirm:j=>De(m)},{default:n(()=>[a(u,{size:"small",type:"link",danger:""},{default:n(()=>[p(c(t(e)("recommend.rowActions.dismiss")),1)]),_:1})]),_:1},8,["title","ok-text","cancel-text","onConfirm"])):v("",!0)],64)):v("",!0)]),emptyText:n(()=>[x("div",Ut,[a(t(be),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),p(" "+c(M.value||L.value?t(e)("recommend.empty.filtered"):t(e)("recommend.empty.noRecsHint")),1)])]),_:1},8,["columns","data-source","pagination","loading"])):(d(),_(V,{key:0,description:t(e)("recommend.empty.selectUser"),image:t(h),style:{padding:"40px 0"}},null,8,["description","image"]))]),_:1},8,["tab"]),a(se,{key:"profiles",tab:t(e)("recommend.tabs.profiles")},{default:n(()=>[a(ge,{columns:Ie.value,"data-source":E.value,pagination:{pageSize:20,showTotal:r=>t(e)("recommend.totals.profiles",{count:r})},size:"small",loading:I.value,style:{background:"var(--bg-card)"}},{bodyCell:n(({column:r,record:m})=>[r.key==="userId"?(d(),g("span",$t,c(m.userId),1)):v("",!0),r.key==="topicCount"?(d(),_($,{key:1,color:"blue"},{default:n(()=>[p(c(t(e)("recommend.topicTagSuffix",{count:m.topicCount})),1)]),_:2},1024)):v("",!0),r.key==="decayFactor"?(d(),g("span",jt,c(m.decayFactor.toFixed(2)),1)):v("",!0),r.key==="updateCount"?(d(),g("span",Jt,c(m.updateCount),1)):v("",!0),r.key==="lastUpdated"?(d(),g("span",Pt,c(t(Ce)(m.lastUpdated)),1)):v("",!0),r.key==="action"?(d(),g(F,{key:5},[a(u,{size:"small",type:"link",onClick:j=>Ee(m)},{default:n(()=>[p(c(t(e)("recommend.rowActions.details")),1)]),_:1},8,["onClick"]),a(u,{size:"small",type:"link",onClick:j=>$e(m.userId)},{default:n(()=>[p(c(t(e)("recommend.rowActions.switch")),1)]),_:1},8,["onClick"]),a(ye,{title:t(e)("recommend.rowActions.deleteConfirmTitle"),"ok-text":t(e)("recommend.rowActions.deleteOk"),"cancel-text":t(e)("common.cancel"),onConfirm:j=>Ne(m)},{default:n(()=>[a(u,{size:"small",type:"link",danger:""},{default:n(()=>[p(c(t(e)("recommend.rowActions.delete")),1)]),_:1})]),_:1},8,["title","ok-text","cancel-text","onConfirm"])],64)):v("",!0)]),emptyText:n(()=>[x("div",Nt,[a(t(ke),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),p(" "+c(t(e)("recommend.empty.noProfiles")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),a(se,{key:"interests",tab:t(e)("recommend.tabs.interests")},{default:n(()=>[k.value?(d(),_(oe,{key:1,gutter:[16,16]},{default:n(()=>[a(T,{xs:24,lg:14},{default:n(()=>[a(z,{title:t(e)("recommend.interest.topicWeights"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[Y.value.length?(d(),g("div",Et,[(d(!0),g(F,null,q(Y.value,r=>(d(),g("div",{key:r.key,class:"interest-row"},[x("span",Mt,c(r.topic),1),a(ne,{percent:Math.round(r.weight*100),"stroke-color":ue(r.weight),format:()=>r.weight.toFixed(3),size:"small",style:{flex:"1","margin-left":"12px"}},null,8,["percent","stroke-color","format"])]))),128))])):(d(),_(V,{key:0,description:t(e)("recommend.empty.noInterests"),image:t(h)},null,8,["description","image"]))]),_:1},8,["title"])]),_:1}),a(T,{xs:24,lg:10},{default:n(()=>[a(z,{title:t(e)("recommend.interest.feedbackSuggest"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[U.value.length?(d(),_(qe,{key:1,size:"small","data-source":U.value},{renderItem:n(({item:r})=>[a(Ke,null,{default:n(()=>[a($,{color:r.action==="boost"?"green":"orange"},{default:n(()=>[p(c(r.action==="boost"?t(e)("recommend.interest.boost"):t(e)("recommend.interest.lower")),1)]),_:2},1032,["color"]),x("span",Lt,c(r.topic),1),x("span",Dt,"±"+c(r.amount),1)]),_:2},1024)]),_:1},8,["data-source"])):(d(),_(V,{key:0,description:t(e)("recommend.empty.noSuggestions"),image:t(h)},null,8,["description","image"]))]),_:1},8,["title"])]),_:1})]),_:1})):(d(),_(V,{key:0,description:t(e)("recommend.empty.selectUser"),image:t(h),style:{padding:"40px 0"}},null,8,["description","image"]))]),_:1},8,["tab"])]),_:1},8,["activeKey"]),a(ve,{open:Q.value,"onUpdate:open":l[8]||(l[8]=r=>Q.value=r),title:t(e)("recommend.create.title"),"confirm-loading":Z.value,width:560,"ok-text":t(e)("recommend.create.ok"),"cancel-text":t(e)("common.cancel"),onOk:je,onCancel:pe},{default:n(()=>[a(Qe,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:n(()=>[a(re,{label:t(e)("recommend.create.userIdLabel"),required:""},{default:n(()=>[a(Ge,{value:b.userId,"onUpdate:value":l[5]||(l[5]=r=>b.userId=r),placeholder:t(e)("recommend.create.userIdPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),a(re,{label:t(e)("recommend.create.topicsLabel")},{default:n(()=>[a(_e,{value:b.topicsJson,"onUpdate:value":l[6]||(l[6]=r=>b.topicsJson=r),placeholder:t(e)("recommend.create.topicsPlaceholder"),"auto-size":{minRows:2,maxRows:5}},null,8,["value","placeholder"])]),_:1},8,["label"]),a(re,{label:t(e)("recommend.create.weightsLabel")},{default:n(()=>[a(_e,{value:b.weightsJson,"onUpdate:value":l[7]||(l[7]=r=>b.weightsJson=r),placeholder:t(e)("recommend.create.weightsPlaceholder"),"auto-size":{minRows:2,maxRows:5}},null,8,["value","placeholder"])]),_:1},8,["label"])]),_:1})]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),a(ve,{open:te.value,"onUpdate:open":l[9]||(l[9]=r=>te.value=r),title:t(e)("recommend.details.title",{userId:w.value?.userId||""}),width:680,footer:null},{default:n(()=>[w.value?(d(),g("div",Bt,[a(He,{column:2,size:"small",bordered:""},{default:n(()=>[a(K,{label:t(e)("recommend.details.id"),span:2},{default:n(()=>[x("span",Wt,c(w.value.id),1)]),_:1},8,["label"]),a(K,{label:t(e)("recommend.details.topicCount")},{default:n(()=>[p(c(w.value.topicCount),1)]),_:1},8,["label"]),a(K,{label:t(e)("recommend.details.decayFactor")},{default:n(()=>[p(c(w.value.decayFactor.toFixed(2)),1)]),_:1},8,["label"]),a(K,{label:t(e)("recommend.details.updateCount")},{default:n(()=>[p(c(w.value.updateCount),1)]),_:1},8,["label"]),a(K,{label:t(e)("recommend.details.lastUpdated")},{default:n(()=>[p(c(t(Ce)(w.value.lastUpdated)),1)]),_:1},8,["label"])]),_:1}),x("h4",Vt,c(t(e)("recommend.details.topicWeights")),1),Object.keys(w.value.topics).length?(d(),g("div",Kt,[(d(!0),g(F,null,q(w.value.topics,(r,m)=>(d(),g("div",{key:m,class:"interest-row"},[x("span",qt,c(m),1),a(ne,{percent:Math.round(r*100),"stroke-color":ue(r),format:()=>r.toFixed(3),size:"small",style:{flex:"1","margin-left":"12px"}},null,8,["percent","stroke-color","format"])]))),128))])):(d(),_(V,{key:0,description:t(e)("recommend.empty.noTopics"),image:t(h)},null,8,["description","image"])),Object.keys(w.value.interactionWeights).length?(d(),g("h4",Yt,c(t(e)("recommend.details.interactionWeights")),1)):v("",!0),Object.keys(w.value.interactionWeights).length?(d(),g("pre",Gt,c(Re(w.value.interactionWeights)),1)):v("",!0)])):v("",!0)]),_:1},8,["open","title"])])}}},to=Xe(Qt,[["__scopeId","data-v-16fcadc2"]]);export{to as default};
@@ -1,2 +0,0 @@
1
- import{_ as K,u as Q}from"./index-CEbbycgJ.js";import{R as q,V as J,n as V,ab as U,f as X,ap as Y,l as Z}from"./icons-NT6gy8Ee.js";import{o as ee,M as d,R as m,c as e,N as t,r,K as n,L as s,O as y,u as c,P as u,S as g,Q as $,f as te}from"./vendor-M5lGV-wr.js";const oe={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},ae={key:0,style:{"margin-top":"6px",color:"var(--text-muted)","font-size":"11px"}},re={style:{"margin-top":"6px",color:"var(--text-muted)","font-size":"11px"}},le={key:0,style:{"margin-top":"6px",color:"var(--text-muted)","font-size":"11px",overflow:"hidden","text-overflow":"ellipsis","white-space":"nowrap"}},se={key:0,style:{"margin-top":"6px",color:"var(--text-muted)","font-size":"11px"}},ne={key:0,style:{"text-align":"center",padding:"30px"}},ce={key:1,style:{"font-family":"monospace",color:"#ccc"}},ie={key:0,style:{color:"var(--text-secondary)","font-size":"13px",padding:"8px 0"}},de={key:1,style:{color:"var(--text-muted)","font-size":"13px",padding:"8px 0"}},ue={key:0,style:{"margin-top":"16px"}},ve={style:{background:"var(--bg-base)",border:"1px solid var(--border-color)","border-radius":"6px",padding:"12px",color:"#aaa","font-size":"12px","max-height":"300px","overflow-y":"auto","white-space":"pre-wrap"}},pe={__name:"Services",setup(fe){const S=Q(),N=window.__CC_CONFIG__||{},x=r(!1),C=r(!1),b=r(""),W=r(""),z=r(!1),L=r(""),k=r(""),D=r(""),M=r(!1),h=r(""),w=r(""),B=r([]),R=te(()=>S.status==="connected"),E=[{title:"服务",dataIndex:"name",key:"name"},{title:"端口",dataIndex:"port",key:"port"},{title:"状态",key:"status"}];async function I(){x.value=!0;try{const{output:o}=await S.execute("status",15e3);W.value=o,F(o)}catch(o){console.error("status failed:",o)}finally{x.value=!1}}function F(o){z.value=o.includes("Desktop app running")||o.includes("Running");const a=o.match(/Edition:\s+(\S+)/i);a&&(L.value=a[1]);const v=o.match(/LLM:\s+(\S+)\s+\(([^)]+)\)/i);if(v)k.value=v[1],D.value=v[2];else{const l=o.match(/LLM:\s+(\S+)/i);l&&(k.value=l[1])}M.value=o.includes("Setup completed");const p=o.match(/Setup completed \(([^)]+)\)/i);if(p)try{h.value=new Date(p[1]).toLocaleDateString("zh-CN")}catch{h.value=""}o.includes("docker-compose.yml not found")?w.value="未找到 docker-compose.yml":o.includes("Docker Services")&&(w.value="已检测到 Docker 配置");const i=o.split(`
2
- `).filter(l=>l.match(/[○●]\s+\w+:\s+\d+/));B.value=i.map(l=>{const f=l.match(/([○●])\s+(\w+):\s+(\d+)/);return f?{key:f[2],name:f[2],port:parseInt(f[3]),active:f[1]==="●"}:null}).filter(Boolean)}async function P(){C.value=!0,b.value="";try{const{output:o}=await S.execute("doctor",3e4);b.value=o}catch(o){b.value=`诊断失败: ${o.message}`}finally{C.value=!1}}return ee(I),(o,a)=>{const v=n("a-button"),p=n("a-statistic"),i=n("a-card"),l=n("a-col"),f=n("a-row"),T=n("a-tag"),j=n("a-spin"),A=n("a-badge"),G=n("a-table"),H=n("a-space");return s(),d("div",null,[m("div",oe,[a[3]||(a[3]=m("div",null,[m("h2",{class:"page-title"},"服务管理"),m("p",{class:"page-sub"},"ChainlessChain 运行状态与服务控制")],-1)),e(v,{type:"primary",ghost:"",loading:x.value,onClick:I},{icon:t(()=>[e(c(q))]),default:t(()=>[a[2]||(a[2]=y(" 刷新 ",-1))]),_:1},8,["loading"])]),e(f,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:t(()=>[e(l,{xs:24,sm:12,lg:6},{default:t(()=>[e(i,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[e(p,{title:"应用状态",value:z.value?"运行中":"未运行","value-style":{color:z.value?"#52c41a":"#888",fontSize:"16px"}},{prefix:t(()=>[e(c(J))]),_:1},8,["value","value-style"]),L.value?(s(),d("div",ae,"版本: "+u(L.value),1)):g("",!0)]),_:1})]),_:1}),e(l,{xs:24,sm:12,lg:6},{default:t(()=>[e(i,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[e(p,{title:"WebSocket 服务",value:"运行中","value-style":{color:"#52c41a",fontSize:"16px"}},{prefix:t(()=>[e(c(V))]),_:1}),m("div",re," 端口: "+u(c(N).wsPort||18800)+" · "+u(c(N).wsHost||"127.0.0.1"),1)]),_:1})]),_:1}),e(l,{xs:24,sm:12,lg:6},{default:t(()=>[e(i,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[e(p,{title:"LLM 提供商",value:k.value||"未配置","value-style":{color:k.value?"#1677ff":"#888",fontSize:"16px"}},{prefix:t(()=>[e(c(U))]),_:1},8,["value","value-style"]),D.value?(s(),d("div",le,u(D.value),1)):g("",!0)]),_:1})]),_:1}),e(l,{xs:24,sm:12,lg:6},{default:t(()=>[e(i,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[e(p,{title:"初始化",value:M.value?"已完成":"未完成","value-style":{color:M.value?"#52c41a":"#faad14",fontSize:"16px"}},{prefix:t(()=>[e(c(X))]),_:1},8,["value","value-style"]),h.value?(s(),d("div",se,u(h.value),1)):g("",!0)]),_:1})]),_:1})]),_:1}),e(i,{title:"端口状态",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"}},{extra:t(()=>[e(T,{color:R.value?"green":"red"},{default:t(()=>[y(" WS "+u(R.value?"已连接":"断开"),1)]),_:1},8,["color"])]),default:t(()=>[x.value?(s(),d("div",ne,[e(j)])):(s(),$(G,{key:1,columns:E,"data-source":B.value,pagination:!1,size:"small","row-class-name":_=>_.active?"port-active":""},{bodyCell:t(({column:_,record:O})=>[_.key==="status"?(s(),$(A,{key:0,status:O.active?"success":"default",text:O.active?"运行中":"未运行"},null,8,["status","text"])):g("",!0),_.key==="port"?(s(),d("span",ce,u(O.port),1)):g("",!0)]),_:1},8,["data-source","row-class-name"]))]),_:1}),e(i,{title:"Docker 服务",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"}},{default:t(()=>[w.value?(s(),d("div",ie,u(w.value),1)):(s(),d("div",de,"未检测到 Docker 服务"))]),_:1}),e(i,{title:"快速操作",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[e(H,{wrap:""},{default:t(()=>[e(v,{loading:C.value,onClick:P,style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:t(()=>[e(c(Y))]),default:t(()=>[a[4]||(a[4]=y(" 环境诊断 ",-1))]),_:1},8,["loading"]),e(v,{onClick:a[0]||(a[0]=_=>o.$router.push("/logs")),style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:t(()=>[e(c(Z))]),default:t(()=>[a[5]||(a[5]=y(" 查看日志 ",-1))]),_:1}),e(v,{onClick:a[1]||(a[1]=_=>o.$router.push("/providers")),style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:t(()=>[e(c(V))]),default:t(()=>[a[6]||(a[6]=y(" LLM 配置 ",-1))]),_:1})]),_:1}),b.value?(s(),d("div",ue,[a[7]||(a[7]=m("div",{style:{color:"var(--text-secondary)","font-size":"11px","margin-bottom":"6px"}},"诊断结果",-1)),m("pre",ve,u(b.value),1)])):g("",!0)]),_:1})])}}},be=K(pe,[["__scopeId","data-v-13be6bfe"]]);export{be as default};
@@ -1,3 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./xterm-BZcWGsqw.js","./markdown-CsiA8-E5.js","./markdown-Dfs9RUU9.css","./addon-fit-CK6X9sAG.js","./xterm-DFuMZ0ql.css"])))=>i.map(i=>d[i]);
2
- import{u as le,_ as re,d as Q,e as V}from"./index-CEbbycgJ.js";import{o as ie,e as ce,w as de,M as S,R as h,O as L,Q as Z,N as M,S as q,c as T,F as j,Y as G,P as R,r as k,K as D,f as ue,n as N,L as w,u as U,Z as fe,a1 as ve,a2 as me,a3 as ye}from"./vendor-M5lGV-wr.js";import{aq as he,R as we,b as pe}from"./icons-NT6gy8Ee.js";const C=new Map,A=new Map,$=new Set,F=new Set;let H=!1;function _e(u){H||(H=!0,u.onMessage(l=>{if(!(!l||typeof l.type!="string")){if(l.type==="terminal.stdout"){const{sessionId:n,data:s,seq:g}=l.payload||{};if(!n)return;let v;try{const i=atob(s||""),b=new Uint8Array(i.length);for(let t=0;t<i.length;t++)b[t]=i.charCodeAt(t);v=new TextDecoder("utf-8").decode(b)}catch{v=""}const m={sessionId:n,data:v,seq:g};C.get(n)?.forEach(i=>i(m)),$.forEach(i=>i(m))}else if(l.type==="terminal.exit"){const{sessionId:n,exitCode:s,signal:g}=l.payload||{};if(!n)return;const v={sessionId:n,exitCode:s,signal:g};A.get(n)?.forEach(m=>m(v)),F.forEach(m=>m(v))}}}))}function I(u){const l=new TextEncoder().encode(u);let n="";for(let s=0;s<l.length;s++)n+=String.fromCharCode(l[s]);return btoa(n)}function J(u){const l=atob(u||""),n=new Uint8Array(l.length);for(let s=0;s<l.length;s++)n[s]=l.charCodeAt(s);return new TextDecoder("utf-8").decode(n)}function ge(){const u=le();_e(u);async function l(t={}){const o=await u.sendRaw({type:"terminal.create",payload:{shell:t.shell,cwd:t.cwd,env:t.env,cols:t.cols,rows:t.rows}});if(o.ok===!1)throw new Error(o.error||"terminal_create_failed");return o.result??o}async function n(){const t=await u.sendRaw({type:"terminal.list",payload:{}});if(t.ok===!1)throw new Error(t.error||"terminal_list_failed");const o=t.result??t;return Array.isArray(o.sessions)?o.sessions:[]}async function s(t,o){const r=await u.sendRaw({type:"terminal.stdin",payload:{sessionId:t,data:I(String(o))}});if(r.ok===!1)throw new Error(r.error||"terminal_stdin_failed");return r.result??r}async function g(t,o,r){const x=await u.sendRaw({type:"terminal.resize",payload:{sessionId:t,cols:o,rows:r}});if(x.ok===!1)throw new Error(x.error||"terminal_resize_failed");return x.result??x}async function v(t){const o=await u.sendRaw({type:"terminal.close",payload:{sessionId:t}});if(o.ok===!1)throw new Error(o.error||"terminal_close_failed");return o.result??o}async function m(t,o=0){const r=await u.sendRaw({type:"terminal.history",payload:{sessionId:t,fromSeq:o}});if(r.ok===!1)throw new Error(r.error||"terminal_history_failed");const x=r.result??r;return{truncated:!!x.truncated,chunks:(x.chunks||[]).map(E=>({seq:E.seq,data:J(E.data)}))}}function i(t,o){return t?(C.has(t)||C.set(t,new Set),C.get(t).add(o),()=>{C.get(t)?.delete(o),C.get(t)?.size===0&&C.delete(t)}):($.add(o),()=>$.delete(o))}function b(t,o){return t?(A.has(t)||A.set(t,new Set),A.get(t).add(o),()=>{A.get(t)?.delete(o),A.get(t)?.size===0&&A.delete(t)}):(F.add(o),()=>F.delete(o))}return{create:l,list:n,stdin:s,resize:g,close:v,history:m,onStdout:i,onExit:b,_internal:{stdoutSubs:C,exitSubs:A,toBase64Utf8:I,fromBase64Utf8:J}}}const xe={class:"terminal-page"},Se={class:"terminal-header"},be={class:"page-sub"},ke={class:"terminal-body"},Ce={class:"session-tabs"},Ae=["onClick"],Ee={class:"session-shell"},Te={class:"session-id"},Re={key:0,class:"session-empty"},ze={class:"xterm-host"},Me=["data-session-id"],qe={key:0,class:"xterm-placeholder"},De={key:1,class:"terminal-footer"},Le={key:0,class:"footer-exit"},Oe={__name:"Terminal",setup(u){const l=ge(),n=k([]),s=k(null),g=k("pwsh"),v=k(!1),m=k(!1),i=k(""),b=k(""),t=k([]),o=[{value:"pwsh",label:"PowerShell"},{value:"cmd",label:"CMD"},{value:"bash",label:"Bash"},{value:"wsl",label:"WSL"}],r=ue(()=>n.value.find(e=>e.id===s.value));function x(e){return e?e.slice(0,8):""}let E=null,O=null;async function ee(){if(E)return{xtermMod:E,fitAddonMod:O};try{E=await V(()=>import("./xterm-BZcWGsqw.js").then(e=>e.x),__vite__mapDeps([0,1,2]),import.meta.url),O=await V(()=>import("./addon-fit-CK6X9sAG.js").then(e=>e.a),__vite__mapDeps([3,1,2]),import.meta.url),await V(()=>Promise.resolve({}),__vite__mapDeps([4]),import.meta.url)}catch(e){throw b.value="xterm 资源加载失败:"+(e?.message||"未知错误"),e}return{xtermMod:E,fitAddonMod:O}}async function W(e){await N();const{xtermMod:a,fitAddonMod:y}=await ee(),p=t.value.find(f=>f?.dataset?.sessionId===e.id);if(!p)return;const c=new a.Terminal({cursorBlink:!0,fontFamily:'Consolas, "Courier New", monospace',fontSize:13,theme:{background:"#1e1e1e",foreground:"#d4d4d4"},convertEol:!1}),z=new y.FitAddon;c.loadAddon(z),c.open(p);try{z.fit()}catch{}e.xterm=c,e.fitAddon=z;const B=c.onData(f=>{l.stdin(e.id,f).catch(_=>{String(_?.message||"").includes("dangerous_keyword_blocked")?Q.warning("该命令被桌面端拦截(高危关键字)"):Q.error("stdin 失败: "+(_?.message||_))})}),d=l.onStdout(e.id,({data:f,seq:_})=>{e.lastSeq=_,c.write(f)}),P=l.onExit(e.id,({exitCode:f,signal:_})=>{e.alive=!1,e.exitCode=f,e.signal=_,c.writeln(`\r
3
- \x1B[33m[session exited, code=${f}, signal=${_??"-"}]\x1B[0m`)});e.offs=()=>{try{B.dispose?.()}catch{}d(),P()};try{const{chunks:f,truncated:_}=await l.history(e.id,0);_&&c.writeln("\x1B[2m[history truncated — earlier output was evicted]\x1B[0m");for(const K of f)c.write(K.data),e.lastSeq=K.seq}catch(f){c.writeln(`\x1B[31m[history fetch failed: ${f?.message||f}]\x1B[0m`)}const Y=new ResizeObserver(()=>{try{z.fit(),l.resize(e.id,c.cols,c.rows).catch(()=>{})}catch{}});Y.observe(p);const se=e.offs;e.offs=()=>{try{Y.disconnect()}catch{}se()}}async function te(){v.value=!0,i.value="";try{const e=await l.create({shell:g.value,cols:80,rows:24}),a={id:e.sessionId,shell:e.shell,cwd:"",alive:!0,lastSeq:0,exitCode:null,xterm:null,fitAddon:null,offs:()=>{}};n.value.push(a),s.value=a.id,await W(a)}catch(e){i.value=e?.message||String(e)}finally{v.value=!1}}async function ae(e){try{await l.close(e)}catch(a){i.value=a?.message||String(a)}setTimeout(()=>ne(e),500)}function ne(e){const a=n.value.findIndex(p=>p.id===e);if(a===-1)return;const y=n.value[a];try{y.offs?.()}catch{}try{y.xterm?.dispose?.()}catch{}n.value.splice(a,1),s.value===e&&(s.value=n.value[0]?.id||null)}function oe(e){s.value=e,N(()=>{const a=n.value.find(y=>y.id===e);try{a?.fitAddon?.fit()}catch{}})}async function X(){m.value=!0,i.value="";try{const e=await l.list();for(const a of e){const y=n.value.find(c=>c.id===a.id);if(y){y.alive=a.alive,y.lastSeq=a.lastSeq;continue}const p={id:a.id,shell:a.shell,cwd:a.cwd,alive:a.alive,lastSeq:a.lastSeq,exitCode:null,xterm:null,fitAddon:null,offs:()=>{}};n.value.push(p),await W(p)}!s.value&&n.value.length>0&&(s.value=n.value[0].id)}catch(e){i.value=e?.message||String(e)}finally{m.value=!1}}return ie(async()=>{await X()}),ce(()=>{for(const e of n.value){try{e.offs?.()}catch{}try{e.xterm?.dispose?.()}catch{}}}),de(s,()=>{N(()=>{const e=r.value;try{e?.fitAddon?.fit()}catch{}})}),(e,a)=>{const y=D("a-tag"),p=D("a-select"),c=D("a-button"),z=D("a-space"),B=D("a-alert");return w(),S("div",xe,[h("div",Se,[h("div",null,[a[3]||(a[3]=h("h2",{class:"page-title"},"远程终端",-1)),h("p",be,[a[2]||(a[2]=L(" 桌面端托管的 PTY 会话;Android 端可远程操控同一通道 ",-1)),b.value?(w(),Z(y,{key:0,color:"orange",style:{"margin-left":"8px"}},{default:M(()=>[L(R(b.value),1)]),_:1})):q("",!0)])]),T(z,null,{default:M(()=>[T(p,{value:g.value,"onUpdate:value":a[0]||(a[0]=d=>g.value=d),style:{width:"130px"},size:"small",options:o},null,8,["value"]),T(c,{type:"primary",size:"small",loading:v.value,onClick:te},{icon:M(()=>[T(U(he))]),default:M(()=>[a[4]||(a[4]=L(" 新会话 ",-1))]),_:1},8,["loading"]),T(c,{size:"small",loading:m.value,onClick:X},{icon:M(()=>[T(U(we))]),default:M(()=>[a[5]||(a[5]=L(" 刷新 ",-1))]),_:1},8,["loading"])]),_:1})]),i.value?(w(),Z(B,{key:0,message:i.value,type:"error","show-icon":"",closable:"",style:{"margin-bottom":"12px"},onClose:a[1]||(a[1]=d=>i.value="")},null,8,["message"])):q("",!0),h("div",ke,[h("div",Ce,[(w(!0),S(j,null,G(n.value,d=>(w(),S("div",{key:d.id,class:fe(["session-tab",{active:d.id===s.value,dead:!d.alive}]),onClick:P=>oe(d.id)},[h("span",Ee,R(d.shell),1),h("span",Te,R(x(d.id)),1),T(U(pe),{class:"session-close",onClick:ve(P=>ae(d.id),["stop"])},null,8,["onClick"])],10,Ae))),128)),n.value.length===0?(w(),S("div",Re,' 点击 "新会话" 创建第一个终端 ')):q("",!0)]),h("div",ze,[(w(!0),S(j,null,G(n.value,d=>me((w(),S("div",{key:d.id,ref_for:!0,ref_key:"xtermContainers",ref:t,"data-session-id":d.id,class:"xterm-container"},null,8,Me)),[[ye,d.id===s.value]])),128)),n.value.length===0?(w(),S("div",qe,[...a[6]||(a[6]=[h("span",null,"无活跃会话",-1)])])):q("",!0)])]),r.value?(w(),S("div",De,[h("span",null,R(r.value.shell)+" · "+R(r.value.cwd||"(默认 cwd)")+" · seq "+R(r.value.lastSeq),1),r.value.alive?q("",!0):(w(),S("span",Le,"已退出 (code="+R(r.value.exitCode??"-")+")",1))])):q("",!0)])}}},Ne=re(Oe,[["__scopeId","data-v-2b31fd4d"]]);export{Ne as default};
@@ -1 +0,0 @@
1
- import{_ as zt,b as Bt,u as Ot,d as A}from"./index-CEbbycgJ.js";import{s as rt}from"./community-parser-CO25nZFt.js";import{R as At,n as Rt,N as ot,x as st,aH as Ut,aI as at}from"./icons-NT6gy8Ee.js";import{o as Et,M as y,R as m,P as c,u as a,c as o,N as n,Q as D,S as _,K as v,r as O,L as p,O as S,F as U,Y as K,f as G}from"./vendor-M5lGV-wr.js";function w(e){const t=rt(e);if(!t)return null;try{return JSON.parse(t)}catch{}const l=t.match(/\{[\s\S]*\}|\[[\s\S]*\]/);if(!l)return null;try{return JSON.parse(l[0])}catch{return null}}const Mt=Object.freeze(["today","week","month","all"]),ct=Object.freeze(["planning","active","suspended","archived"]),ut=Object.freeze(["pending","recorded","billed","rejected","refunded"]);function i(e,t=0){return typeof e=="number"&&Number.isFinite(e)?e:t}function V(e){if(!e)return{noDb:!1,error:""};const t=rt(e),l=/Database not available/i.test(t);return{noDb:l,error:l?"Database not available":""}}const Y={totalCalls:0,totalInputTokens:0,totalOutputTokens:0,totalTokens:0,totalCostUsd:0,avgResponseTimeMs:0};function nt(e){const t={...Y};return!e||typeof e!="object"||Array.isArray(e)||(t.totalCalls=i(e.total_calls??e.totalCalls,0),t.totalInputTokens=i(e.total_input_tokens??e.totalInputTokens,0),t.totalOutputTokens=i(e.total_output_tokens??e.totalOutputTokens,0),t.totalTokens=i(e.total_tokens??e.totalTokens,0),t.totalCostUsd=i(e.total_cost_usd??e.totalCostUsd,0),t.avgResponseTimeMs=i(e.avg_response_time_ms??e.avgResponseTimeMs,0)),t}function lt(e){const t=w(e);return!t||typeof t!="object"||Array.isArray(t)?{stats:{...Y},today:{...Y}}:{stats:nt(t.stats),today:nt(t.today)}}function Dt(e,t=0){if(!e||typeof e!="object")return null;const l=e.provider||"",f=e.model||"";return!l&&!f?null:{key:`${l}/${f}/${t}`,provider:String(l),model:String(f),calls:i(e.calls,0),inputTokens:i(e.input_tokens??e.inputTokens,0),outputTokens:i(e.output_tokens??e.outputTokens,0),totalTokens:i(e.total_tokens??e.totalTokens,0),costUsd:i(e.cost_usd??e.costUsd,0),_idx:t}}function wt(e){const t=w(e);return Array.isArray(t)?t.map(Dt).filter(Boolean):[]}function jt(e,t=0){if(!e||typeof e!="object")return null;const l=e.id||"";return l?{key:l,id:l,provider:String(e.provider||""),model:String(e.model||""),inputTokens:i(e.input_tokens??e.inputTokens,0),outputTokens:i(e.output_tokens??e.outputTokens,0),totalTokens:i(e.total_tokens??e.totalTokens,0),costUsd:i(e.cost_usd??e.costUsd,0),responseTimeMs:i(e.response_time_ms??e.responseTimeMs,0),endpoint:String(e.endpoint||""),createdAt:e.created_at??e.createdAt??"",_idx:t}:null}function It(e){const t=w(e);return Array.isArray(t)?t.map(jt).filter(Boolean):[]}const Nt={totalEntries:0,totalHits:0,totalTokensSaved:0,expiredEntries:0};function Vt(e){const t={...Nt},l=w(e);return!l||typeof l!="object"||Array.isArray(l)||(t.totalEntries=i(l.total_entries??l.totalEntries,0),t.totalHits=i(l.total_hits??l.totalHits,0),t.totalTokensSaved=i(l.total_tokens_saved??l.totalTokensSaved,0),t.expiredEntries=i(l.expired_entries??l.expiredEntries,0)),t}const Pt={totalBudgetsV2:0,totalRecordsV2:0,maxActiveBudgetsPerOwner:0,maxPendingRecordsPerBudget:0,budgetIdleMs:0,recordStuckMs:0,budgetsByStatus:{},recordsByStatus:{}};function Ft(e){const t=JSON.parse(JSON.stringify(Pt));for(const f of ct)t.budgetsByStatus[f]=0;for(const f of ut)t.recordsByStatus[f]=0;const l=w(e);if(!l||typeof l!="object"||Array.isArray(l))return t;if(t.totalBudgetsV2=i(l.totalBudgetsV2,0),t.totalRecordsV2=i(l.totalRecordsV2,0),t.maxActiveBudgetsPerOwner=i(l.maxActiveBudgetsPerOwner,0),t.maxPendingRecordsPerBudget=i(l.maxPendingRecordsPerBudget,0),t.budgetIdleMs=i(l.budgetIdleMs,0),t.recordStuckMs=i(l.recordStuckMs,0),l.budgetsByStatus&&typeof l.budgetsByStatus=="object")for(const[f,b]of Object.entries(l.budgetsByStatus))typeof b=="number"&&Number.isFinite(b)&&(t.budgetsByStatus[f]=b);if(l.recordsByStatus&&typeof l.recordsByStatus=="object")for(const[f,b]of Object.entries(l.recordsByStatus))typeof b=="number"&&Number.isFinite(b)&&(t.recordsByStatus[f]=b);return t}function Lt(e){if(e==null||e==="")return"—";const t=String(e),l=t.includes(" ")&&!t.includes("T")?t.replace(" ","T")+"Z":t,f=typeof e=="number"?new Date(e):new Date(l);return isNaN(f.getTime())?t:f.toLocaleString("zh-CN",{hour12:!1})}function P(e){return typeof e!="number"||!Number.isFinite(e)?"$0":"$"+(Math.abs(e)<1?e.toFixed(4):e.toFixed(2))}const $t={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},Ht={class:"page-title"},Jt={class:"page-sub"},Kt={style:{display:"flex","align-items":"center",gap:"12px","flex-wrap":"wrap"}},Gt={style:{color:"var(--text-secondary)","font-size":"12px"}},Yt={class:"stat-sub"},Qt={class:"stat-sub"},Wt={class:"stat-sub"},Zt={class:"stat-sub"},qt={key:1,style:{color:"var(--text-primary)","font-family":"monospace","font-size":"12px"}},Xt={key:2,style:{color:"var(--text-secondary)"}},te={style:{color:"var(--text-secondary)","font-family":"monospace","font-size":"12px"}},ee={style:{color:"var(--text-muted)","font-size":"11px","font-family":"monospace"}},oe={style:{color:"#faad14","font-weight":"500","font-family":"monospace"}},se={key:5,style:{color:"var(--text-muted)","font-family":"monospace","font-size":"12px"}},ae={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},ne={key:0,style:{color:"var(--text-secondary)","font-size":"11px","font-family":"monospace"}},le={key:2,style:{color:"var(--text-primary)","font-family":"monospace","font-size":"12px"}},re={style:{color:"var(--text-secondary)","font-family":"monospace","font-size":"12px"}},ce={style:{color:"var(--text-muted)","font-size":"11px","font-family":"monospace"}},ue={key:4,style:{color:"#faad14","font-weight":"500","font-family":"monospace"}},ie={key:0,style:{color:"var(--text-muted)","font-family":"monospace","font-size":"11px"}},de={key:1,style:{color:"var(--text-muted)"}},pe={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},fe={style:{"font-size":"12px",color:"var(--text-secondary)",margin:"0 0 8px"}},ke={style:{"font-size":"12px",color:"var(--text-secondary)",margin:"0 0 8px"}},me={__name:"Tokens",setup(e){const{t}=Bt(),l=Ot(),f=O(!1),b=O("all"),g=O({stats:{totalCalls:0,totalInputTokens:0,totalOutputTokens:0,totalTokens:0,totalCostUsd:0,avgResponseTimeMs:0},today:{totalCalls:0,totalInputTokens:0,totalOutputTokens:0,totalTokens:0,totalCostUsd:0,avgResponseTimeMs:0}}),F=O([]),Q=O([]),h=O({totalEntries:0,totalHits:0,totalTokensSaved:0,expiredEntries:0}),R=O({totalBudgetsV2:0,totalRecordsV2:0,maxActiveBudgetsPerOwner:0,maxPendingRecordsPerBudget:0,budgetIdleMs:0,recordStuckMs:0,budgetsByStatus:{},recordsByStatus:{}}),j=O({noDb:!1,error:""}),W=O("breakdown"),it=G(()=>[{title:t("tokens.breakdownColumns.provider"),key:"provider",width:"130px"},{title:t("tokens.breakdownColumns.model"),key:"model"},{title:t("tokens.breakdownColumns.calls"),key:"calls",width:"90px"},{title:t("tokens.breakdownColumns.totalTokens"),key:"totalTokens",width:"180px"},{title:t("tokens.breakdownColumns.costUsd"),key:"costUsd",width:"180px"},{title:t("tokens.breakdownColumns.avgCost"),key:"avgCost",width:"110px"}]),dt=G(()=>[{title:t("tokens.recentColumns.createdAt"),key:"createdAt",width:"160px"},{title:t("tokens.recentColumns.provider"),key:"provider",width:"130px"},{title:t("tokens.recentColumns.model"),key:"model",width:"180px"},{title:t("tokens.recentColumns.tokens"),key:"tokens",width:"160px"},{title:t("tokens.recentColumns.costUsd"),key:"costUsd",width:"110px"},{title:t("tokens.recentColumns.responseTimeMs"),key:"responseTimeMs",width:"100px"},{title:t("tokens.recentColumns.endpoint"),key:"endpoint"}]),Z=G(()=>F.value.reduce((s,u)=>s+u.costUsd,0));function pt(s){const u=`tokens.period.${s}`,k=t(u);return k===u?s:k}function q(s){const u=["blue","green","purple","orange","cyan","magenta","gold","volcano"];let k=0;for(let z=0;z<(s||"").length;z++)k=k*31+s.charCodeAt(z)>>>0;return u[k%u.length]}function ft(s){return s<=500?"#52c41a":s<=1500?"#1677ff":s<=3e3?"#faad14":"#ff4d4f"}function kt(s){return s<=500?"green":s<=1500?"blue":s<=3e3?"gold":"red"}function C(s){return typeof s!="number"||!Number.isFinite(s)?"0":s.toLocaleString("en-US")}function mt(s){return!Z.value||s<=0?0:Math.min(100,Math.round(s/Z.value*100))}function X(s,u){return u?Math.round(s/u*100):0}function yt(s){const u=`tokens.budgetStatus.${s}`,k=t(u);return k===u?s:k}function vt(s){return{planning:"default",active:"green",suspended:"orange",archived:"default"}[s]||"default"}function _t(s){return{planning:"#888",active:"#52c41a",suspended:"#faad14",archived:"#666"}[s]||"#888"}function bt(s){const u=`tokens.recordStatus.${s}`,k=t(u);return k===u?s:k}function gt(s){return{pending:"default",recorded:"blue",billed:"green",rejected:"red",refunded:"orange"}[s]||"default"}function xt(s){return{pending:"#888",recorded:"#1677ff",billed:"#52c41a",rejected:"#ff4d4f",refunded:"#faad14"}[s]||"#888"}async function I(){f.value=!0,j.value={noDb:!1,error:""};try{const[s,u,k,z,L]=await Promise.all([l.execute(`tokens show --period ${b.value} --json`,8e3).catch(()=>({output:""})),l.execute("tokens breakdown --json",8e3).catch(()=>({output:""})),l.execute("tokens recent -n 100 --json",1e4).catch(()=>({output:""})),l.execute("tokens cache --json",6e3).catch(()=>({output:""})),l.execute("tokens stats-v2",6e3).catch(()=>({output:""}))]),N=[s,u,k,z].map(E=>V(E.output)).find(E=>E.noDb);N&&(j.value=N),g.value=lt(s.output),F.value=wt(u.output),Q.value=It(k.output),h.value=Vt(z.output),R.value=Ft(L.output)}catch(s){A.error(t("tokens.messages.loadFailed",{err:s?.message||s}))}finally{f.value=!1}}async function ht(){try{const{output:s}=await l.execute(`tokens show --period ${b.value} --json`,8e3),u=V(s);if(u.noDb){j.value=u;return}g.value=lt(s)}catch(s){A.error(t("tokens.messages.loadShowFailed",{err:s?.message||s}))}}async function Tt(){try{const{output:s}=await l.execute("tokens cache --cleanup",8e3);if(V(s).noDb){A.error(t("tokens.messages.needInit"));return}A.success(t("tokens.messages.cleanupOk")),await I()}catch(s){A.error(t("tokens.messages.cleanupFailed",{err:s?.message||s}))}}async function St(){try{const{output:s}=await l.execute("tokens cache --clear",8e3);if(V(s).noDb){A.error(t("tokens.messages.needInit"));return}A.success(t("tokens.messages.clearOk")),await I()}catch(s){A.error(t("tokens.messages.clearFailed",{err:s?.message||s}))}}return Et(I),(s,u)=>{const k=v("a-button"),z=v("a-space"),L=v("a-alert"),N=v("a-radio-button"),E=v("a-radio-group"),x=v("a-card"),B=v("a-statistic"),T=v("a-col"),$=v("a-row"),M=v("a-tag"),H=v("a-progress"),tt=v("a-table"),J=v("a-tab-pane"),et=v("a-popconfirm"),Ct=v("a-tabs");return p(),y("div",null,[m("div",$t,[m("div",null,[m("h2",Ht,c(a(t)("tokens.title")),1),m("p",Jt,c(a(t)("tokens.subtitle")),1)]),o(z,null,{default:n(()=>[o(k,{loading:f.value,onClick:I},{icon:n(()=>[o(a(At))]),default:n(()=>[S(" "+c(a(t)("tokens.refresh")),1)]),_:1},8,["loading"])]),_:1})]),j.value.noDb?(p(),D(L,{key:0,type:"info","show-icon":"",message:a(t)("tokens.noDb.message"),description:a(t)("tokens.noDb.description"),style:{"margin-bottom":"16px"}},null,8,["message","description"])):_("",!0),o(x,{size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"},"body-style":{padding:"10px 16px"}},{default:n(()=>[m("div",Kt,[m("span",Gt,c(a(t)("tokens.periodLabel")),1),o(E,{value:b.value,"onUpdate:value":u[0]||(u[0]=r=>b.value=r),size:"small","button-style":"solid",onChange:ht},{default:n(()=>[(p(!0),y(U,null,K(a(Mt),r=>(p(),D(N,{key:r,value:r},{default:n(()=>[S(c(pt(r)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])])]),_:1}),o($,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:n(()=>[o(T,{xs:12,sm:8,lg:5},{default:n(()=>[o(x,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[o(B,{title:a(t)("tokens.stats.calls"),value:g.value.stats.totalCalls,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:n(()=>[o(a(Rt))]),_:1},8,["title","value"]),m("div",Yt,c(a(t)("tokens.stats.callsToday",{count:g.value.today.totalCalls})),1)]),_:1})]),_:1}),o(T,{xs:12,sm:8,lg:5},{default:n(()=>[o(x,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[o(B,{title:a(t)("tokens.stats.totalTokens"),value:g.value.stats.totalTokens,"value-style":{color:"#722ed1",fontSize:"20px"}},{prefix:n(()=>[o(a(ot))]),_:1},8,["title","value"]),m("div",Qt,c(a(t)("tokens.stats.tokensInOut",{inputs:C(g.value.stats.totalInputTokens),outputs:C(g.value.stats.totalOutputTokens)})),1)]),_:1})]),_:1}),o(T,{xs:12,sm:8,lg:5},{default:n(()=>[o(x,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[o(B,{title:a(t)("tokens.stats.totalCost"),value:g.value.stats.totalCostUsd,precision:g.value.stats.totalCostUsd<1?4:2,prefix:"$","value-style":{color:"#faad14",fontSize:"20px"}},null,8,["title","value","precision"]),m("div",Wt,c(a(t)("tokens.stats.costToday",{amount:a(P)(g.value.today.totalCostUsd)})),1)]),_:1})]),_:1}),o(T,{xs:12,sm:8,lg:5},{default:n(()=>[o(x,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[o(B,{title:a(t)("tokens.stats.avgResponse"),value:g.value.stats.avgResponseTimeMs,suffix:"ms",precision:0,"value-style":{color:ft(g.value.stats.avgResponseTimeMs),fontSize:"20px"}},{prefix:n(()=>[o(a(st))]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),o(T,{xs:24,sm:8,lg:4},{default:n(()=>[o(x,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[o(B,{title:a(t)("tokens.stats.cacheHits"),value:h.value.totalHits,"value-style":{color:"#13c2c2",fontSize:"20px"}},{prefix:n(()=>[o(a(Ut))]),_:1},8,["title","value"]),m("div",Zt,c(a(t)("tokens.stats.cacheTokensSaved",{count:C(h.value.totalTokensSaved)})),1)]),_:1})]),_:1})]),_:1}),o(Ct,{activeKey:W.value,"onUpdate:activeKey":u[1]||(u[1]=r=>W.value=r),class:"tokens-tabs"},{default:n(()=>[o(J,{key:"breakdown",tab:a(t)("tokens.tabs.breakdown")},{default:n(()=>[o(tt,{columns:it.value,"data-source":F.value,pagination:{pageSize:20,showTotal:r=>a(t)("tokens.totals.models",{count:r})},size:"small",loading:f.value,style:{background:"var(--bg-card)"}},{bodyCell:n(({column:r,record:d})=>[r.key==="provider"?(p(),D(M,{key:0,color:q(d.provider),style:{"font-family":"monospace"}},{default:n(()=>[S(c(d.provider),1)]),_:2},1032,["color"])):_("",!0),r.key==="model"?(p(),y("span",qt,c(d.model),1)):_("",!0),r.key==="calls"?(p(),y("span",Xt,c(C(d.calls)),1)):_("",!0),r.key==="totalTokens"?(p(),y(U,{key:3},[m("span",te,c(C(d.totalTokens)),1),m("div",ee,c(a(t)("tokens.breakdownDetails.tokensInOut",{inputs:C(d.inputTokens),outputs:C(d.outputTokens)})),1)],64)):_("",!0),r.key==="costUsd"?(p(),y(U,{key:4},[m("span",oe,c(a(P)(d.costUsd)),1),o(H,{percent:mt(d.costUsd),"show-info":!1,"stroke-color":"#faad14",size:"small",style:{"margin-top":"2px"}},null,8,["percent"])],64)):_("",!0),r.key==="avgCost"?(p(),y("span",se,c(d.calls>0?a(P)(d.costUsd/d.calls):"—"),1)):_("",!0)]),emptyText:n(()=>[m("div",ae,[o(a(ot),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),S(" "+c(a(t)("tokens.empty.breakdown")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),o(J,{key:"recent",tab:a(t)("tokens.tabs.recent")},{default:n(()=>[o(tt,{columns:dt.value,"data-source":Q.value,pagination:{pageSize:20,showTotal:r=>a(t)("tokens.totals.rows",{count:r})},size:"small",loading:f.value,style:{background:"var(--bg-card)"}},{bodyCell:n(({column:r,record:d})=>[r.key==="createdAt"?(p(),y("span",ne,c(a(Lt)(d.createdAt)),1)):_("",!0),r.key==="provider"?(p(),D(M,{key:1,color:q(d.provider),style:{"font-family":"monospace"}},{default:n(()=>[S(c(d.provider),1)]),_:2},1032,["color"])):_("",!0),r.key==="model"?(p(),y("span",le,c(d.model),1)):_("",!0),r.key==="tokens"?(p(),y(U,{key:3},[m("span",re,c(C(d.totalTokens)),1),m("div",ce,c(C(d.inputTokens))+" / "+c(C(d.outputTokens)),1)],64)):_("",!0),r.key==="costUsd"?(p(),y("span",ue,c(a(P)(d.costUsd)),1)):_("",!0),r.key==="responseTimeMs"?(p(),D(M,{key:5,color:kt(d.responseTimeMs)},{default:n(()=>[S(c(d.responseTimeMs)+"ms",1)]),_:2},1032,["color"])):_("",!0),r.key==="endpoint"?(p(),y(U,{key:6},[d.endpoint?(p(),y("span",ie,c(d.endpoint),1)):(p(),y("span",de,"—"))],64)):_("",!0)]),emptyText:n(()=>[m("div",pe,[o(a(st),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),S(" "+c(a(t)("tokens.empty.recent")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),o(J,{key:"cache",tab:a(t)("tokens.tabs.cache")},{default:n(()=>[o($,{gutter:[16,16],style:{"margin-bottom":"16px"}},{default:n(()=>[o(T,{xs:12,sm:6},{default:n(()=>[o(x,{size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[o(B,{title:a(t)("tokens.cache.totalEntries"),value:h.value.totalEntries,"value-style":{color:"#1677ff",fontSize:"18px"}},null,8,["title","value"])]),_:1})]),_:1}),o(T,{xs:12,sm:6},{default:n(()=>[o(x,{size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[o(B,{title:a(t)("tokens.cache.totalHits"),value:h.value.totalHits,"value-style":{color:"#52c41a",fontSize:"18px"}},null,8,["title","value"])]),_:1})]),_:1}),o(T,{xs:12,sm:6},{default:n(()=>[o(x,{size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[o(B,{title:a(t)("tokens.cache.totalTokensSaved"),value:h.value.totalTokensSaved,"value-style":{color:"#13c2c2",fontSize:"18px"}},null,8,["title","value"])]),_:1})]),_:1}),o(T,{xs:12,sm:6},{default:n(()=>[o(x,{size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[o(B,{title:a(t)("tokens.cache.expiredEntries"),value:h.value.expiredEntries,"value-style":{color:h.value.expiredEntries>0?"#faad14":"#888",fontSize:"18px"}},null,8,["title","value","value-style"])]),_:1})]),_:1})]),_:1}),o(x,{title:a(t)("tokens.cache.maintenanceTitle"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[o(z,null,{default:n(()=>[o(et,{title:a(t)("tokens.cache.cleanupConfirm"),"ok-text":a(t)("tokens.cache.cleanupOk"),"cancel-text":a(t)("common.cancel"),onConfirm:Tt},{default:n(()=>[o(k,{disabled:h.value.expiredEntries===0},{icon:n(()=>[o(a(at))]),default:n(()=>[S(" "+c(a(t)("tokens.cache.cleanupButton",{count:h.value.expiredEntries})),1)]),_:1},8,["disabled"])]),_:1},8,["title","ok-text","cancel-text"]),o(et,{title:a(t)("tokens.cache.clearConfirm"),"ok-text":a(t)("tokens.cache.clearOk"),"ok-type":"danger","cancel-text":a(t)("common.cancel"),onConfirm:St},{default:n(()=>[o(k,{danger:"",disabled:h.value.totalEntries===0},{icon:n(()=>[o(a(at))]),default:n(()=>[S(" "+c(a(t)("tokens.cache.clearButton")),1)]),_:1},8,["disabled"])]),_:1},8,["title","ok-text","cancel-text"])]),_:1})]),_:1},8,["title"]),o(x,{title:a(t)("tokens.v2.cardTitle"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-top":"16px"}},{default:n(()=>[o($,{gutter:[16,16]},{default:n(()=>[o(T,{xs:24,lg:12},{default:n(()=>[m("h5",fe,c(a(t)("tokens.v2.budgetsTitle")),1),(p(!0),y(U,null,K(a(ct),r=>(p(),y("div",{key:r,class:"bd-row"},[o(M,{color:vt(r),style:{"min-width":"80px","text-align":"center"}},{default:n(()=>[S(c(yt(r)),1)]),_:2},1032,["color"]),o(H,{percent:X(R.value.budgetsByStatus[r]||0,R.value.totalBudgetsV2),"stroke-color":_t(r),format:()=>`${R.value.budgetsByStatus[r]||0}`,size:"small",style:{flex:"1","margin-left":"12px"}},null,8,["percent","stroke-color","format"])]))),128))]),_:1}),o(T,{xs:24,lg:12},{default:n(()=>[m("h5",ke,c(a(t)("tokens.v2.recordsTitle")),1),(p(!0),y(U,null,K(a(ut),r=>(p(),y("div",{key:r,class:"bd-row"},[o(M,{color:gt(r),style:{"min-width":"80px","text-align":"center"}},{default:n(()=>[S(c(bt(r)),1)]),_:2},1032,["color"]),o(H,{percent:X(R.value.recordsByStatus[r]||0,R.value.totalRecordsV2),"stroke-color":xt(r),format:()=>`${R.value.recordsByStatus[r]||0}`,size:"small",style:{flex:"1","margin-left":"12px"}},null,8,["percent","stroke-color","format"])]))),128))]),_:1})]),_:1})]),_:1},8,["title"])]),_:1},8,["tab"])]),_:1},8,["activeKey"])])}}},ge=zt(me,[["__scopeId","data-v-605706da"]]);export{ge as default};
@@ -1 +0,0 @@
1
- import{C as o}from"./Col-3s6dxuMx.js";import{S as t}from"./index-CEbbycgJ.js";import"./index-CSCb-EY9.js";import"./vendor-M5lGV-wr.js";import"./icons-NT6gy8Ee.js";const s=t(o);export{s as default};
@@ -1 +0,0 @@
1
- import{A as o}from"./Row-BWLfAhHC.js";import{S as t}from"./index-CEbbycgJ.js";import"./responsiveObserve-DuI2xGQd.js";import"./vendor-M5lGV-wr.js";import"./useFlexGapSupport-BD4Xr9XU.js";import"./styleChecker-Br0YrCOO.js";import"./index-CSCb-EY9.js";import"./icons-NT6gy8Ee.js";const l=t(o);export{l as default};