chatlab-cli 0.32.0 → 0.34.0

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 (158) hide show
  1. package/README.md +2 -1
  2. package/dist/{chat-command-3KUWKS53.mjs → chat-command-XPY3WURC.mjs} +9 -9
  3. package/dist/{chunk-LNU4RW5G.mjs → chunk-AQPDZAWB.mjs} +1604 -1327
  4. package/dist/chunk-AQPDZAWB.mjs.map +1 -0
  5. package/dist/{chunk-UVCH2ICD.mjs → chunk-BQ3QN4QT.mjs} +3 -3
  6. package/dist/{chunk-DV4U34MR.mjs → chunk-DGF3S3TZ.mjs} +2 -2
  7. package/dist/{chunk-3J7WTUEE.mjs → chunk-IGEHMLHM.mjs} +2 -2
  8. package/dist/{chunk-CANPJOIE.mjs → chunk-IGK6UMN2.mjs} +112 -16
  9. package/dist/chunk-IGK6UMN2.mjs.map +1 -0
  10. package/dist/{chunk-BLOBEOCG.mjs → chunk-ISRLGLUL.mjs} +2 -2
  11. package/dist/{chunk-27DWKA3L.mjs → chunk-JCSPDTZL.mjs} +15 -62
  12. package/dist/chunk-JCSPDTZL.mjs.map +1 -0
  13. package/dist/{chunk-23AIEWCD.mjs → chunk-JTOHAMIW.mjs} +2 -2
  14. package/dist/{chunk-YVNZ73O5.mjs → chunk-OLE2USEN.mjs} +4492 -4038
  15. package/dist/chunk-OLE2USEN.mjs.map +1 -0
  16. package/dist/{chunk-YAQLYL52.mjs → chunk-QZCNVAH6.mjs} +2 -2
  17. package/dist/{chunk-YAQLYL52.mjs.map → chunk-QZCNVAH6.mjs.map} +1 -1
  18. package/dist/{chunk-3IGBPOJM.mjs → chunk-S5NCEESV.mjs} +5 -4
  19. package/dist/chunk-S5NCEESV.mjs.map +1 -0
  20. package/dist/{chunk-PZM3FHVZ.mjs → chunk-UO2XVFY6.mjs} +37 -26
  21. package/dist/chunk-UO2XVFY6.mjs.map +1 -0
  22. package/dist/cli.mjs +9 -9
  23. package/dist/contacts-worker.mjs +2 -2
  24. package/dist/global-insight-worker.mjs +2 -2
  25. package/dist/{http-YR26GF7X.mjs → http-HV6XWU6X.mjs} +12 -12
  26. package/dist/{import-Q3DUACU4.mjs → import-DP2XLZ2H.mjs} +8 -8
  27. package/dist/index.mjs +12 -12
  28. package/dist/{mcp-HTVZSGTI.mjs → mcp-QDPFBPGW.mjs} +9 -9
  29. package/dist/people-relationships-worker.mjs +2 -2
  30. package/dist/semantic-index-worker.mjs +1 -1
  31. package/dist/{src-HJL7YZZJ.mjs → src-B3A2QHP5.mjs} +12 -10
  32. package/dist/{stream-import-MXETSEPW.mjs → stream-import-KEGNP3QK.mjs} +8 -8
  33. package/dist/{worker-runtime-DZQDL2E2.mjs → worker-runtime-MDYKX3BW.mjs} +6 -6
  34. package/dist-cli-web/assets/ActionToolsPanel.vue_vue_type_script_setup_true_lang-JxPR2O6b.js +110 -0
  35. package/{dist-web/assets/BufferResource-BXfwfGam.js → dist-cli-web/assets/BufferResource--dSbJb0k.js} +1 -1
  36. package/dist-cli-web/assets/CanvasRenderer-Cm_dmJXZ.js +1 -0
  37. package/dist-cli-web/assets/DataDirCleanupNotice-B0s5txX3.js +1 -0
  38. package/dist-cli-web/assets/EChartWordcloud-CwMVJLBO.js +1 -0
  39. package/{dist-web/assets/Filter-Irxx0f6j.js → dist-cli-web/assets/Filter-BjYScRpK.js} +1 -1
  40. package/dist-cli-web/assets/LoadingState.vue_vue_type_script_setup_true_lang-BshQybD_.js +1 -0
  41. package/dist-cli-web/assets/MessageExportModal-DAJW2mFj.js +1 -0
  42. package/dist-cli-web/assets/PageHeader-BKAjCuqs.js +1 -0
  43. package/{dist-web/assets/RelationshipGalaxyCanvas-ByDU6ZS_.js → dist-cli-web/assets/RelationshipGalaxyCanvas-mlZs7k4L.js} +14 -14
  44. package/{dist-web/assets/RelationshipGalaxyThreeCanvas-BluPHjCR.css → dist-cli-web/assets/RelationshipGalaxyThreeCanvas-CeYJABxI.css} +1 -1
  45. package/{dist-web/assets/RelationshipGalaxyThreeCanvas-DgAlyKjc.js → dist-cli-web/assets/RelationshipGalaxyThreeCanvas-DgMG3jdU.js} +14 -14
  46. package/{dist-web/assets/RenderTargetSystem-Cx5U5HAM.js → dist-cli-web/assets/RenderTargetSystem-D00Ex44y.js} +1 -1
  47. package/dist-cli-web/assets/ThemeCard.vue_vue_type_script_setup_true_lang-Dsb6lzs-.js +1 -0
  48. package/dist-cli-web/assets/TimeSelect.vue_vue_type_script_setup_true_lang-BfR3tlkz.js +1 -0
  49. package/{dist-web/assets/WebGLRenderer-B3Fnp1WX.js → dist-cli-web/assets/WebGLRenderer-CTTusm2n.js} +2 -2
  50. package/{dist-web/assets/WebGPURenderer-DZ0X9N86.js → dist-cli-web/assets/WebGPURenderer-pyv3EXor.js} +2 -2
  51. package/dist-cli-web/assets/annual-summary-time-range-C_d1oZrj.js +1 -0
  52. package/dist-cli-web/assets/base-D91aVUwM.js +1 -0
  53. package/{dist-web/assets/browserAll-BqC9ELNO.js → dist-cli-web/assets/browserAll-C9fW936Y.js} +1 -1
  54. package/dist-cli-web/assets/cli-web-C7uGKz_E.js +1 -0
  55. package/{dist-web/assets/dateFormat-CX9atL2g.js → dist-cli-web/assets/dateFormat-rY43adcv.js} +1 -1
  56. package/{dist-web/assets/fetch-CUT9JdXT.js → dist-cli-web/assets/fetch-C6po4XYB.js} +3 -3
  57. package/dist-cli-web/assets/fetch-CNy9OQ2g.js +1 -0
  58. package/dist-cli-web/assets/fetch-CS3T-v-1.js +1 -0
  59. package/{dist-web/assets/fetch-C3KuMfIU.js → dist-cli-web/assets/fetch-CbnX5VoM.js} +3 -3
  60. package/dist-cli-web/assets/fetch-CrSz5KJy.js +1 -0
  61. package/dist-cli-web/assets/fetch-DG3AeEjW.js +1 -0
  62. package/dist-cli-web/assets/fetch-DYNgtIcU.js +1 -0
  63. package/{dist-web/assets/fetch-th_egarZ.js → dist-cli-web/assets/fetch-DZPC3D8R.js} +2 -2
  64. package/dist-cli-web/assets/fetch-Kk2knkEo.js +1 -0
  65. package/dist-cli-web/assets/fetch-PLrI3V67.js +1 -0
  66. package/dist-cli-web/assets/index-2-OaYdzt.js +1 -0
  67. package/dist-cli-web/assets/index-2S80bo1s.js +2 -0
  68. package/dist-cli-web/assets/index-3YO6RI5e.js +2 -0
  69. package/dist-cli-web/assets/index-BKo68Iu5.js +1 -0
  70. package/{dist-web/assets/index-Bm_U0hSr.js → dist-cli-web/assets/index-BrkDgcJ6.js} +4 -4
  71. package/dist-cli-web/assets/index-CGI3Y8pq.js +1 -0
  72. package/dist-cli-web/assets/index-CW9H_fBd.js +53 -0
  73. package/dist-cli-web/assets/index-DA3Q0TGT.js +1 -0
  74. package/dist-cli-web/assets/index-DFHYr_-u.js +1 -0
  75. package/dist-cli-web/assets/index-DmrrdYXH.css +1 -0
  76. package/dist-cli-web/assets/index-DmwA85vG.js +173 -0
  77. package/dist-cli-web/assets/index-DrjoMv9s.css +1 -0
  78. package/dist-cli-web/assets/index-DsdMsKYT.js +1 -0
  79. package/dist-cli-web/assets/index-JYfjMRb-.js +1 -0
  80. package/dist-cli-web/assets/index-Jhwca9kg.css +1 -0
  81. package/dist-cli-web/assets/index-ZTgfCZvY.js +64 -0
  82. package/dist-cli-web/assets/index-vtF05fh7.css +1 -0
  83. package/dist-cli-web/assets/people-page-header-D-LWaEqn.js +1 -0
  84. package/{dist-web/assets/webworkerAll-a_fveCLR.js → dist-cli-web/assets/webworkerAll-CPOVECup.js} +1 -1
  85. package/{dist-web → dist-cli-web}/index.html +2 -4
  86. package/package.json +4 -4
  87. package/dist/chunk-27DWKA3L.mjs.map +0 -1
  88. package/dist/chunk-3IGBPOJM.mjs.map +0 -1
  89. package/dist/chunk-CANPJOIE.mjs.map +0 -1
  90. package/dist/chunk-LNU4RW5G.mjs.map +0 -1
  91. package/dist/chunk-PZM3FHVZ.mjs.map +0 -1
  92. package/dist/chunk-YVNZ73O5.mjs.map +0 -1
  93. package/dist-web/assets/ActionToolsPanel.vue_vue_type_script_setup_true_lang-DfQa9E2W.js +0 -110
  94. package/dist-web/assets/CanvasRenderer-Bvpsbxds.js +0 -1
  95. package/dist-web/assets/DataDirCleanupNotice-C0sCmNL2.js +0 -1
  96. package/dist-web/assets/EChartWordcloud-C5hLT1vS.js +0 -1
  97. package/dist-web/assets/LoadingState.vue_vue_type_script_setup_true_lang-8s6XRB3S.js +0 -1
  98. package/dist-web/assets/MessageExportModal-tTI358HU.js +0 -1
  99. package/dist-web/assets/PageHeader-D5QQI9io.js +0 -1
  100. package/dist-web/assets/ThemeCard.vue_vue_type_script_setup_true_lang-CpNjFhpm.js +0 -1
  101. package/dist-web/assets/TimeSelect.vue_vue_type_script_setup_true_lang-DtCKfbaz.js +0 -1
  102. package/dist-web/assets/annual-summary-time-range-CvG74N2l.js +0 -1
  103. package/dist-web/assets/base-DdQRTliS.js +0 -1
  104. package/dist-web/assets/electron-ChQkD5ht.js +0 -1
  105. package/dist-web/assets/electron-DGxVMsvC.js +0 -1
  106. package/dist-web/assets/electron-hcWiB7Gg.js +0 -1
  107. package/dist-web/assets/fetch-3Ifr5YJN.js +0 -1
  108. package/dist-web/assets/fetch-74o_kRZf.js +0 -1
  109. package/dist-web/assets/fetch-BKFznq4l.js +0 -1
  110. package/dist-web/assets/fetch-BPj6IlT-.js +0 -1
  111. package/dist-web/assets/fetch-CoYaXr5K.js +0 -1
  112. package/dist-web/assets/fetch-Dcg6Q6Ei.js +0 -1
  113. package/dist-web/assets/fetch-DxWfYzkB.js +0 -1
  114. package/dist-web/assets/index-B3riRaJA.js +0 -1
  115. package/dist-web/assets/index-BKFGuwJu.css +0 -1
  116. package/dist-web/assets/index-BRDdozcm.js +0 -173
  117. package/dist-web/assets/index-Bg-OiHMa.js +0 -1
  118. package/dist-web/assets/index-BhewGKey.js +0 -2
  119. package/dist-web/assets/index-BpeJ40uK.js +0 -1
  120. package/dist-web/assets/index-C6bwt1H4.js +0 -1
  121. package/dist-web/assets/index-CEJqRkis.js +0 -2
  122. package/dist-web/assets/index-CKLCaqdT.js +0 -1
  123. package/dist-web/assets/index-D8Uq3_Dc.css +0 -1
  124. package/dist-web/assets/index-DBb03wVF.css +0 -1
  125. package/dist-web/assets/index-Ds5PiVyB.js +0 -64
  126. package/dist-web/assets/index-GXMxhYc9.js +0 -1
  127. package/dist-web/assets/index-JyB6Cr8r.js +0 -25
  128. package/dist-web/assets/index-UJl03IYE.css +0 -1
  129. package/dist-web/assets/index-tx-Oal36.js +0 -1
  130. package/dist-web/assets/people-page-header-DGkK0AMO.js +0 -1
  131. package/dist-web/assets/types-CZnACqaB.js +0 -1
  132. package/dist-web/assets/vendor-nuxt-ui-DMdbdSFy.js +0 -15
  133. package/dist-web/assets/vendor-reka-ui-8_x7iKfi.js +0 -15
  134. package/dist-web/assets/web-aZcioccr.js +0 -1
  135. /package/dist/{chat-command-3KUWKS53.mjs.map → chat-command-XPY3WURC.mjs.map} +0 -0
  136. /package/dist/{chunk-UVCH2ICD.mjs.map → chunk-BQ3QN4QT.mjs.map} +0 -0
  137. /package/dist/{chunk-DV4U34MR.mjs.map → chunk-DGF3S3TZ.mjs.map} +0 -0
  138. /package/dist/{chunk-3J7WTUEE.mjs.map → chunk-IGEHMLHM.mjs.map} +0 -0
  139. /package/dist/{chunk-BLOBEOCG.mjs.map → chunk-ISRLGLUL.mjs.map} +0 -0
  140. /package/dist/{chunk-23AIEWCD.mjs.map → chunk-JTOHAMIW.mjs.map} +0 -0
  141. /package/dist/{http-YR26GF7X.mjs.map → http-HV6XWU6X.mjs.map} +0 -0
  142. /package/dist/{import-Q3DUACU4.mjs.map → import-DP2XLZ2H.mjs.map} +0 -0
  143. /package/dist/{mcp-HTVZSGTI.mjs.map → mcp-QDPFBPGW.mjs.map} +0 -0
  144. /package/dist/{src-HJL7YZZJ.mjs.map → src-B3A2QHP5.mjs.map} +0 -0
  145. /package/dist/{stream-import-MXETSEPW.mjs.map → stream-import-KEGNP3QK.mjs.map} +0 -0
  146. /package/dist/{worker-runtime-DZQDL2E2.mjs.map → worker-runtime-MDYKX3BW.mjs.map} +0 -0
  147. /package/{dist-web → dist-cli-web}/assets/ActionToolsPanel-Dp-ojXjO.css +0 -0
  148. /package/{dist-web → dist-cli-web}/assets/PageHeader-XIXMTomn.css +0 -0
  149. /package/{dist-web → dist-cli-web}/assets/index-BfO_LpDv.css +0 -0
  150. /package/{dist-web → dist-cli-web}/assets/index-ByUaiVQK.css +0 -0
  151. /package/{dist-web → dist-cli-web}/assets/index-ZsZwPLWy.css +0 -0
  152. /package/{dist-web → dist-cli-web}/assets/logo-DXIuG_WE.svg +0 -0
  153. /package/{dist-web → dist-cli-web}/assets/relationship-galaxy-viewport-Cwfa51ER.js +0 -0
  154. /package/{dist-web → dist-cli-web}/assets/vendor-echarts-B-i_56Av.js +0 -0
  155. /package/{dist-web → dist-cli-web}/assets/vendor-echarts-wordcloud-Ca8n6qS6.js +0 -0
  156. /package/{dist-web → dist-cli-web}/assets/vendor-snapdom--nZvo8Sg.js +0 -0
  157. /package/{dist-web → dist-cli-web}/assets/vendor-zrender-5DcYjSZk.js +0 -0
  158. /package/{dist-web → dist-cli-web}/favicon.ico +0 -0
@@ -1,110 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-JyB6Cr8r.js","assets/vendor-reka-ui-8_x7iKfi.js","assets/vendor-nuxt-ui-DMdbdSFy.js","assets/vendor-snapdom--nZvo8Sg.js","assets/index-UJl03IYE.css","assets/EChartWordcloud-C5hLT1vS.js","assets/vendor-echarts-wordcloud-Ca8n6qS6.js","assets/vendor-echarts-B-i_56Av.js","assets/vendor-zrender-5DcYjSZk.js"])))=>i.map(i=>d[i]);
2
- import{W as Ua,X as ia,d as Ie,x as wt,m as Oe,u as ye,q as Je,S as Wt,j as ct,v as et,k as ca,Y as Yt,Z as da,z as ua,o as tt,T as nt,t as Ne,$ as Ba,a0 as gt,a1 as Fa,a2 as vt,a3 as Va,a4 as yt,B as Qt,A as $t,M as st,a5 as bt,a6 as Na,g as sa,b as Ha,s as Oa,D as Wa,a7 as Ya,a8 as Qa,y as Ka,w as Ga,r as Ja,a9 as Xa,aa as Za,n as es,ab as ts,ac as as,G as na}from"./index-JyB6Cr8r.js";import{D as Qe,w as de,c as x,r as f,x as Ve,d as ge,P as n,Z as i,U as u,Q as K,T as F,Y as mt,ag as e,_ as se,a0 as s,a1 as E,aa as Ke,$ as ee,u as a,ad as oe,ae as ce,bT as He,bU as rt,n as Fe,bS as lt,ak as Be,bV as ot,S as jt,a3 as Pt,b_ as ss,bX as it,F as Ct,O as dt,f as ns,bW as ma,aG as os}from"./vendor-reka-ui-8_x7iKfi.js";import{_ as _e,a as Pe,b as We,e as Kt,g as Gt,p as Jt,n as rs,d as St,l as ga,i as pt,q as ls,o as pa,r as is,j as cs,k as ds}from"./vendor-nuxt-ui-DMdbdSFy.js";import{a as ht,M as Xt,_ as us}from"./index-Bm_U0hSr.js";import{_ as at}from"./ThemeCard.vue_vue_type_script_setup_true_lang-CpNjFhpm.js";import{C as ms,a as Tt,_ as Ze,g as Ut}from"./base-DdQRTliS.js";import{f as gs,d as oa}from"./dateFormat-CX9atL2g.js";import{u as Mt,p as ha,z as va,j as Zt,v as ya,i as It,k as Dt,A as ps,m as hs,n as vs,t as ys}from"./vendor-echarts-B-i_56Av.js";import"./vendor-echarts-wordcloud-Ca8n6qS6.js";import{_ as kt}from"./LoadingState.vue_vue_type_script_setup_true_lang-8s6XRB3S.js";import{_ as fs}from"./TimeSelect.vue_vue_type_script_setup_true_lang-DtCKfbaz.js";import{P as xs}from"./PageHeader-D5QQI9io.js";const bs={none:[],qwen:["default","off","high"],deepseek_v4:["default","off","high","xhigh"],deepseek_hybrid:["default","off","auto"],o_series:["default","low","medium","high"],gpt5:["default","minimal","low","medium","high"],gpt5_1:["default","off","low","medium","high"],gpt5_2plus:["default","off","minimal","low","medium","high","xhigh"],grok:["default","low","high"],kimi:["default","off","auto","low","medium","high"],doubao:["default","off","auto","high"],hunyuan:["default","off","high"],gemini:["default","off","low","medium","high"],default:["default","off","low","medium","high"]},ra=/^(?!.*-non-reasoning\b)(o\d+(?:-[\w-]+)?|.*\b(?:reasoning|reasoner|thinking|think)\b.*|.*-[rR]\d+.*|.*\bqwq(?:-[\w-]+)?\b.*|.*\bhunyuan-t1(?:-[\w-]+)?\b.*|.*\bgrok-(?:3-mini|4|4-fast|build)(?:-[\w-]+)?\b.*)$/i;function ks(l,o){const t=o.toLowerCase(),c=l.toLowerCase();if(t.includes("-non-reasoning")||c==="anthropic")return"none";if(c==="gemini")return/gemini-(?:2\.5|3(?:\.\d+)?-(?:flash|pro)|flash-latest|pro-latest)/i.test(t)?"gemini":"none";if(c==="qwen"||/\bqwen|qwq/i.test(t))return"qwen";if(/deepseek[_-]v([4-9]|\d{2,})/i.test(t)||/deepseek-ai\/deepseek-r1/i.test(t))return"deepseek_v4";if(/deepseek[_-]chat|deepseek[_-]v3/i.test(t))return"deepseek_hybrid";if(c==="openai"||c==="openai-compatible"){if(/gpt-5\.[2-9]|gpt-5\.[1-9]\d/.test(t))return"gpt5_2plus";if(/gpt-5\.1/.test(t))return"gpt5_1";if(/gpt-5/.test(t))return"gpt5";if(/^o\d/.test(t))return"o_series"}return/^o\d/.test(t)?"o_series":/\bgrok-(?:3-mini|4|4-fast|build)\b/i.test(t)?"grok":/\bkimi-k(?:2-thinking|2\.[5-9]|[3-9])/i.test(t)||c==="kimi"&&/thinking/i.test(t)?"kimi":/\bdoubao-.*seed/i.test(t)||c==="doubao"&&/seed/i.test(t)?"doubao":/\bhunyuan-(?:t1|a13b)/i.test(t)?"hunyuan":c==="glm"||/\bglm-?(?:5|4\.[5-7]|z1|zero)/i.test(t)?"qwen":c==="siliconflow"&&/r[1-9]/i.test(t)?"deepseek_v4":c==="openrouter"?/deepseek.*(v[4-9]|r\d)/i.test(t)?"deepseek_v4":/deepseek[_-]?(chat|v3)/i.test(t)?"deepseek_hybrid":/\bgrok-(?:3-mini|4|4-fast|build)\b/i.test(t)?"grok":/\bkimi-k(?:2-thinking|2\.[5-9]|[3-9])/i.test(t)?"kimi":ra.test(t)?"default":"none":/\bmimo-v2/i.test(t)||/\bminimax-m[123]/i.test(t)||/\bseed-oss/i.test(t)?"deepseek_hybrid":/\bbaichuan-m[23]/i.test(t)||/\bmagistral/i.test(t)||/\bmistral-small-2603/i.test(t)||/\bstep-(?:3|r1-v-mini)/i.test(t)||/\bgemma-?4/i.test(t)||/\bpangu-pro-moe/i.test(t)||/\bsonar-deep-research/i.test(t)||/\bring-(?:1t|mini|flash)/i.test(t)?"default":/\bqwen|qwq/i.test(t)?"qwen":/deepseek[_-]?r\d|deepseek[_-]?v[4-9]/i.test(t)?"deepseek_v4":/^o\d/i.test(t)?"o_series":ra.test(t)?"default":"none"}function _s(l,o){const t=ks(l,o);return bs[t]}function ws(l,o,t,c="group",r="zh-CN"){const m=Ua(),{chatKey:g,state:d}=m.ensureSessionState({sessionId:l,sessionName:o,timeFilter:t,chatType:c,locale:r});return m.resetToSelectorOnEnter(g),m.applySessionAssistantSelection(g),{messages:Qe(d,"messages"),sourceMessages:Qe(d,"sourceMessages"),currentKeywords:Qe(d,"currentKeywords"),isLoadingSource:Qe(d,"isLoadingSource"),isAIThinking:Qe(d,"isAIThinking"),currentAIChatId:Qe(d,"currentAIChatId"),currentToolStatus:Qe(d,"currentToolStatus"),toolsUsedInCurrentRound:Qe(d,"toolsUsedInCurrentRound"),sessionTokenUsage:Qe(d,"sessionTokenUsage"),agentStatus:Qe(d,"agentStatus"),selectedAssistantId:Qe(d,"selectedAssistantId"),sendMessage:(p,h)=>m.sendMessage(g,p,h),editMessageAndRegenerate:(p,h,y)=>m.editMessageAndRegenerate(g,p,h,y),loadAIChat:p=>m.loadAIChat(g,p),startNewAIChat:p=>m.startNewAIChat(g,p),loadMoreSourceMessages:()=>m.loadMoreSourceMessages(),updateMaxMessages:()=>m.updateMaxMessages(),stopGeneration:()=>m.stopGeneration(g),selectAssistantForSession:p=>m.selectAssistantForSession(g,p)}}const zt=new Map;function $s(l,o,t){const{activeTab:c,isInitialLoad:r,currentSessionId:m,onTimeRangeChange:g}=t,d=f(null),p=f(null),h=f([]),y=x(()=>{const L=d.value;if(L)return{startTs:L.startTs,endTs:L.endTs}}),T=x(()=>{const L=d.value;return L?`${L.startTs}-${L.endTs}`:"init"}),M=x(()=>{const L=l.query,z=L.timeMode;return z?{mode:z,recentDays:L.timeDays?Number(L.timeDays):void 0,year:L.timeYear?Number(L.timeYear):void 0,quarterYear:L.timeYear?Number(L.timeYear):void 0,quarter:L.timeQuarter?Number(L.timeQuarter):void 0,customStart:L.timeStart||void 0,customEnd:L.timeEnd||void 0}:m.value&&zt.has(m.value)?zt.get(m.value):{mode:"recent",recentDays:365}});de([c,d],([L,z])=>{if(r.value||!z)return;const $=z.state,I={tab:L,timeMode:$.mode,timeDays:void 0,timeYear:void 0,timeQuarter:void 0,timeStart:void 0,timeEnd:void 0};$.mode==="recent"&&(I.timeDays=$.recentDays),$.mode==="year"&&(I.timeYear=$.year),$.mode==="quarter"&&(I.timeYear=$.quarterYear,I.timeQuarter=$.quarter),$.mode==="custom"&&(I.timeStart=$.customStart,I.timeEnd=$.customEnd),o.replace({query:{...l.query,...I}})}),de(d,L=>{!L||!m.value||(ia(),zt.set(m.value,L.state),g?.())},{immediate:!0});function C(){d.value=null,p.value=null,h.value=[]}return{timeRangeValue:d,fullTimeRange:p,availableYears:h,timeFilter:y,timeFilterKey:T,initialTimeState:M,resetTimeRange:C}}function Cs(l){return l.content.trim()?l.content:l.contentBlocks?.filter(t=>t.type==="text"&&!!t.text).map(t=>t.text).join("")??""}function Bt(l){return l.flatMap(o=>{if(o.role!=="user"&&o.role!=="assistant")return[];const t=Cs(o);return t.trim()?[{role:o.role,content:t,timestamp:o.timestamp}]:[]})}function Ss(l){return Bt(l).length>0}function Ts(l,o,t,c){const r=[];r.push(`# ${l}`),r.push(""),r.push(`> ${c.createdAt}: ${Ie(t).format("YYYY-MM-DD HH:mm:ss")}`),r.push(""),r.push("---"),r.push("");for(const m of o){const g=Ie(m.timestamp).format("YYYY-MM-DD HH:mm:ss"),d=m.role==="user"?c.user:c.assistant;r.push(`### ${d}`),r.push(`*${g}*`),r.push(""),r.push(m.content),r.push(""),r.push("---"),r.push("")}return r.join(`
3
- `)}function Ms(l,o,t,c){const r=[];r.push(`${l}`),r.push(`${c.createdAt}: ${Ie(t).format("YYYY-MM-DD HH:mm:ss")}`),r.push(""),r.push("=".repeat(50)),r.push("");for(const m of o){const g=Ie(m.timestamp).format("YYYY-MM-DD HH:mm:ss"),d=m.role==="user"?c.user:c.assistant;r.push(`[${d}] ${g}`),r.push(""),r.push(m.content),r.push(""),r.push("-".repeat(50)),r.push("")}return r.join(`
4
- `)}function Is(l){return l.replace(/[/\\?%*:|"<>]/g,"_")}async function Ds(l,o,t,c,r){if(o.length===0)return{success:!1,error:"No messages to export"};let m,g;const d=Ie(t).format("YYYYMMDD_HHmmss"),p=Is(l);c==="markdown"?(m=Ts(l,o,t,r),g=`${p}_${d}.md`):(m=Ms(l,o,t,r),g=`${p}_${d}.txt`);const h=`data:text/plain;charset=utf-8,${encodeURIComponent(m)}`,{useCacheService:y}=await wt(async()=>{const{useCacheService:M}=await import("./index-JyB6Cr8r.js").then(C=>C.ae);return{useCacheService:M}},__vite__mapDeps([0,1,2,3,4]));return await y().saveToDownloads(g,h)}function Ls(l){const o=l.columns.join(","),t=l.rows.map(c=>c.map(r=>r===null?"":`"${String(r).replace(/"/g,'""')}"`).join(","));return[o,...t].join(`
5
- `)}function As(l){const o=l.rows.map(t=>{const c={};return l.columns.forEach((r,m)=>{c[r]=t[m]}),c});return JSON.stringify(o,null,2)}async function zs(l,o){if(l.rows.length===0)return{success:!1,error:"No data to export"};const c=`sql_result_${Ie().format("YYYYMMDD_HHmmss")}.${o}`;let r,m;o==="json"?(r=As(l),m="application/json"):(r=Ls(l),m="text/csv");const g=`data:${m};charset=utf-8,${encodeURIComponent(r)}`,{useCacheService:d}=await wt(async()=>{const{useCacheService:h}=await import("./index-JyB6Cr8r.js").then(y=>y.ae);return{useCacheService:h}},__vite__mapDeps([0,1,2,3,4]));return await d().saveToDownloads(c,g)}function fk(l){const{route:o,router:t,currentSessionId:c,selectSession:r,defaultTab:m,validTabIds:g}=l,d=f(!0),p=f(!0),h=f(null),y=f([]),T=f([]),M=f([]),C=f([]);function L(){const k=o.query.tab;return k&&g.includes(k)?k:m}const z=f(L()),{timeRangeValue:$,fullTimeRange:I,availableYears:w,timeFilter:S,initialTimeState:v}=$s(o,t,{activeTab:z,isInitialLoad:p,currentSessionId:c,onTimeRangeChange:()=>j()});function _(){const k=o.params.id;k&&(r(k),c.value!==k&&t.replace("/"))}async function A(){if(c.value)try{const k=await Oe().getSession(c.value);h.value=k}catch(k){console.error("加载基础数据失败:",k)}}async function j(){if(c.value){d.value=!0;try{const k=S.value,b=Oe(),[q,Y,W,J]=await Promise.all([b.getMemberActivity(c.value,k),b.getHourlyActivity(c.value,k),b.getDailyActivity(c.value,k),b.getMessageTypeDistribution(c.value,k)]);y.value=q,T.value=Y,M.value=W,C.value=J}catch(k){console.error("加载分析数据失败:",k)}finally{d.value=!1}}}async function U(){c.value&&(p.value=!0,await A(),p.value=!1)}return de(()=>o.params.id,()=>{z.value=L(),_()}),de(()=>o.query.tab,()=>{z.value=L()}),de(c,()=>{ia(),U()},{immediate:!0}),Ve(()=>{_()}),{activeTab:z,isLoading:d,isInitialLoad:p,session:h,memberActivity:y,hourlyActivity:T,dailyActivity:M,messageTypes:C,timeRangeValue:$,fullTimeRange:I,availableYears:w,timeFilter:S,initialTimeState:v,syncSession:_,loadData:U,loadAnalysisData:j}}const qs={class:"pointer-events-none absolute right-3 top-3 z-50 opacity-0 transition-opacity duration-200 group-hover/card:pointer-events-auto group-hover/card:opacity-100"},Rs=ge({__name:"CardCaptureOverlay",setup(l){return(o,t)=>(n(),i("div",qs,[u(ht,{type:"element","target-selector":"[data-capturable-card]",size:"xs"})]))}}),Lt=ge({__name:"ReportCard",setup(l){return(o,t)=>(n(),K(at,{"data-capturable-card":"",class:"group/card relative isolate flex flex-col"},{default:F(()=>[u(ms),u(Rs),mt(o.$slots,"default")]),_:3}))}}),Es={class:"flex items-center justify-between"},js={class:"font-semibold text-gray-900 dark:text-white whitespace-nowrap"},Ps={key:0,class:"mt-1 text-sm text-gray-500 dark:text-gray-400"},Us={class:"flex items-center gap-2"},Bs={key:0,class:"pointer-events-none opacity-0 transition-opacity duration-200 group-hover/card:pointer-events-auto group-hover/card:opacity-100"},Ye=ge({__name:"SectionCard",props:{title:{},description:{},capturable:{type:Boolean,default:!0},showDivider:{type:Boolean,default:!0},scrollable:{type:Boolean,default:!1},maxHeightVh:{default:60}},setup(l){const o=l,t=x(()=>{if(o.scrollable)return{maxHeight:`${o.maxHeightVh}vh`,overflowY:"auto"}});return(c,r)=>(n(),K(at,{class:"group/card","data-section-card":""},{default:F(()=>[e("div",{class:se(["px-5 py-3",{"border-b border-gray-200 dark:border-white/5":l.showDivider&&c.$slots.default}])},[e("div",Es,[e("div",null,[e("p",js,s(l.title),1),l.description?(n(),i("p",Ps,s(l.description),1)):E("",!0)]),e("div",Us,[mt(c.$slots,"headerRight"),l.capturable?(n(),i("div",Bs,[u(ht,{type:"element","target-selector":"[data-section-card]",size:"xs"})])):E("",!0)])])],2),l.scrollable?(n(),i("div",{key:0,style:Ke(t.value)},[mt(c.$slots,"default")],4)):mt(c.$slots,"default",{key:1}),mt(c.$slots,"footer")]),_:3}))}}),Fs={class:"flex items-start justify-between"},Vs={class:"min-w-0 flex-1"},Ns={class:"text-sm font-medium text-gray-500 dark:text-gray-400"},Hs={key:1,class:"text-xl"},Os={key:0,class:"mt-4 flex items-center text-sm"},Ws={class:"text-gray-500 dark:text-gray-400"},Xe=ge({__name:"StatCard",props:{label:{},value:{},valueColor:{},subtext:{},icon:{},iconBg:{}},setup(l){const o={pink:"text-pink-600 dark:text-pink-400",amber:"text-amber-600 dark:text-amber-400",blue:"text-blue-600 dark:text-blue-400",green:"text-green-600 dark:text-green-400",red:"text-red-600 dark:text-red-400",gray:"text-gray-900 dark:text-white"},t={pink:"bg-pink-100 dark:bg-pink-500/10",amber:"bg-amber-100 dark:bg-amber-500/10",blue:"bg-blue-100 dark:bg-blue-500/10",green:"bg-green-100 dark:bg-green-500/10",red:"bg-red-100 dark:bg-red-500/10",gray:"bg-gray-100 dark:bg-white/5"};return(c,r)=>{const m=_e;return n(),K(at,{class:"p-5"},{default:F(()=>[e("div",Fs,[e("div",Vs,[e("p",Ns,s(l.label),1),e("p",{class:se(["mt-2 truncate text-2xl font-bold tracking-tight",l.valueColor?o[l.valueColor]:"text-gray-900 dark:text-white"])},s(l.value),3)]),l.icon?(n(),i("div",{key:0,class:se(["ml-4 flex h-10 w-10 shrink-0 items-center justify-center rounded-xl",t[l.iconBg||"gray"]])},[l.icon.startsWith("i-")?(n(),K(m,{key:0,name:l.icon,class:"h-5 w-5"},null,8,["name"])):(n(),i("span",Hs,s(l.icon),1))],2)):E("",!0)]),l.subtext||c.$slots.subtext?(n(),i("div",Os,[mt(c.$slots,"subtext",{},()=>[e("span",Ws,s(l.subtext),1)])])):E("",!0)]),_:3})}}}),Ys={key:0,class:"mb-2 block text-2xl"},xk=ge({__name:"EmptyState",props:{text:{},icon:{},padding:{}},setup(l){const o={sm:"px-4 py-4",md:"px-5 py-8",lg:"px-6 py-12"};return(t,c)=>(n(),i("div",{class:se(["text-center text-sm text-gray-400",o[l.padding||"md"]])},[l.icon?(n(),i("span",Ys,s(l.icon),1)):E("",!0),ee(" "+s(l.text||"暂无数据"),1)],2))}}),Qs={"zh-CN":{message:"消息记录",member:"成员",meta:"群信息",member_name_history:"昵称历史"},"en-US":{message:"Messages",member:"Members",meta:"Chat Info",member_name_history:"Nickname History"}},Ft={"zh-CN":{message:{id:"消息ID",sender_id:"发送者ID",sender_account_name:"发送时账号名",sender_group_nickname:"发送时群昵称",ts:"时间戳(秒)",type:"消息类型",content:"消息内容"},member:{id:"成员ID",platform_id:"平台ID",account_name:"账号名称",group_nickname:"群昵称",aliases:"自定义别名"},meta:{name:"群名称",platform:"平台",type:"聊天类型",imported_at:"导入时间"},member_name_history:{id:"记录ID",member_id:"成员ID",name_type:"名称类型",name:"昵称值",start_ts:"开始时间",end_ts:"结束时间"}},"en-US":{message:{id:"Message ID",sender_id:"Sender ID",sender_account_name:"Sender Account",sender_group_nickname:"Sender Nickname",ts:"Timestamp (sec)",type:"Message Type",content:"Content"},member:{id:"Member ID",platform_id:"Platform ID",account_name:"Account Name",group_nickname:"Group Nickname",aliases:"Custom Aliases"},meta:{name:"Chat Name",platform:"Platform",type:"Chat Type",imported_at:"Imported At"},member_name_history:{id:"Record ID",member_id:"Member ID",name_type:"Name Type",name:"Nickname",start_ts:"Start Time",end_ts:"End Time"}}};function Vt(l,o="zh-CN"){return Qs[fa(o)]?.[l]||l}function ea(l,o,t="zh-CN"){return Ft[fa(t)]?.[l]?.[o]||o}function fa(l){return l.startsWith("zh")?"zh-CN":"en-US"}const Ks={key:0,class:"text-xs font-medium text-gray-500 dark:text-gray-400"},Gs={key:0,class:"flex-1 overflow-y-auto p-2"},Js=["onClick"],Xs={class:"text-sm font-medium text-gray-700 dark:text-gray-300"},Zs={class:"flex-1 truncate text-right text-xs text-gray-400"},en={key:0,class:"ml-4 mt-1 space-y-0.5"},tn=["title","onDblclick"],an={class:"font-mono text-gray-700 dark:text-gray-300"},sn={class:"flex-1 truncate text-right text-[10px] text-gray-400"},nn={key:1,class:"flex flex-1 flex-col items-center gap-1 overflow-y-auto px-2 pb-2"},on=["title","onClick"],rn=ge({__name:"SchemaPanel",props:{sessionId:{}},emits:["insertColumn"],setup(l,{expose:o,emit:t}){const{t:c,locale:r}=ye(),m=l,g=t,d=f(!1),p=f([]),h=f(new Set);async function y(){try{p.value=await Oe().getSchema(m.sessionId),p.value.forEach(L=>h.value.add(L.name))}catch(L){console.error("加载 Schema 失败:",L)}}function T(L){h.value.has(L)?h.value.delete(L):h.value.add(L)}function M(L){d.value=!1,h.value.add(L)}function C(L,z){g("insertColumn",L,z)}return o({loadSchema:y,schema:p}),Ve(()=>{y()}),(L,z)=>{const $=_e,I=Pe;return n(),i("div",{class:se(["m-3 flex h-[calc(100%-1.5rem)] shrink-0 flex-col overflow-hidden rounded-lg bg-white transition-all duration-300 ease-in-out dark:bg-sidebar-dark",d.value?"w-14":"w-56"])},[e("div",{class:se(["flex items-center",d.value?"justify-center px-2 pb-2 pt-5":"justify-between border-b border-gray-200 py-2 pl-3 pr-2 dark:border-gray-800"])},[d.value?E("",!0):(n(),i("span",Ks,s(a(c)("ai.sqlLab.schema.tables")),1)),d.value?(n(),i("button",{key:2,type:"button",class:"group relative flex h-9 w-9 cursor-pointer items-center justify-center rounded-full hover:bg-gray-200/60 dark:hover:bg-white/[0.06]",onClick:z[1]||(z[1]=w=>d.value=!d.value)},[u($,{name:"i-lucide-panel-right-open",class:"size-4 scale-x-[-1]"})])):(n(),K(I,{key:1,color:"neutral",variant:"ghost",size:"sm",class:"group flex h-9 w-9 cursor-pointer items-center justify-center rounded-full hover:bg-gray-200/60 dark:hover:bg-white/[0.06]",onClick:z[0]||(z[0]=w=>d.value=!d.value)},{default:F(()=>[u($,{name:"i-lucide-panel-right",class:"size-4 scale-x-[-1] group-hover:hidden"}),u($,{name:"i-lucide-panel-right-close",class:"size-4 hidden scale-x-[-1] group-hover:block"})]),_:1}))],2),d.value?(n(),i("div",nn,[(n(!0),i(oe,null,ce(p.value,w=>(n(),i("button",{key:w.name,class:"flex h-10 w-10 items-center justify-center rounded-lg text-gray-600 transition-colors hover:bg-gray-200/40 hover:text-primary-600 dark:text-gray-300 dark:hover:bg-white/[0.06] dark:hover:text-primary-400",title:`${a(Vt)(w.name,a(r))} (${w.name})`,onClick:S=>M(w.name)},[u($,{name:"i-heroicons-table-cells",class:"h-5 w-5"})],8,on))),128))])):(n(),i("div",Gs,[(n(!0),i(oe,null,ce(p.value,w=>(n(),i("div",{key:w.name,class:"mb-2"},[e("button",{class:"flex w-full items-center gap-1 rounded px-2 py-1.5 text-left transition-colors hover:bg-gray-100 dark:hover:bg-gray-800",onClick:S=>T(w.name)},[u($,{name:h.value.has(w.name)?"i-heroicons-chevron-down":"i-heroicons-chevron-right",class:"h-3 w-3 shrink-0 text-gray-400"},null,8,["name"]),u($,{name:"i-heroicons-table-cells",class:"h-4 w-4 shrink-0 text-pink-500"}),e("span",Xs,s(w.name),1),e("span",Zs,s(a(Vt)(w.name,a(r))),1)],8,Js),h.value.has(w.name)?(n(),i("div",en,[(n(!0),i(oe,null,ce(w.columns,S=>(n(),i("button",{key:S.name,class:"flex w-full items-center gap-2 rounded px-2 py-1 text-left text-xs transition-colors hover:bg-gray-100 dark:hover:bg-gray-800",title:a(c)("ai.sqlLab.schema.doubleClickToInsert"),onDblclick:v=>C(w.name,S.name)},[S.pk?(n(),K($,{key:0,name:"i-heroicons-key",class:"h-3 w-3 shrink-0 text-yellow-500",title:a(c)("ai.sqlLab.schema.primaryKey")},null,8,["title"])):E("",!0),e("span",an,s(S.name),1),e("span",sn,s(a(ea)(w.name,S.name,a(r))),1)],40,tn))),128))])):E("",!0)]))),128))]))],2)}}}),ln={class:"max-h-[70vh] overflow-hidden p-6"},cn={class:"mb-4 flex items-center gap-2"},dn={class:"text-lg font-semibold text-gray-900 dark:text-white"},un={key:0,class:"max-h-[50vh] space-y-3 overflow-y-auto pr-2"},mn={class:"mb-2 flex items-start justify-between gap-2"},gn={class:"flex-1 text-sm font-medium text-gray-700 dark:text-gray-300"},pn={class:"shrink-0 text-xs text-gray-400"},hn={class:"mb-2 rounded bg-white p-2 dark:bg-gray-800"},vn={class:"whitespace-pre-wrap break-all font-mono text-xs text-gray-600 dark:text-gray-400"},yn={key:0,class:"mb-2 text-xs text-gray-500 dark:text-gray-400"},fn={class:"flex justify-end gap-2"},xn={key:1,class:"py-8 text-center text-gray-500 dark:text-gray-400"},bn={class:"text-sm"},kn={class:"mt-4 flex justify-end"},_n=ge({__name:"AIHistoryModal",props:{open:{type:Boolean},history:{}},emits:["update:open","execute","delete"],setup(l,{emit:o}){const{t}=ye(),c=o;function r(m){const g=new Date(m),d=new Date,p=d.getTime()-m;return p<6e4?t("ai.sqlLab.history.justNow"):p<36e5?t("ai.sqlLab.history.minutesAgo",{count:Math.floor(p/6e4)}):p<864e5?t("ai.sqlLab.history.hoursAgo",{count:Math.floor(p/36e5)}):g.toDateString()===d.toDateString()?t("ai.sqlLab.history.today"):`${g.getMonth()+1}/${g.getDate()}`}return(m,g)=>{const d=_e,p=Pe,h=We;return n(),K(h,{open:l.open,ui:{content:"max-w-5xl"},"onUpdate:open":g[1]||(g[1]=y=>c("update:open",y))},{content:F(()=>[e("div",ln,[e("div",cn,[u(d,{name:"i-heroicons-clock",class:"h-5 w-5 text-pink-500"}),e("h3",dn,s(a(t)("ai.sqlLab.history.title")),1)]),l.history.length>0?(n(),i("div",un,[(n(!0),i(oe,null,ce(l.history,y=>(n(),i("div",{key:y.id,class:"rounded-lg border border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-page-dark"},[e("div",mn,[e("p",gn,s(y.prompt),1),e("span",pn,s(r(y.timestamp)),1)]),e("div",hn,[e("pre",vn,s(y.sql),1)]),y.explanation?(n(),i("p",yn,s(y.explanation),1)):E("",!0),e("div",fn,[u(p,{variant:"ghost",size:"xs",color:"error",onClick:T=>c("delete",y.id)},{default:F(()=>[u(d,{name:"i-heroicons-trash",class:"h-3.5 w-3.5"})]),_:1},8,["onClick"]),u(p,{size:"xs",onClick:T=>c("execute",y)},{default:F(()=>[u(d,{name:"i-heroicons-play",class:"mr-1 h-3.5 w-3.5"}),ee(" "+s(a(t)("ai.sqlLab.history.execute")),1)]),_:1},8,["onClick"])])]))),128))])):(n(),i("div",xn,[u(d,{name:"i-heroicons-clock",class:"mx-auto mb-2 h-8 w-8 text-gray-300 dark:text-gray-600"}),e("p",bn,s(a(t)("ai.sqlLab.history.empty")),1)])),e("div",kn,[u(p,{variant:"ghost",onClick:g[0]||(g[0]=y=>c("update:open",!1))},{default:F(()=>[ee(s(a(t)("common.close")),1)]),_:1})])])]),_:1},8,["open"])}}}),wn={class:"flex flex-1 flex-col overflow-hidden"},$n={key:0,class:"border-b border-red-200 bg-red-50 p-4 dark:border-red-900 dark:bg-red-950"},Cn={class:"flex items-start gap-2"},Sn={class:"min-w-0 flex-1"},Tn={class:"text-sm font-medium text-red-800 dark:text-red-200"},Mn={class:"mt-1 break-all font-mono text-xs text-red-600 dark:text-red-400"},In={key:1,class:"flex items-center justify-between border-b border-gray-200 bg-gray-50 px-4 py-2 dark:border-gray-800 dark:bg-page-dark"},Dn={class:"flex items-center gap-4 text-sm text-gray-600 dark:text-gray-400"},Ln={class:"flex cursor-pointer items-center gap-1.5"},An={class:"text-xs"},zn={class:"flex items-center gap-2"},qn={key:2,class:"flex-1 overflow-auto"},Rn={class:"min-w-full divide-y divide-gray-200 dark:divide-gray-700"},En={class:"sticky top-0 bg-gray-100 dark:bg-page-dark"},jn=["onClick"],Pn={class:"flex items-center gap-1"},Un={class:"flex flex-col"},Bn={class:"text-gray-700 dark:text-gray-300"},Fn={key:0,class:"font-mono text-[10px] text-gray-400"},Vn={key:0,class:"sticky right-0 w-12 bg-gray-100 px-2 py-2 dark:bg-page-dark"},Nn={class:"divide-y divide-gray-200 bg-white dark:divide-gray-700 dark:bg-page-dark"},Hn=["title"],On={key:0,class:"sticky right-0 w-12 bg-white px-2 py-2 dark:bg-page-dark"},Wn={key:3,class:"flex shrink-0 items-center gap-4 border-t border-gray-200 bg-gray-50 px-4 py-2 dark:border-gray-800 dark:bg-page-dark"},Yn={class:"flex items-center gap-1"},Qn={class:"mx-2 text-xs text-gray-600 dark:text-gray-400"},Kn={class:"flex items-center gap-2 text-xs text-gray-500 dark:text-gray-400"},Gn={key:4,class:"flex flex-1 items-center justify-center text-gray-500 dark:text-gray-400"},Jn={class:"text-center"},Xn={class:"mt-2 text-sm"},Zn={key:5,class:"flex flex-1 items-center justify-center text-gray-500 dark:text-gray-400"},eo={class:"text-center"},to={class:"mt-2 text-sm"},ao={class:"mt-1 text-xs text-gray-400"},so={class:"max-h-[70vh] overflow-hidden p-6"},no={class:"mb-4 flex items-center gap-2"},oo={class:"text-lg font-semibold text-gray-900 dark:text-white"},ro={key:0,class:"flex items-center justify-center py-8"},lo={class:"ml-2 text-sm text-gray-500"},io={key:1,class:"max-h-[50vh] overflow-y-auto"},co=["innerHTML"],uo={key:0,class:"mt-2 flex items-center text-xs text-gray-400"},mo={key:2,class:"rounded-lg bg-red-50 p-4 dark:bg-red-950"},go={class:"text-sm text-red-600 dark:text-red-400"},po={class:"mt-4 flex justify-end gap-2"},ho=ge({__name:"ResultTable",props:{result:{},error:{},sql:{},prompt:{}},setup(l,{expose:o}){const{t,locale:c}=ye(),r=Je(),m=Wt(),g=ct(),{aiGlobalSettings:d}=et(m),p=[/^ts$/i,/^timestamp$/i,/^time$/i,/_at$/i,/_ts$/i,/_time$/i,/^date$/i];function h(ne){return p.some(re=>re.test(ne))}function y(ne){if(typeof ne!="number"||!Number.isFinite(ne))return!1;const re=946684800,ve=4102444800,Me=re*1e3,$e=ve*1e3;return ne>=re&&ne<=ve||ne>=Me&&ne<=$e}function T(ne){const ve=ne>1e10?ne:ne*1e3;return Ie(ve).format("YYYY-MM-DD HH:mm:ss")}const M=[/^id$/i,/^message_id$/i,/^msg_id$/i,/^msgid$/i];function C(ne){return ne.findIndex(re=>M.some(ve=>ve.test(re)))}function L(ne){g.openChatRecordDrawer({scrollToMessageId:ne})}const z=new Xt({html:!1,breaks:!0,linkify:!0,typographer:!0}),$=l,I=f(null),w=f("asc"),S=f(1),v=f(100),_=[50,100,200,500],A=f(localStorage.getItem("sql-lab-readable-time")!=="false");function j(){A.value=!A.value,localStorage.setItem("sql-lab-readable-time",String(A.value))}const U=f(!1),k=f(!1),b=f(""),q=f(null),Y=f(""),W=f(!1);function J(ne){const re=ne.split("."),ve=re.length>1?re[re.length-1]:ne,Me=Ft[c.value]||Ft["zh-CN"];for(const $e of Object.values(Me))if($e[ve])return $e[ve];return null}const me=x(()=>{if(!$.result||!I.value)return $.result?.rows||[];const ne=$.result.columns.indexOf(I.value);return ne===-1?$.result.rows:[...$.result.rows].sort((re,ve)=>{const Me=re[ne],$e=ve[ne];if(Me===null)return 1;if($e===null)return-1;if(typeof Me=="number"&&typeof $e=="number")return w.value==="asc"?Me-$e:$e-Me;const qe=String(Me).localeCompare(String($e));return w.value==="asc"?qe:-qe})}),pe=x(()=>$.result?Math.ceil(me.value.length/v.value):0),X=x(()=>{const ne=(S.value-1)*v.value,re=ne+v.value;return me.value.slice(ne,re)}),N=x(()=>$.result?C($.result.columns):-1),ae=x(()=>N.value!==-1);function ue(ne){I.value===ne?w.value=w.value==="asc"?"desc":"asc":(I.value=ne,w.value="asc"),S.value=1}function he(ne){v.value=ne,S.value=1}function G(ne,re){return ne===null?"NULL":typeof ne=="object"?JSON.stringify(ne):A.value&&re&&h(re)&&y(ne)?T(ne):String(ne)}async function O(){if(!(!$.result||W.value)){W.value=!0;try{const ne=d.value.sqlExportFormat??"csv",re=await zs({columns:$.result.columns,rows:$.result.rows},ne);if(re.success&&re.filePath){const ve=re.filePath.split("/").pop()||re.filePath;r.add({title:t("common.exportSuccess"),description:ve,color:"primary",actions:[{label:t("common.openFolder"),onClick:()=>{ca().showInFolder(re.filePath)}}]})}else r.fail(t("common.exportFailed"),{description:re.error})}catch(ne){console.error("导出失败:",ne),r.fail(t("common.exportFailed"),{description:String(ne)})}finally{W.value=!1}}}function H(){I.value=null,w.value="asc",S.value=1}function le(){if(!$.result)return"";const ne=50,re=$.result.rows.slice(0,ne),ve=$.result.columns.join(" | "),Me=$.result.columns.map(()=>"---").join(" | "),$e=re.map(Ae=>Ae.map(Se=>Se===null?"NULL":String(Se).slice(0,50)).join(" | "));let qe=`| ${ve} |
6
- | ${Me} |
7
- `;return qe+=$e.map(Ae=>`| ${Ae} |`).join(`
8
- `),$.result.rows.length>ne&&(qe+=`
9
-
10
- (仅展示前 ${ne} 行,共 ${$.result.rowCount} 行)`),qe}async function fe(){U.value=!0,b.value="",q.value=null,Y.value="",await xe()}async function xe(){if(!await Yt().hasConfig()){q.value=t("common.errorNoAIConfig");return}k.value=!0,q.value=null,Y.value="";try{const re=le();let ve="";$.prompt&&(ve=`用户的查询意图:${$.prompt}
11
-
12
- `),$.sql&&(ve+=`执行的 SQL 语句:
13
- \`\`\`sql
14
- ${$.sql}
15
- \`\`\`
16
-
17
- `);const Me=`请分析以下 SQL 查询结果,用简洁的中文总结关键发现和洞察。
18
-
19
- ${ve}查询结果(共 ${$.result?.rowCount||0} 行):
20
-
21
- ${re}
22
-
23
- 请提供:
24
- 1. 结果概述(一句话总结)
25
- 2. 关键发现(2-4 个要点)
26
- 3. 如有明显的趋势或异常,请指出`,$e=await da().chatStream([{role:"system",content:"你是一个数据分析专家,擅长从查询结果中提取关键信息和洞察。请用简洁清晰的中文回答。"},{role:"user",content:Me}],{temperature:.3,maxTokens:1e3},qe=>{qe.content&&(Y.value+=qe.content)});$e.success?b.value=Y.value:q.value=$e.error||t("ai.sqlLab.result.errorSummary")}catch(re){q.value=re.message||String(re)}finally{k.value=!1}}function ke(){U.value=!1,b.value="",q.value=null,Y.value=""}return o({resetSort:H}),(ne,re)=>{const ve=_e,Me=Kt,$e=Pe,qe=Gt,Ae=We;return n(),i("div",wn,[l.error?(n(),i("div",$n,[e("div",Cn,[u(ve,{name:"i-heroicons-exclamation-circle",class:"mt-0.5 h-5 w-5 shrink-0 text-red-500"}),e("div",Sn,[e("p",Tn,s(a(t)("ai.sqlLab.result.queryError")),1),e("p",Mn,s(l.error),1)])])])):E("",!0),l.result?(n(),i("div",In,[e("div",Dn,[e("label",Ln,[u(Me,{"model-value":A.value,size:"xs","onUpdate:modelValue":j},null,8,["model-value"]),e("span",An,s(a(t)("ai.sqlLab.result.readableTime")),1)]),re[5]||(re[5]=e("span",{class:"text-gray-300 dark:text-gray-600"},"|",-1)),e("span",null,[u(ve,{name:"i-heroicons-table-cells",class:"mr-1 inline h-4 w-4"}),ee(" "+s(a(t)("ai.sqlLab.result.rows",{count:l.result.rowCount})),1)]),e("span",null,[u(ve,{name:"i-heroicons-clock",class:"mr-1 inline h-4 w-4"}),ee(" "+s(l.result.duration)+" ms ",1)])]),e("div",zn,[u($e,{variant:"ghost",size:"xs",onClick:fe},{default:F(()=>[u(ve,{name:"i-heroicons-sparkles",class:"mr-1 h-4 w-4"}),ee(" "+s(a(t)("ai.sqlLab.result.summarize")),1)]),_:1}),u($e,{variant:"ghost",size:"xs",loading:W.value,onClick:O},{default:F(()=>[u(ve,{name:"i-heroicons-arrow-down-tray",class:"mr-1 h-4 w-4"}),ee(" "+s(a(t)("common.export")),1)]),_:1},8,["loading"])])])):E("",!0),l.result&&l.result.rows.length>0?(n(),i("div",qn,[e("table",Rn,[e("thead",En,[e("tr",null,[(n(!0),i(oe,null,ce(l.result.columns,(Se,Re)=>(n(),i("th",{key:Re,class:"cursor-pointer whitespace-nowrap px-4 py-2 text-left text-xs font-medium transition-colors hover:bg-gray-200 dark:hover:bg-gray-700",onClick:je=>ue(Se)},[e("div",Pn,[e("div",Un,[e("span",Bn,s(J(Se)||Se),1),J(Se)?(n(),i("span",Fn,s(Se),1)):E("",!0)]),I.value===Se?(n(),K(ve,{key:0,name:w.value==="asc"?"i-heroicons-chevron-up":"i-heroicons-chevron-down",class:"h-3 w-3 text-gray-500"},null,8,["name"])):E("",!0)])],8,jn))),128)),ae.value?(n(),i("th",Vn)):E("",!0)])]),e("tbody",Nn,[(n(!0),i(oe,null,ce(X.value,(Se,Re)=>(n(),i("tr",{key:Re,class:"hover:bg-gray-50 dark:hover:bg-gray-800"},[(n(!0),i(oe,null,ce(Se,(je,Ue)=>(n(),i("td",{key:Ue,class:se(["max-w-xs truncate whitespace-nowrap px-4 py-2 font-mono text-sm text-gray-700 dark:text-gray-300",{"text-gray-400 italic":je===null}]),title:G(je,l.result.columns[Ue])},s(G(je,l.result.columns[Ue])),11,Hn))),128)),ae.value?(n(),i("td",On,[u($e,{icon:"i-heroicons-chat-bubble-left-right",color:"neutral",variant:"ghost",size:"xs",title:a(t)("ai.sqlLab.result.viewChat"),onClick:je=>L(Se[N.value])},null,8,["title","onClick"])])):E("",!0)]))),128))])])])):E("",!0),l.result&&l.result.rows.length>0&&pe.value>1?(n(),i("div",Wn,[e("div",Yn,[u($e,{icon:"i-heroicons-chevron-double-left",variant:"ghost",size:"xs",disabled:S.value===1,onClick:re[0]||(re[0]=Se=>S.value=1)},null,8,["disabled"]),u($e,{icon:"i-heroicons-chevron-left",variant:"ghost",size:"xs",disabled:S.value===1,onClick:re[1]||(re[1]=Se=>S.value--)},null,8,["disabled"]),e("span",Qn,s(S.value)+" / "+s(pe.value),1),u($e,{icon:"i-heroicons-chevron-right",variant:"ghost",size:"xs",disabled:S.value>=pe.value,onClick:re[2]||(re[2]=Se=>S.value++)},null,8,["disabled"]),u($e,{icon:"i-heroicons-chevron-double-right",variant:"ghost",size:"xs",disabled:S.value>=pe.value,onClick:re[3]||(re[3]=Se=>S.value=pe.value)},null,8,["disabled"])]),e("div",Kn,[e("span",null,s(a(t)("ai.sqlLab.result.pageSize")),1),u(qe,{"model-value":v.value,items:_.map(Se=>({label:String(Se),value:Se})),size:"xs",class:"w-20","onUpdate:modelValue":he},null,8,["model-value","items"])])])):E("",!0),l.result&&l.result.rows.length===0?(n(),i("div",Gn,[e("div",Jn,[u(ve,{name:"i-heroicons-inbox",class:"mx-auto h-12 w-12 text-gray-300 dark:text-gray-600"}),e("p",Xn,s(a(t)("ai.sqlLab.result.emptyResult")),1)])])):E("",!0),!l.result&&!l.error?(n(),i("div",Zn,[e("div",eo,[u(ve,{name:"i-heroicons-command-line",class:"mx-auto h-12 w-12 text-gray-300 dark:text-gray-600"}),e("p",to,s(a(t)("ai.sqlLab.result.initialState")),1),e("p",ao,s(a(t)("ai.sqlLab.result.initialHint")),1)])])):E("",!0),u(Ae,{open:U.value,"onUpdate:open":re[4]||(re[4]=Se=>U.value=Se)},{content:F(()=>[e("div",so,[e("div",no,[u(ve,{name:"i-heroicons-sparkles",class:"h-5 w-5 text-pink-500"}),e("h3",oo,s(a(t)("ai.sqlLab.result.summaryTitle")),1)]),k.value&&!Y.value?(n(),i("div",ro,[u(ve,{name:"i-heroicons-arrow-path",class:"h-6 w-6 animate-spin text-pink-500"}),e("span",lo,s(a(t)("ai.sqlLab.result.analyzing")),1)])):Y.value||b.value?(n(),i("div",io,[e("div",{class:"prose prose-sm max-w-none rounded-lg bg-gray-50 p-4 dark:prose-invert dark:bg-page-dark",innerHTML:a(z).render(Y.value||b.value)},null,8,co),k.value?(n(),i("div",uo,[u(ve,{name:"i-heroicons-arrow-path",class:"mr-1 h-3 w-3 animate-spin"}),ee(" "+s(a(t)("common.generating")),1)])):E("",!0)])):E("",!0),q.value?(n(),i("div",mo,[e("p",go,s(q.value),1)])):E("",!0),e("div",po,[!k.value&&b.value?(n(),K($e,{key:0,variant:"outline",onClick:xe},{default:F(()=>[u(ve,{name:"i-heroicons-arrow-path",class:"mr-1 h-4 w-4"}),ee(" "+s(a(t)("common.regenerate")),1)]),_:1})):E("",!0),u($e,{variant:"ghost",onClick:ke},{default:F(()=>[ee(s(a(t)("common.close")),1)]),_:1})])])]),_:1},8,["open"])])}}}),vo={class:"main-content flex h-full"},yo={class:"flex flex-1 flex-col overflow-hidden"},fo={class:"flex flex-col border-b border-gray-200 bg-gray-50 p-4 dark:border-gray-800 dark:bg-page-dark"},xo={class:"mx-auto w-full max-w-3xl"},bo=["placeholder"],ko=["placeholder"],_o={class:"mt-1 flex items-center justify-between"},wo={class:"flex items-center gap-2"},$o={key:0,class:"text-xs text-gray-400"},Co={class:"flex items-center gap-2"},So={key:0,class:"ml-1 text-xs text-gray-400"},To={key:0,class:"flex-1 overflow-auto p-4"},Mo={class:"mb-2 flex items-center gap-1.5 text-sm font-medium text-gray-600 dark:text-gray-300"},Io={key:0,class:"text-gray-500"},Do={key:1,class:"text-pink-500"},Lo=["open"],Ao={class:"cursor-pointer select-none text-xs font-medium text-gray-500 dark:text-gray-400"},zo={key:1,class:"whitespace-pre-wrap break-all font-mono text-xs leading-5 text-gray-600 dark:text-gray-400"},qo={key:2,class:"font-mono text-xs text-gray-400"},Ro=ge({__name:"SQLLabTab",props:{sessionId:{},chatType:{}},setup(l){const{t:o,locale:t}=ye(),c=l,r=f(null),m=f(null);function g(N){return o(N==="group"?"ai.sqlLab.generate.defaultPromptGroup":"ai.sqlLab.generate.defaultPromptPrivate")}const d=f("SELECT * FROM message LIMIT 10"),p=f(g(c.chatType)),h=f("prompt"),y=f(!1),T=f(!1),M=f(null),C=f(null),L=f(""),z=f(""),$=f(""),I=f(!1),w=f(null),S=f(!1),v=f([]);function _(){try{const N=`sql-lab-history-${c.sessionId}`,ae=localStorage.getItem(N);ae&&(v.value=JSON.parse(ae))}catch(N){console.error("加载历史记录失败:",N)}}function A(){try{const N=`sql-lab-history-${c.sessionId}`;localStorage.setItem(N,JSON.stringify(v.value))}catch(N){console.error("保存历史记录失败:",N)}}function j(N,ae,ue){const he={id:`${Date.now()}-${Math.random().toString(36).slice(2,8)}`,prompt:N,sql:ae,explanation:ue,timestamp:Date.now()};v.value.unshift(he),v.value.length>50&&(v.value=v.value.slice(0,50)),A()}function U(N){v.value=v.value.filter(ae=>ae.id!==N),A()}async function k(){if(!d.value.trim()){M.value=o("ai.sqlLab.editor.errorEmptySQL");return}y.value=!0,M.value=null,C.value=null,m.value?.resetSort();try{C.value=await Oe().executeSQL(c.sessionId,d.value)}catch(N){M.value=N.message||String(N)}finally{y.value=!1}}function b(N,ae){(N.ctrlKey||N.metaKey)&&N.key==="Enter"&&(N.preventDefault(),ae==="prompt"?pe():k())}function q(N,ae){d.value+=`${N}.${ae}`}function Y(){h.value=h.value==="prompt"?"sql":"prompt"}function W(N){const ae=[];for(const ue of N){ae.push(`### ${ue.name} (${Vt(ue.name,t.value)})`),ae.push("| 列名 | 说明 | 类型 |"),ae.push("|------|------|------|");for(const he of ue.columns){const G=he.pk?" (主键)":"";ae.push(`| ${he.name} | ${ea(ue.name,he.name,t.value)}${G} | ${he.type} |`)}ae.push("")}return ae.join(`
27
- `)}function J(N,ae){return`你是一个 SQLite 数据库专家。用户需要查询聊天记录数据库。
28
-
29
- ## 数据库结构
30
-
31
- ${W(ae)}
32
-
33
- ## 重要说明
34
-
35
- 1. message 表的 ts 字段是 Unix 时间戳(秒),查询日期需要使用 datetime(ts, 'unixepoch') 转换
36
- 2. message.type 字段:0=文本, 1=图片, 2=语音, 3=视频, 4=文件, 5=表情包, 6=系统消息, 99=其他
37
- 3. member 和 message 表通过 message.sender_id = member.id 关联
38
- 4. **人名查询**:当识别到人名/昵称查询时,必须同时在 member 表的 account_name、group_nickname 和 aliases 三个字段中模糊搜索,使用 OR 连接:
39
- \`\`\`
40
- WHERE m.account_name LIKE '%人名%'
41
- OR m.group_nickname LIKE '%人名%'
42
- OR m.aliases LIKE '%人名%'
43
- \`\`\`
44
- 5. 显示成员名称时,使用 COALESCE(m.group_nickname, m.account_name, m.platform_id) 来获取最佳显示名
45
- 6. **查询具体消息时包含消息 ID**:当用户需要查看具体的聊天记录时,SELECT 应包含 msg.id 作为第一个字段,这样用户可以点击查看完整上下文。注意是 msg.id(消息 ID),不是 m.id(成员 ID)。
46
- 7. **统计查询不需要消息 ID**:当用户需要统计分析时,不需要返回 msg.id
47
- 8. **严禁使用不存在的字段**:只能使用上方 Schema 中明确存在的表名和列名,禁止使用如 sender.display_name、member.display_name 等虚构字段
48
- 9. **成员显示名写法**:如果需要显示成员名称,优先使用 COALESCE(m.group_nickname, m.account_name, m.platform_id);若不联表 member,可使用 COALESCE(msg.sender_group_nickname, msg.sender_account_name, msg.sender_id)
49
- 10. **单次只做一个分析目标**:一次 SQL 只返回一个语义一致的结果集,不要把多个分析目标用 UNION ALL/UNION 混合到同一结果表
50
-
51
- ## 用户需求
52
-
53
- ${N}
54
-
55
- ## 要求
56
-
57
- 请以 JSON 格式输出,包含两个字段:
58
- - sql: SQLite 查询语句(不要用代码块包裹)
59
- - explanation: 用简洁的中文解释这条 SQL 做了什么
60
-
61
- 示例格式:
62
- {"sql": "SELECT ...", "explanation": "这条SQL查询了..."}
63
-
64
- 注意:
65
- 1. 仅输出 JSON,不要有任何其他文字
66
- 2. SQL 中的查询结果限制在合理范围内(建议 LIMIT 100)
67
- 3. 确保 SQL 语法正确
68
- 4. 若用户需求包含多个分析目标,仅选择第一个目标生成 SQL`}function me(N){let ae=N.trim();ae=ae.replace(/^```json?\n?/i,"").replace(/\n?```$/i,"");try{const ue=JSON.parse(ae);return{sql:(ue.sql||"").trim(),explanation:(ue.explanation||"").trim()}}catch{return ae=ae.replace(/^```sql?\n?/i,"").replace(/\n?```$/i,""),{sql:ae.trim(),explanation:""}}}async function pe(){const N=p.value.trim();if(!N){M.value=o("ai.sqlLab.generate.errorEmptyPrompt");return}if(!await Yt().hasConfig()){M.value=o("common.errorNoAIConfig");return}const ue=r.value?.schema||[];if(ue.length===0){M.value=o("common.error.unknown");return}T.value=!0,C.value=null,M.value=null,z.value="",$.value="",I.value=!1;let he="";try{const G=J(N,ue),O=await da().chatStream([{role:"system",content:"你是一个 SQLite 专家,请以 JSON 格式输出 sql 和 explanation 字段。"},{role:"user",content:G}],{temperature:.1,maxTokens:4096},le=>{if(le.thinking!==void 0){le.thinkingDone?I.value=!1:(I.value=!0,le.thinking&&($.value+=le.thinking,Fe(()=>{w.value&&(w.value.scrollTop=w.value.scrollHeight)})));return}le.error&&(he=le.error),le.isFinished&&le.finishReason==="length"&&(he=o("ai.sqlLab.generate.errorTokenLimit")),le.content&&(z.value+=le.content)});if(!O.success){M.value=O.error||he||o("ai.sqlLab.generate.errorGenerate");return}if(he){M.value=he;return}const H=me(z.value);if(!H.sql){M.value=z.value?`${o("ai.sqlLab.generate.errorGenerate")}: ${z.value.slice(0,200)}`:o("ai.sqlLab.generate.errorGenerate");return}d.value=H.sql,L.value=N,j(N,H.sql,H.explanation),await k()}catch(G){M.value=G.message||String(G)}finally{T.value=!1}}async function X(N){d.value=N.sql,L.value=N.prompt,S.value=!1,await k()}return Ve(()=>{_()}),de(()=>c.chatType,N=>{p.value=g(N)}),(N,ae)=>{const ue=_e,he=Pe;return n(),i("div",vo,[u(a(rn),{ref_key:"schemaPanelRef",ref:r,"session-id":l.sessionId,onInsertColumn:q},null,8,["session-id"]),e("div",yo,[e("div",fo,[e("div",xo,[h.value==="prompt"?He((n(),i("textarea",{key:0,"onUpdate:modelValue":ae[0]||(ae[0]=G=>p.value=G),class:"h-32 w-full resize-none rounded-2xl border-0 bg-white p-3 text-sm text-gray-800 shadow-[0_2px_14px_rgba(0,0,0,0.04)] outline-none ring-1 ring-gray-200/60 transition-all placeholder:text-gray-400 focus:ring-primary-500/40 focus:shadow-[0_4px_20px_rgba(0,0,0,0.08)] dark:bg-page-dark dark:text-gray-200 dark:ring-white/5 dark:placeholder:text-gray-500 dark:focus:ring-primary-500/40",placeholder:a(o)("ai.sqlLab.generate.placeholder"),spellcheck:"false",onKeydown:ae[1]||(ae[1]=G=>b(G,"prompt"))},null,40,bo)),[[rt,p.value]]):He((n(),i("textarea",{key:1,"onUpdate:modelValue":ae[2]||(ae[2]=G=>d.value=G),class:"h-32 w-full resize-none rounded-2xl border-0 bg-white p-3 font-mono text-sm text-gray-800 shadow-[0_2px_14px_rgba(0,0,0,0.04)] outline-none ring-1 ring-gray-200/60 transition-all placeholder:text-gray-400 focus:ring-primary-500/40 focus:shadow-[0_4px_20px_rgba(0,0,0,0.08)] dark:bg-page-dark dark:text-gray-200 dark:ring-white/5 dark:placeholder:text-gray-500 dark:focus:ring-primary-500/40",placeholder:a(o)("ai.sqlLab.editor.placeholder"),spellcheck:"false",onKeydown:ae[3]||(ae[3]=G=>b(G,"sql"))},null,40,ko)),[[rt,d.value]]),e("div",_o,[e("div",wo,[u(he,{variant:"ghost",size:"xs",onClick:Y},{default:F(()=>[u(ue,{name:"i-heroicons-arrows-right-left",class:"mr-1 h-3.5 w-3.5"}),ee(" "+s(h.value==="prompt"?a(o)("ai.sqlLab.editor.switchToSQLMode"):a(o)("ai.sqlLab.editor.switchToPromptMode")),1)]),_:1}),h.value==="sql"?(n(),i("span",$o,s(a(o)("ai.sqlLab.editor.tip")),1)):E("",!0)]),e("div",Co,[u(he,{variant:"ghost",size:"sm",disabled:v.value.length===0,onClick:ae[4]||(ae[4]=G=>S.value=!0)},{default:F(()=>[u(ue,{name:"i-heroicons-clock",class:"mr-1 h-4 w-4"}),ee(" "+s(a(o)("ai.sqlLab.editor.history"))+" ",1),v.value.length>0?(n(),i("span",So,"("+s(v.value.length)+")",1)):E("",!0)]),_:1},8,["disabled"]),h.value==="prompt"?(n(),K(he,{key:0,color:"primary",size:"sm",loading:T.value||y.value,disabled:!p.value.trim(),onClick:pe},{default:F(()=>[u(ue,{name:"i-heroicons-sparkles",class:"mr-1 h-4 w-4"}),ee(" "+s(a(o)("ai.sqlLab.editor.generateAndRun")),1)]),_:1},8,["loading","disabled"])):(n(),K(he,{key:1,color:"primary",size:"sm",loading:y.value,onClick:k},{default:F(()=>[u(ue,{name:"i-heroicons-play",class:"mr-1 h-4 w-4"}),ee(" "+s(a(o)("ai.sqlLab.editor.run")),1)]),_:1},8,["loading"]))])])])]),h.value==="prompt"&&!C.value&&!M.value&&(z.value||$.value||T.value)?(n(),i("div",To,[u(a(at),{class:"mx-auto w-full max-w-3xl p-4"},{default:F(()=>[e("p",Mo,[u(ue,{name:"i-heroicons-cpu-chip",class:"h-4 w-4"}),ee(" "+s(a(o)("ai.sqlLab.generate.aiOutput"))+" ",1),I.value?(n(),i("span",Io,s(a(o)("ai.sqlLab.generate.thinking")),1)):T.value?(n(),i("span",Do,s(a(o)("common.generating")),1)):E("",!0)]),$.value?(n(),i("details",{key:0,class:"mb-3",open:I.value},[e("summary",Ao,s(a(o)("ai.sqlLab.generate.thinkingProcess")),1),e("pre",{ref_key:"thinkingPreRef",ref:w,class:"mt-1 max-h-48 overflow-auto whitespace-pre-wrap break-all rounded border border-gray-200 bg-gray-50 p-2 font-mono text-xs leading-5 text-gray-500 dark:border-gray-700 dark:bg-gray-800 dark:text-gray-400"},s($.value),513)],8,Lo)):E("",!0),z.value?(n(),i("pre",zo,s(z.value),1)):$.value?E("",!0):(n(),i("p",qo,s(a(o)("ai.sqlLab.generate.waitingAI")),1))]),_:1})])):(n(),K(a(ho),{key:1,ref_key:"resultTableRef",ref:m,result:C.value,error:M.value,sql:d.value,prompt:L.value},null,8,["result","error","sql","prompt"]))]),u(a(_n),{open:S.value,"onUpdate:open":ae[5]||(ae[5]=G=>S.value=G),history:v.value,onExecute:X,onDelete:U},null,8,["open","history"])])}}}),Eo={class:"flex h-full flex-col"},jo={class:"min-h-0 flex-1 overflow-hidden"},Po=ge({__name:"LabTab",props:{sessionId:{},chatType:{}},setup(l){const o=l,{t}=ye(),c=x(()=>[{id:"sql-lab",label:t("ai.tab.sqlLab"),icon:"i-heroicons-command-line"}]),r=f("sql-lab");return(m,g)=>(n(),i("div",Eo,[u(a(ua),{modelValue:r.value,"onUpdate:modelValue":g[0]||(g[0]=d=>r.value=d),items:c.value,"persist-key":"labTab"},null,8,["modelValue","items"]),e("div",jo,[u(lt,{name:"fade",mode:"out-in"},{default:F(()=>[r.value==="sql-lab"?(n(),K(Ro,{key:0,class:"h-full","session-id":o.sessionId,"chat-type":o.chatType},null,8,["session-id","chat-type"])):E("",!0)]),_:1})])]))}}),bk=tt(Po,[["__scopeId","data-v-7fc6fe33"]]),Uo={class:"flex h-full items-center justify-center"},Bo={class:"max-w-sm text-center"},Fo={class:"mt-3 text-sm text-gray-400 dark:text-gray-500"},Vo=["href"],kk=ge({__name:"MemoryTab",props:{sessionId:{},sessionName:{}},setup(l){const{t:o,te:t}=ye(),c=x(()=>t("analysis.memory.joinLink")?o("analysis.memory.joinLink"):"");return(r,m)=>{const g=_e;return n(),i("div",Uo,[e("div",Bo,[u(g,{name:"i-heroicons-light-bulb",class:"mx-auto h-12 w-12 text-gray-300 dark:text-gray-600"}),e("p",Fo,s(a(o)("analysis.memory.comingSoon")),1),c.value?(n(),i("a",{key:0,href:c.value,target:"_blank",rel:"noopener noreferrer",class:"mt-2 inline-block text-sm text-primary-500 hover:text-primary-600 dark:text-primary-400 dark:hover:text-primary-300"},s(c.value),9,Vo)):E("",!0)])])}}}),No={class:"h-full p-3"},Ho={class:"relative z-20 flex items-center gap-2 border-b border-gray-200 px-4 py-2 dark:border-gray-700"},Oo={key:0,class:"mx-4 mt-2 rounded-lg border border-red-200 bg-red-50 p-3 text-sm text-red-700 dark:border-red-800 dark:bg-red-900/20 dark:text-red-400"},Wo={class:"flex-1 overflow-auto"},Yo={key:0,class:"flex h-full items-center justify-center"},Qo={class:"text-sm text-gray-400"},Ko={key:1,class:"w-full border-collapse text-xs"},Go={class:"sticky top-0 bg-gray-50 dark:bg-page-dark"},Jo={class:"font-mono text-xs font-medium text-gray-700 dark:text-gray-300"},Xo={class:"text-[10px] leading-tight text-gray-400"},Zo={class:"border-b border-r border-gray-100 px-2 py-1.5 text-gray-400 dark:border-gray-800"},er=["title"],tr=["onUpdate:modelValue"],ar={class:"w-full truncate px-2 py-1.5"},sr={key:0,class:"italic text-gray-400"},nr={key:1},or={class:"border-b border-gray-100 px-2 py-1.5 text-center dark:border-gray-800"},rr={key:0,class:"flex items-center justify-center gap-1"},lr={key:1,class:"flex items-center justify-center gap-1"},ir={class:"flex items-center justify-between border-t border-gray-200 px-4 py-2 dark:border-gray-700"},cr={class:"text-xs text-gray-500 dark:text-gray-400"},dr={key:0,class:"flex items-center gap-3"},ur={class:"text-xs text-gray-500 dark:text-gray-400"},ft=100,mr=ge({__name:"TableBrowser",props:{sessionId:{}},setup(l){const o=["member","meta","message","message_context","member_name_history"],{t,locale:c}=ye(),r=l,m=f(localStorage.getItem("debug_dbSource")||"chat"),g=f([]),d=f(""),p=f(null),h=f(!1),y=f(null),T=f(1),M=f(0),C=x(()=>Math.max(1,Math.ceil(M.value/ft))),L=f(null),z=f({}),$=f(!1),I=x(()=>m.value==="ai"),w=f([]),S=f(""),v=x(()=>I.value&&d.value==="ai_message"&&w.value.length>0),_=x(()=>{const G={label:t("analysis.debug.tableBrowser.allConversations"),value:"__all__"},O=w.value.map(H=>({label:H.title||H.id.slice(0,16),value:H.id}));return[G,...O]});async function A(){if(!I.value){w.value=[];return}try{const G=r.sessionId.replace(/'/g,"''"),O=await Ne().executeAiSQL(`SELECT id, title FROM ai_chat WHERE session_id = '${G}' ORDER BY updated_at DESC`);w.value=O.rows.map(H=>({id:String(H[0]),title:H[1]?String(H[1]):null})),S.value="__all__"}catch{w.value=[]}}const j=x(()=>[{label:t("analysis.debug.tableBrowser.chatDb"),value:"chat"},{label:t("analysis.debug.tableBrowser.aiDb"),value:"ai"}]),U=x(()=>{const G=[...g.value];return G.sort((O,H)=>{const le=o.indexOf(O.name),fe=o.indexOf(H.name);return le!==-1&&fe!==-1?le-fe:le!==-1?-1:fe!==-1?1:0}),G}),k=x(()=>U.value.map(G=>({label:G.name,value:G.name})));async function b(G){return m.value==="ai"?await Ne().executeAiSQL(G):await Oe().executeSQL(r.sessionId,G)}async function q(){try{if(m.value==="ai"?g.value=await Ne().getAiSchema():g.value=await Oe().getSchema(r.sessionId),U.value.length>0){const G=I.value?"ai_message":U.value[0].name;d.value=U.value.some(O=>O.name===G)?G:U.value[0].name}else d.value="",p.value=null}catch(G){console.error("Failed to load schema:",G)}}function Y(){if(!I.value)return"";const G=r.sessionId.replace(/'/g,"''"),O=d.value;return O==="ai_chat"?` WHERE "session_id" = '${G}'`:O==="ai_message"?S.value&&S.value!=="__all__"?` WHERE "ai_chat_id" = '${S.value.replace(/'/g,"''")}'`:` WHERE "ai_chat_id" IN (SELECT "id" FROM "ai_chat" WHERE "session_id" = '${G}')`:""}async function W(){if(d.value){h.value=!0,y.value=null,L.value=null;try{const G=Y(),O=await b(`SELECT COUNT(*) as cnt FROM "${d.value}"${G}`);M.value=O?.rows?.[0]?.[0]??0;const H=(T.value-1)*ft;p.value=await b(`SELECT * FROM "${d.value}"${G} ORDER BY rowid DESC LIMIT ${ft} OFFSET ${H}`)}catch(G){y.value=G.message||String(G),p.value=null}finally{h.value=!1}}}function J(G){if(!p.value)return;L.value=G;const O=p.value.rows[G],H={};p.value.columns.forEach((le,fe)=>{H[le]=O[fe]==null?"":String(O[fe])}),z.value=H}function me(){L.value=null,z.value={}}async function pe(){if(L.value===null||!p.value)return;const G=d.value,O=g.value.find(re=>re.name===G);if(!O)return;const H=O.columns.find(re=>re.pk);if(!H){y.value="No primary key found for this table";return}const le=p.value.rows[L.value],fe=p.value.columns.indexOf(H.name),xe=le[fe],ke=p.value.columns.filter(re=>re!==H.name).map(re=>`"${re}" = '${z.value[re].replace(/'/g,"''")}'`).join(", "),ne=`UPDATE "${G}" SET ${ke} WHERE "${H.name}" = '${String(xe).replace(/'/g,"''")}'`;try{await b(ne),me(),await W()}catch(re){y.value=re.message||String(re)}}async function X(G){if(!p.value)return;const O=d.value,H=g.value.find(re=>re.name===O);if(!H)return;const le=H.columns.find(re=>re.pk);if(!le){y.value="No primary key found for this table";return}const fe=p.value.rows[G],xe=p.value.columns.indexOf(le.name),ke=fe[xe],ne=`DELETE FROM "${O}" WHERE "${le.name}" = '${String(ke).replace(/'/g,"''")}'`;try{await b(ne),await W()}catch(re){y.value=re.message||String(re)}}function N(G){confirm(t("analysis.debug.tableBrowser.confirmDelete"))&&X(G)}async function ae(){if(confirm(t("analysis.debug.tableBrowser.confirmClearDebug"))){$.value=!0;try{(await Ne().clearDebugContext()).success&&await W()}catch(G){y.value=G.message||String(G)}finally{$.value=!1}}}function ue(G){navigator.clipboard.writeText(G)}function he(G,O,H){if(!p.value)return[];const le=G==null?"NULL":String(G),fe=p.value.rows[H],xe={};return p.value.columns.forEach((ke,ne)=>{xe[ke]=fe[ne]}),[[{label:t("analysis.debug.tableBrowser.copyCell"),class:"p-2",onSelect:()=>ue(le)},{label:t("analysis.debug.tableBrowser.editRow"),class:"p-2",onSelect:()=>J(H)},{label:t("analysis.debug.tableBrowser.copyRow"),class:"p-2",onSelect:()=>ue(JSON.stringify(xe,null,2))},{label:t("analysis.debug.tableBrowser.deleteRow"),class:"p-2 text-red-600 dark:text-red-400",onSelect:()=>X(H)}]]}return de(m,G=>{localStorage.setItem("debug_dbSource",G),d.value="",p.value=null,M.value=0,T.value=1,S.value="",q(),A()}),de(d,G=>{G&&(T.value=1,W())}),de(S,()=>{d.value==="ai_message"&&(T.value=1,W())}),de(T,()=>{W()}),Ve(async()=>{await Promise.all([q(),A()]),d.value&&await W()}),(G,O)=>{const H=Jt,le=Pe,fe=rs;return n(),i("div",No,[u(a(at),{shadow:!1,class:"flex h-full min-w-0 flex-col"},{default:F(()=>[e("div",Ho,[u(a(nt),{modelValue:m.value,"onUpdate:modelValue":O[0]||(O[0]=xe=>m.value=xe),items:j.value,size:"xs"},null,8,["modelValue","items"]),O[5]||(O[5]=e("div",{class:"mx-1 h-4 w-px bg-gray-200 dark:bg-gray-700"},null,-1)),e("div",{class:se([I.value?"max-w-[50%]":"flex-1","min-w-0"])},[u(a(nt),{modelValue:d.value,"onUpdate:modelValue":O[1]||(O[1]=xe=>d.value=xe),items:k.value,size:"xs"},null,8,["modelValue","items"])],2),v.value?(n(),K(H,{key:0,modelValue:S.value,"onUpdate:modelValue":O[2]||(O[2]=xe=>S.value=xe),items:_.value,"value-key":"value",class:"w-48",size:"xs",ui:{content:"z-50"}},null,8,["modelValue","items"])):E("",!0),O[6]||(O[6]=e("div",{class:"flex-1"},null,-1)),I.value&&d.value==="ai_message"?(n(),K(le,{key:1,variant:"ghost",size:"xs",color:"error",icon:"i-heroicons-trash",loading:$.value,onClick:ae},{default:F(()=>[ee(s(a(t)("analysis.debug.tableBrowser.clearDebugContext")),1)]),_:1},8,["loading"])):E("",!0),u(le,{variant:"ghost",size:"xs",icon:"i-heroicons-arrow-path",loading:h.value,onClick:W},{default:F(()=>[ee(s(a(t)("analysis.debug.tableBrowser.refresh")),1)]),_:1},8,["loading"])]),y.value?(n(),i("div",Oo,s(y.value),1)):E("",!0),e("div",Wo,[!p.value&&!h.value?(n(),i("div",Yo,[e("p",Qo,s(a(t)("analysis.debug.tableBrowser.noData")),1)])):p.value?(n(),i("table",Ko,[e("thead",Go,[e("tr",null,[O[7]||(O[7]=e("th",{class:"whitespace-nowrap border-b border-r border-gray-200 px-2 py-1.5 text-left font-medium text-gray-500 dark:border-gray-700 dark:text-gray-400"}," # ",-1)),(n(!0),i(oe,null,ce(p.value.columns,xe=>(n(),i("th",{key:xe,class:"border-b border-r border-gray-200 px-2 py-1.5 text-left dark:border-gray-700"},[e("div",Jo,s(xe),1),e("div",Xo,s(a(ea)(d.value,xe,a(c))),1)]))),128)),O[8]||(O[8]=e("th",{class:"whitespace-nowrap border-b border-gray-200 px-2 py-1.5 text-center font-medium text-gray-500 dark:border-gray-700 dark:text-gray-400"}," 操作 ",-1))])]),e("tbody",null,[(n(!0),i(oe,null,ce(p.value.rows,(xe,ke)=>(n(),i("tr",{key:ke,class:"transition-colors hover:bg-gray-50 dark:hover:bg-gray-800/50"},[e("td",Zo,s((T.value-1)*ft+ke+1),1),(n(!0),i(oe,null,ce(xe,(ne,re)=>(n(),i("td",{key:re,class:"max-w-[300px] border-b border-r border-gray-100 p-0 text-gray-700 dark:border-gray-800 dark:text-gray-300",title:ne==null?"NULL":String(ne)},[L.value===ke?He((n(),i("input",{key:0,"onUpdate:modelValue":ve=>z.value[p.value.columns[re]]=ve,class:"w-full px-2 py-1.5 rounded border border-gray-300 bg-white text-xs dark:border-gray-600 dark:bg-gray-800"},null,8,tr)),[[rt,z.value[p.value.columns[re]]]]):(n(),K(fe,{key:1,items:he(ne,re,ke)},{default:F(()=>[e("div",ar,[ne==null?(n(),i("span",sr,"NULL")):(n(),i("span",nr,s(String(ne).slice(0,200)),1))])]),_:2},1032,["items"]))],8,er))),128)),e("td",or,[L.value===ke?(n(),i("div",rr,[u(le,{size:"xs",color:"primary",variant:"ghost",icon:"i-heroicons-check",onClick:pe}),u(le,{size:"xs",color:"neutral",variant:"ghost",icon:"i-heroicons-x-mark",onClick:me})])):(n(),i("div",lr,[u(le,{size:"xs",variant:"ghost",icon:"i-heroicons-pencil-square",onClick:ne=>J(ke)},null,8,["onClick"]),u(le,{size:"xs",variant:"ghost",color:"error",icon:"i-heroicons-trash",onClick:ne=>N(ke)},null,8,["onClick"])]))])]))),128))])])):E("",!0)]),e("div",ir,[e("span",cr,s(M.value>0?a(t)("analysis.debug.tableBrowser.rowCount",{count:M.value}):""),1),C.value>1?(n(),i("div",dr,[u(le,{size:"xs",variant:"ghost",disabled:T.value<=1,icon:"i-heroicons-chevron-left",onClick:O[3]||(O[3]=xe=>T.value--)},null,8,["disabled"]),e("span",ur,s(a(t)("analysis.debug.tableBrowser.page",{current:T.value,total:C.value})),1),u(le,{size:"xs",variant:"ghost",disabled:T.value>=C.value,icon:"i-heroicons-chevron-right",onClick:O[4]||(O[4]=xe=>T.value++)},null,8,["disabled"])])):E("",!0)])]),_:1})])}}}),gr={class:"flex h-full"},pr={class:"m-3 h-[calc(100%-1.5rem)] w-56 shrink-0 overflow-y-auto rounded-lg bg-white shadow-elevated dark:bg-sidebar-dark"},hr={key:0,class:"py-2"},vr={class:"px-3 py-1.5 text-[11px] font-semibold tracking-wide text-gray-400 uppercase dark:text-gray-500"},yr=["title","onClick"],fr={class:"truncate text-xs font-medium"},xr={class:"truncate text-[10px] opacity-50"},br={key:1,class:"border-t border-gray-200 py-2 dark:border-gray-700"},kr={class:"px-3 py-1.5 text-[11px] font-semibold tracking-wide text-gray-400 uppercase dark:text-gray-500"},_r=["title","onClick"],wr={class:"truncate text-xs font-medium"},$r={class:"truncate text-[10px] opacity-50"},Cr={class:"flex min-h-0 flex-1 flex-col gap-4 overflow-y-auto p-4"},Sr={key:0,class:"rounded-lg border border-primary-200 bg-primary-50/50 px-4 py-3 dark:border-primary-800 dark:bg-primary-900/20"},Tr={class:"text-sm font-medium text-primary-700 dark:text-primary-300"},Mr={class:"mt-1 text-xs text-primary-600/70 dark:text-primary-400/70"},Ir={key:1,class:"flex flex-col gap-3"},Dr={class:"text-sm font-medium text-gray-700 dark:text-gray-300"},Lr={class:"grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-3"},Ar={class:"text-xs font-medium text-gray-600 dark:text-gray-400"},zr={key:0,class:"text-red-500"},qr={key:1,class:"ml-1 text-gray-400"},Rr={key:2,class:"ml-1 text-gray-400"},Er={class:"flex items-center gap-3"},jr={key:3,class:"text-xs text-gray-500 dark:text-gray-400"},Pr={key:2,class:"flex-1 min-h-0"},Ur={class:"mb-2 text-sm font-medium text-gray-700 dark:text-gray-300"},Br={key:0,class:"rounded-lg border border-red-200 bg-red-50 p-3 text-sm text-red-700 dark:border-red-800 dark:bg-red-900/20 dark:text-red-400"},Fr={key:0,class:"mb-2 rounded-lg border border-amber-200 bg-amber-50 px-3 py-2 text-xs text-amber-700 dark:border-amber-800 dark:bg-amber-900/20 dark:text-amber-400"},Vr={class:"max-h-[60vh] overflow-auto rounded-lg border border-gray-200 bg-gray-50 p-3 text-xs leading-relaxed text-gray-800 dark:border-gray-700 dark:bg-gray-800 dark:text-gray-200"},Nr=ge({__name:"ToolTestTab",props:{sessionId:{}},setup(l){const{t:o}=ye(),t=l,c=f([]),r=f(""),m=f({}),g=f(!1),d=f(null),p=f(null),h=f(null),y=f(!1),T=f(null);function M(v){const _=`ai.assistant.builtinToolDesc.${v}`,A=o(_);return A!==_?A:v}const C=x(()=>c.value.filter(v=>v.category==="core")),L=x(()=>c.value.filter(v=>v.category==="analysis")),z=x(()=>c.value.find(v=>v.name===r.value)),$=x(()=>{const v=z.value;if(!v?.parameters)return[];const _=v.parameters;if(!_.properties)return[];const A=new Set(_.required??[]);return Object.entries(_.properties).map(([j,U])=>{const k={name:j,type:U.type??"string",description:U.description??"",required:A.has(j),defaultValue:U.default};if(U.enum&&(k.enumValues=U.enum),U.type==="array"){k.isArray=!0;const b=U.items;k.arrayItemType=b?.type??"string"}return k})});de(r,()=>{m.value={},p.value=null,h.value=null,T.value=null}),Ve(async()=>{try{c.value=await Ne().getToolCatalog(),c.value.length>0&&(r.value=c.value[0].name)}catch(v){console.error("Failed to load tool catalog:",v)}});function I(){const v={};for(const _ of $.value){const A=m.value[_.name];if(!(A===void 0||A===""))if(_.type==="number"){const j=Number(A);isNaN(j)||(v[_.name]=j)}else _.isArray?v[_.name]=A.split(",").map(j=>j.trim()).filter(Boolean):v[_.name]=A}return v}async function w(){if(!r.value||g.value)return;g.value=!0,p.value=null,h.value=null,y.value=!1,T.value=null;const v=`tool_${Date.now()}_${Math.random().toString(36).slice(2,8)}`;d.value=v;try{const _=I(),A=await Ne().executeTool(v,r.value,_,t.sessionId);if(A.error==="cancelled")return;A.success?(T.value=A.elapsed??null,y.value=!!A.truncated,p.value=A.truncated?A.details?._preview??"":JSON.stringify(A.details??A.content,null,2)):h.value=A.error??"Unknown error"}catch(_){h.value=String(_)}finally{g.value=!1,d.value=null}}async function S(){d.value&&(await Ne().cancelToolTest(d.value),g.value=!1,d.value=null)}return(v,_)=>{const A=Jt,j=St,U=Pe,k=_e;return n(),i("div",gr,[e("div",pr,[C.value.length>0?(n(),i("div",hr,[e("div",vr,s(a(o)("ai.lab.toolTest.coreTools")),1),(n(!0),i(oe,null,ce(C.value,b=>(n(),i("button",{key:b.name,class:se(["flex w-full flex-col px-3 py-1.5 text-left transition-colors",[r.value===b.name?"bg-primary-50 text-primary-700 dark:bg-primary-900/30 dark:text-primary-300":"text-gray-600 hover:bg-gray-100 dark:text-gray-400 dark:hover:bg-gray-700/50"]]),title:b.description,onClick:q=>r.value=b.name},[e("span",fr,s(M(b.name)),1),e("span",xr,s(b.name),1)],10,yr))),128))])):E("",!0),L.value.length>0?(n(),i("div",br,[e("div",kr,s(a(o)("ai.lab.toolTest.analysisTools")),1),(n(!0),i(oe,null,ce(L.value,b=>(n(),i("button",{key:b.name,class:se(["flex w-full flex-col px-3 py-1.5 text-left transition-colors",[r.value===b.name?"bg-primary-50 text-primary-700 dark:bg-primary-900/30 dark:text-primary-300":"text-gray-600 hover:bg-gray-100 dark:text-gray-400 dark:hover:bg-gray-700/50"]]),title:b.description,onClick:q=>r.value=b.name},[e("span",wr,s(M(b.name)),1),e("span",$r,s(b.name),1)],10,_r))),128))])):E("",!0)]),u(a(at),{class:"my-3 mr-3 flex min-w-0 flex-1 flex-col"},{default:F(()=>[e("div",Cr,[z.value?(n(),i("div",Sr,[e("div",Tr,s(M(z.value.name)),1),e("div",Mr,s(z.value.description),1)])):E("",!0),$.value.length>0?(n(),i("div",Ir,[e("h3",Dr,s(a(o)("ai.lab.toolTest.parameters")),1),e("div",Lr,[(n(!0),i(oe,null,ce($.value,b=>(n(),i("div",{key:b.name,class:"flex flex-col gap-1"},[e("label",Ar,[ee(s(b.name)+" ",1),b.required?(n(),i("span",zr,"*")):E("",!0),b.type==="number"?(n(),i("span",qr,"(number)")):E("",!0),b.isArray?(n(),i("span",Rr,"("+s(b.arrayItemType)+"[])",1)):E("",!0)]),b.enumValues?(n(),K(A,{key:0,modelValue:m.value[b.name],"onUpdate:modelValue":q=>m.value[b.name]=q,items:b.enumValues,placeholder:b.description,size:"sm"},null,8,["modelValue","onUpdate:modelValue","items","placeholder"])):(n(),K(j,{key:1,modelValue:m.value[b.name],"onUpdate:modelValue":q=>m.value[b.name]=q,placeholder:b.isArray?a(o)("ai.lab.toolTest.arrayPlaceholder"):b.defaultValue!==void 0?String(b.defaultValue):b.description,type:b.type==="number"?"number":"text",size:"sm"},null,8,["modelValue","onUpdate:modelValue","placeholder","type"]))]))),128))])])):E("",!0),e("div",Er,[g.value?(n(),K(U,{key:1,color:"error",icon:"i-heroicons-stop",onClick:S},{default:F(()=>[ee(s(a(o)("ai.lab.toolTest.cancel")),1)]),_:1})):(n(),K(U,{key:0,color:"primary",disabled:!r.value,icon:"i-heroicons-play",onClick:w},{default:F(()=>[ee(s(a(o)("ai.lab.toolTest.execute")),1)]),_:1},8,["disabled"])),g.value?(n(),K(k,{key:2,name:"i-heroicons-arrow-path",class:"h-4 w-4 animate-spin text-gray-400"})):E("",!0),T.value!==null?(n(),i("span",jr,s(a(o)("ai.lab.toolTest.elapsed",{ms:T.value})),1)):E("",!0)]),p.value||h.value?(n(),i("div",Pr,[e("h3",Ur,s(a(o)("ai.lab.toolTest.result")),1),h.value?(n(),i("div",Br,s(h.value),1)):(n(),i(oe,{key:1},[y.value?(n(),i("div",Fr,s(a(o)("ai.lab.toolTest.truncated")),1)):E("",!0),e("pre",Vr,s(p.value),1)],64))])):E("",!0)])]),_:1})])}}}),Hr={class:"flex h-full flex-col"},Or={class:"min-h-0 flex-1 overflow-hidden"},Wr=ge({__name:"DebugTab",props:{sessionId:{}},setup(l){const{t:o}=ye(),t=l,c=[{id:"sql-tables",label:o("analysis.debug.sqlTables"),icon:"i-heroicons-table-cells"},{id:"basic-tools",label:o("analysis.debug.basicTools"),icon:"i-heroicons-wrench-screwdriver"}],r=f("sql-tables");return(m,g)=>(n(),i("div",Hr,[u(a(ua),{modelValue:r.value,"onUpdate:modelValue":g[0]||(g[0]=d=>r.value=d),items:c,"persist-key":"debugTab"},null,8,["modelValue"]),e("div",Or,[u(lt,{name:"fade",mode:"out-in"},{default:F(()=>[r.value==="sql-tables"?(n(),K(mr,{key:0,class:"h-full","session-id":t.sessionId},null,8,["session-id"])):r.value==="basic-tools"?(n(),K(Nr,{key:1,class:"h-full","session-id":t.sessionId},null,8,["session-id"])):E("",!0)]),_:1})])]))}}),_k=tt(Wr,[["__scopeId","data-v-b3b3d1a4"]]),Yr=["disabled"],Qr={key:0,class:"flex-1 overflow-y-auto p-2"},Kr={key:0,class:"flex items-center justify-center py-8"},Gr={key:1,class:"flex flex-col items-center justify-center py-12 text-center"},Jr={class:"flex h-12 w-12 items-center justify-center rounded-full bg-gray-50 dark:bg-gray-800"},Xr={class:"mt-3 text-xs text-gray-400"},Zr={key:2,class:"space-y-3"},el={class:"px-2 pb-1 pt-1.5 text-[10px] font-medium tracking-wide text-gray-400 dark:text-gray-500"},tl={class:"space-y-0.5"},al=["onClick"],sl=["placeholder","onBlur","onKeyup"],nl={key:1,class:"flex items-center"},ol={class:"line-clamp-1 min-w-0 flex-1 text-sm leading-snug"},rl={class:"rounded p-0.5 text-gray-400 transition-colors hover:bg-gray-200 hover:text-gray-600 dark:hover:bg-gray-700 dark:hover:text-gray-300"},ll={class:"w-28 p-1"},il=["disabled","onClick"],cl=["onClick"],dl=["disabled","onClick"],ul={key:1,class:"flex flex-1 flex-col items-center gap-1 overflow-y-auto px-2 pb-2"},ml=["title","disabled"],gl=["title","onClick"],pl={key:0,class:"absolute -left-2 top-1/2 h-4.5 w-[3px] -translate-y-1/2 rounded-r-full bg-primary-500"},hl=ge({__name:"ConversationList",props:{sessionId:{},activeId:{},disabled:{type:Boolean}},emits:["select","create","delete"],setup(l,{expose:o,emit:t}){const{t:c}=ye(),r=l,m=t,g=f([]),d=f(!1),p=f(null),h=f(""),y=f(!1),T=f(null);async function M(){d.value=!0;try{g.value=await Ne().getAIChats(r.sessionId)}catch(_){console.error("加载对话列表失败:",_)}finally{d.value=!1}}const C=x(()=>{if(g.value.length===0)return[];const _=Ie(),A=_.subtract(7,"day").startOf("day"),j=_.subtract(30,"day").startOf("day"),U=[],k=[],b=new Map;for(const W of g.value){const J=Ie(W.updatedAt*1e3);if(J.isAfter(A))U.push(W);else if(J.isAfter(j))k.push(W);else{const me=J.format("YYYY-MM");b.has(me)||b.set(me,[]),b.get(me).push(W)}}const q=[];U.length>0&&q.push({label:c("ai.chat.conversation.group.last7Days"),conversations:U}),k.length>0&&q.push({label:c("ai.chat.conversation.group.last30Days"),conversations:k});const Y=[...b.keys()].sort((W,J)=>J.localeCompare(W));for(const W of Y){const J=Ie(W+"-01");q.push({label:J.format(J.year()===_.year()?"M月":"YYYY年M月"),conversations:b.get(W)})}return q});function L(_){return _.title||c("ai.chat.conversation.newChat")}function z(_){r.disabled||(p.value=_.id,h.value=_.title||"")}async function $(_){if(!r.disabled){if(h.value.trim())try{await Ne().updateAIChatTitle(_,h.value.trim());const A=g.value.find(j=>j.id===_);A&&(A.title=h.value.trim())}catch(A){console.error("更新标题失败:",A)}p.value=null}}function I(_){T.value=null,z(_)}function w(_){T.value=null,navigator.clipboard.writeText(_)}function S(_){T.value=null,v(_)}async function v(_){if(!r.disabled)try{await Ne().deleteAIChat(_),g.value=g.value.filter(A=>A.id!==_),m("delete",_)}catch(A){console.error("删除对话失败:",A)}}return Ve(()=>{M()}),de(()=>r.sessionId,()=>{M()}),o({refresh:M}),(_,A)=>{const j=_e,U=Pe,k=ga;return n(),i("div",{class:se(["m-3 flex h-[calc(100%-1.5rem)] shrink-0 flex-col overflow-hidden rounded-lg bg-white transition-all duration-300 ease-in-out dark:bg-sidebar-dark",y.value?"w-14":"w-64"])},[e("div",{class:se(["flex items-center",y.value?"justify-center px-2 pb-2 pt-5":"justify-between border-b border-gray-200 py-2 pl-3 pr-2 dark:border-gray-800"])},[y.value?(n(),i("button",{key:1,type:"button",class:"group relative flex h-9 w-9 cursor-pointer items-center justify-center rounded-full hover:bg-gray-200/60 dark:hover:bg-white/[0.06]",onClick:A[2]||(A[2]=b=>y.value=!y.value)},[u(j,{name:"i-lucide-panel-right-open",class:"size-4 scale-x-[-1]"})])):(n(),i(oe,{key:0},[e("button",{class:se(["flex items-center gap-1.5 rounded-md px-2 py-1.5 text-xs font-medium text-gray-600 transition-colors hover:bg-gray-100 hover:text-gray-900 dark:text-gray-400 dark:hover:bg-gray-800 dark:hover:text-gray-200",{"cursor-not-allowed opacity-50":l.disabled}]),disabled:l.disabled,onClick:A[0]||(A[0]=b=>!l.disabled&&m("create"))},[u(j,{name:"i-heroicons-plus",class:"h-3.5 w-3.5"}),e("span",null,s(a(c)("ai.chat.conversation.newConversation")),1)],10,Yr),u(U,{color:"neutral",variant:"ghost",size:"sm",class:"group flex h-9 w-9 cursor-pointer items-center justify-center rounded-full hover:bg-gray-200/60 dark:hover:bg-white/[0.06]",onClick:A[1]||(A[1]=b=>y.value=!y.value)},{default:F(()=>[u(j,{name:"i-lucide-panel-right",class:"size-4 scale-x-[-1] group-hover:hidden"}),u(j,{name:"i-lucide-panel-right-close",class:"size-4 hidden scale-x-[-1] group-hover:block"})]),_:1})],64))],2),y.value?(n(),i("div",ul,[e("button",{class:se(["flex h-10 w-10 items-center justify-center rounded-lg text-gray-600 transition-colors hover:bg-gray-200/40 hover:text-primary-600 dark:text-gray-300 dark:hover:bg-white/[0.06] dark:hover:text-primary-400",{"cursor-not-allowed opacity-50":l.disabled}]),title:a(c)("ai.chat.conversation.newConversation"),disabled:l.disabled,onClick:A[7]||(A[7]=b=>!l.disabled&&m("create"))},[u(j,{name:"i-heroicons-plus",class:"h-5 w-5"})],10,ml),(n(!0),i(oe,null,ce(g.value,b=>(n(),i("button",{key:b.id,class:se(["relative mx-auto flex h-10 w-10 items-center justify-center rounded-lg transition-all duration-200",[l.activeId===b.id?"bg-gray-200/50 text-primary-600 dark:bg-white/[0.07] dark:text-primary-400 dark:ring-1 dark:ring-white/10":"text-gray-600 hover:bg-gray-200/40 dark:text-gray-300 dark:hover:bg-white/[0.06]"]]),title:L(b),onClick:q=>m("select",b.id)},[l.activeId===b.id?(n(),i("span",pl)):E("",!0),u(j,{name:"i-heroicons-chat-bubble-left",class:"h-5 w-5"})],10,gl))),128))])):(n(),i("div",Qr,[d.value?(n(),i("div",Kr,[u(j,{name:"i-heroicons-arrow-path",class:"h-5 w-5 animate-spin text-gray-400"})])):g.value.length===0?(n(),i("div",Gr,[e("div",Jr,[u(j,{name:"i-heroicons-chat-bubble-left",class:"h-6 w-6 text-gray-300 dark:text-gray-600"})]),e("p",Xr,s(a(c)("ai.chat.conversation.empty")),1),u(U,{class:"mt-2",size:"xs",variant:"link",color:"primary",disabled:l.disabled,onClick:A[3]||(A[3]=b=>!l.disabled&&m("create"))},{default:F(()=>[ee(s(a(c)("ai.chat.conversation.startNew")),1)]),_:1},8,["disabled"])])):(n(),i("div",Zr,[(n(!0),i(oe,null,ce(C.value,b=>(n(),i("div",{key:b.label},[e("div",el,s(b.label),1),e("div",tl,[(n(!0),i(oe,null,ce(b.conversations,q=>(n(),i("div",{key:q.id,class:se(["group relative rounded-lg px-3 py-2 transition-all",["cursor-pointer",l.activeId===q.id?"bg-gray-100 text-gray-900 dark:bg-gray-800 dark:text-white":"text-gray-600 hover:bg-gray-50 dark:text-gray-400 dark:hover:bg-gray-800/50"]]),onClick:Y=>m("select",q.id)},[p.value===q.id?He((n(),i("input",{key:0,"onUpdate:modelValue":A[4]||(A[4]=Y=>h.value=Y),class:"w-full rounded border-none bg-white px-2 py-1 text-sm shadow-sm outline-none ring-1 ring-gray-200 focus:ring-2 focus:ring-primary-500 dark:bg-page-dark dark:ring-gray-700",placeholder:a(c)("ai.chat.conversation.titlePlaceholder"),autoFocus:"",onBlur:Y=>$(q.id),onKeyup:ot(Y=>$(q.id),["enter"]),onClick:A[5]||(A[5]=Be(()=>{},["stop"]))},null,40,sl)),[[rt,h.value]]):(n(),i("div",nl,[e("p",ol,s(L(q)),1),e("div",{class:se(["ml-1 shrink-0 opacity-0 transition-opacity group-hover:opacity-100",{"opacity-100":l.activeId===q.id||T.value===q.id}]),onClick:A[6]||(A[6]=Be(()=>{},["stop"]))},[u(k,{open:T.value===q.id,ui:{content:"z-50 p-0"},"onUpdate:open":Y=>T.value=Y?q.id:null},{content:F(()=>[e("div",ll,[e("button",{class:"flex w-full items-center gap-2 rounded-md px-2 py-2 text-xs text-gray-600 transition-colors hover:bg-gray-100 dark:text-gray-400 dark:hover:bg-gray-800",disabled:l.disabled,onClick:Y=>I(q)},[u(j,{name:"i-heroicons-pencil",class:"h-3.5 w-3.5"}),ee(" "+s(a(c)("ai.chat.conversation.rename")),1)],8,il),e("button",{class:"flex w-full items-center gap-2 rounded-md px-2 py-2 text-xs text-gray-600 transition-colors hover:bg-gray-100 dark:text-gray-400 dark:hover:bg-gray-800",onClick:Y=>w(q.id)},[u(j,{name:"i-heroicons-clipboard-document",class:"h-3.5 w-3.5"}),ee(" "+s(a(c)("ai.chat.conversation.copyId")),1)],8,cl),e("button",{class:"flex w-full items-center gap-2 rounded-md px-2 py-2 text-xs text-red-500 transition-colors hover:bg-red-50 dark:text-red-400 dark:hover:bg-red-950/30",disabled:l.disabled,onClick:Y=>S(q.id)},[u(j,{name:"i-heroicons-trash",class:"h-3.5 w-3.5"}),ee(" "+s(a(c)("ai.chat.conversation.delete")),1)],8,dl)])]),default:F(()=>[e("button",rl,[u(j,{name:"i-heroicons-ellipsis-horizontal",class:"h-4 w-4"})])]),_:2},1032,["open","onUpdate:open"])],2)]))],10,al))),128))])]))),128))]))]))],2)}}}),vl={class:"writing-vertical text-xs"},yl={class:"flex items-center justify-between border-b border-gray-200 px-4 py-3 dark:border-gray-800"},fl={class:"flex items-center gap-2"},xl={class:"font-medium text-gray-900 dark:text-white"},bl={key:0,class:"border-b border-gray-200 px-4 py-2 dark:border-gray-800"},kl={class:"flex flex-wrap items-center gap-2"},_l={class:"text-xs text-gray-500"},wl={class:"flex-1 overflow-y-auto"},$l={key:0,class:"flex items-center justify-center py-8"},Cl={key:1,class:"flex flex-col items-center justify-center py-8 text-center"},Sl={class:"mt-2 text-sm text-gray-500"},Tl={class:"text-xs text-gray-400"},Ml={key:2,class:"divide-y divide-gray-100 dark:divide-gray-800"},Il={class:"mb-1 flex items-center justify-between"},Dl={class:"text-sm font-medium text-gray-900 dark:text-white"},Ll={class:"text-xs text-gray-400"},Al=["innerHTML"],zl={key:1,class:"border-t border-gray-200 px-4 py-2 dark:border-gray-800"},ql={class:"flex items-center justify-between"},Rl={class:"text-xs text-gray-500"},El={key:2,class:"pointer-events-none absolute inset-0 overflow-hidden rounded-xl opacity-[0.03]"},jl=ge({__name:"DataSourcePanel",props:{messages:{},keywords:{},isLoading:{type:Boolean},isCollapsed:{type:Boolean}},emits:["toggle","loadMore"],setup(l,{emit:o}){const{t}=ye(),c=l,r=o;function m(d){return Ie(d).format("MM-DD HH:mm")}function g(d){if(!c.keywords.length)return d;const p=c.keywords.join("|"),h=new RegExp(`(${p})`,"gi");return d.replace(h,'<mark class="bg-yellow-200 dark:bg-yellow-800/50 px-0.5 rounded">$1</mark>')}return(d,p)=>{const h=_e,y=Pe;return n(),i("div",{class:se(["relative flex flex-col rounded-xl bg-white transition-all duration-300 dark:bg-page-dark",[l.isCollapsed?"w-12":"w-full"]])},[l.isCollapsed?(n(),i("button",{key:0,class:"flex h-full flex-col items-center justify-center gap-2 text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-200",onClick:p[0]||(p[0]=T=>r("toggle"))},[u(h,{name:"i-heroicons-chevron-left",class:"h-5 w-5"}),e("span",vl,s(a(t)("ai.chat.dataSource.title")),1)])):(n(),i(oe,{key:1},[e("div",yl,[e("div",fl,[u(h,{name:"i-heroicons-document-magnifying-glass",class:"h-5 w-5 text-gray-500"}),e("span",xl,s(a(t)("ai.chat.dataSource.title")),1)]),u(y,{icon:"i-heroicons-chevron-right",color:"gray",variant:"ghost",size:"xs",onClick:p[1]||(p[1]=T=>r("toggle"))})]),l.keywords.length>0?(n(),i("div",bl,[e("div",kl,[e("span",_l,s(a(t)("ai.chat.dataSource.keywords")),1),(n(!0),i(oe,null,ce(l.keywords,T=>(n(),i("span",{key:T,class:"rounded-full bg-violet-100 px-2 py-0.5 text-xs text-violet-700 dark:bg-violet-900/30 dark:text-violet-400"},s(T),1))),128))])])):E("",!0),e("div",wl,[l.isLoading?(n(),i("div",$l,[u(h,{name:"i-heroicons-arrow-path",class:"h-6 w-6 animate-spin text-gray-400"})])):l.messages.length===0?(n(),i("div",Cl,[u(h,{name:"i-heroicons-inbox",class:"h-10 w-10 text-gray-300 dark:text-gray-600"}),e("p",Sl,s(a(t)("ai.chat.dataSource.empty")),1),e("p",Tl,s(a(t)("ai.chat.dataSource.emptyHint")),1)])):(n(),i("div",Ml,[(n(!0),i(oe,null,ce(l.messages,T=>(n(),i("div",{key:T.id,class:"px-4 py-3 transition-colors hover:bg-gray-50 dark:hover:bg-gray-800/50"},[e("div",Il,[e("span",Dl,s(T.senderName),1),e("span",Ll,s(m(T.timestamp)),1)]),e("p",{class:"line-clamp-3 text-sm text-gray-600 dark:text-gray-400",innerHTML:g(T.content)},null,8,Al)]))),128))]))]),l.messages.length>0?(n(),i("div",zl,[e("div",ql,[e("span",Rl,s(a(t)("ai.chat.dataSource.totalRecords",{count:l.messages.length})),1),u(y,{size:"xs",variant:"ghost",onClick:p[2]||(p[2]=T=>r("loadMore"))},{default:F(()=>[ee(s(a(t)("ai.chat.dataSource.loadMore")),1)]),_:1})])])):E("",!0)],64)),l.isCollapsed?E("",!0):(n(),i("div",El,[...p[3]||(p[3]=[e("div",{class:"data-flow-bg absolute inset-0"},null,-1)])]))],2)}}}),Pl=tt(jl,[["__scopeId","data-v-a9962add"]]),Ul={class:"flex max-h-[80vh] flex-col overflow-hidden"},Bl={class:"shrink-0 border-b border-gray-200 px-6 py-4 dark:border-gray-800"},Fl={class:"flex items-center justify-between"},Vl={class:"flex items-center gap-3"},Nl={class:"flex h-8 w-8 items-center justify-center rounded-lg bg-red-100 dark:bg-red-900/40"},Hl={class:"text-lg font-semibold text-gray-900 dark:text-white"},Ol={class:"flex-1 overflow-y-auto px-6 py-4"},Wl={class:"flex flex-col gap-4"},Yl={class:"text-sm font-semibold text-gray-700 dark:text-gray-300"},Ql={key:0,class:"rounded-md border border-red-200 bg-red-50/50 p-3 dark:border-red-900/40 dark:bg-red-950/20"},Kl={class:"m-0 whitespace-pre-wrap break-words font-mono text-xs leading-relaxed text-red-600 dark:text-red-400"},Gl={key:1,class:"rounded-md border border-gray-200 bg-gray-50 p-3 dark:border-gray-700 dark:bg-page-dark"},Jl={class:"m-0 max-h-[300px] overflow-auto whitespace-pre-wrap break-words font-mono text-xs leading-relaxed text-gray-700 dark:text-gray-300"},Xl={key:2,class:"select-text break-words rounded-md border border-gray-200 bg-gray-50 px-3 py-2 font-mono text-xs text-gray-700 dark:border-gray-700 dark:bg-page-dark dark:text-gray-300"},Zl={key:0,class:"py-8 text-center text-sm text-gray-400 dark:text-gray-500"},ei={class:"shrink-0 border-t border-gray-200 px-6 py-3 dark:border-gray-800"},ti={class:"flex justify-end"},ai=ge({__name:"ErrorDetailModal",props:Pt({error:{}},{open:{type:Boolean,required:!0},openModifiers:{}}),emits:["update:open"],setup(l){const{t:o}=ye(),t=Je(),c=jt(l,"open"),r=l,m=x(()=>{const p=r.error,h=[];return p.url&&h.push({label:o("ai.chat.error.requestUrl"),value:p.url}),p.statusCode!=null&&h.push({label:o("ai.chat.error.statusCode"),value:String(p.statusCode)}),p.responseBody&&h.push({label:o("ai.chat.error.responseBody"),value:g(p.responseBody),isCode:!0}),p.responseHeaders&&h.push({label:o("ai.chat.error.responseHeaders"),value:JSON.stringify(p.responseHeaders,null,2),isCode:!0}),p.name&&h.push({label:o("ai.chat.error.name"),value:p.name}),p.message&&h.push({label:o("ai.chat.error.message"),value:p.message}),p.stack&&h.push({label:o("ai.chat.error.stack"),value:p.stack,isStack:!0}),p.cause&&h.push({label:o("ai.chat.error.cause"),value:g(p.cause),isCode:!0}),p.provider&&h.push({label:o("ai.chat.error.provider"),value:p.provider}),p.requestBody&&h.push({label:o("ai.chat.error.requestBody"),value:g(p.requestBody),isCode:!0}),h});function g(p){try{return JSON.stringify(JSON.parse(p),null,2)}catch{return p}}function d(){const p=m.value.map(h=>`${h.label}: ${h.value}`).join(`
69
-
70
- `);navigator.clipboard.writeText(p).then(()=>{t.success(o("ai.chat.error.copied"))})}return(p,h)=>{const y=_e,T=Pe,M=We;return n(),K(M,{open:c.value,"onUpdate:open":h[1]||(h[1]=C=>c.value=C),ui:{content:"sm:max-w-[700px] z-[100]",overlay:"backdrop-blur-sm z-[99]"}},{content:F(()=>[e("div",Ul,[e("div",Bl,[e("div",Fl,[e("div",Vl,[e("div",Nl,[u(y,{name:"i-heroicons-exclamation-triangle",class:"h-4 w-4 text-red-600 dark:text-red-400"})]),e("h2",Hl,s(a(o)("ai.chat.error.detail")),1)]),u(T,{icon:"i-heroicons-x-mark",variant:"ghost",color:"neutral",size:"sm",onClick:h[0]||(h[0]=C=>c.value=!1)})])]),e("div",Ol,[e("div",Wl,[(n(!0),i(oe,null,ce(m.value,(C,L)=>(n(),i("div",{key:L,class:"flex flex-col gap-1.5"},[e("div",Yl,s(C.label),1),C.isStack?(n(),i("div",Ql,[e("pre",Kl,s(C.value),1)])):C.isCode?(n(),i("div",Gl,[e("pre",Jl,s(C.value),1)])):(n(),i("div",Xl,s(C.value),1))]))),128)),m.value.length===0?(n(),i("div",Zl,s(a(o)("ai.chat.error.unknown")),1)):E("",!0)])]),e("div",ei,[e("div",ti,[u(T,{icon:"i-heroicons-document-duplicate",variant:"soft",color:"neutral",size:"sm",onClick:d},{default:F(()=>[ee(s(a(o)("ai.chat.error.copyAll")),1)]),_:1})])])])]),_:1},8,["open"])}}}),si={class:"mb-1.5 flex items-center gap-2"},ni={class:"flex shrink-0 items-center justify-center text-red-500 dark:text-red-400"},oi={class:"pr-5 text-[13px] font-semibold leading-[1.4] text-red-600 dark:text-red-400"},ri={class:"ml-6 line-clamp-3 break-words text-xs leading-normal text-gray-600 dark:text-gray-400"},li={class:"mt-2.5 ml-6 flex items-center"},ii={class:"ml-auto inline-flex items-center gap-0.5 text-xs text-gray-400 transition-colors duration-150 group-hover:text-red-500 dark:text-gray-500 dark:group-hover:text-red-400"},ci=ge({__name:"ErrorBlock",props:{error:{}},setup(l){const{t:o}=ye(),t=f(!1);function c(r){return r.friendlyMessage||r.message||o("ai.chat.error.unknown")}return(r,m)=>{const g=_e;return n(),i(oe,null,[e("div",{class:"group relative my-2 w-full min-w-[320px] cursor-pointer rounded-lg border border-red-200 bg-red-50/60 px-3.5 py-3 text-[13px] transition-all duration-200 hover:border-red-300 hover:bg-red-50 dark:border-red-900/30 dark:bg-red-950/20 dark:hover:border-red-800/50 dark:hover:bg-red-950/30",onClick:m[0]||(m[0]=d=>t.value=!0)},[e("div",si,[e("div",ni,[u(g,{name:"i-heroicons-exclamation-triangle",class:"h-4 w-4"})]),e("div",oi,s(a(o)("ai.chat.error.title")),1)]),e("div",ri,s(c(l.error)),1),e("div",li,[e("div",ii,[ee(s(a(o)("ai.chat.error.viewDetail"))+" ",1),u(g,{name:"i-heroicons-chevron-right",class:"h-3.5 w-3.5"})])])]),u(ai,{open:t.value,"onUpdate:open":m[1]||(m[1]=d=>t.value=d),error:l.error},null,8,["open","error"])],64)}}}),Nt=ge({__name:"EChartHeatmap",props:{data:{},height:{default:280},mode:{default:"expanded"},minColor:{default:"#fee5e8"},maxColor:{default:"#ee4567"}},setup(l){const o=l,t=x(()=>{let r=0;for(const[,,m]of o.data.data)m>r&&(r=m);return r||1}),c=x(()=>{const r=o.mode==="compact",m=o.data.xLabels.length,g=o.data.yLabels.length;return{tooltip:{position:"top",confine:!0,extraCssText:"max-width: min(360px, 70vw); white-space: normal; word-break: break-word;",formatter:d=>{const p=o.data.xLabels[d.data[0]],h=o.data.yLabels[d.data[1]],y=d.data[2];return`${h} ${p}<br/>消息数: <strong>${y}</strong>`},backgroundColor:"rgba(0, 0, 0, 0.8)",borderColor:"transparent",textStyle:{color:"#fff"}},grid:{left:r?52:72,right:20,top:r?12:24,bottom:r?52:70,outerBoundsMode:"same"},xAxis:{type:"category",data:o.data.xLabels,splitArea:{show:!0},axisLine:{show:!1},axisTick:{show:!1},axisLabel:{fontSize:r?10:11,color:"#6b7280",interval:r&&m>16?"auto":0,hideOverlap:!0}},yAxis:{type:"category",data:o.data.yLabels,splitArea:{show:!0},axisLine:{show:!1},axisTick:{show:!1},axisLabel:{fontSize:r?10:11,color:"#6b7280",interval:r&&g>14?"auto":0,hideOverlap:!0}},visualMap:{min:0,max:t.value,calculable:!0,orient:"horizontal",left:"center",bottom:0,itemWidth:r?8:10,itemHeight:r?84:120,inRange:{color:[o.minColor,o.maxColor]},textStyle:{color:"#6b7280",fontSize:11}},series:[{type:"heatmap",data:o.data.data,label:{show:!1},emphasis:{itemStyle:{shadowBlur:10,shadowColor:"rgba(0, 0, 0, 0.5)"}}}]}});return(r,m)=>(n(),K(Tt,{option:c.value,height:l.height},null,8,["option","height"]))}}),Ht=ge({__name:"EChartLine",props:{data:{},height:{default:288},mode:{default:"expanded"},showArea:{type:Boolean,default:!0},smooth:{type:Boolean,default:!0}},setup(l){const o=l,t=x(()=>{const c=!!o.data.series?.length,r=o.mode==="compact",m=o.data.series?.length??0,g=o.data.labels.length,d=m>(r?3:8),p=!r&&g>30,h=c?o.data.series.map(y=>({name:y.name,type:"line",data:y.values,smooth:o.smooth,symbol:"circle",symbolSize:4,showSymbol:!r&&g<=80,lineStyle:{width:2},areaStyle:o.showArea?{opacity:.08}:void 0,emphasis:{focus:"series"}})):[{type:"line",data:o.data.values,smooth:o.smooth,symbol:"circle",symbolSize:4,showSymbol:!r&&g<=80,lineStyle:{width:2,color:"#ee4567"},itemStyle:{color:"#ee4567"},areaStyle:o.showArea?{color:{type:"linear",x:0,y:0,x2:0,y2:1,colorStops:[{offset:0,color:"rgba(238, 69, 103, 0.3)"},{offset:1,color:"rgba(238, 69, 103, 0.05)"}]}}:void 0,emphasis:{focus:"series",itemStyle:{color:"#ee4567",borderColor:"#fff",borderWidth:2}}}];return{tooltip:{trigger:"axis",confine:!0,extraCssText:"max-width: min(420px, 76vw); white-space: normal; word-break: break-word;",backgroundColor:"rgba(0, 0, 0, 0.8)",borderColor:"transparent",textStyle:{color:"#fff"}},grid:{left:50,right:20,top:c?r?44:56:20,bottom:p?66:34,outerBoundsMode:"same"},legend:c?{type:d?"scroll":"plain",top:0,left:8,right:8,height:32,textStyle:{color:"#6b7280",fontSize:11}}:void 0,xAxis:{type:"category",data:o.data.labels,boundaryGap:!1,axisLine:{show:!1},axisTick:{show:!1},axisLabel:{fontSize:11,color:"#6b7280",interval:"auto",hideOverlap:!0}},yAxis:{type:"value",axisLine:{show:!1},axisTick:{show:!1},splitLine:{lineStyle:{type:"dashed",color:"#e5e7eb"}}},dataZoom:p?[{type:"inside",throttle:50},{type:"slider",height:18,bottom:18,showDetail:!1}]:void 0,series:h}});return(c,r)=>(n(),K(Tt,{option:t.value,height:l.height},null,8,["option","height"]))}}),Ot=ge({__name:"EChartPie",props:{data:{},height:{default:280},mode:{default:"expanded"},doughnut:{type:Boolean,default:!0},innerRadius:{default:"50%"},showLegend:{type:Boolean,default:!0}},setup(l){const o=l,t=["#6366f1","#8b5cf6","#ec4899","#f43f5e","#f97316","#eab308","#22c55e","#14b8a6","#06b6d4","#3b82f6"],c=x(()=>{const r=o.data.labels.map((M,C)=>({name:M,value:o.data.values[C]})),m=o.data.labels.length,g=o.mode==="compact",d=m>(g?8:14),p=m>(g?6:12),h=g?{type:p?"scroll":"plain",orient:"horizontal",left:8,right:8,bottom:0,height:28,textStyle:{fontSize:11,overflow:"truncate",width:72}}:{type:p?"scroll":"plain",orient:"vertical",right:10,top:24,bottom:24,textStyle:{fontSize:12,overflow:"truncate",width:120}},y=!g&&!d,T=o.showLegend&&!y;return{color:t,tooltip:{trigger:"item",formatter:"{b}: {c} ({d}%)",confine:!0,extraCssText:"max-width: min(360px, 70vw); white-space: normal; word-break: break-word;",backgroundColor:"rgba(0, 0, 0, 0.8)",borderColor:"transparent",textStyle:{color:"#fff"}},legend:T?h:void 0,series:[{type:"pie",radius:o.doughnut?[o.innerRadius,g?"58%":"68%"]:g?"58%":"68%",center:T?g?["50%","42%"]:["38%","50%"]:["50%",g?"46%":"50%"],avoidLabelOverlap:!0,itemStyle:{borderRadius:4,borderColor:"#fff",borderWidth:2},label:{show:y,formatter:"{b}",overflow:"truncate",width:110,alignTo:"edge",edgeDistance:12},emphasis:{label:{show:y,fontSize:14,fontWeight:"bold",overflow:"truncate",width:140},itemStyle:{shadowBlur:10,shadowOffsetX:0,shadowColor:"rgba(0, 0, 0, 0.5)"}},data:r}]}});return(r,m)=>(n(),K(Tt,{option:c.value,height:l.height},null,8,["option","height"]))}}),di={class:"my-2 w-full overflow-hidden rounded-lg border border-gray-200 bg-white/80 dark:border-gray-700/70 dark:bg-page-dark/70"},ui={class:"border-b border-gray-100 px-3 py-2 dark:border-gray-800"},mi={class:"flex min-w-0 items-start justify-between gap-3"},gi={class:"min-w-0"},pi={class:"truncate text-sm font-semibold text-gray-900 dark:text-gray-100"},hi={key:0,class:"mt-0.5 line-clamp-2 text-xs text-gray-500 dark:text-gray-400"},vi={class:"flex shrink-0 items-center gap-1.5"},yi={class:"rounded-md bg-gray-100 px-1.5 py-0.5 text-[10px] uppercase text-gray-500 dark:bg-gray-800"},fi={class:"flex max-h-[92vh] flex-col overflow-hidden bg-white dark:bg-page-dark"},xi={class:"flex items-start justify-between gap-4 border-b border-gray-200 px-5 py-4 dark:border-gray-800"},bi={class:"min-w-0"},ki={class:"truncate text-base font-semibold text-gray-900 dark:text-gray-100"},_i={key:0,class:"mt-1 line-clamp-2 text-xs text-gray-500 dark:text-gray-400"},wi={class:"mt-1 text-[11px] text-gray-400 dark:text-gray-500"},$i={class:"min-h-0 flex-1 overflow-auto p-4"},Ci={key:0,class:"flex h-64 items-center justify-center text-xs text-gray-400 dark:text-gray-500"},Si={class:"mt-1 text-[11px] text-gray-400 dark:text-gray-500"},Ti={class:"px-2 py-3"},Mi={key:0,class:"flex h-32 items-center justify-center text-xs text-gray-400 dark:text-gray-500"},Ii=ge({__name:"ChartBlockRenderer",props:{chart:{}},setup(l){const{t:o}=ye(),t=l,c=f(!1),r=x(()=>t.chart.spec.title),m=x(()=>t.chart.spec.subtitle||t.chart.spec.description||""),g=x(()=>t.chart.spec.display?.height??(t.chart.spec.type==="heatmap"?300:260)),d=x(()=>t.chart.rowCount===0),p=x(()=>{const I=[];return t.chart.spec.unit&&I.push(t.chart.spec.unit),t.chart.truncated&&I.push(o("ai.chat.message.chart.truncated")),I.push(o("ai.chat.message.chart.rows",{count:t.chart.rowCount})),I.join(" · ")}),h=x(()=>t.chart.data),y=x(()=>t.chart.data),T=x(()=>t.chart.data),M=x(()=>t.chart.data),C=x(()=>t.chart.spec.type==="pie"?T.value.labels.length>8:t.chart.spec.type==="line"?y.value.labels.length>28||(y.value.series?.length??0)>4:t.chart.spec.type==="bar"?h.value.labels.length>12:t.chart.spec.type==="heatmap"?M.value.xLabels.length*M.value.yLabels.length>180:!1),L=x(()=>{const I=C.value?320:380;return Math.min(g.value,I)}),z=x(()=>{const I=g.value;if(t.chart.spec.type==="pie")return Math.max(I,560);if(t.chart.spec.type==="line")return Math.max(I,y.value.labels.length>40?620:540);if(t.chart.spec.type==="bar"){const w=t.chart.spec.display?.horizontal?h.value.labels.length*28+120:520;return Math.min(Math.max(I,w),820)}return t.chart.spec.type==="heatmap"?Math.min(Math.max(I,M.value.yLabels.length*22+150,560),860):Math.max(I,520)}),$=x(()=>t.chart.spec.type==="pie"?"640px":t.chart.spec.type==="bar"?"720px":"780px");return(I,w)=>{const S=Pe,v=We;return n(),i("div",di,[e("div",ui,[e("div",mi,[e("div",gi,[e("h3",pi,s(r.value),1),m.value?(n(),i("p",hi,s(m.value),1)):E("",!0)]),e("div",vi,[e("span",yi,s(l.chart.spec.type),1),u(v,{open:c.value,"onUpdate:open":w[2]||(w[2]=_=>c.value=_),ui:{overlay:"z-[10040] backdrop-blur-sm",content:"z-[10050] w-[96vw] max-w-6xl max-h-[92vh] overflow-hidden"}},{content:F(()=>[e("div",fi,[e("div",xi,[e("div",bi,[e("h3",ki,s(r.value),1),m.value?(n(),i("p",_i,s(m.value),1)):E("",!0),e("p",wi,s(p.value),1)]),u(S,{icon:"i-heroicons-x-mark",size:"sm",color:"neutral",variant:"ghost",class:"shrink-0",title:a(o)("common.close"),"aria-label":a(o)("common.close"),onClick:w[1]||(w[1]=_=>c.value=!1)},null,8,["title","aria-label"])]),e("div",$i,[e("div",{class:"mx-auto w-full",style:Ke({minWidth:$.value})},[d.value?(n(),i("div",Ci,s(a(o)("ai.chat.message.chart.empty")),1)):l.chart.spec.type==="bar"?(n(),K(Ze,{key:1,data:h.value,height:z.value,mode:"expanded",horizontal:l.chart.spec.display?.horizontal},null,8,["data","height","horizontal"])):l.chart.spec.type==="line"?(n(),K(Ht,{key:2,data:y.value,height:z.value,mode:"expanded"},null,8,["data","height"])):l.chart.spec.type==="pie"?(n(),K(Ot,{key:3,data:T.value,height:z.value,mode:"expanded","show-legend":l.chart.spec.display?.showLegend??!0},null,8,["data","height","show-legend"])):l.chart.spec.type==="heatmap"?(n(),K(Nt,{key:4,data:M.value,height:z.value,mode:"expanded"},null,8,["data","height"])):E("",!0)],4)])])]),default:F(()=>[u(S,{icon:"i-heroicons-arrows-pointing-out",size:"xs",color:"neutral",variant:"ghost",class:"no-capture",title:a(o)("ai.chat.message.chart.expand"),"aria-label":a(o)("ai.chat.message.chart.expand"),onClick:w[0]||(w[0]=Be(()=>{},["stop"]))},null,8,["title","aria-label"])]),_:1},8,["open"])])]),e("p",Si,s(p.value),1)]),e("div",Ti,[d.value?(n(),i("div",Mi,s(a(o)("ai.chat.message.chart.empty")),1)):l.chart.spec.type==="bar"?(n(),K(Ze,{key:1,data:h.value,height:L.value,mode:"compact",horizontal:l.chart.spec.display?.horizontal},null,8,["data","height","horizontal"])):l.chart.spec.type==="line"?(n(),K(Ht,{key:2,data:y.value,height:L.value,mode:"compact"},null,8,["data","height"])):l.chart.spec.type==="pie"?(n(),K(Ot,{key:3,data:T.value,height:L.value,mode:"compact","show-legend":l.chart.spec.display?.showLegend??!0},null,8,["data","height","show-legend"])):l.chart.spec.type==="heatmap"?(n(),K(Nt,{key:4,data:M.value,height:L.value,mode:"compact"},null,8,["data","height"])):E("",!0)])])}}}),Di={class:"my-1.5 w-full overflow-hidden rounded-lg border border-gray-200 bg-gray-50/60 text-[13px] dark:border-gray-700/60 dark:bg-gray-800/30"},Li={class:"text-xs font-semibold text-gray-700 dark:text-gray-200"},Ai={key:0,class:"flex min-w-0 items-center gap-2"},zi={key:0,class:"truncate text-[11px] text-gray-400 dark:text-gray-500"},qi={class:"ml-auto flex shrink-0 items-center gap-1.5"},Ri={class:"text-[11px] text-gray-400 dark:text-gray-500"},Ei={key:0,class:"border-t border-gray-200/70 px-3 py-2 dark:border-gray-700/50"},ji={class:"mb-2 space-y-0.5 text-xs text-gray-600 dark:text-gray-400"},Pi={class:"font-medium"},Ui={key:0},Bi={class:"font-medium"},Fi={key:0,class:"mb-2 space-y-1"},Vi={key:1,class:"py-1.5 text-center text-xs text-gray-400 dark:text-gray-500"},Ni={key:2,class:"space-y-2"},Hi={class:"flex items-center gap-2"},Oi={class:"ml-auto shrink-0 text-[11px] text-gray-400 dark:text-gray-500"},Wi={key:0,class:"mt-1 text-[11px] text-gray-500 dark:text-gray-400"},Yi={class:"mt-1 space-y-0.5"},Qi=["onClick"],Ki={class:"min-w-0 flex-1 text-xs leading-snug text-gray-600 dark:text-gray-300"},Gi={key:0,class:"mr-1 text-gray-400 dark:text-gray-500"},Ji={class:"line-clamp-2 break-words align-middle"},Xi={key:3,class:"mt-1.5 text-right text-[11px] text-gray-400 dark:text-gray-500"},Zi=ge({__name:"EvidenceBlock",props:{evidence:{}},setup(l){const o=l,{t}=ye(),c=ct(),r=f(!1),m=["included","uncertain","excluded"],g=x(()=>[...o.evidence.groups].sort((C,L)=>m.indexOf(C.status)-m.indexOf(L.status))),d=x(()=>o.evidence.groups.reduce((C,L)=>C+L.sources.length,0)),p=x(()=>m.map(C=>({status:C,count:o.evidence.groups.filter(L=>L.status===C).length})).filter(C=>C.count>0)),h=x(()=>o.evidence.warnings??[]),y={included:"bg-emerald-50 text-emerald-600 dark:bg-emerald-900/20 dark:text-emerald-400",uncertain:"bg-amber-50 text-amber-600 dark:bg-amber-900/20 dark:text-amber-400",excluded:"bg-gray-100 text-gray-500 dark:bg-gray-800/40 dark:text-gray-400"},T={included:"bg-emerald-500",uncertain:"bg-amber-500",excluded:"bg-gray-400"};function M(C){c.openChatRecordDrawer({scrollToMessageId:C})}return(C,L)=>{const z=_e;return n(),i("div",Di,[e("button",{type:"button",class:"flex w-full items-center gap-2 px-3 py-2 text-left transition-colors hover:bg-gray-100/60 dark:hover:bg-gray-800/40",onClick:L[0]||(L[0]=$=>r.value=!r.value)},[u(z,{name:"i-heroicons-document-magnifying-glass",class:"h-4 w-4 shrink-0 text-primary-500"}),e("span",Li,s(a(t)("ai.chat.evidence.title")),1),r.value?E("",!0):(n(),i("div",Ai,[(n(!0),i(oe,null,ce(p.value,$=>(n(),i("span",{key:$.status,class:"flex shrink-0 items-center gap-1 text-[11px] text-gray-500 dark:text-gray-400"},[e("span",{class:se(["h-1.5 w-1.5 rounded-full",T[$.status]])},null,2),ee(" "+s(a(t)(`ai.chat.evidence.group.${$.status}`))+" "+s($.count),1)]))),128)),p.value.length===0?(n(),i("span",zi,s(a(t)("ai.chat.evidence.empty")),1)):E("",!0)])),e("span",qi,[e("span",Ri,s(a(t)(`ai.chat.evidence.mode.${l.evidence.mode}`)),1),u(z,{name:r.value?"i-heroicons-chevron-up":"i-heroicons-chevron-down",class:"h-3.5 w-3.5 text-gray-400 dark:text-gray-500"},null,8,["name"])])]),r.value?(n(),i("div",Ei,[e("div",ji,[e("div",null,[e("span",Pi,s(a(t)("ai.chat.evidence.query"))+":",1),ee(" "+s(l.evidence.query),1)]),l.evidence.criteria?(n(),i("div",Ui,[e("span",Bi,s(a(t)("ai.chat.evidence.criteria"))+":",1),ee(" "+s(l.evidence.criteria),1)])):E("",!0)]),h.value.length>0?(n(),i("div",Fi,[(n(!0),i(oe,null,ce(h.value,$=>(n(),i("div",{key:$,class:"flex items-start gap-1.5 rounded bg-amber-50/70 px-2 py-1 text-[11px] text-amber-600 dark:bg-amber-900/15 dark:text-amber-400"},[u(z,{name:"i-heroicons-exclamation-triangle",class:"mt-0.5 h-3 w-3 shrink-0"}),e("span",null,s(a(t)(`ai.chat.evidence.warning.${$}`)),1)]))),128))])):E("",!0),g.value.length===0?(n(),i("div",Vi,s(a(t)("ai.chat.evidence.empty")),1)):(n(),i("div",Ni,[(n(!0),i(oe,null,ce(g.value,$=>(n(),i("div",{key:$.id,class:"rounded-md border border-gray-200/80 bg-white px-2.5 py-1.5 dark:border-gray-700/50 dark:bg-page-dark/30"},[e("div",Hi,[e("span",{class:se(["rounded px-1.5 py-0.5 text-[11px] font-medium",y[$.status]])},s(a(t)(`ai.chat.evidence.group.${$.status}`)),3),e("span",Oi,s($.title),1)]),$.reason?(n(),i("div",Wi,s($.reason),1)):E("",!0),e("ul",Yi,[(n(!0),i(oe,null,ce($.sources,(I,w)=>(n(),i("li",{key:`${$.id}-${w}`,class:"group/source flex cursor-pointer items-start gap-1.5 rounded px-1.5 py-1 transition-colors hover:bg-gray-50 dark:hover:bg-gray-800/40",onClick:S=>M(I.messageId)},[e("div",Ki,[I.senderName?(n(),i("span",Gi,s(I.senderName)+": ",1)):E("",!0),e("span",Ji,s(I.snippet),1)]),u(z,{name:"i-heroicons-arrow-top-right-on-square",class:"mt-0.5 h-3 w-3 shrink-0 text-gray-400 opacity-0 transition-opacity group-hover/source:opacity-100 dark:text-gray-500"})],8,Qi))),128))])]))),128))])),g.value.length>0?(n(),i("div",Xi,s(a(t)("ai.chat.evidence.totalSources",{count:d.value})),1)):E("",!0)])):E("",!0)])}}}),ec=/^\s*!\[[^\]\n]*\]\(\s*(?:(?:https?:\/\/(?:localhost|127\.0\.0\.1)(?::\d+)?)?\/?|\.\/)?chart[\w-]*(?:\.(?:png|jpg|jpeg|webp|svg))?(?:\?[^)\s]*)?\s*(?:"[^"]*")?\s*\)\s*$/gim;function tc(l){return l&&l.replace(ec,"").replace(/\n{3,}/g,`
71
-
72
- `).replace(/^\n+|\n+$/g,"")}function ac(l,o,t){for(let c=o+1;c<l.length;c+=1)if(t(l[c]))return!0;return!1}function sc(l,o){const t=[];return l.forEach((c,r)=>{if(!(o.isFoldableProcessBlock(c)||o.isTextBlock(c)&&ac(l,r,o.isFoldableProcessBlock))){t.push({type:"visible",block:c});return}const g=t[t.length-1];g?.type==="process"?g.blocks.push(c):t.push({type:"process",blocks:[c]})}),t}function nc(l){return l.flatMap(o=>o.type==="visible"?[o.block]:[])}function oc(l,o){const t=Math.max(0,Math.round(l/1e3));if(o.startsWith("zh")||o.startsWith("ja")){if(t<60)return`${t}秒`;if(t<3600){const h=Math.floor(t/60),y=t%60;return`${h}分${y.toString().padStart(2,"0")}秒`}const g=Math.floor(t/3600),d=Math.floor(t%3600/60),p=t%60;return`${g}时${d.toString().padStart(2,"0")}分${p.toString().padStart(2,"0")}秒`}if(t<60)return`${t}s`;if(t<3600){const g=Math.floor(t/60),d=t%60;return`${g}m ${d.toString().padStart(2,"0")}s`}const c=Math.floor(t/3600),r=Math.floor(t%3600/60),m=t%60;return`${c}h ${r.toString().padStart(2,"0")}m ${m.toString().padStart(2,"0")}s`}function rc(l,o){return l.type!=="process"?0:l.blocks.reduce((t,c)=>t+(o(c)??0),0)}function lc(l,o){if(o.isProcessing)return o.labels.processing;const t=rc(l,o.getBlockDurationMs),c=t>0?` ${oc(t,o.locale)}`:"";return`${o.labels.processed}${c}`}const ic={key:0,class:"w-full rounded-lg border border-gray-200 bg-gray-50/80 dark:border-gray-700/50 dark:bg-gray-800/40"},cc={class:"flex cursor-pointer select-none items-center gap-2 px-3 py-2 text-xs font-medium text-gray-500 transition-colors hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-200"},dc={class:"border-t border-gray-200/60 px-3 py-2.5 dark:border-gray-700/40"},uc=["innerHTML"],mc={class:"mt-2 text-[11px] text-gray-400 dark:text-gray-500"},gc={key:0,class:"rounded-2xl bg-gray-100 p-4 text-gray-900 dark:bg-gray-800 dark:text-gray-100"},pc=["onKeydown"],hc={class:"mt-2 flex items-center justify-between"},vc={class:"flex cursor-pointer items-center gap-1.5 text-xs text-gray-500 dark:text-gray-400"},yc={class:"flex gap-2"},fc={key:1,class:"rounded-3xl bg-gray-100 px-5 py-3 text-gray-900 dark:bg-gray-800 dark:text-gray-100"},xc=["innerHTML"],bc={key:2,class:"space-y-2"},kc=["aria-expanded","onClick"],_c={class:"truncate"},wc={key:0,class:"py-1 text-gray-900 dark:text-gray-100"},$c=["innerHTML"],Cc={key:0,class:"ml-1 inline-block h-4 w-1.5 animate-pulse rounded-sm bg-gray-800 dark:bg-gray-200"},Sc={key:1,class:"mb-2 border-l-2 border-gray-200 pl-4 py-1 text-sm text-gray-500 dark:border-gray-700 dark:text-gray-400"},Tc={class:"cursor-pointer select-none text-xs font-medium transition-colors hover:text-gray-700 dark:hover:text-gray-300"},Mc={key:0,class:"ml-2 text-xs text-gray-400 dark:text-gray-500"},Ic={key:1,class:"ml-2 inline-flex items-center gap-1 text-[11px] text-gray-400 dark:text-gray-500"},Dc={class:"mt-2 prose prose-sm dark:prose-invert max-w-none leading-relaxed text-xs"},Lc={key:0,class:"mb-2 font-medium text-gray-700 dark:text-gray-200"},Ac={class:"not-prose space-y-2 text-xs leading-relaxed"},zc={class:"font-medium text-gray-800 dark:text-gray-200"},qc={key:0,class:"mt-1 text-gray-500 dark:text-gray-400"},Rc={class:"mt-0.5 text-gray-500 dark:text-gray-400"},Ec={key:1,class:"not-prose mt-2 border-t border-gray-100 pt-2 dark:border-gray-800"},jc={class:"text-[11px] font-medium text-gray-500 dark:text-gray-400"},Pc={class:"mt-1 list-disc space-y-0.5 pl-4 text-xs leading-relaxed text-gray-600 dark:text-gray-300"},Uc=["innerHTML"],Bc={key:2,class:"inline-flex items-center gap-1.5 rounded-lg bg-gray-50 px-3 py-1.5 text-xs font-medium text-gray-600 dark:bg-gray-800/50 dark:text-gray-400"},Fc={key:3,open:"",class:"mb-2 border-l-2 border-gray-200 py-1 pl-4 text-sm text-gray-600 dark:border-gray-700 dark:text-gray-400"},Vc={class:"flex cursor-pointer select-none items-center gap-2 text-xs font-medium text-gray-500 transition-colors hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300"},Nc={class:"min-w-0 truncate"},Hc={class:"mt-2"},Oc=["innerHTML"],Wc={key:1,class:"space-y-2"},Yc={class:"font-medium text-gray-800 dark:text-gray-200"},Qc={class:"mt-1 text-gray-500 dark:text-gray-400"},Kc={class:"mt-0.5 text-gray-500 dark:text-gray-400"},Gc={key:2,class:"mt-2 border-t border-gray-100 pt-2 dark:border-gray-800"},Jc={class:"text-[11px] font-medium text-gray-500 dark:text-gray-400"},Xc={class:"mt-1 list-disc space-y-0.5 pl-4 text-xs leading-relaxed text-gray-600 dark:text-gray-300"},Zc={key:4,class:"mb-2 border-l-2 border-gray-200 py-1 pl-4 text-sm text-gray-600 dark:border-gray-700 dark:text-gray-400"},ed={class:"flex items-center gap-2 text-xs font-medium text-gray-500 dark:text-gray-400"},td={key:0,class:"inline-flex items-center gap-1 text-[11px] font-normal text-gray-400 dark:text-gray-500"},ad=["innerHTML"],sd={key:7,class:"w-full max-w-full"},nd={class:"inline-flex cursor-pointer list-none select-none [&::-webkit-details-marker]:hidden"},od={class:"flex min-w-0 items-baseline gap-1.5 font-medium"},rd={key:0,class:"max-w-[200px] truncate text-[11px] font-normal opacity-75 sm:max-w-[300px]"},ld={class:"shrink-0 text-[11px] font-normal opacity-75"},id={class:"mt-2 max-w-full rounded-lg border border-gray-200 bg-gray-50/80 dark:border-gray-700/70 dark:bg-page-dark/40"},cd={class:"flex items-center justify-between gap-2 border-b border-gray-200/70 px-3 py-2 dark:border-gray-700/70"},dd={class:"text-xs font-medium text-gray-500 dark:text-gray-400"},ud={key:0,class:"border-b border-amber-200/70 bg-amber-50 px-3 py-2 text-xs text-amber-700 dark:border-amber-800/60 dark:bg-amber-950/30 dark:text-amber-300"},md={class:"max-h-[28rem] overflow-auto whitespace-pre-wrap break-words px-3 py-2.5 text-xs leading-relaxed text-gray-700 dark:text-gray-200"},gd={class:"flex min-w-0 items-baseline gap-1.5 font-medium"},pd={key:0,class:"max-w-[200px] truncate text-[11px] font-normal opacity-75 sm:max-w-[300px]"},hd={key:1,class:"shrink-0 text-[11px] font-normal opacity-75"},vd={key:0,class:"flex items-center gap-2 px-1 py-2 text-sm text-gray-500 dark:text-gray-400"},yd={key:3,class:"py-1 text-gray-900 dark:text-gray-100"},fd=["innerHTML"],xd={key:0,class:"ml-1 inline-block h-4 w-1.5 animate-pulse rounded-sm bg-gray-800 dark:bg-gray-200"},bd={class:"text-xs text-gray-400"},qt=ge({__name:"ChatMessage",props:{messageId:{},role:{},content:{},timestamp:{},isStreaming:{type:Boolean},contentBlocks:{},showCaptureButton:{type:Boolean},editable:{type:Boolean}},emits:["edit","fork"],setup(l,{emit:o}){const{t,te:c,locale:r}=ye(),m=Je(),g=l,d=o,p=x(()=>Ie(g.timestamp).format("HH:mm")),h=x(()=>g.role==="user"),y=x(()=>g.role==="summary"),T=f(!1),M=f(g.content),C=f(null),L=x(()=>h.value&&g.editable&&!g.isStreaming&&!!g.messageId),z=x(()=>!h.value&&!y.value&&!g.isStreaming&&!!g.messageId),$=f(!1),I=new Xt({html:!1,breaks:!0,linkify:!0,typographer:!0});I.renderer.rules.link_open=(R,D,V,P,B)=>(R[D].attrSet("target","_blank"),R[D].attrSet("rel","noopener noreferrer"),B.renderToken(R,D,V));function w(R){return R?I.render(R):""}function S(R){const D=R?.toLowerCase()||"think";return D==="analysis"?t("ai.chat.message.think.labels.analysis"):D==="reasoning"?t("ai.chat.message.think.labels.reasoning"):D==="reflection"?t("ai.chat.message.think.labels.reflection"):D==="plan_validation"?t("ai.chat.message.think.labels.planValidation"):D==="think"||D==="thought"||D==="thinking"?t("ai.chat.message.think.labels.think"):t("ai.chat.message.think.labels.other",{tag:R})}function v(R){if(!R)return"";const D=(R/1e3).toFixed(1);return t("ai.chat.message.think.duration",{seconds:D})}const _=x(()=>g.content?I.render(b(g.content)):"");de(()=>g.content,R=>{T.value||(M.value=R)});function A(){const R=C.value;if(!R)return;R.style.height="auto";const D=384,V=Math.min(R.scrollHeight,D);R.style.height=`${V}px`,R.style.overflowY=R.scrollHeight>D?"auto":"hidden"}async function j(){L.value&&(M.value=g.content,T.value=!0,await Fe(),A(),C.value?.focus())}function U(){T.value=!1,M.value=g.content,$.value=!1}function k(){if(!g.messageId)return;const R=M.value.trim();if(!R||R===g.content.trim()){U();return}T.value=!1,d("edit",{messageId:g.messageId,content:R,overwriteSubsequent:$.value}),$.value=!1}function b(R){return tc(R)}const q=x(()=>{const R=g.contentBlocks||[];return R.filter((D,V)=>D.type==="text"?b(D.text).trim().length>0:D.type==="think"?D.text.trim().length>0:D.type==="error"?!Ba(R,V,{isStreaming:g.isStreaming}):!0)});function Y(R){return R.type==="think"||R.type==="tool"||R.type==="plan"||R.type==="plan_draft"}function W(R){return R.type==="text"}const J=x(()=>sc(q.value,{isFoldableProcessBlock:Y,isTextBlock:W})),me=x(()=>nc(J.value)),pe=f({});function X(R){return R.type==="process"?R.blocks:[R.block]}function N(R){return`${g.messageId??g.timestamp}:process:${R}`}function ae(R){const D=N(R),V=pe.value[D];return V!==void 0?V:G(R)}function ue(R){const D=N(R);pe.value={...pe.value,[D]:!ae(R)}}function he(R){return q.value[q.value.length-1]===R}function G(R){return!!g.isStreaming&&R===J.value.length-1}function O(R){return R.type==="think"?R.durationMs??0:R.type==="tool"?R.tool.durationMs??0:0}function H(R,D){return lc(R,{getBlockDurationMs:O,isProcessing:G(D),labels:{processed:t("ai.chat.message.process.processed"),processing:t("ai.chat.message.process.processing")},locale:r.value})}const le=x(()=>g.role==="assistant"&&q.value.length>0);function fe(R){return c(`ai.assistant.builtinToolDesc.${R.name}`)?t(`ai.assistant.builtinToolDesc.${R.name}`):R.displayName}function xe(R){return R==="running"?"running":R==="done"?"done":"error"}function ke(R){return R.displayResult??R.result??""}function ne(R){return R.status!=="running"&&ke(R).trim().length>0}function re(R){return!R.displayResult&&(R.result??"").includes("…[truncated]")}async function ve(R){const D=ke(R);if(D.trim())try{await navigator.clipboard.writeText(D),m.success(t("ai.chat.message.toolResult.copySuccess"))}catch(V){m.fail(t("ai.chat.message.toolResult.copyFailed"),{description:String(V)})}}function Me(R){return R.length===0?t("ai.chat.message.plan.noTools"):R.join(", ")}function $e(R){try{const D=JSON.parse(R.trim());if(!D||typeof D!="object")return null;const V=D,P=Array.isArray(V.steps)?V.steps.filter(B=>!!B&&typeof B=="object").map(B=>({goal:typeof B.goal=="string"?B.goal:"",suggestedTools:Array.isArray(B.suggestedTools)?B.suggestedTools.filter(Z=>typeof Z=="string"):[],evidenceNeeded:typeof B.evidenceNeeded=="string"?B.evidenceNeeded:""})).filter(B=>B.goal):[];return{title:typeof V.title=="string"?V.title:void 0,steps:P,successCriteria:Array.isArray(V.successCriteria)?V.successCriteria.filter(B=>typeof B=="string"):[]}}catch{return null}}const qe=new Map;function Ae(R){const D=qe.get(R);if(D)return D;const V=$e(R);return V&&qe.set(R,V),V}function Se(R){if(R.start_time||R.end_time){const D=R.start_time?String(R.start_time):"",V=R.end_time?String(R.end_time):"";return D&&V?`${D} ~ ${V}`:D||V}if(R.year)if(r.value.startsWith("zh")){let D=`${R.year}年`;return R.month&&(D+=`${R.month}月`,R.day&&(D+=`${R.day}日`,R.hour!==void 0&&(D+=` ${R.hour}点`))),D}else{const D=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];let V="";if(R.month){if(V=D[R.month-1]||String(R.month),R.day&&(V+=` ${R.day}`,R.hour!==void 0)){const P=R.hour,B=P>=12?"pm":"am",Z=P%12||12;V+=`, ${Z}${B}`}V+=`, ${R.year}`}else V=String(R.year);return V}return""}function Re(R){if(!R.params)return"";const D=R.name,V=R.params;if(D==="search_messages"){const B=V.keywords,Z=[];B&&B.length>0&&Z.push(`${t("ai.chat.message.toolParams.keywords")}: ${B.join(", ")}`);const Q=Se(V);return Q&&Z.push(`${t("ai.chat.message.toolParams.time")}: ${Q}`),Z.join(" | ")}if(D==="get_recent_messages"){const B=[];B.push(t("ai.chat.message.toolParams.getMessages",{count:V.limit||100}));const Z=Se(V);return Z&&B.push(Z),B.join(" | ")}if(D==="get_conversation_between"){const B=[],Z=Se(V);return Z&&B.push(`${t("ai.chat.message.toolParams.time")}: ${Z}`),V.limit&&B.push(t("ai.chat.message.toolParams.limit",{count:V.limit})),B.join(" | ")}if(D==="get_message_context"){const B=V.message_ids,Z=V.context_size||20;return B&&B.length>0?t("ai.chat.message.toolParams.contextWithMessages",{msgCount:B.length,contextSize:Z}):t("ai.chat.message.toolParams.context",{size:Z})}if(D==="get_member_stats")return t("ai.chat.message.toolParams.topMembers",{count:V.top_n||10});if(D==="get_time_stats"){const B=V.type;return t(`ai.chat.message.toolParams.timeStats.${B}`)||String(V.type)}if(D==="render_chart"){const B=V.spec&&typeof V.spec=="object"?V.spec:null;return[B?.title,B?.type].filter(Q=>typeof Q=="string"&&Q.length>0).join(" | ")}if(D==="get_members")return V.search?`${t("ai.chat.message.toolParams.search")}: ${V.search}`:t("ai.chat.message.toolParams.getMemberList");if(D==="get_member_name_history")return`${t("ai.chat.message.toolParams.memberId")}: ${V.member_id}`;if(D==="semantic_search_current_chat"){const B=typeof V.query=="string"?V.query:"";return B?B.length>40?`“${B.slice(0,40)}…”`:`“${B}”`:""}const P=[];for(const[B,Z]of Object.entries(V)){if(Z==null||Z==="")continue;const Q=typeof Z=="object"?JSON.stringify(Z):String(Z),te=Q.length>30?Q.substring(0,30)+"...":Q;if(P.push(`${B}: ${te}`),P.length>=3){P.push("...");break}}return P.join(" | ")}const je=x(()=>!le.value&&g.content.trim()?b(g.content):le.value?me.value.map(D=>{if(D.type==="text")return b(D.text);if(D.type==="think"){const V=S(D.tag),P=D.text.split(`
73
- `).map(B=>`> ${B}`).join(`
74
- `);return`> ${V}
75
- >
76
- ${P}`}if(D.type==="skill")return`> ${t("ai.skill.active.label",{name:D.skillName})}`;if(D.type==="chart")return`> Chart: ${D.chart.spec.title}`;if(D.type==="evidence"){const V=`> ${t("ai.chat.evidence.title")}`,P=D.evidence.groups.map(B=>{const Z=t(`ai.chat.evidence.group.${B.status}`),Q=B.sources.map(te=>`> - ${te.snippet}`).join(`
77
- `);return`> [${Z}] ${B.title}
78
- ${Q}`});return[V,...P].join(`
79
- `)}if(D.type==="plan"){const V=D.plan.steps.map((Z,Q)=>`${Q+1}. ${Z.goal}
80
- - ${t("ai.chat.message.plan.evidenceNeeded")}: ${Z.evidenceNeeded}
81
- - ${t("ai.chat.message.plan.suggestedTools")}: ${Me(Z.suggestedTools)}`).join(`
82
- `),P=D.plan.successCriteria.map(Z=>`- ${Z}`).join(`
83
- `),B=D.displayText?`${D.displayText.split(`
84
- `).map(Z=>`> ${Z}`).join(`
85
- `)}
86
-
87
- `:"";return D.displayText?`> ${t("ai.chat.message.plan.label")}: ${D.plan.title}
88
-
89
- ${B.trimEnd()}`:`> ${t("ai.chat.message.plan.label")}: ${D.plan.title}
90
-
91
- ${V}
92
-
93
- ${t("ai.chat.message.plan.successCriteria")}:
94
- ${P}`}if(D.type==="plan_draft")return`> ${t("ai.chat.message.plan.label")}
95
- >
96
- ${D.text.split(`
97
- `).map(V=>`> ${V}`).join(`
98
- `)}`;if(D.type==="tool"){const V=fe(D.tool),P=Re(D.tool),B=P?` (${P})`:"";return`- [${xe(D.tool.status)}] ${V}${B}`}return""}).filter(D=>D.trim().length>0).join(`
99
-
100
- `):""),Ue=x(()=>!g.isStreaming&&je.value.trim().length>0);async function ie(){if(Ue.value)try{await navigator.clipboard.writeText(je.value),m.success(t("ai.chat.message.copy.success"))}catch(R){m.fail(t("ai.chat.message.copy.failed"),{description:String(R)})}}return(R,D)=>{const V=_e,P=Pe,B=pt;return n(),i("div",{class:se(["flex items-start gap-3",[h.value&&!T.value?"flex-row-reverse":"",y.value?"justify-center":""]])},[e("div",{class:se([h.value&&!T.value?"max-w-[85%] min-w-0":"w-full min-w-0"])},[y.value?(n(),i("details",ic,[e("summary",cc,[u(V,{name:"i-heroicons-arrow-path",class:"h-3.5 w-3.5 shrink-0"}),e("span",null,s(a(t)("ai.chat.message.summary.label")),1),u(V,{name:"i-heroicons-chevron-right",class:"ml-auto h-3 w-3 transition-transform [[open]>&]:rotate-90"})]),e("div",dc,[e("div",{class:"prose prose-sm dark:prose-invert max-w-none text-xs leading-relaxed text-gray-600 dark:text-gray-300",innerHTML:_.value},null,8,uc),e("p",mc,s(a(t)("ai.chat.message.summary.info")),1)])])):h.value?(n(),i(oe,{key:1},[T.value?(n(),i("div",gc,[He(e("textarea",{ref_key:"editTextareaRef",ref:C,"onUpdate:modelValue":D[0]||(D[0]=Z=>M.value=Z),rows:"2",class:"w-full resize-none rounded-xl border border-primary-200 bg-white/90 px-4 py-3 text-sm leading-relaxed outline-none focus:border-primary-400 dark:border-primary-400/40 dark:bg-page-dark/70",onInput:A,onKeydown:[ot(Be(U,["prevent"]),["esc"]),ot(Be(k,["ctrl","prevent"]),["enter"]),ot(Be(k,["meta","prevent"]),["enter"])]},null,40,pc),[[rt,M.value]]),e("div",hc,[e("label",vc,[He(e("input",{"onUpdate:modelValue":D[1]||(D[1]=Z=>$.value=Z),type:"checkbox",class:"h-3.5 w-3.5 rounded border-gray-300 text-primary-500 focus:ring-primary-500 dark:border-gray-600"},null,512),[[ss,$.value]]),ee(" "+s(a(t)("ai.chat.message.edit.overwriteSubsequent")),1)]),e("div",yc,[u(P,{size:"xs",variant:"ghost",color:"gray",onClick:U},{default:F(()=>[ee(s(a(t)("common.cancel")),1)]),_:1}),u(P,{size:"xs",color:"primary",onClick:k},{default:F(()=>[ee(s(a(t)("ai.chat.message.edit.submit")),1)]),_:1})])])])):(n(),i("div",fc,[e("div",{class:"prose prose-sm dark:prose-invert max-w-none leading-relaxed",innerHTML:_.value},null,8,xc)]))],64)):le.value?(n(),i("div",bc,[(n(!0),i(oe,null,ce(J.value,(Z,Q)=>(n(),i("div",{key:Q,class:se([Z.type==="process"?"py-1":""])},[Z.type==="process"?(n(),i("button",{key:0,type:"button",class:"inline-flex max-w-full items-center gap-1.5 text-left text-xs text-gray-400 transition-colors hover:text-gray-600 dark:text-gray-500 dark:hover:text-gray-300","aria-expanded":ae(Q),onClick:te=>ue(Q)},[u(V,{name:ae(Q)?"i-heroicons-chevron-down":"i-heroicons-chevron-right",class:"h-3 w-3 shrink-0"},null,8,["name"]),e("span",_c,s(H(Z,Q)),1),G(Q)?(n(),K(V,{key:0,name:"i-heroicons-arrow-path",class:"h-3 w-3 shrink-0 animate-spin"})):E("",!0)],8,kc)):E("",!0),He(e("div",{class:se([Z.type==="process"?"mt-2 space-y-2 pl-4":""])},[(n(!0),i(oe,null,ce(X(Z),(te,Ee)=>(n(),i(oe,{key:`${Q}-${Ee}`},[te.type==="text"?(n(),i("div",wc,[e("div",{class:"prose prose-sm dark:prose-invert max-w-none leading-relaxed",innerHTML:w(b(te.text))},null,8,$c),l.isStreaming&&he(te)?(n(),i("span",Cc)):E("",!0)])):te.type==="think"?(n(),i("details",Sc,[e("summary",Tc,[ee(s(S(te.tag))+" ",1),te.durationMs?(n(),i("span",Mc,s(v(te.durationMs)),1)):E("",!0),l.isStreaming&&he(te)?(n(),i("span",Ic,[e("span",null,s(a(t)("ai.chat.message.think.loading")),1),D[3]||(D[3]=e("span",{class:"flex gap-0.5"},[e("span",{class:"h-1 w-1 animate-bounce rounded-full bg-gray-400 [animation-delay:0ms]"}),e("span",{class:"h-1 w-1 animate-bounce rounded-full bg-gray-400 [animation-delay:150ms]"}),e("span",{class:"h-1 w-1 animate-bounce rounded-full bg-gray-400 [animation-delay:300ms]"})],-1))])):E("",!0)]),e("div",Dc,[te.tag==="plan_validation"&&Ae(te.text)?(n(),i(oe,{key:0},[Ae(te.text)?.title?(n(),i("div",Lc,s(Ae(te.text)?.title),1)):E("",!0),e("ol",Ac,[(n(!0),i(oe,null,ce(Ae(te.text)?.steps,(De,Te)=>(n(),i("li",{key:Te,class:"text-gray-600 dark:text-gray-300"},[e("div",zc,s(De.goal),1),De.evidenceNeeded?(n(),i("div",qc,s(a(t)("ai.chat.message.plan.evidenceNeeded"))+": "+s(De.evidenceNeeded),1)):E("",!0),e("div",Rc,s(a(t)("ai.chat.message.plan.suggestedTools"))+": "+s(Me(De.suggestedTools)),1)]))),128))]),Ae(te.text)?.successCriteria.length?(n(),i("div",Ec,[e("div",jc,s(a(t)("ai.chat.message.plan.successCriteria")),1),e("ul",Pc,[(n(!0),i(oe,null,ce(Ae(te.text)?.successCriteria,(De,Te)=>(n(),i("li",{key:Te},s(De),1))),128))])])):E("",!0)],64)):(n(),i("div",{key:1,innerHTML:w(te.text)},null,8,Uc))])])):te.type==="skill"?(n(),i("div",Bc,[u(V,{name:"i-heroicons-bolt",class:"h-3.5 w-3.5"}),e("span",null,s(a(t)("ai.skill.active.label",{name:te.skillName})),1)])):te.type==="plan"?(n(),i("details",Fc,[e("summary",Vc,[u(V,{name:"i-heroicons-clipboard-document-list",class:"h-3.5 w-3.5 shrink-0"}),e("span",Nc,s(a(t)("ai.chat.message.plan.label"))+" · "+s(te.plan.title),1)]),e("div",Hc,[te.displayText?(n(),i("div",{key:0,class:"prose prose-sm dark:prose-invert max-w-none text-xs leading-relaxed text-gray-600 dark:text-gray-300",innerHTML:w(te.displayText)},null,8,Oc)):(n(),i("ol",Wc,[(n(!0),i(oe,null,ce(te.plan.steps,(De,Te)=>(n(),i("li",{key:Te,class:"text-xs leading-relaxed"},[e("div",Yc,s(Te+1)+". "+s(De.goal),1),e("div",Qc,s(a(t)("ai.chat.message.plan.evidenceNeeded"))+": "+s(De.evidenceNeeded),1),e("div",Kc,s(a(t)("ai.chat.message.plan.suggestedTools"))+": "+s(Me(De.suggestedTools)),1)]))),128))])),te.displayText?E("",!0):(n(),i("div",Gc,[e("div",Jc,s(a(t)("ai.chat.message.plan.successCriteria")),1),e("ul",Xc,[(n(!0),i(oe,null,ce(te.plan.successCriteria,(De,Te)=>(n(),i("li",{key:Te},s(De),1))),128))])]))])])):te.type==="plan_draft"?(n(),i("div",Zc,[e("div",ed,[u(V,{name:"i-heroicons-clipboard-document-list",class:"h-3.5 w-3.5 shrink-0"}),e("span",null,s(a(t)("ai.chat.message.plan.label")),1),l.isStreaming?(n(),i("span",td,[...D[4]||(D[4]=[e("span",{class:"flex gap-0.5"},[e("span",{class:"h-1 w-1 animate-bounce rounded-full bg-gray-400 [animation-delay:0ms]"}),e("span",{class:"h-1 w-1 animate-bounce rounded-full bg-gray-400 [animation-delay:150ms]"}),e("span",{class:"h-1 w-1 animate-bounce rounded-full bg-gray-400 [animation-delay:300ms]"})],-1)])])):E("",!0)]),e("div",{class:"mt-2 prose prose-sm dark:prose-invert max-w-none text-xs leading-relaxed text-gray-600 dark:text-gray-300",innerHTML:w(te.text)},null,8,ad)])):te.type==="chart"?(n(),K(Ii,{key:5,chart:te.chart},null,8,["chart"])):te.type==="evidence"?(n(),K(Zi,{key:6,evidence:te.evidence},null,8,["evidence"])):te.type==="tool"&&ne(te.tool)?(n(),i("details",sd,[e("summary",nd,[e("div",{class:se(["flex w-fit items-center gap-1.5 rounded-lg bg-gray-50 px-2.5 py-1 text-xs text-gray-500 transition-colors hover:bg-gray-100 dark:bg-gray-800/30 dark:text-gray-400/80 dark:hover:bg-gray-800/60",[te.tool.status==="error"?"bg-red-50 text-red-600 dark:bg-red-900/20 dark:text-red-400":""]])},[u(V,{name:te.tool.status==="error"?"i-heroicons-exclamation-circle":"i-heroicons-wrench-screwdriver",class:"h-3.5 w-3.5 shrink-0"},null,8,["name"]),e("div",od,[e("span",null,s(fe(te.tool)),1),Re(te.tool)?(n(),i("span",rd,s(Re(te.tool)),1)):E("",!0),e("span",ld," · "+s(a(t)("ai.chat.message.toolResult.view")),1)]),u(V,{name:"i-heroicons-chevron-right",class:"h-3 w-3 shrink-0 transition-transform [[open]>&]:rotate-90"})],2)]),e("div",id,[e("div",cd,[e("span",dd,s(a(t)("ai.chat.message.toolResult.title")),1),u(P,{size:"xs",variant:"ghost",color:"primary",icon:"i-heroicons-document-duplicate",title:a(t)("ai.chat.message.toolResult.copy"),onClick:Be(De=>ve(te.tool),["stop"])},null,8,["title","onClick"])]),re(te.tool)?(n(),i("div",ud,s(a(t)("ai.chat.message.toolResult.displayTruncated")),1)):E("",!0),e("pre",md,s(ke(te.tool)),1)])])):te.type==="tool"?(n(),i("div",{key:8,class:se(["flex w-fit items-center gap-1.5 rounded-lg px-2.5 py-1 text-xs transition-colors",[te.tool.status==="running"?"bg-gray-100 text-gray-600 dark:bg-gray-800/50 dark:text-gray-400":te.tool.status==="done"?"bg-gray-50 text-gray-500 dark:bg-gray-800/30 dark:text-gray-400/80":"bg-red-50 text-red-600 dark:bg-red-900/20 dark:text-red-400"]])},[u(V,{name:te.tool.status==="running"?"i-heroicons-arrow-path":te.tool.status==="done"?"i-heroicons-wrench-screwdriver":"i-heroicons-exclamation-circle",class:se(["h-3.5 w-3.5 shrink-0",[te.tool.status==="running"?"animate-spin":""]])},null,8,["name","class"]),e("div",gd,[e("span",null,s(fe(te.tool)),1),Re(te.tool)?(n(),i("span",pd,s(Re(te.tool)),1)):E("",!0),te.tool.status==="done"&&te.tool.durationMs?(n(),i("span",hd," · "+s(v(te.tool.durationMs)),1)):E("",!0)])],2)):te.type==="error"?(n(),K(ci,{key:9,error:te.error},null,8,["error"])):E("",!0)],64))),128))],2),[[it,Z.type!=="process"||ae(Q)]])],2))),128)),l.isStreaming&&q.value.length>0&&q.value[q.value.length-1].type==="tool"?(n(),i("div",vd,[D[5]||(D[5]=e("span",{class:"flex gap-1"},[e("span",{class:"h-1.5 w-1.5 animate-bounce rounded-full bg-gray-400 [animation-delay:0ms]"}),e("span",{class:"h-1.5 w-1.5 animate-bounce rounded-full bg-gray-400 [animation-delay:150ms]"}),e("span",{class:"h-1.5 w-1.5 animate-bounce rounded-full bg-gray-400 [animation-delay:300ms]"})],-1)),e("span",null,s(a(t)("ai.chat.message.generating")),1)])):E("",!0)])):(n(),i("div",yd,[e("div",{class:"prose prose-sm dark:prose-invert max-w-none leading-relaxed",innerHTML:_.value},null,8,fd),l.isStreaming?(n(),i("span",xd)):E("",!0)])),!y.value&&!l.isStreaming?(n(),i("div",{key:4,class:se(["mt-1 flex items-center gap-2 px-1",[h.value?"flex-row-reverse":""]])},[e("span",bd,s(p.value),1),u(B,{text:a(t)("ai.chat.message.copy.tooltip"),class:"no-capture"},{default:F(()=>[u(P,{icon:"i-heroicons-document-duplicate",variant:"ghost",color:"primary",size:"xs",disabled:!Ue.value,onClick:ie},null,8,["disabled"])]),_:1},8,["text"]),L.value?(n(),K(B,{key:0,text:a(t)("ai.chat.message.edit.tooltip"),class:"no-capture"},{default:F(()=>[u(P,{icon:"i-heroicons-pencil-square",variant:"ghost",color:"primary",size:"xs",onClick:j})]),_:1},8,["text"])):E("",!0),z.value?(n(),K(B,{key:1,text:a(t)("ai.chat.message.fork.tooltip"),class:"no-capture"},{default:F(()=>[u(P,{icon:"i-heroicons-arrow-top-right-on-square",variant:"ghost",color:"primary",size:"xs",onClick:D[2]||(D[2]=Z=>d("fork",l.messageId))})]),_:1},8,["text"])):E("",!0),l.showCaptureButton&&!h.value&&!l.isStreaming?(n(),K(ht,{key:2,size:"xs",type:"element","target-selector":".qa-pair","markdown-fix":"","capture-frame":"","progressive-narrowing":!0})):E("",!0)],2)):E("",!0)],2)],2)}}}),kd={key:0,class:"absolute bottom-full left-0 z-20 mb-1.5 w-[240px] max-w-[calc(100vw-2rem)]"},_d={class:"overflow-hidden rounded-2xl border border-gray-200 bg-white shadow-overlay dark:border-gray-700 dark:bg-page-dark"},wd={class:"flex items-center justify-between border-b border-gray-100 px-2.5 py-1.5 dark:border-gray-800"},$d={class:"flex items-center gap-1.5 text-[11px] text-gray-500 dark:text-gray-400"},Cd=["title"],Sd={key:0,class:"px-3 py-4 text-center text-xs text-gray-500 dark:text-gray-400"},Td=["onMouseenter","onClick"],Md={class:"min-w-0 flex-1"},Id={class:"flex items-center gap-1.5"},Dd={class:"truncate text-xs font-medium"},Ld={class:"mt-0.5 line-clamp-2 text-[11px] leading-4 text-gray-500 dark:text-gray-400"},Ad={key:2,class:"px-3 py-4 text-center"},zd={class:"text-sm font-medium text-gray-700 dark:text-gray-200"},qd={class:"mt-1 text-xs leading-5 text-gray-500 dark:text-gray-400"},Rd=ge({__name:"MemberMentionMenu",props:{visible:{type:Boolean},members:{},highlightIndex:{},loading:{type:Boolean}},emits:["select","close","highlight"],setup(l,{emit:o}){const{t}=ye(),c=l,r=o,m=f(null);return de(()=>[c.visible,c.highlightIndex,c.members.length],async([g,d])=>{if(!g||!m.value)return;await Fe(),m.value.querySelectorAll("[data-mention-item]")[d]?.scrollIntoView({block:"nearest"})}),(g,d)=>{const p=_e;return n(),K(lt,{name:"mention-menu"},{default:F(()=>[l.visible?(n(),i("div",kd,[e("div",_d,[e("div",wd,[e("div",$d,[e("span",null,s(a(t)("ai.chat.input.mentionHint")),1)]),e("button",{type:"button",class:"rounded-md p-0.5 text-gray-400 transition-colors hover:bg-gray-100 hover:text-gray-600 dark:hover:bg-gray-800 dark:hover:text-gray-300",title:a(t)("common.close"),onClick:d[0]||(d[0]=h=>r("close"))},[u(p,{name:"i-heroicons-x-mark",class:"h-3.5 w-3.5"})],8,Cd)]),c.loading?(n(),i("div",Sd,s(a(t)("common.loading")),1)):c.members.length>0?(n(),i("div",{key:1,ref_key:"listRef",ref:m,class:"max-h-72 overflow-y-auto p-1.5"},[(n(!0),i(oe,null,ce(c.members,(h,y)=>(n(),i("button",{key:`${h.memberId}-${h.insertName}`,type:"button","data-mention-item":"",class:se(["flex w-full items-start justify-between gap-1.5 rounded-lg px-2.5 py-1.5 text-left transition-colors",y===c.highlightIndex?"bg-primary-50 text-gray-900 dark:bg-primary-950/30 dark:text-gray-100":"text-gray-700 hover:bg-gray-50 dark:text-gray-200 dark:hover:bg-gray-800/80"]),onMouseenter:T=>r("highlight",y),onClick:T=>r("select",h)},[e("div",Md,[e("div",Id,[e("span",Dd,"@"+s(h.insertName),1)]),e("p",Ld,s(h.subtitle),1)])],42,Td))),128))],512)):(n(),i("div",Ad,[e("p",zd,s(a(t)("ai.chat.input.mentionEmpty")),1),e("p",qd,s(a(t)("ai.chat.input.mentionEmptyHint")),1)]))])])):E("",!0)]),_:1})}}}),Ed=tt(Rd,[["__scopeId","data-v-7bc45150"]]),jd={key:0,class:"absolute bottom-full left-0 z-20 mb-1.5 w-[240px] max-w-[calc(100vw-2rem)]"},Pd={class:"overflow-hidden rounded-2xl border border-gray-200 bg-white shadow-overlay dark:border-gray-700 dark:bg-page-dark"},Ud={class:"flex items-center justify-between border-b border-gray-100 px-2.5 py-1.5 dark:border-gray-800"},Bd={class:"flex items-center gap-1.5 text-[11px] text-gray-500 dark:text-gray-400"},Fd=["title"],Vd=["onMouseenter","onClick"],Nd={class:"min-w-0 flex-1"},Hd={class:"flex items-center gap-1.5"},Od={class:"truncate text-xs font-medium"},Wd={class:"mt-0.5 line-clamp-1 text-xs leading-4 text-gray-500 dark:text-gray-400"},Yd={key:1,class:"px-3 py-4 text-center"},Qd={class:"text-sm font-medium text-gray-700 dark:text-gray-200"},Kd={class:"mt-1 text-xs leading-5 text-gray-500 dark:text-gray-400"},Gd={key:0,class:"absolute top-1/2 left-full ml-1 flex max-h-[min(348px,calc(100vh-10rem))] w-[300px] -translate-y-1/2 flex-col overflow-hidden rounded-2xl border border-gray-200 bg-white shadow-overlay dark:border-gray-700 dark:bg-page-dark"},Jd={class:"border-b border-gray-100 px-3 py-2 dark:border-gray-800"},Xd={class:"truncate text-sm font-medium text-gray-900 dark:text-gray-100"},Zd={class:"mt-0.5 text-xs leading-5 text-gray-500 dark:text-gray-400"},eu={key:0,class:"mt-1 flex items-start gap-1.5 text-[11px] leading-4"},tu={class:"shrink-0 font-medium text-gray-600 dark:text-gray-300"},au={class:"line-clamp-1 min-w-0 flex-1 text-gray-500 dark:text-gray-400"},su={key:1,class:"mt-0.5 flex items-start gap-1.5 text-[11px] leading-4"},nu={class:"shrink-0 font-medium text-gray-600 dark:text-gray-300"},ou={class:"line-clamp-1 min-w-0 flex-1 text-gray-500 dark:text-gray-400"},ru={class:"min-h-0 flex-1 overflow-y-auto px-3 py-2"},lu={key:0,class:"text-xs text-gray-400 dark:text-gray-500"},iu=["innerHTML"],cu={key:2,class:"text-xs leading-relaxed text-gray-400 dark:text-gray-500"},du=ge({__name:"SlashCommandMenu",props:{visible:{type:Boolean},skills:{},highlightIndex:{},activeSkillId:{}},emits:["select","close","manage","highlight"],setup(l,{emit:o}){const{t,te:c}=ye(),r=gt(),m=l,g=o,d=f({}),p=f(""),h=f(!1),y=f(null),T=new Xt({html:!1,breaks:!0,linkify:!0,typographer:!0}),M=x(()=>{if(m.skills.length===0)return null;const I=Math.min(m.highlightIndex,m.skills.length-1);return m.skills[I]??null}),C=x(()=>p.value?T.render(p.value):"");function L(I){const w=`ai.assistant.builtinToolDesc.${I}`;return c(w)?t(w):I}const z=x(()=>M.value?.tags.join(" / ")||""),$=x(()=>M.value?.tools.map(I=>L(I)).join(" / ")||"");return de(()=>[m.visible,M.value?.id],async([I,w])=>{if(!I||!w){p.value="",h.value=!1;return}if(d.value[w]){p.value=d.value[w],h.value=!1;return}h.value=!0;const v=(await r.getSkillConfig(w))?.prompt?.trim()||"";d.value={...d.value,[w]:v},M.value?.id===w&&(p.value=v,h.value=!1)},{immediate:!0}),de(()=>[m.visible,m.highlightIndex,m.skills.length],async([I,w])=>{if(!I||!y.value)return;await Fe(),y.value.querySelectorAll("[data-slash-item]")[w]?.scrollIntoView({block:"nearest"})}),(I,w)=>{const S=_e;return n(),K(lt,{name:"slash-menu"},{default:F(()=>[l.visible?(n(),i("div",jd,[e("div",Pd,[e("div",Ud,[e("div",Bd,[e("span",null,s(a(t)("ai.chat.input.slashHint")),1)]),e("button",{type:"button",class:"rounded-md p-0.5 text-gray-400 transition-colors hover:bg-gray-100 hover:text-gray-600 dark:hover:bg-gray-800 dark:hover:text-gray-300",title:a(t)("common.close"),onClick:w[0]||(w[0]=v=>g("close"))},[u(S,{name:"i-heroicons-x-mark",class:"h-3.5 w-3.5"})],8,Fd)]),m.skills.length>0?(n(),i("div",{key:0,ref_key:"listRef",ref:y,class:"max-h-72 overflow-y-auto p-1.5"},[(n(!0),i(oe,null,ce(m.skills,(v,_)=>(n(),i("button",{key:v.id,type:"button","data-slash-item":"",class:se(["flex w-full items-start justify-between gap-1.5 rounded-lg px-2.5 py-1.5 text-left transition-colors",_===m.highlightIndex?"bg-primary-50 text-gray-900 dark:bg-primary-950/30 dark:text-gray-100":"text-gray-700 hover:bg-gray-50 dark:text-gray-200 dark:hover:bg-gray-800/80"]),onMouseenter:A=>g("highlight",_),onClick:A=>g("select",v)},[e("div",Nd,[e("div",Hd,[e("span",Od,s(v.name),1),m.activeSkillId===v.id?(n(),K(S,{key:0,name:"i-heroicons-check-circle-20-solid",class:"h-3.5 w-3.5 shrink-0 text-primary-500"})):E("",!0)]),e("p",Wd,s(v.description),1)])],42,Vd))),128))],512)):(n(),i("div",Yd,[e("p",Qd,s(a(t)("ai.chat.input.slashEmpty")),1),e("p",Kd,s(a(t)("ai.chat.input.slashEmptyHint")),1)])),e("button",{type:"button",class:"flex w-full items-center justify-between border-t border-gray-100 px-2.5 py-1.5 text-xs text-gray-600 transition-colors hover:bg-gray-50 hover:text-gray-900 dark:border-gray-800 dark:text-gray-300 dark:hover:bg-gray-800/80 dark:hover:text-gray-100",onClick:w[1]||(w[1]=v=>g("manage"))},[e("span",null,s(a(t)("ai.chat.input.manageSkills")),1),u(S,{name:"i-heroicons-arrow-top-right-on-square",class:"h-3.5 w-3.5"})])]),m.skills.length>0&&M.value?(n(),i("div",Gd,[e("div",Jd,[e("p",Xd,s(M.value.name),1),e("p",Zd,s(M.value.description),1),z.value?(n(),i("div",eu,[e("span",tu,s(a(t)("ai.chat.input.previewTagsLabel")),1),e("span",au,s(z.value),1)])):E("",!0),$.value?(n(),i("div",su,[e("span",nu,s(a(t)("ai.chat.input.previewToolsLabel")),1),e("span",ou,s($.value),1)])):E("",!0)]),e("div",ru,[h.value?(n(),i("div",lu,s(a(t)("common.loading")),1)):C.value?(n(),i("div",{key:1,class:"prose prose-sm max-w-none text-xs leading-5 dark:prose-invert prose-headings:mb-1.5 prose-headings:mt-2 prose-p:my-1.5 prose-ul:my-1.5 prose-ol:my-1.5",innerHTML:C.value},null,8,iu)):(n(),i("div",cu,s(a(t)("ai.chat.input.previewUnavailable")),1))])])):E("",!0)])):E("",!0)]),_:1})}}}),uu=tt(du,[["__scopeId","data-v-0f67bc21"]]),mu={class:"shrink-0 pt-2 pb-2"},gu={class:"relative px-4 pt-2.5 pb-2.5"},pu={class:"flex items-start gap-2 pr-10"},hu={key:0,class:"inline-flex max-w-[180px] shrink-0 items-center rounded-md bg-primary-50 px-2 text-sm leading-6 font-medium text-primary-700 dark:bg-primary-500/10 dark:text-primary-400"},vu={class:"truncate"},yu=["disabled","placeholder"],fu=["disabled","title"],xu=ge({__name:"AIChatInput",props:{sessionId:{},disabled:{type:Boolean},status:{},chatType:{}},emits:["send","stop","manageSkills","skillActivated"],setup(l,{expose:o,emit:t}){const{t:c}=ye(),r=l,m=t,g=gt(),{compatibleSkills:d,activeSkill:p,activeSkillId:h,isLoaded:y}=et(g),T=f(null),M=f(null),C=f(""),L=f([]),z=f([]),$=f(!1),I=f(!1),w=f(""),S=f(0),v=f(!1),_=f(""),A=f(0),j=f(null),U=f(!1),k=f(null),b=f(null),q=f(!1),Y=x(()=>C.value.trim().length>0&&!r.disabled),W=x(()=>p.value&&C.value.trim().length===0?c("ai.chat.input.placeholderWithActiveSkill",{name:p.value.name}):c("ai.chat.input.placeholderWithSlash")),J=x(()=>r.status==="streaming"?"":Y.value?c("ai.chat.input.send"):p.value?c("ai.chat.input.needMoreThanSkill"):c("ai.chat.input.needQuestion")),me=x(()=>{const P=new Map;return L.value.forEach(B=>{const Z=B.groupNickname||B.accountName||B.platformId;P.set(Z,(P.get(Z)??0)+1)}),L.value.map(B=>{const Z=B.groupNickname||B.accountName||B.platformId,Q=(P.get(Z)??0)>1?`${Z}·${B.platformId}`:Z,te=[B.platformId];return B.aliases.length>0&&te.push(B.aliases.join(" / ")),{memberId:B.id,platformId:B.platformId,displayName:Z,aliases:[...B.aliases],mentionText:`@${Q}`,insertName:Q,subtitle:te.join(" · "),searchText:[Z,B.groupNickname||"",B.accountName||"",B.platformId,Q,B.aliases.join(" ")].join(" ").toLocaleLowerCase()}})}),pe=x(()=>{const P=w.value.trim().toLocaleLowerCase();return P?d.value.filter(B=>[B.name,B.description,B.tags.join(" ")].join(" ").toLocaleLowerCase().includes(P)):d.value}),X=x(()=>{const P=_.value.trim().toLocaleLowerCase();return P?me.value.filter(B=>B.searchText.includes(P)):me.value});function N(){if(!M.value)return;const P=M.value;P.style.height="auto";const B=192,Z=Math.min(P.scrollHeight,B);P.style.height=`${Z}px`,P.style.overflowY=P.scrollHeight>B?"auto":"hidden"}function ae(){M.value?.focus()}async function ue(){if(!r.sessionId){L.value=[];return}$.value=!0;try{const P=await Oe().getMembers(r.sessionId);L.value=[...P].sort((B,Z)=>Z.messageCount-B.messageCount)}catch(P){console.error("加载 AI @ 成员列表失败:",P),L.value=[]}finally{$.value=!1}}function he(){I.value=!1,w.value="",S.value=0}function G(){v.value=!1,_.value="",A.value=0,j.value=null}function O(){/^\s*\/([^\n]*)$/.test(C.value)&&(k.value=C.value),he()}function H(){j.value&&(b.value=j.value.rawToken),G()}function le(P){if(r.disabled){he();return}k.value&&k.value!==P&&(k.value=null);const B=P.match(/^\s*\/([^\n]*)$/);if(!B){he();return}const Z=!I.value||w.value!==B[1];if(w.value=B[1],k.value===P){I.value=!1;return}I.value=!0,Z&&(S.value=0)}function fe(){const P=M.value,B=C.value.length;return{start:P?.selectionStart??B,end:P?.selectionEnd??B}}function xe(P){const{start:B,end:Z}=fe();if(B!==Z)return null;const Q=P.slice(0,B),te=Q.match(/@([^\s@]*)$/);if(!te)return null;const Ee=te[1],De=Q.length-Ee.length-1;return{start:De,end:B,rawToken:Q.slice(De),query:Ee}}function ke(P){if(r.disabled||I.value){G();return}const B=xe(P);if(b.value&&b.value!==B?.rawToken&&(b.value=null),!B){G();return}const Z=!v.value||_.value!==B.query||j.value?.rawToken!==B.rawToken;if(_.value=B.query,j.value={start:B.start,end:B.end,rawToken:B.rawToken},b.value===B.rawToken){v.value=!1;return}v.value=!0,Z&&(A.value=0)}function ne(P){if(le(P),I.value){G();return}ke(P)}function re(P){z.value=z.value.filter(B=>P.includes(B.mentionText))}function ve(){const{start:P,end:B}=fe();if(P!==B||P===0)return!1;const Z=[...new Set(z.value.map(Q=>Q.mentionText))].sort((Q,te)=>te.length-Q.length);for(const Q of Z){let te=C.value.indexOf(Q);for(;te!==-1;){const Ee=te,De=te+Q.length,Te=C.value[De]===" "?De+1:De;if(P>Ee&&P<=Te)return q.value=!0,C.value=C.value.slice(0,Ee)+C.value.slice(Te),b.value=null,Fe(()=>{N(),ae(),M.value?.setSelectionRange(Ee,Ee),q.value=!1,ne(C.value)}),!0;te=C.value.indexOf(Q,te+Q.length)}}return!1}function Me(){g.activateSkill(null),Fe(ae)}function $e(){r.disabled||(h.value&&g.activateSkill(null),q.value=!0,C.value="/",k.value=null,Fe(()=>{N(),ae(),M.value?.setSelectionRange(1,1),q.value=!1,ne(C.value)}))}function qe(P){r.disabled||(q.value=!0,C.value=P,k.value=null,Fe(()=>{N(),ae();const B=C.value.length;M.value?.setSelectionRange(B,B),q.value=!1,ne(C.value)}))}function Ae(P){if(r.disabled||!j.value)return;const B=C.value.slice(0,j.value.start),Z=C.value.slice(j.value.end),Q=`@${P.insertName}`,te=`${B}${Q} ${Z}`;z.value=[...z.value.filter(Ee=>Ee.memberId!==P.memberId),{memberId:P.memberId,platformId:P.platformId,displayName:P.displayName,aliases:[...P.aliases],mentionText:Q}],q.value=!0,C.value=te,b.value=null,G(),Fe(()=>{const Ee=B.length+Q.length+1;N(),ae(),M.value?.setSelectionRange(Ee,Ee),q.value=!1,ne(C.value)})}function Se(){Y.value&&(m("send",{content:C.value.trim(),mentionedMembers:[...z.value]}),C.value="",k.value=null,b.value=null,z.value=[],G(),h.value&&g.activateSkill(null))}function Re(P){r.disabled||(g.activateSkill(P.id),m("skillActivated",P),C.value="",k.value=null,he(),Fe(()=>{ae()}))}function je(){O(),m("manageSkills")}function Ue(P){if(!pe.value.length)return;const B=pe.value.length;S.value=(S.value+P+B)%B}function ie(P){if(!X.value.length)return;const B=X.value.length;A.value=(A.value+P+B)%B}function R(P){if(P.key==="Backspace"&&C.value.length===0&&h.value){P.preventDefault(),Me();return}if(P.key==="Backspace"&&ve()){P.preventDefault();return}if(v.value){if(P.key==="ArrowDown"){P.preventDefault(),ie(1);return}if(P.key==="ArrowUp"){P.preventDefault(),ie(-1);return}if(P.key==="Escape"){P.preventDefault(),H();return}if(P.key==="Enter"&&!P.shiftKey&&!U.value||P.key==="Tab"){P.preventDefault();const B=X.value[A.value];B&&Ae(B);return}}if(I.value){if(P.key==="ArrowDown"){P.preventDefault(),Ue(1);return}if(P.key==="ArrowUp"){P.preventDefault(),Ue(-1);return}if(P.key==="Escape"){P.preventDefault(),O();return}if(P.key==="Enter"&&!P.shiftKey&&!U.value||P.key==="Tab"){P.preventDefault();const B=pe.value[S.value];B&&Re(B);return}}P.key==="Enter"&&!P.shiftKey&&!U.value&&(P.preventDefault(),Se())}function D(P){if(!I.value&&!v.value||!T.value)return;const B=P.target;B instanceof Node&&!T.value.contains(B)&&(O(),H())}function V(){q.value||ne(C.value)}return de(()=>r.chatType,P=>{g.setFilterContext(P)},{immediate:!0}),de(C,async P=>{re(P),q.value||ne(P),await Fe(),N()}),de(pe,P=>{if(P.length===0){S.value=0;return}S.value>=P.length&&(S.value=P.length-1)},{immediate:!0}),de(X,P=>{if(P.length===0){A.value=0;return}A.value>=P.length&&(A.value=P.length-1)},{immediate:!0}),de(()=>r.disabled,P=>{P&&(O(),H())}),de(()=>r.sessionId,()=>{z.value=[],G(),ue()},{immediate:!0}),Ve(async()=>{y.value||await g.loadSkills(),await Fe(),N(),document.addEventListener("mousedown",D)}),Ct(()=>{document.removeEventListener("mousedown",D)}),o({fillInput:qe,openSkillSelector:$e}),(P,B)=>{const Z=_e;return n(),i("div",mu,[e("div",{ref_key:"rootRef",ref:T,class:"relative w-full max-w-4xl mx-auto"},[u(uu,{visible:I.value,skills:pe.value,"highlight-index":S.value,"active-skill-id":a(h),onSelect:Re,onClose:O,onManage:je,onHighlight:B[0]||(B[0]=Q=>S.value=Q)},null,8,["visible","skills","highlight-index","active-skill-id"]),u(Ed,{visible:v.value,members:X.value,"highlight-index":A.value,loading:$.value,onSelect:Ae,onClose:H,onHighlight:B[1]||(B[1]=Q=>A.value=Q)},null,8,["visible","members","highlight-index","loading"]),e("div",{class:se(["flex flex-col overflow-hidden rounded-2xl bg-white shadow-[0_2px_14px_rgba(0,0,0,0.04)] ring-1 ring-gray-200/60 transition-all dark:bg-page-dark dark:ring-white/5",r.disabled?"bg-gray-50/50 dark:bg-page-dark/50":"focus-within:ring-primary-500/40 focus-within:shadow-[0_4px_20px_rgba(0,0,0,0.08)] dark:focus-within:ring-primary-500/40"])},[e("div",gu,[e("div",pu,[a(p)?(n(),i("div",hu,[e("span",vu,"/"+s(a(p).name),1)])):E("",!0),He(e("textarea",{ref_key:"textareaRef",ref:M,"onUpdate:modelValue":B[2]||(B[2]=Q=>C.value=Q),rows:"2",class:"min-h-[48px] min-w-0 flex-1 resize-none border-0 bg-transparent px-0 py-0 text-sm leading-6 text-gray-900 outline-none placeholder:text-gray-400 disabled:cursor-not-allowed disabled:text-gray-400 dark:text-gray-100 dark:placeholder:text-gray-500 dark:disabled:text-gray-500",disabled:r.disabled,placeholder:W.value,onKeydown:R,onClick:V,onKeyup:V,onSelect:V,onCompositionstart:B[3]||(B[3]=Q=>U.value=!0),onCompositionend:B[4]||(B[4]=Q=>U.value=!1)},null,40,yu),[[rt,C.value]])]),r.status==="streaming"?(n(),i("button",{key:0,type:"button",class:"absolute right-3 bottom-2 flex h-7 w-7 items-center justify-center rounded-full bg-primary-500 text-white shadow-sm transition-colors hover:bg-primary-600",onClick:B[5]||(B[5]=Q=>m("stop"))},[u(Z,{name:"i-heroicons-stop-16-solid",class:"h-3.5 w-3.5"})])):(n(),i("button",{key:1,type:"button",class:se(["absolute right-3 bottom-2 flex h-7 w-7 items-center justify-center rounded-full transition-all duration-200",Y.value?"bg-primary-500 text-white hover:bg-primary-600 shadow-sm":"bg-gray-100 text-gray-400 dark:bg-gray-800 dark:text-gray-500"]),disabled:!Y.value,title:J.value,onClick:Se},[u(Z,{name:"i-heroicons-arrow-up-20-solid",class:"h-4 w-4"})],10,fu))])],2)],512)])}}}),bu={key:0,class:"flex w-fit items-center gap-1.5 rounded-lg bg-gray-100 px-2.5 py-1 text-xs transition-colors dark:bg-gray-800/50"},ku={class:"font-medium text-gray-600 dark:text-gray-400"},_u={key:1,class:"flex items-start gap-3"},wu={class:"flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-linear-to-br from-pink-500 to-pink-600"},$u={class:"rounded-2xl rounded-tl-sm bg-gray-100 px-4 py-3 dark:bg-gray-800"},Cu={key:0,class:"space-y-2"},Su={class:"flex items-center gap-2"},Tu={key:0,class:"flex gap-1"},Mu={key:1,class:"flex items-center gap-1.5 text-xs text-gray-500 dark:text-gray-400"},Iu={key:0,class:"flex flex-wrap gap-1"},Du={class:"text-xs text-gray-400"},Lu={key:1,class:"flex items-center gap-2"},Au={class:"text-sm text-gray-600 dark:text-gray-400"},zu=ge({__name:"AIThinkingIndicator",props:{currentToolStatus:{},toolsUsed:{},agentStatus:{}},setup(l){const{t:o,te:t}=ye();function c(g,d){const p=`ai.assistant.builtinToolDesc.${g}`;return t(p)?o(p):d||g}const r=l,m=x(()=>r.agentStatus?.phase==="compressing");return(g,d)=>{const p=_e;return m.value?(n(),i("div",bu,[u(p,{name:"i-heroicons-arrow-path",class:"h-3.5 w-3.5 shrink-0 animate-spin text-gray-600 dark:text-gray-400"}),e("span",ku,s(a(o)("ai.chat.thinking.compressing")),1)])):(n(),i("div",_u,[e("div",wu,[u(p,{name:"i-heroicons-sparkles",class:"h-4 w-4 text-white"})]),e("div",$u,[l.currentToolStatus?(n(),i("div",Cu,[e("div",Su,[e("span",{class:se(["inline-flex items-center gap-1.5 rounded-full px-2.5 py-0.5 text-xs font-medium",[l.currentToolStatus.status==="running"?"bg-pink-100 text-pink-700 dark:bg-pink-900/30 dark:text-pink-300":l.currentToolStatus.status==="done"?"bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-300":"bg-red-100 text-red-700 dark:bg-red-900/30 dark:text-red-300"]])},[u(p,{name:l.currentToolStatus.status==="running"?"i-heroicons-cog-6-tooth":l.currentToolStatus.status==="done"?"i-heroicons-check-circle":"i-heroicons-x-circle",class:se(["h-3 w-3",{"animate-spin":l.currentToolStatus.status==="running"}])},null,8,["name","class"]),ee(" "+s(c(l.currentToolStatus.name,l.currentToolStatus.displayName)),1)],2),l.currentToolStatus.status==="running"?(n(),i("span",Tu,[...d[0]||(d[0]=[e("span",{class:"h-1.5 w-1.5 animate-bounce rounded-full bg-pink-500 [animation-delay:0ms]"},null,-1),e("span",{class:"h-1.5 w-1.5 animate-bounce rounded-full bg-pink-500 [animation-delay:150ms]"},null,-1),e("span",{class:"h-1.5 w-1.5 animate-bounce rounded-full bg-pink-500 [animation-delay:300ms]"},null,-1)])])):l.currentToolStatus.status==="done"?(n(),i("span",Mu,[e("span",null,s(a(o)("ai.chat.thinking.processingResult")),1),d[1]||(d[1]=e("span",{class:"flex gap-1"},[e("span",{class:"h-1 w-1 animate-bounce rounded-full bg-gray-400 [animation-delay:0ms]"}),e("span",{class:"h-1 w-1 animate-bounce rounded-full bg-gray-400 [animation-delay:150ms]"}),e("span",{class:"h-1 w-1 animate-bounce rounded-full bg-gray-400 [animation-delay:300ms]"})],-1))])):E("",!0)]),l.toolsUsed.length>1?(n(),i("div",Iu,[e("span",Du,s(a(o)("ai.chat.thinking.called")),1),(n(!0),i(oe,null,ce(l.toolsUsed.slice(0,-1),h=>(n(),i("span",{key:h,class:"inline-flex items-center gap-1 rounded-full bg-gray-200 px-2 py-0.5 text-xs text-gray-600 dark:bg-gray-700 dark:text-gray-400"},[u(p,{name:"i-heroicons-check",class:"h-3 w-3 text-green-500"}),ee(" "+s(c(h)),1)]))),128))])):E("",!0)])):(n(),i("div",Lu,[e("span",Au,s(a(o)("ai.chat.thinking.analyzing")),1),d[2]||(d[2]=e("span",{class:"flex gap-1"},[e("span",{class:"h-2 w-2 animate-bounce rounded-full bg-pink-500 [animation-delay:0ms]"}),e("span",{class:"h-2 w-2 animate-bounce rounded-full bg-pink-500 [animation-delay:150ms]"}),e("span",{class:"h-2 w-2 animate-bounce rounded-full bg-pink-500 [animation-delay:300ms]"})],-1))]))])]))}}}),qu={class:"relative z-20 flex items-center justify-between"},Ru={class:"flex items-center gap-1"},Eu=["disabled"],ju={class:"max-w-[160px] truncate"},Pu=["title"],Uu={class:"w-40 py-1"},Bu={class:"px-3 py-1.5 text-xs font-medium text-gray-400 dark:text-gray-500"},Fu=["onClick"],Vu={class:"flex items-center gap-1"},Nu=["title"],Hu={class:"hidden shrink-0 items-center gap-1.5 rounded-md px-1.5 py-1 text-xs text-gray-400 dark:text-gray-500 md:flex"},Ou={class:"h-1.5 w-10 overflow-hidden rounded-full bg-gray-200 dark:bg-gray-700"},Wu={class:"text-[10px]"},Yu={class:"space-y-0.5 whitespace-nowrap text-xs"},Qu={key:0},Ku=["title","disabled"],Gu={class:"hidden xl:inline"},Ju=["title","disabled"],Xu={class:"hidden xl:inline"},Zu=ge({__name:"ChatStatusBar",props:{sessionTokenUsage:{},agentStatus:{},currentAIChatId:{},currentMessages:{},fallbackTitle:{},estimatedContextTokens:{}},setup(l){const{t:o}=ye(),t=Je(),c=ct(),r=l,m=Wt(),g=Fa(),{aiGlobalSettings:d}=et(m),{defaultAssistantConfig:p,isLoading:h}=et(g),y=f(!1),T=x(()=>r.agentStatus?o(`ai.chat.statusBar.agent.phase.${r.agentStatus.phase}`):""),M=x(()=>r.agentStatus?o(`ai.chat.statusBar.agent.phaseShort.${r.agentStatus.phase}`):""),C=x(()=>{if(!r.agentStatus)return"text-gray-500 bg-gray-100 dark:bg-gray-800 dark:text-gray-300";switch(r.agentStatus.phase){case"compressing":return"text-purple-600 bg-purple-50 dark:bg-purple-900/30 dark:text-purple-300";case"tool_running":return"text-indigo-600 bg-indigo-50 dark:bg-indigo-900/30 dark:text-indigo-300";case"thinking":return"text-blue-600 bg-blue-50 dark:bg-blue-900/30 dark:text-blue-300";case"responding":return"text-emerald-600 bg-emerald-50 dark:bg-emerald-900/30 dark:text-emerald-300";case"completed":return"text-green-600 bg-green-50 dark:bg-green-900/30 dark:text-green-300";case"aborted":return"text-amber-600 bg-amber-50 dark:bg-amber-900/30 dark:text-amber-300";case"error":return"text-red-600 bg-red-50 dark:bg-red-900/30 dark:text-red-300";default:return"text-gray-500 bg-gray-100 dark:bg-gray-800 dark:text-gray-300"}});function L(O){return Number.isFinite(O)?new Intl.NumberFormat().format(Math.max(0,Math.round(O))):"0"}function z(O){const H=Math.max(0,Math.round(O));return H>=1e6?`${(H/1e6).toFixed(1).replace(/\.0$/,"")}M`:H>=1e3?`${(H/1e3).toFixed(1).replace(/\.0$/,"")}k`:String(H)}const $=x(()=>L(r.sessionTokenUsage.totalTokens)),I=x(()=>z(r.sessionTokenUsage.totalTokens)),w=x(()=>r.sessionTokenUsage.cacheReadTokens>0),S=x(()=>z(r.sessionTokenUsage.cacheReadTokens)),v=x(()=>r.agentStatus?.contextTokens?r.agentStatus.contextTokens:r.estimatedContextTokens&&r.estimatedContextTokens>0?r.estimatedContextTokens:0),_=x(()=>{const O=p.value,H=g.defaultAssistant?.modelId||O?.model;return!O||!H?128e3:(g.getModelById(O.provider,H)||g.findModelAcrossProviders(H))?.contextWindow??128e3}),A=x(()=>v.value<=0||_.value<=0?0:Math.min(100,Math.round(v.value/_.value*100))),j=x(()=>{const O=A.value;return O>=80?"bg-red-500":O>=60?"bg-amber-500":"bg-emerald-500"}),U=x(()=>r.agentStatus?[`${o("ai.chat.statusBar.agent.label")}: ${T.value}`,`${o("ai.chat.statusBar.agent.contextTokens")}: ${L(r.agentStatus.contextTokens)}`,`${o("ai.chat.statusBar.tokenUsageTitle")}: ${$.value}`].join(`
101
- `):"");function k(){c.openSettings("ai","defaultModel")}const b=f(!1),q=x(()=>Bt(r.currentMessages??[])),Y=x(()=>!!r.currentAIChatId||Ss(r.currentMessages??[]));function W(){return{createdAt:o("ai.chat.conversation.export.createdAt"),user:o("ai.chat.conversation.export.user"),assistant:o("ai.chat.conversation.export.assistant")}}function J(O){return O.map(H=>({...H,timestamp:H.timestamp*1e3}))}async function me(){if(!(b.value||!Y.value)){b.value=!0;try{const O=d.value.exportFormat||"markdown",H=W();let le=r.fallbackTitle||o("ai.chat.conversation.newChat"),fe=q.value[0]?.timestamp??Date.now(),xe=q.value;if(r.currentAIChatId){const[ne,re]=await Promise.all([Ne().getAIChat(r.currentAIChatId),Ne().getMessages(r.currentAIChatId)]);ne&&(le=ne.title||le,fe=ne.createdAt*1e3);const ve=Bt(J(re));ve.length>0&&(xe=ve)}if(xe.length===0){t.warn(o("ai.chat.conversation.export.noMessages"));return}const ke=await Ds(le,xe,fe,O,H);if(ke.success&&ke.filePath){const ne=ke.filePath.split("/").pop()||ke.filePath,re=ke.filePath;t.add({title:o("common.exportSuccess"),description:ne,color:"primary",actions:[{label:o("common.openFolder"),onClick:()=>{ca().showInFolder(re)}}]})}else t.fail(o("common.exportFailed"),{description:ke.error})}catch(O){console.error("导出对话失败:",O),t.fail(o("common.exportFailed"),{description:String(O)})}finally{b.value=!1}}}async function pe(){if(!y.value){y.value=!0;try{const O=await Ne().showAiLogFile();O?.success||t.fail(o("ai.chat.statusBar.log.openFailed"),{description:O?.error||o("ai.chat.statusBar.log.openFailedDesc")})}catch(O){console.error("打开 AI 日志失败:",O),t.fail(o("ai.chat.statusBar.log.openFailed"),{description:String(O)})}finally{y.value=!1}}}const X=f(!1),N=x(()=>{const O=p.value,H=g.defaultAssistant?.modelId||O?.model;return!O?.provider||!H?[]:_s(O.provider,H)}),ae=x(()=>N.value.length>0),ue=x(()=>{const O=g.defaultAssistant;return!O?.configId||!O?.modelId?"default":m.getThinkingLevel(O.configId,O.modelId)??"default"});function he(O){const H=g.defaultAssistant;!H?.configId||!H?.modelId||(m.setThinkingLevel(H.configId,H.modelId,O),X.value=!1)}const G=x(()=>o(`ai.chat.statusBar.thinking.level.${ue.value}`));return(O,H)=>{const le=_e,fe=ga,xe=pt;return n(),i("div",qu,[e("div",Ru,[e("button",{class:"flex items-center gap-1.5 rounded-md px-2 py-1 text-xs text-gray-500 transition-colors hover:bg-gray-100 hover:text-gray-700 dark:text-gray-400 dark:hover:bg-gray-800 dark:hover:text-gray-300",disabled:a(h),onClick:k},[u(le,{name:"i-heroicons-cpu-chip",class:"h-3.5 w-3.5"}),e("span",ju,s(a(g).defaultAssistant?.modelId?a(g).getModelById(a(p)?.provider??"",a(g).defaultAssistant.modelId)?.name||a(g).defaultAssistant.modelId:a(o)("ai.chat.statusBar.model.notConfigured")),1)],8,Eu),ae.value?(n(),K(fe,{key:0,open:X.value,"onUpdate:open":H[0]||(H[0]=ke=>X.value=ke),ui:{content:"z-[80] p-0"}},{content:F(()=>[e("div",Uu,[e("div",Bu,s(a(o)("ai.chat.statusBar.thinking.title")),1),(n(!0),i(oe,null,ce(N.value,ke=>(n(),i("button",{key:ke,class:se(["flex w-full items-center gap-2 px-3 py-2 text-left text-sm transition-colors hover:bg-gray-100 dark:hover:bg-gray-800",ue.value===ke?"text-primary-600 dark:text-primary-400":"text-gray-700 dark:text-gray-300"]),onClick:ne=>he(ke)},[u(le,{name:ue.value===ke?"i-heroicons-check-circle-solid":"i-heroicons-light-bulb",class:se(["h-4 w-4 shrink-0",ue.value===ke?"text-primary-500":"text-gray-400"])},null,8,["name","class"]),e("span",null,s(a(o)(`ai.chat.statusBar.thinking.level.${ke}`)),1)],10,Fu))),128))])]),default:F(()=>[e("button",{class:se(["flex items-center gap-1.5 rounded-md px-2 py-1 text-xs transition-colors hover:bg-gray-100 dark:hover:bg-gray-800",ue.value==="default"||ue.value==="off"?"text-gray-400 dark:text-gray-500":"text-primary-500 dark:text-primary-400"]),title:a(o)("ai.chat.statusBar.thinking.tooltip")},[u(le,{name:"i-heroicons-light-bulb",class:"h-3.5 w-3.5"}),e("span",null,s(G.value),1)],10,Pu)]),_:1},8,["open"])):E("",!0)]),e("div",Vu,[l.agentStatus?(n(),i("div",{key:0,class:"hidden shrink-0 items-center gap-1 rounded-lg bg-gray-50/90 px-1.5 py-1 text-xs shadow-[inset_0_0_0_1px_rgba(255,255,255,0.35)] dark:bg-gray-800/70 dark:shadow-[inset_0_0_0_1px_rgba(255,255,255,0.04)] lg:flex",title:U.value},[e("span",{class:se(["rounded px-1 py-0.5 text-[10px] font-medium",C.value])},s(M.value),3)],8,Nu)):E("",!0),v.value>0?(n(),K(xe,{key:1,ui:{content:"h-auto py-1.5"}},{content:F(()=>[e("div",Yu,[e("div",null,s(a(o)("ai.chat.statusBar.agent.contextTokens"))+": "+s(z(v.value))+" / "+s(z(_.value)),1),e("div",null,s(a(o)("ai.chat.statusBar.tokenUsageTitle"))+": "+s(I.value),1),w.value?(n(),i("div",Qu,s(a(o)("ai.chat.statusBar.cacheHit"))+": "+s(S.value),1)):E("",!0)])]),default:F(()=>[e("div",Hu,[e("div",Ou,[e("div",{class:se(["h-full rounded-full transition-all duration-300",j.value]),style:Ke({width:`${A.value}%`})},null,6)]),e("span",Wu,s(A.value)+"%",1)])]),_:1})):E("",!0),e("button",{class:"flex shrink-0 items-center gap-1 rounded-md px-1.5 py-1 text-xs text-gray-400 transition-colors hover:bg-gray-100 hover:text-gray-600 disabled:cursor-not-allowed disabled:opacity-60 dark:hover:bg-gray-800 dark:hover:text-gray-300",title:a(o)("ai.chat.statusBar.export.title"),disabled:b.value||!Y.value,onClick:me},[u(le,{name:"i-heroicons-arrow-down-tray",class:"h-3.5 w-3.5"}),e("span",Gu,s(a(o)("ai.chat.statusBar.export.label")),1)],8,Ku),e("button",{class:"flex shrink-0 items-center gap-1 rounded-md px-1.5 py-1 text-xs text-gray-400 transition-colors hover:bg-gray-100 hover:text-gray-600 disabled:cursor-not-allowed disabled:opacity-60 dark:hover:bg-gray-800 dark:hover:text-gray-300",title:a(o)("ai.chat.statusBar.log.title"),disabled:y.value,onClick:pe},[u(le,{name:"i-heroicons-document-text",class:"h-3.5 w-3.5"}),e("span",Xu,s(a(o)("ai.chat.statusBar.log.label")),1)],8,Ju)])])}}}),e0={class:"assistant-bar-wrapper flex justify-center"},t0=["onClick"],a0={key:0,class:"absolute right-0 top-full z-30 mt-2 w-56 overflow-hidden rounded-xl border border-gray-200/80 bg-white/95 p-1 shadow-overlay backdrop-blur-md dark:border-gray-700 dark:bg-page-dark/95"},s0={class:"custom-scrollbar max-h-60 space-y-0.5 overflow-y-auto"},n0=["onClick"],o0={class:"truncate font-medium"},xt=4,r0=ge({__name:"AssistantInlineBar",props:{chatType:{},locale:{},selectedId:{}},emits:["select","market"],setup(l,{emit:o}){const t=l,c=o,r=f(!1),m=f(null);function g(v){c("select",v),r.value=!1}function d(){L.value.length!==0&&(r.value=!r.value)}function p(v){if(!r.value||!m.value)return;const _=v.target;_ instanceof Node&&!m.value.contains(_)&&(r.value=!1)}const h=vt(),{filteredAssistants:y,isLoaded:T}=et(h),M=x(()=>{const v=Va(t.locale);return[...y.value].sort((_,A)=>_.id===v?-1:A.id===v?1:0)}),C=x(()=>{const v=M.value;if(v.length<=xt)return v;const _=v.findIndex(A=>A.id===t.selectedId);if(_!==-1&&_>=xt-1){const A=v.slice(0,xt-1),j=v[_];return[...A,j]}return v.slice(0,xt)}),L=x(()=>{const v=new Set(C.value.map(_=>_.id));return M.value.filter(_=>!v.has(_.id))});de(()=>[t.chatType,t.locale],([v,_])=>{h.setFilterContext(v,_)},{immediate:!0});const z=f([]),$=f(null);let I=null;const w=f({width:"0px",transform:"translateX(0px)",opacity:0}),S=async()=>{await Fe();const v=C.value.findIndex(_=>_.id===t.selectedId);if(v!==-1&&z.value[v]){const _=z.value[v];w.value={width:`${_.offsetWidth+6}px`,transform:`translateX(${_.offsetLeft-3}px)`,opacity:1}}else w.value.opacity=0};return de(()=>[t.selectedId,C.value],()=>{S()},{deep:!0}),Ve(async()=>{T.value||await h.loadAssistants(),S(),document.addEventListener("mousedown",p),typeof ResizeObserver<"u"&&$.value&&(I=new ResizeObserver(()=>{S()}),I.observe($.value))}),dt(()=>{document.removeEventListener("mousedown",p),I&&I.disconnect()}),(v,_)=>{const A=_e;return n(),i("div",e0,[e("div",{ref_key:"containerRef",ref:$,class:"assistant-bar-grid relative flex items-center justify-center gap-1.5 rounded-full bg-gray-50/60 p-[3px] shadow-inner ring-1 ring-inset ring-gray-900/5 backdrop-blur-md dark:bg-gray-800/40 dark:ring-white/10 z-0 overflow-hidden sm:overflow-visible"},[e("div",{class:"absolute left-0 inset-y-0 -z-10 rounded-full bg-white ring-[1.5px] ring-primary-500 shadow-sm transition-all duration-350 ease-out dark:bg-primary-700/15 dark:ring-primary-500",style:Ke(w.value)},null,4),(n(!0),i(oe,null,ce(C.value,(j,U)=>(n(),i("button",{key:j.id,ref_for:!0,ref:k=>{k&&(z.value[U]=k)},class:se(["relative z-10 flex h-[32px] items-center justify-center whitespace-nowrap rounded-full px-4 text-[13px] font-medium transition-colors duration-200",[l.selectedId===j.id?"text-primary-600 dark:text-primary-400":"text-gray-500 hover:bg-gray-200/50 hover:text-gray-800 dark:text-gray-400 dark:hover:bg-gray-700/50 dark:hover:text-gray-200"]]),onClick:k=>c("select",j.id)},s(j.name),11,t0))),128)),L.value.length>0?(n(),i("div",{key:0,ref_key:"overflowMenuRef",ref:m,class:"relative z-20"},[e("button",{type:"button",class:"relative z-10 flex h-[32px] w-[32px] ml-0.5 items-center justify-center rounded-full text-gray-500 transition-colors duration-200 hover:bg-gray-200/50 hover:text-gray-800 dark:text-gray-400 dark:hover:bg-gray-700/50 dark:hover:text-gray-200",onClick:d},[u(A,{name:"i-heroicons-ellipsis-horizontal",class:"h-5 w-5"})]),r.value?(n(),i("div",a0,[e("div",s0,[_[1]||(_[1]=e("p",{class:"px-2 py-1.5 text-[11px] font-semibold uppercase tracking-wider text-gray-400 dark:text-gray-500"}," 更多助手 ",-1)),(n(!0),i(oe,null,ce(L.value,j=>(n(),i("button",{key:j.id,type:"button",class:se(["flex w-full items-center justify-between rounded-md px-2.5 py-1.5 text-left text-sm transition-colors",[l.selectedId===j.id?"bg-primary-50 text-primary-600 dark:bg-primary-500/10 dark:text-primary-400":"text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-800"]]),onClick:U=>g(j.id)},[e("span",o0,s(j.name),1),l.selectedId===j.id?(n(),K(A,{key:0,name:"i-heroicons-check",class:"h-4 w-4 shrink-0"})):E("",!0)],10,n0))),128))])])):E("",!0)],512)):E("",!0),e("button",{type:"button",class:"relative z-10 flex h-[32px] w-[32px] items-center justify-center rounded-full text-gray-500 transition-colors duration-200 hover:bg-gray-200/50 hover:text-gray-800 dark:text-gray-400 dark:hover:bg-gray-700/50 dark:hover:text-gray-200",onClick:_[0]||(_[0]=j=>c("market"))},[u(A,{name:"i-heroicons-plus",class:"h-[18px] w-[18px]"})])],512)])}}}),l0=tt(r0,[["__scopeId","data-v-169115ce"]]),i0={class:"p-6"},c0={class:"mb-4 flex items-start justify-between gap-3"},d0={class:"min-w-0"},u0={class:"text-lg font-semibold text-gray-900 dark:text-white"},m0={key:0,class:"mt-1 text-xs text-amber-600 dark:text-amber-400"},g0={key:0,class:"flex items-center justify-center py-12"},p0={class:"mb-4 flex gap-1 rounded-lg bg-gray-100 p-1 dark:bg-gray-800"},h0={key:0,class:"ml-1 inline-flex h-4 min-w-4 items-center justify-center rounded-full bg-primary-100 px-1 text-[10px] text-primary-600 dark:bg-primary-900/30 dark:text-primary-400"},v0={class:"max-h-[500px] overflow-y-auto pr-1"},y0={class:"space-y-5"},f0={class:"mb-1.5 block text-sm font-medium text-gray-700 dark:text-gray-300"},x0={class:"mb-1.5 block text-sm font-medium text-gray-700 dark:text-gray-300"},b0={class:"mb-1.5 block text-sm font-medium text-gray-700 dark:text-gray-300"},k0={class:"flex flex-wrap gap-2"},_0=["disabled","onClick"],w0={class:"mb-1.5 block text-sm font-medium text-gray-700 dark:text-gray-300"},$0={class:"flex flex-wrap gap-2"},C0=["disabled","onClick"],S0={class:"mt-1 text-[10px] text-gray-400"},T0={class:"mb-1.5 block text-sm font-medium text-gray-700 dark:text-gray-300"},M0={class:"space-y-2"},I0={key:0,class:"flex items-center gap-2"},D0={class:"space-y-5"},L0={class:"mb-1 text-sm font-medium text-gray-700 dark:text-gray-300"},A0={class:"mb-2.5 text-[10px] text-gray-400"},z0={class:"grid grid-cols-2 gap-1.5"},q0={class:"min-w-0"},R0={class:"truncate text-xs font-medium text-gray-600 dark:text-gray-400"},E0={class:"truncate text-[10px] text-gray-400 dark:text-gray-500"},j0={class:"mb-1 flex items-center justify-between"},P0={class:"text-sm font-medium text-gray-700 dark:text-gray-300"},U0={key:0,class:"flex gap-2"},B0={class:"mb-2.5 text-[10px] text-gray-400"},F0={class:"grid grid-cols-2 gap-1.5"},V0=["checked","disabled","onChange"],N0={class:"min-w-0"},H0={class:"truncate text-xs font-medium text-gray-800 dark:text-gray-200"},O0={class:"truncate text-[10px] text-gray-500 dark:text-gray-400"},W0={class:"mt-6 flex items-center justify-between"},Y0={class:"flex gap-2"},Q0=ge({__name:"AssistantConfigModal",props:{open:{type:Boolean},assistantId:{},readonly:{type:Boolean},scrollToSection:{}},emits:["update:open","saved","created"],setup(l,{emit:o}){const{t}=ye(),c=l,r=o,m=Je(),g=vt(),d=f(!1),p=f(!1),h=f(null),y=f(!1),T=f("basic"),M=x(()=>[{value:"",label:t("ai.assistant.config.chatTypeAll")},{value:"group",label:t("ai.assistant.config.chatTypeGroup")},{value:"private",label:t("ai.assistant.config.chatTypePrivate")}]),C=[{value:"zh",label:"简体中文"},{value:"en",label:"English"},{value:"ja",label:"日本語"}],L=x(()=>g.builtinToolCatalog.filter(X=>X.category==="core").map(X=>({name:X.name,description:t(`ai.assistant.builtinToolDesc.${X.name}`)}))),z=x(()=>g.builtinToolCatalog.filter(X=>X.category==="analysis").map(X=>({name:X.name,description:t(`ai.assistant.builtinToolDesc.${X.name}`)}))),$=f({name:"",systemPrompt:"",presetQuestions:[],applicableChatType:"",supportedLocales:[],allowedBuiltinTools:[]}),I=f(""),w=f(null),S=x(()=>$.value.allowedBuiltinTools.length);Ve(async()=>{g.builtinToolCatalog.length===0&&await g.loadBuiltinToolCatalog()}),de(()=>[c.open,c.assistantId],async([X,N])=>{X&&(T.value="basic",N?(y.value=!1,await _(N)):c.readonly||(y.value=!0,v()),c.scrollToSection==="presetQuestions"&&(await Fe(),setTimeout(()=>{w.value?.scrollIntoView({behavior:"smooth",block:"center"})},100)))},{immediate:!0});function v(){h.value={id:"",name:"",systemPrompt:"",presetQuestions:[],allowedBuiltinTools:[],applicableChatTypes:[],supportedLocales:[]},$.value={name:"",systemPrompt:"",presetQuestions:[],applicableChatType:"",supportedLocales:[],allowedBuiltinTools:[]},d.value=!1}async function _(X){d.value=!0;try{h.value=await g.getAssistantConfig(X),h.value&&($.value={name:h.value.name,systemPrompt:h.value.systemPrompt,presetQuestions:[...h.value.presetQuestions],applicableChatType:h.value.applicableChatTypes?.[0]||"",supportedLocales:[...h.value.supportedLocales||[]],allowedBuiltinTools:[...h.value.allowedBuiltinTools||[]]})}catch(N){console.error("[AssistantConfigModal] Failed to load config:",N),m.fail(t("ai.assistant.toast.loadFailed"),{description:String(N)})}finally{d.value=!1}}async function A(){p.value=!0;try{const X={name:$.value.name,systemPrompt:$.value.systemPrompt,presetQuestions:[...$.value.presetQuestions],applicableChatTypes:$.value.applicableChatType?[$.value.applicableChatType]:[],supportedLocales:[...$.value.supportedLocales],allowedBuiltinTools:[...$.value.allowedBuiltinTools]};if(y.value){const N=await g.createAssistant(X);N.success?(m.success(t("ai.assistant.toast.createSuccess")),r("created",N.id),pe()):m.fail(t("ai.assistant.toast.createFailed"),{description:N.error||t("ai.assistant.toast.unknownError")})}else{if(!c.assistantId)return;const N=await g.updateAssistant(c.assistantId,X);N.success?(m.success(t("ai.assistant.toast.saveSuccess")),r("saved"),pe()):m.fail(t("ai.assistant.toast.saveFailed"),{description:N.error||t("ai.assistant.toast.unknownError")})}}catch(X){console.error("[AssistantConfigModal] Save failed:",X),m.fail(t("ai.assistant.toast.saveFailed"),{description:String(X)})}finally{p.value=!1}}async function j(){if(!(!c.assistantId||!h.value?.builtinId)){p.value=!0;try{const X=await g.resetAssistant(c.assistantId);X.success?(m.success(t("ai.assistant.toast.resetSuccess")),await _(c.assistantId),r("saved")):m.fail(t("ai.assistant.toast.resetFailed"),{description:X.error||t("ai.assistant.toast.unknownError")})}catch(X){m.fail(t("ai.assistant.toast.resetFailed"),{description:String(X)})}finally{p.value=!1}}}function U(){const X=I.value.trim();X&&!$.value.presetQuestions.includes(X)&&($.value.presetQuestions.push(X),I.value="")}function k(X){$.value.presetQuestions.splice(X,1)}function b(X){const N=$.value.allowedBuiltinTools.indexOf(X);N>=0?$.value.allowedBuiltinTools.splice(N,1):$.value.allowedBuiltinTools.push(X)}function q(X){return $.value.allowedBuiltinTools.includes(X)}function Y(){$.value.allowedBuiltinTools=z.value.map(X=>X.name)}function W(){$.value.allowedBuiltinTools=[]}function J(X){$.value.applicableChatType=X}function me(X){const N=$.value.supportedLocales.indexOf(X);N>=0?$.value.supportedLocales.splice(N,1):$.value.supportedLocales.push(X)}function pe(){r("update:open",!1)}return(X,N)=>{const ae=Pe,ue=_e,he=St,G=ls,O=We;return n(),K(O,{open:l.open,ui:{content:"sm:max-w-2xl z-100"},"onUpdate:open":N[5]||(N[5]=H=>r("update:open",H))},{content:F(()=>[e("div",i0,[e("div",c0,[e("div",d0,[e("h2",u0,s(l.readonly?a(t)("ai.assistant.config.viewTitle"):y.value?a(t)("ai.assistant.config.createTitle"):a(t)("ai.assistant.config.editTitle")),1),l.readonly?E("",!0):(n(),i("p",m0,s(a(t)("ai.assistant.config.betaWarning")),1))]),u(ae,{icon:"i-heroicons-x-mark",variant:"ghost",size:"sm",class:"shrink-0",onClick:pe})]),d.value?(n(),i("div",g0,[u(ue,{name:"i-heroicons-arrow-path",class:"h-6 w-6 animate-spin text-gray-400"})])):h.value?(n(),i(oe,{key:1},[e("div",p0,[e("button",{class:se(["flex-1 rounded-md px-3 py-1.5 text-xs font-medium transition-colors",T.value==="basic"?"bg-white text-gray-900 shadow-sm dark:bg-gray-700 dark:text-white":"text-gray-500 hover:text-gray-700 dark:text-gray-400"]),onClick:N[0]||(N[0]=H=>T.value="basic")},s(a(t)("ai.assistant.config.tabs.basic")),3),e("button",{class:se(["flex-1 rounded-md px-3 py-1.5 text-xs font-medium transition-colors",T.value==="tools"?"bg-white text-gray-900 shadow-sm dark:bg-gray-700 dark:text-white":"text-gray-500 hover:text-gray-700 dark:text-gray-400"]),onClick:N[1]||(N[1]=H=>T.value="tools")},[ee(s(a(t)("ai.assistant.config.tabs.tools"))+" ",1),S.value>0?(n(),i("span",h0,s(S.value),1)):E("",!0)],2)]),e("div",v0,[He(e("div",y0,[e("div",null,[e("label",f0,s(a(t)("ai.assistant.config.name")),1),u(he,{modelValue:$.value.name,"onUpdate:modelValue":N[2]||(N[2]=H=>$.value.name=H),class:"w-full",disabled:l.readonly},null,8,["modelValue","disabled"])]),e("div",null,[e("label",x0,s(a(t)("ai.assistant.config.systemPrompt")),1),u(G,{modelValue:$.value.systemPrompt,"onUpdate:modelValue":N[3]||(N[3]=H=>$.value.systemPrompt=H),rows:5,autoresize:"",class:"w-full font-mono text-sm",disabled:l.readonly},null,8,["modelValue","disabled"])]),e("div",null,[e("label",b0,s(a(t)("ai.assistant.config.chatType")),1),e("div",k0,[(n(!0),i(oe,null,ce(M.value,H=>(n(),i("button",{key:H.value,type:"button",class:se(["rounded-lg border px-3 py-1.5 text-xs transition-colors",$.value.applicableChatType===H.value?"border-primary-500 bg-primary-50 text-primary-700 dark:border-primary-400 dark:bg-primary-950/30 dark:text-primary-300":"border-gray-200 text-gray-600 hover:border-gray-300 dark:border-gray-700 dark:text-gray-400"]),disabled:l.readonly,onClick:le=>J(H.value)},s(H.label),11,_0))),128))])]),e("div",null,[e("label",w0,s(a(t)("ai.assistant.config.locale")),1),e("div",$0,[(n(),i(oe,null,ce(C,H=>e("button",{key:H.value,type:"button",class:se(["rounded-lg border px-3 py-1.5 text-xs transition-colors",$.value.supportedLocales.includes(H.value)?"border-primary-500 bg-primary-50 text-primary-700 dark:border-primary-400 dark:bg-primary-950/30 dark:text-primary-300":"border-gray-200 text-gray-600 hover:border-gray-300 dark:border-gray-700 dark:text-gray-400"]),disabled:l.readonly,onClick:le=>me(H.value)},s(H.label),11,C0)),64))]),e("p",S0,s(a(t)("ai.assistant.config.localeHint")),1)]),e("div",{ref_key:"presetQuestionsRef",ref:w},[e("label",T0,s(a(t)("ai.assistant.config.presetQuestions")),1),e("div",M0,[(n(!0),i(oe,null,ce($.value.presetQuestions,(H,le)=>(n(),i("div",{key:le,class:"flex items-center gap-2"},[u(he,{modelValue:$.value.presetQuestions[le],"onUpdate:modelValue":fe=>$.value.presetQuestions[le]=fe,class:"min-w-0 flex-1",size:"sm",disabled:l.readonly},null,8,["modelValue","onUpdate:modelValue","disabled"]),l.readonly?E("",!0):(n(),K(ae,{key:0,color:"error",variant:"ghost",icon:"i-heroicons-trash",size:"xs",class:"shrink-0",onClick:fe=>k(le)},null,8,["onClick"]))]))),128)),l.readonly?E("",!0):(n(),i("div",I0,[u(he,{modelValue:I.value,"onUpdate:modelValue":N[4]||(N[4]=H=>I.value=H),placeholder:a(t)("ai.assistant.config.addQuestion"),class:"min-w-0 flex-1",size:"sm",onKeyup:ot(U,["enter"])},null,8,["modelValue","placeholder"]),u(ae,{color:"primary",variant:"soft",icon:"i-heroicons-plus",size:"xs",class:"shrink-0",onClick:U})]))])],512)],512),[[it,T.value==="basic"]]),He(e("div",D0,[e("div",null,[e("h3",L0,s(a(t)("ai.assistant.config.coreTools")),1),e("p",A0,s(a(t)("ai.assistant.config.coreToolsHint")),1),e("div",z0,[(n(!0),i(oe,null,ce(L.value,H=>(n(),i("label",{key:H.name,class:"flex items-start gap-2 rounded-md border border-gray-200 bg-gray-50/50 px-2.5 py-2 opacity-70 dark:border-gray-700 dark:bg-gray-800/30"},[N[6]||(N[6]=e("input",{type:"checkbox",checked:"",disabled:"",class:"mt-0.5 h-3.5 w-3.5 shrink-0 rounded border-gray-300 text-gray-400"},null,-1)),e("div",q0,[e("div",R0,s(H.name),1),e("div",E0,s(H.description),1)])]))),128))])]),e("div",null,[e("div",j0,[e("h3",P0,s(a(t)("ai.assistant.config.analysisTools")),1),l.readonly?E("",!0):(n(),i("div",U0,[e("button",{class:"text-[10px] text-primary-500 hover:text-primary-600",onClick:Y},s(a(t)("ai.assistant.config.selectAll")),1),N[7]||(N[7]=e("span",{class:"text-[10px] text-gray-300 dark:text-gray-600"},"|",-1)),e("button",{class:"text-[10px] text-primary-500 hover:text-primary-600",onClick:W},s(a(t)("ai.assistant.config.deselectAll")),1)]))]),e("p",B0,s(a(t)("ai.assistant.config.analysisToolsHint")),1),e("div",F0,[(n(!0),i(oe,null,ce(z.value,H=>(n(),i("label",{key:H.name,class:se(["flex cursor-pointer items-start gap-2 rounded-md border px-2.5 py-2 transition-colors",q(H.name)?"border-primary-200 bg-primary-50/50 dark:border-primary-800 dark:bg-primary-950/20":"border-gray-200 dark:border-gray-700"])},[e("input",{type:"checkbox",checked:q(H.name),disabled:l.readonly,class:"mt-0.5 h-3.5 w-3.5 shrink-0 rounded border-gray-300 text-primary-600 focus:ring-primary-500",onChange:le=>b(H.name)},null,40,V0),e("div",N0,[e("div",H0,s(H.name),1),e("div",O0,s(H.description),1)])],2))),128))])])],512),[[it,T.value==="tools"]])]),e("div",W0,[e("div",null,[!l.readonly&&!y.value&&h.value?.builtinId?(n(),K(ae,{key:0,variant:"outline",color:"warning",loading:p.value,onClick:j},{default:F(()=>[ee(s(a(t)("ai.assistant.config.resetDefault")),1)]),_:1},8,["loading"])):E("",!0)]),e("div",Y0,[u(ae,{variant:"ghost",onClick:pe},{default:F(()=>[ee(s(l.readonly?a(t)("common.close"):a(t)("common.cancel")),1)]),_:1}),l.readonly?E("",!0):(n(),K(ae,{key:0,color:"primary",loading:p.value,onClick:A},{default:F(()=>[ee(s(y.value?a(t)("ai.assistant.config.create"):a(t)("common.save")),1)]),_:1},8,["loading"]))])])],64)):E("",!0)])]),_:1},8,["open"])}}}),K0={class:"p-6"},G0={class:"mb-4 flex items-center justify-between"},J0={class:"text-lg font-bold text-gray-900 dark:text-gray-100"},X0={class:"mb-4 flex gap-1 rounded-lg bg-gray-100 p-1 dark:bg-gray-800"},Z0={key:0,class:"ml-1 inline-flex h-4 min-w-4 items-center justify-center rounded-full bg-primary-100 px-1 text-[10px] text-primary-600 dark:bg-primary-900/30 dark:text-primary-400"},em={class:"mb-3 text-xs text-gray-500 dark:text-gray-400"},tm={class:"max-h-[400px] space-y-3 overflow-y-auto pr-1"},am={class:"min-w-0 flex-1"},sm={class:"flex items-center gap-2"},nm={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},om={key:0,class:"inline-flex shrink-0 items-center rounded-full bg-blue-100 px-2 py-0.5 text-[10px] font-medium text-blue-700 dark:bg-blue-900/30 dark:text-blue-400"},rm={key:1,class:"inline-flex shrink-0 items-center rounded-full bg-green-100 px-2 py-0.5 text-[10px] font-medium text-green-700 dark:bg-green-900/30 dark:text-green-400"},lm={class:"mt-1 line-clamp-1 text-xs text-gray-500 dark:text-gray-400"},im={class:"flex shrink-0 items-center gap-1.5"},cm=["title","onClick"],dm=["title","onClick"],um=["title","onClick"],mm={key:0,class:"py-12 text-center text-sm text-gray-400"},gm={class:"mb-3 text-xs text-gray-500 dark:text-gray-400"},pm={key:0,class:"py-12 text-center text-sm text-gray-400"},hm={key:1,class:"py-12 text-center"},vm={class:"text-sm text-gray-500 dark:text-gray-400"},ym={key:2,class:"max-h-[400px] space-y-3 overflow-y-auto pr-1"},fm={class:"min-w-0 flex-1"},xm={class:"flex items-center gap-2"},bm={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},km={key:0,class:"inline-flex shrink-0 items-center rounded-full bg-blue-100 px-2 py-0.5 text-[10px] font-medium text-blue-700 dark:bg-blue-900/30 dark:text-blue-400"},_m={key:1,class:"inline-flex shrink-0 items-center rounded-full bg-green-100 px-2 py-0.5 text-[10px] font-medium text-green-700 dark:bg-green-900/30 dark:text-green-400"},wm={class:"mt-1 line-clamp-1 text-xs text-gray-500 dark:text-gray-400"},$m={class:"flex shrink-0 items-center gap-2"},Cm=["disabled","onClick"],Sm={class:"px-3 py-1.5 text-xs font-medium text-gray-400 dark:text-gray-500"},Tm=["disabled","onClick"],Mm=["title","onClick"],Im={key:3,class:"py-12 text-center text-sm text-gray-400"},Dm=ge({__name:"AssistantMarketModal",props:{open:{type:Boolean}},emits:["update:open","configure","view-config","create"],setup(l,{emit:o}){const{t,locale:c}=ye(),r=Je(),m=l,g=o,d=vt(),{assistants:p,cloudCatalogWithStatus:h,cloudLoading:y,cloudError:T}=et(d),M=f("local"),C=x(()=>{const k=c.value;return[...p.value].filter(b=>!b.supportedLocales?.length||b.supportedLocales.some(q=>k.startsWith(q))).sort((b,q)=>b.name.localeCompare(q.name))}),L=x(()=>[...h.value].sort((k,b)=>k.name.localeCompare(b.name))),z=f(new Set);de(()=>[m.open,M.value],([k,b])=>{k&&b==="market"&&d.fetchCloudCatalog(c.value)},{immediate:!0});function $(k){g("configure",k)}async function I(k){yt(k)||await d.deleteAssistant(k)}async function w(k){await d.duplicateAssistant(k)}function S(){g("create")}async function v(k){if(!z.value.has(k.id)){z.value=new Set([...z.value,k.id]);try{const b=await d.importFromCloud(k);b.success?r.success(t("ai.assistant.market.importSuccess")):r.fail(t("ai.assistant.market.importFailed"),{description:b.error})}finally{const b=new Set(z.value);b.delete(k.id),z.value=b}}}async function _(k){if(!z.value.has(k.id)){z.value=new Set([...z.value,k.id]);try{const b=await d.deleteAssistant(k.id);if(!b.success){r.fail(t("ai.assistant.market.importFailed"),{description:b.error});return}const q=await d.importFromCloud(k);q.success?r.success(t("ai.assistant.market.importSuccess")):r.fail(t("ai.assistant.market.importFailed"),{description:q.error})}finally{const b=new Set(z.value);b.delete(k.id),z.value=b}}}function A(k){g("view-config",k)}function j(){d.fetchCloudCatalog(c.value)}function U(k){return k?.length?k.map(q=>t(q==="group"?"ai.assistant.config.chatTypeGroup":"ai.assistant.config.chatTypePrivate")).join(" / "):null}return(k,b)=>{const q=_e,Y=We;return n(),K(Y,{open:l.open,ui:{content:"sm:max-w-xl z-50"},"onUpdate:open":b[3]||(b[3]=W=>g("update:open",W))},{content:F(()=>[e("div",K0,[e("div",G0,[e("h2",J0,s(a(t)("ai.assistant.market.title")),1),e("button",{class:"rounded-lg p-1.5 text-gray-400 transition-colors hover:bg-gray-100 hover:text-gray-600 dark:hover:bg-gray-800 dark:hover:text-gray-300",onClick:b[0]||(b[0]=W=>g("update:open",!1))},[u(q,{name:"i-heroicons-x-mark",class:"h-5 w-5"})])]),e("div",X0,[e("button",{class:se(["flex-1 rounded-md px-3 py-1.5 text-xs font-medium transition-colors",M.value==="local"?"bg-white text-gray-900 shadow-sm dark:bg-gray-700 dark:text-white":"text-gray-500 hover:text-gray-700 dark:text-gray-400"]),onClick:b[1]||(b[1]=W=>M.value="local")},[ee(s(a(t)("ai.assistant.market.tabs.local"))+" ",1),C.value.length?(n(),i("span",Z0,s(C.value.length),1)):E("",!0)],2),e("button",{class:se(["flex-1 rounded-md px-3 py-1.5 text-xs font-medium transition-colors",M.value==="market"?"bg-white text-gray-900 shadow-sm dark:bg-gray-700 dark:text-white":"text-gray-500 hover:text-gray-700 dark:text-gray-400"]),onClick:b[2]||(b[2]=W=>M.value="market")},s(a(t)("ai.assistant.market.tabs.market")),3)]),He(e("div",null,[e("p",em,s(a(t)("ai.assistant.market.localHint")),1),e("div",tm,[(n(!0),i(oe,null,ce(C.value,W=>(n(),i("div",{key:W.id,class:"flex items-center gap-4 rounded-xl border border-gray-200 bg-white p-4 transition-colors dark:border-gray-700 dark:bg-gray-800"},[e("div",am,[e("div",sm,[e("h3",nm,s(W.name),1),U(W.applicableChatTypes)?(n(),i("span",om,s(U(W.applicableChatTypes)),1)):E("",!0),a(yt)(W.id)?(n(),i("span",rm,s(a(t)("ai.assistant.market.default")),1)):E("",!0)]),e("p",lm,s(W.systemPrompt),1)]),e("div",im,[e("button",{class:"rounded-lg p-1.5 text-gray-400 transition-colors hover:bg-gray-100 hover:text-gray-600 dark:hover:bg-gray-700 dark:hover:text-gray-300",title:a(t)("common.edit"),onClick:Be(J=>$(W.id),["stop"])},[u(q,{name:"i-heroicons-pencil-square",class:"h-4 w-4"})],8,cm),e("button",{class:"rounded-lg p-1.5 text-gray-400 transition-colors hover:bg-gray-100 hover:text-gray-600 dark:hover:bg-gray-700 dark:hover:text-gray-300",title:a(t)("ai.assistant.market.duplicate"),onClick:Be(J=>w(W.id),["stop"])},[u(q,{name:"i-heroicons-document-duplicate",class:"h-4 w-4"})],8,dm),a(yt)(W.id)?E("",!0):(n(),i("button",{key:0,class:"rounded-lg p-1.5 text-gray-400 transition-colors hover:bg-red-50 hover:text-red-500 dark:hover:bg-red-900/20 dark:hover:text-red-400",title:a(t)("common.delete"),onClick:Be(J=>I(W.id),["stop"])},[u(q,{name:"i-heroicons-trash",class:"h-4 w-4"})],8,um))])]))),128))]),e("button",{type:"button",class:"mt-3 flex w-full items-center justify-center gap-1.5 rounded-xl border-2 border-dashed border-gray-300 py-4 text-sm text-gray-500 transition-colors hover:border-primary-400 hover:text-primary-600 dark:border-gray-600 dark:text-gray-400 dark:hover:border-primary-500 dark:hover:text-primary-400",onClick:S},[u(q,{name:"i-heroicons-plus",class:"h-4 w-4"}),ee(" "+s(a(t)("ai.assistant.market.addAssistant")),1)]),C.value.length===0?(n(),i("div",mm,s(a(t)("ai.assistant.market.noLocal")),1)):E("",!0)],512),[[it,M.value==="local"]]),He(e("div",null,[e("p",gm,s(a(t)("ai.assistant.market.marketHint")),1),a(y)?(n(),i("div",pm,s(a(t)("ai.assistant.market.loading")),1)):a(T)?(n(),i("div",hm,[e("p",vm,s(a(t)("ai.assistant.market.loadFailed")),1),e("button",{type:"button",class:"mt-3 rounded-lg bg-primary-500 px-4 py-2 text-sm font-medium text-white transition-colors hover:bg-primary-600",onClick:j},s(a(t)("ai.assistant.market.retry")),1)])):(n(),i("div",ym,[(n(!0),i(oe,null,ce(L.value,W=>(n(),i("div",{key:W.id,class:"flex items-center gap-4 rounded-xl border border-gray-200 bg-white p-4 transition-colors dark:border-gray-700 dark:bg-gray-800"},[e("div",fm,[e("div",xm,[e("h3",bm,s(W.name),1),U(W.applicableChatTypes)?(n(),i("span",km,s(U(W.applicableChatTypes)),1)):E("",!0),a(yt)(W.id)?(n(),i("span",_m,s(a(t)("ai.assistant.market.default")),1)):E("",!0)]),e("p",wm,s(W.description),1)]),e("div",$m,[W.imported?(n(),i(oe,{key:1},[e("span",Sm,s(a(t)("ai.assistant.market.imported")),1),e("button",{class:"rounded-lg px-3 py-1.5 text-xs font-medium text-gray-500 transition-colors hover:bg-gray-100 hover:text-gray-700 dark:text-gray-400 dark:hover:bg-gray-700 dark:hover:text-gray-300 disabled:opacity-50",disabled:z.value.has(W.id),onClick:J=>_(W)},s(z.value.has(W.id)?a(t)("ai.assistant.market.importing"):a(t)("ai.assistant.market.reimport")),9,Tm)],64)):(n(),i("button",{key:0,class:"rounded-lg bg-primary-500 px-3 py-1.5 text-xs font-medium text-white transition-colors hover:bg-primary-600 disabled:opacity-50",disabled:z.value.has(W.id),onClick:J=>v(W)},s(z.value.has(W.id)?a(t)("ai.assistant.market.importing"):a(t)("ai.assistant.market.import")),9,Cm)),W.imported?(n(),i("button",{key:2,class:"rounded-lg p-1.5 text-gray-400 transition-colors hover:bg-gray-100 hover:text-gray-600 dark:hover:bg-gray-700 dark:hover:text-gray-300",title:a(t)("ai.assistant.market.viewConfig"),onClick:Be(J=>A(W.id),["stop"])},[u(q,{name:"i-heroicons-eye",class:"h-4 w-4"})],8,Mm)):E("",!0)])]))),128))])),!a(y)&&!a(T)&&L.value.length===0?(n(),i("div",Im,s(a(t)("ai.assistant.market.noCatalog")),1)):E("",!0)],512),[[it,M.value==="market"]])])]),_:1},8,["open"])}}}),Lm={class:"p-5"},Am={class:"flex items-start gap-3"},zm={class:"flex h-10 w-10 shrink-0 items-center justify-center rounded-xl bg-primary-50 text-primary-600 dark:bg-primary-950/40 dark:text-primary-400"},qm={class:"min-w-0"},Rm={class:"font-semibold text-gray-900 dark:text-white"},Em={class:"mt-1.5 text-sm leading-6 text-gray-600 dark:text-gray-400"},jm={class:"mt-4 rounded-lg bg-gray-50 px-3 py-2.5 dark:bg-gray-800/70"},Pm={class:"flex items-center gap-2 text-sm text-gray-700 dark:text-gray-300"},Um={class:"truncate"},Bm={class:"mt-2 text-xs text-gray-500 dark:text-gray-400"},Fm={class:"mt-5 flex justify-end gap-2"},Vm=ge({__name:"AssistantUpgradeModal",props:{open:{type:Boolean},backupName:{},upgrading:{type:Boolean},skipping:{type:Boolean}},emits:["skip","confirm"],setup(l,{emit:o}){const t=o,{t:c}=ye();return(r,m)=>{const g=_e,d=Pe,p=We;return n(),K(p,{open:l.open,dismissible:!1,ui:{content:"sm:max-w-md z-50",overlay:"z-40"}},{content:F(()=>[e("div",Lm,[e("div",Am,[e("div",zm,[u(g,{name:"i-lucide-sparkles",class:"h-5 w-5"})]),e("div",qm,[e("h3",Rm,s(a(c)("ai.assistant.upgrade.title")),1),e("p",Em,s(a(c)("ai.assistant.upgrade.message",{backupName:l.backupName})),1)])]),e("div",jm,[e("div",Pm,[u(g,{name:"i-lucide-copy-check",class:"h-4 w-4 shrink-0 text-gray-400"}),e("span",Um,s(l.backupName),1)])]),e("p",Bm,s(a(c)("ai.assistant.upgrade.skipHint")),1),e("div",Fm,[u(d,{variant:"soft",loading:l.skipping,disabled:l.upgrading,onClick:m[0]||(m[0]=h=>t("skip"))},{default:F(()=>[ee(s(a(c)("ai.assistant.upgrade.skip")),1)]),_:1},8,["loading","disabled"]),u(d,{color:"primary",loading:l.upgrading,disabled:l.skipping,onClick:m[1]||(m[1]=h=>t("confirm"))},{default:F(()=>[ee(s(a(c)("ai.assistant.upgrade.confirm")),1)]),_:1},8,["loading","disabled"])])])]),_:1},8,["open"])}}}),Nm={class:"p-6"},Hm={class:"mb-4 flex items-center justify-between"},Om={class:"text-lg font-bold text-gray-900 dark:text-gray-100"},Wm={class:"mb-4 flex gap-1 rounded-lg bg-gray-100 p-1 dark:bg-gray-800"},Ym={key:0,class:"ml-1 inline-flex h-4 min-w-4 items-center justify-center rounded-full bg-primary-100 px-1 text-[10px] text-primary-600 dark:bg-primary-900/30 dark:text-primary-400"},Qm={class:"mb-3 text-xs text-gray-500 dark:text-gray-400"},Km={class:"max-h-[400px] space-y-3 overflow-y-auto pr-1"},Gm={class:"min-w-0 flex-1"},Jm={class:"flex items-center gap-2"},Xm={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},Zm={class:"inline-flex shrink-0 items-center rounded-full bg-blue-100 px-2 py-0.5 text-[10px] font-medium text-blue-700 dark:bg-blue-900/30 dark:text-blue-400"},eg={class:"mt-1 line-clamp-1 text-xs text-gray-500 dark:text-gray-400"},tg={key:0,class:"mt-1.5 flex flex-wrap gap-1"},ag={class:"flex shrink-0 items-center gap-1.5"},sg=["title","onClick"],ng=["title","onClick"],og={key:0,class:"py-12 text-center text-sm text-gray-400"},rg={class:"mb-3 text-xs text-gray-500 dark:text-gray-400"},lg={key:0,class:"py-12 text-center text-sm text-gray-400"},ig={key:1,class:"py-12 text-center"},cg={class:"text-sm text-gray-500 dark:text-gray-400"},dg={key:2,class:"max-h-[400px] space-y-3 overflow-y-auto pr-1"},ug={class:"min-w-0 flex-1"},mg={class:"flex items-center gap-2"},gg={class:"text-sm font-semibold text-gray-900 dark:text-gray-100"},pg={class:"inline-flex shrink-0 items-center rounded-full bg-blue-100 px-2 py-0.5 text-[10px] font-medium text-blue-700 dark:bg-blue-900/30 dark:text-blue-400"},hg={class:"mt-1 line-clamp-1 text-xs text-gray-500 dark:text-gray-400"},vg={key:0,class:"mt-1.5 flex flex-wrap gap-1"},yg={class:"flex shrink-0 items-center gap-2"},fg=["disabled","onClick"],xg={class:"px-3 py-1.5 text-xs font-medium text-gray-400 dark:text-gray-500"},bg=["disabled","onClick"],kg={key:3,class:"py-12 text-center text-sm text-gray-400"},_g=ge({__name:"SkillMarketModal",props:{open:{type:Boolean}},emits:["update:open","configure","create"],setup(l,{emit:o}){const{t,locale:c}=ye(),r=Je(),m=l,g=o,d=gt(),{skills:p,cloudCatalogWithStatus:h,cloudLoading:y,cloudError:T}=et(d),M=f("local"),C=f(new Set);Ve(()=>{d.setFilterContext("group",c.value)}),de(()=>[m.open,M.value],([j,U])=>{j&&U==="market"&&(d.setFilterContext("group",c.value),d.fetchCloudCatalog())},{immediate:!0});const L=x(()=>[...p.value].sort((j,U)=>j.name.localeCompare(U.name))),z=x(()=>[...h.value].sort((j,U)=>j.name.localeCompare(U.name)));function $(j){return t(j==="group"?"ai.skill.config.chatScopeGroup":j==="private"?"ai.skill.config.chatScopePrivate":"ai.skill.config.chatScopeAll")}function I(j){g("configure",j)}async function w(j){await d.deleteSkill(j)}function S(){g("create")}async function v(j){if(!C.value.has(j.id)){C.value=new Set([...C.value,j.id]);try{const U=await d.importFromCloud(j);U.success?r.success(t("ai.skill.market.importSuccess")):r.fail(t("ai.skill.market.importFailed"),{description:U.error})}finally{const U=new Set(C.value);U.delete(j.id),C.value=U}}}async function _(j){if(!C.value.has(j.id)){C.value=new Set([...C.value,j.id]);try{const U=await d.deleteSkill(j.id);if(!U.success){r.fail(t("ai.skill.market.importFailed"),{description:U.error});return}const k=await d.importFromCloud(j);k.success?r.success(t("ai.skill.market.importSuccess")):r.fail(t("ai.skill.market.importFailed"),{description:k.error})}finally{const U=new Set(C.value);U.delete(j.id),C.value=U}}}function A(){d.fetchCloudCatalog()}return(j,U)=>{const k=_e,b=We;return n(),K(b,{open:l.open,ui:{content:"sm:max-w-xl z-50"},"onUpdate:open":U[3]||(U[3]=q=>g("update:open",q))},{content:F(()=>[e("div",Nm,[e("div",Hm,[e("h2",Om,s(a(t)("ai.skill.market.title")),1),e("button",{class:"rounded-lg p-1.5 text-gray-400 transition-colors hover:bg-gray-100 hover:text-gray-600 dark:hover:bg-gray-800 dark:hover:text-gray-300",onClick:U[0]||(U[0]=q=>g("update:open",!1))},[u(k,{name:"i-heroicons-x-mark",class:"h-5 w-5"})])]),e("div",Wm,[e("button",{class:se(["flex-1 rounded-md px-3 py-1.5 text-xs font-medium transition-colors",M.value==="local"?"bg-white text-gray-900 shadow-sm dark:bg-gray-700 dark:text-white":"text-gray-500 hover:text-gray-700 dark:text-gray-400"]),onClick:U[1]||(U[1]=q=>M.value="local")},[ee(s(a(t)("ai.skill.market.tabs.local"))+" ",1),a(p).length?(n(),i("span",Ym,s(a(p).length),1)):E("",!0)],2),e("button",{class:se(["flex-1 rounded-md px-3 py-1.5 text-xs font-medium transition-colors",M.value==="market"?"bg-white text-gray-900 shadow-sm dark:bg-gray-700 dark:text-white":"text-gray-500 hover:text-gray-700 dark:text-gray-400"]),onClick:U[2]||(U[2]=q=>M.value="market")},s(a(t)("ai.skill.market.tabs.market")),3)]),He(e("div",null,[e("p",Qm,s(a(t)("ai.skill.market.localHint")),1),e("div",Km,[(n(!0),i(oe,null,ce(L.value,q=>(n(),i("div",{key:q.id,class:"flex items-center gap-4 rounded-xl border border-gray-200 bg-white p-4 transition-colors dark:border-gray-700 dark:bg-gray-800"},[e("div",Gm,[e("div",Jm,[e("h3",Xm,s(q.name),1),e("span",Zm,s($(q.chatScope)),1)]),e("p",eg,s(q.description),1),q.tags.length?(n(),i("div",tg,[(n(!0),i(oe,null,ce(q.tags,Y=>(n(),i("span",{key:Y,class:"rounded-full bg-gray-100 px-1.5 py-0.5 text-[10px] text-gray-500 dark:bg-gray-700 dark:text-gray-400"},s(Y),1))),128))])):E("",!0)]),e("div",ag,[e("button",{class:"rounded-lg p-1.5 text-gray-400 transition-colors hover:bg-gray-100 hover:text-gray-600 dark:hover:bg-gray-700 dark:hover:text-gray-300",title:a(t)("common.edit"),onClick:Be(Y=>I(q.id),["stop"])},[u(k,{name:"i-heroicons-pencil-square",class:"h-4 w-4"})],8,sg),e("button",{class:"rounded-lg p-1.5 text-gray-400 transition-colors hover:bg-red-50 hover:text-red-500 dark:hover:bg-red-900/20 dark:hover:text-red-400",title:a(t)("common.delete"),onClick:Be(Y=>w(q.id),["stop"])},[u(k,{name:"i-heroicons-trash",class:"h-4 w-4"})],8,ng)])]))),128))]),e("button",{type:"button",class:"mt-3 flex w-full items-center justify-center gap-1.5 rounded-xl border-2 border-dashed border-gray-300 py-4 text-sm text-gray-500 transition-colors hover:border-primary-400 hover:text-primary-600 dark:border-gray-600 dark:text-gray-400 dark:hover:border-primary-500 dark:hover:text-primary-400",onClick:S},[u(k,{name:"i-heroicons-plus",class:"h-4 w-4"}),ee(" "+s(a(t)("ai.skill.market.addSkill")),1)]),L.value.length===0?(n(),i("div",og,s(a(t)("ai.skill.market.noLocal")),1)):E("",!0)],512),[[it,M.value==="local"]]),He(e("div",null,[e("p",rg,s(a(t)("ai.skill.market.marketHint")),1),a(y)?(n(),i("div",lg,s(a(t)("ai.skill.market.loading")),1)):a(T)?(n(),i("div",ig,[e("p",cg,s(a(t)("ai.skill.market.loadFailed")),1),e("button",{type:"button",class:"mt-3 rounded-lg bg-primary-500 px-4 py-2 text-sm font-medium text-white transition-colors hover:bg-primary-600",onClick:A},s(a(t)("ai.skill.market.retry")),1)])):(n(),i("div",dg,[(n(!0),i(oe,null,ce(z.value,q=>(n(),i("div",{key:q.id,class:"flex items-center gap-4 rounded-xl border border-gray-200 bg-white p-4 transition-colors dark:border-gray-700 dark:bg-gray-800"},[e("div",ug,[e("div",mg,[e("h3",gg,s(q.name),1),e("span",pg,s($(q.chatScope)),1)]),e("p",hg,s(q.description),1),q.tags?.length?(n(),i("div",vg,[(n(!0),i(oe,null,ce(q.tags,Y=>(n(),i("span",{key:Y,class:"rounded-full bg-gray-100 px-1.5 py-0.5 text-[10px] text-gray-500 dark:bg-gray-700 dark:text-gray-400"},s(Y),1))),128))])):E("",!0)]),e("div",yg,[q.imported?(n(),i(oe,{key:1},[e("span",xg,s(a(t)("ai.skill.market.imported")),1),e("button",{class:"rounded-lg px-3 py-1.5 text-xs font-medium text-gray-500 transition-colors hover:bg-gray-100 hover:text-gray-700 dark:text-gray-400 dark:hover:bg-gray-700 dark:hover:text-gray-300 disabled:opacity-50",disabled:C.value.has(q.id),onClick:Y=>_(q)},s(C.value.has(q.id)?a(t)("ai.skill.market.importing"):a(t)("ai.skill.market.reimport")),9,bg)],64)):(n(),i("button",{key:0,class:"rounded-lg bg-primary-500 px-3 py-1.5 text-xs font-medium text-white transition-colors hover:bg-primary-600 disabled:opacity-50",disabled:C.value.has(q.id),onClick:Y=>v(q)},s(C.value.has(q.id)?a(t)("ai.skill.market.importing"):a(t)("ai.skill.market.import")),9,fg))])]))),128))])),!a(y)&&!a(T)&&z.value.length===0?(n(),i("div",kg,s(a(t)("ai.skill.market.noCatalog")),1)):E("",!0)],512),[[it,M.value==="market"]])])]),_:1},8,["open"])}}}),wg={class:"p-6"},$g={class:"mb-4 flex items-center justify-between"},Cg={class:"text-lg font-bold text-gray-900 dark:text-gray-100"},Sg={class:"mb-3 text-xs text-gray-500 dark:text-gray-400"},Tg={key:0,class:"flex h-64 items-center justify-center text-gray-400"},Mg={class:"mt-4 flex justify-end gap-2"},Ig=["disabled"],Dg=`---
102
- name: ""
103
- description: ""
104
- tags: []
105
- chatScope: all
106
- tools: []
107
- ---
108
-
109
- `,Lg=ge({__name:"SkillConfigModal",props:{open:{type:Boolean},skillId:{}},emits:["update:open","saved","created"],setup(l,{emit:o}){const{t}=ye(),c=l,r=o,m=gt(),g=f(""),d=f(!1),p=f(!1),h=f(!1);de(()=>[c.open,c.skillId],async([T,M])=>{if(T){if(!M){h.value=!0,g.value=Dg;return}h.value=!1,d.value=!0;try{const C=await m.getSkillConfig(M);if(C){const L=["---",`name: "${C.name}"`,`description: "${C.description}"`,`tags: [${C.tags.map(z=>`"${z}"`).join(", ")}]`,`chatScope: ${C.chatScope}`,C.tools.length?`tools: [${C.tools.map(z=>`"${z}"`).join(", ")}]`:"tools: []",C.builtinId?`builtinId: ${C.builtinId}`:"","---","",C.prompt].filter(Boolean).join(`
110
- `);g.value=L}}finally{d.value=!1}}},{immediate:!0});async function y(){if(g.value.trim()){p.value=!0;try{if(h.value){const T=await m.createSkill(g.value);T.success&&T.id&&(r("created",T.id),r("update:open",!1))}else c.skillId&&(await m.updateSkill(c.skillId,g.value)).success&&(r("saved"),r("update:open",!1))}finally{p.value=!1}}}return(T,M)=>{const C=_e,L=We;return n(),K(L,{open:l.open,ui:{content:"sm:max-w-2xl z-50"},"onUpdate:open":M[3]||(M[3]=z=>r("update:open",z))},{content:F(()=>[e("div",wg,[e("div",$g,[e("h2",Cg,s(h.value?a(t)("ai.skill.config.createTitle"):a(t)("ai.skill.config.editTitle")),1),e("button",{class:"rounded-lg p-1.5 text-gray-400 transition-colors hover:bg-gray-100 hover:text-gray-600 dark:hover:bg-gray-800 dark:hover:text-gray-300",onClick:M[0]||(M[0]=z=>r("update:open",!1))},[u(C,{name:"i-heroicons-x-mark",class:"h-5 w-5"})])]),e("p",Sg,s(a(t)("ai.skill.config.rawEditorHint")),1),d.value?(n(),i("div",Tg,[u(C,{name:"i-heroicons-arrow-path",class:"mr-2 h-5 w-5 animate-spin"})])):He((n(),i("textarea",{key:1,"onUpdate:modelValue":M[1]||(M[1]=z=>g.value=z),class:"h-[400px] w-full resize-none rounded-lg border border-gray-300 bg-gray-50 p-3 font-mono text-xs text-gray-900 focus:border-primary-500 focus:ring-1 focus:ring-primary-500 dark:border-gray-600 dark:bg-page-dark dark:text-gray-100",spellcheck:"false"},null,512)),[[rt,g.value]]),e("div",Mg,[e("button",{class:"rounded-lg px-4 py-2 text-sm text-gray-500 transition-colors hover:bg-gray-100 dark:text-gray-400 dark:hover:bg-gray-800",onClick:M[2]||(M[2]=z=>r("update:open",!1))},s(a(t)("common.cancel")),1),e("button",{class:"rounded-lg bg-primary-500 px-4 py-2 text-sm font-medium text-white transition-colors hover:bg-primary-600 disabled:opacity-50",disabled:p.value||!g.value.trim(),onClick:y},s(h.value?a(t)("ai.skill.config.create"):a(t)("ai.skill.config.save")),9,Ig)])])]),_:1},8,["open"])}}}),Ag={key:0,class:"relative"},zg={class:"relative flex flex-nowrap gap-2"},qg=["disabled"],Rg=["disabled"],Eg={class:"inline-flex items-center gap-1"},jg={key:0,class:"absolute left-0 bottom-full z-20 mb-2 w-[320px] max-w-[calc(100vw-3rem)]"},Pg={class:"mb-1.5 flex justify-start"},Ug={class:"flex flex-wrap gap-2"},Bg=["disabled","onClick"],Rt="rounded-full ring-1 ring-inset ring-gray-200/80 bg-white/60 shadow-[0_2px_8px_-2px_rgba(0,0,0,0.05)] backdrop-blur-md px-3 py-1.5 text-xs text-gray-600 transition-all duration-300 hover:-translate-y-[1px] hover:ring-primary-300 hover:bg-white/90 hover:text-primary-600 hover:shadow-[0_4px_12px_-2px_rgba(0,0,0,0.08)] disabled:cursor-not-allowed disabled:opacity-50 dark:ring-gray-700/60 dark:bg-gray-800/60 dark:text-gray-300 dark:hover:ring-primary-500/50 dark:hover:bg-gray-800/90 dark:hover:text-primary-400",Fg=ge({__name:"PresetQuestions",props:{questions:{},disabled:{type:Boolean},leadingActionLabel:{}},emits:["select","leadingAction","editQuestions"],setup(l,{emit:o}){const{t}=ye(),c=l,r=o,m=f(!1);let g=null;function d(T){m.value=!1,r("select",T)}function p(){c.disabled||c.questions.length===0||(g&&(clearTimeout(g),g=null),m.value=!0)}function h(){g=setTimeout(()=>{m.value=!1},150)}function y(){m.value=!1,r("editQuestions")}return Ct(()=>{g&&clearTimeout(g)}),(T,M)=>{const C=_e;return l.leadingActionLabel||l.questions.length>0?(n(),i("div",Ag,[e("div",zg,[l.leadingActionLabel?(n(),i("button",{key:0,class:se(Rt),disabled:c.disabled,onClick:M[0]||(M[0]=L=>r("leadingAction"))},s(l.leadingActionLabel),9,qg)):E("",!0),l.questions.length>0?(n(),i("div",{key:1,class:"relative shrink-0",onMouseenter:p,onMouseleave:h},[e("button",{class:se([Rt,m.value?"ring-primary-300 bg-white/90 text-primary-600 dark:ring-primary-500/50 dark:bg-gray-800/90 dark:text-primary-400":""]),disabled:c.disabled},[e("span",Eg,[u(C,{name:"i-heroicons-chat-bubble-left-ellipsis",class:"h-3.5 w-3.5"}),ee(" "+s(a(t)("ai.chat.input.quickAsk")),1)])],10,Rg),u(lt,{"enter-active-class":"transition duration-200 ease-out","enter-from-class":"opacity-0 translate-y-2","enter-to-class":"opacity-100 translate-y-0","leave-active-class":"transition duration-150 ease-in","leave-from-class":"opacity-100 translate-y-0","leave-to-class":"opacity-0 translate-y-2"},{default:F(()=>[m.value?(n(),i("div",jg,[e("div",Pg,[e("button",{class:"inline-flex items-center gap-1 rounded-full px-2 py-0.5 text-[10px] text-gray-400 transition-colors hover:text-primary-500 dark:text-gray-500 dark:hover:text-primary-400",onClick:y},[u(C,{name:"i-heroicons-pencil-square",class:"h-3 w-3"}),ee(" "+s(a(t)("ai.chat.input.editQuickAsk")),1)])]),e("div",Ug,[(n(!0),i(oe,null,ce(l.questions,(L,z)=>(n(),i("button",{key:z,class:se(Rt),disabled:c.disabled,onClick:$=>d(L)},s(L),9,Bg))),128))])])):E("",!0)]),_:1})],32)):E("",!0)])])):E("",!0)}}}),Vg=30;function Ng(l,o){const t=f(null),c=f(!0),r=f(!1);function m(h=!1){setTimeout(()=>{t.value&&(h||c.value)&&(t.value.scrollTop=t.value.scrollHeight,c.value=!0,r.value=!1)},100)}function g(h){h.deltaY<0&&o.value&&(c.value=!1,r.value=!0)}function d(){if(!t.value)return;const{scrollTop:h,scrollHeight:y,clientHeight:T}=t.value;y-h-T<Vg&&(c.value=!0,r.value=!1)}function p(){m(!0)}return de(()=>{const h=l.value[l.value.length-1];return[l.value.length,h?.content,h?.contentBlocks?.length]},()=>m()),Ve(()=>{t.value&&(t.value.addEventListener("scroll",d),t.value.addEventListener("wheel",g,{passive:!0})),l.value.length>0&&m(!0)}),Ct(()=>{t.value&&(t.value.removeEventListener("scroll",d),t.value.removeEventListener("wheel",g))}),{messagesContainer:t,showScrollToBottom:r,scrollToBottom:m,handleScrollToBottom:p}}function Hg(){const l=vt(),o=gt(),t=f(!1),c=f(null),r=f(!1),m=f(!1),g=f(!1),d=f(!1),p=f(null);function h(_){c.value=_,r.value=!1,t.value=!0}function y(){m.value=!0}function T(_){c.value=_,r.value=!1,t.value=!0}function M(_){c.value=_,r.value=!0,t.value=!0}function C(){c.value=null,r.value=!1,t.value=!0}async function L(_){await l.loadAssistants(),await l.loadBuiltinCatalog()}async function z(){await l.loadAssistants()}function $(){g.value=!0}function I(_){p.value=_,d.value=!0}function w(){p.value=null,d.value=!0}async function S(){await o.loadSkills()}async function v(_){await o.loadSkills(),await o.loadBuiltinCatalog()}return{configModalVisible:t,configModalAssistantId:c,configModalReadonly:r,marketModalVisible:m,handleConfigureAssistant:h,handleOpenMarket:y,handleMarketConfigure:T,handleMarketViewConfig:M,handleCreateAssistant:C,handleAssistantCreated:L,handleAssistantConfigSaved:z,skillMarketModalVisible:g,skillConfigModalVisible:d,skillConfigModalSkillId:p,handleOpenSkillMarket:$,handleSkillMarketConfigure:I,handleCreateSkill:w,handleSkillConfigSaved:S,handleSkillCreated:v}}function Og(l){const o=[];let t=null;for(const c of l)c.role==="user"?(t&&o.push({user:t,assistant:null,standalone:null,id:t.id}),t=c):c.role==="assistant"?(o.push({user:t,assistant:c,standalone:null,id:t?.id||c.id}),t=null):(t&&(o.push({user:t,assistant:null,standalone:null,id:t.id}),t=null),o.push({user:null,assistant:null,standalone:c,id:c.id}));return t&&o.push({user:t,assistant:null,standalone:null,id:t.id}),o}const Wg={class:"main-content flex h-full overflow-hidden"},Yg={class:"flex h-full flex-1 overflow-hidden"},Qg={class:"flex h-full flex-1"},Kg={class:"relative flex min-w-[480px] flex-1 flex-col overflow-hidden"},Gg={key:0,class:"flex items-center gap-1.5 px-3 py-1.5"},Jg=["disabled"],Xg={key:0,class:"flex w-full flex-col items-center justify-center animate-fade-in"},Zg={key:0,class:"mb-3 text-center text-2xl font-semibold tracking-tight text-gray-800 dark:text-gray-100"},ep={class:"text-primary-600 dark:text-primary-400"},tp={key:1,class:"relative mb-8 w-full max-w-lg"},ap={class:"flex w-full justify-center"},sp={key:1,class:"qa-pair space-y-6 pb-4"},np={key:1,class:"px-4 pb-2"},op={class:"mx-auto max-w-[740px]"},rp={class:"px-4 pb-2"},lp={class:"mx-auto max-w-[740px]"},ip={key:0,class:"w-80 shrink-0 border-l border-gray-200 bg-gray-50/50 p-4 dark:border-gray-800 dark:bg-page-dark/50"},cp=ge({__name:"ChatExplorer",props:{sessionId:{},sessionName:{},timeFilter:{},chatType:{}},setup(l,{expose:o}){const{t}=ye(),c=Je(),r=Qt(),m=vt(),g=gt(),d=l,{messages:p,sourceMessages:h,currentKeywords:y,isLoadingSource:T,isAIThinking:M,currentAIChatId:C,currentToolStatus:L,toolsUsedInCurrentRound:z,sessionTokenUsage:$,agentStatus:I,selectedAssistantId:w,sendMessage:S,editMessageAndRegenerate:v,loadAIChat:_,startNewAIChat:A,loadMoreSourceMessages:j,updateMaxMessages:U,stopGeneration:k,selectAssistantForSession:b}=ws(d.sessionId,d.sessionName,d.timeFilter,d.chatType??"group",r.locale),q=Ng(p,M),{showScrollToBottom:Y,scrollToBottom:W,handleScrollToBottom:J}=q,{configModalVisible:me,configModalAssistantId:pe,configModalReadonly:X,marketModalVisible:N,skillMarketModalVisible:ae,skillConfigModalVisible:ue,skillConfigModalSkillId:he,handleConfigureAssistant:G,handleOpenMarket:O,handleMarketConfigure:H,handleMarketViewConfig:le,handleCreateAssistant:fe,handleAssistantCreated:xe,handleAssistantConfigSaved:ke,handleOpenSkillMarket:ne,handleSkillMarketConfigure:re,handleCreateSkill:ve,handleSkillConfigSaved:Me,handleSkillCreated:$e}=Hg(),qe=Wt(),Ae=f(0);de(()=>C.value,async be=>{if(!be){Ae.value=0;return}try{const we=await Ne().estimateContextTokens(be);we.success&&(Ae.value=we.tokens)}catch{Ae.value=0}},{immediate:!0});const Se=x(()=>m.selectedAssistant?.presetQuestions??[]),Re=x(()=>d.chatType??"group"),je=f(!1),Ue=f(!1),ie=f(!0),R=f(void 0),D=f(null),V=f(null),P=f(null),B=f(!1),Z=f(!1),Q=f(!1),te=x(()=>{const be=P.value?.name||t("ai.assistant.fallbackName");return t("ai.assistant.upgrade.backupName",{name:be})}),Ee=x(()=>Og(p.value));async function De(){ie.value=!0;try{Ue.value=await Yt().hasConfig()}catch(be){console.error("检查 LLM 配置失败:",be),Ue.value=!1}finally{ie.value=!1}}async function Te(){await De(),Ue.value&&await U()}o({refreshConfig:Te});const Le=x(()=>{const be=m.selectedAssistant;if(!be)return{name:"",preview:""};const we=be.systemPrompt.replace(/#{1,6}\s+[^\n]*/g,"").replace(/\n+/g," ").replace(/\s+/g," ").trim();return{name:be.name,preview:we}}),Ge=x(()=>!!w.value&&p.value.length===0&&!M.value);function At(){c.warn(t("ai.chat.backgroundTask.runningTitle"),{description:t("ai.chat.backgroundTask.runningDescription")})}function ta(){c.warn(t("ai.chat.backgroundTask.blockedAction"))}function ka(be){if(be!==w.value){if(!b(be)){ta();return}g.activateSkill(null),A()}}async function _a(be){const we=await S(be);!we.success&&we.reason==="busy"&&At()}function wa(){const be=m.selectedAssistant?.id;be&&(R.value="presetQuestions",G(be))}function $a(be){me.value=be,be||(R.value=void 0)}function Ca(){V.value?.openSkillSelector()}function Sa(){W(!0)}async function aa(){const be=await m.checkDefaultAssistantUpgrade(r.locale);be&&(P.value=be,B.value=!0)}async function Ta(){const be=P.value;if(!(!be||Z.value||Q.value)){Q.value=!0;try{const we=await m.skipAssistantUpgrade(be);if(!we.success){c.fail(t("ai.assistant.upgrade.skipFailed"),{description:we.error||t("ai.assistant.toast.unknownError")});return}B.value=!1,P.value=null}finally{Q.value=!1}}}async function Ma(){const be=P.value;if(!(!be||Z.value||Q.value)){Z.value=!0;try{const we=te.value,ut=await m.upgradeAssistantWithBackup(be,we);if(!ut.success){c.fail(t("ai.assistant.upgrade.failed"),{description:ut.error||t("ai.assistant.toast.unknownError")});return}B.value=!1,P.value=null,c.success(t("ai.assistant.upgrade.success"),{description:t("ai.assistant.upgrade.successDescription",{name:we})})}finally{Z.value=!1}}}async function Ia(be){const we=await S(be.content,{mentionedMembers:be.mentionedMembers});if(!we.success){we.reason==="busy"&&At();return}W(!0),D.value?.refresh()}async function Da(be){const we=await v(be.messageId,be.content,{overwriteSubsequent:be.overwriteSubsequent});if(!we.success){we.reason==="busy"&&At();return}W(!0),D.value?.refresh()}async function La(be){if(C.value)try{const we=await Ne().forkAIChat(C.value,be);await _(we.id),D.value?.refresh(),W(!0),c.success(t("ai.chat.fork.success"))}catch(we){c.fail(t("ai.chat.fork.failed"),{description:String(we)})}}function Aa(){je.value=!je.value}async function za(){await j()}async function qa(be){await _(be),W(!0)}function Ra(){if(M.value){ta();return}A()}function Ea(be){C.value===be&&A()}function ja(){k()}return De(),U(),Ve(()=>{aa()}),de(()=>r.locale,()=>{aa()}),de(()=>qe.aiConfigVersion,async()=>{await Te()}),(be,we)=>{const ut=_e,Pa=pt;return n(),i("div",Wg,[u(hl,{ref_key:"conversationListRef",ref:D,"session-id":l.sessionId,"active-id":a(C),disabled:a(M),onSelect:qa,onCreate:Ra,onDelete:Ea},null,8,["session-id","active-id","disabled"]),e("div",Yg,[e("div",Qg,[e("div",Kg,[a(p).length>0||a(M)?(n(),i("div",Gg,[e("button",{class:se(["flex items-center gap-1 rounded-md px-1.5 py-1 text-xs text-gray-600 transition-colors hover:bg-gray-100 hover:text-gray-900 dark:text-gray-400 dark:hover:bg-gray-800 dark:hover:text-gray-200",{"cursor-not-allowed opacity-50":a(M)||!a(m).selectedAssistant?.id}]),disabled:a(M)||!a(m).selectedAssistant?.id,onClick:we[0]||(we[0]=Ce=>a(G)(a(m).selectedAssistant.id))},[u(ut,{name:"i-heroicons-sparkles",class:"h-3.5 w-3.5"}),e("span",null,s(a(m).selectedAssistant?.name||a(t)("ai.assistant.fallbackName")),1)],10,Jg)])):E("",!0),e("div",{ref:a(q).messagesContainer,class:se(["relative min-h-0 flex-1 overflow-x-hidden overflow-y-auto p-4",{"p-0!":a(p).length===0&&!a(M)}])},[e("div",{class:se(["mx-auto max-w-3xl space-y-6",{"flex min-h-full flex-col justify-center px-4 pb-32 pt-4 space-y-0!":a(p).length===0&&!a(M),"px-4":a(p).length>0||a(M)}])},[a(p).length===0&&!a(M)?(n(),i("div",Xg,[Le.value.name?(n(),i("h2",Zg,[ee(s(a(t)("ai.assistant.selector.heroTitlePrefix","使用"))+" ",1),e("span",ep,s(Le.value.name),1),ee(" "+s(a(t)("ai.assistant.selector.heroTitleSuffix","开始对话")),1)])):E("",!0),Ge.value&&Le.value.name?(n(),i("div",tp,[e("p",{class:"cursor-pointer pr-7 text-center text-sm leading-relaxed text-gray-500 transition-colors hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300 line-clamp-2",onClick:we[1]||(we[1]=Ce=>a(G)(a(m).selectedAssistant.id))},[u(Pa,{text:a(t)("ai.assistant.config.systemPrompt","系统设定"),popper:{placement:"top"}},{default:F(()=>[ee(s(Le.value.preview),1)]),_:1},8,["text"])]),e("button",{type:"button",class:"absolute bottom-0 right-0 rounded-md p-0.5 text-gray-400 transition-colors hover:bg-gray-100 hover:text-gray-600 dark:hover:bg-gray-800 dark:hover:text-gray-200",onClick:we[2]||(we[2]=Be(Ce=>a(G)(a(m).selectedAssistant.id),["stop"]))},[u(ut,{name:"i-heroicons-pencil-square",class:"h-4 w-4"})])])):E("",!0),e("div",ap,[u(l0,{"chat-type":Re.value,locale:a(r).locale,"selected-id":a(w),onSelect:ka,onMarket:a(O)},null,8,["chat-type","locale","selected-id","onMarket"])])])):E("",!0),(n(!0),i(oe,null,ce(Ee.value,Ce=>(n(),i(oe,{key:Ce.id},[Ce.standalone?(n(),K(qt,{key:0,role:Ce.standalone.role,content:Ce.standalone.content,timestamp:Ce.standalone.timestamp},null,8,["role","content","timestamp"])):(n(),i("div",sp,[Ce.user&&(Ce.user.role==="user"||Ce.user.content)?(n(),K(qt,{key:0,role:Ce.user.role,"message-id":Ce.user.id,content:Ce.user.content,timestamp:Ce.user.timestamp,"is-streaming":Ce.user.isStreaming,"content-blocks":Ce.user.contentBlocks,editable:!a(M),onEdit:Da},null,8,["role","message-id","content","timestamp","is-streaming","content-blocks","editable"])):E("",!0),Ce.assistant&&(Ce.assistant.content||Ce.assistant.contentBlocks&&Ce.assistant.contentBlocks.length>0)?(n(),K(qt,{key:1,role:Ce.assistant.role,"message-id":Ce.assistant.id,content:Ce.assistant.content,timestamp:Ce.assistant.timestamp,"is-streaming":Ce.assistant.isStreaming,"content-blocks":Ce.assistant.contentBlocks,"show-capture-button":!Ce.assistant.isStreaming,onFork:La},null,8,["role","message-id","content","timestamp","is-streaming","content-blocks","show-capture-button"])):E("",!0)]))],64))),128)),a(M)&&!a(p)[a(p).length-1]?.content&&!(a(p)[a(p).length-1]?.contentBlocks?.length??0)?(n(),K(zu,{key:1,"current-tool-status":a(L),"tools-used":a(z),"agent-status":a(I)},null,8,["current-tool-status","tools-used","agent-status"])):E("",!0)],2)],2),u(lt,{name:"fade-up"},{default:F(()=>[a(Y)?(n(),i("button",{key:0,class:"absolute bottom-20 left-1/2 z-10 flex -translate-x-1/2 items-center gap-1.5 rounded-full bg-gray-800/90 px-3 py-1.5 text-xs text-white shadow-lg backdrop-blur-sm transition-all hover:bg-gray-700 dark:bg-gray-700/90 dark:hover:bg-gray-600",onClick:we[3]||(we[3]=(...Ce)=>a(J)&&a(J)(...Ce))},[u(ut,{name:"i-heroicons-arrow-down",class:"h-3.5 w-3.5"}),e("span",null,s(a(t)("ai.chat.scrollToBottom")),1)])):E("",!0)]),_:1}),a(p).length===0&&!a(M)?(n(),i("div",np,[e("div",op,[u(Fg,{questions:Se.value,"leading-action-label":a(t)("ai.chat.input.useSkill"),onSelect:_a,onLeadingAction:Ca,onEditQuestions:wa},null,8,["questions","leading-action-label"])])])):E("",!0),e("div",rp,[e("div",lp,[u(xu,{ref_key:"chatInputRef",ref:V,"session-id":l.sessionId,disabled:a(M),status:a(M)?"streaming":"ready","chat-type":Re.value,onSend:Ia,onStop:ja,onManageSkills:a(ne),onSkillActivated:Sa},null,8,["session-id","disabled","status","chat-type","onManageSkills"]),u(Zu,{"session-token-usage":a($),"agent-status":a(I),"current-ai-chat-id":a(C),"current-messages":a(p),"fallback-title":l.sessionName,"estimated-context-tokens":Ae.value},null,8,["session-token-usage","agent-status","current-ai-chat-id","current-messages","fallback-title","estimated-context-tokens"])])])])]),u(lt,{name:"slide-fade"},{default:F(()=>[a(h).length>0&&!je.value?(n(),i("div",ip,[u(Pl,{messages:a(h),keywords:a(y),"is-loading":a(T),"is-collapsed":je.value,class:"h-full",onToggle:Aa,onLoadMore:za},null,8,["messages","keywords","is-loading","is-collapsed"])])):E("",!0)]),_:1})]),u(Q0,{open:a(me),"assistant-id":a(pe),readonly:a(X),"scroll-to-section":R.value,"onUpdate:open":$a,onSaved:a(ke),onCreated:a(xe)},null,8,["open","assistant-id","readonly","scroll-to-section","onSaved","onCreated"]),u(Vm,{open:B.value,"backup-name":te.value,upgrading:Z.value,skipping:Q.value,onSkip:Ta,onConfirm:Ma},null,8,["open","backup-name","upgrading","skipping"]),u(Dm,{open:a(N),"onUpdate:open":we[4]||(we[4]=Ce=>N.value=Ce),onConfigure:a(H),onViewConfig:a(le),onCreate:a(fe)},null,8,["open","onConfigure","onViewConfig","onCreate"]),u(_g,{open:a(ae),"onUpdate:open":we[5]||(we[5]=Ce=>ae.value=Ce),onConfigure:a(re),onCreate:a(ve)},null,8,["open","onConfigure","onCreate"]),u(Lg,{open:a(ue),"skill-id":a(he),"onUpdate:open":we[6]||(we[6]=Ce=>ue.value=Ce),onSaved:a(Me),onCreated:a($e)},null,8,["open","skill-id","onSaved","onCreated"])])}}}),wk=tt(cp,[["__scopeId","data-v-3b042ff8"]]),dp=ge({__name:"EChartCalendar",props:{data:{},height:{default:180},year:{}},setup(l){Mt([ha,va,Zt,ya,It]);const o=l,{t,locale:c}=ye(),r=$t(),m=f(null);let g=null;const d=x(()=>{if(o.year)return o.year;if(o.data.length===0)return new Date().getFullYear();const z=o.data.map($=>parseInt($.date.split("-")[0]));return Math.max(...z)}),p=x(()=>o.data.length===0?10:Math.max(...o.data.map(z=>z.value),1)),h=x(()=>o.data.map(z=>[z.date,z.value])),y={light:["#fee5e8","#fbb5c2","#f7758c","#ee4567"],dark:["#3d1f24","#6b2f3a","#a34557","#ee4567"]},T=x(()=>({tooltip:{trigger:"item",formatter:z=>{const $=z.data[0],I=z.data[1];return`${$}<br/>${t("views.message.calendarTooltipMessages")}: ${I}`}},visualMap:{min:0,max:p.value,calculable:!1,orient:"horizontal",left:"center",bottom:0,itemWidth:10,itemHeight:100,text:[`${p.value}`,"0"],inRange:{color:r.value?y.dark:y.light},textStyle:{color:r.value?"#9ca3af":"#6b7280",fontSize:10},show:!0},calendar:{top:30,left:40,cellSize:[13,13],range:String(d.value),itemStyle:{borderWidth:2,borderColor:r.value?"#1f2937":"#ffffff"},yearLabel:{show:!0,position:"top",color:r.value?"#9ca3af":"#6b7280",fontSize:12},monthLabel:{show:!0,color:r.value?"#9ca3af":"#6b7280",fontSize:10,nameMap:[t("common.month.jan"),t("common.month.feb"),t("common.month.mar"),t("common.month.apr"),t("common.month.may"),t("common.month.jun"),t("common.month.jul"),t("common.month.aug"),t("common.month.sep"),t("common.month.oct"),t("common.month.nov"),t("common.month.dec")]},dayLabel:{show:!0,firstDay:1,color:r.value?"#6b7280":"#9ca3af",fontSize:10,nameMap:[t("common.weekday.sun"),t("common.weekday.mon"),t("common.weekday.tue"),t("common.weekday.wed"),t("common.weekday.thu"),t("common.weekday.fri"),t("common.weekday.sat")]},splitLine:{show:!1}},series:[{type:"heatmap",coordinateSystem:"calendar",data:h.value}]}));function M(){m.value&&(g=Dt(m.value,r.value?"dark":void 0,{renderer:"canvas"}),g.setOption({backgroundColor:"transparent",...T.value}))}function C(){g&&g.setOption({backgroundColor:"transparent",...T.value},{notMerge:!0})}function L(){g?.resize()}return de([()=>o.data,r,c],()=>{C()}),de(()=>o.year,()=>{C()}),Ve(()=>{M(),window.addEventListener("resize",L)}),dt(()=>{window.removeEventListener("resize",L),g?.dispose()}),(z,$)=>(n(),i("div",{ref_key:"chartRef",ref:m,style:Ke({height:`${l.height}px`,width:"100%"})},null,4))}});function $k(l){const o=x(()=>ns(l)),t=x(()=>{const r=o.value;return r.length<2?!1:new Set(r.map(g=>Ie(g.date).year())).size>1}),c=x(()=>{const r=o.value,m=50;if(r.length<=m){const h=t.value?"YYYY/MM/DD":"MM/DD";return{labels:r.map(y=>Ie(y.date).format(h)),values:r.map(y=>y.messageCount)}}const g=Math.ceil(r.length/m),d=[],p=[];for(let h=0;h<r.length;h+=g){const y=r.slice(h,h+g);if(y.length===0)continue;const T=Math.floor(y.length/2),M=y[T].date,C=t.value?"YYYY/MM/DD":"MM/DD";d.push(Ie(M).format(C));const L=y.reduce(($,I)=>$+I.messageCount,0),z=Math.round(L/y.length);p.push(z)}return{labels:d,values:p}});return{isMultiYear:t,dailyChartData:c}}const up=86400;function _t(l){return typeof l=="number"&&Number.isFinite(l)}function mp(l){return _t(l?.startTs)&&_t(l?.endTs)}function xa(l,o){const t=o?.startTs??l?.start,c=o?.endTs??l?.end;return!_t(t)||!_t(c)||c<t?null:{start:t,end:c}}function gp(l){return!l||l.end<l.start?0:Math.max(Math.ceil((l.end-l.start)/up),1)}function pp(l){return l?[Ie.unix(l.start).format("YYYY-MM-DD"),Ie.unix(l.end).format("YYYY-MM-DD")]:null}function hp(l,o){const{t}=ye(),c=x(()=>xa(l.timeRange,l.timeFilter)),r=x(()=>mp(l.timeFilter)),m=x(()=>gp(c.value)),g=x(()=>r.value?l.filteredMessageCount:l.session.messageCount),d=x(()=>r.value?l.filteredMemberCount??l.session.memberCount:l.session.memberCount),p=x(()=>m.value),h=x(()=>p.value===0?0:Math.round(g.value/p.value)),y=x(()=>m.value===0?0:Math.round(g.value/m.value)),T=x(()=>l.messageTypes.find(j=>j.type===1)?.count||0),M=x(()=>l.hourlyActivity.length?l.hourlyActivity.reduce((A,j)=>j.messageCount>A.messageCount?j:A,l.hourlyActivity[0]):null),C=x(()=>o.value.length?o.value.reduce((A,j)=>j.messageCount>A.messageCount?j:A,o.value[0]):null),L=x(()=>[t("common.weekday.mon"),t("common.weekday.tue"),t("common.weekday.wed"),t("common.weekday.thu"),t("common.weekday.fri"),t("common.weekday.sat"),t("common.weekday.sun")]),z=x(()=>{if(!o.value.length)return{weekday:0,weekend:0};const A=o.value.filter(k=>k.weekday>=1&&k.weekday<=5).reduce((k,b)=>k+b.messageCount,0),j=o.value.filter(k=>k.weekday>=6&&k.weekday<=7).reduce((k,b)=>k+b.messageCount,0),U=A+j;return{weekday:U>0?Math.round(A/U*100):0,weekend:U>0?Math.round(j/U*100):0}}),$=x(()=>l.dailyActivity.length?l.dailyActivity.reduce((A,j)=>j.messageCount>A.messageCount?j:A,l.dailyActivity[0]):null),I=x(()=>l.dailyActivity.filter(A=>A.messageCount>0).length),w=x(()=>m.value),S=x(()=>w.value>0?Math.round(I.value/w.value*100):0),v=x(()=>{if(!l.hourlyActivity.length)return{count:0,ratio:0};const A=l.hourlyActivity.reduce((U,k)=>U+k.messageCount,0),j=l.hourlyActivity.filter(U=>U.hour>=0&&U.hour<=4).reduce((U,k)=>U+k.messageCount,0);return{count:j,ratio:A>0?Math.round(j/A*100):0}}),_=x(()=>{if(!l.dailyActivity.length)return 0;const A=[...l.dailyActivity].filter(k=>k.messageCount>0).sort((k,b)=>Ie(k.date).valueOf()-Ie(b.date).valueOf());if(A.length===0)return 0;let j=1,U=1;for(let k=1;k<A.length;k++){const b=Ie(A[k-1].date);Ie(A[k].date).diff(b,"day")===1?U++:(U>j&&(j=U),U=1)}return U>j&&(j=U),j});return{durationDays:m,displayMessageCount:g,displayMemberCount:d,dailyAvgMessages:y,totalDurationDays:p,totalDailyAvgMessages:h,imageCount:T,peakHour:M,peakWeekday:C,weekdayNames:L,weekdayVsWeekend:z,peakDay:$,activeDays:I,totalDays:w,activeRate:S,lateNightChat:v,maxConsecutiveDays:_}}const vp={key:0,class:"relative z-10 px-6 pb-6 pt-2 sm:px-8"},yp={class:"grid grid-cols-2 gap-3 lg:grid-cols-4"},fp={class:"min-w-0"},xp={class:"mt-0.5 truncate text-[10px] font-medium text-gray-500 dark:text-gray-400"},bp={class:"mt-0.5 truncate text-[9px] text-gray-400 dark:text-gray-500"},kp={key:1,class:"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4"},_p={class:"text-sm text-gray-500"},wp={class:"text-sm text-gray-500"},$p={class:"ml-1 font-semibold text-pink-500"},Cp={class:"text-sm text-gray-500"},Sp={class:"text-sm text-gray-500"},Tp={class:"text-sm text-gray-500"},Mp={class:"text-sm text-gray-500"},Ip={class:"text-sm text-gray-500"},Dp={class:"text-sm text-gray-500"},Lp=ge({__name:"OverviewStatCards",props:{dailyAvgMessages:{},durationDays:{},imageCount:{},peakHour:{},peakWeekday:{},weekdayNames:{},weekdayVsWeekend:{},peakDay:{},activeDays:{},totalDays:{},activeRate:{},lateNightCount:{},lateNightRatio:{},maxConsecutiveDays:{},flat:{type:Boolean,default:!1}},setup(l){const{t:o}=ye(),t=l,c=x(()=>[{icon:"i-heroicons-chat-bubble-left-right",label:o("analysis.overview.statCards.dailyAvgMessages"),value:o("analysis.overview.statCards.messagesCount",{count:t.dailyAvgMessages}),subtext:o("analysis.overview.statCards.daysCount",{count:t.durationDays}),colorClass:"text-blue-600 dark:text-blue-400"},{icon:"i-heroicons-photo",label:o("analysis.overview.statCards.imageMessages"),value:o("analysis.overview.statCards.imagesCount",{count:t.imageCount}),subtext:`${o("analysis.overview.statCards.peakHour")} ${t.peakHour?.hour||0}:00`,colorClass:"text-pink-600 dark:text-pink-400"},{icon:"i-heroicons-calendar-days",label:o("analysis.overview.statCards.mostActiveWeekday"),value:t.peakWeekday?t.weekdayNames[t.peakWeekday.weekday-1]:"-",subtext:o("analysis.overview.statCards.messagesOnDay",{count:t.peakWeekday?.messageCount??0}),colorClass:"text-amber-600 dark:text-amber-400"},{icon:"i-heroicons-sun",label:o("analysis.overview.statCards.weekendActivity"),value:`${t.weekdayVsWeekend.weekend}%`,subtext:o("analysis.overview.statCards.weekendRatio"),colorClass:"text-green-600 dark:text-green-400"},{icon:"i-heroicons-fire",label:o("analysis.overview.statCards.mostActiveDate"),value:t.peakDay?Ie(t.peakDay.date).format("MM/DD"):"-",subtext:o("analysis.overview.statCards.messagesOnDay",{count:t.peakDay?.messageCount??0}),colorClass:"text-red-600 dark:text-red-400"},{icon:"i-heroicons-moon",label:o("analysis.overview.statCards.lateNightChat"),value:o("analysis.overview.statCards.messagesCount",{count:t.lateNightCount}),subtext:o("analysis.overview.statCards.lateNightRatio",{ratio:t.lateNightRatio}),colorClass:"text-indigo-600 dark:text-indigo-400"},{icon:"i-heroicons-bolt",label:o("analysis.overview.statCards.consecutiveStreak"),value:o("analysis.overview.statCards.daysStreak",{count:t.maxConsecutiveDays}),subtext:o("analysis.overview.statCards.longestStreak"),colorClass:"text-amber-600 dark:text-amber-400"},{icon:"i-heroicons-chart-bar",label:o("analysis.overview.statCards.activityRate"),value:`${t.activeRate}%`,subtext:o("analysis.overview.statCards.activeDaysRatio"),colorClass:"text-gray-900 dark:text-white"}]);return(r,m)=>{const g=_e;return l.flat?(n(),i("div",vp,[m[0]||(m[0]=e("div",{class:"mb-3 flex items-center justify-between"},[e("span",{class:"text-[10px] font-bold uppercase tracking-widest text-gray-400 dark:text-gray-500"},"Key Metrics")],-1)),e("div",yp,[(n(!0),i(oe,null,ce(c.value,d=>(n(),i("div",{key:d.icon+d.label,class:"flex min-w-0 items-start gap-2 px-2.5 py-2"},[u(g,{name:d.icon,class:se(["mt-0.5 h-3.5 w-3.5 shrink-0",d.colorClass])},null,8,["name","class"]),e("div",fp,[e("div",{class:se(["truncate font-mono text-sm font-black leading-tight tabular-nums",d.colorClass])},s(d.value),3),e("div",xp,s(d.label),1),e("div",bp,s(d.subtext),1)])]))),128))])])):(n(),i("div",kp,[u(a(Xe),{label:a(o)("analysis.overview.statCards.dailyAvgMessages"),value:a(o)("analysis.overview.statCards.messagesCount",{count:l.dailyAvgMessages}),icon:"i-heroicons-chat-bubble-left-right","icon-bg":"blue"},{subtext:F(()=>[e("span",_p,s(a(o)("analysis.overview.statCards.daysCount",{count:l.durationDays})),1)]),_:1},8,["label","value"]),u(a(Xe),{label:a(o)("analysis.overview.statCards.imageMessages"),value:a(o)("analysis.overview.statCards.imagesCount",{count:l.imageCount}),icon:"i-heroicons-photo","icon-bg":"pink"},{subtext:F(()=>[e("span",wp,s(a(o)("analysis.overview.statCards.peakHour")),1),e("span",$p,s(l.peakHour?.hour||0)+":00",1)]),_:1},8,["label","value"]),u(a(Xe),{label:a(o)("analysis.overview.statCards.mostActiveWeekday"),value:l.peakWeekday?l.weekdayNames[l.peakWeekday.weekday-1]:"-",icon:"i-heroicons-calendar-days","icon-bg":"amber"},{subtext:F(()=>[e("span",Cp,s(a(o)("analysis.overview.statCards.messagesOnDay",{count:l.peakWeekday?.messageCount??0})),1)]),_:1},8,["label","value"]),u(a(Xe),{label:a(o)("analysis.overview.statCards.weekendActivity"),value:`${l.weekdayVsWeekend.weekend}%`,icon:"i-heroicons-sun","icon-bg":"green"},{subtext:F(()=>[e("span",Sp,s(a(o)("analysis.overview.statCards.weekendRatio")),1)]),_:1},8,["label","value"]),u(a(Xe),{label:a(o)("analysis.overview.statCards.mostActiveDate"),value:l.peakDay?a(Ie)(l.peakDay.date).format("MM/DD"):"-",icon:"i-heroicons-fire","icon-bg":"red"},{subtext:F(()=>[e("span",Tp,s(a(o)("analysis.overview.statCards.messagesOnDay",{count:l.peakDay?.messageCount??0})),1)]),_:1},8,["label","value"]),u(a(Xe),{label:a(o)("analysis.overview.statCards.lateNightChat"),value:a(o)("analysis.overview.statCards.messagesCount",{count:l.lateNightCount}),icon:"i-heroicons-moon","icon-bg":"blue"},{subtext:F(()=>[e("span",Mp,s(a(o)("analysis.overview.statCards.lateNightRatio",{ratio:l.lateNightRatio})),1)]),_:1},8,["label","value"]),u(a(Xe),{label:a(o)("analysis.overview.statCards.consecutiveStreak"),value:a(o)("analysis.overview.statCards.daysStreak",{count:l.maxConsecutiveDays}),icon:"i-heroicons-bolt","icon-bg":"amber"},{subtext:F(()=>[e("span",Ip,s(a(o)("analysis.overview.statCards.longestStreak")),1)]),_:1},8,["label","value"]),u(a(Xe),{label:a(o)("analysis.overview.statCards.activityRate"),value:`${l.activeRate}%`,icon:"i-heroicons-chart-bar","icon-bg":"gray"},{subtext:F(()=>[e("span",Dp,s(a(o)("analysis.overview.statCards.activeDaysRatio")),1)]),_:1},8,["label","value"])]))}}}),Ap={class:"relative z-10 px-6 pt-8 pb-4 sm:px-8"},zp={class:"text-3xl font-bold tracking-tight text-gray-900 dark:text-gray-100"},qp={class:"mt-4 flex items-start gap-6 sm:gap-24"},Rp={class:"min-w-0 flex flex-col gap-2 text-sm font-medium text-gray-500 dark:text-gray-400"},Ep={class:"flex items-center gap-2"},jp={class:"flex h-6 w-6 shrink-0 items-center justify-center"},Pp={class:"whitespace-nowrap"},Up={key:0,class:"flex items-center gap-2"},Bp={class:"flex h-6 w-6 shrink-0 items-center justify-center"},Fp={class:"font-mono text-xs opacity-90 whitespace-nowrap"},Vp={class:"flex shrink-0 gap-6"},Np={class:"flex flex-col gap-1 text-center"},Hp={class:"text-2xl font-black font-mono tracking-tight text-gray-900 dark:text-white"},Op={class:"text-xs font-medium text-gray-500 dark:text-gray-400"},Wp={class:"flex flex-col gap-1 text-center"},Yp={class:"text-2xl font-black font-mono tracking-tight text-gray-900 dark:text-white"},Qp={class:"text-xs font-medium text-gray-500 dark:text-gray-400"},Kp={class:"flex flex-col gap-1 text-center"},Gp={class:"text-2xl font-black font-mono tracking-tight text-gray-900 dark:text-white"},Jp={class:"text-xs font-medium text-gray-500 dark:text-gray-400"},Xp={class:"flex flex-col gap-1 text-center"},Zp={class:"text-2xl font-black font-mono tracking-tight text-gray-900 dark:text-white"},eh={class:"text-xs font-medium text-gray-500 dark:text-gray-400"},th={class:"relative z-10 px-6 pb-2 sm:px-8"},ah={class:"overflow-x-auto overflow-y-hidden scrollbar-hide py-1"},Ck=ge({__name:"OverviewIdentityCard",props:{session:{},dailyActivity:{},messageTypes:{},hourlyActivity:{},timeRange:{},filteredMessageCount:{},filteredMemberCount:{},timeFilter:{}},setup(l){Mt([ha,ps,va,Zt,ya,It]);const{t:o,locale:t}=ye(),c=$t(),r=l,m=f([]);async function g(){if(r.session.id)try{m.value=await Oe().getWeekdayActivity(r.session.id,r.timeFilter)}catch(N){console.error("加载星期活跃度失败:",N)}}de(()=>[r.session.id,r.timeFilter],()=>g(),{immediate:!0,deep:!0});const{durationDays:d,displayMessageCount:p,dailyAvgMessages:h,imageCount:y,peakHour:T,peakWeekday:M,weekdayNames:C,weekdayVsWeekend:L,peakDay:z,activeDays:$,totalDays:I,activeRate:w,lateNightChat:S,maxConsecutiveDays:v}=hp(r,m),_=f(null);let A=null;const j=x(()=>xa(r.timeRange,r.timeFilter)),U=x(()=>j.value?gs(j.value.start,j.value.end,"YYYY/MM/DD"):""),k=x(()=>{const N=pp(j.value);if(N)return N;const he=(G=>G.toISOString().slice(0,10))(new Date);return[he,he]}),b=x(()=>{const[N,ae]=k.value,ue=new Date(N+"T00:00:00Z"),he=new Date(ae+"T00:00:00Z"),G=new Map;r.dailyActivity.filter(le=>le.date>=N&&le.date<=ae).forEach(le=>G.set(le.date,le.messageCount));const O=[],H=new Date(ue);for(;H<=he;){const le=H.toISOString().slice(0,10),fe=G.get(le)||0;O.push({value:[le,fe],itemStyle:fe===0?{color:W.value}:void 0}),H.setUTCDate(H.getUTCDate()+1)}return O}),q=x(()=>r.dailyActivity.length===0?10:Math.max(...r.dailyActivity.map(N=>N.messageCount),1)),Y={light:["#fce4ec","#f8a4b8","#f06292","#e91e63"],dark:["rgba(238, 69, 103, 0.15)","rgba(238, 69, 103, 0.45)","rgba(238, 69, 103, 0.75)","rgba(238, 69, 103, 1)"]},W=x(()=>c.value?"rgba(255, 255, 255, 0.04)":"#ebedf0"),J=x(()=>({tooltip:{trigger:"item",formatter:N=>{const ae=N.value[0],ue=N.value[1];return`${ae}<br/>${o("views.message.calendarTooltipMessages")}: ${ue}`}},visualMap:{min:1,max:q.value,calculable:!1,orient:"horizontal",left:"center",bottom:0,itemWidth:10,itemHeight:80,text:[`${q.value}`,"1"],inRange:{color:c.value?Y.dark:Y.light},textStyle:{color:c.value?"#8b949e":"#6b7280",fontSize:10},show:!0},calendar:{top:20,left:30,cellSize:[13,13],range:k.value,itemStyle:{borderWidth:0,color:"transparent"},yearLabel:{show:!1},monthLabel:{show:!0,color:c.value?"#8b949e":"#6b7280",fontSize:10,nameMap:[o("common.month.jan"),o("common.month.feb"),o("common.month.mar"),o("common.month.apr"),o("common.month.may"),o("common.month.jun"),o("common.month.jul"),o("common.month.aug"),o("common.month.sep"),o("common.month.oct"),o("common.month.nov"),o("common.month.dec")]},dayLabel:{show:!0,firstDay:1,color:c.value?"#8b949e":"#9ca3af",fontSize:10,nameMap:[o("common.weekday.sun"),o("common.weekday.mon"),o("common.weekday.tue"),o("common.weekday.wed"),o("common.weekday.thu"),o("common.weekday.fri"),o("common.weekday.sat")]},splitLine:{show:!1}},series:[{type:"custom",coordinateSystem:"calendar",data:b.value,renderItem:(N,ae)=>{const ue=ae.coord(ae.value(0)),he=N.coordSys.cellWidth,G=N.coordSys.cellHeight,O=Math.min(he,G)-3;return{type:"rect",shape:{x:ue[0]-O/2,y:ue[1]-O/2,width:O,height:O,r:3},style:{fill:ae.visual("color")}}},itemStyle:{borderColor:c.value?"transparent":"rgba(0,0,0,0.02)",borderWidth:1}}]}));function me(){_.value&&(A=Dt(_.value,void 0,{renderer:"canvas"}),A.setOption({backgroundColor:"transparent",...J.value}))}function pe(){A&&A.setOption({backgroundColor:"transparent",...J.value},{notMerge:!0})}function X(){A?.resize()}return de([()=>r.dailyActivity,t,k],()=>pe()),de(c,()=>{A?.dispose(),me()}),Ve(()=>{me(),window.addEventListener("resize",X)}),dt(()=>{window.removeEventListener("resize",X),A?.dispose()}),(N,ae)=>{const ue=_e;return n(),K(a(Lt),null,{default:F(()=>[e("div",Ap,[e("h2",zp,s(l.session.name),1),e("div",qp,[e("div",Rp,[e("div",Ep,[e("div",jp,[l.session.type==="group"?(n(),K(ue,{key:0,name:"i-heroicons-user-group",class:"h-4 w-4 opacity-70"})):(n(),K(ue,{key:1,name:"i-heroicons-user",class:"h-4 w-4 opacity-70"}))]),e("span",Pp,s(l.session.platform.toUpperCase())+" · "+s(l.session.type==="private"?a(o)("analysis.overview.identity.privateChat"):a(o)("analysis.overview.identity.groupChat")),1)]),U.value?(n(),i("div",Up,[e("div",Bp,[u(ue,{name:"i-heroicons-calendar",class:"h-4 w-4 opacity-70"})]),e("span",Fp,s(U.value),1)])):E("",!0)]),e("div",Vp,[e("div",Np,[e("span",Hp,s(a(p).toLocaleString()),1),e("span",Op,s(a(o)("analysis.overview.identity.totalMessages")),1)]),e("div",Wp,[e("span",Yp,s(a(d).toLocaleString()),1),e("span",Qp,s(a(o)("analysis.overview.identity.durationDays")),1)]),e("div",Kp,[e("span",Gp,s(a($).toLocaleString()),1),e("span",Jp,s(a(o)("analysis.overview.identity.activeDays")),1)]),e("div",Xp,[e("span",Zp,s(a(h).toLocaleString()),1),e("span",eh,s(a(o)("analysis.overview.identity.dailyAvgMessages")),1)])])])]),e("div",th,[ae[0]||(ae[0]=e("div",{class:"mb-2 flex items-center justify-between"},[e("span",{class:"text-[10px] font-bold uppercase tracking-widest text-gray-400 dark:text-gray-500"}," Activity Heatmap ")],-1)),e("div",ah,[e("div",{ref_key:"chartRef",ref:_,class:"h-[140px] min-w-[700px] lg:w-full"},null,512)])]),u(Lp,{flat:"","daily-avg-messages":a(h),"duration-days":a(d),"image-count":a(y),"peak-hour":a(T),"peak-weekday":a(M),"weekday-names":a(C),"weekday-vs-weekend":a(L),"peak-day":a(z),"active-days":a($),"total-days":a(I),"active-rate":a(w),"late-night-count":a(S).count,"late-night-ratio":a(S).ratio,"max-consecutive-days":a(v)},null,8,["daily-avg-messages","duration-days","image-count","peak-hour","peak-weekday","weekday-names","weekday-vs-weekend","peak-day","active-days","total-days","active-rate","late-night-count","late-night-ratio","max-consecutive-days"])]),_:1})}}}),sh={class:"p-5"},Sk=ge({__name:"DailyTrendCard",props:{dailyActivity:{},dailyChartData:{}},setup(l){const{t:o}=ye();return(t,c)=>l.dailyActivity.length>0?(n(),K(a(Ye),{key:0,title:a(o)("analysis.overview.dailyTrend.title"),"show-divider":!1},{default:F(()=>[e("div",sh,[u(a(Ht),{data:l.dailyChartData,height:288},null,8,["data"])])]),_:1},8,["title"])):E("",!0)}}),Et="__ALL__",nh=ge({__name:"UserSelect",props:{sessionId:{},modelValue:{}},emits:["update:modelValue"],setup(l,{emit:o}){const{t}=ye(),c=l,r=o,m=f([]),g=f(!1),d=x({get:()=>c.modelValue===null?Et:String(c.modelValue),set:y=>{r("update:modelValue",y===Et?null:parseInt(y))}}),p=x(()=>{const y=[{value:Et,label:t("common.userSelect.allMembers")}];return m.value.forEach(T=>{const M=T.groupNickname||T.accountName||T.platformId;y.push({value:String(T.id),label:`${M} (${T.messageCount})`})}),y});async function h(){if(c.sessionId){g.value=!0;try{const y=await Oe().getMembers(c.sessionId);m.value=y.sort((T,M)=>M.messageCount-T.messageCount)}catch(y){console.error("加载成员列表失败:",y)}finally{g.value=!1}}}return de(()=>c.sessionId,()=>{r("update:modelValue",null),h()},{immediate:!0}),(y,T)=>{const M=Jt;return n(),K(M,{modelValue:d.value,"onUpdate:modelValue":T[0]||(T[0]=C=>d.value=C),items:p.value,loading:g.value,virtualize:{estimateSize:32,overscan:10},"value-key":"value",class:"w-48"},null,8,["modelValue","items","loading"])}}}),oh={class:"relative z-10 px-6 pt-8 pb-4 sm:px-8"},rh={class:"flex items-center gap-6 sm:gap-10"},lh={class:"min-w-0 flex-1"},ih={class:"flex flex-col text-[15px] leading-relaxed text-gray-600 dark:text-gray-300"},ch={key:0,class:"mb-2 text-sm font-medium tracking-wide text-gray-500 dark:text-gray-400"},dh={class:"mb-4 flex min-w-0 flex-wrap items-baseline gap-2"},uh={class:"text-xl font-medium text-gray-700 dark:text-gray-300"},mh={class:"font-black text-5xl tracking-tight text-gray-900 dark:text-white"},gh={class:"text-xl font-medium text-gray-700 dark:text-gray-300"},ph={key:1,class:"flex min-w-0 max-w-full flex-wrap items-center gap-x-1.5 gap-y-1.5"},hh={class:"text-base font-medium text-gray-600 dark:text-gray-300"},vh={class:"font-bold tabular-nums text-pink-500 dark:text-pink-400"},yh={class:"flex shrink-0 flex-col items-center"},fh={class:"mb-1 text-[10px] font-bold text-gray-500 dark:text-gray-400"},xh={class:"relative z-10 px-6 pb-6 pt-4 sm:px-8"},bh={class:"grid grid-cols-2 gap-3 lg:grid-cols-4"},kh={class:"min-w-0 flex-1"},_h={class:"flex items-center justify-between gap-1"},wh={class:"mt-0.5 truncate text-[10px] font-medium text-gray-500 dark:text-gray-400"},$h={class:"mt-0.5 truncate text-[9px] text-gray-400 dark:text-gray-500"},Ch={class:"relative z-10 flex items-center justify-between px-6 pb-4 opacity-40 mix-blend-luminosity dark:opacity-30 sm:px-8 sm:pb-5"},Sh={class:"flex items-center gap-1.5"},Th={class:"text-[9px] font-medium uppercase tracking-widest"},Mh=ge({__name:"TypeProfileCard",props:{sessionId:{},messageTypes:{},textStats:{},timeFilter:{}},setup(l){Mt([hs,Zt,It]);const{t:o}=ye(),t=$t(),c=l,r=x(()=>c.messageTypes.reduce((b,q)=>b+q.count,0)),m=x(()=>c.messageTypes.find(b=>b.type===st.TEXT)?.count??0),g=x(()=>{if(r.value===0)return 0;const b=r.value-m.value;return Math.round(b/r.value*100)}),d=x(()=>c.textStats.textCount===0?0:Math.round(c.textStats.shortCount/c.textStats.textCount*100)),p=f({first:"",last:""});async function h(){if(c.sessionId)try{const b=await Oe().getDailyActivity(c.sessionId,c.timeFilter);if(b.length>0){const q=[...b].sort((Y,W)=>Y.date.localeCompare(W.date));p.value={first:Ie(q[0].date).format("YYYY/MM/DD"),last:Ie(q[q.length-1].date).format("YYYY/MM/DD")}}}catch{}}function y(b){return c.messageTypes.find(q=>q.type===b)?.count??0}const T=x(()=>[{label:o("views.message.typeCard.nonTextImage"),count:y(st.IMAGE),unit:o("views.message.typeCard.unitImage")},{label:o("views.message.typeCard.nonTextEmoji"),count:y(st.EMOJI),unit:o("views.message.typeCard.unitEmoji")},{label:o("views.message.typeCard.nonTextVoice"),count:y(st.VOICE),unit:o("views.message.typeCard.unitVoice")},{label:o("views.message.typeCard.nonTextVideo"),count:y(st.VIDEO),unit:o("views.message.typeCard.unitVideo")},{label:o("views.message.typeCard.nonTextFile"),count:y(st.FILE),unit:o("views.message.typeCard.unitFile")},{label:o("views.message.typeCard.nonTextLink"),count:y(st.LINK),unit:o("views.message.typeCard.unitLink")}].filter(b=>b.count>0)),M=f(30),C=f(0),L=f(!1),z=[{label:"20",value:20},{label:"30",value:30},{label:"50",value:50},{label:"80",value:80},{label:"100",value:100}],$=x({get:()=>M.value,set:b=>{M.value!==b&&(M.value=b,I())}});async function I(){if(c.sessionId){L.value=!0;try{C.value=await Oe().getLongMessageCount(c.sessionId,c.timeFilter,M.value)}catch(b){console.error("[chart-message] Failed to load essay count:",b)}finally{L.value=!1}}}de(()=>[c.sessionId,c.timeFilter],()=>{I(),h()},{immediate:!0,deep:!0});const w=x(()=>[{icon:"i-heroicons-pencil-square",label:o("views.message.profile.textExpression"),value:o("views.message.profile.avgLengthUnit",{count:c.textStats.avgLength||0}),subtext:c.textStats.maxLength>0?o("views.message.profile.textExpressionDesc",{count:c.textStats.maxLength}):"",colorClass:"text-violet-600 dark:text-violet-400"},{icon:"i-heroicons-chat-bubble-bottom-center-text",label:o("views.message.profile.shortMaster"),value:`${d.value}%`,subtext:o("views.message.profile.shortMasterDesc",{count:c.textStats.shortCount}),colorClass:"text-emerald-600 dark:text-emerald-400"},{icon:"i-heroicons-document-text",label:o("views.message.profile.essayLover"),value:C.value.toLocaleString(),subtext:o("views.message.profile.essayLoverDesc",{threshold:M.value}),colorClass:"text-indigo-600 dark:text-indigo-400",slot:"essay-threshold"},{icon:"i-heroicons-photo",label:o("views.message.profile.mediaRichness"),value:`${g.value}%`,subtext:T.value.slice(0,3).map(b=>`${b.label} ${b.count}`).join(" · ")||"-",colorClass:"text-pink-600 dark:text-pink-400"}]),S=f(null);let v=null;const _=["#6366f1","#ec4899","#f97316","#22c55e","#06b6d4","#8b5cf6","#f43f5e","#eab308","#14b8a6","#3b82f6"],A=x(()=>[...c.messageTypes].sort((q,Y)=>Y.count-q.count).slice(0,8).map((q,Y)=>({name:Ut(q.type,o),value:q.count,itemStyle:{color:_[Y%_.length]}})));function j(){S.value&&(v=Dt(S.value,void 0,{renderer:"canvas"}),U())}function U(){v&&v.setOption({backgroundColor:"transparent",tooltip:{trigger:"item",formatter:"{b}: {c} ({d}%)"},series:[{type:"pie",radius:["50%","78%"],center:["50%","50%"],avoidLabelOverlap:!1,padAngle:2,itemStyle:{borderRadius:4},label:{show:!1},emphasis:{label:{show:!1},scaleSize:4},data:A.value}]},{notMerge:!0})}function k(){v?.resize()}return de(()=>c.messageTypes,()=>U()),de(t,()=>{v?.dispose(),j()}),Ve(()=>{j(),window.addEventListener("resize",k)}),dt(()=>{window.removeEventListener("resize",k),v?.dispose()}),(b,q)=>{const Y=_e,W=Gt;return n(),K(a(Lt),null,{default:F(()=>[e("div",oh,[e("div",rh,[e("div",lh,[e("div",ih,[p.value.first?(n(),i("p",ch,s(p.value.first)+" – "+s(p.value.last),1)):E("",!0),e("div",dh,[e("span",uh,s(a(o)("views.message.profile.heroLine1Prefix")),1),e("span",mh,s(r.value.toLocaleString()),1),e("span",gh,s(a(o)("views.message.profile.heroLine1Suffix")),1)]),T.value.length>0?(n(),i("div",ph,[e("span",hh,s(a(o)("views.message.typeCard.nonTextPrefix")),1),(n(!0),i(oe,null,ce(T.value,J=>(n(),i("span",{key:J.label,class:"inline-flex items-center gap-1 rounded-full bg-gray-100 px-2.5 py-0.5 text-xs font-semibold text-gray-700 dark:bg-white/10 dark:text-gray-200"},[e("span",vh,s(J.count.toLocaleString()),1),e("span",null,s(J.unit),1)]))),128))])):E("",!0)])]),e("div",yh,[e("div",fh,s(a(o)("views.message.profile.typeDistribution")),1),e("div",{ref_key:"donutRef",ref:S,style:{width:"130px",height:"130px"}},null,512)])])]),e("div",xh,[q[1]||(q[1]=e("div",{class:"mb-3 flex items-center justify-between"},[e("span",{class:"text-[10px] font-bold uppercase tracking-widest text-gray-400 dark:text-gray-500"}," Type Profile ")],-1)),e("div",bh,[(n(!0),i(oe,null,ce(w.value,J=>(n(),i("div",{key:J.icon+J.label,class:"flex min-w-0 items-start gap-2 px-2.5 py-2"},[u(Y,{name:J.icon,class:se(["mt-0.5 h-3.5 w-3.5 shrink-0",J.colorClass])},null,8,["name","class"]),e("div",kh,[e("div",_h,[e("div",{class:se(["truncate font-mono text-sm font-black leading-tight tabular-nums",J.colorClass])},s(J.value),3),J.slot==="essay-threshold"?(n(),K(W,{key:0,modelValue:$.value,"onUpdate:modelValue":q[0]||(q[0]=me=>$.value=me),items:z,"value-key":"value",size:"xs",class:"relative z-120 w-16 shrink-0",ui:{content:"z-[121]"},disabled:L.value},null,8,["modelValue","disabled"])):E("",!0)]),e("div",wh,s(J.label),1),e("div",$h,s(J.subtext),1)])]))),128))])]),e("div",Ch,[e("div",Sh,[u(Y,{name:"i-heroicons-chat-bubble-left-right-solid",class:"h-3.5 w-3.5"}),q[2]||(q[2]=e("span",{class:"text-[10px] font-bold uppercase tracking-wider"},"ChatLab",-1))]),e("span",Th,s(a(o)("views.message.typeCard.watermark")),1)])]),_:1})}}}),Ih={key:1,class:"main-content mx-auto max-w-[920px] space-y-6 p-6"},Dh={class:"p-5"},Lh={key:0,class:"grid grid-cols-1 gap-6 lg:grid-cols-2 lg:items-center"},Ah={class:"space-y-3"},zh={class:"min-w-20 shrink-0 text-sm text-gray-700 dark:text-gray-300"},qh={class:"flex-1"},Rh={class:"h-2 overflow-hidden rounded-full bg-gray-100 dark:bg-gray-800"},Eh={class:"shrink-0 text-right"},jh={class:"text-sm font-medium text-gray-900 dark:text-white"},Ph={class:"ml-1 text-xs text-gray-400"},Uh={key:1,class:"flex h-48 items-center justify-center text-gray-400"},Bh={class:"p-5"},Fh={class:"mb-5 grid grid-cols-2 gap-3 sm:grid-cols-4"},Vh={class:"p-3"},Nh={class:"font-mono text-xl font-bold text-gray-900 dark:text-white"},Hh={class:"mt-1 text-xs text-gray-500"},Oh={class:"p-3"},Wh={class:"font-mono text-xl font-bold text-indigo-600 dark:text-indigo-400"},Yh={class:"mt-1 text-xs text-gray-500"},Qh={class:"p-3"},Kh={class:"font-mono text-xl font-bold text-pink-600 dark:text-pink-400"},Gh={class:"mt-1 text-xs text-gray-500"},Jh={class:"p-3"},Xh={class:"font-mono text-xl font-bold text-emerald-600 dark:text-emerald-400"},Zh={class:"mt-1 text-xs text-gray-500"},ev={class:"mb-5 rounded-lg border border-gray-200 p-4 dark:border-gray-700"},tv={class:"mb-2 text-xs font-medium text-gray-500 dark:text-gray-400"},av={class:"flex items-center gap-4 text-sm"},sv={class:"flex items-center gap-1.5"},nv={class:"font-mono font-medium text-gray-900 dark:text-white"},ov={class:"flex items-center gap-1.5"},rv={class:"font-mono font-medium text-gray-900 dark:text-white"},lv={class:"flex items-center gap-1.5"},iv={class:"font-mono font-medium text-gray-900 dark:text-white"},cv={class:"flex items-center gap-1.5"},dv={class:"font-mono font-medium text-gray-900 dark:text-white"},uv={class:"mt-3 grid grid-cols-3 gap-3 text-xs"},mv={class:"text-gray-500"},gv={class:"ml-1 font-medium text-emerald-600 dark:text-emerald-400"},pv={class:"text-gray-400"},hv={class:"text-gray-500"},vv={class:"ml-1 font-medium text-indigo-600 dark:text-indigo-400"},yv={class:"grid grid-cols-1 gap-6 lg:grid-cols-2"},fv={class:"text-xs text-gray-400"},xv={class:"p-5"},bv={key:1,class:"flex h-48 items-center justify-center text-gray-400"},kv={class:"text-xs text-gray-400"},_v={class:"p-5"},wv={key:1,class:"flex h-48 items-center justify-center text-gray-400"},Tk=ge({__name:"TypeAnalysisView",props:{sessionId:{},sessionName:{},timeFilter:{}},setup(l){const o=l,{t}=ye(),c=f(!0),r=f([]),m=f([]),g=f([]),d=f({textCount:0,avgLength:0,maxLength:0,shortCount:0}),p=f({p25:0,p50:0,p75:0,p90:0}),h=f(0),y=x(()=>{const w=[...r.value].sort((S,v)=>v.count-S.count);return{labels:w.map(S=>Ut(S.type,t)),values:w.map(S=>S.count)}}),T=x(()=>{const w=r.value.reduce((v,_)=>v+_.count,0);return[...r.value].sort((v,_)=>_.count-v.count).map(v=>({name:Ut(v.type,t),count:v.count,percentage:w>0?Math.round(v.count/w*100):0}))}),M=["#6366f1","#8b5cf6","#ec4899","#f43f5e","#f97316","#eab308","#22c55e","#14b8a6","#06b6d4","#3b82f6"];function C(w){return M[w%M.length]}const L=x(()=>({labels:m.value.map(w=>String(w.len)),values:m.value.map(w=>w.count)})),z=x(()=>({labels:g.value.map(w=>w.range),values:g.value.map(w=>w.count)})),$=x(()=>d.value.textCount===0?0:Math.round(d.value.shortCount/d.value.textCount*100));async function I(){if(o.sessionId){c.value=!0;try{const w=Oe(),[S,v,_,A,j]=await Promise.all([w.getMessageTypeDistribution(o.sessionId,o.timeFilter),w.getMessageLengthDistribution(o.sessionId,o.timeFilter),w.getTextStats(o.sessionId,o.timeFilter),w.getTextLengthPercentiles(o.sessionId,o.timeFilter),w.getLongMessageCount(o.sessionId,o.timeFilter,30)]);r.value=S,m.value=v.detail,g.value=v.grouped,d.value=_,p.value=A,h.value=j}catch(w){console.error("[chart-message] Failed to load type analysis data:",w)}finally{c.value=!1}}}return de(()=>[o.sessionId,o.timeFilter],()=>I(),{immediate:!0,deep:!0}),(w,S)=>(n(),i("div",{class:se(c.value?"h-full":"")},[c.value?(n(),K(a(kt),{key:0,variant:"page",text:a(t)("common.loading")},null,8,["text"])):(n(),i("div",Ih,[r.value.length>0?(n(),K(Mh,{key:0,"session-id":l.sessionId,"message-types":r.value,"text-stats":d.value,"time-filter":l.timeFilter},null,8,["session-id","message-types","text-stats","time-filter"])):E("",!0),u(a(Ye),{title:a(t)("views.message.typeDistribution"),"show-divider":!1},{default:F(()=>[e("div",Dh,[y.value.values.length>0?(n(),i("div",Lh,[e("div",null,[u(a(Ot),{data:y.value,height:280,"show-legend":!1},null,8,["data"])]),e("div",null,[e("div",Ah,[(n(!0),i(oe,null,ce(T.value,(v,_)=>(n(),i("div",{key:_,class:"flex items-center gap-3"},[e("div",{class:"h-3 w-3 shrink-0 rounded-full",style:Ke({backgroundColor:C(_)})},null,4),e("div",zh,s(v.name),1),e("div",qh,[e("div",Rh,[e("div",{class:"h-full rounded-full transition-all",style:Ke({width:`${v.percentage}%`,backgroundColor:C(_)})},null,4)])]),e("div",Eh,[e("span",jh,s(v.count.toLocaleString()),1),e("span",Ph,"("+s(v.percentage)+"%)",1)])]))),128))])])])):(n(),i("div",Uh,s(a(t)("views.message.noData")),1))])]),_:1},8,["title"]),u(a(Ye),{title:a(t)("views.message.typeAnalysis.textDepthTitle"),"show-divider":!1},{default:F(()=>[e("div",Bh,[e("div",Fh,[e("div",Vh,[e("div",Nh,s(d.value.textCount.toLocaleString()),1),e("div",Hh,s(a(t)("views.message.typeAnalysis.textTotal")),1)]),e("div",Oh,[e("div",Wh,s(d.value.avgLength||0),1),e("div",Yh,s(a(t)("views.message.typeAnalysis.avgLength")),1)]),e("div",Qh,[e("div",Kh,s(p.value.p50),1),e("div",Gh,s(a(t)("views.message.typeAnalysis.medianLength")),1)]),e("div",Jh,[e("div",Xh,s(d.value.maxLength),1),e("div",Zh,s(a(t)("views.message.typeAnalysis.maxLength")),1)])]),e("div",ev,[e("div",tv,s(a(t)("views.message.typeAnalysis.percentiles")),1),e("div",av,[e("div",sv,[S[0]||(S[0]=e("span",{class:"text-gray-500"},"P25",-1)),e("span",nv,s(p.value.p25),1)]),e("div",ov,[S[1]||(S[1]=e("span",{class:"text-gray-500"},"P50",-1)),e("span",rv,s(p.value.p50),1)]),e("div",lv,[S[2]||(S[2]=e("span",{class:"text-gray-500"},"P75",-1)),e("span",iv,s(p.value.p75),1)]),e("div",cv,[S[3]||(S[3]=e("span",{class:"text-gray-500"},"P90",-1)),e("span",dv,s(p.value.p90),1)])]),e("div",uv,[e("div",null,[e("span",mv,s(a(t)("views.message.typeAnalysis.shortMessages")),1),e("span",gv,s($.value)+"%",1),e("span",pv,"("+s(d.value.shortCount)+")",1)]),e("div",null,[e("span",hv,s(a(t)("views.message.typeAnalysis.essayMessages")),1),e("span",vv,s(h.value),1)])])])])]),_:1},8,["title"]),e("div",yv,[u(a(Ye),{title:a(t)("views.message.lengthDetailTitle"),"show-divider":!1},{headerRight:F(()=>[e("span",fv,s(a(t)("views.message.lengthDetailHint")),1)]),default:F(()=>[e("div",xv,[L.value.values.some(v=>v>0)?(n(),K(a(Ze),{key:0,data:L.value,height:200},null,8,["data"])):(n(),i("div",bv,s(a(t)("views.message.noTextMessages")),1))])]),_:1},8,["title"]),u(a(Ye),{title:a(t)("views.message.lengthGroupedTitle"),"show-divider":!1},{headerRight:F(()=>[e("span",kv,s(a(t)("views.message.lengthGroupedHint")),1)]),default:F(()=>[e("div",_v,[z.value.values.some(v=>v>0)?(n(),K(a(Ze),{key:0,data:z.value,height:200},null,8,["data"])):(n(),i("div",wv,s(a(t)("views.message.noTextMessages")),1))])]),_:1},8,["title"])])]))],2))}}),$v={class:"relative z-10 px-6 pt-8 pb-4 sm:px-8"},Cv={class:"flex items-start gap-6 sm:gap-10"},Sv={class:"min-w-0 flex-1"},Tv={class:"flex flex-col text-[15px] leading-relaxed text-gray-600 dark:text-gray-300"},Mv={key:0,class:"mb-2 text-sm font-medium tracking-wide text-gray-500 dark:text-gray-400"},Iv={class:"mb-3 flex items-baseline gap-2"},Dv={class:"font-black text-5xl tracking-tight text-gray-900 dark:text-white"},Lv={class:"text-xl font-medium text-gray-700 dark:text-gray-300"},Av={class:"font-bold text-3xl text-indigo-500 dark:text-indigo-400"},zv={class:"text-xl font-medium text-gray-700 dark:text-gray-300"},qv={class:"flex items-baseline flex-wrap gap-x-1.5 gap-y-1"},Rv={class:"text-base font-medium text-gray-600 dark:text-gray-300"},Ev={class:"font-bold text-xl text-pink-500 dark:text-pink-400"},jv={class:"text-base font-medium text-gray-600 dark:text-gray-300"},Pv={class:"text-base font-medium text-amber-600 dark:text-amber-400"},Uv={class:"flex shrink-0 flex-col items-center"},Bv={class:"mb-1 text-[10px] font-bold text-gray-500 dark:text-gray-400"},Fv={class:"relative z-10 px-6 pb-6 pt-4 sm:px-8"},Vv={class:"grid grid-cols-2 gap-3 lg:grid-cols-4"},Nv={class:"min-w-0 flex-1"},Hv={class:"mt-0.5 truncate text-[10px] font-medium text-gray-500 dark:text-gray-400"},Ov={class:"mt-0.5 truncate text-[9px] text-gray-400 dark:text-gray-500"},Wv={class:"relative z-10 flex items-center justify-between px-6 pb-4 opacity-40 mix-blend-luminosity dark:opacity-30 sm:px-8 sm:pb-5"},Yv={class:"flex items-center gap-1.5"},Qv={class:"text-[9px] font-medium uppercase tracking-widest"},Kv=ge({__name:"TimeProfileCard",props:{hourlyActivity:{},weekdayActivity:{},dailyActivity:{}},setup(l){Mt([vs,ys,It]);const{t:o}=ye(),t=$t(),c=l,r=x(()=>c.dailyActivity.filter(v=>v.messageCount>0).length),m=x(()=>c.dailyActivity.reduce((v,_)=>v+_.messageCount,0)),g=x(()=>{if(c.dailyActivity.length===0)return{first:"",last:"",days:0};const v=[...c.dailyActivity].sort((j,U)=>j.date.localeCompare(U.date)),_=Ie(v[0].date),A=Ie(v[v.length-1].date);return{first:_.format("YYYY/MM/DD"),last:A.format("YYYY/MM/DD"),days:A.diff(_,"day")+1}}),d=x(()=>r.value===0?0:Math.round(m.value/r.value)),p=x(()=>c.dailyActivity.length===0?null:c.dailyActivity.reduce((v,_)=>_.messageCount>v.messageCount?_:v,c.dailyActivity[0])),h=x(()=>c.hourlyActivity.length===0?[]:[...c.hourlyActivity].sort((v,_)=>_.messageCount-v.messageCount).slice(0,3)),y=x(()=>{if(c.hourlyActivity.length===0&&c.weekdayActivity.length===0)return null;const v=g.value.days>0?r.value/g.value.days:0,_=c.weekdayActivity.filter(X=>X.weekday===6||X.weekday===7),A=c.weekdayActivity.filter(X=>X.weekday>=1&&X.weekday<=5),j=_.reduce((X,N)=>X+N.messageCount,0),U=A.reduce((X,N)=>X+N.messageCount,0),k=j+U,b=k>0?j/k:0,q=c.hourlyActivity.reduce((X,N)=>X+N.messageCount,0),Y=c.hourlyActivity.filter(X=>X.hour>=22||X.hour<5).reduce((X,N)=>X+N.messageCount,0),W=c.hourlyActivity.filter(X=>X.hour>=18&&X.hour<22).reduce((X,N)=>X+N.messageCount,0),J=q>0?Y/q:0,me=q>0?W/q:0;if(v>=.9)return{label:o("views.message.timeCard.personalityEveryday"),icon:"i-heroicons-fire"};if(b>=.55)return{label:o("views.message.timeCard.personalityWeekend"),icon:"i-heroicons-calendar"};if(b<=.2&&k>0)return{label:o("views.message.timeCard.personalityWeekday"),icon:"i-heroicons-briefcase"};if(J>=.3)return{label:o("views.message.timeCard.personalityNightOwl"),icon:"i-heroicons-moon"};if(me>=.4)return{label:o("views.message.timeCard.personalityEveningChat"),icon:"i-heroicons-sparkles"};const pe=[...c.hourlyActivity].sort((X,N)=>N.messageCount-X.messageCount)[0];return pe?pe.hour>=5&&pe.hour<9?{label:o("views.message.timeCard.personalityEarlyBird"),icon:"i-heroicons-sun"}:pe.hour>=12&&pe.hour<14?{label:o("views.message.timeCard.personalityLunchChat"),icon:"i-heroicons-clock"}:{label:o("views.message.timeCard.personalityDaytime"),icon:"i-heroicons-sun"}:null}),T=x(()=>{const v=c.weekdayActivity.filter(k=>k.weekday===6||k.weekday===7),_=c.weekdayActivity.filter(k=>k.weekday>=1&&k.weekday<=5),A=v.reduce((k,b)=>k+b.messageCount,0),j=_.reduce((k,b)=>k+b.messageCount,0),U=A+j;return U===0?0:Math.round(A/U*100)}),M=x(()=>[o("common.weekday.mon"),o("common.weekday.tue"),o("common.weekday.wed"),o("common.weekday.thu"),o("common.weekday.fri"),o("common.weekday.sat"),o("common.weekday.sun")]),C=x(()=>{if(c.weekdayActivity.length===0)return null;const v=[...c.weekdayActivity].sort((_,A)=>A.messageCount-_.messageCount)[0];return{name:M.value[v.weekday-1],count:v.messageCount}}),L=x(()=>[{icon:"i-heroicons-fire",label:o("views.message.timeCard.peakRecord"),value:p.value?Ie(p.value.date).format("MM/DD"):"-",subtext:p.value?o("views.message.timeCard.peakRecordDesc",{count:p.value.messageCount}):"",colorClass:"text-red-600 dark:text-red-400"},{icon:"i-heroicons-clock",label:o("views.message.timeCard.topHoursLabel"),value:h.value.length>0?`${h.value[0].hour}:00`:"-",subtext:h.value.length>=2?h.value.map(v=>`${v.hour}:00`).join(" > "):"",colorClass:"text-cyan-600 dark:text-cyan-400"},{icon:"i-heroicons-calendar-days",label:o("views.message.timeCard.peakWeekdayLabel"),value:C.value?.name||"-",subtext:C.value?`${C.value.count.toLocaleString()}`:"",colorClass:"text-violet-600 dark:text-violet-400"},{icon:"i-heroicons-building-office",label:o("views.message.timeCard.weekendRatio"),value:`${T.value}%`,subtext:o("views.message.timeCard.weekendRatioDesc"),colorClass:"text-amber-600 dark:text-amber-400"}]),z=f(null);let $=null;function I(){z.value&&($=Dt(z.value,void 0,{renderer:"canvas"}),w())}function w(){if(!$)return;const v=new Map(c.hourlyActivity.map(U=>[U.hour,U.messageCount])),_=[];for(let U=0;U<24;U++)_.push(v.get(U)||0);const A=Math.max(..._,1),j=_.map(U=>{const k=U/A;return k>.8?t.value?"#f472b6":"#ec4899":k>.5?t.value?"#a78bfa":"#8b5cf6":t.value?"rgba(255,255,255,0.15)":"rgba(0,0,0,0.08)"});$.setOption({backgroundColor:"transparent",tooltip:{trigger:"axis",formatter:U=>`${U[0].axisValue}:00 — ${U[0].value}`},grid:{left:0,right:0,top:4,bottom:16},xAxis:{type:"category",data:Array.from({length:24},(U,k)=>`${k}`),axisLine:{show:!1},axisTick:{show:!1},axisLabel:{fontSize:9,color:t.value?"#6b7280":"#9ca3af",interval:U=>U%6===0}},yAxis:{type:"value",show:!1},series:[{type:"bar",data:_.map((U,k)=>({value:U,itemStyle:{color:j[k]}})),barWidth:"60%",itemStyle:{borderRadius:[2,2,0,0]}}]},{notMerge:!0})}function S(){$?.resize()}return de(()=>c.hourlyActivity,()=>w()),de(t,()=>{$?.dispose(),I()}),Ve(()=>{I(),window.addEventListener("resize",S)}),dt(()=>{window.removeEventListener("resize",S),$?.dispose()}),(v,_)=>{const A=_e;return n(),K(a(Lt),null,{default:F(()=>[e("div",$v,[e("div",Cv,[e("div",Sv,[e("div",Tv,[g.value.first?(n(),i("p",Mv,s(g.value.first)+" – "+s(g.value.last),1)):E("",!0),e("div",Iv,[e("span",Dv,s(g.value.days),1),e("span",Lv,s(a(o)("views.message.timeCard.heroDaysIn")),1),e("span",Av,s(r.value),1),e("span",zv,s(a(o)("views.message.timeCard.heroDaysActive")),1)]),e("div",qv,[e("span",Rv,s(a(o)("views.message.timeCard.heroAvgPrefix")),1),e("span",Ev,s(d.value),1),e("span",jv,s(a(o)("views.message.timeCard.heroAvgSuffix")),1),y.value?(n(),i(oe,{key:0},[u(A,{name:y.value.icon,class:"ml-2 h-4 w-4 text-amber-500"},null,8,["name"]),e("span",Pv,s(y.value.label),1)],64)):E("",!0)])])]),e("div",Uv,[e("div",Bv,s(a(o)("views.message.timeCard.hourlyDistribution")),1),e("div",{ref_key:"barRef",ref:z,style:{width:"180px",height:"110px"}},null,512)])])]),e("div",Fv,[_[0]||(_[0]=e("div",{class:"mb-3 flex items-center justify-between"},[e("span",{class:"text-[10px] font-bold uppercase tracking-widest text-gray-400 dark:text-gray-500"}," Time Profile ")],-1)),e("div",Vv,[(n(!0),i(oe,null,ce(L.value,j=>(n(),i("div",{key:j.icon+j.label,class:"flex min-w-0 items-start gap-2 px-2.5 py-2"},[u(A,{name:j.icon,class:se(["mt-0.5 h-3.5 w-3.5 shrink-0",j.colorClass])},null,8,["name","class"]),e("div",Nv,[e("div",{class:se(["truncate font-mono text-sm font-black leading-tight tabular-nums",j.colorClass])},s(j.value),3),e("div",Hv,s(j.label),1),e("div",Ov,s(j.subtext),1)])]))),128))])]),e("div",Wv,[e("div",Yv,[u(A,{name:"i-heroicons-chat-bubble-left-right-solid",class:"h-3.5 w-3.5"}),_[1]||(_[1]=e("span",{class:"text-[10px] font-bold uppercase tracking-wider"},"ChatLab",-1))]),e("span",Qv,s(a(o)("views.message.timeCard.watermark")),1)])]),_:1})}}}),Gv={key:1,class:"main-content mx-auto max-w-[920px] space-y-6 p-6"},Jv={class:"grid grid-cols-1 gap-6 lg:grid-cols-2"},Xv={class:"p-5"},Zv={class:"p-5"},ey={class:"grid grid-cols-1 gap-6 lg:grid-cols-2"},ty={class:"p-5"},ay={class:"p-5"},sy={key:1,class:"flex h-48 items-center justify-center text-gray-400"},ny={class:"text-xs text-gray-400"},oy={class:"p-5"},ry={key:1,class:"flex h-48 items-center justify-center text-gray-400"},ly={class:"text-xs text-gray-400"},iy={class:"p-5"},cy={class:"flex items-center gap-2"},dy={class:"text-xs text-gray-400"},uy={class:"p-5"},my={key:1,class:"flex h-32 items-center justify-center text-gray-400"},Mk=ge({__name:"TimeAnalysisView",props:{sessionId:{},sessionName:{},timeFilter:{}},setup(l){const o=l,{t}=ye(),c=f(!0),r=f([]),m=f([]),g=f([]),d=f([]),p=f([]),h=f([]),y=f([]),T=["#6366f1","#ec4899","#f97316","#22c55e","#06b6d4","#8b5cf6","#f43f5e","#eab308","#14b8a6","#3b82f6"],M=x(()=>[t("common.weekday.mon"),t("common.weekday.tue"),t("common.weekday.wed"),t("common.weekday.thu"),t("common.weekday.fri"),t("common.weekday.sat"),t("common.weekday.sun")]),C=x(()=>[t("common.month.jan"),t("common.month.feb"),t("common.month.mar"),t("common.month.apr"),t("common.month.may"),t("common.month.jun"),t("common.month.jul"),t("common.month.aug"),t("common.month.sep"),t("common.month.oct"),t("common.month.nov"),t("common.month.dec")]),L=x(()=>{const k=new Map(m.value.map(Y=>[Y.hour,Y.messageCount])),b=[],q=[];for(let Y=0;Y<24;Y++)b.push(`${Y}`),q.push(k.get(Y)||0);return{labels:b,values:q}}),z=x(()=>{const k=new Map(g.value.map(q=>[q.weekday,q.messageCount])),b=[];for(let q=1;q<=7;q++)b.push(k.get(q)||0);return{labels:M.value,values:b}}),$=x(()=>{const k=new Map(d.value.map(q=>[q.month,q.messageCount])),b=[];for(let q=1;q<=12;q++)b.push(k.get(q)||0);return{labels:C.value,values:b}}),I=x(()=>{const k=[...p.value].sort((b,q)=>b.year-q.year);return{labels:k.map(b=>String(b.year)),values:k.map(b=>b.messageCount)}}),w=x(()=>{const k=Array.from({length:24},(W,J)=>`${J}:00`),b=M.value,q=r.value.reduce((W,J)=>W+J.count,0)||1,Y=[];for(let W=1;W<=7;W++)for(let J=0;J<24;J++){const me=g.value.find(N=>N.weekday===W)?.messageCount||0,pe=m.value.find(N=>N.hour===J)?.messageCount||0,X=Math.round(me*pe/q);Y.push([J,W-1,X])}return{xLabels:k,yLabels:b,data:Y}}),S=x(()=>h.value.map(k=>({date:k.date,value:k.messageCount}))),v=x(()=>{const k=new Set;return h.value.forEach(b=>{const q=parseInt(b.date.split("-")[0]);isNaN(q)||k.add(q)}),Array.from(k).sort((b,q)=>q-b)}),_=f(new Date().getFullYear()),A=x(()=>{const k=_.value;return S.value.filter(b=>b.date.startsWith(`${k}-`))}),j=x(()=>{if(y.value.length===0)return{};const k=[...new Set(y.value.map(J=>J.month))].sort(),b=new Map;if(y.value.forEach(J=>{const me=b.get(J.memberId);me?me.total+=J.count:b.set(J.memberId,{name:J.memberName,total:J.count})}),b.size<=2){const J=new Map;return y.value.forEach(me=>{J.set(me.month,(J.get(me.month)||0)+me.count)}),{tooltip:{trigger:"axis",backgroundColor:"rgba(0, 0, 0, 0.8)",borderColor:"transparent",textStyle:{color:"#fff"}},grid:{left:50,right:20,top:10,bottom:30},xAxis:{type:"category",data:k,boundaryGap:!1,axisLine:{show:!1},axisTick:{show:!1}},yAxis:{type:"value",splitLine:{lineStyle:{type:"dashed",opacity:.3}}},series:[{type:"line",smooth:!0,symbol:"none",areaStyle:{opacity:.2},itemStyle:{color:"#6366f1"},data:k.map(me=>J.get(me)||0)}]}}const W=[...b.entries()].sort((J,me)=>me[1].total-J[1].total).slice(0,10).map(([J,me],pe)=>{const X=new Map(y.value.filter(N=>N.memberId===J).map(N=>[N.month,N.count]));return{name:me.name,type:"line",stack:"total",areaStyle:{opacity:.3},smooth:!0,symbol:"none",itemStyle:{color:T[pe%T.length]},data:k.map(N=>X.get(N)||0)}});return{tooltip:{trigger:"axis",backgroundColor:"rgba(0, 0, 0, 0.8)",borderColor:"transparent",textStyle:{color:"#fff"}},legend:{bottom:0,textStyle:{fontSize:11}},grid:{left:50,right:20,top:10,bottom:40},xAxis:{type:"category",data:k,boundaryGap:!1,axisLine:{show:!1},axisTick:{show:!1}},yAxis:{type:"value",splitLine:{lineStyle:{type:"dashed",opacity:.3}}},series:W}});async function U(){if(o.sessionId){c.value=!0;try{const k=Oe(),[b,q,Y,W,J,me,pe]=await Promise.all([k.getMessageTypeDistribution(o.sessionId,o.timeFilter),k.getHourlyActivity(o.sessionId,o.timeFilter),k.getWeekdayActivity(o.sessionId,o.timeFilter),k.getMonthlyActivity(o.sessionId,o.timeFilter),k.getYearlyActivity(o.sessionId,o.timeFilter),k.getDailyActivity(o.sessionId,o.timeFilter),k.getMemberMonthlyTrend(o.sessionId,o.timeFilter)]);r.value=b,m.value=q,g.value=Y,d.value=W,p.value=J,h.value=me,y.value=pe,v.value.length>0&&(_.value=v.value[0])}catch(k){console.error("[chart-message] Failed to load time analysis data:",k)}finally{c.value=!1}}}return de(()=>[o.sessionId,o.timeFilter],()=>U(),{immediate:!0,deep:!0}),(k,b)=>{const q=Gt;return n(),i("div",{class:se(c.value?"h-full":"")},[c.value?(n(),K(a(kt),{key:0,variant:"page",text:a(t)("common.loading")},null,8,["text"])):(n(),i("div",Gv,[h.value.length>0?(n(),K(Kv,{key:0,"hourly-activity":m.value,"weekday-activity":g.value,"daily-activity":h.value},null,8,["hourly-activity","weekday-activity","daily-activity"])):E("",!0),e("div",Jv,[u(a(Ye),{title:a(t)("views.message.hourlyDistribution"),"show-divider":!1},{default:F(()=>[e("div",Xv,[u(a(Ze),{data:L.value,height:200},null,8,["data"])])]),_:1},8,["title"]),u(a(Ye),{title:a(t)("views.message.weekdayDistribution"),"show-divider":!1},{default:F(()=>[e("div",Zv,[u(a(Ze),{data:z.value,height:200},null,8,["data"])])]),_:1},8,["title"])]),e("div",ey,[u(a(Ye),{title:a(t)("views.message.monthlyDistribution"),"show-divider":!1},{default:F(()=>[e("div",ty,[u(a(Ze),{data:$.value,height:200},null,8,["data"])])]),_:1},8,["title"]),u(a(Ye),{title:a(t)("views.message.yearlyDistribution"),"show-divider":!1},{default:F(()=>[e("div",ay,[I.value.values.length>0?(n(),K(a(Ze),{key:0,data:I.value,height:200},null,8,["data"])):(n(),i("div",sy,s(a(t)("views.message.noData")),1))])]),_:1},8,["title"])]),u(a(Ye),{title:a(t)("views.message.timeAnalysis.memberTrendTitle"),"show-divider":!1},{headerRight:F(()=>[e("span",ny,s(a(t)("views.message.timeAnalysis.memberTrendHint")),1)]),default:F(()=>[e("div",oy,[y.value.length>0?(n(),K(a(Tt),{key:0,option:j.value,height:280},null,8,["option"])):(n(),i("div",ry,s(a(t)("views.message.noData")),1))])]),_:1},8,["title"]),u(a(Ye),{title:a(t)("views.message.timeHeatmap"),"show-divider":!1},{headerRight:F(()=>[e("span",ly,s(a(t)("views.message.heatmapHint")),1)]),default:F(()=>[e("div",iy,[u(a(Nt),{data:w.value,height:320},null,8,["data"])])]),_:1},8,["title"]),u(a(Ye),{title:a(t)("views.message.calendarHeatmap"),"show-divider":!1},{headerRight:F(()=>[e("div",cy,[e("span",dy,s(a(t)("views.message.calendarHint")),1),v.value.length>1?(n(),K(q,{key:0,modelValue:_.value,"onUpdate:modelValue":b[0]||(b[0]=Y=>_.value=Y),items:v.value.map(Y=>({value:Y,label:String(Y)})),size:"xs",class:"w-20"},null,8,["modelValue","items"])):E("",!0)])]),default:F(()=>[e("div",uy,[A.value.length>0?(n(),K(a(dp),{key:0,data:A.value,year:_.value,height:180},null,8,["data","year"])):(n(),i("div",my,s(a(t)("views.message.noData")),1))])]),_:1},8,["title"])]))],2)}}}),gy={class:"relative z-10 px-6 pt-8 pb-4 sm:px-8"},py={class:"flex items-center gap-6 sm:gap-10"},hy={class:"min-w-0 flex-1"},vy={class:"flex flex-col gap-2 text-[15px] leading-relaxed text-gray-600 dark:text-gray-300"},yy={key:0,class:"mb-0 text-sm font-medium tracking-wide text-gray-500 dark:text-gray-400"},fy={class:"flex items-baseline gap-x-1.5"},xy={class:"text-xl font-medium text-gray-700 dark:text-gray-300"},by={class:"font-black text-5xl tracking-tight text-gray-900 dark:text-white"},ky={class:"text-xl font-medium text-gray-700 dark:text-gray-300"},_y={class:"flex items-baseline gap-x-1.5"},wy={class:"text-xl font-medium text-gray-700 dark:text-gray-300"},$y={class:"font-black text-3xl text-pink-500 dark:text-pink-400"},Cy={class:"text-xl font-medium text-gray-700 dark:text-gray-300"},Sy={key:1,class:"mt-1 flex items-baseline flex-wrap gap-x-1.5 gap-y-1"},Ty={class:"text-base font-medium text-gray-600 dark:text-gray-300"},My=["onClick"],Iy={key:0,class:"text-gray-400"},Dy={key:0,class:"hidden shrink-0 overflow-hidden rounded-lg sm:block"},Ly={class:"relative",style:{width:"360px",height:"220px"}},Ay={class:"relative z-10 px-6 pb-6 pt-4 sm:px-8"},zy={class:"grid grid-cols-2 gap-3 lg:grid-cols-4"},qy={class:"min-w-0 flex-1"},Ry={class:"mt-0.5 truncate text-[10px] font-medium text-gray-500 dark:text-gray-400"},Ey={class:"mt-0.5 truncate text-[9px] text-gray-400 dark:text-gray-500"},jy={class:"relative z-10 flex items-center justify-between px-6 pb-4 opacity-40 mix-blend-luminosity dark:opacity-30 sm:px-8 sm:pb-5"},Py={class:"flex items-center gap-1.5"},Uy={class:"text-[9px] font-medium uppercase tracking-widest"},By=ge({__name:"TopicProfileCard",props:{totalMessages:{},totalWords:{},uniqueWords:{},topWords:{},topicWords:{},posTagStats:{},timeFilter:{}},emits:["wordClick"],setup(l,{emit:o}){const t=ma(()=>wt(()=>import("./EChartWordcloud-C5hLT1vS.js"),__vite__mapDeps([5,6,7,8,1]))),{t:c}=ye(),r=l,m=o,g=x(()=>{const{startTs:L,endTs:z}=r.timeFilter??{};return L&&z?`${Ie(L*1e3).format("YYYY/MM/DD")} – ${Ie(z*1e3).format("YYYY/MM/DD")}`:""}),d=x(()=>(r.topicWords?.length?r.topicWords:r.topWords).slice(0,5)),p=x(()=>({words:(r.topicWords?.length?r.topicWords:r.topWords).slice(0,50).map(z=>({word:z.word,count:z.count,percentage:z.percentage}))})),h=x(()=>r.totalWords===0?0:Math.round(r.uniqueWords/r.totalWords*100)),y=x(()=>{if(!r.posTagStats?.length)return{key:"Balanced",label:c("quotes.topicProfile.styleBalanced"),desc:c("quotes.topicProfile.styleBalancedDesc"),icon:"i-heroicons-scale-solid",colorClass:"text-cyan-600 dark:text-cyan-400"};const L=new Map(r.posTagStats.map(A=>[A.tag,A.count])),z=(L.get("n")||0)+(L.get("ns")||0)+(L.get("nt")||0)+(L.get("nz")||0),$=(L.get("v")||0)+(L.get("vn")||0)+(L.get("vd")||0),I=(L.get("a")||0)+(L.get("ad")||0)+(L.get("an")||0),w=z+$+I;if(w===0)return{key:"Balanced",label:c("quotes.topicProfile.styleBalanced"),desc:c("quotes.topicProfile.styleBalancedDesc"),icon:"i-heroicons-scale-solid",colorClass:"text-cyan-600 dark:text-cyan-400"};const S=z/w,v=$/w,_=I/w;return S>.5?{key:"Encyclopedia",label:c("quotes.topicProfile.styleEncyclopedia"),desc:c("quotes.topicProfile.styleEncyclopediaDesc"),icon:"i-heroicons-book-open-solid",colorClass:"text-indigo-600 dark:text-indigo-400"}:v>.45?{key:"Action",label:c("quotes.topicProfile.styleAction"),desc:c("quotes.topicProfile.styleActionDesc"),icon:"i-heroicons-rocket-launch-solid",colorClass:"text-orange-600 dark:text-orange-400"}:_>.3?{key:"Expressive",label:c("quotes.topicProfile.styleExpressive"),desc:c("quotes.topicProfile.styleExpressiveDesc"),icon:"i-heroicons-paint-brush-solid",colorClass:"text-pink-600 dark:text-pink-400"}:{key:"Balanced",label:c("quotes.topicProfile.styleBalanced"),desc:c("quotes.topicProfile.styleBalancedDesc"),icon:"i-heroicons-scale-solid",colorClass:"text-cyan-600 dark:text-cyan-400"}}),T=x(()=>{if(r.topWords.length===0)return{label:c("quotes.topicProfile.expressionMixed"),desc:c("quotes.topicProfile.expressionMixedDesc"),icon:"i-heroicons-chat-bubble-left-right-solid",colorClass:"text-emerald-600 dark:text-emerald-400"};const L=r.topWords.reduce((I,w)=>I+w.word.length*w.count,0),z=r.topWords.reduce((I,w)=>I+w.count,0),$=L/z;return $<2.5?{label:c("quotes.topicProfile.expressionCasual"),desc:c("quotes.topicProfile.expressionCasualDesc"),icon:"i-heroicons-face-smile-solid",colorClass:"text-amber-600 dark:text-amber-400"}:$>3.5?{label:c("quotes.topicProfile.expressionFormal"),desc:c("quotes.topicProfile.expressionFormalDesc"),icon:"i-heroicons-academic-cap-solid",colorClass:"text-violet-600 dark:text-violet-400"}:{label:c("quotes.topicProfile.expressionMixed"),desc:c("quotes.topicProfile.expressionMixedDesc"),icon:"i-heroicons-chat-bubble-left-right-solid",colorClass:"text-emerald-600 dark:text-emerald-400"}}),M=x(()=>[{icon:"i-heroicons-fire-solid",label:c("quotes.topicProfile.hotTopic"),value:d.value[0]?.word??"-",subtext:d.value[0]?c("quotes.topicProfile.hotTopicDesc",{count:d.value[0].count}):"",colorClass:"text-red-600 dark:text-red-400"},{icon:"i-heroicons-sparkles-solid",label:c("quotes.topicProfile.richness"),value:c("quotes.topicProfile.richnessValue",{value:h.value}),subtext:c("quotes.topicProfile.richnessDesc",{unique:r.uniqueWords.toLocaleString(),total:r.totalWords.toLocaleString()}),colorClass:"text-blue-600 dark:text-blue-400"},{icon:y.value.icon,label:c("quotes.topicProfile.chatStyle"),value:y.value.label,subtext:y.value.desc,colorClass:y.value.colorClass},{icon:T.value.icon,label:c("quotes.topicProfile.expressionStyle"),value:T.value.label,subtext:T.value.desc,colorClass:T.value.colorClass}]),C=["#6366f1","#ec4899","#f97316","#22c55e","#3b82f6","#8b5cf6","#14b8a6","#f43f5e"];return(L,z)=>{const $=_e;return n(),K(a(Lt),null,{default:F(()=>[e("div",gy,[e("div",py,[e("div",hy,[e("div",vy,[g.value?(n(),i("p",yy,s(g.value),1)):E("",!0),e("div",fy,[e("span",xy,s(a(c)("quotes.topicProfile.heroPrefix")),1),e("span",by,s(l.totalMessages.toLocaleString()),1),e("span",ky,s(a(c)("quotes.topicProfile.heroMiddle")),1)]),e("div",_y,[e("span",wy,s(a(c)("quotes.topicProfile.heroMiddleSecond")),1),e("span",$y,s(l.uniqueWords.toLocaleString()),1),e("span",Cy,s(a(c)("quotes.topicProfile.heroSuffix")),1)]),d.value.length>0?(n(),i("div",Sy,[e("span",Ty,s(a(c)("quotes.topicProfile.topTopicsPrefix")),1),(n(!0),i(oe,null,ce(d.value,(I,w)=>(n(),i(oe,{key:I.word},[e("span",{class:"cursor-pointer font-bold text-xl transition-opacity hover:opacity-70",style:Ke({color:C[w%C.length]}),onClick:S=>m("wordClick",I.word)},s(I.word),13,My),w<d.value.length-1?(n(),i("span",Iy,"·")):E("",!0)],64))),128))])):E("",!0)])]),p.value.words.length>0?(n(),i("div",Dy,[e("div",Ly,[u(a(t),{data:p.value,height:"100%","max-words":50,"size-scale":.8,"draw-out-of-bound":!0,shape:"rectangle","color-scheme":"default",onWordClick:z[0]||(z[0]=I=>m("wordClick",I))},null,8,["data"])])])):E("",!0)])]),e("div",Ay,[z[1]||(z[1]=e("div",{class:"mb-3 flex items-center justify-between"},[e("span",{class:"text-[10px] font-bold uppercase tracking-widest text-gray-400 dark:text-gray-500"}," Topic Profile ")],-1)),e("div",zy,[(n(!0),i(oe,null,ce(M.value,I=>(n(),i("div",{key:I.label,class:"flex min-w-0 items-start gap-2 px-2.5 py-2"},[u($,{name:I.icon,class:se(["mt-0.5 h-3.5 w-3.5 shrink-0",I.colorClass])},null,8,["name","class"]),e("div",qy,[e("div",{class:se(["truncate font-mono text-sm font-black leading-tight tabular-nums",I.colorClass])},s(I.value),3),e("div",Ry,s(I.label),1),e("div",Ey,s(I.subtext),1)])]))),128))])]),e("div",jy,[e("div",Py,[u($,{name:"i-heroicons-chat-bubble-left-right-solid",class:"h-3.5 w-3.5"}),z[2]||(z[2]=e("span",{class:"text-[10px] font-bold uppercase tracking-wider"},"ChatLab",-1))]),e("span",Uy,s(a(c)("quotes.topicProfile.watermark")),1)])]),_:1})}}}),Fy={class:"px-5 py-4 sm:px-6"},Vy={class:"mb-4 flex items-center gap-2"},Ny={class:"text-[15px] font-black tracking-tight text-gray-900 dark:text-white"},Hy={class:"flex flex-wrap justify-center gap-2"},Oy=["onClick"],Wy=ge({__name:"SharedTopicsCard",props:{sessionId:{},timeFilter:{},dictType:{},excludeWords:{}},emits:["wordClick"],setup(l,{emit:o}){const{t}=ye(),c=Qt(),r=l,m=o,g=x(()=>c.locale),d=f([]),p=f([]),h=x(()=>d.value.slice(0,20)),y=["bg-indigo-50 text-indigo-600 ring-1 ring-indigo-500/20 dark:bg-indigo-500/10 dark:text-indigo-400 dark:ring-indigo-500/30","bg-pink-50 text-pink-600 ring-1 ring-pink-500/20 dark:bg-pink-500/10 dark:text-pink-400 dark:ring-pink-500/30","bg-orange-50 text-orange-600 ring-1 ring-orange-500/20 dark:bg-orange-500/10 dark:text-orange-400 dark:ring-orange-500/30","bg-green-50 text-green-600 ring-1 ring-green-500/20 dark:bg-green-500/10 dark:text-green-400 dark:ring-green-500/30","bg-blue-50 text-blue-600 ring-1 ring-blue-500/20 dark:bg-blue-500/10 dark:text-blue-400 dark:ring-blue-500/30","bg-violet-50 text-violet-600 ring-1 ring-violet-500/20 dark:bg-violet-500/10 dark:text-violet-400 dark:ring-violet-500/30","bg-teal-50 text-teal-600 ring-1 ring-teal-500/20 dark:bg-teal-500/10 dark:text-teal-400 dark:ring-teal-500/30","bg-rose-50 text-rose-600 ring-1 ring-rose-500/20 dark:bg-rose-500/10 dark:text-rose-400 dark:ring-rose-500/30","bg-yellow-50 text-yellow-600 ring-1 ring-yellow-500/20 dark:bg-yellow-500/10 dark:text-yellow-400 dark:ring-yellow-500/30","bg-cyan-50 text-cyan-600 ring-1 ring-cyan-500/20 dark:bg-cyan-500/10 dark:text-cyan-400 dark:ring-cyan-500/30"];async function T(){if(r.sessionId)try{p.value.length===0&&(p.value=await Oe().getMembers(r.sessionId));const M=[...p.value].sort((w,S)=>S.messageCount-w.messageCount).slice(0,2);if(M.length<2){d.value=[];return}const C={sessionId:r.sessionId,locale:g.value,timeFilter:r.timeFilter?{startTs:r.timeFilter.startTs,endTs:r.timeFilter.endTs}:void 0,topN:100,minCount:2,posFilterMode:"meaningful",enableStopwords:!0,dictType:r.dictType??"default",excludeWords:r.excludeWords?.length?[...r.excludeWords]:void 0},[L,z]=await Promise.all([bt("/nlp/word-frequency",{...C,memberId:M[0].id}),bt("/nlp/word-frequency",{...C,memberId:M[1].id})]),$=new Map(z.words.map(w=>[w.word,w.count])),I=[];for(const w of L.words){const S=$.get(w.word);S&&I.push({word:w.word,countA:w.count,countB:S})}I.sort((w,S)=>S.countA+S.countB-(w.countA+w.countB)),d.value=I.slice(0,30)}catch(M){console.error("加载共同话题数据失败:",M),d.value=[]}}return de(()=>r.sessionId,()=>{p.value=[]}),de(()=>[r.sessionId,r.timeFilter,r.dictType,r.excludeWords],()=>{T()},{immediate:!0,deep:!0}),(M,C)=>{const L=_e;return h.value.length>0?(n(),K(a(at),{key:0},{default:F(()=>[e("div",Fy,[e("div",Vy,[u(L,{name:"i-heroicons-link",class:"h-4 w-4 text-emerald-500"}),e("span",Ny,s(a(t)("quotes.topicProfile.sharedTopics")),1)]),e("div",Hy,[(n(!0),i(oe,null,ce(h.value,(z,$)=>(n(),i("span",{key:z.word,class:se(["cursor-pointer rounded-full px-3 py-1 text-xs font-bold transition-opacity hover:opacity-80",y[$%y.length]]),onClick:I=>m("wordClick",z.word)},s(z.word),11,Oy))),128))])])]),_:1})):E("",!0)}}}),ba=Na("wordFilter",()=>{const l=f([]),o=f(null),t=f({}),c=f(!1);function r(){return`wf_${Date.now()}_${Math.random().toString(36).slice(2,8)}`}function m(I,w=[]){const S={id:r(),name:I,words:[...w],createdAt:Date.now()};return l.value.push(S),S}function g(I,w){const S=l.value.find(v=>v.id===I);S&&(w.name!==void 0&&(S.name=w.name),w.words!==void 0&&(S.words=[...w.words]))}function d(I){l.value=l.value.filter(w=>w.id!==I),o.value===I&&(o.value=null);for(const[w,S]of Object.entries(t.value))S===I&&delete t.value[w]}function p(I){o.value=I}function h(I,w){t.value[I]=w}function y(I){delete t.value[I]}function T(I){return I in t.value?t.value[I]:o.value}function M(I){const w=T(I);return w?l.value.find(v=>v.id===w)?.words??[]:[]}function C(I){return l.value.find(w=>w.id===I)}const L=x(()=>l.value.map(I=>({label:I.name,value:I.id,isDefault:I.id===o.value,wordCount:I.words.length})));function z(){c.value=!0}function $(){c.value=!1}return{schemes:l,defaultSchemeId:o,sessionSchemeOverrides:t,showWordFilterModal:c,schemeOptions:L,createScheme:m,updateScheme:g,deleteScheme:d,setDefaultScheme:p,setSessionScheme:h,clearSessionScheme:y,getActiveSchemeId:T,getExcludeWords:M,getSchemeById:C,openModal:z,closeModal:$}},{persist:!1,backendPersist:{pick:["schemes","defaultSchemeId","sessionSchemeOverrides"],key:"wordFilter"}}),Yy={class:"flex flex-col",style:{height:"520px"}},Qy={class:"flex items-center justify-between border-b border-gray-200 px-6 py-4 dark:border-white/5"},Ky={class:"flex items-center gap-3"},Gy={class:"flex h-9 w-9 items-center justify-center rounded-xl bg-linear-to-br from-pink-400 to-pink-600"},Jy={class:"text-lg font-semibold text-gray-900 dark:text-white"},Xy={class:"flex flex-1 overflow-hidden"},Zy={class:"flex w-[200px] shrink-0 flex-col border-r border-gray-200 dark:border-white/5"},ef={class:"flex items-center justify-between px-3 py-2"},tf={class:"text-xs font-medium text-gray-500 dark:text-gray-400"},af={class:"flex-1 overflow-y-auto px-2 pb-2"},sf=["onClick"],nf={class:"truncate text-sm"},of={class:"ml-auto text-xs text-gray-400 dark:text-gray-500"},rf={key:0,class:"px-3 py-8 text-center text-xs text-gray-400 dark:text-gray-500"},lf={class:"flex flex-1 flex-col overflow-hidden"},cf={class:"flex-1 space-y-4 overflow-y-auto p-5"},df={class:"mb-1.5 block text-xs font-medium text-gray-600 dark:text-gray-400"},uf={class:"flex items-center gap-2"},mf={class:"mb-1.5 block text-xs font-medium text-gray-600 dark:text-gray-400"},gf={class:"flex gap-2"},pf={class:"mb-1.5 flex items-center justify-between"},hf={class:"text-xs font-medium text-gray-600 dark:text-gray-400"},vf={class:"ml-1 text-gray-400 dark:text-gray-500"},yf={key:0,class:"flex max-h-[220px] flex-wrap gap-1.5 overflow-y-auto rounded-lg border border-gray-200 p-3 dark:border-white/5"},ff={key:1,class:"rounded-lg border border-dashed border-gray-300 px-4 py-6 text-center text-xs text-gray-400 dark:border-gray-600 dark:text-gray-500"},xf={class:"flex shrink-0 justify-end border-t border-gray-200 px-5 py-3 dark:border-white/5"},bf={key:1,class:"flex flex-1 flex-col items-center justify-center gap-3 text-gray-400 dark:text-gray-500"},kf={class:"text-sm"},_f=ge({__name:"WordFilterModal",setup(l){const{t:o}=ye(),t=ba(),c=x({get:()=>t.showWordFilterModal,set:w=>w?t.openModal():t.closeModal()}),r=f(null),m=f(""),g=f(""),d=f(null),p=x(()=>r.value?t.getSchemeById(r.value)??null:null),h=x(()=>r.value===t.defaultSchemeId);de(c,w=>{w&&(t.schemes.length>0&&!r.value&&(r.value=t.schemes[0].id),y())}),de(r,()=>{y(),g.value=""});function y(){m.value=p.value?.name??""}function T(){const w=t.createScheme(o("wordFilter.defaultSchemeName"));r.value=w.id,Fe(()=>{d.value?.focus(),d.value?.select()})}function M(){if(!r.value)return;const w=t.schemes.findIndex(S=>S.id===r.value);if(t.deleteScheme(r.value),t.schemes.length>0){const S=Math.min(w,t.schemes.length-1);r.value=t.schemes[S].id}else r.value=null}function C(){!r.value||!m.value.trim()||t.updateScheme(r.value,{name:m.value.trim()})}function L(){r.value&&(h.value?t.setDefaultScheme(null):t.setDefaultScheme(r.value))}function z(){if(!r.value||!g.value.trim())return;const S=g.value.trim().split(/[,,\n\r\t;;|、\s]+/).map(j=>j.trim()).filter(j=>j.length>0);if(S.length===0)return;const v=p.value;if(!v)return;const _=new Set(v.words.map(j=>j.toLowerCase())),A=S.filter(j=>!_.has(j.toLowerCase()));A.length>0&&t.updateScheme(r.value,{words:[...v.words,...A]}),g.value=""}function $(w){if(!r.value)return;const S=p.value;S&&t.updateScheme(r.value,{words:S.words.filter(v=>v!==w)})}function I(){r.value&&t.updateScheme(r.value,{words:[]})}return(w,S)=>{const v=_e,_=Pe,A=St,j=pa,U=We;return n(),K(U,{open:c.value,"onUpdate:open":S[4]||(S[4]=k=>c.value=k),ui:{content:"max-w-3xl z-50"}},{content:F(()=>[e("div",Yy,[e("div",Qy,[e("div",Ky,[e("div",Gy,[u(v,{name:"i-heroicons-funnel",class:"h-4.5 w-4.5 text-white"})]),e("h2",Jy,s(a(o)("wordFilter.title")),1)]),u(_,{icon:"i-heroicons-x-mark",variant:"ghost",color:"neutral",size:"sm",onClick:S[0]||(S[0]=k=>c.value=!1)})]),e("div",Xy,[e("div",Zy,[e("div",ef,[e("span",tf,s(a(o)("wordFilter.schemeList")),1),u(_,{icon:"i-heroicons-plus",size:"xs",variant:"ghost",color:"primary",onClick:T})]),e("div",af,[(n(!0),i(oe,null,ce(a(t).schemes,k=>(n(),i("div",{key:k.id,class:se(["group mb-1 flex cursor-pointer items-center gap-2 rounded-lg px-3 py-2 transition-colors",r.value===k.id?"bg-primary-50 text-primary-700 dark:bg-primary-900/20 dark:text-primary-300":"text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-white/5"]),onClick:b=>r.value=k.id},[k.id===a(t).defaultSchemeId?(n(),K(v,{key:0,name:"i-heroicons-star-solid",class:"h-3.5 w-3.5 shrink-0 text-amber-500"})):E("",!0),e("span",nf,s(k.name),1),e("span",of,s(k.words.length),1)],10,sf))),128)),a(t).schemes.length===0?(n(),i("div",rf,s(a(o)("wordFilter.emptyScheme")),1)):E("",!0)])]),e("div",lf,[p.value?(n(),i(oe,{key:0},[e("div",cf,[e("div",null,[e("label",df,s(a(o)("wordFilter.schemeName")),1),u(A,{ref_key:"nameInputRef",ref:d,modelValue:m.value,"onUpdate:modelValue":S[1]||(S[1]=k=>m.value=k),size:"sm",placeholder:a(o)("wordFilter.schemeNamePlaceholder"),onBlur:C,onKeydown:ot(C,["enter"])},null,8,["modelValue","placeholder"])]),e("div",uf,[u(_,{size:"xs",variant:h.value?"solid":"soft",color:h.value?"warning":"neutral",icon:h.value?"i-heroicons-star-solid":"i-heroicons-star",onClick:L},{default:F(()=>[ee(s(h.value?a(o)("wordFilter.isDefault"):a(o)("wordFilter.setDefault")),1)]),_:1},8,["variant","color","icon"]),u(_,{size:"xs",variant:"soft",color:"error",icon:"i-heroicons-trash",onClick:M},{default:F(()=>[ee(s(a(o)("wordFilter.deleteScheme")),1)]),_:1})]),e("div",null,[e("label",mf,s(a(o)("wordFilter.addWords")),1),e("div",gf,[u(A,{modelValue:g.value,"onUpdate:modelValue":S[2]||(S[2]=k=>g.value=k),size:"sm",class:"flex-1",placeholder:a(o)("wordFilter.addWordsPlaceholder"),onKeydown:ot(z,["enter"])},null,8,["modelValue","placeholder"]),u(_,{size:"sm",color:"primary",icon:"i-heroicons-plus",onClick:z},{default:F(()=>[ee(s(a(o)("wordFilter.add")),1)]),_:1})])]),e("div",null,[e("div",pf,[e("label",hf,[ee(s(a(o)("wordFilter.wordList"))+" ",1),e("span",vf,"("+s(p.value.words.length)+")",1)]),p.value.words.length>0?(n(),K(_,{key:0,size:"xs",variant:"ghost",color:"error",onClick:I},{default:F(()=>[ee(s(a(o)("wordFilter.clearAll")),1)]),_:1})):E("",!0)]),p.value.words.length>0?(n(),i("div",yf,[(n(!0),i(oe,null,ce(p.value.words,k=>(n(),K(j,{key:k,color:"neutral",variant:"subtle",class:"group/badge cursor-default gap-1 pr-1"},{default:F(()=>[ee(s(k)+" ",1),u(v,{name:"i-heroicons-x-mark",class:"h-3.5 w-3.5 cursor-pointer text-gray-400 transition-colors hover:text-red-500",onClick:b=>$(k)},null,8,["onClick"])]),_:2},1024))),128))])):(n(),i("div",ff,s(a(o)("wordFilter.emptyWords")),1))])]),e("div",xf,[u(_,{color:"primary",variant:"soft",onClick:S[3]||(S[3]=k=>c.value=!1)},{default:F(()=>[ee(s(a(o)("wordFilter.close")),1)]),_:1})])],64)):(n(),i("div",bf,[u(v,{name:"i-heroicons-funnel",class:"h-10 w-10"}),e("p",kf,s(a(o)("wordFilter.selectOrCreate")),1),u(_,{size:"sm",color:"primary",variant:"soft",icon:"i-heroicons-plus",onClick:T},{default:F(()=>[ee(s(a(o)("wordFilter.createScheme")),1)]),_:1})]))])])])]),_:1},8,["open"])}}}),wf={class:"main-content mx-auto max-w-[920px] space-y-6 p-6"},$f={key:0,class:"flex flex-col gap-3 rounded-lg border border-primary-200 bg-primary-50/70 p-4 dark:border-primary-800 dark:bg-primary-950/30 sm:flex-row sm:items-center sm:justify-between"},Cf={class:"flex min-w-0 items-start gap-3"},Sf={class:"min-w-0 text-sm text-primary-700 dark:text-primary-300"},Tf={class:"flex shrink-0 flex-wrap gap-2"},Mf={key:1,class:"space-y-6"},If={class:"flex gap-6 p-4 sm:p-6"},Df={class:"flex min-w-0 flex-1 flex-col"},Lf={class:"relative w-full",style:{"aspect-ratio":"16 / 9"}},Af={key:1,class:"absolute inset-0 flex flex-col items-center justify-center gap-2 rounded-lg border border-dashed border-gray-200 bg-gray-50/40 text-gray-500 dark:border-gray-700 dark:bg-gray-800/30 dark:text-gray-400"},zf={class:"text-xs font-medium"},qf={class:"px-4 text-center text-[11px]"},Rf={class:"mt-2 text-center text-xs text-gray-500 dark:text-gray-400"},Ef={class:"w-[280px] shrink-0 space-y-4"},jf={class:"mb-2 text-xs font-medium text-gray-600 dark:text-gray-400"},Pf={class:"mb-2 text-xs font-medium text-gray-600 dark:text-gray-400"},Uf={class:"mb-2 text-xs font-medium text-gray-600 dark:text-gray-400"},Bf={class:"mb-2 text-xs font-medium text-gray-600 dark:text-gray-400"},Ff={class:"space-y-2"},Vf={class:"text-xs text-gray-400 dark:text-gray-500"},Nf={class:"mb-2 text-xs font-medium text-gray-600 dark:text-gray-400"},Hf={class:"flex items-center"},Of={key:0,class:"space-y-2"},Wf={class:"flex items-center justify-between"},Yf={class:"text-xs font-medium text-gray-600 dark:text-gray-400"},Qf={class:"flex gap-1"},Kf={class:"flex max-h-[360px] flex-wrap gap-1.5 overflow-y-auto"},Gf={key:0,class:"ml-1 opacity-60"},Jf={class:"mb-2 flex items-center justify-between"},Xf={class:"text-xs font-medium text-gray-600 dark:text-gray-400"},Zf={key:0,class:"mt-1 text-xs text-gray-400 dark:text-gray-500"},ex={class:"space-y-4"},tx={class:"text-sm text-gray-600 dark:text-gray-300"},ax={class:"flex justify-end gap-2"},sx="default",la="chatlab_zhTW_dict_prompt_dismissed",Ik=ge({__name:"WordcloudTab",props:{sessionId:{},timeFilter:{},memberId:{},showSharedTopics:{type:Boolean}},setup(l){const o=ma(()=>wt(()=>import("./EChartWordcloud-C5hLT1vS.js"),__vite__mapDeps([5,6,7,8,1]))),{t}=ye(),c=Qt(),r=ct(),m=ba(),g=Je(),d=l,p=f(!1),h=f([]),y=f({totalMessages:0,totalWords:0,uniqueWords:0}),T=f(1.25),M=f(150),C=x(()=>{const ie=h.value.slice(0,M.value),R=ie.reduce((D,V)=>D+V.count,0);return{words:ie.map(D=>({word:D.word,count:D.count,percentage:R>0?Math.round(D.count/R*1e4)/100:0}))}}),L=f("meaningful"),z=f(!0),$=f([]),I=f([]),w=f(new Map),S=["n","nr","ns","nt","nz","nw","vn","a","an"],v=f([]),_=x(()=>C.value.words.map(ie=>({word:ie.word,count:ie.count,percentage:ie.percentage??0}))),A=x(()=>[...w.value.entries()].map(([ie,R])=>({tag:ie,count:R}))),j=f(null),U=x({get:()=>m.getActiveSchemeId(d.sessionId),set:ie=>m.setSessionScheme(d.sessionId,ie)}),k=x(()=>[{label:t("wordFilter.noFilter"),value:"__none__"},...m.schemeOptions.map(ie=>({label:ie.isDefault?`${ie.label} ★`:ie.label,value:ie.value}))]),b=x({get:()=>U.value??"__none__",set:ie=>{U.value=ie==="__none__"?null:ie}}),q=x(()=>m.getExcludeWords(d.sessionId)),Y=f("default"),W=f([]),J=f(!1),me=f(null),pe=f(!1),X=f(!1),N=x(()=>c.locale),ae=x(()=>c.locale==="zh-TW"),ue=x(()=>N.value.startsWith("zh")),he=x(()=>W.value.filter(ie=>ie.downloaded).map(ie=>({label:t(`quotes.wordcloud.dict.${ie.id==="zh-CN"?"zhCN":ie.id==="zh-TW"?"zhTW":ie.id}`),value:ie.id}))),G=x(()=>W.value.some(ie=>ie.downloaded)),O=x(()=>!ue.value||X.value),H=x(()=>W.value.filter(ie=>!ie.downloaded));async function le(){try{W.value=await sa("/nlp/dicts"),ae.value&&Y.value==="default"&&W.value.find(D=>D.id==="zh-TW")?.downloaded&&(Y.value="zh-TW"),W.value.find(R=>R.id==="zh-CN")?.downloaded&&Y.value==="default"&&(Y.value="zh-CN")}catch(ie){console.error("Failed to get dict list:",ie)}finally{X.value=!0}}async function fe(ie){J.value=!0,me.value=ie;try{const R=await Ha(`/nlp/dicts/${ie}/download`);R.success?(await le(),Y.value=ie,g.success(t("quotes.wordcloud.dict.downloadSuccess"))):g.fail(t("quotes.wordcloud.dict.downloadFailed"),{description:R.error})}catch{g.fail(t("quotes.wordcloud.dict.downloadFailed"))}finally{J.value=!1,me.value=null,pe.value=!1}}function xe(){pe.value=!1,localStorage.setItem(la,"true")}function ke(){const ie=W.value.find(R=>R.id==="zh-TW");ae.value&&ie&&!ie.downloaded&&!localStorage.getItem(la)&&(pe.value=!0)}const ne=x(()=>[{label:t("quotes.wordcloud.posFilter.all"),value:"all"},{label:t("quotes.wordcloud.posFilter.meaningful"),value:"meaningful"},{label:t("quotes.wordcloud.posFilter.custom"),value:"custom"}]),re=[{label:"80",value:80},{label:"100",value:100},{label:"150",value:150},{label:"200",value:200},{label:"300",value:300}],ve=Math.max(...re.map(ie=>ie.value)),Me=x(()=>[{label:t("quotes.wordcloud.size.small"),value:.75},{label:t("quotes.wordcloud.size.medium"),value:1},{label:t("quotes.wordcloud.size.large"),value:1.25},{label:t("quotes.wordcloud.size.xlarge"),value:1.5}]),$e=x(()=>I.value.map(ie=>({label:ie.name,tag:ie.tag,value:ie.tag,count:w.value.get(ie.tag)||0,meaningful:ie.meaningful})));async function qe(){try{const ie=await sa("/nlp/pos-tags");I.value=ie,$.value=ie.filter(R=>R.meaningful).map(R=>R.tag)}catch(ie){console.error("加载词性标签失败:",ie)}}let Ae=0;async function Se(){if(!d.sessionId||!O.value)return;const ie=++Ae;try{const R=await bt("/nlp/word-frequency",{sessionId:d.sessionId,locale:N.value,timeFilter:d.timeFilter?{startTs:d.timeFilter.startTs,endTs:d.timeFilter.endTs}:void 0,memberId:j.value??void 0,topN:50,minCount:2,posFilterMode:"custom",customPosTags:[...S],enableStopwords:!0,dictType:Y.value,excludeWords:q.value.length>0?[...q.value]:void 0});if(ie!==Ae)return;v.value=R.words.map(D=>({word:D.word,count:D.count,percentage:D.percentage}))}catch(R){if(console.error("加载话题迷你词云数据失败:",R),ie!==Ae)return;v.value=[]}}let Re=0;async function je(){if(!d.sessionId||!O.value)return;const ie=++Re;h.value.length===0&&(p.value=!0);try{const R=await bt("/nlp/word-frequency",{sessionId:d.sessionId,locale:N.value,timeFilter:d.timeFilter?{startTs:d.timeFilter.startTs,endTs:d.timeFilter.endTs}:void 0,memberId:j.value??void 0,topN:ve,minCount:2,posFilterMode:L.value,customPosTags:L.value==="custom"?[...$.value]:void 0,enableStopwords:z.value,dictType:Y.value,excludeWords:q.value.length>0?[...q.value]:void 0});if(ie!==Re)return;if(h.value=R.words.map(D=>({word:D.word,count:D.count,percentage:D.percentage})),y.value={totalMessages:R.totalMessages,totalWords:R.totalWords,uniqueWords:R.uniqueWords},R.posTagStats){const D=new Map;for(const V of R.posTagStats)D.set(V.tag,V.count);w.value=D}}catch(R){if(console.error("加载词频数据失败:",R),ie!==Re)return;h.value=[]}finally{ie===Re&&(p.value=!1)}}de(()=>d.sessionId,()=>{j.value=null,h.value=[],v.value=[],y.value={totalMessages:0,totalWords:0,uniqueWords:0},w.value=new Map}),de(()=>[d.sessionId,d.timeFilter,j.value,L.value,z.value,Y.value,q.value,O.value],()=>{je()},{immediate:!0,deep:!0}),de(()=>[d.sessionId,d.timeFilter,j.value,Y.value,q.value,O.value],()=>{Se()},{immediate:!0,deep:!0}),de($,()=>{L.value==="custom"&&je()},{deep:!0}),de(N,()=>{je()});function Ue(ie){r.openChatRecordDrawer({keywords:[ie]})}return Ve(async()=>{qe(),await le(),ke()}),(ie,R)=>{const D=_e,V=Pe,P=Kt,B=pa,Z=We;return n(),i("div",wf,[ue.value&&!G.value?(n(),i("div",$f,[e("div",Cf,[u(D,{name:"i-heroicons-information-circle",class:"mt-0.5 shrink-0 text-xl text-primary-500"}),e("p",Sf,s(a(t)("quotes.wordcloud.dict.needDownload")),1)]),e("div",Tf,[(n(!0),i(oe,null,ce(W.value,Q=>(n(),K(V,{key:Q.id,size:"sm",color:"primary",loading:J.value&&me.value===Q.id,disabled:J.value&&me.value!==Q.id,icon:"i-heroicons-arrow-down-tray",onClick:te=>fe(Q.id)},{default:F(()=>[ee(s(a(t)(`quotes.wordcloud.dict.download_${Q.id}`,Q.label)),1)]),_:2},1032,["loading","disabled","onClick"]))),128))])])):E("",!0),O.value?(n(),i("div",Mf,[p.value&&_.value.length===0?(n(),K(a(kt),{key:0,text:a(t)("quotes.wordcloud.loading"),class:"py-8"},null,8,["text"])):E("",!0),u(By,{"total-messages":y.value.totalMessages,"total-words":y.value.totalWords,"unique-words":y.value.uniqueWords,"top-words":_.value,"topic-words":v.value,"pos-tag-stats":A.value,"time-filter":d.timeFilter,onWordClick:Ue},null,8,["total-messages","total-words","unique-words","top-words","topic-words","pos-tag-stats","time-filter"]),d.showSharedTopics?(n(),K(Wy,{key:1,"session-id":d.sessionId,"time-filter":d.timeFilter,"dict-type":Y.value,"exclude-words":q.value,onWordClick:Ue},null,8,["session-id","time-filter","dict-type","exclude-words"])):E("",!0),u(a(Ye),{title:a(t)("quotes.wordcloud.stats.wordsLabel"),"show-divider":!1},{default:F(()=>[e("div",If,[e("div",Df,[e("div",Lf,[p.value?(n(),K(a(kt),{key:0,text:a(t)("quotes.wordcloud.loading"),class:"absolute inset-0 z-10 rounded-lg bg-white/80 dark:bg-page-dark/80"},null,8,["text"])):_.value.length===0?(n(),i("div",Af,[u(D,{name:"i-heroicons-chat-bubble-bottom-center-text",class:"text-2xl"}),e("p",zf,s(a(t)("quotes.wordcloud.empty.title")),1),e("p",qf,s(a(t)("quotes.wordcloud.empty.description")),1)])):(n(),K(a(o),{key:2,data:C.value,height:"100%","max-words":M.value,"color-scheme":sx,"size-scale":T.value,loading:p.value,onWordClick:Ue},null,8,["data","max-words","size-scale","loading"]))]),e("p",Rf,s(a(t)("quotes.wordcloud.stats.clickHint")),1)]),e("div",Ef,[e("div",null,[e("h4",jf,s(a(t)("quotes.wordcloud.config.maxWords")),1),u(a(nt),{modelValue:M.value,"onUpdate:modelValue":R[0]||(R[0]=Q=>M.value=Q),size:"xs",items:re},null,8,["modelValue"])]),e("div",null,[e("h4",Pf,s(a(t)("quotes.wordcloud.config.sizeScale")),1),u(a(nt),{modelValue:T.value,"onUpdate:modelValue":R[1]||(R[1]=Q=>T.value=Q),size:"xs",items:Me.value},null,8,["modelValue","items"])]),e("div",null,[e("h4",Uf,s(a(t)("quotes.wordcloud.config.userFilter")),1),u(nh,{modelValue:j.value,"onUpdate:modelValue":R[2]||(R[2]=Q=>j.value=Q),"session-id":d.sessionId,class:"w-full"},null,8,["modelValue","session-id"])]),e("div",null,[e("h4",Bf,s(a(t)("quotes.wordcloud.config.dict")),1),e("div",Ff,[he.value.length>1?(n(),K(a(nt),{key:0,modelValue:Y.value,"onUpdate:modelValue":R[3]||(R[3]=Q=>Y.value=Q),size:"xs",items:he.value},null,8,["modelValue","items"])):E("",!0),(n(!0),i(oe,null,ce(H.value,Q=>(n(),i("div",{key:Q.id,class:"flex items-center gap-2"},[u(V,{size:"xs",variant:"soft",color:"primary",loading:J.value&&me.value===Q.id,disabled:J.value&&me.value!==Q.id,icon:"i-heroicons-arrow-down-tray",onClick:te=>fe(Q.id)},{default:F(()=>[ee(s(a(t)(`quotes.wordcloud.dict.download_${Q.id}`,a(t)("quotes.wordcloud.dict.download"))),1)]),_:2},1032,["loading","disabled","onClick"]),e("span",Vf,s(a(t)("quotes.wordcloud.dict.downloadHint")),1)]))),128))])]),e("div",null,[e("h4",Nf,s(a(t)("quotes.wordcloud.config.posFilter")),1),u(a(nt),{modelValue:L.value,"onUpdate:modelValue":R[4]||(R[4]=Q=>L.value=Q),size:"xs",items:ne.value},null,8,["modelValue","items"])]),e("div",Hf,[u(P,{modelValue:z.value,"onUpdate:modelValue":R[5]||(R[5]=Q=>z.value=Q),label:a(t)("quotes.wordcloud.config.enableStopwords")},null,8,["modelValue","label"])]),L.value==="custom"?(n(),i("div",Of,[e("div",Wf,[e("h4",Yf,s(a(t)("quotes.wordcloud.posFilter.customHint")),1),e("div",Qf,[u(V,{size:"xs",variant:"ghost",color:"neutral",onClick:R[6]||(R[6]=Q=>$.value=I.value.filter(te=>te.meaningful).map(te=>te.tag))},{default:F(()=>[ee(s(a(t)("quotes.wordcloud.posFilter.selectMeaningful")),1)]),_:1}),u(V,{size:"xs",variant:"ghost",color:"neutral",onClick:R[7]||(R[7]=Q=>$.value=I.value.map(te=>te.tag))},{default:F(()=>[ee(s(a(t)("quotes.wordcloud.posFilter.selectAll")),1)]),_:1}),u(V,{size:"xs",variant:"ghost",color:"neutral",onClick:R[8]||(R[8]=Q=>$.value=[])},{default:F(()=>[ee(s(a(t)("quotes.wordcloud.posFilter.clearAll")),1)]),_:1})])]),e("div",Kf,[(n(!0),i(oe,null,ce($e.value,Q=>(n(),K(B,{key:Q.value,color:$.value.includes(Q.value)?"primary":"neutral",variant:$.value.includes(Q.value)?"solid":"outline",class:"cursor-pointer select-none transition-colors",onClick:()=>{$.value.includes(Q.value)?$.value=$.value.filter(te=>te!==Q.value):$.value=[...$.value,Q.value]}},{default:F(()=>[ee(s(Q.label)+" ",1),Q.count>0?(n(),i("span",Gf,"("+s(Q.count)+")",1)):E("",!0)]),_:2},1032,["color","variant","onClick"]))),128))])])):E("",!0),e("div",null,[e("div",Jf,[e("h4",Xf,s(a(t)("wordFilter.filterScheme")),1),u(V,{size:"xs",variant:"ghost",color:"neutral",icon:"i-heroicons-cog-6-tooth","aria-label":a(t)("wordFilter.manage"),onClick:R[9]||(R[9]=Q=>a(m).openModal())},null,8,["aria-label"])]),u(a(nt),{modelValue:b.value,"onUpdate:modelValue":R[10]||(R[10]=Q=>b.value=Q),size:"xs",items:k.value},null,8,["modelValue","items"]),q.value.length>0?(n(),i("p",Zf,s(a(t)("wordFilter.activeCount",{count:q.value.length})),1)):E("",!0)])])])]),_:1},8,["title"])])):E("",!0),u(Z,{open:pe.value,"onUpdate:open":R[12]||(R[12]=Q=>pe.value=Q),title:a(t)("quotes.wordcloud.dict.promptTitle")},{body:F(()=>[e("div",ex,[e("p",tx,s(a(t)("quotes.wordcloud.dict.promptDescription")),1),e("div",ax,[u(V,{variant:"ghost",color:"neutral",onClick:xe},{default:F(()=>[ee(s(a(t)("quotes.wordcloud.dict.promptLater")),1)]),_:1}),u(V,{color:"primary",loading:J.value,onClick:R[11]||(R[11]=Q=>fe("zh-TW"))},{default:F(()=>[ee(s(a(t)("quotes.wordcloud.dict.promptDownload")),1)]),_:1},8,["loading"])])])]),_:1},8,["open","title"]),u(_f)])}}}),nx={class:"flex items-center justify-between gap-3"},ox={class:"flex items-center gap-2"},rx={class:"text-sm font-medium text-gray-900 dark:text-white"},lx={class:"text-xs text-gray-500 dark:text-gray-400"},ix=ge({__name:"OwnerEntryCard",props:{sessionId:{},members:{},chatType:{}},setup(l){const{t:o}=ye(),t=Oa(),c=l,r=f(!1);function m(p){return p.groupNickname||p.accountName||p.platformId}const g=x(()=>{const p=t.currentSession?.ownerId;return p&&c.members.find(h=>h.platformId===p)||null}),d=x(()=>g.value?m(g.value):t.currentSession?.ownerId??"");return(p,h)=>{const y=_e,T=Pe;return n(),K(a(at),{class:"w-150 p-3"},{default:F(()=>[e("div",nx,[e("div",ox,[e("div",{class:se(["flex h-8 w-8 items-center justify-center rounded-full bg-linear-to-br",l.chatType==="group"?"from-pink-400 to-pink-600":"from-purple-400 to-purple-600"])},[u(y,{name:"i-heroicons-user",class:"h-4 w-4 text-white"})],2),e("div",null,[e("h3",rx,s(d.value?a(o)("members.ownerPrompt.currentOwner",{name:d.value}):a(o)("members.ownerPrompt.choose")),1),e("p",lx,s(a(o)("members.ownerPrompt.helper")),1)])]),u(T,{size:"sm",variant:d.value?"outline":"solid",color:"primary",onClick:h[0]||(h[0]=M=>r.value=!0)},{default:F(()=>[ee(s(d.value?a(o)("members.ownerPrompt.change"):a(o)("members.ownerPrompt.choose")),1)]),_:1},8,["variant"])]),u(Wa,{modelValue:r.value,"onUpdate:modelValue":h[1]||(h[1]=M=>r.value=M),"session-id":l.sessionId,"chat-type":l.chatType},null,8,["modelValue","session-id","chat-type"])]),_:1})}}}),cx={key:0,class:"mb-6"},dx={class:"flex items-center gap-3"},ux={class:"text-xl font-bold text-gray-900 dark:text-white"},mx={class:"text-sm text-gray-500 dark:text-gray-400"},gx={class:"mb-4 flex flex-wrap items-center justify-between gap-3"},px={key:0,class:"flex items-center gap-2"},hx={class:"text-xs text-gray-500 dark:text-gray-400"},vx={key:0,class:"flex flex-1 items-center justify-center"},yx={key:1,class:"flex flex-1 flex-col items-center justify-center gap-3"},fx={class:"text-sm text-gray-500 dark:text-gray-400"},xx={key:2,class:"flex flex-1 flex-col items-center justify-center"},bx={class:"text-gray-500 dark:text-gray-400"},kx={key:3,class:"min-h-0 flex-1 overflow-x-auto overflow-y-hidden"},_x={key:0,"aria-hidden":"true"},wx={class:"flex shrink-0 flex-col leading-none"},$x={class:"flex shrink-0 flex-col leading-none"},Cx={class:"flex shrink-0 flex-col leading-none"},Sx={class:"inline-flex items-center gap-1.5"},Tx={class:"text-right"},Mx=["data-index","onClick"],Ix={key:0,class:"flex justify-center"},Dx={class:"flex min-w-0 items-center gap-2.5"},Lx={class:"min-w-0"},Ax=["title"],zx=["title"],qx=["title"],Rx={class:"text-right font-mono text-sm font-semibold tabular-nums text-gray-900 dark:text-white"},Ex=["title"],jx={class:"flex justify-end gap-1"},Px={class:"p-6 text-center"},Ux={class:"mx-auto mb-4 flex h-14 w-14 items-center justify-center rounded-full bg-red-100 dark:bg-red-900/30"},Bx={class:"mb-2 text-lg font-semibold text-gray-900 dark:text-white"},Fx={class:"mb-6 text-sm text-gray-500 dark:text-gray-400"},Vx={class:"flex justify-center gap-3"},Nx={class:"p-6 text-center"},Hx={class:"mx-auto mb-4 flex h-14 w-14 items-center justify-center rounded-full bg-red-100 dark:bg-red-900/30"},Ox={class:"mb-2 text-lg font-semibold text-gray-900 dark:text-white"},Wx={class:"mb-6 text-sm text-gray-500 dark:text-gray-400"},Yx={class:"flex justify-center gap-3"},Qx={class:"p-6"},Kx={class:"mb-4 flex items-center gap-3"},Gx={class:"flex h-10 w-10 items-center justify-center rounded-full bg-amber-100 dark:bg-amber-900/30"},Jx={class:"text-lg font-semibold text-gray-900 dark:text-white"},Xx={class:"mb-2 text-sm text-gray-600 dark:text-gray-400"},Zx={class:"mb-6 text-xs text-amber-700 dark:text-amber-300"},eb={class:"flex justify-end gap-2"},tb=64,ab=ge({__name:"MemberList",props:{sessionId:{},showHeader:{type:Boolean,default:!0},chatType:{default:"group"}},emits:["data-changed"],setup(l,{emit:o}){const{t}=ye(),c=Oe(),r=ct(),m=l,g=o,d=f([]),p=f(!1),h=f(!1),y=f(""),T=x(()=>Xa(m.chatType,d.value.length)),M=x(()=>m.chatType==="group"?"":T.value?"member-table-grid--private":"member-table-grid--private-without-selection"),C=f(null),L=f(!1),z=f(!1),$=f(!1),I=f(!1),w=f(!1),{sortState:S,toggleSort:v,resetSort:_,isSortActive:A}=Ya({initialState:{field:"messageCount",direction:"desc"}}),j=f(new Set);let U=0;function k(D,V){const P=V instanceof Error?V:new Error(String(V));console.error(D,P),Ja(`${D} ${P.message}`,P.stack)}function b(D){return D.groupNickname||D.accountName||D.platformId}function q(D){return b(D).slice(0,1)}function Y(D){r.openChatRecordDrawer({sessionId:m.sessionId,memberId:D.id,memberName:b(D)})}const W=x(()=>Za(d.value,y.value,S.value)),{selectedIds:J,setSelection:me,clearSelection:pe,handleRowClick:X,handleRowMouseDown:N}=Qa({rows:W,getRowId:D=>D.id}),ae=x(()=>d.value.filter(D=>J.value.has(D.id))),ue=x(()=>ae.value.length===2),he=x(()=>ae.value.reduce((D,V)=>D+V.messageCount,0));function G(D,V,P){T.value&&X(D,V,P)}function O(D){T.value&&N(D)}const H=x(()=>{if(ae.value.length!==2)return null;const[D,V]=ae.value;return V.messageCount>D.messageCount||V.messageCount===D.messageCount&&V.id<D.id?{primary:V,secondary:D}:{primary:D,secondary:V}});function le(D,V){return A(D,V)?"text-primary-500 dark:text-primary-400":"text-gray-300 dark:text-gray-600"}const fe=f(null),xe=Ka(x(()=>({count:W.value.length,getScrollElement:()=>fe.value,estimateSize:()=>tb,overscan:8,getItemKey:D=>W.value[D]?.id??D}))),ke=x(()=>xe.value.getVirtualItems().map(D=>({virtualItem:D,member:W.value[D.index]}))),ne=x(()=>xe.value.getTotalSize());function re(D){D instanceof HTMLElement&&xe.value.measureElement(D)}async function ve(){await Fe(),fe.value?.scrollTo({top:0}),xe.value.measure()}async function Me(){const D=m.sessionId;if(!D)return;const V=++U;p.value=!0,h.value=!1;try{const P=await c.getMembers(D);if(V!==U||D!==m.sessionId)return;d.value=P,await Fe(),xe.value.measure()}catch(P){V===U&&(h.value=!0),k("Failed to load member list:",P)}finally{V===U&&(p.value=!1)}}function $e(D,V){const P=new Set(j.value);V?P.add(D):P.delete(D),j.value=P}async function qe(D,V){const P=m.sessionId,B=JSON.parse(JSON.stringify(V)),Z=JSON.stringify(D.aliases),Q=JSON.stringify(B);if(Z!==Q){$e(D.id,!0);try{if(await c.updateMemberAliases(P,D.id,B)&&P===m.sessionId){const Ee=d.value.findIndex(De=>De.id===D.id);Ee!==-1&&(d.value[Ee]={...d.value[Ee],aliases:B},await Fe(),xe.value.measure())}}catch(te){k("Failed to save member aliases:",te)}finally{$e(D.id,!1)}}}function Ae(D){C.value=D}function Se(){C.value=null}async function Re(){if(C.value){L.value=!0;try{const D=C.value.id;if(await c.deleteMember(m.sessionId,D)){const P=new Set(J.value);P.delete(D),me(P),await Me(),g("data-changed")}}catch(D){k("Failed to delete member:",D)}finally{L.value=!1,C.value=null}}}function je(){J.value.size!==0&&(z.value=!0)}async function Ue(){const D=m.sessionId,V=Array.from(J.value);if(V.length!==0){$.value=!0;try{await c.deleteMembers(D,V)&&D===m.sessionId&&(z.value=!1,pe(),await Me(),g("data-changed"))}catch(P){k("Failed to delete selected members:",P)}finally{$.value=!1}}}function ie(){ue.value&&(I.value=!0)}async function R(){if(H.value){w.value=!0;try{await c.mergeMembers(m.sessionId,H.value.primary.id,H.value.secondary.id)&&(I.value=!1,pe(),await Me(),g("data-changed"))}catch(D){k("Failed to merge members:",D)}finally{w.value=!1}}}return de([y,S],ve),de(T,D=>{D||pe()}),de(()=>m.sessionId,()=>{U+=1,d.value=[],h.value=!1,j.value=new Set,y.value="",_(),pe(),ve(),Me()},{immediate:!0}),dt(()=>{U+=1}),(D,V)=>{const P=Pe,B=St,Z=_e,Q=pt,te=Kt,Ee=is,De=We;return n(),i("div",{class:se(["main-content",m.showHeader?"max-w-5xl p-6":"flex h-full max-w-none flex-col overflow-hidden p-4"])},[m.showHeader?(n(),i("div",cx,[e("div",dx,[e("div",null,[e("h2",ux,s(a(t)(m.chatType==="private"?"members.private.title":"members.list.title")),1),e("p",mx,s(a(t)(m.chatType==="private"?"members.private.description":"members.list.description",{count:d.value.length})),1)])])])):E("",!0),u(ix,{class:"mb-6","session-id":l.sessionId,members:d.value,"chat-type":m.chatType},null,8,["session-id","members","chat-type"]),e("div",gx,[u(B,{modelValue:y.value,"onUpdate:modelValue":V[1]||(V[1]=Te=>y.value=Te),placeholder:a(t)("members.list.searchPlaceholder"),icon:"i-heroicons-magnifying-glass",class:"w-full md:w-100"},os({_:2},[y.value?{name:"trailing",fn:F(()=>[u(P,{icon:"i-heroicons-x-mark",variant:"link",color:"neutral",size:"xs",onClick:V[0]||(V[0]=Te=>y.value="")})]),key:"0"}:void 0]),1032,["modelValue","placeholder"]),T.value?(n(),i("div",px,[p.value&&d.value.length>0?(n(),K(Z,{key:0,name:"i-heroicons-arrow-path",class:"h-4 w-4 animate-spin text-primary-500"})):E("",!0),e("span",hx,s(a(t)("members.list.selectedCount",{count:a(J).size})),1),u(P,{icon:"i-heroicons-link",size:"sm",color:"primary",disabled:!ue.value,onClick:ie},{default:F(()=>[ee(s(a(t)("members.list.mergeSelected")),1)]),_:1},8,["disabled"]),u(P,{icon:"i-heroicons-trash",size:"sm",color:"error",variant:"outline",disabled:a(J).size===0,onClick:je},{default:F(()=>[ee(s(a(t)("members.list.deleteSelected")),1)]),_:1},8,["disabled"])])):E("",!0)]),e("div",{class:se(["flex min-h-[240px] flex-col overflow-hidden rounded-lg border border-gray-200/60 bg-card-bg dark:border-white/5 dark:bg-card-dark",m.showHeader?"h-[500px]":"min-h-0 flex-1"])},[p.value&&d.value.length===0?(n(),i("div",vx,[u(Z,{name:"i-heroicons-arrow-path",class:"h-8 w-8 animate-spin text-primary-500"})])):h.value&&d.value.length===0?(n(),i("div",yx,[u(Z,{name:"i-heroicons-exclamation-circle",class:"h-10 w-10 text-red-400"}),e("p",fx,s(a(t)("members.list.loadError")),1),u(P,{size:"sm",variant:"outline",icon:"i-heroicons-arrow-path",onClick:Me},{default:F(()=>[ee(s(a(t)("common.retry")),1)]),_:1})])):W.value.length===0?(n(),i("div",xx,[u(Z,{name:"i-heroicons-user-group",class:"mb-3 h-12 w-12 text-gray-300 dark:text-gray-600"}),e("p",bx,s(y.value?a(t)("members.list.noMatch"):a(t)("members.list.empty")),1)])):(n(),i("div",kx,[e("div",{class:se(["flex h-full flex-col",m.chatType==="private"?"min-w-[920px]":"min-w-[1120px]"])},[e("div",{class:se(["member-table-grid shrink-0 border-b border-gray-200 bg-gray-50 px-3 py-2 text-xs font-medium text-gray-500 dark:border-white/5 dark:bg-page-dark/80 dark:text-gray-400",M.value])},[T.value?(n(),i("span",_x)):E("",!0),e("span",null,s(a(t)("members.list.table.accountName")),1),m.chatType==="group"?(n(),i("button",{key:1,type:"button",class:"flex items-center justify-start gap-1.5 text-left transition-colors hover:text-gray-700 dark:hover:text-gray-200",onClick:V[2]||(V[2]=Te=>a(v)("groupNickname"))},[ee(s(a(t)("members.list.table.groupNickname"))+" ",1),e("span",wx,[u(Z,{name:"i-heroicons-chevron-up",class:se(["h-2.5 w-2.5",le("groupNickname","asc")])},null,8,["class"]),u(Z,{name:"i-heroicons-chevron-down",class:se(["-mt-0.5 h-2.5 w-2.5",le("groupNickname","desc")])},null,8,["class"])])])):E("",!0),e("button",{type:"button",class:"flex items-center justify-end gap-1.5 text-right transition-colors hover:text-gray-700 dark:hover:text-gray-200",onClick:V[3]||(V[3]=Te=>a(v)("messageCount"))},[ee(s(a(t)("members.list.table.messageCount"))+" ",1),e("span",$x,[u(Z,{name:"i-heroicons-chevron-up",class:se(["h-2.5 w-2.5",le("messageCount","asc")])},null,8,["class"]),u(Z,{name:"i-heroicons-chevron-down",class:se(["-mt-0.5 h-2.5 w-2.5",le("messageCount","desc")])},null,8,["class"])])]),e("button",{type:"button",class:"flex items-center justify-end gap-1.5 text-right transition-colors hover:text-gray-700 dark:hover:text-gray-200",onClick:V[4]||(V[4]=Te=>a(v)("lastMessageTs"))},[ee(s(a(t)("members.list.table.lastMessageTime"))+" ",1),e("span",Cx,[u(Z,{name:"i-heroicons-chevron-up",class:se(["h-2.5 w-2.5",le("lastMessageTs","asc")])},null,8,["class"]),u(Z,{name:"i-heroicons-chevron-down",class:se(["-mt-0.5 h-2.5 w-2.5",le("lastMessageTs","desc")])},null,8,["class"])])]),e("span",Sx,[e("span",null,s(a(t)("members.list.table.customAlias")),1),u(Q,{text:a(t)("members.list.tip"),popper:{placement:"top"}},{default:F(()=>[u(Z,{name:"i-heroicons-question-mark-circle",class:"h-4 w-4 text-gray-400 dark:text-gray-500"})]),_:1},8,["text"])]),e("span",Tx,s(a(t)("members.list.table.actions")),1)],2),e("div",{ref_key:"listScrollRef",ref:fe,class:"min-h-0 flex-1 overflow-y-auto"},[e("div",{class:"relative",style:Ke({height:`${ne.value}px`})},[(n(!0),i(oe,null,ce(ke.value,({virtualItem:Te,member:Le})=>(n(),i("div",{key:String(Te.key),ref_for:!0,ref:re,"data-index":Te.index,class:se(["member-table-grid absolute left-0 top-0 w-full min-h-16 border-b border-gray-100/80 px-3 py-2 transition-colors hover:bg-gray-50 dark:border-white/5 dark:hover:bg-gray-800/30",[M.value,T.value?"cursor-pointer":"",T.value&&a(J).has(Le.id)?"bg-primary-50/70 dark:bg-primary-950/20":""]]),style:Ke({transform:`translateY(${Te.start}px)`}),onMousedown:O,onClick:Ge=>G(Te.index,Le.id,Ge)},[T.value?(n(),i("div",Ix,[u(te,{"model-value":a(J).has(Le.id),onClick:Be(Ge=>G(Te.index,Le.id,Ge),["stop"])},null,8,["model-value","onClick"])])):E("",!0),e("div",Dx,[u(Ga,{src:Le.avatar,alt:b(Le),text:q(Le),"fallback-class":["flex h-8 w-8 items-center justify-center rounded-full text-[10px] font-bold","bg-primary-500 text-white"]},null,8,["src","alt","text"]),e("div",Lx,[e("p",{class:"truncate text-sm font-medium text-gray-900 dark:text-white",title:Le.accountName||"-"},s(Le.accountName||"-"),9,Ax),e("p",{class:"truncate text-xs text-gray-400 dark:text-gray-500",title:Le.platformId},s(Le.platformId),9,zx)])]),m.chatType==="group"?(n(),i("p",{key:1,class:se(["truncate text-sm text-gray-700 dark:text-gray-300",Le.groupNickname?"font-medium":"text-gray-400 dark:text-gray-500"]),title:Le.groupNickname||"-"},s(Le.groupNickname||"-"),11,qx)):E("",!0),e("span",Rx,s(Le.messageCount.toLocaleString()),1),e("span",{class:"text-right font-mono text-xs tabular-nums text-gray-600 dark:text-gray-400",title:Le.lastMessageTs===null?"-":a(oa)(Le.lastMessageTs)},s(Le.lastMessageTs===null?"-":a(oa)(Le.lastMessageTs)),9,Ex),u(Ee,{"model-value":Le.aliases,placeholder:a(t)("members.list.aliasPlaceholder"),loading:j.value.has(Le.id),size:"xs",class:"w-full",onClick:V[5]||(V[5]=Be(()=>{},["stop"])),"onUpdate:modelValue":Ge=>qe(Le,Ge)},null,8,["model-value","placeholder","loading","onUpdate:modelValue"]),e("div",jx,[u(P,{icon:"i-heroicons-chat-bubble-left-ellipsis",size:"xs",color:"neutral",variant:"ghost",title:a(t)("common.viewChatRecords"),onClick:Be(Ge=>Y(Le),["stop"])},null,8,["title","onClick"]),u(P,{icon:"i-heroicons-trash",size:"xs",color:"error",variant:"ghost",title:a(t)("members.list.delete"),onClick:Be(Ge=>Ae(Le),["stop"])},null,8,["title","onClick"])])],46,Mx))),128))],4)],512)],2)]))],2),u(De,{open:!!C.value,ui:{content:"max-w-sm"},"onUpdate:open":V[6]||(V[6]=Te=>C.value=null)},{content:F(()=>[e("div",Px,[e("div",Ux,[u(Z,{name:"i-heroicons-exclamation-triangle",class:"h-7 w-7 text-red-500"})]),e("h3",Bx,s(a(t)("members.list.modal.title")),1),e("p",Fx,s(a(t)("members.list.modal.content",{name:C.value?b(C.value):"",count:C.value?.messageCount.toLocaleString()})),1),e("div",Vx,[u(P,{variant:"outline",onClick:Se},{default:F(()=>[ee(s(a(t)("members.list.modal.cancel")),1)]),_:1}),u(P,{color:"error",loading:L.value,onClick:Re},{default:F(()=>[ee(s(a(t)("members.list.modal.confirm")),1)]),_:1},8,["loading"])])])]),_:1},8,["open"]),u(De,{open:z.value,ui:{content:"max-w-sm"},"onUpdate:open":V[8]||(V[8]=Te=>z.value=Te)},{content:F(()=>[e("div",Nx,[e("div",Hx,[u(Z,{name:"i-heroicons-exclamation-triangle",class:"h-7 w-7 text-red-500"})]),e("h3",Ox,s(a(t)("members.list.batchDeleteModal.title")),1),e("p",Wx,s(a(t)("members.list.batchDeleteModal.content",{count:ae.value.length,messageCount:he.value.toLocaleString()})),1),e("div",Yx,[u(P,{variant:"outline",disabled:$.value,onClick:V[7]||(V[7]=Te=>z.value=!1)},{default:F(()=>[ee(s(a(t)("members.list.modal.cancel")),1)]),_:1},8,["disabled"]),u(P,{color:"error",loading:$.value,onClick:Ue},{default:F(()=>[ee(s(a(t)("members.list.modal.confirm")),1)]),_:1},8,["loading"])])])]),_:1},8,["open"]),u(De,{open:I.value,ui:{content:"max-w-md"},"onUpdate:open":V[10]||(V[10]=Te=>I.value=Te)},{content:F(()=>[e("div",Qx,[e("div",Kx,[e("div",Gx,[u(Z,{name:"i-heroicons-link",class:"h-5 w-5 text-amber-600 dark:text-amber-400"})]),e("h3",Jx,s(a(t)("members.list.mergeModal.title")),1)]),e("p",Xx,s(a(t)("members.list.mergeModal.content",{source:H.value?b(H.value.secondary):"",sourceCount:H.value?H.value.secondary.messageCount.toLocaleString():"0",target:H.value?b(H.value.primary):"",targetCount:H.value?H.value.primary.messageCount.toLocaleString():"0"})),1),e("p",Zx,s(a(t)("members.list.mergeModal.hint")),1),e("div",eb,[u(P,{variant:"outline",disabled:w.value,onClick:V[9]||(V[9]=Te=>I.value=!1)},{default:F(()=>[ee(s(a(t)("members.list.mergeModal.cancel")),1)]),_:1},8,["disabled"]),u(P,{color:"primary",loading:w.value,onClick:R},{default:F(()=>[ee(s(a(t)("members.list.mergeModal.confirm")),1)]),_:1},8,["loading"])])])]),_:1},8,["open"])],2)}}}),Dk=tt(ab,[["__scopeId","data-v-0754d30f"]]),sb={class:"mt-3 flex items-center justify-between gap-3"},Lk=ge({__name:"SessionAnalysisHeader",props:Pt({title:{},avatar:{},icon:{},iconClass:{},tabs:{},currentSessionId:{},initialTimeState:{}},{activeTab:{required:!0},activeTabModifiers:{},timeRangeValue:{required:!0},timeRangeValueModifiers:{}}),emits:Pt(["openIncrementalImport","openMemberManagement","openChatRecord","update:fullRange","update:availableYears"],["update:activeTab","update:timeRangeValue"]),setup(l,{emit:o}){const t=jt(l,"activeTab"),c=jt(l,"timeRangeValue"),r=l,m=o,{t:g}=ye(),d=ct(),p=x(()=>!["ai-chat","memory","lab","debug"].includes(t.value)),h=x(()=>r.tabs.map(y=>({id:y.id,label:g(y.labelKey),icon:y.icon})));return(y,T)=>{const M=Pe,C=pt;return n(),K(xs,{title:l.title,avatar:l.avatar,size:"compact",icon:l.icon,"icon-class":l.iconClass},{actions:F(()=>[a(d).toolsPanelPosition==="header"?(n(),i(oe,{key:0},[u(C,{text:a(g)("analysis.tooltip.viewChatRecord")},{default:F(()=>[u(M,{icon:"i-heroicons-chat-bubble-bottom-center-text",variant:"ghost",color:"gray",size:"sm",class:"hover:bg-gray-100 dark:hover:bg-gray-800",onClick:T[0]||(T[0]=L=>m("openChatRecord"))})]),_:1},8,["text"]),u(C,{text:a(g)("analysis.tooltip.incrementalImport")},{default:F(()=>[u(M,{icon:"i-heroicons-plus-circle",variant:"ghost",color:"gray",size:"sm",class:"hover:bg-gray-100 dark:hover:bg-gray-800",onClick:T[1]||(T[1]=L=>m("openIncrementalImport"))})]),_:1},8,["text"]),u(C,{text:a(g)("analysis.tooltip.memberManagement")},{default:F(()=>[u(M,{icon:"i-heroicons-user-group",variant:"ghost",color:"gray",size:"sm",class:"hover:bg-gray-100 dark:hover:bg-gray-800",onClick:T[2]||(T[2]=L=>m("openMemberManagement"))})]),_:1},8,["text"]),u(ht,{color:"gray"}),u(C,{text:a(g)("analysis.tooltip.more")},{default:F(()=>[u(M,{"data-tools-panel-trigger":"",icon:"i-heroicons-ellipsis-horizontal",variant:"ghost",color:"gray",size:"sm",class:"hover:bg-gray-100 dark:hover:bg-gray-800",onClick:T[3]||(T[3]=L=>a(d).toggleToolsPanelOpen())})]),_:1},8,["text"])],64)):(n(),K(ht,{key:1,color:"gray"}))]),default:F(()=>[e("div",sb,[u(a(es),{modelValue:t.value,"onUpdate:modelValue":T[4]||(T[4]=L=>t.value=L),class:"min-w-0 shrink",items:h.value},null,8,["modelValue","items"]),u(fs,{modelValue:c.value,"onUpdate:modelValue":T[5]||(T[5]=L=>c.value=L),"session-id":l.currentSessionId??void 0,visible:p.value,"initial-state":l.initialTimeState,size:"sm","onUpdate:fullRange":T[6]||(T[6]=L=>m("update:fullRange",L)),"onUpdate:availableYears":T[7]||(T[7]=L=>m("update:availableYears",L))},null,8,["modelValue","session-id","visible","initial-state"])])]),_:1},8,["title","avatar","icon","icon-class"])}}}),nb={class:"space-y-4 p-5"},ob={class:"flex items-center gap-2"},rb={class:"text-base font-semibold text-gray-900 dark:text-white"},lb={key:0,class:"flex items-center gap-2 text-sm text-gray-400"},ib={class:"rounded-lg border border-gray-200 bg-gray-50 p-3 text-sm dark:border-gray-700 dark:bg-gray-800/50"},cb={class:"flex items-center justify-between"},db={class:"text-gray-500"},ub={class:"font-medium text-gray-800 dark:text-gray-200"},mb={key:0,class:"mt-1 flex items-center justify-between"},gb={class:"text-gray-500"},pb={class:"text-gray-700 dark:text-gray-300"},hb={key:1,class:"mt-2"},vb={class:"flex items-center justify-between text-xs text-gray-500"},yb={class:"mt-1 h-1.5 w-full overflow-hidden rounded-full bg-gray-200 dark:bg-gray-700"},fb={key:2,class:"mt-1 text-xs text-red-500"},xb={class:"text-sm text-gray-600 dark:text-gray-400"},bb={key:0,class:"rounded border border-amber-200 bg-amber-50 px-2 py-1.5 text-xs text-amber-700 dark:border-amber-800/50 dark:bg-amber-900/20 dark:text-amber-400"},kb={class:"flex justify-end gap-2"},_b={class:"text-xs text-gray-400"},wb={class:"flex flex-wrap justify-end gap-2"},ze="settings.ai.semanticIndex",Ak=ge({__name:"SemanticIndexSessionModal",props:{modelValue:{type:Boolean},sessionId:{},messageCount:{}},emits:["update:modelValue"],setup(l,{emit:o}){const t=l,c=o,{t:r}=ye(),m=ts(),g=x({get:()=>t.modelValue,set:S=>c("update:modelValue",S)}),d=f(null),p=f(!1),h=f(!1),y=f(!1),T=x(()=>{const S=d.value;return!S||!S.enabled?r(`${ze}.session.notEnabled`):S.needsRebuild?r(`${ze}.state.needsRebuild`):S.running||S.queued||S.indexStatus==="running"?r(`${ze}.state.building`):S.indexStatus==="completed"?r(`${ze}.state.completed`):S.indexStatus==="failed"?r(`${ze}.state.failed`):S.indexStatus==="paused"?r(`${ze}.state.paused`):r(`${ze}.state.pending`)}),M=x(()=>{const S=d.value;return!!S&&(S.running||S.queued||S.indexStatus==="running")}),C=x(()=>d.value&&d.value.totalMessages>0?Math.round(d.value.indexedMessages/d.value.totalMessages*100):0);let L=null;function z(){L&&(clearTimeout(L),L=null)}function $(){z(),L=setTimeout(async()=>{try{d.value=await m.status(t.sessionId)}catch(S){console.error("[semantic-index] poll status failed:",S)}M.value&&t.modelValue?$():z()},1500)}async function I(){h.value=!0;try{const[S,v]=await Promise.all([m.getConfig(),m.status(t.sessionId)]);p.value=S.config.enabled&&S.configured&&(S.config.mode==="local"?!!S.config.local.modelId:!!S.config.api?.baseUrl&&!!S.config.api?.model&&(!as(S.config.api?.baseUrl)||S.apiKeySet)),d.value=v}catch(S){console.error("[semantic-index] load session status failed:",S)}finally{h.value=!1}M.value&&$()}async function w(S){y.value=!0;try{d.value=await m[S](t.sessionId)}catch(v){console.error(`[semantic-index] ${S} failed:`,v)}finally{y.value=!1}M.value?$():z()}return de(()=>t.modelValue,S=>{S?I():z()}),dt(z),(S,v)=>{const _=_e,A=Pe,j=We;return n(),K(j,{open:g.value,"onUpdate:open":v[10]||(v[10]=U=>g.value=U),ui:{content:"z-[101]",overlay:"z-[100]"}},{content:F(()=>[e("div",nb,[e("div",ob,[u(_,{name:"i-heroicons-circle-stack",class:"h-5 w-5 text-blue-500"}),e("h3",rb,s(a(r)(`${ze}.title`)),1)]),h.value?(n(),i("div",lb,[u(_,{name:"i-heroicons-arrow-path",class:"h-4 w-4 animate-spin"}),ee(" "+s(a(r)("common.loading")),1)])):(n(),i(oe,{key:1},[e("div",ib,[e("div",cb,[e("span",db,s(a(r)(`${ze}.session.statusLabel`)),1),e("span",ub,s(T.value),1)]),d.value?.enabled&&d.value.indexStatus==="completed"?(n(),i("div",mb,[e("span",gb,s(a(r)(`${ze}.session.coverageLabel`)),1),e("span",pb,s(C.value)+"%",1)])):E("",!0),M.value?(n(),i("div",hb,[e("div",vb,[e("span",null,s(a(r)(`${ze}.session.progressLabel`)),1),e("span",null,s(d.value?.indexedMessages??0)+" / "+s(d.value?.totalMessages??0)+" ("+s(C.value)+"%) ",1)]),e("div",yb,[e("div",{class:"h-full rounded-full bg-blue-500 transition-all duration-500",style:Ke({width:`${C.value}%`})},null,4)])])):E("",!0),d.value?.error?(n(),i("p",fb,s(d.value.error),1)):E("",!0)]),d.value?.enabled?(n(),i(oe,{key:1},[e("p",_b,s(a(r)(`${ze}.session.buildVsEnable`)),1),e("div",wb,[M.value?(n(),i(oe,{key:0},[u(A,{variant:"soft",loading:y.value,onClick:v[2]||(v[2]=U=>w("pause"))},{default:F(()=>[ee(s(a(r)(`${ze}.action.pause`)),1)]),_:1},8,["loading"]),u(A,{color:"error",variant:"soft",disabled:y.value,onClick:v[3]||(v[3]=U=>w("cancel"))},{default:F(()=>[ee(s(a(r)(`${ze}.action.cancel`)),1)]),_:1},8,["disabled"])],64)):d.value?.indexStatus==="completed"&&!d.value?.needsRebuild?(n(),K(A,{key:1,variant:"soft",loading:y.value,onClick:v[4]||(v[4]=U=>w("rebuild"))},{default:F(()=>[ee(s(a(r)(`${ze}.action.rebuild`)),1)]),_:1},8,["loading"])):d.value?.needsRebuild?(n(),K(A,{key:2,color:"primary",loading:y.value,onClick:v[5]||(v[5]=U=>w("rebuild"))},{default:F(()=>[ee(s(a(r)(`${ze}.action.rebuild`)),1)]),_:1},8,["loading"])):d.value?.indexStatus==="failed"?(n(),K(A,{key:3,color:"primary",loading:y.value,onClick:v[6]||(v[6]=U=>w("build"))},{default:F(()=>[ee(s(a(r)(`${ze}.session.retry`)),1)]),_:1},8,["loading"])):d.value?.indexStatus==="paused"?(n(),K(A,{key:4,color:"primary",loading:y.value,onClick:v[7]||(v[7]=U=>w("build"))},{default:F(()=>[ee(s(a(r)(`${ze}.session.continue`)),1)]),_:1},8,["loading"])):(n(),K(A,{key:5,color:"primary",loading:y.value,onClick:v[8]||(v[8]=U=>w("build"))},{default:F(()=>[ee(s(a(r)(`${ze}.action.build`)),1)]),_:1},8,["loading"])),u(A,{variant:"ghost",color:"neutral",disabled:y.value,onClick:v[9]||(v[9]=U=>w("remove"))},{default:F(()=>[ee(s(a(r)(`${ze}.action.remove`)),1)]),_:1},8,["disabled"])])],64)):(n(),i(oe,{key:0},[e("p",xb,s(a(r)(`${ze}.session.enableHint`)),1),p.value?E("",!0):(n(),i("p",bb,s(a(r)(`${ze}.session.configFirst`)),1)),e("div",kb,[u(A,{variant:"ghost",onClick:v[0]||(v[0]=U=>g.value=!1)},{default:F(()=>[ee(s(a(r)("common.close")),1)]),_:1}),u(A,{color:"primary",loading:y.value,disabled:!p.value,onClick:v[1]||(v[1]=U=>w("enable"))},{default:F(()=>[ee(s(a(r)(`${ze}.session.enable`)),1)]),_:1},8,["loading","disabled"])])],64))],64))])]),_:1},8,["open"])}}}),$b={class:"min-h-[200px]"},Cb={key:0,class:"space-y-4"},Sb={class:"text-sm text-gray-600 dark:text-gray-400"},Tb={class:"text-sm text-gray-600 dark:text-gray-400"},Mb={key:1,class:"flex flex-col items-center justify-center py-10"},Ib={class:"text-gray-600 dark:text-gray-400"},Db={class:"mt-2 text-sm text-gray-500"},Lb={key:2,class:"space-y-6"},Ab={class:"rounded-lg bg-gray-50 p-4 dark:bg-gray-800"},zb={class:"mb-2 text-sm font-medium text-gray-700 dark:text-gray-300"},qb={class:"grid grid-cols-3 gap-4 text-center"},Rb={class:"text-2xl font-bold text-gray-900 dark:text-white"},Eb={class:"text-xs text-gray-500"},jb={class:"text-2xl font-bold text-green-600 dark:text-green-400"},Pb={class:"text-xs text-gray-500"},Ub={class:"text-2xl font-bold text-gray-400"},Bb={class:"text-xs text-gray-500"},Fb={key:0,class:"text-center text-sm text-amber-600 dark:text-amber-400"},Vb={key:3,class:"flex flex-col items-center justify-center py-10"},Nb={class:"text-gray-600 dark:text-gray-400"},Hb={key:0,class:"mt-4 w-full max-w-xs"},Ob={key:4,class:"flex flex-col items-center justify-center py-10"},Wb={class:"text-lg font-medium text-gray-900 dark:text-white"},Yb={class:"mt-2 text-sm text-gray-600 dark:text-gray-400"},Qb={key:5,class:"flex flex-col items-center justify-center py-10"},Kb={class:"text-lg font-medium text-gray-900 dark:text-white"},Gb={class:"mt-2 text-sm text-red-600 dark:text-red-400"},Jb={class:"flex w-full justify-end gap-2"},zk=ge({__name:"IncrementalImportModal",props:{modelValue:{type:Boolean},sessionId:{},sessionName:{}},emits:["update:modelValue","imported"],setup(l,{emit:o}){const t=l,c=o,{t:r}=ye(),m=f("select"),g=f(null),d=f(null),p=f(null),h=f(null),y=f(null),T=f(null),M=x({get:()=>t.modelValue,set:_=>c("update:modelValue",_)});de(M,_=>{_||C()});function C(){m.value="select",g.value=null,p.value=null,h.value=null,y.value=null,T.value=null}async function L({files:_,paths:A}){if(_.length>0)g.value={source:_[0],name:_[0].name};else{y.value=r("home.import.cannotReadPath");return}await $()}function z(){d.value?.openFileDialog()}async function $(){if(g.value){m.value="analyzing",y.value=null;try{const _=await na().analyzeIncrementalImport(t.sessionId,g.value.source);if(_.error){m.value="error",y.value=v(_.error);return}p.value={newMessageCount:_.newMessageCount,duplicateCount:_.duplicateCount,totalInFile:_.totalInFile},m.value="preview"}catch(_){m.value="error",y.value=String(_)}}}async function I(){if(g.value){m.value="importing",h.value={stage:"saving",progress:0,message:""};try{const _=await na().incrementalImport(t.sessionId,g.value.source,A=>{h.value=A});_.success?(T.value={newMessageCount:_.newMessageCount},m.value="done"):(m.value="error",y.value=v(_.error||"error.import_failed"))}catch(_){m.value="error",y.value=String(_)}}}function w(){T.value&&c("imported",T.value.newMessageCount),M.value=!1}function S(){m.value="select",g.value=null,p.value=null,y.value=null}function v(_){if(_.startsWith("error.")){const A=`home.import.errors.${_.slice(6)}`,j=r(A);return j!==A?j:_}return _}return(_,A)=>{const j=cs,U=_e,k=ds,b=Pe,q=We;return n(),K(q,{open:M.value,"onUpdate:open":A[1]||(A[1]=Y=>M.value=Y),title:a(r)("analysis.incremental.title")},{body:F(()=>[e("div",$b,[m.value==="select"?(n(),i("div",Cb,[e("p",Sb,s(a(r)("analysis.incremental.description",{name:l.sessionName})),1),u(j,{color:"info",variant:"soft",icon:"i-heroicons-information-circle",description:a(r)("analysis.incremental.homeAutoImportHint")},null,8,["description"]),u(a(us),{ref_key:"dropZoneRef",ref:d,accept:[".json",".jsonl",".txt"],class:"w-full",onFiles:L},{default:F(({isDragOver:Y})=>[e("div",{class:se(["flex cursor-pointer flex-col items-center justify-center rounded-xl border-2 border-dashed px-6 py-10 transition-colors",Y?"border-pink-500 bg-pink-50/50 dark:border-pink-400 dark:bg-pink-500/10":"border-gray-300 hover:border-pink-400 dark:border-gray-600 dark:hover:border-pink-500"]),onClick:Be(z,["stop"])},[u(U,{name:"i-heroicons-arrow-up-tray",class:"mb-3 h-10 w-10 text-gray-400"}),e("p",Tb,s(Y?a(r)("home.import.dropHint"):a(r)("analysis.incremental.dropHint")),1)],2)]),_:1},512)])):m.value==="analyzing"?(n(),i("div",Mb,[u(U,{name:"i-heroicons-arrow-path",class:"mb-4 h-10 w-10 animate-spin text-pink-500"}),e("p",Ib,s(a(r)("analysis.incremental.analyzing")),1),e("p",Db,s(g.value?.name),1)])):m.value==="preview"&&p.value?(n(),i("div",Lb,[e("div",Ab,[e("p",zb,s(g.value?.name),1),e("div",qb,[e("div",null,[e("p",Rb,s(p.value.totalInFile.toLocaleString()),1),e("p",Eb,s(a(r)("analysis.incremental.totalInFile")),1)]),e("div",null,[e("p",jb,s(p.value.newMessageCount.toLocaleString()),1),e("p",Pb,s(a(r)("analysis.incremental.newMessages")),1)]),e("div",null,[e("p",Ub,s(p.value.duplicateCount.toLocaleString()),1),e("p",Bb,s(a(r)("analysis.incremental.duplicates")),1)])])]),p.value.newMessageCount===0?(n(),i("p",Fb,[u(U,{name:"i-heroicons-exclamation-triangle",class:"mr-1 inline-block h-4 w-4"}),ee(" "+s(a(r)("analysis.incremental.noNewMessages")),1)])):E("",!0)])):m.value==="importing"?(n(),i("div",Vb,[u(U,{name:"i-heroicons-arrow-path",class:"mb-4 h-10 w-10 animate-spin text-pink-500"}),e("p",Nb,s(a(r)("analysis.incremental.importing")),1),h.value?(n(),i("div",Hb,[u(k,{value:h.value.progress,size:"sm"},null,8,["value"])])):E("",!0)])):m.value==="done"&&T.value?(n(),i("div",Ob,[u(U,{name:"i-heroicons-check-circle",class:"mb-4 h-12 w-12 text-green-500"}),e("p",Wb,s(a(r)("analysis.incremental.success")),1),e("p",Yb,s(a(r)("analysis.incremental.successDetail",{count:T.value.newMessageCount})),1)])):m.value==="error"?(n(),i("div",Qb,[u(U,{name:"i-heroicons-x-circle",class:"mb-4 h-12 w-12 text-red-500"}),e("p",Kb,s(a(r)("analysis.incremental.failed")),1),e("p",Gb,s(y.value),1)])):E("",!0)])]),footer:F(()=>[e("div",Jb,[m.value==="select"?(n(),K(b,{key:0,color:"neutral",variant:"ghost",onClick:A[0]||(A[0]=Y=>M.value=!1)},{default:F(()=>[ee(s(a(r)("common.cancel")),1)]),_:1})):m.value==="preview"?(n(),i(oe,{key:1},[u(b,{color:"neutral",variant:"ghost",onClick:S},{default:F(()=>[ee(s(a(r)("common.back")),1)]),_:1}),u(b,{color:"primary",disabled:!p.value||p.value.newMessageCount===0,onClick:I},{default:F(()=>[ee(s(a(r)("analysis.incremental.import",{count:p.value?.newMessageCount||0})),1)]),_:1},8,["disabled"])],64)):m.value==="done"||m.value==="error"?(n(),i(oe,{key:2},[m.value==="error"?(n(),K(b,{key:0,color:"neutral",variant:"ghost",onClick:S},{default:F(()=>[ee(s(a(r)("common.retry")),1)]),_:1})):E("",!0),u(b,{color:"primary",onClick:w},{default:F(()=>[ee(s(a(r)("common.done")),1)]),_:1})],64)):E("",!0)])]),_:1},8,["open","title"])}}}),Xb={key:0,class:"fixed right-0 top-1/3"},Zb={class:"no-capture flex flex-col items-center gap-0.5 rounded-l-lg border border-r-0 border-gray-200/60 bg-white py-1.5 shadow-sm dark:border-white/5 dark:bg-page-dark"},ek=["onClick"],tk={class:"mb-2 flex items-center justify-between"},ak={class:"px-0.5 text-[9px] font-bold uppercase tracking-widest text-gray-400 dark:text-gray-500"},sk={class:"flex flex-col gap-1.5"},nk=["onClick"],ok={class:"whitespace-nowrap"},qk=ge({__name:"ActionToolsPanel",emits:["openIncrementalImport","openSemanticIndex","openMemberManagement","openChatRecord","openMessageExport"],setup(l,{emit:o}){const{t}=ye(),c=ct(),{isToolsPanelMini:r,toolsPanelPosition:m,isToolsPanelOpen:g}=et(c),d=x(()=>m.value==="header"),p=x(()=>!d.value||g.value),h=f(null),y=o;function T($){y($),d.value&&(g.value=!1)}function M($){if(!d.value||!g.value)return;const I=$.target;I instanceof Element&&(h.value?.contains(I)||I.closest("[data-tools-panel-trigger]")||(g.value=!1))}const C=[{event:"openIncrementalImport",icon:"i-heroicons-plus-circle",hoverColor:"group-hover:text-pink-500",miniHoverBg:"hover:text-pink-500",labelKey:"analysis.tooltip.incrementalImport"},{event:"openSemanticIndex",icon:"i-heroicons-circle-stack",hoverColor:"group-hover:text-indigo-500",miniHoverBg:"hover:text-indigo-500",labelKey:"analysis.tooltip.semanticIndex"},{event:"openMemberManagement",icon:"i-heroicons-user-group",hoverColor:"group-hover:text-purple-500",miniHoverBg:"hover:text-purple-500",labelKey:"analysis.tooltip.memberManagement"},{event:"openChatRecord",icon:"i-heroicons-chat-bubble-bottom-center-text",hoverColor:"group-hover:text-cyan-500",miniHoverBg:"hover:text-cyan-500",labelKey:"analysis.tooltip.viewChatRecord"},{event:"openMessageExport",icon:"i-heroicons-document-arrow-down",hoverColor:"group-hover:text-green-500",miniHoverBg:"hover:text-green-500",labelKey:"analysis.messageExport.title"}],L=[{event:"openSemanticIndex",icon:"i-heroicons-circle-stack",hoverColor:"group-hover:text-indigo-500",miniHoverBg:"hover:text-indigo-500",labelKey:"analysis.tooltip.semanticIndex"},{event:"openMessageExport",icon:"i-heroicons-document-arrow-down",hoverColor:"group-hover:text-green-500",miniHoverBg:"hover:text-green-500",labelKey:"analysis.messageExport.title"}],z=x(()=>d.value?L:C);return de(m,()=>{g.value=!1}),Ve(()=>{document.addEventListener("mousedown",M)}),Ct(()=>{document.removeEventListener("mousedown",M)}),($,I)=>{const w=_e,S=pt;return!d.value&&a(r)?(n(),i("div",Xb,[e("div",Zb,[(n(),i(oe,null,ce(C,v=>u(S,{key:v.event,text:a(t)(v.labelKey),popper:{placement:"left"}},{default:F(()=>[e("button",{class:se(["flex h-7 w-7 items-center justify-center rounded-md text-gray-400 transition-colors hover:bg-gray-100 dark:text-gray-500 dark:hover:bg-white/5",v.miniHoverBg]),onClick:_=>T(v.event)},[u(w,{name:v.icon,class:"h-3.5 w-3.5"},null,8,["name"])],10,ek)]),_:2},1032,["text"])),64)),I[2]||(I[2]=e("div",{class:"my-0.5 h-px w-4 bg-gray-200 dark:bg-gray-700"},null,-1)),u(S,{text:a(t)("analysis.toolsPanel.exitMini"),popper:{placement:"left"}},{default:F(()=>[e("button",{class:"flex h-7 w-7 items-center justify-center rounded-md text-gray-300 transition-colors hover:bg-gray-100 hover:text-gray-500 dark:text-gray-600 dark:hover:bg-white/5 dark:hover:text-gray-400",onClick:I[0]||(I[0]=v=>a(c).toggleToolsPanelMini())},[u(w,{name:"i-heroicons-arrows-pointing-out",class:"h-3 w-3"})])]),_:1},8,["text"])])])):(n(),i("div",{key:1,class:se(["fixed right-0 z-40",d.value?"top-14":"top-1/3"])},[e("div",{class:se(["absolute right-0 top-0 transition-all duration-250 ease-in-out",p.value?"translate-x-0 opacity-100":"pointer-events-none translate-x-full opacity-0"])},[e("div",{ref_key:"panelRef",ref:h,class:"no-capture flex w-40 flex-col rounded-l-xl border border-r-0 border-gray-200/60 bg-white p-3 shadow-overlay dark:border-white/5 dark:bg-page-dark"},[e("div",tk,[e("span",ak,s(a(t)("analysis.overview.tools")),1),d.value?E("",!0):(n(),K(S,{key:0,text:a(t)("analysis.toolsPanel.miniMode"),popper:{placement:"left"}},{default:F(()=>[e("button",{class:"flex h-5 w-5 items-center justify-center rounded text-gray-300 transition-colors hover:text-gray-500 dark:text-gray-600 dark:hover:text-gray-400",onClick:I[1]||(I[1]=v=>a(c).toggleToolsPanelMini())},[u(w,{name:"i-heroicons-arrows-pointing-in",class:"h-3 w-3"})])]),_:1},8,["text"]))]),e("div",sk,[(n(!0),i(oe,null,ce(z.value,v=>(n(),i("button",{key:v.event,class:"group flex w-full items-center gap-2 rounded-md px-2 py-1.5 text-xs font-medium text-gray-600 transition-all hover:bg-gray-100 hover:text-gray-900 dark:text-gray-400 dark:hover:bg-white/5 dark:hover:text-white",onClick:_=>T(v.event)},[u(w,{name:v.icon,class:se(["h-3.5 w-3.5 text-gray-400 transition-colors dark:text-gray-500",v.hoverColor])},null,8,["name","class"]),e("span",ok,s(a(t)(v.labelKey)),1)],8,nk))),128))])],512)],2)],2))}}});export{wk as C,_k as D,bk as L,Dk as M,Lt as _,xk as a,Ck as b,Ye as c,Ot as d,Sk as e,nh as f,Tk as g,Mk as h,Ik as i,fk as j,Lk as k,qk as l,Ak as m,zk as n,kk as o,$k as u};