@lsamien/yaovi 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build-info.json +24 -3
- package/dist/assets/{AboutDialog-BW25cB-W.js → AboutDialog-CBKv505Y.js} +2 -2
- package/dist/assets/AboutDialog-CBKv505Y.js.map +1 -0
- package/dist/assets/{BotAutomationsView-BoK2R918.js → BotAutomationsView-S3aHciek.js} +2 -2
- package/dist/assets/{BotAutomationsView-BoK2R918.js.map → BotAutomationsView-S3aHciek.js.map} +1 -1
- package/dist/assets/{BotControlSettingsPanel-BbhD2eC0.js → BotControlSettingsPanel-DJF4oA6g.js} +2 -2
- package/dist/assets/{BotControlSettingsPanel-BbhD2eC0.js.map → BotControlSettingsPanel-DJF4oA6g.js.map} +1 -1
- package/dist/assets/{BotPluginsDialog-DjwFw-lt.js → BotPluginsDialog-BVOQ3DTp.js} +2 -2
- package/dist/assets/{BotPluginsDialog-DjwFw-lt.js.map → BotPluginsDialog-BVOQ3DTp.js.map} +1 -1
- package/dist/assets/{BotSettingsPanel-DLmnL6pH.js → BotSettingsPanel-CEH3KSAO.js} +3 -3
- package/dist/assets/{BotSettingsPanel-DLmnL6pH.js.map → BotSettingsPanel-CEH3KSAO.js.map} +1 -1
- package/dist/assets/{ComputerPanel-CRIF1YEd.js → ComputerPanel-CC-xkAxr.js} +2 -2
- package/dist/assets/{ComputerPanel-CRIF1YEd.js.map → ComputerPanel-CC-xkAxr.js.map} +1 -1
- package/dist/assets/{ComputerViewerView-CizYWH2R.js → ComputerViewerView-CEQrOmy7.js} +2 -2
- package/dist/assets/{ComputerViewerView-CizYWH2R.js.map → ComputerViewerView-CEQrOmy7.js.map} +1 -1
- package/dist/assets/{ConversationsView-h94_iPtv.css → ConversationsView-B6JNGLt_.css} +1 -1
- package/dist/assets/{ConversationsView-1igFR9VY.js → ConversationsView-CzFWn-79.js} +8 -8
- package/dist/assets/ConversationsView-CzFWn-79.js.map +1 -0
- package/dist/assets/{DevicePairingDialog-orOS4xqu.js → DevicePairingDialog-ByYk05DC.js} +2 -2
- package/dist/assets/{DevicePairingDialog-orOS4xqu.js.map → DevicePairingDialog-ByYk05DC.js.map} +1 -1
- package/dist/assets/{LocalVmSettingsPanel-DzM--Lpg.js → LocalVmSettingsPanel-DBkqouAU.js} +2 -2
- package/dist/assets/{LocalVmSettingsPanel-DzM--Lpg.js.map → LocalVmSettingsPanel-DBkqouAU.js.map} +1 -1
- package/dist/assets/{ProviderLoginDialog-Bw5KVMfi.js → ProviderLoginDialog-DdPS62uM.js} +2 -2
- package/dist/assets/{ProviderLoginDialog-Bw5KVMfi.js.map → ProviderLoginDialog-DdPS62uM.js.map} +1 -1
- package/dist/assets/{RunnerSettingsPanel-B-fwuBEs.js → RunnerSettingsPanel-gzA2xzOg.js} +2 -2
- package/dist/assets/{RunnerSettingsPanel-B-fwuBEs.js.map → RunnerSettingsPanel-gzA2xzOg.js.map} +1 -1
- package/dist/assets/{StandaloneDialog-7GkhtRlT.js → StandaloneDialog-B9HCNEFb.js} +2 -2
- package/dist/assets/{StandaloneDialog-7GkhtRlT.js.map → StandaloneDialog-B9HCNEFb.js.map} +1 -1
- package/dist/assets/{UpdateCheckDialog-DYiM4xBv.js → UpdateCheckDialog-djkXTQgD.js} +2 -2
- package/dist/assets/{UpdateCheckDialog-DYiM4xBv.js.map → UpdateCheckDialog-djkXTQgD.js.map} +1 -1
- package/dist/assets/{UsageView-D1cjS1hy.js → UsageView-DFaWBB40.js} +2 -2
- package/dist/assets/{UsageView-D1cjS1hy.js.map → UsageView-DFaWBB40.js.map} +1 -1
- package/dist/assets/{WorkspaceKnowledgePanel-DcGdLRS1.js → WorkspaceKnowledgePanel-In2a_s_z.js} +2 -2
- package/dist/assets/{WorkspaceKnowledgePanel-DcGdLRS1.js.map → WorkspaceKnowledgePanel-In2a_s_z.js.map} +1 -1
- package/dist/assets/{WorkspaceRoutinesPanel-DLntimKs.js → WorkspaceRoutinesPanel-zOxFoqML.js} +2 -2
- package/dist/assets/{WorkspaceRoutinesPanel-DLntimKs.js.map → WorkspaceRoutinesPanel-zOxFoqML.js.map} +1 -1
- package/dist/assets/{WorkstreamsView-DMoeV8Eu.js → WorkstreamsView-HvlivC3b.js} +2 -2
- package/dist/assets/{WorkstreamsView-DMoeV8Eu.js.map → WorkstreamsView-HvlivC3b.js.map} +1 -1
- package/dist/assets/{index-D0pMYnOi.js → index-BPE9bBla.js} +3 -3
- package/dist/assets/{index-D0pMYnOi.js.map → index-BPE9bBla.js.map} +1 -1
- package/dist/assets/{pdf-BCisgslg.js → pdf-Q2a37aK5.js} +2 -2
- package/dist/assets/{pdf-BCisgslg.js.map → pdf-Q2a37aK5.js.map} +1 -1
- package/dist/index.html +1 -1
- package/dist-server/server/botControl.js +12 -0
- package/dist-server/server/harness/agentRuntime.js +22 -8
- package/dist-server/server/workspaceDialoguePolicy.js +3 -1
- package/dist-server/server/workspaceKnowledge.js +25 -16
- package/dist-server/server/workspaceMemoryContext.js +75 -19
- package/dist-server/server/workspacePrompt.js +9 -2
- package/dist-server/server/workspaceRuntime.js +35 -13
- package/package.json +2 -2
- package/release.json +3 -3
- package/runtime/hermes/hermes_state_messages.py +17 -0
- package/runtime/worker.py +34 -1
- package/dist/assets/AboutDialog-BW25cB-W.js.map +0 -1
- package/dist/assets/ConversationsView-1igFR9VY.js.map +0 -1
- package/dist-server/server/harness/context.js +0 -88
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/BotSettingsPanel-
|
|
2
|
-
import{i as e,n as t,t as n}from"./rolldown-runtime-Dd_uD5pT.js";import{$ as r,A as i,B as a,D as o,Dt as s,E as c,Et as l,F as u,G as d,H as f,L as p,M as m,P as h,Q as g,R as _,T as v,Tt as y,U as b,V as x,W as S,Y as C,_ as w,a as T,b as E,d as D,et as O,f as k,g as A,i as j,it as M,k as N,l as P,m as F,nt as I,o as L,ot as R,p as z,s as B,t as V,u as H,v as U,w as W,x as ee,y as te}from"./_plugin-vue_export-helper-BumXM028.js";import{_ as G,a as K,c as ne,d as re,f as ie,g as q,h as ae,i as J,l as oe,m as se,n as ce,o as le,p as ue,r as de,s as fe,t as pe,u as me}from"./WorkspaceKnowledgePanel-
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/BotSettingsPanel-CEH3KSAO.js","assets/_plugin-vue_export-helper-BumXM028.js","assets/WorkspaceKnowledgePanel-In2a_s_z.js","assets/index-BPE9bBla.js","assets/rolldown-runtime-Dd_uD5pT.js","assets/index-BQLAALTS.css","assets/ProviderLoginDialog-DdPS62uM.js","assets/StandaloneDialog-B9HCNEFb.js","assets/StandaloneDialog-BS6Ta2zL.css","assets/ProviderLoginDialog-Ad7_Yh7J.css","assets/id-mzBN_4Vw.js","assets/WorkspaceKnowledgePanel-B_NER3l9.css","assets/BotSettingsPanel-DoVgq5sG.css","assets/BotControlSettingsPanel-DJF4oA6g.js","assets/BotControlSettingsPanel-UkxbeK6r.css","assets/AboutDialog-CBKv505Y.js","assets/AboutDialog-UVDKIyOS.css","assets/DevicePairingDialog-ByYk05DC.js","assets/DevicePairingDialog-Diooh5fg.css","assets/UpdateCheckDialog-djkXTQgD.js","assets/UpdateCheckDialog-CRlyWnE7.css","assets/BotPluginsDialog-BVOQ3DTp.js","assets/BotPluginsDialog-CdVYgf_5.css","assets/pdf-Q2a37aK5.js","assets/docx-preview-DZusoPTe.js"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{i as e,n as t,t as n}from"./rolldown-runtime-Dd_uD5pT.js";import{$ as r,A as i,B as a,D as o,Dt as s,E as c,Et as l,F as u,G as d,H as f,L as p,M as m,P as h,Q as g,R as _,T as v,Tt as y,U as b,V as x,W as S,Y as C,_ as w,a as T,b as E,d as D,et as O,f as k,g as A,i as j,it as M,k as N,l as P,m as F,nt as I,o as L,ot as R,p as z,s as B,t as V,u as H,v as U,w as W,x as ee,y as te}from"./_plugin-vue_export-helper-BumXM028.js";import{_ as G,a as K,c as ne,d as re,f as ie,g as q,h as ae,i as J,l as oe,m as se,n as ce,o as le,p as ue,r as de,s as fe,t as pe,u as me}from"./WorkspaceKnowledgePanel-In2a_s_z.js";import{A as he,B as ge,C as _e,D as ve,E as ye,G as Y,H as be,I as xe,J as X,K as Se,L as Ce,M as Z,N as we,O as Te,P as Ee,R as De,S as Oe,T as ke,U as Ae,V as je,W as Me,_ as Ne,a as Pe,b as Fe,c as Ie,d as Le,f as Re,g as ze,h as Be,i as Ve,j as He,k as Ue,l as We,m as Ge,n as Ke,o as qe,p as Je,q as Ye,r as Xe,s as Ze,t as Qe,u as $e,v as et,w as Q,x as tt,y as nt,z as rt}from"./index-BPE9bBla.js";import{t as it}from"./StandaloneDialog-B9HCNEFb.js";import{a as at,c as ot,i as st,l as ct,n as lt,o as ut,r as dt,s as ft}from"./ProviderLoginDialog-DdPS62uM.js";import{n as pt,t as mt}from"./id-mzBN_4Vw.js";import"./RunnerSettingsPanel-gzA2xzOg.js";import{t as ht}from"./WorkspaceRoutinesPanel-zOxFoqML.js";import{n as gt,t as _t}from"./ComputerPanel-CC-xkAxr.js";import{o as vt,t as yt}from"./backgroundTaskPresentation-CJMcreMr.js";var bt={xmlns:`http://www.w3.org/2000/svg`,"xmlns:xlink":`http://www.w3.org/1999/xlink`,viewBox:`0 0 512 512`},xt=E({name:`AddOutline`,render:function(e,t){return u(),F(`svg`,bt,t[0]||=[D(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`32`,d:`M256 112v288`},null,-1),D(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`32`,d:`M400 256H112`},null,-1)])}}),St={xmlns:`http://www.w3.org/2000/svg`,"xmlns:xlink":`http://www.w3.org/1999/xlink`,viewBox:`0 0 512 512`},Ct=E({name:`CheckmarkCircle`,render:function(e,t){return u(),F(`svg`,St,t[0]||=[D(`path`,{d:`M256 48C141.31 48 48 141.31 48 256s93.31 208 208 208s208-93.31 208-208S370.69 48 256 48zm108.25 138.29l-134.4 160a16 16 0 0 1-12 5.71h-.27a16 16 0 0 1-11.89-5.3l-57.6-64a16 16 0 1 1 23.78-21.4l45.29 50.32l122.59-145.91a16 16 0 0 1 24.5 20.58z`,fill:`currentColor`},null,-1)])}}),wt={xmlns:`http://www.w3.org/2000/svg`,"xmlns:xlink":`http://www.w3.org/1999/xlink`,viewBox:`0 0 512 512`},Tt=E({name:`ChevronBackOutline`,render:function(e,t){return u(),F(`svg`,wt,t[0]||=[D(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`48`,d:`M328 112L184 256l144 144`},null,-1)])}}),Et={xmlns:`http://www.w3.org/2000/svg`,"xmlns:xlink":`http://www.w3.org/1999/xlink`,viewBox:`0 0 512 512`},Dt=E({name:`CloseOutline`,render:function(e,t){return u(),F(`svg`,Et,t[0]||=[D(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`32`,d:`M368 368L144 144`},null,-1),D(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`32`,d:`M368 144L144 368`},null,-1)])}}),Ot={xmlns:`http://www.w3.org/2000/svg`,"xmlns:xlink":`http://www.w3.org/1999/xlink`,viewBox:`0 0 512 512`},kt=E({name:`DownloadOutline`,render:function(e,t){return u(),F(`svg`,Ot,t[0]||=[D(`path`,{d:`M336 176h40a40 40 0 0 1 40 40v208a40 40 0 0 1-40 40H136a40 40 0 0 1-40-40V216a40 40 0 0 1 40-40h40`,fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`32`},null,-1),D(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`32`,d:`M176 272l80 80l80-80`},null,-1),D(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`32`,d:`M256 48v288`},null,-1)])}}),At={xmlns:`http://www.w3.org/2000/svg`,"xmlns:xlink":`http://www.w3.org/1999/xlink`,viewBox:`0 0 512 512`},jt=E({name:`EllipseOutline`,render:function(e,t){return u(),F(`svg`,At,t[0]||=[D(`circle`,{cx:`256`,cy:`256`,r:`192`,fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`32`},null,-1)])}}),Mt=`bot-permissions-v2`,Nt=[`model.use`,`media.image`,`media.video`,`media.audio`,`web.read`,`browser.use`,`files.read`,`files.write`,`terminal.execute`,`computer.view`,`computer.control`,`skills.use`,`skills.manage`,`apps.read`,`apps.write`,`memory.read`,`memory.write`,`bots.collaborate`,`bots.manage`,`tasks.delegate`,`automation.manage`],Pt={"model.use":`模型使用`,"media.image":`图片生成`,"media.video":`视频生成`,"media.audio":`语音生成`,"web.read":`搜索与网页`,"browser.use":`浏览器操作`,"files.read":`读取文件`,"files.write":`写入文件`,"terminal.execute":`执行命令`,"computer.view":`查看屏幕`,"computer.control":`控制电脑`,"skills.use":`使用技能`,"skills.manage":`修改技能`,"apps.read":`读取连接应用`,"apps.write":`修改连接应用`,"memory.read":`读取知识与记忆`,"memory.write":`维护知识与记忆`,"bots.collaborate":`联系同伴`,"bots.manage":`管理 Bot`,"tasks.delegate":`分派后台任务`,"automation.manage":`管理自动化`},Ft={allow:`允许`,ask:`执行前询问`,deny:`禁止`},It=[`aria-busy`],Lt={key:0,class:`full-access`},Rt=[`disabled`],zt={key:1,class:`full-access`},Bt=[`disabled`],Vt={value:null},Ht=[`disabled`],Ut={class:`toggle`},Wt=[`disabled`],Gt={class:`toggle`},Kt=[`disabled`],qt=[`value`,`disabled`],Jt=[`value`,`disabled`],Yt={key:1},Xt=[`disabled`,`onClick`],Zt={key:2,role:`status`},$=[`onUpdate:modelValue`,`disabled`],Qt=[`value`],$t=[`onUpdate:modelValue`,`disabled`],en={key:0,value:`allow`},tn=[`value`,`disabled`,`onInput`],nn=[`disabled`,`onClick`],rn=[`disabled`],an={key:3},on=[`onUpdate:modelValue`,`disabled`],sn=[`value`],cn=[`value`,`disabled`,`onInput`],ln=[`disabled`,`onClick`],un=[`disabled`],dn={class:`actions`},fn=[`disabled`],pn=[`disabled`],mn={key:1,role:`status`},hn={key:2,class:`error`,role:`alert`},gn={key:3,role:`status`},_n=V(E({__name:`PermissionSettingsPanel`,props:{kind:{},targetId:{},embedded:{type:Boolean}},emits:[`dirty-change`,`busy-change`,`changed`],setup(e,{emit:t}){let n=e,r=t,o=O(),c=O(``),l=O(!1),m=O(``),h=O(``),g=H(()=>!!n.kind),_=O(!1),v=H(()=>n.kind?`/api/app/${n.kind}/${encodeURIComponent(n.targetId??``)}/restrictions`:`/api/app/permissions`),b=H(()=>o.value),x=H(()=>o.value),C=H(()=>n.kind===`agents`?x.value?.fullAccess??_.value:!g.value&&!!b.value?.fullAccess),E=H(()=>!!o.value&&JSON.stringify(o.value)!==c.value);f(E,e=>r(`dirty-change`,e)),f(l,e=>r(`busy-change`,e));let A=0,j=!0;async function M(){let e=++A;m.value=``;try{let[t,r]=await Promise.all([Q(v.value),n.kind===`agents`?Q(`/api/app/permissions`):void 0]);j&&e===A&&(o.value=n.kind===`agents`?{...t,fullAccess:t.fullAccess??null}:n.kind?t:{...t,fullAccess:!!t.fullAccess},_.value=r?.fullAccess??!1,c.value=JSON.stringify(o.value))}catch(t){j&&e===A&&(m.value=t instanceof Error?t.message:`无法读取权限`)}}f(v,()=>{o.value=void 0,M()},{immediate:!0});function N(){o.value?.rules.push({capability:`bots.manage`,effect:`ask`,resources:[`*`]})}function P(e,t){o.value&&(o.value.rules[e].resources=t.target.value.split(`
|
|
3
3
|
`))}let I=e=>e.map(e=>e.trim()).filter(Boolean);async function L(){if(!o.value||l.value)return;l.value=!0,m.value=``,h.value=``;let{revision:e,...t}=o.value;try{let i=await Q(v.value,{method:`PUT`,body:JSON.parse(JSON.stringify(g.value?{expectedRevision:e,...n.kind===`agents`?{fullAccess:x.value.fullAccess??null}:{},rules:t.rules.map(e=>({...e,resources:I(e.resources)})),scopes:(x.value?.scopes??[]).map(e=>({...e,resources:I(e.resources)}))}:{expectedRevision:e,fullAccess:b.value.fullAccess??!1,rules:t.rules.map(e=>({...e,resources:I(e.resources)})),reviewEnabled:b.value.reviewEnabled,askInstructions:I(b.value.askInstructions),allowInstructions:I(b.value.allowInstructions),messaging:b.value.messaging}))});j&&(o.value=i,c.value=JSON.stringify(i),h.value=`权限设置已保存`,r(`changed`))}catch(e){j&&(m.value=e instanceof Error?e.message:`保存失败`)}finally{j&&(l.value=!1)}}async function B(e){if(!l.value){l.value=!0;try{await Q(`/api/app/permissions/automatic-rules/${encodeURIComponent(e)}`,{method:`DELETE`}),await M(),r(`changed`)}catch(e){m.value=e instanceof Error?e.message:`撤销失败`}finally{l.value=!1}}}function V(e){return e.target.value.split(`
|
|
4
4
|
`)}return i(()=>{j=!1,A++,r(`dirty-change`,!1),r(`busy-change`,!1)}),(t,r)=>(u(),F(`section`,{class:y([`permission-settings`,{"permission-settings--embedded":e.embedded}]),"aria-busy":l.value,"aria-label":`权限与操作审查`},[(u(),k(a(e.embedded?`h4`:`h3`),null,{default:S(()=>[w(s(n.kind===`agents`?`Bot 授权方式`:g.value?`额外限制`:`服务器权限与操作审查`),1)]),_:1})),D(`p`,null,s(n.kind===`agents`?`独立选择优先于服务器默认,并适用于此 Bot 的单聊、群聊和后台任务。`:g.value?`按规则授权的 Bot 会应用这些额外限制;完全开放的 Bot 按自身授权方式执行。`:`设置 Bot 默认使用的授权方式。每个 Bot 都可以独立选择,不受默认方式覆盖。`),1),o.value?(u(),F(T,{key:0},[!g.value&&b.value?(u(),F(`div`,Lt,[D(`label`,null,[r[8]||=w(` 默认授权方式 `,-1),d(D(`select`,{"onUpdate:modelValue":r[0]||=e=>b.value.fullAccess=e,disabled:l.value,"aria-label":`默认授权方式`,"aria-describedby":`full-access-description`},[...r[7]||=[D(`option`,{value:!1},`按规则授权`,-1),D(`option`,{value:!0},`完全开放授权`,-1)]],8,Rt),[[Me,b.value.fullAccess]])]),r[9]||=D(`p`,{id:`full-access-description`},` 仅影响选择“跟随默认”的 Bot。完全开放时直接执行、不再询问授权;按规则授权时使用下方规则和审查。设备连接与系统权限仍需可用。 `,-1)])):z(``,!0),n.kind===`agents`&&x.value?(u(),F(`div`,zt,[D(`label`,null,[r[12]||=w(` 此 Bot 的授权方式 `,-1),d(D(`select`,{"onUpdate:modelValue":r[1]||=e=>x.value.fullAccess=e,disabled:l.value,"aria-label":`此 Bot 的授权方式`},[D(`option`,Vt,`跟随默认(`+s(_.value?`完全开放授权`:`按规则授权`)+`)`,1),r[10]||=D(`option`,{value:!0},`完全开放授权`,-1),r[11]||=D(`option`,{value:!1},`按规则授权`,-1)],8,Bt),[[Me,x.value.fullAccess]])]),D(`p`,null,s(C.value?`此 Bot 的所有操作直接执行,不再询问授权;原有细分规则暂停生效并保留。`:`此 Bot 使用服务器规则、额外限制和操作审查。`),1)])):z(``,!0),d(D(`fieldset`,{disabled:l.value||n.kind===`agents`&&C.value},[!g.value&&b.value?(u(),F(T,{key:0},[D(`label`,Ut,[d(D(`input`,{"onUpdate:modelValue":r[2]||=e=>b.value.reviewEnabled=e,type:`checkbox`,disabled:l.value},null,8,Wt),[[je,b.value.reviewEnabled]]),r[13]||=w(`启用智能操作审查`,-1)]),D(`label`,Gt,[d(D(`input`,{"onUpdate:modelValue":r[3]||=e=>b.value.messaging=e,type:`checkbox`,disabled:l.value},null,8,Kt),[[je,b.value.messaging]]),r[14]||=w(`允许 Bot 之间通信与交接工作`,-1)]),D(`label`,null,[r[15]||=w(`始终询问规则`,-1),D(`textarea`,{value:b.value.askInstructions.join(`
|
|
5
5
|
`),disabled:l.value,rows:`3`,placeholder:`例如:操作生产数据库之前询问我`,onInput:r[4]||=e=>b.value.askInstructions=V(e)},null,40,qt)]),D(`label`,null,[r[16]||=w(`允许自动处理规则`,-1),D(`textarea`,{value:b.value.allowInstructions.join(`
|
|
@@ -16,7 +16,7 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho
|
|
|
16
16
|
`),set:e=>i({cidrs:e.split(/[,\n]+/).map(e=>e.trim()).filter(Boolean)})}),o=H({get:()=>n.modelValue.domains.join(`
|
|
17
17
|
`),set:e=>i({domains:e.split(/[,\n]+/).map(e=>e.trim()).filter(Boolean)})}),c=O(``),l=O(443),f=O(`lan-tcp`);return(t,n)=>(u(),F(`fieldset`,{class:`vm-lan`,disabled:e.disabled},[n[18]||=D(`legend`,null,`内网访问`,-1),D(`label`,ap,[D(`input`,{type:`checkbox`,checked:e.modelValue.enabled,onChange:n[0]||=e=>i({enabled:e.target.checked})},null,40,op),n[8]||=w(`允许访问指定内网`,-1)]),n[19]||=D(`p`,null,`本机托管虚拟机与托管浏览器共用此白名单,内网通过服务器网络直连;浏览器无需启动虚拟机。`,-1),e.modelValue.enabled?(u(),F(T,{key:0},[D(`label`,null,[n[9]||=w(`允许的 IP 或网段`,-1),d(D(`textarea`,{"onUpdate:modelValue":n[1]||=e=>a.value=e,rows:`3`,placeholder:`每行一个 IPv4 地址或网段,例如 10.0.0.100/32`},null,512),[[Y,a.value]])]),n[16]||=D(`p`,null,`虚拟机可用获准的 TCP 服务;托管浏览器仅访问其中的 HTTP(S) 网页,支持 1–65535 端口。服务器自身地址仍受保护。`,-1),D(`label`,null,[n[10]||=w(`内网域名范围(可选)`,-1),d(D(`textarea`,{"onUpdate:modelValue":n[2]||=e=>o.value=e,rows:`2`,placeholder:`每行一个域名后缀,例如 nas.internal`},null,512),[[Y,o.value]])]),D(`label`,sp,[D(`input`,{type:`checkbox`,checked:e.modelValue.icmpEcho,onChange:n[3]||=e=>i({icmpEcho:e.target.checked})},null,40,cp),n[11]||=w(`允许真实 IPv4 ping`,-1)]),n[17]||=D(`p`,null,`ping 使用真实目标回复,首期支持数字 IPv4 地址。旧网络镜像需要重新准备。`,-1),e.environments?.length?(u(),F(`p`,lp,`此名单也供本机托管浏览器使用。以下共享虚拟环境的全部成员使用相同范围:`+s(e.environments.map(e=>`${e.name}(${e.memberCount} 个成员)`).join(`、`)),1)):(u(),F(`p`,up,`作用于本机托管虚拟机和支持内网能力的托管浏览器;外部节点与 Compose 不自动继承。`)),D(`div`,dp,[D(`label`,null,[n[12]||=w(`测试目标`,-1),d(D(`input`,{"onUpdate:modelValue":n[4]||=e=>c.value=e,placeholder:`已保存范围内的 IPv4 地址或域名`},null,512),[[Y,c.value]])]),D(`label`,null,[n[14]||=w(`检测方式`,-1),d(D(`select`,{"onUpdate:modelValue":n[5]||=e=>f.value=e},[n[13]||=D(`option`,{value:`lan-tcp`},`TCP 服务响应`,-1),D(`option`,{value:`lan-icmp`,disabled:!e.modelValue.icmpEcho},`真实 ping`,8,fp)],512),[[Me,f.value]])]),f.value===`lan-tcp`?(u(),F(`label`,pp,[n[15]||=w(`服务端口`,-1),d(D(`input`,{"onUpdate:modelValue":n[6]||=e=>l.value=e,type:`number`,min:`1`,max:`65535`},null,512),[[Y,l.value,void 0,{number:!0}]])])):z(``,!0),D(`button`,{type:`button`,disabled:e.dirty||!c.value.trim(),onClick:n[7]||=e=>r(`test`,{kind:f.value,target:c.value.trim(),...f.value===`lan-tcp`?{port:l.value}:{}})},`测试已保存的内网设置`,8,mp)])],64)):z(``,!0)],8,ip))}}),[[`__scopeId`,`data-v-dc7dbc71`]]),gp=[`aria-busy`],_p={key:1,role:`status`},vp={key:2},yp=[`disabled`],bp={key:0},xp={key:1},Sp={key:2},Cp=[`disabled`],wp={key:1},Tp=[`disabled`,`onClick`],Ep=[`disabled`,`onClick`],Dp=[`disabled`],Op={key:0,role:`alert`},kp={class:`actions`},Ap=[`disabled`],jp=[`disabled`],Mp=[`disabled`],Np={key:0},Pp={key:0},Fp={class:`check`},Ip=[`disabled`],Lp=[`disabled`],Rp=[`disabled`],zp=[`disabled`],Bp=[`disabled`],Vp={key:0,class:`check`},Hp=[`disabled`],Up=[`placeholder`,`disabled`],Wp={class:`actions`},Gp=[`disabled`],Kp=[`disabled`],qp=[`disabled`],Jp=`/api/app/admin/execution`,Yp=V(E({__name:`ExecutionSettingsPanel`,props:{section:{default:`all`}},emits:[`dirty-change`,`busy-change`],setup(e,{emit:t}){let n=e,r=t,i=O(``),a=O(``),c=O(!1),l=()=>g.value?.network?JSON.stringify({policy:g.value.network.policy,lan:g.value.network.lan}):JSON.stringify(g.value?.proxy),h=O(),g=O(),_=O(!1),v=O(``),y=O(``),b=O(`none`),x=O(``),S=O(!1),C=O(),E=O(!1),A=H(()=>!!g.value&&([`all`,`environment`].includes(n.section)&&b.value!==i.value||[`all`,`proxy`].includes(n.section)&&(l()!==a.value||!!x.value||S.value)||[`all`,`resources`].includes(n.section)&&E.value));f(A,e=>r(`dirty-change`,e)),f(c,e=>r(`busy-change`,e),{immediate:!0});async function j(){g.value=await Q(Jp),b.value=g.value.execution.mode,i.value=b.value,a.value=l()}async function M(e,t,n=!0){if(!_.value){_.value=!0,c.value=n,v.value=``,y.value=``;try{await e(),t&&(y.value=t)}catch(e){v.value=e instanceof Error?e.message:`保存失败`,await o(),h.value?.focus()}finally{_.value=!1,c.value=!1}}}function N(e){C.value=e,E.value=!0}async function P(){E.value=!1,await M(j,`系统授权已保存`)}async function I(){await M(async()=>{await Q(`/api/app/admin/execution/environment`,{method:`PUT`,body:{mode:b.value,revision:g.value.execution.revision}}),await j()},`默认运行环境已保存,从下一轮任务生效`)}async function L(){await M(async()=>{if(g.value.network){await Q(`/api/app/admin/execution/network`,{method:`PUT`,timeoutMs:6e4,body:{revision:g.value.network.revision,policy:{mode:g.value.network.policy.mode,...g.value.network.policy.mode===`proxy`?{proxyId:g.value.network.policy.proxyId}:{}},...g.value.network.lan?{lan:{...g.value.network.lan}}:{}}}),await j();return}let{hasPassword:e,...t}=g.value.proxy;await Q(`/api/app/admin/execution/proxy`,{method:`PUT`,timeoutMs:6e4,body:{...t,...S.value?{password:``}:x.value?{password:x.value}:{}}}),x.value=``,S.value=!1,await j()},`网络配置已保存,请查看各节点生效状态`)}async function B(e){await M(async()=>{let t=await Q(`/api/app/admin/execution/network/test`,{method:`POST`,timeoutMs:6e4,body:e}),n=t.nodes.filter(e=>!e.ok);if(n.length)throw Error(n.map(e=>`${e.name}:${e.error}`).join(`;`));y.value=t.nodes.map(e=>`${e.name}:${e.result?.message||`目标检测完成`}`).join(`;`)},``,!0)}async function V(){await M(async()=>{let e=await Q(`/api/app/admin/execution/proxy/test`,{method:`POST`,timeoutMs:6e4,body:{}});if(e.nodes.some(e=>!e.ok))throw Error(e.nodes.filter(e=>!e.ok).map(e=>`${e.name}:${e.error||`代理连接失败,请核对地址和认证`}`).join(`;`))},`虚拟机网络检查通过`)}return m(()=>M(j,``,!1)),(t,n)=>(u(),F(`div`,{class:`execution-settings`,"aria-busy":_.value},[v.value?(u(),F(`p`,{key:0,ref_key:`errorBox`,ref:h,role:`alert`,tabindex:`-1`},s(v.value),513)):z(``,!0),y.value?(u(),F(`p`,_p,s(y.value),1)):z(``,!0),g.value?(u(),F(T,{key:3},[e.section===`all`||e.section===`environment`?(u(),F(`form`,{key:0,onSubmit:X(I,[`prevent`])},[n[16]||=D(`h4`,null,`默认运行环境`,-1),n[17]||=D(`p`,null,`所有 Bot 在未指定目标时优先使用所选环境,从下一轮任务生效。其他已开启且获授权的环境仍可使用。Yaovi 继续负责推理与调度。`,-1),D(`label`,null,[n[15]||=w(`默认执行位置`,-1),d(D(`select`,{"onUpdate:modelValue":n[0]||=e=>b.value=e,disabled:_.value},[...n[14]||=[D(`option`,{value:`none`},`不指定环境`,-1),D(`option`,{value:`server`},`服务器本机 · Yaovi 所在节点`,-1),D(`option`,{value:`virtual`},`虚拟环境 · Bot 对应的隔离环境`,-1)]],8,yp),[[Me,b.value]])]),b.value===`none`?(u(),F(`p`,bp,`不预设执行位置,按任务选择已允许的环境;目标不明确时再询问。`)):b.value===`server`?(u(),F(`p`,xp,`未指定目标时优先在 Yaovi 所在节点执行,使用节点的环境变量和本机登录。已开启的虚拟机、电脑及浏览器仍可使用。`)):(u(),F(`p`,Sp,`未指定目标的脚本优先在 Bot 虚拟环境中运行,使用下方授予该 Bot 的系统变量;其他已允许的环境仍可使用。`)),n[18]||=D(`p`,null,`开启托管浏览器后,未指定浏览器或设备的网页任务默认在托管浏览器中打开。`,-1),D(`button`,{disabled:_.value||b.value===g.value.execution.mode},`保存默认环境`,8,Cp),(u(!0),F(T,null,p(g.value.activeTurns.filter(e=>e.revision!==g.value.execution.revision),e=>(u(),F(`p`,{key:e.agentId},s(e.agentId)+` 的当前任务仍以 `+s(e.mode)+` 为默认环境,结束后更新。`,1))),128))],32)):z(``,!0),e.section===`all`||e.section===`resources`?(u(),F(`section`,wp,[n[19]||=D(`h4`,null,`Yaovi 环境与服务授权`,-1),n[20]||=D(`p`,null,`Bot 的模型与 Codex 登录在「设置 → 模型服务 → 模型连接」中管理。`,-1),n[21]||=D(`p`,null,`系统统一保存,按 Bot 授权使用。不受默认运行环境限制;变量仅注入虚拟机脚本,API 服务通过授权工具使用。授权值不会回显。共享虚拟机的成员必须统一获得变量权限,才能注入脚本。`,-1),D(`ul`,null,[(u(!0),F(T,null,p(g.value.resources,e=>(u(),F(`li`,{key:e.id},[D(`div`,null,[D(`strong`,null,s(e.name),1),D(`p`,null,s(e.kind===`api`?`API 工具服务`:`环境变量`)+` · `+s(e.agentIds.length)+` 个 Bot · `+s(e.envKeys.join(`、`)||`通过服务工具调用`),1)]),D(`button`,{type:`button`,disabled:_.value,onClick:t=>N(e)},`编辑 `+s(e.name),9,Tp),D(`button`,{type:`button`,disabled:_.value,onClick:t=>{M(async()=>{await R(Q)(`/api/app/admin/execution/resources/`+e.id,{method:`DELETE`}),await j()},`授权已撤销`)}},`撤销`,8,Ep)]))),128))]),D(`button`,{type:`button`,disabled:_.value,onClick:n[1]||=e=>N()},`添加授权或变量`,8,Dp),E.value?(u(),k(rp,{key:0,resource:C.value,agents:g.value.agents,onClose:n[2]||=e=>E.value=!1,onSaved:P},null,8,[`resource`,`agents`])):z(``,!0)])):z(``,!0),e.section===`all`||e.section===`proxy`?(u(),F(`form`,{key:2,onSubmit:X(L,[`prevent`])},[n[34]||=D(`h4`,null,`虚拟机网络`,-1),g.value.network?(u(),F(T,{key:0},[n[22]||=D(`p`,null,`与模型共用已保存的代理列表,虚拟机可独立选择。正在执行任务或接管时,变更会在结束后应用。`,-1),g.value.network.problem?(u(),F(`p`,Op,s(g.value.network.problem),1)):z(``,!0),U(ot,{"model-value":g.value.network.policy,view:g.value.network,disabled:_.value,"hide-test":``,"onUpdate:modelValue":n[3]||=e=>g.value.network.policy=e},null,8,[`model-value`,`view`,`disabled`]),g.value.network.lan?(u(),k(hp,{key:1,modelValue:g.value.network.lan,"onUpdate:modelValue":n[4]||=e=>g.value.network.lan=e,disabled:_.value,dirty:A.value,environments:g.value.lanScope?.environments,onTest:B},null,8,[`modelValue`,`disabled`,`dirty`,`environments`])):z(``,!0),D(`div`,kp,[D(`button`,{disabled:_.value},`保存网络选择`,8,Ap),D(`button`,{type:`button`,disabled:_.value||A.value,onClick:V},`测试虚拟机网络`,8,jp),D(`button`,{type:`button`,disabled:_.value,onClick:n[5]||=e=>M(j,`状态已刷新`)},`刷新状态`,8,Mp)]),(u(!0),F(T,null,p(g.value.nodes,e=>(u(),F(`div`,{key:e.id},[D(`p`,null,s(e.name)+`:`+s(e.status),1),e.lan?(u(),F(`p`,Np,`内网范围:`+s(e.lan.policy===`unsupported`?`此节点不支持本机内网`:e.lan.policy===`ready`?`已应用,目标尚需单独检测`:`已关闭`)+` · 真实 ping:`+s(e.lan.echo?`已启用`:`未启用`)+` · 公网:`+s(e.public?.status===`ready`?`检查通过`:e.public?.status===`degraded`?`检查失败`:`待检查`),1)):z(``,!0)]))),128)),n[23]||=D(`p`,null,`公网保留 HTTP/HTTPS 范围,指定代理故障时不会改为直连。已授权内网供本机托管虚拟机和浏览器独立直连;浏览器仅支持 HTTP(S)。此处节点检测验证虚拟机出口,浏览器需实际打开目标验证。`,-1)],64)):(u(),F(T,{key:1},[g.value.execution.mode===`server`?(u(),F(`p`,Pp,`默认运行环境是「服务器本机」,已开启的虚拟机仍可使用。此处代理仅用于虚拟机;本机命令、Yaovi 模型请求和托管浏览器仍使用各自的网络配置。`)):z(``,!0),n[32]||=D(`p`,null,`所有受管虚拟环境的程序共用出口。保留公网 HTTP/HTTPS 限制,其他协议阻断;代理故障时不直连。保存会断开旧网络任务。`,-1),D(`label`,Fp,[d(D(`input`,{"onUpdate:modelValue":n[6]||=e=>g.value.proxy.enabled=e,type:`checkbox`,disabled:_.value},null,8,Ip),[[je,g.value.proxy.enabled]]),n[24]||=w(`启用统一代理`,-1)]),g.value.proxy.enabled?(u(),F(T,{key:1},[D(`label`,null,[n[26]||=w(`协议`,-1),d(D(`select`,{"onUpdate:modelValue":n[7]||=e=>g.value.proxy.protocol=e,disabled:_.value},[...n[25]||=[D(`option`,{value:`http`},`HTTP CONNECT`,-1),D(`option`,{value:`socks5`},`SOCKS5`,-1)]],8,Lp),[[Me,g.value.proxy.protocol]])]),D(`label`,null,[n[27]||=w(`代理地址`,-1),d(D(`input`,{"onUpdate:modelValue":n[8]||=e=>g.value.proxy.host=e,required:``,placeholder:`执行节点可以访问的主机名或 IP`,disabled:_.value},null,8,Rp),[[Y,g.value.proxy.host]])]),D(`label`,null,[n[28]||=w(`端口`,-1),d(D(`input`,{"onUpdate:modelValue":n[9]||=e=>g.value.proxy.port=e,type:`number`,min:`1`,max:`65535`,required:``,disabled:_.value},null,8,zp),[[Y,g.value.proxy.port,void 0,{number:!0}]])]),D(`label`,null,[n[29]||=w(`用户名`,-1),d(D(`input`,{"onUpdate:modelValue":n[10]||=e=>g.value.proxy.username=e,autocomplete:`off`,disabled:_.value},null,8,Bp),[[Y,g.value.proxy.username]])]),g.value.proxy.hasPassword?(u(),F(`label`,Vp,[d(D(`input`,{"onUpdate:modelValue":n[11]||=e=>S.value=e,type:`checkbox`,disabled:_.value},null,8,Hp),[[je,S.value]]),n[30]||=w(`清除已保存的代理密码`,-1)])):z(``,!0),D(`label`,null,[n[31]||=w(`密码`,-1),d(D(`input`,{"onUpdate:modelValue":n[12]||=e=>x.value=e,type:`password`,autocomplete:`new-password`,placeholder:g.value.proxy.hasPassword?`留空保留已保存密码`:``,disabled:_.value},null,8,Up),[[Y,x.value]])])],64)):z(``,!0),D(`div`,Wp,[D(`button`,{disabled:_.value},`保存代理`,8,Gp),D(`button`,{type:`button`,disabled:_.value||!g.value.proxy.enabled,onClick:V},`测试已保存的代理`,8,Kp),D(`button`,{type:`button`,disabled:_.value,onClick:n[13]||=e=>M(j,`状态已刷新`)},`刷新状态`,8,qp)]),(u(!0),F(T,null,p(g.value.nodes,e=>(u(),F(`p`,{key:e.id},s(e.name)+`:`+s(e.status),1))),128)),n[33]||=D(`p`,null,`Yaovi 后端代发的服务请求使用后端网络配置。Compose 部署需要更新网络网关;旧环境不会假报代理已生效。`,-1)],64))],32)):z(``,!0)],64)):(u(),F(`p`,vp,`正在加载运行环境…`))],8,gp))}}),[[`__scopeId`,`data-v-d981bb50`]]),Xp=[`open`],Zp=[`disabled`],Qp=[`onUpdate:modelValue`],$p=[`value`],em=[`onUpdate:modelValue`],tm={key:0,role:`alert`},nm=[`disabled`],rm={key:2,role:`alert`},im=[`disabled`],am={key:4,role:`status`},om=[`disabled`],sm=V(E({__name:`HarnessMediaPanel`,props:{refreshVersion:{},initialExpanded:{type:Boolean}},emits:[`dirty-change`],setup(e,{emit:t}){let n=e,r=t,i=g({transcription:{connectionId:``,model:`gpt-4o-mini-transcribe`},speech:{connectionId:``,model:`gpt-4o-mini-tts`}}),a={transcription:`音频转录`,speech:`语音生成`},o=O([]),c=O(``),l=O(!1),h=O(``),_=O(``),v=O(n.initialExpanded===!0),y=O(!1),b=O(!1),x=O(``),S=0;function C(e){if(!e||!Object.keys(a).every(t=>{let n=e[t];return n&&typeof n.connectionId==`string`&&typeof n.model==`string`}))throw Error(`语音配置返回不完整,请重新加载。`);for(let t of Object.keys(a))i[t]={connectionId:e[t].connectionId,model:e[t].model};c.value=JSON.stringify(i)}f(i,()=>r(`dirty-change`,!!c.value&&JSON.stringify(i)!==c.value),{deep:!0});async function E(){let e=++S;b.value=!0,y.value=!1,x.value=``;try{let t=await dt.models();if(!t||!Array.isArray(t.providers))throw Error(`Hermes 供应商列表返回不完整,请重新加载。`);let n=t.providers.filter(e=>e.authenticated!==!1).map(e=>({id:e.slug,name:e.name||e.slug,kind:e.slug===`openai-codex`?`codex`:`api`}));if(e!==S)return;o.value=n,y.value=!0}catch(t){if(e!==S)return;x.value=t instanceof Error?t.message:`连接加载失败`,v.value=!0}finally{e===S&&(b.value=!1)}}async function k(){if(!l.value){l.value=!0,h.value=``,_.value=``;try{C(await Q(`/api/app/admin/openai/media`))}catch(e){h.value=e instanceof Error?e.message:`加载失败`,v.value=!0}finally{l.value=!1}}}m(()=>{k(),E()}),f(()=>n.refreshVersion,E);async function A(){if(!(l.value||!c.value||!y.value)){l.value=!0,h.value=``,_.value=``;try{C(await Q(`/api/app/admin/openai/media`,{method:`PUT`,body:i})),r(`dirty-change`,!1),_.value=`已保存,下一次工具调用生效。`}catch(e){h.value=e instanceof Error?e.message:`保存失败`}finally{l.value=!1}}}return(e,t)=>(u(),F(`details`,{class:`media-panel`,open:v.value,onToggle:t[0]||=e=>v.value=e.target.open},[t[6]||=D(`summary`,null,`语音输入与输出`,-1),D(`form`,{onSubmit:X(A,[`prevent`])},[t[5]||=D(`p`,null,` 音频转录和语音生成可独立选择已配置的 API 连接。 `,-1),(u(),F(T,null,p(a,(e,n)=>D(`fieldset`,{key:n,disabled:l.value||!c.value||!y.value},[D(`legend`,null,s(e),1),D(`label`,null,[t[2]||=w(`供应商连接`,-1),d(D(`select`,{"onUpdate:modelValue":e=>i[n].connectionId=e},[t[1]||=D(`option`,{value:``},`使用当前对话连接`,-1),(u(!0),F(T,null,p(o.value.filter(e=>e.kind!==`codex`),e=>(u(),F(`option`,{key:e.id,value:e.id},s(e.name),9,$p))),128))],8,Qp),[[Me,i[n].connectionId]])]),D(`label`,null,[t[3]||=w(`API 模型`,-1),d(D(`input`,{"onUpdate:modelValue":e=>i[n].model=e,required:``,maxlength:`128`},null,8,em),[[Y,i[n].model]])]),t[4]||=D(`p`,null,` Codex 登录不提供这里的语音 API。使用语音前请选择已配置的 OpenAI API 连接。 `,-1)],8,Zp)),64)),h.value?(u(),F(`p`,tm,s(h.value),1)):z(``,!0),h.value?(u(),F(`button`,{key:1,type:`button`,disabled:l.value,onClick:k},s(c.value?`放弃修改并重新加载设置`:`重新加载设置`),9,nm)):z(``,!0),x.value?(u(),F(`p`,rm,s(x.value),1)):z(``,!0),x.value?(u(),F(`button`,{key:3,type:`button`,disabled:b.value,onClick:E},`重新加载连接`,8,im)):z(``,!0),_.value?(u(),F(`p`,am,s(_.value),1)):z(``,!0),D(`button`,{disabled:l.value||!c.value||!y.value,type:`submit`},s(l.value?`处理中…`:`保存语音设置`),9,om)],32)],40,Xp))}}),[[`__scopeId`,`data-v-a8a43ba7`]]),cm=[`aria-busy`],lm={class:`note`},um={key:0,class:`error`,role:`alert`},dm={key:1,role:`status`},fm=[`onSubmit`],pm={class:`name`},mm=[`value`,`aria-label`,`disabled`,`onChange`],hm=[`value`],gm=[`value`],_m=[`onUpdate:modelValue`,`aria-label`,`disabled`],vm=[`value`],ym=[`value`],bm={key:1,class:`inherit`},xm=[`disabled`],Sm=[`disabled`],Cm=V(E({__name:`HermesAuxiliaryPanel`,emits:[`dirty-change`,`busy-change`],setup(e,{emit:t}){let n=t,r=O({}),i=O([]),a=O({provider:``,model:``}),o=O(),c=O(!1),l=O(``),h=O(``),g=O({}),_=H(()=>JSON.stringify(g.value)!==JSON.stringify(r.value));f(_,e=>n(`dirty-change`,e)),f(c,e=>n(`busy-change`,e),{immediate:!0});let v=(e,t)=>t.label||fe[e]||e,y=H(()=>o.value?.providers.filter(e=>e.authenticated===!0)??[]),b=e=>y.value.find(t=>t.slug===e)?.models??[],x=e=>{let t=g.value[e];return!t?.provider||y.value.some(e=>e.slug===t.provider)&&!!t.model.trim()};async function S(){c.value=!0,l.value=``;try{let[e,t]=await Promise.all([dt.auxiliary(),dt.models().catch(()=>void 0)]);i.value=e.tasks,a.value=e.main,o.value=t,g.value=Object.fromEntries(e.tasks.map(e=>[e.task,{provider:e.provider===`auto`?``:e.provider,model:e.provider===`auto`?``:e.model}])),r.value=JSON.parse(JSON.stringify(g.value))}catch(e){l.value=e instanceof Error?e.message:`读取失败`}finally{c.value=!1}}m(S);function C(e){let t=g.value[e];t&&(t.provider&&b(t.provider).includes(t.model)||(t.model=``))}async function w(e){let t=g.value[e];if(x(e)){c.value=!0,l.value=``,h.value=``;try{let n=t.provider.trim();await dt.setModel({scope:`auxiliary`,task:e,provider:n||`auto`,model:n?t.model.trim():``}),g.value[e]={provider:n,model:n?t.model.trim():``},r.value[e]={...g.value[e]},h.value=`辅助模型已保存`}catch(e){l.value=e instanceof Error?e.message:`保存失败`}finally{c.value=!1}}}async function E(){if(window.confirm(`把所有辅助模型重置为跟随默认模型,并放弃未保存的修改?`)){c.value=!0;try{await dt.setModel({scope:`auxiliary`,task:`__reset__`,provider:`auto`,model:``}),await S()}catch(e){l.value=e instanceof Error?e.message:`重置失败`}finally{c.value=!1}}}return(e,t)=>(u(),F(`section`,{class:`hermes-aux`,"aria-busy":c.value,"aria-label":`辅助模型`},[t[2]||=D(`h4`,null,`辅助模型`,-1),D(`p`,lm,`选择已授权的供应商,或跟随默认模型 `+s(a.value.provider)+` / `+s(a.value.model)+`。Bot 可在资料中逐槽覆盖。`,1),l.value?(u(),F(`p`,um,s(l.value),1)):z(``,!0),h.value?(u(),F(`p`,dm,s(h.value),1)):z(``,!0),(u(!0),F(T,null,p(i.value,e=>(u(),F(`form`,{key:e.task,class:`row`,onSubmit:X(t=>w(e.task),[`prevent`])},[D(`span`,pm,s(v(e.task,e)),1),D(`select`,{value:g.value[e.task].provider,"aria-label":`${e.task} 供应商`,disabled:c.value,onChange:t=>{g.value[e.task].provider=t.target.value,C(e.task)}},[t[0]||=D(`option`,{value:``},`跟随默认模型`,-1),(u(!0),F(T,null,p(y.value,e=>(u(),F(`option`,{key:e.slug,value:e.slug},s(e.name),9,hm))),128)),g.value[e.task].provider&&!y.value.some(t=>t.slug===g.value[e.task].provider)?(u(),F(`option`,{key:0,value:g.value[e.task].provider},s(g.value[e.task].provider)+`(未授权)`,9,gm)):z(``,!0)],40,mm),g.value[e.task].provider?d((u(),F(`select`,{key:0,"onUpdate:modelValue":t=>g.value[e.task].model=t,"aria-label":`${e.task} 模型`,disabled:c.value},[t[1]||=D(`option`,{value:``,disabled:``},`请选择模型`,-1),(u(!0),F(T,null,p(b(g.value[e.task].provider),e=>(u(),F(`option`,{key:e,value:e},s(e),9,vm))),128)),g.value[e.task].model&&!b(g.value[e.task].provider).includes(g.value[e.task].model)?(u(),F(`option`,{key:0,value:g.value[e.task].model},s(g.value[e.task].model)+`(未授权)`,9,ym)):z(``,!0)],8,_m)),[[Me,g.value[e.task].model]]):(u(),F(`span`,bm,`跟随默认模型`)),D(`button`,{type:`submit`,disabled:c.value||!x(e.task)},`保存`,8,xm)],40,fm))),128)),D(`button`,{type:`button`,disabled:c.value,onClick:E},`全部跟随默认模型`,8,Sm)],8,cm))}}),[[`__scopeId`,`data-v-1c3d5e55`]]),wm=[`aria-label`,`aria-busy`],Tm={class:`note`},Em={key:0,role:`status`},Dm={key:1,class:`error`,role:`alert`},Om=[`disabled`],km={key:0,class:`note`},Am={key:1},jm=[`aria-label`,`disabled`],Mm=[`value`],Nm={key:2,class:`note`},Pm={key:3,class:`note`},Fm={key:4,role:`status`},Im={key:5,class:`error`,role:`alert`},Lm=[`disabled`],Rm={key:7},zm=[`aria-label`,`disabled`],Bm=[`value`],Vm={key:8,class:`note`},Hm={key:9,class:`note`},Um={key:10,class:`note`},Wm={key:11,role:`status`},Gm=[`disabled`],Km=V(E({__name:`HermesMediaPanel`,props:{toolset:{},refreshVersion:{}},emits:[`dirty-change`],setup(e,{emit:t}){let n=e,r=t,a=H(()=>n.toolset===`image_gen`?`图片模型`:`视频模型`),o=O(),c=O(),l=O(``),h=O(``),g=O(``),_=O(!1),v=O(!1),y=O(``),b=O(``),x=O(``),S=0,C=H(()=>o.value?.providers.filter(e=>e.status===`ready`)??[]),E=H(()=>C.value.find(e=>e.name===l.value)),k=H(()=>c.value?.models.find(e=>e.id===h.value)),A=H(()=>!!g.value&&JSON.stringify([l.value,h.value])!==g.value);f(A,e=>r(`dirty-change`,e));async function j(e,t=!1){let r=++S;v.value=!0,b.value=``,c.value=void 0;try{let i=await ut.models(n.toolset,e||void 0);if(r!==S)return;if(!i||!Array.isArray(i.models))throw Error(`模型列表返回不完整,请重新加载。`);c.value=i,(!t||!h.value)&&(h.value=i.current||i.default||``)}catch(e){r===S&&(b.value=e instanceof Error?e.message:`模型加载失败`)}finally{r===S&&(v.value=!1)}}async function M(e=!1){if(_.value)return;_.value=!0,y.value=``;let t=e&&A.value;try{let e=await ut.config(n.toolset);if(!e||!Array.isArray(e.providers))throw Error(`供应商列表返回不完整,请重新加载。`);o.value=e,t||(l.value=C.value.some(t=>t.name===e.active_provider)&&e.active_provider||``),await j(l.value,t),t||(g.value=JSON.stringify([l.value,h.value]))}catch(e){y.value=e instanceof Error?e.message:`设置加载失败`}finally{_.value=!1}}function N(){h.value=``,x.value=``,j(l.value)}async function P(){if(!(_.value||v.value||!o.value||!E.value||!c.value||b.value)){_.value=!0,y.value=``,x.value=``;try{let e=await ut.setProvider(n.toolset,l.value);x.value=`供应商已保存。`,c.value.has_models&&h.value&&await ut.setModel(n.toolset,h.value,l.value),g.value=JSON.stringify([l.value,h.value]),x.value=e.needs_nous_auth?`设置已保存,该供应商还需要在模型连接中完成账号授权。`:`${a.value}设置已保存,下一次生成生效。`,r(`dirty-change`,!1);let t=await ut.config(n.toolset);if(!t||!Array.isArray(t.providers))throw Error(`设置已保存,但状态返回不完整,请重新加载。`);o.value=t}catch(e){y.value=e instanceof Error?e.message:`保存失败`}finally{_.value=!1}}}return m(()=>void M()),f(()=>n.refreshVersion,()=>void M(!0)),i(()=>{S++}),(t,n)=>(u(),F(`section`,{class:`hermes-media`,"aria-label":a.value,"aria-busy":_.value||v.value},[D(`h4`,null,s(a.value),1),D(`p`,Tm,`从模型连接里已授权的供应商中选择,用于`+s(e.toolset===`image_gen`?`生成或编辑图片`:`生成视频`)+`。`,1),_.value?(u(),F(`p`,Em,`正在加载或保存…`)):z(``,!0),y.value?(u(),F(`p`,Dm,s(y.value),1)):z(``,!0),y.value?(u(),F(`button`,{key:2,type:`button`,disabled:_.value,onClick:n[0]||=e=>M(!0)},`重新加载设置`,8,Om)):z(``,!0),o.value?(u(),F(`form`,{key:3,onSubmit:X(P,[`prevent`])},[C.value.length?(u(),F(`label`,Am,[n[5]||=w(`供应商 `,-1),d(D(`select`,{"onUpdate:modelValue":n[1]||=e=>l.value=e,"aria-label":`${a.value}供应商`,disabled:_.value||v.value,onChange:N},[n[4]||=D(`option`,{value:``,disabled:``},`请选择供应商`,-1),(u(!0),F(T,null,p(C.value,e=>(u(),F(`option`,{key:e.name,value:e.name},s(e.name),9,Mm))),128))],40,jm),[[Me,l.value]])])):(u(),F(`p`,km,`还没有可用的供应商。请先在模型连接中完成授权。`)),o.value.active_provider&&!C.value.some(e=>e.name===o.value?.active_provider)?(u(),F(`p`,Nm,`当前供应商尚未授权,请先在模型连接中完成授权。`)):z(``,!0),E.value&&!E.value.is_active?(u(),F(`p`,Pm,`保存后使用所选供应商。`)):z(``,!0),v.value?(u(),F(`p`,Fm,`正在加载模型…`)):z(``,!0),b.value?(u(),F(`p`,Im,s(b.value),1)):z(``,!0),b.value?(u(),F(`button`,{key:6,type:`button`,disabled:_.value||v.value,onClick:n[2]||=e=>j(l.value,!0)},`重新加载模型`,8,Lm)):z(``,!0),c.value?.has_models?(u(),F(`label`,Rm,[n[6]||=w(`模型 `,-1),d(D(`select`,{"onUpdate:modelValue":n[3]||=e=>h.value=e,"aria-label":a.value,disabled:_.value||v.value},[(u(!0),F(T,null,p(c.value.models,e=>(u(),F(`option`,{key:e.id,value:e.id},s(e.display||e.id),9,Bm))),128))],8,zm),[[Me,h.value]])])):c.value&&l.value?(u(),F(`p`,Vm,`该供应商当前未提供可选模型。`)):z(``,!0),k.value?.strengths?(u(),F(`p`,Hm,s(k.value.strengths),1)):z(``,!0),k.value?.price?(u(),F(`p`,Um,s(k.value.price),1)):z(``,!0),x.value?(u(),F(`p`,Wm,s(x.value),1)):z(``,!0),D(`button`,{type:`submit`,disabled:_.value||v.value||!E.value||!c.value||!!b.value||c.value.has_models&&!h.value},`保存`+s(a.value)+`设置`,9,Gm)],32)):z(``,!0)],8,wm))}}),[[`__scopeId`,`data-v-9f624c1c`]]),qm={class:`provider-settings`},Jm=V(E({__name:`ModelServicesPanel`,props:{page:{default:`all`},formId:{}},emits:[`dirty-change`,`can-save-change`,`busy-change`,`manage-network`],setup(e,{expose:t,emit:n}){let r=e,i=n,a=H(()=>r.page===`connections`||r.page===`defaults`||r.page===`auto`||r.page===`visibility`?r.page:`all`),o=O(0),s=O();t({reset:()=>s.value?.reset()});let c=g({providers:!1,auxiliary:!1,image:!1,video:!1,speech:!1});function l(e,t){c[e]=t,i(`dirty-change`,Object.values(c).some(Boolean))}function d(){o.value++}return(t,n)=>(u(),F(`div`,qm,[[`all`,`connections`,`defaults`,`auto`,`visibility`].includes(r.page)?(u(),k(oe,{key:0,ref_key:`providerEditor`,ref:s,section:a.value,embedded:[`defaults`,`auto`,`visibility`].includes(r.page),"form-id":e.formId,onChanged:d,onDirtyChange:n[0]||=e=>l(`providers`,e),onCanSaveChange:n[1]||=e=>i(`can-save-change`,e),onBusyChange:n[2]||=e=>i(`busy-change`,e),onManageNetwork:n[3]||=e=>i(`manage-network`)},null,8,[`section`,`embedded`,`form-id`])):z(``,!0),[`all`,`auxiliary`].includes(r.page)?(u(),k(Cm,{key:o.value,onDirtyChange:n[4]||=e=>l(`auxiliary`,e),onBusyChange:n[5]||=e=>i(`busy-change`,e)})):z(``,!0),[`all`,`media`,`image`].includes(r.page)?(u(),k(Km,{key:2,toolset:`image_gen`,"refresh-version":o.value,onDirtyChange:n[6]||=e=>l(`image`,e)},null,8,[`refresh-version`])):z(``,!0),[`all`,`media`,`video`].includes(r.page)?(u(),k(Km,{key:3,toolset:`video_gen`,"refresh-version":o.value,onDirtyChange:n[7]||=e=>l(`video`,e)},null,8,[`refresh-version`])):z(``,!0),[`all`,`voice`].includes(r.page)?(u(),k(sm,{key:4,"initial-expanded":r.page===`voice`,"refresh-version":o.value,onDirtyChange:n[8]||=e=>l(`speech`,e)},null,8,[`initial-expanded`,`refresh-version`])):z(``,!0)]))}}),[[`__scopeId`,`data-v-c23f994b`]]);async function Ym(){return(await Q(`/api/app/admin/users`)).items}async function Xm(e,t){return Q(`/api/app/admin/users`,{method:`POST`,body:{username:e,password:t}})}async function Zm(e,t){return Q(`/api/app/admin/users/${encodeURIComponent(e)}`,{method:`PATCH`,body:t})}async function Qm(e){await Q(`/api/app/admin/users/${encodeURIComponent(e)}`,{method:`DELETE`,body:{}})}function $m(){return Q(`/api/app/system/allowed-hosts`)}function eh(e){return Q(`/api/app/system/allowed-hosts`,{method:`PUT`,body:{hosts:e}})}function th(e){return Q(`/api/app/admin/users/${encodeURIComponent(e)}/approve`,{method:`POST`,body:{}})}function nh(e){return e===`development`||e===`production`?e:void 0}function rh(e){let t=Ue(e),n=he(t.source??t.configurationSource??t.configuration_source),r=n===`file`||n===`environment`?n:`none`,i=n===`none`||n===`file`||n===`environment`||ve(t.managementAvailable??t.management_available,!1),a=He(t.environments??t.environment).map(nh).filter(e=>!!e),o=He(t.warnings).flatMap(e=>{if(typeof e==`string`&&e.trim())return[{code:`warning`,message:e.trim()}];let t=Ue(e),n=he(t.message).trim();return n?[{code:he(t.code,`warning`),message:n,actualMode:he(t.actualMode??t.actual_mode)||void 0,recommendedMode:he(t.recommendedMode??t.recommended_mode)||void 0}]:[]}),s=Ue(t.providers),c=Ue(s.fcm),l=he(c.source??c.configurationSource??c.configuration_source),u=l===`file`||l===`environment`?l:`none`,d=[`none`,`file`,`environment`].includes(l)?!0:ve(c.managementAvailable??c.management_available,!1),f=He(c.warnings).flatMap(e=>{if(typeof e==`string`&&e.trim())return[{code:`warning`,message:e.trim()}];let t=Ue(e),n=he(t.message).trim();return n?[{code:he(t.code,`warning`),message:n,actualMode:he(t.actualMode??t.actual_mode)||void 0,recommendedMode:he(t.recommendedMode??t.recommended_mode)||void 0}]:[]});return{configured:ve(t.configured),healthy:ve(t.healthy),topic:he(t.topic)||void 0,registrationCount:Te(t.registrationCount??t.registration_count),pendingCount:Te(t.pendingCount??t.pending_count),lastSuccessAt:Te(t.lastSuccessAt??t.last_success_at)||void 0,lastError:he(t.lastError??t.last_error??t.configurationError??t.configuration_error)||void 0,source:r,editable:i&&ve(t.editable),managementAvailable:i,keyFile:he(t.keyFile??t.key_file)||void 0,keyId:he(t.keyId??t.key_id)||void 0,teamId:he(t.teamId??t.team_id)||void 0,environments:a,warnings:o,...Object.keys(c).length?{providers:{fcm:{configured:ve(c.configured),healthy:ve(c.healthy),registrationCount:Te(c.registrationCount??c.registration_count),pendingCount:Te(c.pendingCount??c.pending_count),lastSuccessAt:Te(c.lastSuccessAt??c.last_success_at)||void 0,lastError:he(c.lastError??c.last_error??c.configurationError??c.configuration_error)||void 0,source:u,editable:d&&ve(c.editable),managementAvailable:d,serviceAccountFile:he(c.serviceAccountFile??c.service_account_file)||void 0,projectId:he(c.projectId??c.project_id)||void 0,packageName:he(c.packageName??c.package_name,`cn.samien.yaovi`),warnings:f}}}:{}}}async function ih(){return rh(await Q(`/api/app/system/push-status`))}async function ah(e){return rh(await Q(`/api/app/system/push-config`,{method:`PUT`,body:{keyFile:e.keyFile,keyId:e.keyId,teamId:e.teamId,topic:e.topic,environments:e.environments},timeoutMs:45e3}))}async function oh(e){return rh(await Q(`/api/app/system/push-config/fcm`,{method:`PUT`,body:{serviceAccountFile:e.serviceAccountFile,projectId:e.projectId,packageName:e.packageName},timeoutMs:45e3}))}var sh=[`data-section`],ch={key:0,class:`error`,role:`alert`},lh={key:1,class:`block`},uh=[`aria-label`,`disabled`,`onClick`],dh=[`disabled`,`onClick`],fh=[`aria-label`,`disabled`,`onClick`],ph=[`aria-label`,`disabled`,`onClick`],mh=[`disabled`],hh=[`disabled`],gh=[`disabled`],_h={key:3,class:`block`},vh={class:`block push-block`},yh={key:0,class:`push-status`},bh={key:0,class:`push-managed-note`},xh={key:1,class:`push-managed-note`},Sh={class:`wide`},Ch=[`readonly`],wh=[`readonly`],Th=[`readonly`],Eh={class:`wide`},Dh=[`readonly`],Oh=[`disabled`],kh={key:0,class:`wide push-warnings`,"aria-live":`polite`},Ah={key:1,class:`wide push-error`,role:`alert`},jh={key:2,class:`wide push-notice`,role:`status`},Mh={key:3,class:`wide`},Nh=[`disabled`],Ph={key:2,class:`push-managed-note`},Fh={class:`block push-block`},Ih={key:0,class:`push-status`},Lh={key:0,class:`push-managed-note`},Rh={key:1,class:`push-managed-note`},zh={class:`wide`},Bh=[`readonly`],Vh=[`readonly`],Hh=[`readonly`],Uh={key:0,class:`wide push-warnings`,"aria-live":`polite`},Wh={key:1,class:`wide push-error`,role:`alert`},Gh={key:2,class:`wide push-notice`,role:`status`},Kh={key:3,class:`wide`},qh=[`disabled`],Jh={key:2,class:`push-managed-note`},Yh=V(E({__name:`SystemManagementPanel`,props:{section:{},active:{type:Boolean,default:!0},upstreamReady:{type:Boolean,default:!1},upstreamError:{default:``}},emits:[`dirty-change`],setup(e,{expose:t,emit:n}){let r=e,i=n;O(!1),O(!1);let a=O([]),o=O(``),c=O(``),l=O(``),m=O(``),h=O({username:``,password:``}),g=O();O();let _=O(``),v=O(``);O(!1);let b=O(``),x=O(``),S=O(!1),C=O(``),E=O(),A=O(``),j=O(!1),M=O(``),N=O(``),P=O(``),I=O(``),L=O(``),R=O(`cn.samien.yaovi.agent`),B=O([`development`,`production`]),V=O(``),W=O(``),ee=O(`cn.samien.yaovi`),te=O(!1),G=O(``),K=O(``);window.location.hostname,H(()=>g.value?.ready??r.upstreamReady),H(()=>g.value?.error||r.upstreamError),H(()=>![`loopback-token`,`loopback-direct`].includes(g.value?.authMode??`unknown`)),H(()=>g.value?.authMode===`loopback-token`?`本机 Session Token(自动)`:g.value?.authMode===`loopback-direct`?`本机直连(兼容模式)`:g.value?.authMode===`password`?`用户名和密码`:`等待检测`),H(()=>{let e=g.value?.lastVerifiedAt;return e===void 0?`尚未成功验证`:new Date(e).toLocaleString()});let ne=O(),re=O(),ie=H(()=>E.value?.source===`environment`),q=H(()=>E.value?.providers?.fcm),ae=H(()=>q.value?.source===`environment`),J=H(()=>!!(q.value?.managementAvailable&&q.value.editable&&!te.value&&!j.value)),oe=H(()=>q.value?!q.value.configured&&q.value.lastError?`FCM 配置无效:${q.value.lastError}`:q.value.configured?q.value.healthy?`FCM 推送服务正常`:q.value.lastError||`FCM 推送服务异常`:`尚未配置 FCM 服务账号文件`:`当前版本未提供 Android 推送状态`),se=H(()=>!!(E.value?.managementAvailable&&E.value.editable&&!j.value&&!te.value)),ce=H(()=>E.value?!E.value.configured&&E.value.lastError?`APNs 配置无效:${E.value.lastError}`:E.value.configured?E.value.healthy?`APNs 推送服务正常`:E.value.lastError||`APNs 推送服务异常`:`尚未配置 APNs 密钥文件`:A.value||`当前版本未提供推送状态`);function le(){return{keyFile:P.value,keyId:I.value,teamId:L.value,topic:R.value,environments:[...B.value].sort().join(`,`)}}function ue(){return{serviceAccountFile:V.value,projectId:W.value,packageName:ee.value}}let de=H(()=>{if(r.section===`users`)return!!(o.value.trim()||c.value);if(r.section===`connection`)return l.value!==h.value.username||m.value!==h.value.password||_.value!==v.value;if(r.section===`memory`||r.section!==`push`)return!1;let e=!!ne.value&&Object.keys(le()).some(e=>le()[e]!==ne.value?.[e]),t=!!re.value&&Object.keys(ue()).some(e=>ue()[e]!==re.value?.[e]);return e||t});f(de,e=>i(`dirty-change`,e),{immediate:!0});function fe(e){P.value=e.keyFile??``,I.value=e.keyId??``,L.value=e.teamId??``,R.value=e.topic||`cn.samien.yaovi.agent`,B.value=e.environments.length?[...e.environments]:[`development`,`production`],ne.value=le()}function pe(e){let t=e.providers?.fcm;V.value=t?.serviceAccountFile??``,W.value=t?.projectId??``,ee.value=t?.packageName||`cn.samien.yaovi`,re.value=ue()}function me(e){fe(e),pe(e)}async function he(){if(C.value=``,r.section===`users`){a.value=await Ym();return}if(r.section===`memory`||r.section!==`push`)return;A.value=``;let e=await ih().catch(e=>{e?.status!==404&&(A.value=`无法读取 APNs 状态:${e instanceof Error?e.message:`请求失败`}`)});E.value=e,e?me(e):(ne.value=void 0,re.value=void 0)}t({refresh:he});async function ge(e,t=!0){if(!S.value){S.value=!0,C.value=``;try{await e(),t&&await he()}catch(e){C.value=e instanceof Error?e.message:`操作失败`}finally{S.value=!1}}}function _e(){ge(async()=>{await Xm(o.value.trim(),c.value),o.value=``,c.value=``})}function ve(e){ge(async()=>{await th(e.id)})}function ye(e){ge(async()=>{await Zm(e.id,{enabled:!e.enabled})})}function be(e){let t=window.prompt(`为“${e.username}”设置临时密码(至少 8 个字符)`);t&&ge(async()=>{await Zm(e.id,{password:t})})}function xe(e){window.confirm(`删除用户“${e.username}”?`)&&ge(async()=>{await Qm(e.id)})}async function Se(){if(!E.value?.editable||ie.value||j.value||te.value)return;let e=P.value.trim(),t=I.value.trim(),n=L.value.trim(),r=R.value.trim(),i=[`development`,`production`].filter(e=>B.value.includes(e));if(M.value=``,N.value=``,!e.startsWith(`/`)){M.value=`请输入 Yaovi 所在机器上的 .p8 文件绝对路径`;return}if(!/^[A-Za-z0-9]{1,128}$/.test(t)){M.value=`Key ID 仅支持 1–128 位字母或数字`;return}if(!/^[A-Za-z0-9]{1,128}$/.test(n)){M.value=`Team ID 仅支持 1–128 位字母或数字`;return}if(r.length>255||!/^[A-Za-z0-9](?:[A-Za-z0-9.-]*[A-Za-z0-9])?$/.test(r)){M.value=`Topic 必须是有效的 App Bundle ID`;return}if(!i.length){M.value=`至少选择 Sandbox 或 Production`;return}j.value=!0;try{let a=await ah({keyFile:e,keyId:t,teamId:n,topic:r,environments:i});E.value=a,fe(a);let o=i.length===2?`Sandbox 与 Production`:i[0]===`development`?`Sandbox`:`Production`;N.value=`${o} 验证通过,APNs 已启用`}catch(e){M.value=e instanceof Error?e.message:`无法验证并启用 APNs`}finally{j.value=!1}}async function Ce(){if(!q.value?.editable||ae.value||te.value||j.value)return;let e=V.value.trim(),t=W.value.trim(),n=ee.value.trim();if(G.value=``,K.value=``,!e.startsWith(`/`)){G.value=`请输入 Yaovi 所在机器上的服务账号 JSON 文件绝对路径`;return}if(!/^[a-z][a-z0-9-]{4,61}[a-z0-9]$/.test(t)){G.value=`请输入有效的 Firebase Project ID`;return}if(n!==`cn.samien.yaovi`){G.value=`Android 包名必须是 cn.samien.yaovi`;return}te.value=!0;try{let r=await oh({serviceAccountFile:e,projectId:t,packageName:n});E.value=r,pe(r),K.value=`Firebase 权限与项目验证通过,FCM 已启用`}catch(e){G.value=e instanceof Error?e.message:`无法验证并启用 FCM`}finally{te.value=!1}}return f(()=>[r.active,r.section],([e,t])=>{e&&(t===`push`&&(M.value=``,N.value=``,G.value=``,K.value=``),t===`connection`&&(b.value=``,x.value=``),he().catch(e=>{C.value=e instanceof Error?e.message:`读取系统设置失败`}))},{immediate:!0}),(t,n)=>(u(),F(`section`,{class:`system-management-panel`,"data-section":e.section},[C.value?(u(),F(`p`,ch,s(C.value),1)):z(``,!0),e.section===`users`?(u(),F(`div`,lh,[n[14]||=D(`h3`,null,`用户`,-1),(u(!0),F(T,null,p(a.value,e=>(u(),F(`div`,{key:e.id,class:`user`},[D(`span`,null,[D(`b`,null,s(e.username),1),D(`small`,null,s(e.role===`admin`?`管理员`:e.registrationStatus===`pending`?`待管理员开通`:e.enabled?e.mustChangePassword?`等待修改临时密码`:`普通用户`:`已禁用`),1)]),e.role===`admin`?z(``,!0):(u(),F(T,{key:0},[D(`button`,{type:`button`,"aria-label":`为用户 ${e.username} 重置密码`,disabled:S.value,onClick:t=>be(e)},`重置密码`,8,uh),e.registrationStatus===`pending`?(u(),F(`button`,{key:0,type:`button`,disabled:S.value,onClick:t=>ve(e)},`开通账号`,8,dh)):(u(),F(`button`,{key:1,type:`button`,"aria-label":`${e.enabled?`禁用`:`启用`}用户 ${e.username}`,disabled:S.value,onClick:t=>ye(e)},s(e.enabled?`禁用`:`启用`),9,fh)),D(`button`,{class:`danger`,type:`button`,"aria-label":`删除用户 ${e.username}`,disabled:S.value,onClick:t=>xe(e)},`删除`,8,ph)],64))]))),128)),D(`form`,{class:`user-create-form`,"aria-label":`创建用户`,onSubmit:X(_e,[`prevent`])},[D(`label`,null,[n[11]||=D(`span`,null,`新用户名`,-1),d(D(`input`,{"onUpdate:modelValue":n[0]||=e=>o.value=e,name:`managed-username`,autocomplete:`off`,disabled:S.value},null,8,mh),[[Y,o.value]])]),D(`label`,null,[n[12]||=D(`span`,null,`临时密码`,-1),d(D(`input`,{"onUpdate:modelValue":n[1]||=e=>c.value=e,name:`managed-temporary-password`,type:`password`,autocomplete:`new-password`,disabled:S.value},null,8,hh),[[Y,c.value]]),n[13]||=D(`small`,null,`至少 8 位`,-1)]),D(`button`,{class:`solid-button`,disabled:S.value||!o.value.trim()||c.value.length<8},`创建用户`,8,gh)],32)])):e.section===`connection`?(u(),k(Jm,{key:2})):e.section===`memory`?(u(),F(`div`,_h,[...n[15]||=[D(`h3`,null,`Markdown 文件记忆`,-1),D(`p`,null,`每个 Bot 使用自己的 MEMORY.md、主题笔记和日记。用户记忆与项目记忆按贡献 Bot 分开保存。`,-1),D(`p`,null,`在对话的“记忆与协作”中编辑文件、查看修改历史或撤销修改。长期事实会在下一轮加载,主题和日记按需读取。`,-1)]])):(u(),F(T,{key:4},[D(`div`,vh,[n[27]||=D(`h3`,null,`iOS 消息推送`,-1),D(`p`,{class:y([`push-health`,{ok:E.value?.configured&&E.value?.healthy}])},s(ce.value),3),E.value?(u(),F(`div`,yh,[D(`span`,null,[n[16]||=D(`small`,null,`Topic`,-1),D(`b`,null,s(E.value.topic||`—`),1)]),D(`span`,null,[n[17]||=D(`small`,null,`注册设备`,-1),D(`b`,null,s(E.value.registrationCount),1)]),D(`span`,null,[n[18]||=D(`small`,null,`待发送`,-1),D(`b`,null,s(E.value.pendingCount),1)])])):z(``,!0),E.value?.managementAvailable?(u(),F(T,{key:1},[ie.value?(u(),F(`p`,bh,`当前 APNs 配置由服务环境变量管理,Web 仅可查看。请修改 LaunchAgent、Docker 或进程环境后重启服务。`)):E.value.editable?z(``,!0):(u(),F(`p`,xh,`当前 APNs 配置为只读,请在 Yaovi 服务端修改后重启服务。`)),D(`form`,{class:`push-config-form`,onSubmit:X(Se,[`prevent`])},[D(`label`,Sh,[n[19]||=D(`span`,null,`.p8 本地路径`,-1),d(D(`input`,{"onUpdate:modelValue":n[2]||=e=>P.value=e,name:`push-key-file`,readonly:!E.value.editable||j.value||te.value,autocomplete:`off`,spellcheck:`false`,placeholder:`/Users/…/AuthKey_XXXXXXXXXX.p8`},null,8,Ch),[[Y,P.value]]),n[20]||=D(`small`,null,`填写 Yaovi 所在机器上的绝对路径,私钥内容不会经过浏览器。`,-1)]),D(`label`,null,[n[21]||=D(`span`,null,`Key ID`,-1),d(D(`input`,{"onUpdate:modelValue":n[3]||=e=>I.value=e,name:`push-key-id`,readonly:!E.value.editable||j.value||te.value,autocomplete:`off`,spellcheck:`false`},null,8,wh),[[Y,I.value]])]),D(`label`,null,[n[22]||=D(`span`,null,`Team ID`,-1),d(D(`input`,{"onUpdate:modelValue":n[4]||=e=>L.value=e,name:`push-team-id`,readonly:!E.value.editable||j.value||te.value,autocomplete:`off`,spellcheck:`false`},null,8,Th),[[Y,L.value]])]),D(`label`,Eh,[n[23]||=D(`span`,null,`Topic(Bundle ID)`,-1),d(D(`input`,{"onUpdate:modelValue":n[5]||=e=>R.value=e,name:`push-topic`,readonly:!E.value.editable||j.value||te.value,autocomplete:`off`,spellcheck:`false`},null,8,Dh),[[Y,R.value]])]),D(`fieldset`,{class:`wide`,disabled:!E.value.editable||j.value||te.value},[n[26]||=D(`legend`,null,`推送环境`,-1),D(`label`,null,[d(D(`input`,{"onUpdate:modelValue":n[6]||=e=>B.value=e,type:`checkbox`,value:`development`},null,512),[[je,B.value]]),n[24]||=w(`Sandbox(开发)`,-1)]),D(`label`,null,[d(D(`input`,{"onUpdate:modelValue":n[7]||=e=>B.value=e,type:`checkbox`,value:`production`},null,512),[[je,B.value]]),n[25]||=w(`Production(TestFlight / App Store)`,-1)])],8,Oh),E.value.warnings.length?(u(),F(`div`,kh,[(u(!0),F(T,null,p(E.value.warnings,e=>(u(),F(`p`,{key:`${e.code}:${e.message}`,class:`push-warning`,role:`status`},[U(Z,{name:`alert`,size:14}),w(s(e.message),1)]))),128))])):z(``,!0),M.value?(u(),F(`p`,Ah,s(M.value),1)):N.value?(u(),F(`p`,jh,s(N.value),1)):z(``,!0),E.value.editable?(u(),F(`footer`,Mh,[D(`button`,{class:`solid-button`,disabled:!se.value},s(j.value?`验证中…`:`验证并启用`),9,Nh)])):z(``,!0)],32)],64)):E.value?(u(),F(`p`,Ph,`当前服务版本只提供推送状态,不能在 Web 中修改配置。`)):z(``,!0)]),D(`div`,Fh,[n[35]||=D(`h3`,null,`Android 消息推送`,-1),D(`p`,{class:y([`push-health`,{ok:q.value?.configured&&q.value?.healthy}])},s(oe.value),3),q.value?(u(),F(`div`,Ih,[D(`span`,null,[n[28]||=D(`small`,null,`Firebase Project`,-1),D(`b`,null,s(q.value.projectId||`—`),1)]),D(`span`,null,[n[29]||=D(`small`,null,`注册设备`,-1),D(`b`,null,s(q.value.registrationCount),1)]),D(`span`,null,[n[30]||=D(`small`,null,`待发送`,-1),D(`b`,null,s(q.value.pendingCount),1)])])):z(``,!0),q.value?.managementAvailable?(u(),F(T,{key:1},[ae.value?(u(),F(`p`,Lh,`当前 FCM 配置由服务环境变量管理,Web 仅可查看。请修改 LaunchAgent、Docker 或进程环境后重启服务。`)):q.value.editable?z(``,!0):(u(),F(`p`,Rh,`当前 FCM 配置为只读,请在 Yaovi 服务端修改后重启服务。`)),D(`form`,{class:`push-config-form`,onSubmit:X(Ce,[`prevent`])},[D(`label`,zh,[n[31]||=D(`span`,null,`服务账号 JSON 本地路径`,-1),d(D(`input`,{"onUpdate:modelValue":n[8]||=e=>V.value=e,name:`fcm-service-account-file`,readonly:!q.value.editable||te.value||j.value,autocomplete:`off`,spellcheck:`false`,placeholder:`/Users/…/firebase-service-account.json`},null,8,Bh),[[Y,V.value]]),n[32]||=D(`small`,null,`只填写 Yaovi 所在机器上的绝对路径;JSON 内容和私钥不会经过浏览器,也不会写入Yaovi配置。`,-1)]),D(`label`,null,[n[33]||=D(`span`,null,`Firebase Project ID`,-1),d(D(`input`,{"onUpdate:modelValue":n[9]||=e=>W.value=e,name:`fcm-project-id`,readonly:!q.value.editable||te.value||j.value,autocomplete:`off`,spellcheck:`false`},null,8,Vh),[[Y,W.value]])]),D(`label`,null,[n[34]||=D(`span`,null,`Android 包名`,-1),d(D(`input`,{"onUpdate:modelValue":n[10]||=e=>ee.value=e,name:`fcm-package-name`,readonly:!q.value.editable||te.value||j.value,autocomplete:`off`,spellcheck:`false`},null,8,Hh),[[Y,ee.value]])]),q.value.warnings.length?(u(),F(`div`,Uh,[(u(!0),F(T,null,p(q.value.warnings,e=>(u(),F(`p`,{key:`${e.code}:${e.message}`,class:`push-warning`,role:`status`},[U(Z,{name:`alert`,size:14}),w(s(e.message),1)]))),128))])):z(``,!0),G.value?(u(),F(`p`,Wh,s(G.value),1)):K.value?(u(),F(`p`,Gh,s(K.value),1)):z(``,!0),q.value.editable?(u(),F(`footer`,Kh,[D(`button`,{class:`solid-button`,disabled:!J.value},s(te.value?`验证中…`:`验证并启用`),9,qh)])):z(``,!0)],32)],64)):q.value?(u(),F(`p`,Jh,`当前服务版本只提供 FCM 状态,不能在 Web 中修改配置。`)):z(``,!0)])],64))],8,sh))}}),[[`__scopeId`,`data-v-c3c19e6e`]]);function Xh(e,t){return e===`approval`&&t===`review`?{action:`review`,body:{}}:{action:`respond`,body:{answer:t}}}function Zh(e){let t=new Map,n=(e,t)=>`${e.conversationId}:${e.conversationTaskId??``}:${t}`;for(let r of e){if(r.role!==`user`||!r.steeredInto||r.visible===!1)continue;let e=n(r,r.steeredInto);t.set(e,Math.max(t.get(e)??0,r.seq))}if(!t.size)return e;let r=e=>e.role===`assistant`&&e.runId?Math.max(e.seq,(t.get(n(e,e.runId))??-1)+.5):e.seq;return[...e].sort((e,t)=>r(e)-r(t)||e.seq-t.seq)}function Qh(e){return e.lastMessageAt??e.createdAt}function $h(e,t){return Number(t.pinned)-Number(e.pinned)||Qh(t)-Qh(e)||(e.id<t.id?-1:+(e.id>t.id))}function eg(e){return e.unread??(e.unreadCount===void 0?e.lastSeq>e.readSeq:e.unreadCount>0)}function tg(e){return e.some(e=>e.visible!==!1&&e.role===`assistant`&&[`queued`,`streaming`,`uncertain`].includes(e.status))}function ng(e,t,n){let r=new Set(e.filter(e=>e.role===`user`&&e.clientRequestId).map(e=>JSON.stringify([e.conversationId,e.conversationTaskId??``,e.clientRequestId]))),i=Math.max(0,...e.map(e=>e.seq)),a=t.filter(e=>!r.has(JSON.stringify([e.conversationId,e.taskId??``,e.requestId]))).map((e,r)=>n(e,(e.afterSeq??i)+(r+1)/(t.length+1)));return a.length?[...e,...a].sort((e,t)=>e.seq-t.seq):e}var rg=e=>`workspace-outbox-v1:${e}`;function ig(e){let t=JSON.parse(localStorage.getItem(rg(e))??`[]`);if(!Array.isArray(t))throw Error(`待发送消息缓存无法读取`);return t.filter(e=>!!e&&typeof e.requestId==`string`&&typeof e.conversationId==`string`&&typeof e.content==`string`&&Array.isArray(e.attachments)&&e.body?.requestId===e.requestId&&Number.isFinite(e.createdAt)).map(e=>e.state===`sending`||e.state===`queued`?{...e,state:`uncertain`,error:`发送时页面关闭,请确认后重试。`}:e)}function ag(e,t){if(t.length>100)throw Error(`待发送消息已满,请先处理已有消息。`);localStorage.setItem(rg(e),JSON.stringify(t))}function og(e,t){return ng(e,t,(e,t)=>({id:`pending:${e.requestId}`,localRequestId:e.requestId,conversationId:e.conversationId,conversationTaskId:e.taskId,seq:t,role:`user`,content:e.content,reasoning:``,createdAt:e.createdAt,status:e.state===`failed`||e.state===`uncertain`?e.state:`queued`,error:e.error,attachments:e.attachments,tools:[]}))}var sg=`workspace-message-patch-v1`,cg=class extends Error{constructor(){super(`消息版本不连续,需要重新同步`)}},lg=class{messages=new Map;clear(){this.messages.clear()}remember(e){let t=this.messages.get(e.id);if(!(t&&(t.revision??0)>(e.revision??0)))for(this.messages.delete(e.id),this.messages.set(e.id,e);this.messages.size>512;)this.messages.delete(this.messages.keys().next().value)}normalize(e){if(e.type===`conversation.deleted`||e.type===`task.deleted`){let t=e.data.id;for(let[n,r]of this.messages)(e.type===`conversation.deleted`?r.conversationId===t:r.conversationTaskId===t)&&this.messages.delete(n)}if(e.type===`message.changed`){let t=e.data;return this.remember(t),{...e,data:this.messages.get(t.id)}}if(e.type!==`message.patch`)return e;let t=e.data,n=this.messages.get(t.id);if(!n||n.conversationId!==t.conversationId||e.conversationId!==t.conversationId||(n.conversationTaskId??null)!==(t.conversationTaskId??null)||!Number.isSafeInteger(t.baseRevision)||t.baseRevision<1||t.revision!==t.baseRevision+1||typeof t.contentAppend!=`string`||typeof t.reasoningAppend!=`string`)throw new cg;if((n.revision??0)>=t.revision)return{...e,type:`message.changed`,data:n};if(n.revision!==t.baseRevision)throw new cg;let r={...n,revision:t.revision,content:n.content+t.contentAppend,reasoning:n.reasoning+t.reasoningAppend};return this.remember(r),{...e,type:`message.changed`,data:r}}},ug={vm_wait:`等待电脑`,auth_wait:`等待授权`,input_wait:`等待补充`,peer_wait:`等待同伴`,resource_wait:`等待资源`,queued:`排队中`,review:`复核中`,tool:`调用工具`,thinking:`思考中`,writing:`正在输入…`,completing:`正在完成`,stopping:`正在停止`,retry:`出错重试`},dg={authorization:`auth_wait`,input:`input_wait`,peer:`peer_wait`,resource:`resource_wait`};function fg(e){if(e.vmWait)return`vm_wait`;if(e.waitingReason&&dg[e.waitingReason])return dg[e.waitingReason];if(e.collaborationWaiting)return`peer_wait`;if(e.stopRequested)return`stopping`;if(e.runStatus===`uncertain`)return`retry`;if(e.runStatus===`queued`)return`queued`;if(e.backgroundPhase===`review`||e.reviewState===`running`||e.reviewState===`pending`)return`review`;if(e.hasRunningTool)return`tool`;if(e.hasReasoning&&!e.hasStreamingText)return`thinking`;if(e.hasStreamingText&&e.hadToolsOrReasoning&&!e.hasRunningTool)return`completing`;if(e.hasStreamingText||e.runStatus===`running`)return`writing`;if(e.runStatus===`waiting`)return`input_wait`;if(e.runStatus&&[`queued`,`running`,`waiting`,`uncertain`].includes(e.runStatus))return`writing`}function pg(e){let t=fg(e);return t?ug[t]:void 0}function mg(e){let t=[...e??[]].reverse().find(e=>e.role===`assistant`&&(e.status===`streaming`||e.is_streaming===!0));if(!t)return{hasRunningTool:!1,hasReasoning:!1,hasStreamingText:!1,hadToolsOrReasoning:!1};let n=(t.tools??[]).map(e=>e&&typeof e==`object`?e:null).filter(Boolean),r=n.some(e=>e.status===`running`||e.status===`pending`),i=!!(t.reasoning&&t.reasoning.trim());return{hasRunningTool:r,hasReasoning:i,hasStreamingText:!!(t.content&&t.content.trim()),hadToolsOrReasoning:i||n.length>0}}var hg=`在处理`,gg=new Set([`queued`,`running`,`waiting`,`review`,`stopping`]);function _g(e,t){if(e.originConversationId===t.id)return!0;if(t.kind===`group`)return!1;let n=t.memberIds;return n?.length?[e.coordinatorAgentId,e.agentId].some(e=>!!e&&n.includes(e)):!1}function vg(e,t){return!t||!e?.length?!1:e.some(e=>gg.has(e.status)&&(!e.kind||e.kind===`manual`||e.kind===`workstream`)&&e.visibility!==`private`&&_g(e,t))}function yg(e){if(!e.foregroundActive)return vg(e.tasks,e.conversation)?hg:void 0}var bg={class:`unread-header`},xg={class:`unread-controls`},Sg=[`disabled`,`aria-busy`],Cg={key:0,class:`unread-error`,role:`alert`},wg={class:`unread-rows`},Tg=[`disabled`,`onClick`],Eg={class:`unread-row__icon`},Dg={class:`unread-row__copy`},Og=[`title`],kg={class:`unread-row__meta`},Ag={class:`unread-row__preview`},jg=[`aria-label`],Mg={key:0,class:`unread-empty`},Ng={class:`unread-empty__icon`},Pg=V(E({__name:`UnreadPanel`,props:{anchor:{}},emits:[`close`],setup(e,{emit:t}){let n=e,r=t,i=et(),a=Ce(),o=O(!1),c=O(``),d=O(),f=H(()=>i.snapshot.conversations),h=H(()=>f.value.reduce((e,t)=>e+t.count,0)),g=H(()=>({"--unread-left":`${n.anchor.left}px`,"--unread-top":`${n.anchor.top}px`}));m(()=>{d.value?.focus(),i.refresh()});function _(e){if(e.key!==`Tab`||!d.value)return;let t=[...d.value.querySelectorAll(`button:not(:disabled)`)],n=t[0],r=t.at(-1);e.shiftKey&&(document.activeElement===n||document.activeElement===d.value)?(e.preventDefault(),r?.focus()):!e.shiftKey&&document.activeElement===r&&(e.preventDefault(),n?.focus())}async function v(){if(o.value||!f.value.length)return;let e=JSON.parse(JSON.stringify(f.value));o.value=!0,c.value=``;try{await i.read(e)}catch(e){c.value=e instanceof Error?e.message:`同步失败,请重试`}finally{o.value=!1}}async function y(e){let t=e.messages[0];if(!(!t||o.value)){c.value=``;try{await a.push({path:`/conversations/${encodeURIComponent(e.id)}`,query:{...e.profile?{profile:e.profile}:{},...t.taskId?{taskId:t.taskId}:{},unread:t.id}}),r(`close`)}catch(e){c.value=e instanceof Error?e.message:`无法打开会话,请重试`}}}return(e,t)=>(u(),k(L,{to:`body`},[D(`div`,{class:`unread-overlay`,style:l(g.value),onClick:t[1]||=X(e=>r(`close`),[`self`]),onKeydown:t[2]||=Ye(X(e=>r(`close`),[`prevent`,`stop`]),[`esc`])},[D(`section`,{id:`unread-center`,ref_key:`panel`,ref:d,class:`unread-panel`,role:`dialog`,"aria-modal":`true`,"aria-labelledby":`unread-center-title`,tabindex:`-1`,onKeydown:_},[D(`header`,bg,[D(`div`,null,[t[3]||=D(`h2`,{id:`unread-center-title`},`未读消息`,-1),D(`p`,null,s(h.value)+` 条未读 · `+s(f.value.length)+` 个会话`,1)]),D(`button`,{class:`unread-close`,type:`button`,"aria-label":`关闭未读消息`,onClick:t[0]||=e=>r(`close`)},[U(Z,{name:`close`,size:20})])]),D(`div`,xg,[D(`button`,{class:`unread-clear`,type:`button`,disabled:o.value||!f.value.length,"aria-busy":o.value,"aria-label":`将当前筛选的消息全部标为已读`,onClick:v},[U(Z,{name:`check`,size:16}),w(s(o.value?`正在同步…`:`全部标已读`),1)],8,Sg)]),c.value||R(i).error?(u(),F(`p`,Cg,s(c.value||R(i).error),1)):z(``,!0),D(`div`,wg,[(u(!0),F(T,null,p(f.value,e=>(u(),F(`button`,{key:`${e.mode}:${e.profile}:${e.id}`,type:`button`,class:`unread-row`,disabled:o.value,onClick:t=>y(e)},[D(`span`,Eg,[U(Z,{name:`users`,size:20})]),D(`span`,Dg,[D(`strong`,{title:e.name},s(e.name),9,Og),D(`span`,kg,[w(s(e.mode===`bot`?`Bot`:`聊天`),1),e.profile?(u(),F(T,{key:0},[w(` · `+s(e.profile),1)],64)):z(``,!0)]),D(`span`,Ag,s(e.preview),1)]),D(`b`,{class:`unread-row__count`,"aria-label":`${e.count} 条未读`},s(e.count>99?`99+`:e.count),9,jg)],8,Tg))),128)),f.value.length?z(``,!0):(u(),F(`div`,Mg,[D(`span`,Ng,[U(Z,{name:`check`,size:24})]),t[4]||=D(`strong`,null,`暂无未读消息`,-1),t[5]||=D(`p`,null,`新的回复会显示在这里`,-1)]))]),t[6]||=D(`footer`,null,`打开会话并查看消息后,会自动标为已读。`,-1)],544)],36)]))}}),[[`__scopeId`,`data-v-a771f1fa`]]),Fg=[`aria-label`],Ig=[`src`],Lg={key:1,"aria-hidden":`true`},Rg=V(E({__name:`AccountInitialAvatar`,props:{name:{},imageUrl:{default:``},size:{default:30}},setup(e){let t=e,n=H(()=>Array.from(t.name.trim())[0]?.toLocaleUpperCase()||`?`),r=[`#1488ff`,`#00a17a`,`#9655f7`,`#e05d2f`,`#b7791f`,`#5166d6`],i=H(()=>{let e=2166136261;for(let n of new TextEncoder().encode(t.name.trim().toLocaleLowerCase()||`?`))e^=n,e=Math.imul(e,16777619)>>>0;return r[e%r.length]});return(t,r)=>(u(),F(`span`,{class:`account-initial-avatar`,style:l({width:`${e.size}px`,height:`${e.size}px`,backgroundColor:i.value,fontSize:`${Math.max(11,Math.round(e.size*.42))}px`}),role:`img`,"aria-label":`${e.name||`当前账号`} 的账号头像`},[e.imageUrl?(u(),F(`img`,{key:0,src:e.imageUrl,alt:``},null,8,Ig)):(u(),F(`span`,Lg,s(n.value),1))],12,Fg))}}),[[`__scopeId`,`data-v-db26fdc7`]]),zg={xmlns:`http://www.w3.org/2000/svg`,"xmlns:xlink":`http://www.w3.org/1999/xlink`,viewBox:`0 0 24 24`},Bg=E({name:`At`,render:function(e,t){return u(),F(`svg`,zg,t[0]||=[D(`g`,{fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`},[D(`circle`,{cx:`12`,cy:`12`,r:`4`}),D(`path`,{d:`M16 12v1.5a2.5 2.5 0 0 0 5 0V12a9 9 0 1 0-5.5 8.28`})],-1)])}}),Vg={xmlns:`http://www.w3.org/2000/svg`,"xmlns:xlink":`http://www.w3.org/1999/xlink`,viewBox:`0 0 24 24`},Hg=E({name:`ChevronRight`,render:function(e,t){return u(),F(`svg`,Vg,t[0]||=[D(`path`,{d:`M9 6l6 6l-6 6`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`},null,-1)])}}),Ug={xmlns:`http://www.w3.org/2000/svg`,"xmlns:xlink":`http://www.w3.org/1999/xlink`,viewBox:`0 0 24 24`},Wg=E({name:`Loader`,render:function(e,t){return u(),F(`svg`,Ug,t[0]||=[A(`<g fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 6V3"></path><path d="M16.25 7.75L18.4 5.6"></path><path d="M18 12h3"></path><path d="M16.25 16.25l2.15 2.15"></path><path d="M12 18v3"></path><path d="M7.75 16.25L5.6 18.4"></path><path d="M6 12H3"></path><path d="M7.75 7.75L5.6 5.6"></path></g>`,1)])}}),Gg={xmlns:`http://www.w3.org/2000/svg`,"xmlns:xlink":`http://www.w3.org/1999/xlink`,viewBox:`0 0 24 24`},Kg=E({name:`Microphone`,render:function(e,t){return u(),F(`svg`,Gg,t[0]||=[A(`<g fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="9" y="2" width="6" height="11" rx="3"></rect><path d="M5 10a7 7 0 0 0 14 0"></path><path d="M8 21h8"></path><path d="M12 17v4"></path></g>`,1)])}}),qg={xmlns:`http://www.w3.org/2000/svg`,"xmlns:xlink":`http://www.w3.org/1999/xlink`,viewBox:`0 0 24 24`},Jg=E({name:`PhoneOff`,render:function(e,t){return u(),F(`svg`,qg,t[0]||=[D(`g`,{fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`},[D(`path`,{d:`M3 21L21 3`}),D(`path`,{d:`M5.831 14.161A15.946 15.946 0 0 1 3 6a2 2 0 0 1 2-2h4l2 5l-2.5 1.5c.108.22.223.435.345.645m1.751 2.277A11.03 11.03 0 0 0 13.5 15.5L15 13l5 2v4a2 2 0 0 1-2 2a15.963 15.963 0 0 1-10.344-4.657`})],-1)])}}),Yg={xmlns:`http://www.w3.org/2000/svg`,"xmlns:xlink":`http://www.w3.org/1999/xlink`,viewBox:`0 0 24 24`},Xg=E({name:`PlayerStop`,render:function(e,t){return u(),F(`svg`,Yg,t[0]||=[D(`rect`,{x:`5`,y:`5`,width:`14`,height:`14`,rx:`2`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`},null,-1)])}}),Zg={xmlns:`http://www.w3.org/2000/svg`,"xmlns:xlink":`http://www.w3.org/1999/xlink`,viewBox:`0 0 24 24`},Qg=E({name:`Plug`,render:function(e,t){return u(),F(`svg`,Zg,t[0]||=[A(`<g fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 6l8 8l-2 2a5.657 5.657 0 1 1-8-8l2-2z"></path><path d="M4 20l4-4"></path><path d="M15 4l-3.5 3.5"></path><path d="M20 9l-3.5 3.5"></path></g>`,1)])}}),$g={xmlns:`http://www.w3.org/2000/svg`,"xmlns:xlink":`http://www.w3.org/1999/xlink`,viewBox:`0 0 24 24`},e_=E({name:`ShieldCheck`,render:function(e,t){return u(),F(`svg`,$g,t[0]||=[D(`g`,{fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`},[D(`path`,{d:`M9 12l2 2l4-4`}),D(`path`,{d:`M12 3a12 12 0 0 0 8.5 3A12 12 0 0 1 12 21A12 12 0 0 1 3.5 6A12 12 0 0 0 12 3`})],-1)])}}),t_={xmlns:`http://www.w3.org/2000/svg`,"xmlns:xlink":`http://www.w3.org/1999/xlink`,viewBox:`0 0 24 24`},n_=E({name:`Stars`,render:function(e,t){return u(),F(`svg`,t_,t[0]||=[D(`g`,{fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`},[D(`path`,{d:`M17.8 19.817l-2.172 1.138a.392.392 0 0 1-.568-.41l.415-2.411l-1.757-1.707a.389.389 0 0 1 .217-.665l2.428-.352l1.086-2.193a.392.392 0 0 1 .702 0l1.086 2.193l2.428.352a.39.39 0 0 1 .217.665l-1.757 1.707l.414 2.41a.39.39 0 0 1-.567.411L17.8 19.817z`}),D(`path`,{d:`M6.2 19.817l-2.172 1.138a.392.392 0 0 1-.568-.41l.415-2.411l-1.757-1.707a.389.389 0 0 1 .217-.665l2.428-.352l1.086-2.193a.392.392 0 0 1 .702 0l1.086 2.193l2.428.352a.39.39 0 0 1 .217.665l-1.757 1.707l.414 2.41a.39.39 0 0 1-.567.411L6.2 19.817z`}),D(`path`,{d:`M12 9.817l-2.172 1.138a.392.392 0 0 1-.568-.41l.415-2.411l-1.757-1.707a.389.389 0 0 1 .217-.665l2.428-.352l1.086-2.193a.392.392 0 0 1 .702 0l1.086 2.193l2.428.352a.39.39 0 0 1 .217.665l-1.757 1.707l.414 2.41a.39.39 0 0 1-.567.411L12 9.817z`})],-1)])}}),r_={xmlns:`http://www.w3.org/2000/svg`,"xmlns:xlink":`http://www.w3.org/1999/xlink`,viewBox:`0 0 24 24`},i_=E({name:`Target`,render:function(e,t){return u(),F(`svg`,r_,t[0]||=[D(`g`,{fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`},[D(`circle`,{cx:`12`,cy:`12`,r:`1`}),D(`circle`,{cx:`12`,cy:`12`,r:`5`}),D(`circle`,{cx:`12`,cy:`12`,r:`9`})],-1)])}}),a_={xmlns:`http://www.w3.org/2000/svg`,"xmlns:xlink":`http://www.w3.org/1999/xlink`,viewBox:`0 0 24 24`},o_=E({name:`X`,render:function(e,t){return u(),F(`svg`,a_,t[0]||=[D(`g`,{fill:`none`,stroke:`currentColor`,"stroke-width":`2`,"stroke-linecap":`round`,"stroke-linejoin":`round`},[D(`path`,{d:`M18 6L6 18`}),D(`path`,{d:`M6 6l12 12`})],-1)])}}),s_=[{id:`current`,name:`当前样式`,detail:`经典蓝灰`},{id:`grok`,name:`Grok Bot`,detail:`黑白灰`},{id:`codex`,name:`Codex`,detail:`浅蓝双气泡`}],c_=[`#090909`,`#2868D7`,`#26BFAE`,`#9370DB`,`#E56A92`,`#F59742`,`#A2A5AF`];function l_(e,t,n,r,i=16,a=!1){return{light:e,dark:t,lightEnd:e,darkEnd:t,lightText:n,darkText:r,radius:i,tail:a,gradient:!1,border:!1}}function u_(e){let t=l_(`#F1F1F1`,`#262626`,`#202124`,`#F4F4F5`,16,e===`current`);return{version:1,preset:e,user:e===`grok`?l_(`#090909`,`#5A5A5A`,`#FFFFFF`,`#FFFFFF`,16):e===`codex`?l_(`#E4F3FC`,`#203C50`,`#1E69A5`,`#C1E5FF`):l_(`#2868D7`,`#2868D7`,`#FFFFFF`,`#FFFFFF`,16,!0),assistant:t}}function d_(e){return typeof e==`string`&&/^#[0-9a-f]{6}$/i.test(e)}function f_(e){let t=[1,3,5].map(t=>parseInt(e.slice(t,t+2),16)/255).map(e=>e<=.04045?e/12.92:((e+.055)/1.055)**2.4);return t[0]*.2126+t[1]*.7152+t[2]*.0722}function p_(e,t){let n=f_(e),r=f_(t);return(Math.max(n,r)+.05)/(Math.min(n,r)+.05)}function m_(e,t=e){return Math.min(p_(e,`#FFFFFF`),p_(t,`#FFFFFF`))>Math.min(p_(e,`#141414`),p_(t,`#141414`))?`#FFFFFF`:`#141414`}function h_(e){let t=u_(`current`);if(!e||typeof e!=`object`||Array.isArray(e))return t;let n=e;if(n.version!==1)return t;let r=s_.find(e=>e.id===n.preset);if(r)return u_(r.id);if(n.preset!==`custom`)return t;for(let e of[`user`,`assistant`]){let r=n[e];if(!r||![`light`,`dark`,`lightEnd`,`darkEnd`].every(e=>d_(r[e])))return t;let i=t[e];t[e]={...i,light:r.light.toUpperCase(),dark:r.dark.toUpperCase(),lightEnd:r.lightEnd.toUpperCase(),darkEnd:r.darkEnd.toUpperCase(),lightText:d_(r.lightText)?r.lightText:m_(r.light,r.gradient?r.lightEnd:r.light),darkText:d_(r.darkText)?r.darkText:m_(r.dark,r.gradient?r.darkEnd:r.dark),gradient:r.gradient===!0,border:r.border===!0,tail:r.tail===!0,radius:typeof r.radius==`number`&&Number.isFinite(r.radius)?Math.max(4,Math.min(28,r.radius)):i.radius}}return t.preset=`custom`,t}function g_(e,t){let n=t?e.dark:e.light,r=e.gradient?t?e.darkEnd:e.lightEnd:n,i=t?e.darkText:e.lightText,a=Math.min(p_(n,i),p_(r,i))>=4.5?i:m_(n,r),o=Math.min(p_(n,a),p_(r,a))<4.5,s=`linear-gradient(135deg, ${n}, ${r})`,c=a===`#FFFFFF`?`rgba(0,0,0,.65)`:`rgba(255,255,255,.8)`;return{text:a,background:o?`linear-gradient(${c}, ${c}), ${s}`:e.gradient?s:n}}function __(e,t){let n=g_(e,!1),r=g_(e,!0),i=`${e.radius}px`;return{"--bubble-light":n.background,"--bubble-dark":r.background,"--bubble-light-text":n.text,"--bubble-dark-text":r.text,"--bubble-radius":e.tail?t===`user`?`${i} ${i} 4px ${i}`:`${i} ${i} ${i} 4px`:i,"--bubble-border":e.border?`1px solid color-mix(in srgb, currentColor 24%, transparent)`:`1px solid transparent`}}var v_=`yaovi:chat-appearance:v1`;function y_(){try{return h_(JSON.parse(window.localStorage.getItem(`yaovi:chat-appearance:v1`)||`null`))}catch{return u_(`current`)}}var b_=O(y_()),x_=O(null),S_=O(``);function C_(e,t=!0){let n=h_(e);if(JSON.stringify(n)!==JSON.stringify(b_.value))try{window.localStorage.setItem(v_,JSON.stringify(n)),t&&(x_.value=JSON.parse(JSON.stringify(b_.value))),b_.value=n,S_.value=``}catch{S_.value=`无法保存外观设置,请检查浏览器存储空间。`}}typeof window<`u`&&window.addEventListener(`storage`,e=>{(e.key===`yaovi:chat-appearance:v1`||e.key===null)&&(b_.value=y_(),x_.value=null)});function w_(){return{appearance:r(b_),previous:r(x_),saveError:r(S_),update:C_,selectPreset:e=>C_(u_(e)),undo:()=>{if(x_.value){let e=x_.value;C_(e,!1),S_.value||(x_.value=null)}}}}var T_={class:`bubble-settings`,"aria-label":`聊天气泡设置`},E_={class:`bubble-controls`},D_={"aria-label":`预设样式`},O_={class:`bubble-presets`,role:`group`,"aria-label":`气泡预设`},k_=[`aria-pressed`,`data-testid`,`onClick`],A_=[`data-bubble-theme`],j_={class:`bubble-custom`,"aria-label":`自定义微调`},M_={class:`bubble-segment`,role:`group`,"aria-label":`调整哪一方`},N_=[`aria-pressed`],P_=[`aria-pressed`],F_={class:`bubble-field`},I_={class:`bubble-segment fill-segment`,role:`group`,"aria-label":`背景类型`},L_=[`aria-pressed`],R_=[`aria-pressed`],z_={class:`bubble-swatches`,role:`group`,"aria-label":`快捷颜色`},B_=[`aria-label`,`aria-pressed`,`onClick`],V_={class:`bubble-field`},H_={class:`bubble-color-input`},U_=[`value`],W_=[`aria-invalid`],G_={key:0,class:`bubble-field`},K_={class:`bubble-color-input`},q_=[`value`],J_=[`aria-invalid`],Y_={key:1,class:`bubble-error`,role:`alert`},X_={class:`bubble-field`},Z_={class:`auto-text`},Q_=[`open`],$_={class:`bubble-shape-fields`},ev={class:`bubble-field`},tv=[`value`],nv={class:`bubble-field`},rv=[`checked`],iv={class:`bubble-field`},av=[`checked`],ov=[`data-bubble-theme`],sv={class:`preview-modes`,role:`group`,"aria-label":`预览主题`},cv=[`aria-pressed`],lv=[`aria-pressed`],uv={class:`preview-conversation`},dv={class:`preview-row is-user`},fv={class:`preview-row`},pv={class:`preview-row preview-extra`},mv={class:`preview-row is-user preview-extra`},hv={class:`preview-composer`,"aria-hidden":`true`},gv={class:`bubble-footer`},_v={role:`status`},vv=V(E({__name:`ChatAppearancePanel`,props:{theme:{default:`light`}},setup(e){let t=e,{appearance:n,previous:r,saveError:i,update:a,selectPreset:o,undo:c}=w_(),m=O(`user`),h=O(window.innerWidth>=1e3),g=O(t.theme),_=O(``),v=O(``),b=O(!1),x=H(()=>n.value[m.value]),S=H(()=>g.value===`dark`?`dark`:`light`),C=H(()=>g.value===`dark`?`darkEnd`:`lightEnd`),E=H(()=>s_.find(e=>e.id===n.value.preset)?.name||`自定义`);f([x,g],()=>{_.value=x.value[S.value],v.value=x.value[C.value],b.value=!1},{immediate:!0});function A(e){let t=JSON.parse(JSON.stringify(n.value));t.preset=`custom`,Object.assign(t[m.value],e),(`light`in e||`lightEnd`in e||`gradient`in e)&&(t[m.value].lightText=m_(t[m.value].light,t[m.value].gradient?t[m.value].lightEnd:t[m.value].light)),(`dark`in e||`darkEnd`in e||`gradient`in e)&&(t[m.value].darkText=m_(t[m.value].dark,t[m.value].gradient?t[m.value].darkEnd:t[m.value].dark)),a(t)}function j(e,t=!1){let n=e.startsWith(`#`)?e:`#${e}`;b.value=!d_(n),b.value||A({[t?C.value:S.value]:n.toUpperCase()})}let M=H(()=>g_(x.value,g.value===`dark`).text);return(e,t)=>(u(),F(`section`,T_,[D(`div`,E_,[t[29]||=D(`p`,{class:`bubble-intro`},`选一套预设,也可以按喜好微调。`,-1),t[30]||=D(`p`,{class:`bubble-scope`},[w(`应用到 `),D(`strong`,null,`所有会话`),D(`span`,null,`仅当前设备`)],-1),D(`section`,D_,[t[18]||=D(`h4`,null,`预设样式`,-1),t[19]||=D(`p`,{class:`bubble-hint`},`点击即可应用`,-1),D(`div`,O_,[(u(!0),F(T,null,p(R(s_),e=>(u(),F(`button`,{key:e.id,type:`button`,"aria-pressed":R(n).preset===e.id,"data-testid":`bubble-preset-${e.id}`,onClick:t=>R(o)(e.id)},[D(`span`,{class:`preset-sample`,"data-bubble-theme":g.value,"aria-hidden":`true`},[D(`span`,{class:`chat-bubble sample-user`,style:l(R(__)(R(u_)(e.id).user,`user`))},`你好`,4),D(`span`,{class:`chat-bubble sample-assistant`,style:l(R(__)(R(u_)(e.id).assistant,`assistant`))},`我在`,4)],8,A_),R(n).preset===e.id?(u(),k(Z,{key:0,class:`preset-check`,name:`check`,size:15})):z(``,!0),D(`strong`,null,s(e.name),1),D(`small`,null,s(e.detail),1)],8,k_))),128))])]),D(`section`,j_,[t[28]||=D(`h4`,null,`自定义微调`,-1),D(`div`,M_,[D(`button`,{type:`button`,"aria-pressed":m.value===`user`,onClick:t[0]||=e=>m.value=`user`},`我的气泡`,8,N_),D(`button`,{type:`button`,"aria-pressed":m.value===`assistant`,onClick:t[1]||=e=>m.value=`assistant`},`助手气泡`,8,P_)]),D(`div`,F_,[t[20]||=D(`strong`,null,`背景`,-1),D(`div`,I_,[D(`button`,{type:`button`,"aria-pressed":!x.value.gradient,onClick:t[2]||=e=>A({gradient:!1})},`纯色`,8,L_),D(`button`,{type:`button`,"aria-pressed":x.value.gradient,onClick:t[3]||=e=>A({gradient:!0})},`渐变`,8,R_)])]),D(`div`,z_,[(u(!0),F(T,null,p(R(c_),e=>(u(),F(`button`,{key:e,type:`button`,"aria-label":`选择颜色 ${e}`,"aria-pressed":x.value[S.value]===e,onClick:t=>j(e)},[D(`span`,{style:l({background:e,color:R(m_)(e)})},[x.value[S.value]===e?(u(),k(Z,{key:0,name:`check`,size:18})):z(``,!0)],4)],8,B_))),128))]),D(`label`,V_,[D(`span`,null,s(x.value.gradient?`起始颜色`:`自定义颜色`),1),D(`div`,H_,[D(`input`,{type:`color`,value:x.value[S.value],"aria-label":`选择自定义颜色`,onChange:t[4]||=e=>j(e.target.value)},null,40,U_),d(D(`input`,{"onUpdate:modelValue":t[5]||=e=>_.value=e,"aria-label":`颜色十六进制值`,maxlength:`7`,spellcheck:`false`,"aria-invalid":b.value,onChange:t[6]||=e=>j(_.value),onKeydown:t[7]||=Ye(e=>j(_.value),[`enter`])},null,40,W_),[[Y,_.value]])])]),x.value.gradient?(u(),F(`label`,G_,[t[21]||=D(`span`,null,`结束颜色`,-1),D(`div`,K_,[D(`input`,{type:`color`,value:x.value[C.value],"aria-label":`选择渐变结束颜色`,onChange:t[8]||=e=>j(e.target.value,!0)},null,40,q_),d(D(`input`,{"onUpdate:modelValue":t[9]||=e=>v.value=e,"aria-label":`渐变结束颜色值`,maxlength:`7`,"aria-invalid":b.value,onChange:t[10]||=e=>j(v.value,!0)},null,40,J_),[[Y,v.value]])])])):z(``,!0),b.value?(u(),F(`p`,Y_,`请输入有效的六位颜色,例如 #E4F3FC。`)):z(``,!0),D(`div`,X_,[t[23]||=D(`span`,null,`文字颜色`,-1),D(`span`,Z_,[D(`i`,{style:l({background:M.value})},null,4),t[22]||=w(`自动适配`,-1)])]),D(`details`,{class:`bubble-shape`,open:h.value},[D(`summary`,null,[t[24]||=w(`圆角、边框与尾巴`,-1),U(Z,{name:`chevron-down`,size:16})]),D(`div`,$_,[D(`label`,ev,[t[25]||=D(`span`,null,`圆角`,-1),D(`input`,{type:`range`,min:`4`,max:`28`,step:`1`,value:x.value.radius,"aria-label":`气泡圆角`,onChange:t[11]||=e=>A({radius:Number(e.target.value)})},null,40,tv),D(`output`,null,s(x.value.radius),1)]),D(`label`,nv,[t[26]||=D(`span`,null,`边框`,-1),D(`input`,{type:`checkbox`,role:`switch`,checked:x.value.border,onChange:t[12]||=e=>A({border:e.target.checked})},null,40,rv)]),D(`label`,iv,[t[27]||=D(`span`,null,`显示尾巴`,-1),D(`input`,{type:`checkbox`,role:`switch`,checked:x.value.tail,onChange:t[13]||=e=>A({tail:e.target.checked})},null,40,av)])])],8,Q_)])]),D(`aside`,{class:y([`bubble-preview`,{"preview-dark":g.value===`dark`}]),"data-bubble-theme":g.value,"aria-label":`实时预览`},[D(`header`,null,[t[31]||=D(`h4`,null,`实时预览`,-1),D(`div`,sv,[D(`button`,{type:`button`,"aria-label":`预览浅色气泡`,"aria-pressed":g.value===`light`,onClick:t[14]||=e=>g.value=`light`},[U(Z,{name:`sun`,size:18})],8,cv),D(`button`,{type:`button`,"aria-label":`预览深色气泡`,"aria-pressed":g.value===`dark`,onClick:t[15]||=e=>g.value=`dark`},[U(Z,{name:`moon`,size:18})],8,lv)])]),D(`div`,uv,[D(`div`,dv,[D(`div`,{class:`chat-bubble`,style:l(R(__)(R(n).user,`user`))},`帮我整理今天的工作重点。`,4)]),D(`div`,fv,[U(Xe,{name:`Yaovi助手`,size:30,animated:!1}),D(`div`,null,[t[32]||=D(`small`,null,`Yaovi助手`,-1),D(`div`,{class:`chat-bubble`,style:l(R(__)(R(n).assistant,`assistant`))},`当然,我们先聚焦三件事。`,4)])]),D(`div`,pv,[U(Xe,{name:`Yaovi助手`,size:30,animated:!1}),D(`div`,null,[t[34]||=D(`small`,null,`Yaovi助手`,-1),D(`div`,{class:`chat-bubble`,style:l(R(__)(R(n).assistant,`assistant`))},[...t[33]||=[D(`strong`,null,`今天的重点`,-1),D(`ol`,null,[D(`li`,null,`梳理需求`),D(`li`,null,`确认优先级`),D(`li`,null,`安排下一步`)],-1)]],4)])]),D(`div`,mv,[D(`div`,{class:`chat-bubble`,style:l(R(__)(R(n).user,`user`))},`这样看起来更清楚了。`,4)])]),D(`div`,hv,[U(Z,{name:`paperclip`,size:19}),t[35]||=D(`span`,null,`畅所欲言`,-1),U(Z,{name:`arrow-up`,size:18})])],10,ov),D(`footer`,gv,[D(`button`,{type:`button`,onClick:t[16]||=e=>R(o)(`current`)},`恢复默认`),D(`span`,_v,s(R(i)||`已应用 ${E.value}`),1),R(r)?(u(),F(`button`,{key:0,type:`button`,class:`bubble-undo`,onClick:t[17]||=(...e)=>R(c)&&R(c)(...e)},`撤销`)):z(``,!0)])]))}}),[[`__scopeId`,`data-v-83914b72`]]),yv=O(),bv=[`aria-busy`],xv={key:0,role:`status`},Sv={key:1,role:`status`},Cv={key:2,role:`alert`},wv={key:3,role:`status`},Tv=[`disabled`],Ev={key:4},Dv={key:0},Ov={key:0,class:`bot-approvals`},kv={key:0},Av={key:1},jv={key:0},Mv={key:1},Nv={key:2},Pv=[`disabled`,`onClick`],Fv={key:1,class:`credential-drafts`},Iv={key:0},Lv={class:`actions`},Rv=[`disabled`,`title`,`onClick`],zv=[`disabled`,`onClick`],Bv=[`disabled`],Vv=[`disabled`],Hv=[`disabled`],Uv=[`disabled`],Wv=[`disabled`],Gv=[`disabled`],Kv={class:`actions`},qv=[`disabled`],Jv=[`disabled`],Yv=[`disabled`],Xv={key:0},Zv={key:1},Qv={key:0},$v={class:`actions`},ey=[`disabled`,`onClick`],ty=[`disabled`,`onClick`],ny=[`disabled`],ry={key:0,role:`status`},iy={key:1},ay=[`disabled`],oy=[`disabled`],sy={key:0,value:`api`},cy={key:1,value:`env`},ly=[`disabled`],uy=[`required`,`disabled`],dy={key:3},fy=[`disabled`],py={key:4},my=[`disabled`],hy={key:5},gy=[`disabled`],_y=[`required`,`disabled`],vy={key:7},yy=[`required`,`disabled`],by=[`required`,`disabled`],xy={key:2},Sy={key:3},Cy={key:8},wy=[`disabled`],Ty={key:9,class:`checkbox-field`},Ey=[`disabled`],Dy={key:10},Oy={key:11,class:`advanced-connection`},ky=[`disabled`],Ay=[`disabled`],jy={key:12,class:`checkbox-field`},My=[`disabled`],Ny=[`disabled`],Py=[`disabled`],Fy=[`disabled`],Iy=[`disabled`],Ly=[`disabled`],Ry=[`disabled`],zy=[`disabled`],By=[`disabled`],Vy=[`disabled`],Hy={key:0},Uy=[`disabled`],Wy={key:1},Gy=[`disabled`],Ky={key:2},qy=[`disabled`],Jy={key:3},Yy=[`disabled`],Xy={key:0},Zy={key:0},Qy=[`disabled`],$y={value:``},eb=[`value`],tb={class:`actions`},nb=[`disabled`],rb=[`disabled`],ib=[`disabled`],ab=[`value`],ob=[`disabled`],sb=[`value`],cb={key:0},lb=[`disabled`],ub=[`disabled`,`onClick`],db=[`disabled`],fb=[`value`],pb=[`disabled`],mb=[`value`],hb=[`disabled`],gb={key:0},_b=[`disabled`],vb=[`disabled`,`onClick`],yb=[`disabled`],bb=[`disabled`],xb={key:5},Sb=V(E({__name:`CredentialVaultPanel`,setup(e){let t=O(),n=O(!1),r=O(``),a=O(``),o=O(``),c=O(``),l=O(``),h=O(``),g=O(``),_=O(``),v=O(``),y=O(`website`),b=O(``),x=O(``),S=O(``),C=O(``),E=O(22),k=O(``),A=O(),j=O(!1),M=O(``),N=O(``),P=O(`website.login`),I=O(`password`);function L(e){return e.expiresAt===void 0?`有效期未知`:e.expiresAt<=Date.now()?`已过期,请编辑更新 Token`:`有效期至 `+new Date(e.expiresAt).toLocaleString()}let R=O(``),B=O(``);function V(e){return(t.value?.botGrants??[]).filter(t=>t.credentialRef===e).map(e=>t.value?.bots?.find(t=>t.id===e.agentId)?.name??`Bot`).join(`、`)}let U=H(()=>A.value?.target.kind===`ssh`&&y.value===`ssh`&&I.value!==(A.value.target.auth??`privateKey`)),W=H(()=>!A.value||U.value),ee=H(()=>t.value?.entries.find(e=>e.id===N.value)),te=H(()=>ee.value?.target.kind===`ssh`&&!ee.value.target.hostKey),G=O(!1),K=O(`ssh.exec`),ne=O(`/usr/bin/uptime`),re=O(``),ie=O(``),q=O(65536),ae=O(!1),J=O(`/login`),oe=O(`/login`),se=O(`/account`),ce=O(``),le=O(`login`),ue=O(`username`),de=O(`password`),fe=O(`#login-success`),pe,me=!0,he=new Set;function ge(){o.value=``,c.value=``,l.value=``,h.value=``,g.value=``,ie.value=``,ae.value=!1}function _e(e){return{vault_saved_but_not_granted:`凭据已保存,但 Bot 授权未完成。请刷新后选择 Bot 重新授权。`,vault_offline:`密码保险箱连接不可用,请刷新状态或检查数据目录权限。`,vault_locked:`密码保险箱已锁定,请重新手动解锁后添加凭据。`,vault_unlock_failed:`主密码错误或密码库已损坏,请核对主密码。`,vault_token_unsupported:`当前密码库不支持 API Token,请使用本机密码库。`,vault_token_expired:`Token 已过期,请在设置 → 环境与权限 → 密码与凭据编辑更新。`,vault_draft_entry_missing:`请先保存这条凭据,再确认草稿。`,vault_draft_settled:`该草稿已处理过。`,vault_draft_missing:`草稿不存在或已删除。`,vault_invalid_request:`请检查 Token、允许接口与目标地址(HTTP(S) origin,可为局域网);环境变量名需大写字母开头,只含大写字母、数字和下划线,且不能是系统保留名;主密码至少 12 位,网站使用 HTTPS 地址,SSH 地址和端口需有效。手填指纹时请使用 SHA256 格式。`,vault_auth_secret_required:`更换 SSH 认证方式后,请重新填写密码或私钥。`,vault_executor_not_enabled:`凭据执行器暂时不可用,请刷新状态或检查服务。`,vault_host_probe_failed:`无法连接 SSH 服务器;已保存的密码不受影响,请检查主机地址和端口后重试授权。`,vault_host_key_required:`首次使用时请选择确认服务器并授权任务。`,vault_host_key_rejected:`服务器身份已改变,已停止连接。请核对服务器后再修改高级设置中的指纹。`}[e&&typeof e==`object`&&`code`in e?String(e.code):``]??`操作未完成,请检查连接和主密码;秘密不会回显。`}async function ve(e,t=`GET`,n){let r=new AbortController;he.add(r);try{return await Q(`/api/app/vault`+e,{method:t,...n?{body:n}:{},signal:r.signal,timeoutMs:2e4,notifyUnauthorized:!1})}finally{he.delete(r)}}async function ye(){let e=await ve(``);if(!me)return;let n=t.value?.unlocked;t.value=e,(!e.online||n&&!e.unlocked)&&(ge(),j.value=!1,x.value=``),be()}function be(){let e=yv.value;if(!e||!t.value)return;let n=t.value.drafts?.find(t=>t.id===e);if(!n){yv.value=void 0;return}if(!t.value.unlocked){a.value=`请先解锁密码库,随后自动打开草稿「`+n.name+`」补全。`;return}yv.value=void 0,Se(n)}f(yv,()=>be());let xe=e=>({website:`网站`,ssh:`SSH`,"api-token":`API Token`,env:`环境变量`})[e];function Se(e){De(),x.value=e.id,_.value=e.name,y.value=e.kind===`api-token`?`api`:e.kind,S.value=e.origin??``,C.value=e.host??``,E.value=e.port??22,v.value=e.username??``,b.value=e.envName??``,e.kind===`ssh`&&(I.value=`privateKey`),B.value=t.value?.bots?.some(t=>t.id===e.agentId)?e.agentId:``}async function Ce(e){await Z(async()=>{await ve(`/drafts/`+e.id+`/dismiss`,`POST`,{})},`草稿已驳回,不会进入密码库`)}async function Z(e,t){if(!n.value){n.value=!0,r.value=``,a.value=``;try{await e(),me&&(a.value=t,await ye())}catch(e){me&&(a.value=``,r.value=_e(e))}finally{ge(),n.value=!1}}}async function we(){if(o.value!==c.value){r.value=`两次主密码不一致`;return}await Z(async()=>{await ve(`/initialize`,`POST`,{password:o.value})},`密码库已创建,仍保持锁定`)}async function Te(){await Z(async()=>{await ve(`/unlock`,`POST`,{password:o.value,seconds:300})},t.value?.storageMode===`local`?`已解锁管理 5 分钟;已授权 Bot 的使用不受此期限影响。`:`已手动解锁 5 分钟;Bot 使用凭据仍需要逐任务授权。`)}async function Ee(){ge(),j.value=!1,await Z(async()=>{await ve(`/lock`,`POST`,{})},t.value?.storageMode===`local`?`管理界面已锁定;已授权 Bot 仍可使用。`:`密码库已锁定,任务授权已撤销`)}function De(e){B.value=``,x.value=``,b.value=e?.target.kind===`env`?e.target.name:``,ge(),A.value=e,_.value=e?.name??``,v.value=e?.username??``,y.value=e?.target.kind??`website`,S.value=e?.target.kind===`website`?e.target.origin:``,C.value=e?.target.kind===`ssh`?e.target.host:``,E.value=e?.target.kind===`ssh`?e.target.port:22,k.value=e?.target.kind===`ssh`?e.target.hostKey??``:``,I.value=e?.target.kind===`ssh`?e.target.auth??`privateKey`:`password`,G.value=!!e?.usage,K.value=e?.usage&&[`ssh.exec`,`sftp.read`,`sftp.write`].includes(e.usage.kind)?e.usage.kind:`ssh.exec`,ne.value=e?.usage?.kind===`ssh.exec`?e.usage.command:`/usr/bin/uptime`,re.value=e?.usage&&(e.usage.kind===`sftp.read`||e.usage.kind===`sftp.write`)?e.usage.remotePath:``,q.value=e?.usage?.kind===`sftp.read`?e.usage.maxBytes:65536;let t=e?.usage?.kind===`website.form`?e.usage:void 0;J.value=t?.loginPath??`/login`,oe.value=t?.submitPath??`/login`,se.value=t?.successPath??`/account`,ce.value=t?.logoutPath??``,le.value=t?.formId??`login`,ue.value=t?.usernameName??`username`,de.value=t?.passwordName??`password`,fe.value=t?.successSelector??`#login-success`,j.value=!0}function Oe(){h.value=``,g.value=``,ae.value=!1}async function ke(){if(W.value&&!h.value){r.value=U.value?`更换 SSH 认证方式后,请重新填写密码或私钥。`:y.value===`api`?`请填写 API Token。`:y.value===`env`?`请填写变量值。`:`请填写密码或私钥。`;return}let e=y.value===`env`?{kind:`env`,name:b.value.trim()}:y.value===`api`?{kind:`api`}:y.value===`website`?{kind:`website`,origin:S.value}:{kind:`ssh`,host:C.value,port:E.value,...k.value.trim()?{hostKey:k.value.trim()}:{},...I.value===`password`?{auth:`password`}:{}},n=y.value===`env`?void 0:y.value===`api`?{kind:`http.request`}:G.value?y.value===`website`?{kind:`website.form`,loginPath:J.value,submitPath:oe.value,successPath:se.value,...ce.value?{logoutPath:ce.value}:{},formId:le.value,usernameName:ue.value,passwordName:de.value,successSelector:fe.value}:K.value===`ssh.exec`?{kind:`ssh.exec`,command:ne.value}:K.value===`sftp.read`?{kind:`sftp.read`,remotePath:re.value,maxBytes:q.value}:{kind:`sftp.write`,remotePath:re.value,...ie.value||!A.value||A.value.usage?.kind!==`sftp.write`?{contents:ie.value}:{}}:void 0,i={name:_.value,...y.value===`api`||y.value===`env`?{}:{username:v.value},target:e,...n?{usage:n}:{},...h.value?{secret:h.value}:{},...y.value===`ssh`&&I.value===`privateKey`?ae.value?{passphrase:``}:g.value?{passphrase:g.value}:{}:{},...A.value?{revision:A.value.revision}:{}},a=t.value?.storageMode===`local`&&(G.value||y.value===`ssh`||y.value===`api`||y.value===`env`)?B.value:``,o=A.value?``:x.value;await Z(async()=>{let e=await ve(A.value?`/entries/`+A.value.id:`/entries`,A.value?`PUT`:`POST`,i);if(j.value=!1,o&&(x.value=``,await ve(`/drafts/`+o+`/confirm`,`POST`,{credentialRef:e.id})),a)try{await ve(`/bot-grant`,`POST`,{credentialRef:e.id,agentId:a})}catch{throw{code:`vault_saved_but_not_granted`}}},a?`凭据已加密保存并授权所选 Bot,返回聊天即可使用。`:A.value&&t.value?.storageMode===`local`?`凭据已保存;已授权 Bot 自动使用最新配置。`:`凭据已加密保存,密码与私钥不回显`)}async function Ae(e){await Z(async()=>{await ve(`/entries/`+e.id,`DELETE`)},`凭据已删除,相关任务授权已撤销`)}async function Ne(){let e=t.value?.tasks.find(e=>e.workId===M.value);e&&await Z(async()=>{await ve(`/leases`,`POST`,{credentialRef:N.value,agentId:e.agentId,workId:e.workId,operation:P.value,seconds:60})},`已授予此任务 60 秒;只执行已配置的操作,密码与执行正文不回显。`)}async function Pe(){await Z(async()=>{await ve(`/bot-grant`,`POST`,{credentialRef:N.value,agentId:R.value})},`此 Bot 已获持续授权;返回聊天即可使用,直到你撤销。`)}function Fe(){let e=ee.value?.usage;e&&(P.value=e.kind===`website.form`?`website.login`:e.kind)}function Ie(e){M.value=e.workId,N.value=e.credentialRef,P.value=e.operation}function Le(e){if(e?.target.kind===`env`)return`注入环境变量 `+e.target.name+`(Bot 运行时的所有子进程可读取,值不进入对话)`;let t=e?.usage;return t?t.kind===`website.form`?`网站表单 `+t.loginPath+` → `+t.submitPath+` → `+t.successPath+(t.logoutPath?` → 退出 `+t.logoutPath:`(远端会话按站点规则到期)`):t.kind===`http.request`?`API 调用,Host 注入 Key`:t.kind===`ssh.exec`?`SSH `+t.command+`,固定无参数`:t.kind===`sftp.read`?`SFTP 读取校验 `+t.remotePath+`,最多 `+t.maxBytes+` 字节`:`SFTP 创建新文件 `+t.remotePath+`,`+t.bytes+` 字节`:`尚未配置,将转人工接管`}async function Re(){await Z(async()=>{let e=await ve(`/backup`,`POST`,{});if(!me)return;let t=URL.createObjectURL(new Blob([e.archive],{type:`application/json`})),n=document.createElement(`a`);n.href=t,n.download=`yaovi-vault-encrypted-backup.json`,n.click(),setTimeout(()=>URL.revokeObjectURL(t),0)},`加密备份已导出;需要导出时的主密码恢复`)}async function ze(e){let t=e.target,n=t.files?.[0];if(n){if(n.size>2097152){r.value=`备份文件超过大小限制`,t.value=``;return}try{await Z(async()=>{let e=await n.text();me&&await ve(`/restore`,`POST`,{archive:e,password:o.value})},`备份已验证并恢复,仍保持锁定`)}finally{t.value=``}}}async function Be(){await Z(async()=>{await ve(`/rotate`,`POST`,{password:l.value})},`主密码与加密密钥已轮换,密码库已锁定;旧备份仍使用旧主密码`)}function Ve(){ge(),j.value=!1;for(let e of he)e.abort();he.clear(),(t.value?.unlocked||n.value)&&Q(`/api/app/vault/lock`,{method:`POST`,body:{},timeoutMs:5e3}).catch(()=>{})}function He(){document.hidden&&Ve()}return m(async()=>{try{await ye()}catch{r.value=`无法读取执行节点密码库状态`}pe=setInterval(()=>{me&&!n.value&&ye().catch(()=>{t.value=void 0,ge()})},3e3),document.addEventListener(`visibilitychange`,He)}),i(()=>{me=!1,clearInterval(pe),document.removeEventListener(`visibilitychange`,He),Ve(),t.value=void 0}),(e,i)=>(u(),F(`section`,{class:`credential-vault`,"aria-busy":n.value},[i[106]||=D(`p`,null,`秘密只在专用界面录入并加密保存,不发送给 Bot。主密码用于添加、修改凭据和管理授权。`,-1),t.value?.storageMode===`local`?(u(),F(`p`,xv,`选择凭据和 Bot,授权一次即可使用,直到你撤销。关闭管理页、到期或重启服务不会撤销 Bot 授权;操作在Yaovi服务器执行,密码不交给模型。`)):(u(),F(`p`,Sv,s(t.value?.execution===`protected-adapters`?`受控执行器已取得人工部署批准:仅支持配置的标准表单、固定 SSH 命令和指定 SFTP 文件;仍须逐任务授权。`:`受控网站与 SSH/SFTP 执行尚未启用。隔离部署批准前,由你人工接管。`),1)),r.value?(u(),F(`p`,Cv,s(r.value),1)):z(``,!0),a.value?(u(),F(`p`,wv,s(a.value),1)):z(``,!0),D(`button`,{type:`button`,disabled:n.value,onClick:i[0]||=e=>Z(ye,`状态已刷新`)},`刷新状态`,8,Tv),t.value?.online?(u(),F(T,{key:5},[D(`p`,null,[w(s(t.value.unlocked?`已解锁`:`已锁定`),1),t.value.unlockExpiresAt?(u(),F(`span`,Dv,` · `+s(new Date(t.value.unlockExpiresAt).toLocaleTimeString())+` 到期`,1)):z(``,!0)]),t.value.storageMode===`local`?(u(),F(`div`,Ov,[t.value.botGrants?.length?(u(),F(`ul`,Av,[(u(!0),F(T,null,p(t.value.botGrants,e=>(u(),F(`li`,{key:e.credentialRef+e.agentId},[w(s(e.name)+` → `+s(t.value.bots?.find(t=>t.id===e.agentId)?.name??`Bot`)+` · 已持续授权`,1),e.operation===`ssh.exec`?(u(),F(`span`,jv,` · SSH 全部命令`)):z(``,!0),e.operation===`env.inject`?(u(),F(`span`,Mv,` · 环境变量`)):z(``,!0),e.grantedBy?(u(),F(`span`,Nv,` · 由`+s(t.value.bots?.find(t=>t.id===e.grantedBy)?.name??`Bot`)+`转授`,1)):z(``,!0),D(`button`,{type:`button`,disabled:n.value||!t.value.unlocked,onClick:t=>Z(async()=>{await ve(`/bot-revoke`,`POST`,{credentialRef:e.credentialRef,agentId:e.agentId})},`Bot 授权已撤销`)},`撤销 Bot 授权`,8,Pv)]))),128))])):(u(),F(`p`,kv,`尚未授权任何 Bot。解锁后编辑凭据,选择允许使用的 Bot 并保存。`))])):z(``,!0),t.value.drafts?.length?(u(),F(`div`,Fv,[i[42]||=D(`h4`,null,`待补全的凭据草稿`,-1),i[43]||=D(`p`,null,`Bot 起草的公开信息,尚未进入密码库,也未授权任何 Bot。补全时由你填写秘密并选择 Bot。`,-1),D(`ul`,null,[(u(!0),F(T,null,p(t.value.drafts,e=>(u(),F(`li`,{key:e.id},[D(`strong`,null,s(e.name),1),D(`p`,null,[w(s(xe(e.kind))+` · `+s(e.origin||(e.host?e.host+`:`+(e.port??22):``)||e.envName),1),e.username?(u(),F(`span`,Iv,` · `+s(e.username),1)):z(``,!0),w(` · 来自 `+s(e.agentName||`Bot`),1)]),D(`p`,null,s(e.purpose),1),D(`div`,Lv,[D(`button`,{type:`button`,disabled:n.value||!t.value.unlocked,title:t.value.unlocked?``:`请先解锁`,onClick:t=>Se(e)},`去补全`,8,Rv),D(`button`,{type:`button`,disabled:n.value,onClick:t=>Ce(e)},`驳回`,8,zv)])]))),128))])])):z(``,!0),t.value.initialized?t.value.unlocked?(u(),F(T,{key:4},[D(`div`,Kv,[D(`button`,{type:`button`,disabled:n.value,onClick:Ee},s(t.value.storageMode===`local`?`锁定管理界面`:`立即锁定并撤销授权`),9,qv),D(`button`,{type:`button`,disabled:n.value,onClick:i[4]||=e=>De()},`添加凭据`,8,Jv),D(`button`,{type:`button`,disabled:n.value,onClick:Re},`导出加密备份`,8,Yv)]),D(`ul`,null,[(u(!0),F(T,null,p(t.value.entries,e=>(u(),F(`li`,{key:e.id},[D(`strong`,null,s(e.name),1),D(`p`,null,[w(s(e.username)+` · `+s(e.target.kind===`ssh`?e.target.host+`:`+e.target.port:e.target.kind===`env`?`环境变量 `+e.target.name:e.target.kind===`api`?`API Key`:e.target.origin),1),e.target.kind===`ssh`?(u(),F(`span`,Xv,` · `+s(e.target.auth===`password`?`密码登录`:`私钥登录`),1)):z(``,!0),e.target.kind===`api`?(u(),F(`span`,Zv,` · `+s(e.accountLabel||`API Token`)+` · `+s(L(e)),1)):z(``,!0)]),t.value.storageMode===`local`?(u(),F(`p`,Qv,s(V(e.id)?`已持续授权:`+V(e.id):`未授权给 Bot`),1)):z(``,!0),D(`code`,null,s(e.id),1),D(`div`,$v,[D(`button`,{type:`button`,disabled:n.value,onClick:t=>De(e)},`编辑`,8,ey),D(`button`,{type:`button`,disabled:n.value,onClick:t=>Ae(e)},`删除并撤权`,8,ty)])]))),128))]),j.value?(u(),F(`form`,{key:0,onSubmit:X(ke,[`prevent`])},[D(`label`,null,[i[50]||=w(`名称`,-1),d(D(`input`,{"onUpdate:modelValue":i[5]||=e=>_.value=e,maxlength:`120`,required:``,disabled:n.value},null,8,ny),[[Y,_.value]])]),x.value?(u(),F(`p`,ry,`正在补全 Bot 起草的凭据:填写秘密后保存,草稿才会进入密码库。`)):z(``,!0),y.value!==`api`&&y.value!==`env`?(u(),F(`label`,iy,[i[51]||=w(`用户名`,-1),d(D(`input`,{"onUpdate:modelValue":i[6]||=e=>v.value=e,maxlength:`256`,autocomplete:`off`,required:``,disabled:n.value},null,8,ay),[[Y,v.value]])])):z(``,!0),D(`label`,null,[i[54]||=w(`用途`,-1),d(D(`select`,{"onUpdate:modelValue":i[7]||=e=>y.value=e,disabled:n.value||!!A.value,onChange:Oe},[i[52]||=D(`option`,{value:`website`},`HTTPS 网站`,-1),i[53]||=D(`option`,{value:`ssh`},`SSH / SFTP`,-1),t.value.capabilities?.apiTokenHttp?(u(),F(`option`,sy,`API Token`)):z(``,!0),t.value.storageMode===`local`?(u(),F(`option`,cy,`环境变量`)):z(``,!0)],40,oy),[[Me,y.value]])]),y.value===`env`?(u(),F(T,{key:2},[D(`label`,null,[i[55]||=w(`变量名`,-1),d(D(`input`,{"onUpdate:modelValue":i[8]||=e=>b.value=e,maxlength:`128`,pattern:`[A-Z][A-Z0-9_]*`,placeholder:`例如 OPENWEATHER_API_KEY`,required:``,disabled:n.value},null,8,ly),[[Y,b.value]])]),D(`label`,null,[i[56]||=w(`变量值`,-1),d(D(`input`,{"onUpdate:modelValue":i[9]||=e=>h.value=e,type:`password`,autocomplete:`new-password`,required:W.value,maxlength:`32768`,disabled:n.value},null,8,uy),[[Y,h.value]]),i[57]||=D(`small`,null,`加密保存;授权 Bot 运行时注入其进程环境(所有子进程可读取),不写入 .env,输出中出现原值会被替换。编辑留空保留原值。`,-1)])],64)):z(``,!0),y.value===`website`?(u(),F(`label`,dy,[i[58]||=w(`准确网站 origin`,-1),d(D(`input`,{"onUpdate:modelValue":i[10]||=e=>S.value=e,type:`url`,placeholder:`https://example.com`,required:``,disabled:n.value},null,8,fy),[[Y,S.value]])])):y.value===`ssh`?(u(),F(`label`,py,[i[59]||=w(`SSH 主机`,-1),d(D(`input`,{"onUpdate:modelValue":i[11]||=e=>C.value=e,placeholder:`IP 地址或域名`,required:``,disabled:n.value},null,8,my),[[Y,C.value]])])):z(``,!0),y.value===`ssh`?(u(),F(`label`,hy,[i[61]||=w(`SSH 认证方式`,-1),d(D(`select`,{"onUpdate:modelValue":i[12]||=e=>I.value=e,disabled:n.value,onChange:Oe},[...i[60]||=[D(`option`,{value:`privateKey`},`私钥登录`,-1),D(`option`,{value:`password`},`密码登录`,-1)]],40,gy),[[Me,I.value]])])):z(``,!0),y.value===`api`?(u(),F(T,{key:6},[D(`label`,null,[i[62]||=w(`API Key`,-1),d(D(`input`,{"onUpdate:modelValue":i[13]||=e=>h.value=e,type:`password`,autocomplete:`new-password`,required:W.value,maxlength:`8192`,disabled:n.value},null,8,_y),[[Y,h.value]]),i[63]||=D(`small`,null,`只在服务器注入;编辑留空保留,原值不回显。`,-1)]),i[64]||=D(`p`,null,`保存不会发起接口调用。授权后 Bot 按名称引用此 Key 调用时自行给出完整 URL,Host 注入 Key;Bot 看不到 Key 原文。`,-1)],64)):z(``,!0),y.value!==`api`&&y.value!==`env`?(u(),F(`label`,vy,[w(s(y.value===`website`?`密码`:I.value===`password`?`SSH 登录密码`:`私钥`),1),y.value===`website`||I.value===`password`?d((u(),F(`input`,{key:0,"onUpdate:modelValue":i[14]||=e=>h.value=e,type:`password`,autocomplete:`new-password`,required:W.value,maxlength:`32768`,disabled:n.value},null,8,yy)),[[Y,h.value]]):d((u(),F(`textarea`,{key:1,"onUpdate:modelValue":i[15]||=e=>h.value=e,autocomplete:`off`,required:W.value,maxlength:`32768`,disabled:n.value},null,8,by)),[[Y,h.value]]),U.value?(u(),F(`small`,xy,`认证方式已更换,需要填写新的`+s(I.value===`password`?`登录密码`:`私钥`)+`。`,1)):A.value?(u(),F(`small`,Sy,`留空保留原值;没有秘密读取或回显接口。`)):z(``,!0)])):z(``,!0),y.value===`ssh`&&I.value===`privateKey`?(u(),F(`label`,Cy,[i[65]||=w(`私钥口令(可选)`,-1),d(D(`input`,{"onUpdate:modelValue":i[16]||=e=>g.value=e,type:`password`,autocomplete:`new-password`,disabled:n.value},null,8,wy),[[Y,g.value]])])):z(``,!0),y.value===`ssh`&&I.value===`privateKey`&&A.value?(u(),F(`label`,Ty,[d(D(`input`,{"onUpdate:modelValue":i[17]||=e=>ae.value=e,type:`checkbox`,disabled:n.value},null,8,Ey),[[je,ae.value]]),i[66]||=w(`清除原私钥口令(留空输入默认保留)`,-1)])):z(``,!0),y.value===`ssh`&&t.value.storageMode===`local`?(u(),F(`p`,Dy,`授权 Bot 后,允许全部远程 SSH 命令并读取输出,不需要预先填写命令。权限由 SSH 账号决定。`)):z(``,!0),y.value===`ssh`?(u(),F(`details`,Oy,[i[70]||=D(`summary`,null,`高级连接设置(可选)`,-1),D(`label`,null,[i[67]||=w(`端口`,-1),d(D(`input`,{"onUpdate:modelValue":i[18]||=e=>E.value=e,type:`number`,min:`1`,max:`65535`,required:``,disabled:n.value},null,8,ky),[[Y,E.value,void 0,{number:!0}]])]),D(`label`,null,[i[68]||=w(`服务器指纹(可选)`,-1),d(D(`input`,{"onUpdate:modelValue":i[19]||=e=>k.value=e,placeholder:`SHA256:…`,disabled:n.value},null,8,Ay),[[Y,k.value]]),i[69]||=D(`small`,null,`留空即可保存。首次使用会自动获取并记住服务器指纹;已有指纹会继续校验。`,-1)])])):z(``,!0),y.value!==`api`&&y.value!==`env`&&(y.value!==`ssh`||t.value.storageMode!==`local`)?(u(),F(`label`,jy,[d(D(`input`,{"onUpdate:modelValue":i[20]||=e=>G.value=e,type:`checkbox`,disabled:n.value||!!A.value?.usage},null,8,My),[[je,G.value]]),i[71]||=w(`配置允许 Bot 执行的固定操作`,-1)])):z(``,!0),G.value&&y.value===`website`?(u(),F(T,{key:13},[i[80]||=D(`p`,null,`仅支持主页面的标准 POST 表单。允许跳转仅限此 origin 的成功页;iframe、跨站 SSO、MFA 或验证码转人工。`,-1),D(`label`,null,[i[72]||=w(`登录页路径`,-1),d(D(`input`,{"onUpdate:modelValue":i[21]||=e=>J.value=e,required:``,disabled:n.value},null,8,Ny),[[Y,J.value]])]),D(`label`,null,[i[73]||=w(`表单提交路径`,-1),d(D(`input`,{"onUpdate:modelValue":i[22]||=e=>oe.value=e,required:``,disabled:n.value},null,8,Py),[[Y,oe.value]])]),D(`label`,null,[i[74]||=w(`登录成功页路径`,-1),d(D(`input`,{"onUpdate:modelValue":i[23]||=e=>se.value=e,required:``,disabled:n.value},null,8,Fy),[[Y,se.value]])]),D(`label`,null,[i[75]||=w(`退出页路径(可选、仅批准的 GET)`,-1),d(D(`input`,{"onUpdate:modelValue":i[24]||=e=>ce.value=e,disabled:n.value},null,8,Iy),[[Y,ce.value]])]),i[81]||=D(`p`,null,`操作后销毁本地 Cookie;未配置退出页时,远端会话仍按站点规则到期。取消时不追加退出请求。`,-1),D(`label`,null,[i[76]||=w(`表单 HTML id`,-1),d(D(`input`,{"onUpdate:modelValue":i[25]||=e=>le.value=e,required:``,disabled:n.value},null,8,Ly),[[Y,le.value]])]),D(`label`,null,[i[77]||=w(`用户名 input name`,-1),d(D(`input`,{"onUpdate:modelValue":i[26]||=e=>ue.value=e,required:``,disabled:n.value},null,8,Ry),[[Y,ue.value]])]),D(`label`,null,[i[78]||=w(`密码 input name`,-1),d(D(`input`,{"onUpdate:modelValue":i[27]||=e=>de.value=e,required:``,disabled:n.value},null,8,zy),[[Y,de.value]])]),D(`label`,null,[i[79]||=w(`成功标记(#id 或 [data-…])`,-1),d(D(`input`,{"onUpdate:modelValue":i[28]||=e=>fe.value=e,required:``,disabled:n.value},null,8,By),[[Y,fe.value]])])],64)):z(``,!0),G.value&&y.value===`ssh`&&t.value.storageMode!==`local`?(u(),F(T,{key:14},[D(`label`,null,[i[83]||=w(`允许操作`,-1),d(D(`select`,{"onUpdate:modelValue":i[29]||=e=>K.value=e,disabled:n.value},[...i[82]||=[D(`option`,{value:`ssh.exec`},`固定 SSH 可执行文件`,-1),D(`option`,{value:`sftp.read`},`SFTP 指定文件读取校验`,-1),D(`option`,{value:`sftp.write`},`SFTP 创建指定新文件`,-1)]],8,Vy),[[Me,K.value]])]),K.value===`ssh.exec`?(u(),F(`label`,Hy,[i[84]||=w(`批准的绝对可执行路径(无参数、无 shell 拼接)`,-1),d(D(`input`,{"onUpdate:modelValue":i[30]||=e=>ne.value=e,required:``,disabled:n.value},null,8,Uy),[[Y,ne.value]])])):(u(),F(`label`,Wy,[i[85]||=w(`批准的远端绝对路径`,-1),d(D(`input`,{"onUpdate:modelValue":i[31]||=e=>re.value=e,required:``,disabled:n.value},null,8,Gy),[[Y,re.value]])])),K.value===`sftp.read`?(u(),F(`label`,Ky,[i[86]||=w(`最大读取字节数`,-1),d(D(`input`,{"onUpdate:modelValue":i[32]||=e=>q.value=e,type:`number`,min:`1`,max:`1048576`,required:``,disabled:n.value},null,8,qy),[[Y,q.value,void 0,{number:!0}]])])):z(``,!0),K.value===`sftp.write`?(u(),F(`label`,Jy,[i[87]||=w(`固定写入正文(加密保存;最多 64 KiB)`,-1),d(D(`textarea`,{"onUpdate:modelValue":i[33]||=e=>ie.value=e,maxlength:`65536`,autocomplete:`off`,disabled:n.value},null,8,Yy),[[Y,ie.value]]),A.value?.usage?.kind===`sftp.write`?(u(),F(`small`,Xy,`留空保留原正文,不回显。写入仅创建新文件,不覆盖;中断需人工核对。`)):z(``,!0)])):z(``,!0),i[88]||=D(`p`,null,`首次使用会记住服务器,以后身份改变就停止连接。Bot 只收到退出码或字节数和校验,收不到密码、密钥、输出正文或文件正文。`,-1)],64)):z(``,!0),t.value.storageMode===`local`&&(G.value||y.value===`ssh`||y.value===`api`||y.value===`env`)?(u(),F(T,{key:15},[A.value&&V(A.value.id)?(u(),F(`p`,Zy,`已持续授权:`+s(V(A.value.id))+`。修改后继续可用,无需重新授权。`,1)):z(``,!0),D(`label`,null,[i[89]||=w(`授权给 Bot`,-1),d(D(`select`,{"onUpdate:modelValue":i[34]||=e=>B.value=e,disabled:n.value},[D(`option`,$y,s(A.value&&V(A.value.id)?`保留已有授权`:`暂不授权`),1),(u(!0),F(T,null,p(t.value.bots??[],e=>(u(),F(`option`,{key:e.id,value:e.id},s(e.name),9,eb))),128))],8,Qy),[[Me,B.value]]),i[90]||=D(`small`,null,`选择 Bot 后保存即授权,直到你撤销。`,-1)])],64)):z(``,!0),D(`div`,tb,[D(`button`,{disabled:n.value},s(B.value&&(G.value||y.value===`ssh`||y.value===`api`||y.value===`env`)?`保存并授权 Bot`:`加密保存`),9,nb),D(`button`,{type:`button`,disabled:n.value,onClick:i[35]||=e=>{j.value=!1,x.value=``,ge()}},`取消`,8,rb)])],32)):z(``,!0),t.value.storageMode===`local`?(u(),F(`form`,{key:1,onSubmit:X(Pe,[`prevent`])},[i[95]||=D(`h4`,null,`授权 Bot 使用`,-1),i[96]||=D(`p`,null,`授权一次,之后直接使用;管理界面锁定、修改凭据或重启服务都不影响授权。`,-1),D(`label`,null,[i[92]||=w(`凭据`,-1),d(D(`select`,{"onUpdate:modelValue":i[36]||=e=>N.value=e,required:``,disabled:n.value,onChange:Fe},[i[91]||=D(`option`,{disabled:``,value:``},`请选择`,-1),(u(!0),F(T,null,p(t.value.entries,e=>(u(),F(`option`,{key:e.id,value:e.id},s(e.name),9,ab))),128))],40,ib),[[Me,N.value]])]),D(`label`,null,[i[94]||=w(`Bot`,-1),d(D(`select`,{"onUpdate:modelValue":i[37]||=e=>R.value=e,required:``,disabled:n.value},[i[93]||=D(`option`,{disabled:``,value:``},`请选择`,-1),(u(!0),F(T,null,p(t.value.bots??[],e=>(u(),F(`option`,{key:e.id,value:e.id},s(e.name),9,sb))),128))],8,ob),[[Me,R.value]])]),D(`p`,null,s(ee.value?.target.kind===`ssh`?`允许全部 SSH 命令并返回输出,Bot 可根据运维任务自行操作;权限由 SSH 账号决定。`:`允许操作:`+Le(ee.value)),1),te.value?(u(),F(`p`,cb,`首次使用会自动记住服务器指纹,授权时无需服务器在线。`)):z(``,!0),D(`button`,{disabled:n.value||!R.value||!ee.value?.usage&&ee.value?.target.kind!==`ssh`&&ee.value?.target.kind!==`env`},`授权此 Bot 使用`,8,lb)],32)):(u(),F(`form`,{key:2,onSubmit:X(Ne,[`prevent`])},[i[103]||=D(`h4`,null,`本次任务授权`,-1),i[104]||=D(`p`,null,`先为凭据配置允许 Bot 执行的固定操作,再授权活动任务。每次只绑定一个 Bot、当前任务、执行节点和指定操作;最长 60 秒,不建立长期访问权限。`,-1),D(`ul`,null,[(u(!0),F(T,null,p(t.value.requests,e=>(u(),F(`li`,{key:e.workId+e.credentialRef},[w(s(t.value.tasks.find(t=>t.workId===e.workId)?.name??`任务`)+` · `+s(e.operation)+` · `+s(e.credentialRef)+` `,1),D(`button`,{type:`button`,disabled:n.value||!t.value.entries.some(t=>t.id===e.credentialRef),onClick:t=>Ie(e)},`选择此请求,核对后授权`,8,ub)]))),128))]),D(`label`,null,[i[98]||=w(`凭据`,-1),d(D(`select`,{"onUpdate:modelValue":i[38]||=e=>N.value=e,required:``,disabled:n.value,onChange:Fe},[i[97]||=D(`option`,{disabled:``,value:``},`请选择`,-1),(u(!0),F(T,null,p(t.value.entries,e=>(u(),F(`option`,{key:e.id,value:e.id},s(e.name),9,fb))),128))],40,db),[[Me,N.value]])]),D(`label`,null,[i[100]||=w(`活动任务`,-1),d(D(`select`,{"onUpdate:modelValue":i[39]||=e=>M.value=e,required:``,disabled:n.value},[i[99]||=D(`option`,{disabled:``,value:``},`请选择`,-1),(u(!0),F(T,null,p(t.value.tasks,e=>(u(),F(`option`,{key:e.workId,value:e.workId},s(e.name)+` · `+s(e.workId.slice(0,8)),9,mb))),128))],8,pb),[[Me,M.value]])]),D(`label`,null,[i[102]||=w(`操作`,-1),d(D(`select`,{"onUpdate:modelValue":i[40]||=e=>P.value=e,disabled:n.value},[...i[101]||=[D(`option`,{value:`website.login`},`网站登录`,-1),D(`option`,{value:`ssh.exec`},`SSH 执行`,-1),D(`option`,{value:`sftp.read`},`SFTP 读取`,-1),D(`option`,{value:`sftp.write`},`SFTP 写入`,-1)]],8,hb),[[Me,P.value]])]),D(`p`,null,`批准的使用计划:`+s(Le(ee.value)),1),te.value?(u(),F(`p`,gb,`首次连接将自动记住这台服务器,之后身份变化会停止连接;无需手填指纹。`)):z(``,!0),D(`button`,{disabled:n.value||!t.value.tasks.length||!ee.value?.usage},s(te.value?`确认服务器并授权本任务 60 秒`:`授予本任务 60 秒引用权限`),9,_b)],32)),D(`ul`,null,[(u(!0),F(T,null,p(t.value.leases,e=>(u(),F(`li`,{key:e.id},[w(s(e.workId.slice(0,8))+` · `+s(e.operation)+` · `+s(new Date(e.expiresAt).toLocaleTimeString()),1),D(`button`,{type:`button`,disabled:n.value,onClick:t=>Z(async()=>{await ve(`/leases/`+e.id,`DELETE`)},`任务授权已撤销`)},`撤销`,8,vb)]))),128))]),D(`form`,{onSubmit:X(Be,[`prevent`])},[D(`label`,null,[i[105]||=w(`新的主密码`,-1),d(D(`input`,{"onUpdate:modelValue":i[41]||=e=>l.value=e,type:`password`,autocomplete:`new-password`,minlength:`12`,maxlength:`1024`,required:``,disabled:n.value},null,8,yb),[[Y,l.value]])]),D(`button`,{disabled:n.value},`轮换主密码与加密密钥并锁定`,8,bb)],32)],64)):(u(),F(`form`,{key:3,onSubmit:X(Te,[`prevent`])},[D(`label`,null,[i[48]||=w(`主密码`,-1),d(D(`input`,{"onUpdate:modelValue":i[3]||=e=>o.value=e,type:`password`,autocomplete:`off`,minlength:`12`,maxlength:`1024`,required:``,disabled:n.value},null,8,Wv),[[Y,o.value]])]),i[49]||=D(`p`,null,`先输入主密码解锁,即可添加和编辑凭据。`,-1),D(`button`,{disabled:n.value},`手动解锁 5 分钟`,8,Gv)],32)):(u(),F(`form`,{key:2,onSubmit:X(we,[`prevent`])},[D(`label`,null,[i[44]||=w(`主密码`,-1),d(D(`input`,{"onUpdate:modelValue":i[1]||=e=>o.value=e,type:`password`,autocomplete:`new-password`,minlength:`12`,maxlength:`1024`,required:``,disabled:n.value},null,8,Bv),[[Y,o.value]])]),D(`label`,null,[i[45]||=w(`确认主密码`,-1),d(D(`input`,{"onUpdate:modelValue":i[2]||=e=>c.value=e,type:`password`,autocomplete:`new-password`,minlength:`12`,required:``,disabled:n.value},null,8,Vv),[[Y,c.value]])]),i[47]||=D(`p`,null,`请妥善保存主密码;没有主密码找回功能。备份只能恢复到身份相同、尚未初始化的密码库。`,-1),D(`button`,{disabled:n.value},`创建密码库`,8,Hv),D(`label`,null,[i[46]||=w(`或恢复加密备份`,-1),D(`input`,{type:`file`,accept:`.json,application/json`,disabled:n.value||o.value.length<12,onChange:ze},null,40,Uv)])],32)),t.value.requests.length?(u(),F(`p`,xb,`有 `+s(t.value.requests.length)+` 个任务等待`+s(t.value.storageMode===`local`?`你授权 Bot`:`人工解锁或授权`)+`。`,1)):z(``,!0)],64)):(u(),F(`p`,Ev,`密码保险箱暂时不可用,请检查Yaovi数据目录权限;已配置独立密码库时,请检查该服务的私有连接。此处不会自动安装或启动服务。`))],8,bv))}}),[[`__scopeId`,`data-v-1af2debd`]]),Cb={key:0,class:`server-identity`,"aria-label":`服务器名称`},wb=[`disabled`],Tb={key:0,role:`alert`},Eb={key:1,role:`status`},Db=[`disabled`],Ob=[`disabled`],kb=V(E({__name:`ServerIdentityPanel`,emits:[`dirty-change`],setup(e,{emit:t}){let n=Fe(),r=O(``),i=O(``),a=O(0),o=O(``),c=O(!1),l=O(``),p=O(``),m=H(()=>n.user?.role===`admin`),h=H(()=>i.value!==o.value),g=t;f(h,e=>g(`dirty-change`,e));function _(){n.serverIdentity&&(i.value=o.value=n.serverIdentity.name,a.value=n.serverIdentity.revision,r.value=n.serverIdentity.serverId)}f(()=>n.serverIdentity,()=>{h.value||_()},{immediate:!0});async function v(){await n.refreshServerIdentity(),_(),l.value=``}async function y(){c.value=!0,l.value=``,p.value=``;try{let e=await Oe(i.value,a.value,r.value);n.acceptServerIdentity(e),_(),p.value=`服务器名称已保存,三端同步显示。`}catch(e){l.value=e instanceof Error?e.message:`保存失败`}finally{c.value=!1}}return n.refreshServerIdentity(),(e,t)=>R(n).serverIdentity?(u(),F(`section`,Cb,[t[4]||=D(`h3`,null,`服务器名称`,-1),m.value?(u(),F(`form`,{key:0,onSubmit:X(y,[`prevent`])},[D(`label`,null,[t[1]||=w(`统一显示名称`,-1),d(D(`input`,{"onUpdate:modelValue":t[0]||=e=>i.value=e,name:`server-display-name`,maxlength:`100`,placeholder:`例如:家里的 Mac`,disabled:c.value},null,8,wb),[[Y,i.value]])]),t[2]||=D(`p`,null,`该服务器上的机器人共用此名称,Web、iOS 和安卓同步。留空恢复服务器主机名。`,-1),l.value?(u(),F(`p`,Tb,s(l.value),1)):z(``,!0),p.value?(u(),F(`p`,Eb,s(p.value),1)):z(``,!0),D(`button`,{type:`submit`,disabled:c.value||!h.value},s(c.value?`保存中…`:`保存服务器名称`),9,Db),l.value?(u(),F(`button`,{key:2,type:`button`,disabled:c.value,onClick:v},`重新载入`,8,Ob)):z(``,!0)],32)):(u(),F(T,{key:1},[D(`strong`,null,s(R(n).serverIdentity.displayName),1),t[3]||=D(`p`,null,`由服务器管理员设置,三端同步显示。`,-1)],64))])):z(``,!0)}}),[[`__scopeId`,`data-v-e1579b33`]]),Ab=[`aria-label`],jb={class:`panel-heading`},Mb={class:`account-badge`},Nb={key:0,class:`account-avatar-card`,"aria-label":`账号头像`},Pb=[`disabled`],Fb=[`disabled`],Ib=[`role`],Lb=[`id`],Rb={key:0,class:`security-section-title`},zb={key:1,class:`field`},Bb=[`disabled`],Vb={key:2,class:`muted`},Hb={key:3,class:`field`},Ub=[`disabled`],Wb={class:`password-grid`},Gb={class:`field`},Kb=[`disabled`],qb={class:`field`},Jb=[`disabled`],Yb=[`role`],Xb={key:4,class:`form-message form-message--error`,role:`alert`},Zb={key:5,class:`form-message form-message--success`,role:`status`},Qb={key:6,class:`form-actions`},$b=[`disabled`],ex={key:4,class:`logout-card`,"aria-label":`退出登录`},tx=[`disabled`],nx=V(E({__name:`AccountSecurityPanel`,props:{active:{type:Boolean,default:!0},open:{type:Boolean,default:void 0},formId:{default:void 0},showActions:{type:Boolean,default:!0},section:{default:`all`}},emits:[`saved`,`logout`,`dirty-change`,`can-save-change`],setup(e,{emit:t}){let n=e,r=t,i=Fe(),a=O(``),o=O(``),c=O(``),l=O(``),p=O(``),m=O(!1),h=O(``),g=O(``),_=O(),v=O(!1),b=H(()=>i.user?.role===`admin`),x=H(()=>i.accountDisplayName||i.user?.displayName||i.user?.username||`服务器`),S=H(()=>n.open??n.active),C=H(()=>!!p.value&&l.value===p.value),T=H(()=>p.value?C.value?`match`:`mismatch`:`empty`),E=O(!1),A=H(()=>E.value||b.value&&o.value.trim()!==a.value||!!(c.value||l.value||p.value)),j=H(()=>!m.value&&!!(i.user?.localDesktop||c.value)&&l.value.length>=8&&C.value&&(!b.value||!!o.value.trim()));function M(){let e=i.user?.username||``;a.value=e,o.value=e,c.value=``,l.value=``,p.value=``,h.value=``,g.value=``,r(`dirty-change`,!1)}async function N(){let e=o.value.trim();if(b.value&&!e){h.value=`管理员用户名不能为空`;return}if(!i.user?.localDesktop&&!c.value){h.value=`请输入当前密码`;return}if(l.value.length<8){h.value=`新密码至少需要 8 个字符`;return}if(!C.value){h.value=`两次输入的新密码不一致`;return}m.value=!0,h.value=``,g.value=``;try{await i.changeCredentials({currentPassword:c.value,newPassword:l.value,...b.value?{username:e}:{}});let t=b.value?e:i.user?.username||a.value;a.value=t,o.value=t,c.value=``,l.value=``,p.value=``,g.value=`账号与密码已更新`,r(`dirty-change`,!1),r(`saved`)}catch(e){h.value=e instanceof Error?e.message:`修改账号失败`}finally{m.value=!1}}function P(e){return new Promise((t,n)=>{let r=new FileReader;r.onload=()=>typeof r.result==`string`?t(r.result):n(Error(`无法读取图片`)),r.onerror=()=>n(Error(`无法读取图片`)),r.readAsDataURL(e)})}function I(e){return new Promise((t,n)=>{let r=new Image;r.onload=()=>{let e=Math.min(1,256/Math.max(r.width,r.height)),i=document.createElement(`canvas`);i.width=Math.max(1,Math.round(r.width*e)),i.height=Math.max(1,Math.round(r.height*e));let a=i.getContext(`2d`);if(!a)return n(Error(`当前浏览器不支持图片处理`));a.drawImage(r,0,0,i.width,i.height),t(i.toDataURL(`image/png`))},r.onerror=()=>n(Error(`请选择有效的 PNG、JPEG 或 WebP 图片`)),r.src=e})}async function L(e){let t=e.target,n=t.files?.[0];if(n){v.value=!0,h.value=``,g.value=``;try{if(![`image/png`,`image/jpeg`,`image/webp`].includes(n.type))throw Error(`请选择 PNG、JPEG 或 WebP 图片`);if(n.size>10485760)throw Error(`图片不能超过 10 MB`);await i.updateAccountAvatar(await I(await P(n))),g.value=`账号头像已更新,iOS 下次打开 Bot 模式时会同步显示`}catch(e){h.value=e instanceof Error?e.message:`保存头像失败`}finally{v.value=!1,t.value=``}}}async function B(){v.value=!0,h.value=``,g.value=``;try{await i.updateAccountAvatar(null),g.value=`已恢复首字母头像`}catch(e){h.value=e instanceof Error?e.message:`恢复头像失败`}finally{v.value=!1}}return f(S,e=>{e&&M()},{immediate:!0}),f(A,e=>r(`dirty-change`,e),{flush:`sync`}),f(j,e=>r(`can-save-change`,e),{immediate:!0,flush:`sync`}),(t,n)=>(u(),F(`section`,{class:`account-security-panel`,"aria-label":e.section===`profile`?`账号资料`:`登录与安全`},[D(`header`,jb,[n[7]||=D(`div`,null,[D(`p`,{class:`panel-eyebrow`},`当前账号`),D(`h2`,null,`登录与安全`),D(`p`,{class:`panel-description`},`管理此 Yaovi Web 账号的登录凭据。修改成功后,请使用新凭据登录。`)],-1),D(`span`,Mb,s(x.value),1)]),e.section===`security`?z(``,!0):(u(),F(`section`,Nb,[U(Rg,{name:x.value,"image-url":R(i).user?.avatar,size:64},null,8,[`name`,`image-url`]),D(`div`,null,[D(`strong`,null,s(e.section===`profile`?x.value:`账号头像`),1),n[8]||=D(`small`,null,`头像会同步到你的其他设备。`,-1)]),D(`button`,{type:`button`,disabled:m.value||v.value,onClick:n[0]||=e=>_.value?.click()},s(v.value?`正在保存…`:`更换头像`),9,Pb),R(i).user?.avatar?(u(),F(`button`,{key:0,type:`button`,disabled:m.value||v.value,onClick:B},`使用首字母`,8,Fb)):z(``,!0),D(`input`,{ref_key:`avatarInput`,ref:_,class:`sr-only`,type:`file`,tabindex:`-1`,"aria-hidden":`true`,accept:`image/png,image/jpeg,image/webp`,onChange:L},null,544)])),e.section!==`security`&&R(i).serverIdentity?(u(),k(kb,{key:1,onDirtyChange:n[1]||=e=>E.value=e})):z(``,!0),e.section===`profile`&&(h.value||g.value)?(u(),F(`p`,{key:2,class:y([`form-message`,h.value?`form-message--error`:`form-message--success`]),role:h.value?`alert`:`status`},s(h.value||g.value),11,Ib)):z(``,!0),e.section===`profile`?z(``,!0):(u(),F(`form`,{key:3,id:e.formId,class:`security-form`,onSubmit:X(N,[`prevent`])},[b.value?(u(),F(`h3`,Rb,`账号信息`)):z(``,!0),b.value?(u(),F(`label`,zb,[n[9]||=D(`span`,null,`管理员用户名`,-1),d(D(`input`,{"onUpdate:modelValue":n[2]||=e=>o.value=e,name:`username`,autocomplete:`username`,disabled:m.value},null,8,Bb),[[Y,o.value]]),n[10]||=D(`small`,null,`仅修改当前 Yaovi Web 管理账号,不会更改 9119 服务账号。`,-1)])):z(``,!0),n[17]||=D(`h3`,{class:`security-section-title security-section-title--password`},`修改密码`,-1),R(i).user?.localDesktop?(u(),F(`p`,Vb,`本机以管理员身份使用,无需登录。这里设置的密码用于其他设备连接此服务器。`)):z(``,!0),R(i).user?.localDesktop?z(``,!0):(u(),F(`label`,Hb,[n[11]||=D(`span`,null,`当前密码`,-1),d(D(`input`,{"onUpdate:modelValue":n[3]||=e=>c.value=e,name:`current-password`,type:`password`,autocomplete:`current-password`,disabled:m.value},null,8,Ub),[[Y,c.value]]),n[12]||=D(`small`,null,`用于确认是你本人;密码不会被回显或保存在浏览器中。`,-1)])),D(`div`,Wb,[D(`label`,Gb,[n[13]||=D(`span`,null,`新密码`,-1),d(D(`input`,{"onUpdate:modelValue":n[4]||=e=>l.value=e,name:`new-password`,type:`password`,autocomplete:`new-password`,disabled:m.value},null,8,Kb),[[Y,l.value]]),n[14]||=D(`small`,null,`至少 8 个字符,建议混合使用字母、数字与符号。`,-1)]),D(`label`,qb,[n[15]||=D(`span`,null,`确认新密码`,-1),d(D(`input`,{"onUpdate:modelValue":n[5]||=e=>p.value=e,name:`password-confirmation`,type:`password`,autocomplete:`new-password`,disabled:m.value},null,8,Jb),[[Y,p.value]]),D(`small`,{class:y([`match-status`,`match-status--${T.value}`]),role:T.value===`mismatch`?`alert`:`status`,"aria-live":`polite`},s(T.value===`match`?`两次输入一致`:T.value===`mismatch`?`两次输入不一致`:`再次输入新密码以确认`),11,Yb)])]),h.value?(u(),F(`p`,Xb,s(h.value),1)):g.value?(u(),F(`p`,Zb,s(g.value),1)):z(``,!0),e.showActions?(u(),F(`footer`,Qb,[n[16]||=D(`span`,null,`保存后不会修改机器人、Provider 或系统服务配置。`,-1),D(`button`,{class:`solid-button`,type:`submit`,disabled:!j.value},s(m.value?`正在保存…`:`保存修改`),9,$b)])):z(``,!0)],40,Lb)),e.section!==`profile`&&!R(i).user?.localDesktop?(u(),F(`section`,ex,[n[19]||=D(`div`,null,[D(`strong`,null,`退出当前账号`),D(`p`,null,`退出当前设备的登录授权,不会停止服务,也不会影响其他设备。`)],-1),D(`button`,{class:`logout-button`,type:`button`,disabled:m.value,onClick:n[6]||=e=>r(`logout`)},[U(Z,{name:`logout`,size:15}),n[18]||=w(`退出当前账号 `,-1)],8,tx)])):z(``,!0)],8,Ab))}}),[[`__scopeId`,`data-v-424cfd20`]]),rx=[{key:`name`,label:`称呼`,maxLength:100,placeholder:`希望 Bot 如何称呼你`},{key:`language`,label:`交流语言`,maxLength:100,placeholder:`例如:简体中文`},{key:`timezone`,label:`时区`,maxLength:100,placeholder:`例如:Asia/Shanghai`},{key:`background`,label:`职业与背景`,maxLength:1e3,placeholder:`你的工作、专业背景和熟悉的领域`},{key:`preferences`,label:`沟通偏好`,maxLength:1e3,placeholder:`希望回答的风格、详细程度和表达方式`},{key:`workHabits`,label:`工作习惯`,maxLength:1e3,placeholder:`常用设备、工作方式和长期约定`},{key:`notes`,label:`补充说明`,maxLength:2e3,placeholder:`其他希望 Bot 长期了解的信息`}],ix=[`aria-busy`],ax={key:0,role:`status`},ox={key:1,role:`alert`,class:`error`},sx={key:2,role:`status`,class:`notice`},cx={key:3,role:`status`,class:`conflict`},lx=[`disabled`],ux=[`id`],dx=[`disabled`],fx={class:`check`},px={class:`check`},mx=[`disabled`],hx=[`disabled`],gx=[`for`],_x=[`id`,`onUpdate:modelValue`,`name`,`maxlength`,`placeholder`],vx=[`id`,`onUpdate:modelValue`,`name`,`maxlength`,`placeholder`,`rows`],yx={class:`check field-lock`},bx=[`value`,`aria-label`],xx={key:6,class:`history`},Sx={class:`updated`},Cx=[`disabled`,`aria-expanded`],wx={key:0},Tx={key:0},Ex={class:`previous`},Dx={key:1},Ox={key:2,class:`source`},kx=[`disabled`,`onClick`],Ax=[`disabled`],jx=`/api/app/user-profile`,Mx=V(E({__name:`UserProfilePanel`,props:{formId:{default:`user-profile-form`}},emits:[`dirty-change`,`can-save-change`,`busy-change`],setup(e,{expose:t,emit:n}){let r=e,a=n,o=O(),c=O(),l=O(null),h=O(!1),g=O(!0),_=O(``),v=O(``),y=O(!1),b=O(!1),x=O([]),S=O(),C,E=!1,k=0,A=e=>JSON.parse(JSON.stringify(e)),j=e=>JSON.stringify([e.fields,e.shared,e.mainBotEditable,e.lockedFields.slice().sort()]),M=H(()=>!!o.value&&!!c.value&&j(o.value)!==j(c.value));f(M,e=>{a(`dirty-change`,e),a(`can-save-change`,e&&!h.value)},{immediate:!0}),f(h,e=>{a(`busy-change`,e),a(`can-save-change`,M.value&&!e)});function N(e){o.value=A(e.profile),c.value=A(e.profile),l.value=e.mainBot,y.value=!1}async function P(e=!1){let t=++k;try{let n=await Q(jx);if(E||t!==k)return;if(l.value=n.mainBot,e&&M.value){y.value=o.value?.revision!==n.profile.revision;return}let r=o.value?.revision!==n.profile.revision;N(n),r&&b.value&&await I()}catch(t){!e&&!E&&(_.value=t instanceof Error?t.message:`用户资料读取失败`)}finally{E||(g.value=!1)}}async function I(e=0){let t=await Q(`${jx}/history?offset=${e}`);E||(x.value=e?[...x.value,...t.revisions]:t.revisions,S.value=t.nextOffset)}async function L(e){if(!h.value){k++,h.value=!0,_.value=``,v.value=``;try{await e()}catch(e){_.value=e instanceof Error?e.message:`用户资料操作失败`}finally{h.value=!1}}}async function B(){if(!c.value||!o.value||!M.value)return;let e=c.value;await L(async()=>{let t=await Q(jx,{method:`PUT`,body:{requestId:pt(),expectedRevision:o.value.revision,fields:e.fields,shared:e.shared,mainBotEditable:e.mainBotEditable,lockedFields:e.lockedFields}});E||(N(t),v.value=`用户资料已保存,已授权 Bot 从下一轮对话使用。`,b.value&&await I())})}async function V(){M.value&&!window.confirm(`重新载入会替换当前未保存的草稿,是否继续?`)||await L(()=>P())}async function U(){b.value=!b.value,b.value&&await L(()=>I())}async function W(e){!o.value||M.value||!window.confirm(`恢复该版本的资料内容?当前共享开关、主 Bot 维护开关和字段锁定会保留。`)||await L(async()=>{let t=await Q(`${jx}/restore`,{method:`POST`,body:{requestId:pt(),expectedRevision:o.value.revision,id:e.id}});E||(N(t),await I(),v.value=`资料内容已恢复,下一轮对话生效。`)})}function ee(){o.value&&(c.value=A(o.value)),_.value=``,v.value=``}let te=e=>rx.filter(t=>e.before.fields[t.key]!==e.after.fields[t.key]);return m(async()=>{await P(),E||(C=setInterval(()=>{h.value||P(!0)},5e3))}),i(()=>{E=!0,clearInterval(C)}),t({reset:ee}),(e,t)=>(u(),F(`section`,{class:`user-profile-panel`,"aria-label":`全局用户资料`,"aria-busy":h.value||g.value},[t[9]||=D(`p`,{class:`intro`},`填写一次,让已授权的 Bot 了解你的背景和偏好。资料独立于各个 Bot 保存,没有 Bot 时也可以先填写。`,-1),g.value?(u(),F(`p`,ax,`正在读取用户资料…`)):z(``,!0),_.value?(u(),F(`p`,ox,s(_.value),1)):z(``,!0),v.value?(u(),F(`p`,sx,s(v.value),1)):z(``,!0),y.value?(u(),F(`p`,cx,`其他设备或主 Bot 已更新资料,当前草稿仍保留。请核对后重新载入。`)):z(``,!0),_.value||y.value?(u(),F(`button`,{key:4,type:`button`,disabled:h.value,onClick:V},`重新载入`,8,lx)):z(``,!0),c.value?(u(),F(`form`,{key:5,id:r.formId,onSubmit:X(B,[`prevent`])},[D(`fieldset`,{disabled:h.value},[t[6]||=D(`legend`,null,`共享与维护`,-1),D(`label`,fx,[d(D(`input`,{"onUpdate:modelValue":t[0]||=e=>c.value.shared=e,type:`checkbox`},null,512),[[je,c.value.shared]]),t[4]||=w(`向 Bot 提供用户资料`,-1)]),t[7]||=D(`small`,null,`持久 Bot 在每轮对话开始时加载,遵循共享资料读取权限;临时子任务不自动获得资料。`,-1),D(`label`,px,[d(D(`input`,{"onUpdate:modelValue":t[1]||=e=>c.value.mainBotEditable=e,type:`checkbox`,disabled:!c.value.shared},null,8,mx),[[je,c.value.mainBotEditable]]),t[5]||=w(`允许当前主 Bot 维护未锁定的字段`,-1)]),D(`small`,null,s(l.value?`当前主 Bot:${l.value.name}。更换主 Bot 后,维护资格随之转移。`:`尚未指定主 Bot。可在“执行与技能 → 我的 Bot”中设置;你仍可直接编辑资料。`),1)],8,dx),D(`fieldset`,{disabled:h.value},[t[8]||=D(`legend`,null,`关于你`,-1),(u(!0),F(T,null,p(R(rx),e=>(u(),F(`div`,{key:e.key,class:`profile-field`},[D(`label`,{for:`user-profile-${e.key}`},s(e.label),9,gx),e.maxLength<=100?d((u(),F(`input`,{key:0,id:`user-profile-${e.key}`,"onUpdate:modelValue":t=>c.value.fields[e.key]=t,name:e.key,maxlength:e.maxLength,placeholder:e.placeholder},null,8,_x)),[[Y,c.value.fields[e.key]]]):d((u(),F(`textarea`,{key:1,id:`user-profile-${e.key}`,"onUpdate:modelValue":t=>c.value.fields[e.key]=t,name:e.key,maxlength:e.maxLength,placeholder:e.placeholder,rows:e.key===`notes`?4:3},null,8,vx)),[[Y,c.value.fields[e.key]]]),D(`label`,yx,[d(D(`input`,{"onUpdate:modelValue":t[2]||=e=>c.value.lockedFields=e,type:`checkbox`,value:e.key,"aria-label":`锁定${e.label},仅我可修改`},null,8,bx),[[je,c.value.lockedFields]]),w(`仅我可修改`+s(c.value.lockedFields.includes(e.key)?` · 已锁定`:``),1)])]))),128))],8,hx)],40,ux)):z(``,!0),o.value?(u(),F(`div`,xx,[D(`p`,Sx,s(o.value.updatedAt?`版本 ${o.value.revision} · ${o.value.updatedBy?.name??`用户`}更新于 ${new Date(o.value.updatedAt).toLocaleString()}`:`尚未填写资料`),1),D(`button`,{type:`button`,disabled:h.value,"aria-expanded":b.value,onClick:U},s(b.value?`收起修订记录`:`查看修订记录`),9,Cx),b.value?(u(),F(T,{key:0},[x.value.length?z(``,!0):(u(),F(`p`,wx,`暂无修订记录。`)),(u(!0),F(T,null,p(x.value,e=>(u(),F(`article`,{key:e.id},[D(`strong`,null,`版本 `+s(e.revision)+` · `+s(e.after.updatedBy?.name)+` · `+s(e.operation===`restore`?`恢复`:`更新`),1),D(`small`,null,s(new Date(e.after.updatedAt).toLocaleString()),1),te(e).length?(u(),F(`dl`,Tx,[(u(!0),F(T,null,p(te(e),t=>(u(),F(T,{key:t.key},[D(`dt`,null,s(t.label),1),D(`dd`,null,[D(`span`,Ex,`原内容:`+s(e.before.fields[t.key]||`未填写`),1),D(`span`,null,`新内容:`+s(e.after.fields[t.key]||`未填写`),1)])],64))),128))])):(u(),F(`p`,Dx,`共享、主 Bot 维护开关或字段锁定已更新。`)),e.source?(u(),F(`p`,Ox,`依据:`+s(e.source.quote),1)):z(``,!0),D(`button`,{type:`button`,disabled:h.value||M.value||e.revision===o.value.revision,onClick:t=>W(e)},`恢复此版本资料`,8,kx)]))),128)),S.value===void 0?z(``,!0):(u(),F(`button`,{key:1,type:`button`,disabled:h.value,onClick:t[3]||=e=>L(()=>I(S.value))},`加载更多修订`,8,Ax))],64)):z(``,!0)])):z(``,!0)],8,ix))}}),[[`__scopeId`,`data-v-369c417c`]]),Nx=[`aria-busy`],Px={key:0,class:`mode-status`},Fx={key:0},Ix={key:1,role:`status`},Lx=[`disabled`],Rx=[`value`],zx={class:`mode-note`},Bx={key:3,class:`mode-error`,role:`alert`},Vx={key:4,role:`status`},Hx={class:`mode-actions`},Ux=[`disabled`],Wx=[`disabled`],Gx=[`disabled`],Kx=V(E({__name:`DesktopModePanel`,setup(e){let t=window.yaoviDesktop,n=O(),r=O(`client`),i=O(!1),a=O(``),o=O(``),c=H(()=>[{mode:`client`,title:`客户端模式`,description:`连接另一台电脑上的Yaovi服务器。本机无需安装 Yaovi。`,icon:`link`},{mode:`server`,title:`服务器模式`,description:`在这台电脑上运行Yaovi服务,使用本机 Yaovi,并供其他客户端连接。`,icon:`monitor`}].filter(e=>!n.value?.supportedModes||n.value.supportedModes.includes(e.mode))),l=H(()=>!!n.value&&c.value.length>1);async function f(){i.value=!0,a.value=``;try{n.value=await t.modeState(),r.value=n.value.mode}catch(e){a.value=e instanceof Error?e.message:`无法读取运行模式,请重试。`}finally{i.value=!1}}async function h(){if(!(i.value||!n.value||r.value===n.value.mode)){i.value=!0,a.value=``,o.value=``;try{let e=await t.switchMode(r.value);if(!e.ok)throw Error(e.error||`切换运行模式未完成,请重试。`);e.pendingLogin?o.value=`请在当前页面完成服务器连接与登录。`:await f()}catch(e){a.value=e instanceof Error?e.message:`切换运行模式未完成,请重试。`}finally{i.value=!1}}}async function g(){i.value=!0,a.value=``,o.value=``;try{await t.openRemoteLogin()}catch(e){a.value=e instanceof Error?e.message:`无法打开服务器登录页面。`}finally{i.value=!1}}return m(f),(e,m)=>(u(),F(`section`,{class:`desktop-mode-panel`,"aria-label":`服务器与客户端模式`,"aria-busy":i.value},[n.value?(u(),F(`div`,Px,[D(`strong`,null,`当前:`+s(n.value.mode===`client`?`客户端模式`:`服务器模式`),1),n.value.serverURL?(u(),F(`span`,Fx,s(n.value.serverURL),1)):z(``,!0)])):i.value?(u(),F(`p`,Ix,`正在读取运行模式…`)):z(``,!0),l.value?(u(),F(`fieldset`,{key:2,disabled:i.value||!n.value||n.value.switching},[m[1]||=D(`legend`,null,`这台电脑如何使用Yaovi?`,-1),(u(!0),F(T,null,p(c.value,e=>(u(),F(`label`,{key:e.mode,class:y([`mode-option`,{selected:r.value===e.mode}])},[d(D(`input`,{"onUpdate:modelValue":m[0]||=e=>r.value=e,type:`radio`,name:`desktop-running-mode`,value:e.mode},null,8,Rx),[[Ae,r.value]]),U(Z,{name:e.icon,size:22},null,8,[`name`]),D(`span`,null,[D(`strong`,null,s(e.title),1),D(`small`,null,s(e.description),1)])],2))),128))],8,Lx)):z(``,!0),D(`p`,zx,s(l.value?`切换后会打开对应服务的页面,并记住选择。`:`此客户端连接已有服务器。`)+`数据保留在原服务器;连接另一台服务器时,可能需要登录。`,1),a.value?(u(),F(`p`,Bx,s(a.value),1)):z(``,!0),o.value?(u(),F(`p`,Vx,s(o.value),1)):z(``,!0),D(`div`,Hx,[n.value?l.value?(u(),F(`button`,{key:1,class:`mode-primary`,type:`button`,disabled:i.value||n.value.switching||r.value===n.value.mode,onClick:h},s(i.value?`正在切换…`:r.value===n.value.mode?`正在使用此模式`:r.value===`client`?`切换为客户端`:`切换为服务器`),9,Wx)):z(``,!0):(u(),F(`button`,{key:0,type:`button`,disabled:i.value,onClick:f},`重新读取`,8,Ux)),R(t)?.openRemoteLogin?(u(),F(`button`,{key:2,type:`button`,disabled:i.value||n.value?.switching,onClick:g},`更换服务器…`,8,Gx)):z(``,!0)])],8,Nx))}}),[[`__scopeId`,`data-v-fe473dc5`]]),qx={class:`hermes-settings`,"aria-label":`搜索与网页配置`},Jx={key:0,role:`alert`},Yx={key:1,role:`status`},Xx={key:3,role:`status`},Zx=[`id`],Qx=[`disabled`],$x=[`onUpdate:modelValue`,`aria-label`],eS=[`value`],tS=[`value`],nS=[`onUpdate:modelValue`,`type`,`aria-label`,`placeholder`],rS=[`disabled`,`onClick`],iS=[`onUpdate:modelValue`,`type`,`aria-label`],aS=[`disabled`,`onClick`],oS={key:0},sS=V(E({__name:`HermesWebPanel`,props:{formId:{default:`hermes-web-form`}},emits:[`dirty-change`,`can-save-change`,`busy-change`],setup(e,{expose:t,emit:n}){let r=e,i=n,a=O(),o=O(!1),c=O(``),l=O(``),h=g({search:``,extract:``}),_=g({search:``,extract:``}),v=g({}),y=g({search:`Hermes web search`,extract:`https://example.com`}),b={search:`联网搜索`,extract:`网页提取`},x=[`search`,`extract`],S=H(()=>h.search!==_.search||h.extract!==_.extract||Object.values(v).some(e=>e.length>0));f(S,e=>{i(`dirty-change`,e),i(`can-save-change`,!!a.value&&e)},{immediate:!0}),f(o,e=>i(`busy-change`,e),{immediate:!0});function C(e){return(a.value?.providers??[]).filter(t=>t.capabilities?.includes(e))}function E(e){return C(e).find(t=>t.name===h[e])}function k(e){return{ready:`可用`,needs_keys:`需要凭据`,needs_auth:`需要登录`,needs_login:`需要登录`,needs_setup:`需要配置`}[e]??`待检查`}function A(e,t=!0){if(!Array.isArray(e?.providers)||!e.selection)throw Error(`搜索配置返回不完整,请重新加载。`);a.value=e;for(let n of x){let r=e.selection[n],i=C(n).filter(e=>(e.managed_nous_feature?`nous`:e.web_backend)===r);_[n]=r?(i.find(e=>e.status===`ready`)??i[0])?.name??r:``,t&&(h[n]=_[n])}i(`can-save-change`,S.value)}async function j(e){if(!o.value){o.value=!0,c.value=``,l.value=``;try{await e()}catch(e){c.value=e instanceof Error?e.message:`操作失败`}finally{o.value=!1}}}async function M(){await j(async()=>{A(await ft.config());for(let e of Object.keys(v))delete v[e]})}async function N(){!a.value||!S.value||await j(async()=>{let e=Object.fromEntries(Object.entries(v).filter(([,e])=>e.length>0));if(Object.keys(e).length){A(await ft.setEnv(e),!1);for(let t of Object.keys(e))delete v[t]}for(let e of x)if(h[e]!==_[e]){let t=h[e];A(await ft.setProvider(e,t||null),!1),h[e]=_[e]}l.value=`已保存,下一次工具调用生效。`})}async function P(e){await j(async()=>{let t=await ft.test(e,y[e]);if(!t.ok)throw Error(String(t.result.error??t.result.results?.find(e=>e.error)?.error??`未获得可用结果,请检查凭据和网络。`));l.value=`${b[e]}测试成功 · ${t.provider||`自动选择`}`})}async function I(e){window.confirm(`删除 ${e} 的系统凭据?使用此变量的其他服务也会受到影响。`)&&await j(async()=>{await dt.deleteEnv(e),A(await ft.config()),l.value=`凭据已删除。`})}return t({reset:M}),m(M),(e,t)=>(u(),F(`section`,qx,[t[2]||=D(`p`,null,`所有 Bot 共用此配置,包括手机上的 Bot。自动选择会使用 Hermes 当前可用的后端。`,-1),c.value?(u(),F(`p`,Jx,s(c.value),1)):z(``,!0),l.value?(u(),F(`p`,Yx,s(l.value),1)):z(``,!0),!a.value&&!o.value?(u(),F(`button`,{key:2,type:`button`,onClick:M},`重新加载`)):z(``,!0),o.value&&!a.value?(u(),F(`p`,Xx,`正在读取搜索配置…`)):z(``,!0),D(`form`,{id:r.formId,onSubmit:X(N,[`prevent`])},[(u(),F(T,null,p(x,e=>D(`fieldset`,{key:e,disabled:o.value||!a.value},[D(`legend`,null,s(b[e]),1),D(`label`,null,[t[1]||=w(`供应商`,-1),d(D(`select`,{"onUpdate:modelValue":t=>h[e]=t,"aria-label":b[e]+`供应商`},[t[0]||=D(`option`,{value:``},`自动选择可用后端`,-1),h[e]&&!E(e)?(u(),F(`option`,{key:0,value:h[e]},s(h[e])+` · 当前配置不可用`,9,eS)):z(``,!0),(u(!0),F(T,null,p(C(e),e=>(u(),F(`option`,{key:e.name,value:e.name},s(e.name)+` · `+s(k(e.status)),9,tS))),128))],8,$x),[[Me,h[e]]])]),D(`p`,null,`当前后端:`+s((e===`search`?a.value?.active_search_backend:a.value?.active_extract_backend)||`暂无可用后端`),1),(u(!0),F(T,null,p(E(e)?.env_vars??[],e=>(u(),F(`div`,{key:e.key,class:`credential-row`},[D(`label`,null,[w(s(e.prompt||e.key),1),D(`small`,null,s(e.key)+` · `+s(e.is_set?`已配置`:`未配置`),1),d(D(`input`,{"onUpdate:modelValue":t=>v[e.key]=t,type:e.key.endsWith(`_URL`)?`url`:`password`,"aria-label":e.key,maxlength:`8192`,autocomplete:`new-password`,placeholder:e.is_set?`留空保留已保存值`:`输入配置值`},null,8,nS),[[be,v[e.key]]])]),e.is_set?(u(),F(`button`,{key:0,type:`button`,disabled:S.value,onClick:t=>I(e.key)},`删除 `+s(e.key),9,rS)):z(``,!0)]))),128)),D(`label`,null,[w(s(e===`search`?`测试关键词`:`测试网页地址`),1),d(D(`input`,{"onUpdate:modelValue":t=>y[e]=t,type:e===`search`?`text`:`url`,"aria-label":b[e]+`测试内容`},null,8,iS),[[be,y[e]]])]),D(`button`,{type:`button`,disabled:S.value||!y[e].trim(),onClick:t=>P(e)},`测试`+s(b[e]),9,aS)],8,Qx)),64)),S.value?(u(),F(`p`,oS,`请先保存更改,再测试当前配置。`)):z(``,!0)],40,Zx)]))}}),[[`__scopeId`,`data-v-e49590c2`]]),cS={class:`hermes-settings`,"aria-label":`Hermes 环境变量管理`},lS={key:0,role:`alert`},uS={key:1,role:`status`},dS={key:2,role:`status`},fS={class:`env-filters`},pS=[`value`],mS={class:`check`},hS=[`disabled`],gS=[`id`],_S=[`disabled`],vS=[`value`,`disabled`],yS=[`placeholder`],bS={key:5},xS={class:`env-list`},SS={class:`env-actions`},CS=[`disabled`,`onClick`],wS=[`disabled`,`onClick`],TS=V(E({__name:`HermesEnvPanel`,props:{formId:{default:`hermes-env-form`}},emits:[`dirty-change`,`can-save-change`,`busy-change`],setup(e,{expose:t,emit:n}){let r=e,i=n,a=O(),o=O(!1),c=O(``),l=O(``),h=O(``),g=O(``),_=O(!0),v=O(null),y=O(``),b=O(``),x=H(()=>v.value!==null&&(b.value.length>0||v.value===``&&y.value.length>0)),S=H(()=>!!a.value&&!!(v.value||y.value).match(/^[A-Z][A-Z0-9_]{0,127}$/)&&b.value.length>0&&b.value.length<=8192);f([x,S],()=>{i(`dirty-change`,x.value),i(`can-save-change`,x.value&&S.value)},{immediate:!0}),f(o,e=>i(`busy-change`,e),{immediate:!0});let C=H(()=>[...new Set(Object.values(a.value??{}).map(e=>e.category||`other`))].sort()),E={custom:`自定义`,other:`其他`,model:`模型`,models:`模型`,tools:`工具`,messaging:`消息`,settings:`设置`,general:`通用`,terminal:`终端`,browser:`浏览器`};function k(e){return E[e]||e}let A=H(()=>Object.entries(a.value??{}).filter(([e,t])=>(!_.value||t.is_set)&&(!g.value||(t.category||`other`)===g.value)&&`${e} ${t.description} ${t.provider_label}`.toLowerCase().includes(h.value.trim().toLowerCase())).sort(([e],[t])=>e.localeCompare(t)));function j(){v.value=null,y.value=``,b.value=``}async function M(e){if(!o.value){o.value=!0,c.value=``,l.value=``;try{await e()}catch(e){c.value=e instanceof Error?e.message:`操作失败`}finally{o.value=!1}}}async function N(){await M(async()=>{a.value=await dt.env(),j()})}function P(e){v.value=e,y.value=``,b.value=``,c.value=``,l.value=``}async function I(){!x.value||!S.value||await M(async()=>{await dt.setEnv(v.value||y.value,b.value),a.value=await dt.env(),j(),l.value=`变量已保存;搜索立即使用新配置,Bot 内核在下一轮加载。`})}async function L(e){window.confirm(`删除系统变量 ${e}?依赖此变量的模型和工具可能暂时不可用。`)&&await M(async()=>{await dt.deleteEnv(e),a.value=await dt.env(),l.value=`变量已删除。`})}return t({reset:async()=>{j(),await N()}}),m(N),(e,t)=>(u(),F(`section`,cS,[t[13]||=D(`p`,null,`系统 Hermes 的模型和工具共用这些变量。值只显示脱敏预览;虚拟机脚本变量仍在“工具与服务授权”中按 Bot 授权。`,-1),c.value?(u(),F(`p`,lS,s(c.value),1)):z(``,!0),l.value?(u(),F(`p`,uS,s(l.value),1)):z(``,!0),o.value&&!a.value?(u(),F(`p`,dS,`正在读取环境变量…`)):z(``,!0),!a.value&&!o.value?(u(),F(`button`,{key:3,type:`button`,onClick:N},`重新加载`)):z(``,!0),D(`div`,fS,[D(`label`,null,[t[6]||=w(`搜索变量`,-1),d(D(`input`,{"onUpdate:modelValue":t[0]||=e=>h.value=e,type:`search`,placeholder:`变量名或说明`},null,512),[[Y,h.value]])]),D(`label`,null,[t[8]||=w(`分类`,-1),d(D(`select`,{"onUpdate:modelValue":t[1]||=e=>g.value=e},[t[7]||=D(`option`,{value:``},`全部分类`,-1),(u(!0),F(T,null,p(C.value,e=>(u(),F(`option`,{key:e,value:e},s(k(e)),9,pS))),128))],512),[[Me,g.value]])]),D(`label`,mS,[d(D(`input`,{"onUpdate:modelValue":t[2]||=e=>_.value=e,type:`checkbox`},null,512),[[je,_.value]]),t[9]||=w(`仅显示已配置`,-1)])]),D(`button`,{type:`button`,disabled:o.value||!a.value||v.value!==null,onClick:t[3]||=e=>P(``)},`添加自定义变量`,8,hS),v.value===null?z(``,!0):(u(),F(`form`,{key:4,id:r.formId,onSubmit:X(I,[`prevent`])},[D(`fieldset`,{disabled:o.value},[D(`legend`,null,s(v.value?`修改 `+v.value:`添加自定义变量`),1),D(`label`,null,[t[10]||=w(`变量名`,-1),D(`input`,{value:v.value||y.value,disabled:!!v.value,maxlength:`128`,pattern:`[A-Z][A-Z0-9_]{0,127}`,required:``,onInput:t[4]||=e=>y.value=e.target.value},null,40,vS)]),t[12]||=D(`small`,null,`使用大写字母、数字和下划线,以字母开头。`,-1),D(`label`,null,[t[11]||=w(`新值`,-1),d(D(`input`,{"onUpdate:modelValue":t[5]||=e=>b.value=e,type:`password`,maxlength:`8192`,autocomplete:`new-password`,placeholder:v.value?`留空保留原值`:`输入变量值`},null,8,yS),[[Y,b.value]])]),D(`button`,{type:`button`,onClick:j},`取消编辑`)],8,_S)],40,gS)),a.value&&!A.value.length?(u(),F(`p`,bS,`没有匹配的变量。`)):z(``,!0),D(`ul`,xS,[(u(!0),F(T,null,p(A.value,([e,t])=>(u(),F(`li`,{key:e},[D(`div`,null,[D(`strong`,null,s(e),1),D(`small`,null,s(t.description||`自定义环境变量`),1),D(`small`,null,s(k(t.category||`other`))+` · `+s(t.is_set?t.redacted_value||`已配置`:`未配置`),1)]),D(`div`,SS,[D(`button`,{type:`button`,disabled:o.value||v.value!==null||t.readonly,onClick:t=>P(e)},`修改 `+s(e),9,CS),t.is_set?(u(),F(`button`,{key:0,type:`button`,disabled:o.value||v.value!==null||t.readonly,onClick:t=>L(e)},`删除 `+s(e),9,wS)):z(``,!0)])]))),128))])]))}}),[[`__scopeId`,`data-v-47a82c67`]]),ES={class:`allowed-hosts-panel`,"aria-label":`外网访问地址`},DS={key:0},OS={key:1,role:`alert`},kS=[`aria-busy`],AS=[`disabled`],jS={key:0,role:`alert`},MS={key:1,role:`status`},NS={class:`actions`},PS=[`disabled`],FS=[`disabled`],IS=V(E({__name:`AllowedHostsPanel`,emits:[`dirty-change`],setup(e,{emit:t}){let n=t,r=O(),i=O(``),a=O(``),o=O(!1),c=O(``),l=O(``),h=H(()=>!!r.value&&i.value!==a.value);f(h,e=>n(`dirty-change`,e));function g(e){if(!e||![e.hosts,e.editableHosts,e.environmentHosts].every(e=>Array.isArray(e)&&e.every(e=>typeof e==`string`)))throw Error(`访问地址配置返回不完整,请重新加载。`);r.value=e,i.value=e.editableHosts.join(`
|
|
18
18
|
`),a.value=i.value}async function _(e,t=``){if(!o.value){o.value=!0,c.value=``,l.value=``;try{g(await e()),l.value=t}catch(e){c.value=e instanceof Error?e.message:`访问地址操作失败,请重试。`}finally{o.value=!1}}}let v=()=>_($m);function y(){if(!r.value)return;let e=[...new Set(i.value.split(/[\s,]+/).filter(Boolean))];_(()=>eh(e),`允许的访问地址已保存并立即生效`)}return m(v),(e,t)=>(u(),F(`section`,ES,[t[3]||=D(`h4`,null,`外网访问地址`,-1),t[4]||=D(`p`,null,`填写用于访问 Yaovi 的域名或 IP,每行一个。只填写主机名,不包含协议、端口或路径。`,-1),t[5]||=D(`p`,null,`保存后立即更新服务器允许的访问地址;请保留仍需使用的地址。`,-1),r.value?.environmentHosts.length?(u(),F(`div`,DS,[t[1]||=D(`h5`,null,`环境变量保留地址(Web 中不能移除)`,-1),D(`ul`,null,[(u(!0),F(T,null,p(r.value.environmentHosts,e=>(u(),F(`li`,{key:e},[D(`code`,null,s(e),1)]))),128))])])):z(``,!0),r.value?.configurationError?(u(),F(`p`,OS,s(r.value.configurationError),1)):z(``,!0),D(`form`,{onSubmit:X(y,[`prevent`]),"aria-busy":o.value},[D(`label`,null,[t[2]||=w(`允许的访问地址`,-1),d(D(`textarea`,{"onUpdate:modelValue":t[0]||=e=>i.value=e,name:`allowed-hosts`,rows:`5`,disabled:o.value||!r.value,autocomplete:`off`,placeholder:`yaovi.example.com`},null,8,AS),[[Y,i.value]])]),c.value?(u(),F(`p`,jS,s(c.value),1)):z(``,!0),l.value?(u(),F(`p`,MS,s(l.value),1)):z(``,!0),D(`div`,NS,[D(`button`,{type:`submit`,disabled:o.value||!r.value||!h.value},s(o.value?`处理中…`:`保存访问地址`),9,PS),c.value?(u(),F(`button`,{key:0,type:`button`,disabled:o.value,onClick:v},s(h.value?`放弃修改并重新加载`:`重新加载`),9,FS)):z(``,!0)])],40,kS)]))}}),[[`__scopeId`,`data-v-46ccb682`]]),LS={class:`system-overview-panel`,"aria-label":`系统概览`},RS={class:`overview-toolbar`},zS=[`disabled`],BS={key:0,class:`overview-warning`,role:`status`},VS={class:`overview-list`},HS={class:`overview-readonly`},US=V(E({__name:`SystemOverviewPanel`,props:{active:{type:Boolean,default:!0},upstreamReady:{type:Boolean,default:!1},upstreamError:{default:``}},emits:[`navigate`],setup(e,{emit:t}){let n=e,r=t,i=O(),a=O(),o=O(),c=O(),l=O(!1),d=O(``),p=H(()=>i.value?`${i.value.filter(e=>e.role===`admin`).length} 位管理员 · ${i.value.length} 位用户`:`尚未读取用户状态`),m=H(()=>{if(!a.value)return`尚未读取推送状态`;let e=a.value.configured&&a.value.healthy?`APNs 已启用`:`APNs 未就绪`,t=a.value.providers?.fcm;return`${e} · ${t?.configured&&t.healthy?`FCM 已启用`:`FCM 未配置`}`});async function h(){if(l.value)return;l.value=!0,d.value=``;let e=await Promise.allSettled([Ym().then(e=>{i.value=e}),ih().then(e=>{a.value=e}),Vl().then(e=>{o.value=e}),Promise.all([dt.config(),dt.models()]).then(([e,t])=>{let n=e.config.model,r=t.providers.find(e=>e.slug===n?.provider);c.value={configured:!!n?.default&&!!r&&r.authenticated!==!1,model:n?.default?(r?.name||n.provider||``)+` · `+n.default:``}})]),t=e.filter(e=>e.status===`rejected`).length;t&&(d.value=t===e.length?`无法读取系统状态`:`${t} 项状态暂时无法读取,可进入对应页面重试。`),l.value=!1}return f(()=>n.active,e=>{e&&h()},{immediate:!0}),(e,t)=>(u(),F(`section`,LS,[D(`div`,RS,[t[4]||=D(`p`,null,`影响整个Yaovi安装及所有机器人,仅管理员可见。`,-1),D(`button`,{type:`button`,disabled:l.value,onClick:h},[U(Z,{name:`refresh`,size:16}),w(s(l.value?`检查中…`:`检查系统状态`),1)],8,zS)]),d.value?(u(),F(`p`,BS,s(d.value),1)):z(``,!0),D(`div`,VS,[D(`div`,HS,[U(Z,{name:`users`,size:22}),D(`span`,null,[t[5]||=D(`strong`,null,`服务器用户`,-1),D(`small`,null,s(p.value),1)])]),D(`button`,{type:`button`,onClick:t[0]||=e=>r(`navigate`,`system-models`)},[U(Z,{name:`link`,size:22}),D(`span`,null,[t[6]||=D(`strong`,null,`默认模型`,-1),D(`small`,null,s(c.value?.configured?c.value.model:`等待供应商授权`),1)]),U(Z,{class:`chevron`,name:`chevron-left`,size:18})]),D(`button`,{type:`button`,onClick:t[1]||=e=>r(`navigate`,`system-push`)},[U(Z,{name:`bell`,size:22}),D(`span`,null,[t[7]||=D(`strong`,null,`推送服务`,-1),D(`small`,null,s(m.value),1)]),U(Z,{class:`chevron`,name:`chevron-left`,size:18})]),D(`button`,{type:`button`,onClick:t[2]||=e=>r(`navigate`,`system-hosts`)},[U(Z,{name:`link`,size:22}),t[8]||=D(`span`,null,[D(`strong`,null,`访问地址`),D(`small`,null,`管理允许访问 Yaovi 的域名与 IP`)],-1),U(Z,{class:`chevron`,name:`chevron-left`,size:18})]),D(`button`,{type:`button`,onClick:t[3]||=e=>r(`navigate`,`system-update`)},[U(Z,{name:`refresh`,size:22}),D(`span`,null,[t[9]||=D(`strong`,null,`升级`,-1),D(`small`,null,s(o.value?`Web ${o.value.current.webVersion} · 可独立升级与回滚`:`查看服务器版本与更新状态`),1)]),U(Z,{class:`chevron`,name:`chevron-left`,size:18})])]),t[10]||=D(`p`,{class:`ownership-note`},`模型凭据由服务端管理,设置页面只显示脱敏信息。`,-1)]))}}),[[`__scopeId`,`data-v-dd7aae3d`]]),WS=[`aria-label`],GS={key:0,role:`alert`},KS={key:0},qS=V(E({__name:`AgentHostUpdatePanel`,props:{section:{default:`upgrade`}},setup(e){let t=O(``),n=O(``);return m(async()=>{try{t.value=(await Vl()).current.webVersion}catch(e){n.value=e instanceof Error?e.message:`无法读取版本`}}),(r,i)=>(u(),F(`section`,{class:`host-updates`,"aria-label":e.section===`backup`?`备份`:`升级`},[n.value?(u(),F(`p`,GS,s(n.value),1)):z(``,!0),e.section===`backup`?(u(),F(T,{key:2},[i[5]||=D(`p`,null,`备份包含凭据和浏览器登录资料,请保存在自己的存储位置。恢复会覆盖当前服务器数据。`,-1),i[6]||=D(`pre`,null,`./node bin/yaovi-agent.mjs stop
|
|
19
|
-
./node bin/yaovi-agent.mjs backup /备份位置/yaovi-agent.tar.gz`,-1)],64)):(u(),F(T,{key:1},[t.value?(u(),F(`p`,KS,`当前主机:Yaovi `+s(t.value),1)):z(``,!0),i[0]||=D(`p`,null,`先停止主机并备份数据,再从新安装包目录运行升级。升级保留模型连接、Bot、历史和设备配对。`,-1),i[1]||=D(`pre`,null,`./node bin/yaovi-agent.mjs stop`,-1),i[2]||=D(`p`,null,`进入新安装包目录:`,-1),i[3]||=D(`pre`,null,`./node bin/yaovi-agent.mjs upgrade`,-1),i[4]||=D(`p`,null,`macOS 客户端使用新 DMG 手动替换应用。`,-1)],64))],8,WS))}}),[[`__scopeId`,`data-v-dc62bb5b`]]),JS=[`aria-busy`],YS={key:0,role:`alert`},XS={key:1,role:`status`},ZS={key:0,class:`actions`},QS=[`disabled`],$S=[`disabled`],eC={class:`proxies`},tC={class:`list-heading`},nC=[`disabled`],rC={key:0,class:`empty`},iC={key:0,role:`status`},aC={class:`proxy-actions`},oC=[`disabled`,`onClick`],sC=[`disabled`,`onClick`],cC=[`disabled`,`aria-label`,`onClick`],lC=[`disabled`],uC=[`disabled`],dC={class:`address-fields`},fC=[`disabled`],pC=[`disabled`],mC=[`disabled`],hC=[`placeholder`,`disabled`],gC={key:0,class:`check`},_C=[`disabled`],vC={key:0,role:`alert`},yC={key:1,role:`status`},bC={class:`actions`},xC=[`disabled`],SC=[`disabled`],CC=V(E({__name:`ModelNetworkPanel`,emits:[`dirty-change`,`busy-change`],setup(e,{emit:t}){let n=t,r=O(),i=O({mode:`environment`}),a=O(!1),o=O(``),c=O(``),l=O(),h=O(``),g=O(``),_=O(),v=O(``),y=O({}),b=H(()=>!!r.value&&JSON.stringify(i.value)!==JSON.stringify(r.value.default)),x=H(()=>!!l.value&&JSON.stringify(l.value)!==h.value);f(()=>b.value||x.value,e=>n(`dirty-change`,e)),f(a,e=>n(`busy-change`,e)),f(l,()=>{_.value=void 0},{deep:!0});async function C(e,t=!1){if(!a.value){a.value=!0,o.value=``,g.value=``,c.value=``;try{await e()}catch(e){let n=e instanceof Error?e.message:`操作失败`;t?g.value=n:o.value=n}finally{a.value=!1}}}async function E(){r.value=await ct.get(),i.value={...r.value.default}}async function A(){await C(async()=>{r.value=await ct.save(r.value.revision,i.value),c.value=`默认网络已保存,从下一轮任务或新登录生效。`})}function j(e){l.value=e?{id:e.id,name:e.name,protocol:e.protocol,host:e.host,port:e.port,username:e.username,password:``,clearPassword:!1}:{name:``,protocol:`http`,host:``,port:7890,username:``,password:``,clearPassword:!1},h.value=JSON.stringify(l.value),g.value=``,_.value=void 0}function M(){return!a.value&&(!x.value||window.confirm(`放弃尚未保存的代理配置?`))}async function N(){await C(async()=>{r.value=await ct.proxy(r.value.revision,l.value),l.value=void 0,c.value=`代理已保存。`},!0)}async function P(){await C(async()=>{_.value=await ct.test({draft:l.value})},!0)}async function I(e){v.value=e.id,await C(async()=>{let t=await ct.test({policy:{mode:`proxy`,proxyId:e.id}});y.value[e.id]=t.message}),v.value=``}async function L(e){window.confirm(`删除代理「${e.name}」?仍在使用的代理需要先替换。`)&&await C(async()=>{r.value=await ct.remove(r.value.revision,e.id),c.value=`代理已删除。`})}return m(()=>C(E)),(e,t)=>(u(),F(`section`,{class:`model-network`,"aria-busy":a.value},[t[24]||=D(`div`,{class:`section-heading`},[D(`h3`,null,`模型服务网络`),D(`p`,null,`用于模型服务的登录、自动续期、模型列表与模型请求。`)],-1),o.value?(u(),F(`p`,YS,s(o.value),1)):z(``,!0),c.value?(u(),F(`p`,XS,s(c.value),1)):z(``,!0),r.value?(u(),F(T,{key:2},[U(ot,{modelValue:i.value,"onUpdate:modelValue":t[0]||=e=>i.value=e,view:r.value,global:``,compact:``,disabled:a.value},null,8,[`modelValue`,`view`,`disabled`]),t[13]||=D(`p`,{class:`hint`},`未单独指定网络方式的模型连接使用此配置。修改后从下一轮任务或新登录生效,正在进行的登录保持原网络。`,-1),b.value?(u(),F(`div`,ZS,[D(`button`,{type:`button`,disabled:a.value,onClick:t[1]||=e=>i.value={...r.value.default}},`取消更改`,8,QS),D(`button`,{class:`primary`,type:`button`,disabled:a.value||i.value.mode===`proxy`&&!i.value.proxyId,onClick:A},`保存默认设置`,8,$S)])):z(``,!0),D(`section`,eC,[D(`div`,tC,[t[12]||=D(`h3`,null,`已保存的代理`,-1),D(`button`,{type:`button`,disabled:a.value,onClick:t[2]||=e=>j()},[U(Z,{name:`plus`,size:16}),t[11]||=w(`添加代理`,-1)],8,nC)]),r.value.proxies.length?z(``,!0):(u(),F(`p`,rC,`尚未添加代理。需要代理的模型连接可在这里统一配置。`)),(u(!0),F(T,null,p(r.value.proxies,e=>(u(),F(`article`,{key:e.id,class:`proxy-row`},[U(Z,{name:`globe`,size:22}),D(`div`,null,[D(`strong`,null,s(e.name),1),D(`small`,null,s(e.protocol.toUpperCase())+` · `+s(e.host)+`:`+s(e.port),1),y.value[e.id]?(u(),F(`small`,iC,s(y.value[e.id]),1)):z(``,!0)]),D(`div`,aC,[D(`button`,{type:`button`,disabled:a.value,onClick:t=>I(e)},s(v.value===e.id?`测试中…`:`测试`),9,oC),D(`button`,{type:`button`,disabled:a.value,onClick:t=>j(e)},`编辑`,8,sC),D(`button`,{type:`button`,disabled:a.value,"aria-label":`删除代理 ${e.name}`,onClick:t=>L(e)},[U(Z,{name:`trash`,size:16})],8,cC)])]))),128))])],64)):z(``,!0),l.value?(u(),k(it,{key:3,title:l.value.id?`编辑代理`:`添加代理`,compact:``,wide:``,"before-close":M,onClose:t[10]||=e=>l.value=void 0},{default:S(()=>[D(`form`,{class:`proxy-editor`,onSubmit:X(N,[`prevent`])},[D(`label`,null,[t[14]||=w(`名称`,-1),d(D(`input`,{"onUpdate:modelValue":t[3]||=e=>l.value.name=e,required:``,maxlength:`80`,placeholder:`例如:家庭代理`,disabled:a.value},null,8,lC),[[Y,l.value.name]])]),D(`label`,null,[t[16]||=w(`协议`,-1),d(D(`select`,{"onUpdate:modelValue":t[4]||=e=>l.value.protocol=e,disabled:a.value},[...t[15]||=[D(`option`,{value:`http`},`HTTP CONNECT`,-1),D(`option`,{value:`socks5`},`SOCKS5`,-1)]],8,uC),[[Me,l.value.protocol]])]),D(`div`,dC,[D(`label`,null,[t[17]||=w(`服务器地址`,-1),d(D(`input`,{"onUpdate:modelValue":t[5]||=e=>l.value.host=e,required:``,maxlength:`253`,placeholder:`127.0.0.1`,disabled:a.value},null,8,fC),[[Y,l.value.host]])]),D(`label`,null,[t[18]||=w(`端口`,-1),d(D(`input`,{"onUpdate:modelValue":t[6]||=e=>l.value.port=e,type:`number`,min:`1`,max:`65535`,required:``,disabled:a.value},null,8,pC),[[Y,l.value.port,void 0,{number:!0}]])])]),t[23]||=D(`p`,{class:`hint`},`localhost / 127.0.0.1 指运行 Yaovi 的服务器;不一定是你当前使用的设备。`,-1),D(`details`,null,[t[22]||=D(`summary`,null,`代理认证(可选)`,-1),D(`label`,null,[t[19]||=w(`用户名`,-1),d(D(`input`,{"onUpdate:modelValue":t[7]||=e=>l.value.username=e,autocomplete:`off`,disabled:a.value},null,8,mC),[[Y,l.value.username]])]),D(`label`,null,[t[20]||=w(`密码`,-1),d(D(`input`,{"onUpdate:modelValue":t[8]||=e=>l.value.password=e,type:`password`,autocomplete:`new-password`,placeholder:l.value.id?`留空保留已保存密码`:`可选`,disabled:a.value||l.value.clearPassword},null,8,hC),[[Y,l.value.password]])]),l.value.id?(u(),F(`label`,gC,[d(D(`input`,{"onUpdate:modelValue":t[9]||=e=>l.value.clearPassword=e,type:`checkbox`,disabled:a.value},null,8,_C),[[je,l.value.clearPassword]]),t[21]||=w(`清除已保存密码`,-1)])):z(``,!0)]),g.value?(u(),F(`p`,vC,s(g.value),1)):z(``,!0),_.value?(u(),F(`p`,yC,s(_.value.message),1)):z(``,!0),D(`div`,bC,[D(`button`,{type:`button`,disabled:a.value||!l.value.host||!l.value.port||!l.value.name,onClick:P},`测试此配置`,8,xC),D(`button`,{class:`primary`,type:`submit`,disabled:a.value},s(a.value?`处理中…`:`保存代理`),9,SC)])],32)]),_:1},8,[`title`])):z(``,!0)],8,JS))}}),[[`__scopeId`,`data-v-7033bcfb`]]),wC=[{key:`personal`,label:`偏好与资料`,icon:`users`,description:`管理服务器资料与当前设备的显示方式。`},{key:`models`,label:`模型服务`,icon:`model`,description:`管理模型连接与服务器默认配置。`},{key:`knowledge`,label:`知识与记忆`,icon:`brain`,description:`管理项目知识、共享事实与 Bot 的记忆方式。`},{key:`execution`,label:`执行与技能`,icon:`bolt`,description:`设置运行限制与 Bot 可用的技能。`},{key:`environment`,label:`环境与权限`,icon:`monitor`,description:`管理运行环境、设备连接与资源授权。`},{key:`system`,label:`系统与维护`,icon:`settings`,description:`查看服务器状态并管理推送、升级与备份。`}],TC=[{key:`user-profile`,category:`personal`,label:`用户资料`,keywords:`全局 个人资料 称呼 姓名 语言 时区 偏好 背景 主Bot 主 Bot`,summary:`填写一次,让已授权 Bot 了解你的背景和偏好;可由主 Bot 协助维护。`,admin:!0},{key:`account-profile`,category:`personal`,label:`服务器资料`,keywords:`头像 名称 账号资料 服务器名称`},{key:`appearance`,category:`personal`,label:`外观`,keywords:`主题 浅色 深色 跟随系统 显示 聊天气泡 预设 颜色`},{key:`chat-appearance`,category:`personal`,label:`聊天气泡`,keywords:`气泡 背景 样式`,parent:`appearance`},{key:`system-connection`,category:`models`,label:`模型连接`,keywords:`供应商 登录 OAuth API Key 密钥 自定义 端点 凭据池`,summary:`已配置的供应商供服务器里的 Bot 使用。`,admin:!0},{key:`system-models`,category:`models`,label:`默认模型`,keywords:`供应商 默认 对话 模型 故障 回退 备用`,summary:`Bot 没有单独指定模型时使用这里。`,admin:!0},{key:`system-auto`,category:`models`,label:`自动选模`,keywords:`Jev Jeff Auto 自动选模 候选 思考 决策`,summary:`由 Jev 或 Jeff 按任务选择能胜任的最轻模型。`,admin:!0},{key:`system-visibility`,category:`models`,label:`Bot 可见模型`,keywords:`可选模型 过滤 手动`,summary:`精简 Bot 手动选择时看到的模型。`,admin:!0},{key:`system-auxiliary`,category:`models`,label:`辅助模型`,keywords:`后台 模型 看图 标题 压缩 审批 分诊`,summary:`选用已授权的供应商,或跟随默认模型。`,admin:!0},{key:`system-image`,category:`models`,label:`图片`,keywords:`生成 编辑 图片`,summary:`用于生成和编辑图片。`,admin:!0},{key:`system-video`,category:`models`,label:`视频`,keywords:`生成 视频`,summary:`用于生成视频。`,admin:!0},{key:`system-voice`,category:`models`,label:`语音`,keywords:`语音 输入 输出 识别 合成 双流`,summary:`转录和合成各自选择连接与模型。`,admin:!0},{key:`system-web`,category:`models`,label:`搜索与网页`,keywords:`联网 搜索 网页 提取 Hermes Tavily Exa Firecrawl Brave SearXNG`,summary:`搜索与网页提取可分别选择供应商,所有 Bot 共用。`,admin:!0},{key:`bot-projects`,category:`knowledge`,label:`项目`,keywords:`项目 成员 知识 协作`},{key:`bot-user-memory`,category:`knowledge`,label:`用户记忆`,keywords:`用户 共享 长期事实 记忆 文件 历史`},{key:`bot-memory`,category:`knowledge`,label:`记忆`,keywords:`Bot 记忆 自动学习 召回 本地`,summary:`这些默认值用于没有单独设置的 Bot。`,admin:!0},{key:`bot-retrieval`,category:`knowledge`,label:`外部检索`,keywords:`OpenViking user peer 身份模式 检索 同步`,summary:`只做可关闭的同步和语义检索。`,admin:!0},{key:`my-bots`,category:`execution`,label:`我的 Bot`,keywords:`主 Bot 总管 机器人 模板 映射 身份 角色 模型 技能 记忆 运行记录`,summary:`选择主 Bot,统一管理身份、模型、技能、记忆与权限。`,admin:!0,feature:`bot-permissions-v2`},{key:`agent-runtime`,category:`execution`,label:`执行配置`,keywords:`Agent 运行配置 上下文 压缩 阈值 推理 次数 时间 限制 临时 子任务 分派`,admin:!0},{key:`agent-skills`,category:`execution`,label:`技能库`,keywords:`技能 范围 学习 版本 启用 停用`,admin:!0},{key:`workspace-permissions`,category:`environment`,label:`权限与操作审查`,keywords:`Bot 默认 完全开放 能力 允许 询问 拒绝 授权 资源 模板`,summary:`设置默认授权方式与操作审查,Bot 可独立选择。`,admin:!0,feature:`bot-permissions-v2`},{key:`bot-permission-requests`,category:`environment`,label:`请求记录`,keywords:`Bot 权限 申请 审批 请求 记录`,summary:`处理待确认请求,并查看已处理的授权记录。`,admin:!0,feature:`bot-permissions-v2`},{key:`bot-computers`,category:`environment`,label:`运行环境`,keywords:`环境 执行位置 本机 服务器 虚拟机 浏览器 电脑 审批 传输`,admin:!0},{key:`bot-vm`,category:`environment`,label:`本地虚拟机`,keywords:`本地 虚拟机 Docker 镜像 隔离`,admin:!0,parent:`bot-computers`},{key:`account-permissions`,category:`environment`,label:`本机权限`,keywords:`授权 本机 屏幕 辅助功能 电脑名称`,summary:`屏幕和辅助功能只授给这台电脑。`,admin:!0},{key:`execution-resources`,category:`environment`,label:`工具与服务授权`,keywords:`工具 服务 授权 环境变量 API 资源`,admin:!0},{key:`system-hermes-env`,category:`environment`,label:`Hermes 环境变量`,keywords:`Hermes 环境变量 密钥 自定义 工具`,summary:`管理系统 Hermes 的变量和凭据,与虚拟机脚本授权分别保存。`,admin:!0},{key:`bot-files`,category:`environment`,label:`文件访问`,keywords:`文件 预览 下载 目录 工作目录 文件夹 权限`,admin:!0},{key:`credential-vault`,category:`environment`,label:`密码与凭据`,keywords:`密码管理 密码库 SSH 私钥 凭据 网站 Token API 公众号 access_token`},{key:`system-network`,category:`environment`,label:`模型网络`,keywords:`代理 SOCKS HTTP 模型 登录`,summary:`用于模型登录、拉列表和发请求。`,admin:!0},{key:`system-hosts`,category:`environment`,label:`访问地址`,keywords:`外网 访问 地址 域名 IP`,summary:`允许哪些域名和 IP 访问这台 Yaovi。`,admin:!0},{key:`system-overview`,category:`system`,label:`状态与诊断`,keywords:`系统概览 状态 健康 连接 诊断`,admin:!0},{key:`system-push`,category:`system`,label:`推送服务`,keywords:`消息推送 通知 iOS Android APNs FCM`,admin:!0},{key:`system-update`,category:`system`,label:`升级`,keywords:`升级 更新 版本`,summary:`先备份,再从新的安装包目录升级。`,admin:!0},{key:`system-backup`,category:`system`,label:`备份`,keywords:`备份 恢复`,summary:`备份包里有凭据和浏览器资料。`,admin:!0},{key:`desktop-mode`,category:`system`,label:`运行模式`,keywords:`客户端 服务器 运行模式`,desktop:!0}];function EC(e){return TC.filter(t=>(!t.admin||e.isAdmin)&&(!t.desktop||e.desktop)&&(!t.feature||e.features?.includes(t.feature)))}var DC=[`onKeydownCapture`],OC={class:`settings-center__body`},kC={class:`settings-sidebar`,"aria-label":`设置分类`},AC={class:`settings-sidebar__mobilebar`},jC=[`disabled`],MC={class:`settings-search`},NC={key:0,class:`settings-category-nav`},PC={class:`settings-category`},FC=[`aria-current`,`disabled`,`onClick`],IC={key:1,class:`settings-search-results`,"aria-label":`设置搜索结果`},LC=[`disabled`,`onClick`],RC={key:0,class:`settings-search-empty`},zC={class:`settings-content__header`},BC=[`aria-label`,`disabled`],VC={class:`settings-content__heading`},HC={class:`settings-scope`},UC=[`disabled`],WC=[`aria-label`],GC={key:0,class:`settings-subpage-title`},KC=[`disabled`],qC={key:8,class:`settings-section-stack`},JC={key:10,class:`settings-section-stack`},YC={class:`settings-inline-nav`},XC=[`disabled`],ZC={key:17,class:`settings-section-stack`},QC={key:19,class:`appearance-panel`,"aria-label":`外观`},$C={class:`theme-options`,role:`radiogroup`,"aria-label":`界面主题`},ew=[`aria-checked`,`onClick`],tw=[`src`],nw={class:`appearance-note`},rw={key:0,class:`settings-content__footer`},iw={role:`status`},aw=[`disabled`],ow=[`disabled`],sw=V(E({__name:`SettingsCenterDialog`,props:{open:{type:Boolean},initialPage:{},features:{},targetBotId:{},userName:{default:``},userAvatar:{default:``},pairingUserName:{default:``},theme:{default:`light`},themePreference:{default:`system`},insecureTransport:{type:Boolean,default:!1},isAdmin:{type:Boolean,default:!1},upstreamReady:{type:Boolean,default:!1},upstreamError:{default:``}},emits:[`close`,`logout`,`set-theme`,`bot-settings-changed`],setup(e,{emit:t}){let n=te(()=>Qe(()=>import(`./BotSettingsPanel-DLmnL6pH.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12]))),r=te(()=>Qe(()=>import(`./BotControlSettingsPanel-BbhD2eC0.js`),__vite__mapDeps([13,1,2,3,4,5,6,7,8,9,10,11,14]))),i=e,c=t,l=O(),m=O(),h=O(),_=O(`account-profile`),v=O(`account-profile`),b=O(!1),x=O(!1),C=O(!1),E=O(!1),A=g({}),j=g({}),M=g({}),N=O(``),P=O(0),I=!!(window.yaoviDesktop?.modeState&&window.yaoviDesktop?.switchMode),B=H(()=>EC({isAdmin:i.isAdmin,desktop:I,features:i.features})),V=H(()=>B.value.find(e=>e.key===_.value)??B.value[0]);H(()=>V.value.parent??V.value.key);let W=H(()=>wC.filter(e=>B.value.some(t=>t.category===e.key))),ee=H(()=>wC.find(e=>e.key===V.value.category)),G=H(()=>{let e=N.value.trim().toLocaleLowerCase();return e?B.value.filter(t=>(t.label+` `+t.keywords).toLocaleLowerCase().includes(e)):[]}),K=H(()=>!!A[_.value]),ne=H(()=>x.value||C.value),re=H(()=>[`user-profile`,`system-models`,`system-auto`,`system-visibility`,`system-web`,`system-hermes-env`,`bot-memory`,`agent-runtime`,`agent-skills`,`bot-files`].includes(_.value)),ie=H(()=>_.value===`system-models`?`defaults`:_.value===`system-auto`?`auto`:_.value===`system-visibility`?`visibility`:_.value===`system-auxiliary`?`auxiliary`:_.value===`system-image`?`image`:_.value===`system-video`?`video`:_.value===`system-voice`?`voice`:`connections`),q=H(()=>_.value+`:`+P.value),ae=H(()=>i.pairingUserName||i.userName||`当前账号`),J=H(()=>_.value===`user-profile`?`全局用户资料`:_.value===`appearance`||_.value===`chat-appearance`?`当前设备 · 自动保存`:_.value===`credential-vault`?`当前账号:`+ae.value:_.value===`bot-projects`?`项目范围`:_.value===`bot-user-memory`?`用户共享`:[`bot-memory`,`agent-runtime`,`agent-skills`].includes(_.value)?`系统默认 / 指定 Bot`:[`system-models`,`system-auto`,`system-visibility`,`system-auxiliary`,`system-image`,`system-video`,`system-voice`].includes(_.value)?`系统默认 · 仅管理员`:V.value.admin?`服务器设置 · 仅管理员`:`当前服务器`);function oe(e){A[_.value]=e}function se(e,t){j[e]=t,oe(Object.values(j).some(Boolean))}function ce(e,t){M[e]=t,C.value=Object.values(M).some(Boolean)}function le(){return!K.value||window.confirm(`放弃当前页面未保存的更改?`)}function ue(){E.value=!1,C.value=!1;for(let e of Object.keys(j))delete j[e];for(let e of Object.keys(M))delete M[e]}function de(e){if(!(!B.value.some(t=>t.key===e)||ne.value)){if(e!==_.value){if(!le())return;A[_.value]=!1,_.value=e,P.value=0,ue()}v.value=e,b.value=!0,N.value=``,o(()=>m.value?.focus())}}function fe(){if(!(ne.value||!K.value)){if(h.value?.reset){h.value.reset();return}A[_.value]=!1,P.value++,ue()}}function pe(){ne.value||!le()||(A[_.value]=!1,c(`close`))}function me(){if(V.value.parent){de(V.value.parent);return}ne.value||!le()||(K.value&&fe(),b.value=!1,o(()=>l.value?.querySelector(`.settings-nav-item[aria-current="page"]`)?.focus()))}function he(){window.innerWidth<960&&b.value?me():pe()}function _e(e){let t=[...l.value?.querySelectorAll(`button:not(:disabled),input:not(:disabled),select:not(:disabled),textarea:not(:disabled),a[href],[tabindex="0"]`)??[]].filter(e=>e.tabIndex>=0&&e.getClientRects().length),n=t[0],r=t.at(-1);!n||!r||(e.shiftKey&&(document.activeElement===n||document.activeElement===l.value)?(e.preventDefault(),r.focus()):!e.shiftKey&&document.activeElement===r&&(e.preventDefault(),n.focus()))}return f(()=>[i.open,i.initialPage,i.isAdmin],([e,t])=>{if(!e){x.value=!1;return}let n=t&&t!==`account-profile`?t:v.value;_.value=B.value.some(e=>e.key===n)?n:`account-profile`,N.value=``,P.value=0,ue();for(let e of Object.keys(A))A[e]=!1;b.value=!!(t&&t!==`account-profile`),o(()=>l.value?.focus())},{immediate:!0}),(t,i)=>(u(),k(L,{to:`body`},[U(ge,{name:`settings-center-fade`},{default:S(()=>[e.open?(u(),F(`div`,{key:0,class:`settings-center-layer`,role:`presentation`,onMousedown:X(pe,[`self`])},[D(`section`,{ref_key:`dialog`,ref:l,class:y([`settings-center`,{"settings-center--mobile-detail":b.value}]),role:`dialog`,"aria-modal":`true`,"aria-label":`设置`,tabindex:`-1`,onKeydownCapture:Ye(X(he,[`prevent`,`stop`]),[`esc`]),onKeydown:Ye(_e,[`tab`])},[D(`div`,OC,[D(`aside`,kC,[D(`div`,AC,[i[34]||=D(`h2`,null,`设置`,-1),D(`button`,{class:`settings-mobile-close`,type:`button`,"aria-label":`关闭设置`,disabled:ne.value,onClick:pe},[U(Z,{name:`close`,size:20})],8,jC)]),D(`label`,MC,[U(Z,{name:`search`,size:16}),d(D(`input`,{"onUpdate:modelValue":i[0]||=e=>N.value=e,type:`search`,"aria-label":`搜索设置`,placeholder:`搜索设置`},null,512),[[Y,N.value]])]),N.value.trim()?(u(),F(`nav`,IC,[(u(!0),F(T,null,p(G.value,e=>(u(),F(`button`,{key:e.key,type:`button`,disabled:ne.value,onClick:t=>de(e.key)},[D(`strong`,null,s(e.label),1),D(`small`,null,s(R(wC).find(t=>t.key===e.category)?.label)+` → `+s(e.label),1)],8,LC))),128)),G.value.length?z(``,!0):(u(),F(`p`,RC,`没有匹配的设置`))])):(u(),F(`nav`,NC,[(u(!0),F(T,null,p(W.value,e=>(u(),F(`section`,{key:e.key},[D(`div`,PC,s(e.label),1),(u(!0),F(T,null,p(B.value.filter(t=>t.category===e.key),e=>(u(),F(`button`,{key:e.key,type:`button`,class:`settings-nav-item`,"aria-current":_.value===e.key?`page`:void 0,disabled:ne.value,onClick:t=>de(e.key)},s(e.label),9,FC))),128))]))),128))])),i[35]||=D(`footer`,{class:`settings-sidebar__footer`},`Yaovi`,-1)]),D(`main`,{class:y([`settings-content`,{"settings-content--with-footer":re.value}])},[D(`header`,zC,[D(`button`,{class:`mobile-back`,type:`button`,"aria-label":V.value.parent?`返回`+B.value.find(e=>e.key===V.value.parent)?.label:`返回设置分类`,disabled:ne.value,onClick:me},[U(Z,{name:`chevron-left`,size:20})],8,BC),D(`div`,VC,[D(`h3`,{ref_key:`contentTitle`,ref:m,tabindex:`-1`},s(V.value.label),513),D(`p`,null,s(V.value.summary||ee.value.description),1)]),D(`span`,HC,s(J.value),1),D(`button`,{class:`settings-center__close`,type:`button`,"aria-label":`关闭设置`,disabled:ne.value,onClick:pe},[U(Z,{name:`close`,size:20})],8,UC)]),(u(),F(`div`,{key:q.value,id:`settings-current-panel`,class:`settings-content__scroll`,role:`tabpanel`,"aria-label":V.value.label},[V.value.parent?(u(),F(`div`,GC,[D(`button`,{type:`button`,disabled:ne.value,onClick:i[1]||=e=>de(V.value.parent)},[U(Z,{name:`chevron-left`,size:16}),w(`返回`+s(B.value.find(e=>e.key===V.value.parent)?.label),1)],8,KC),D(`h4`,null,s(V.value.label),1)])):z(``,!0),[`my-bots`,`workspace-permissions`,`bot-permission-requests`].includes(_.value)&&e.isAdmin&&e.features?.includes(`bot-permissions-v2`)?(u(),k(R(r),{key:1,"target-bot-id":e.targetBotId,onNavigate:de,page:_.value===`my-bots`?`bots`:_.value===`workspace-permissions`?`permissions`:`requests`,onChanged:i[2]||=e=>c(`bot-settings-changed`),onDirtyChange:oe,onBusyChange:i[3]||=e=>C.value=e},null,8,[`target-bot-id`,`page`])):_.value===`user-profile`&&e.isAdmin?(u(),k(Mx,{key:2,ref_key:`activeEditor`,ref:h,"form-id":`settings-active-form`,onDirtyChange:oe,onCanSaveChange:i[4]||=e=>E.value=e,onBusyChange:i[5]||=e=>C.value=e},null,512)):_.value===`system-web`&&e.isAdmin?(u(),k(sS,{key:3,ref_key:`activeEditor`,ref:h,"form-id":`settings-active-form`,onDirtyChange:oe,onCanSaveChange:i[6]||=e=>E.value=e,onBusyChange:i[7]||=e=>C.value=e},null,512)):_.value===`system-hermes-env`&&e.isAdmin?(u(),k(TS,{key:4,ref_key:`activeEditor`,ref:h,"form-id":`settings-active-form`,onDirtyChange:oe,onCanSaveChange:i[8]||=e=>E.value=e,onBusyChange:i[9]||=e=>C.value=e},null,512)):ee.value.key===`models`&&e.isAdmin?(u(),k(Jm,{key:5,ref_key:`activeEditor`,ref:h,page:ie.value,"form-id":`settings-active-form`,onManageNetwork:i[10]||=e=>de(`system-network`),onDirtyChange:oe,onCanSaveChange:i[11]||=e=>E.value=e,onBusyChange:i[12]||=e=>C.value=e},null,8,[`page`])):[`bot-memory`,`agent-runtime`,`agent-skills`].includes(_.value)&&e.isAdmin?(u(),k(hl,{key:6,ref_key:`activeEditor`,ref:h,section:_.value===`bot-memory`?`memory`:_.value===`agent-skills`?`skills`:`execution`,"form-id":`settings-active-form`,embedded:``,onDirtyChange:oe,onCanSaveChange:i[13]||=e=>E.value=e,onBusyChange:i[14]||=e=>C.value=e},null,8,[`section`])):_.value===`bot-retrieval`&&e.isAdmin?(u(),k(Js,{key:7,open:``,onDirtyChange:oe,onBusyChange:i[15]||=e=>C.value=e})):_.value===`bot-vm`?(u(),F(`section`,qC,[U(R(n),{page:`vm`,"is-admin":e.isAdmin,onChanged:i[16]||=e=>c(`bot-settings-changed`),onDirtyChange:oe},null,8,[`is-admin`]),e.isAdmin?(u(),k(Yp,{key:0,section:`proxy`,onDirtyChange:i[17]||=e=>se(`proxy`,e),onBusyChange:i[18]||=e=>ce(`proxy`,e)})):z(``,!0)])):[`bot-projects`,`bot-user-memory`].includes(_.value)?(u(),k(R(n),{key:9,page:_.value===`bot-projects`?`projects`:`user`,"is-admin":e.isAdmin,onChanged:i[19]||=e=>c(`bot-settings-changed`),onDirtyChange:oe},null,8,[`page`,`is-admin`])):_.value===`bot-computers`&&e.isAdmin?(u(),F(`section`,JC,[D(`div`,YC,[D(`button`,{type:`button`,disabled:ne.value,onClick:i[20]||=e=>de(`bot-vm`)},[U(Z,{name:`monitor`,size:18}),i[36]||=w(`管理本地虚拟机`,-1),U(Z,{name:`chevron-left`,size:16})],8,XC)]),U(Yp,{section:`environment`,onDirtyChange:i[21]||=e=>se(`environment`,e),onBusyChange:i[22]||=e=>ce(`environment`,e)}),U(Uf,{section:`environment`,onDirtyChange:i[23]||=e=>se(`host-tools`,e),onBusyChange:i[24]||=e=>ce(`host-tools`,e)})])):_.value===`execution-resources`&&e.isAdmin?(u(),k(Yp,{key:11,section:`resources`,onDirtyChange:oe,onBusyChange:i[25]||=e=>C.value=e})):_.value===`bot-files`&&e.isAdmin?(u(),k(jd,{key:12,ref_key:`activeEditor`,ref:h,embedded:``,"form-id":`settings-active-form`,onDirtyChange:oe,onCanSaveChange:i[26]||=e=>E.value=e,onBusyChange:i[27]||=e=>C.value=e},null,512)):_.value===`system-network`&&e.isAdmin?(u(),k(CC,{key:13,onDirtyChange:i[28]||=e=>se(`model-network`,e),onBusyChange:i[29]||=e=>ce(`model-network`,e)})):_.value===`system-hosts`&&e.isAdmin?(u(),k(IS,{key:14,onDirtyChange:oe})):_.value===`credential-vault`?(u(),k(Sb,{key:15})):_.value===`account-profile`?(u(),k(nx,{key:16,section:`profile`,active:!0,onDirtyChange:oe,onLogout:i[30]||=e=>c(`logout`)})):_.value===`account-permissions`&&e.isAdmin?(u(),F(`section`,ZC,[U($d),U(Uf,{section:`devices`,onDirtyChange:oe,onBusyChange:i[31]||=e=>C.value=e})])):_.value===`desktop-mode`&&R(I)?(u(),k(Kx,{key:18})):_.value===`appearance`?(u(),F(`section`,QC,[i[39]||=D(`h4`,null,`界面主题`,-1),D(`div`,$C,[(u(),F(T,null,p([[`system`,`跟随系统`],[`light`,`浅色`],[`dark`,`深色`]],t=>D(`button`,{key:t[0],type:`button`,role:`radio`,"aria-checked":e.themePreference===t[0],class:y({active:e.themePreference===t[0]}),onClick:e=>c(`set-theme`,t[0])},[D(`img`,{src:`/setting-previews/${t[0]}.png`,alt:``,width:`480`,height:`300`},null,8,tw),D(`strong`,null,s(t[1]),1),(u(),k(a(e.themePreference===t[0]?R(Ct):R(jt)),{class:`theme-choice-mark`,"aria-hidden":`true`}))],10,ew)),64))]),D(`button`,{type:`button`,class:`bubble-settings-entry`,onClick:i[32]||=e=>de(`chat-appearance`)},[U(Z,{name:`chat`,size:20}),i[37]||=D(`span`,null,[D(`strong`,null,`聊天气泡`),D(`small`,null,`预设、背景颜色与样式`)],-1),U(Z,{name:`chevron-left`,size:18})]),D(`p`,nw,[U(Z,{name:`info`,size:16}),i[38]||=w(`更改自动保存到当前设备。`,-1)])])):_.value===`chat-appearance`?(u(),k(vv,{key:20,theme:e.theme},null,8,[`theme`])):_.value===`system-overview`&&e.isAdmin?(u(),k(US,{key:21,active:!0,"upstream-ready":e.upstreamReady,"upstream-error":e.upstreamError,onNavigate:de},null,8,[`upstream-ready`,`upstream-error`])):_.value===`system-push`&&e.isAdmin?(u(),k(Yh,{key:22,section:`push`,active:!0,onDirtyChange:oe})):_.value===`system-update`&&e.isAdmin?(u(),k(qS,{key:23,section:`upgrade`,onLockChange:i[33]||=e=>x.value=e})):_.value===`system-backup`&&e.isAdmin?(u(),k(qS,{key:24,section:`backup`})):z(``,!0)],8,WC)),re.value?(u(),F(`footer`,rw,[D(`p`,iw,s(C.value?`正在处理…`:K.value?`有未保存的更改`:`仅保存当前页面的更改`),1),D(`div`,null,[D(`button`,{type:`button`,class:`settings-footer__cancel`,disabled:ne.value||!K.value,onClick:fe},`取消更改`,8,aw),D(`button`,{type:`submit`,class:`settings-footer__save`,form:`settings-active-form`,disabled:ne.value||!E.value},s(C.value?`正在保存…`:`保存更改`),9,ow)])])):z(``,!0)],2)])],42,DC)],32)):z(``,!0)]),_:1})]))}}),[[`__scopeId`,`data-v-aaf61927`]]);function cw(e){let t=`.`,n=`__`,r=`--`,i;if(e){let i=e.blockPrefix;i&&(t=i),i=e.elementPrefix,i&&(n=i),i=e.modifierPrefix,i&&(r=i)}let a={install(e){i=e.c;let t=e.context;t.bem={},t.bem.b=null,t.bem.els=null}};function o(e){let n,r;return{before(e){n=e.bem.b,r=e.bem.els,e.bem.els=null},after(e){e.bem.b=n,e.bem.els=r},$({context:n,props:r}){return e=typeof e==`string`?e:e({context:n,props:r}),n.bem.b=e,`${r?.bPrefix||t}${n.bem.b}`}}}function s(e){let r;return{before(e){r=e.bem.els},after(e){e.bem.els=r},$({context:r,props:i}){return e=typeof e==`string`?e:e({context:r,props:i}),r.bem.els=e.split(`,`).map(e=>e.trim()),r.bem.els.map(e=>`${i?.bPrefix||t}${r.bem.b}${n}${e}`).join(`, `)}}}function c(e){return{$({context:i,props:a}){e=typeof e==`string`?e:e({context:i,props:a});let o=e.split(`,`).map(e=>e.trim());function s(e){return o.map(o=>`&${a?.bPrefix||t}${i.bem.b}${e===void 0?``:`${n}${e}`}${r}${o}`).join(`, `)}let c=i.bem.els;return c===null?s():s(c[0])}}}function l(e){return{$({context:i,props:a}){e=typeof e==`string`?e:e({context:i,props:a});let o=i.bem.els;return`&:not(${a?.bPrefix||t}${i.bem.b}${o!==null&&o.length>0?`${n}${o[0]}`:``}${r}${e})`}}}return Object.assign(a,{cB:((...e)=>i(o(e[0]),e[1],e[2])),cE:((...e)=>i(s(e[0]),e[1],e[2])),cM:((...e)=>i(c(e[0]),e[1],e[2])),cNotM:((...e)=>i(l(e[0]),e[1],e[2]))}),a}function lw(e){let t=0;for(let n=0;n<e.length;++n)e[n]===`&`&&++t;return t}var uw=/\s*,(?![^(]*\))\s*/g,dw=/\s+/g;function fw(e,t){let n=[];return t.split(uw).forEach(t=>{let r=lw(t);if(!r){e.forEach(e=>{n.push((e&&e+` `)+t)});return}if(r===1){e.forEach(e=>{n.push(t.replace(`&`,e))});return}let i=[t];for(;r--;){let t=[];i.forEach(n=>{e.forEach(e=>{t.push(n.replace(`&`,e))})}),i=t}i.forEach(e=>n.push(e))}),n}function pw(e,t){let n=[];return t.split(uw).forEach(t=>{e.forEach(e=>{n.push((e&&e+` `)+t)})}),n}function mw(e){let t=[``];return e.forEach(e=>{e&&=e.trim(),e&&(t=e.includes(`&`)?fw(t,e):pw(t,e))}),t.join(`, `).replace(dw,` `)}function hw(e){if(!e)return;let t=e.parentElement;t&&t.removeChild(e)}function gw(e,t){return(t??document.head).querySelector(`style[cssr-id="${e}"]`)}function _w(e){let t=document.createElement(`style`);return t.setAttribute(`cssr-id`,e),t}function vw(e){return e?/^\s*@(s|m)/.test(e):!1}var yw=/[A-Z]/g;function bw(e){return e.replace(yw,e=>`-`+e.toLowerCase())}function xw(e,t=` `){return typeof e==`object`&&e?` {
|
|
19
|
+
./node bin/yaovi-agent.mjs backup /备份位置/yaovi-agent.tar.gz`,-1)],64)):(u(),F(T,{key:1},[t.value?(u(),F(`p`,KS,`当前主机:Yaovi `+s(t.value),1)):z(``,!0),i[0]||=D(`p`,null,`先停止主机并备份数据,再从新安装包目录运行升级。升级保留模型连接、Bot、历史和设备配对。`,-1),i[1]||=D(`pre`,null,`./node bin/yaovi-agent.mjs stop`,-1),i[2]||=D(`p`,null,`进入新安装包目录:`,-1),i[3]||=D(`pre`,null,`./node bin/yaovi-agent.mjs upgrade`,-1),i[4]||=D(`p`,null,`macOS 客户端使用新 DMG 手动替换应用。`,-1)],64))],8,WS))}}),[[`__scopeId`,`data-v-dc62bb5b`]]),JS=[`aria-busy`],YS={key:0,role:`alert`},XS={key:1,role:`status`},ZS={key:0,class:`actions`},QS=[`disabled`],$S=[`disabled`],eC={class:`proxies`},tC={class:`list-heading`},nC=[`disabled`],rC={key:0,class:`empty`},iC={key:0,role:`status`},aC={class:`proxy-actions`},oC=[`disabled`,`onClick`],sC=[`disabled`,`onClick`],cC=[`disabled`,`aria-label`,`onClick`],lC=[`disabled`],uC=[`disabled`],dC={class:`address-fields`},fC=[`disabled`],pC=[`disabled`],mC=[`disabled`],hC=[`placeholder`,`disabled`],gC={key:0,class:`check`},_C=[`disabled`],vC={key:0,role:`alert`},yC={key:1,role:`status`},bC={class:`actions`},xC=[`disabled`],SC=[`disabled`],CC=V(E({__name:`ModelNetworkPanel`,emits:[`dirty-change`,`busy-change`],setup(e,{emit:t}){let n=t,r=O(),i=O({mode:`environment`}),a=O(!1),o=O(``),c=O(``),l=O(),h=O(``),g=O(``),_=O(),v=O(``),y=O({}),b=H(()=>!!r.value&&JSON.stringify(i.value)!==JSON.stringify(r.value.default)),x=H(()=>!!l.value&&JSON.stringify(l.value)!==h.value);f(()=>b.value||x.value,e=>n(`dirty-change`,e)),f(a,e=>n(`busy-change`,e)),f(l,()=>{_.value=void 0},{deep:!0});async function C(e,t=!1){if(!a.value){a.value=!0,o.value=``,g.value=``,c.value=``;try{await e()}catch(e){let n=e instanceof Error?e.message:`操作失败`;t?g.value=n:o.value=n}finally{a.value=!1}}}async function E(){r.value=await ct.get(),i.value={...r.value.default}}async function A(){await C(async()=>{r.value=await ct.save(r.value.revision,i.value),c.value=`默认网络已保存,从下一轮任务或新登录生效。`})}function j(e){l.value=e?{id:e.id,name:e.name,protocol:e.protocol,host:e.host,port:e.port,username:e.username,password:``,clearPassword:!1}:{name:``,protocol:`http`,host:``,port:7890,username:``,password:``,clearPassword:!1},h.value=JSON.stringify(l.value),g.value=``,_.value=void 0}function M(){return!a.value&&(!x.value||window.confirm(`放弃尚未保存的代理配置?`))}async function N(){await C(async()=>{r.value=await ct.proxy(r.value.revision,l.value),l.value=void 0,c.value=`代理已保存。`},!0)}async function P(){await C(async()=>{_.value=await ct.test({draft:l.value})},!0)}async function I(e){v.value=e.id,await C(async()=>{let t=await ct.test({policy:{mode:`proxy`,proxyId:e.id}});y.value[e.id]=t.message}),v.value=``}async function L(e){window.confirm(`删除代理「${e.name}」?仍在使用的代理需要先替换。`)&&await C(async()=>{r.value=await ct.remove(r.value.revision,e.id),c.value=`代理已删除。`})}return m(()=>C(E)),(e,t)=>(u(),F(`section`,{class:`model-network`,"aria-busy":a.value},[t[24]||=D(`div`,{class:`section-heading`},[D(`h3`,null,`模型服务网络`),D(`p`,null,`用于模型服务的登录、自动续期、模型列表与模型请求。`)],-1),o.value?(u(),F(`p`,YS,s(o.value),1)):z(``,!0),c.value?(u(),F(`p`,XS,s(c.value),1)):z(``,!0),r.value?(u(),F(T,{key:2},[U(ot,{modelValue:i.value,"onUpdate:modelValue":t[0]||=e=>i.value=e,view:r.value,global:``,compact:``,disabled:a.value},null,8,[`modelValue`,`view`,`disabled`]),t[13]||=D(`p`,{class:`hint`},`未单独指定网络方式的模型连接使用此配置。修改后从下一轮任务或新登录生效,正在进行的登录保持原网络。`,-1),b.value?(u(),F(`div`,ZS,[D(`button`,{type:`button`,disabled:a.value,onClick:t[1]||=e=>i.value={...r.value.default}},`取消更改`,8,QS),D(`button`,{class:`primary`,type:`button`,disabled:a.value||i.value.mode===`proxy`&&!i.value.proxyId,onClick:A},`保存默认设置`,8,$S)])):z(``,!0),D(`section`,eC,[D(`div`,tC,[t[12]||=D(`h3`,null,`已保存的代理`,-1),D(`button`,{type:`button`,disabled:a.value,onClick:t[2]||=e=>j()},[U(Z,{name:`plus`,size:16}),t[11]||=w(`添加代理`,-1)],8,nC)]),r.value.proxies.length?z(``,!0):(u(),F(`p`,rC,`尚未添加代理。需要代理的模型连接可在这里统一配置。`)),(u(!0),F(T,null,p(r.value.proxies,e=>(u(),F(`article`,{key:e.id,class:`proxy-row`},[U(Z,{name:`globe`,size:22}),D(`div`,null,[D(`strong`,null,s(e.name),1),D(`small`,null,s(e.protocol.toUpperCase())+` · `+s(e.host)+`:`+s(e.port),1),y.value[e.id]?(u(),F(`small`,iC,s(y.value[e.id]),1)):z(``,!0)]),D(`div`,aC,[D(`button`,{type:`button`,disabled:a.value,onClick:t=>I(e)},s(v.value===e.id?`测试中…`:`测试`),9,oC),D(`button`,{type:`button`,disabled:a.value,onClick:t=>j(e)},`编辑`,8,sC),D(`button`,{type:`button`,disabled:a.value,"aria-label":`删除代理 ${e.name}`,onClick:t=>L(e)},[U(Z,{name:`trash`,size:16})],8,cC)])]))),128))])],64)):z(``,!0),l.value?(u(),k(it,{key:3,title:l.value.id?`编辑代理`:`添加代理`,compact:``,wide:``,"before-close":M,onClose:t[10]||=e=>l.value=void 0},{default:S(()=>[D(`form`,{class:`proxy-editor`,onSubmit:X(N,[`prevent`])},[D(`label`,null,[t[14]||=w(`名称`,-1),d(D(`input`,{"onUpdate:modelValue":t[3]||=e=>l.value.name=e,required:``,maxlength:`80`,placeholder:`例如:家庭代理`,disabled:a.value},null,8,lC),[[Y,l.value.name]])]),D(`label`,null,[t[16]||=w(`协议`,-1),d(D(`select`,{"onUpdate:modelValue":t[4]||=e=>l.value.protocol=e,disabled:a.value},[...t[15]||=[D(`option`,{value:`http`},`HTTP CONNECT`,-1),D(`option`,{value:`socks5`},`SOCKS5`,-1)]],8,uC),[[Me,l.value.protocol]])]),D(`div`,dC,[D(`label`,null,[t[17]||=w(`服务器地址`,-1),d(D(`input`,{"onUpdate:modelValue":t[5]||=e=>l.value.host=e,required:``,maxlength:`253`,placeholder:`127.0.0.1`,disabled:a.value},null,8,fC),[[Y,l.value.host]])]),D(`label`,null,[t[18]||=w(`端口`,-1),d(D(`input`,{"onUpdate:modelValue":t[6]||=e=>l.value.port=e,type:`number`,min:`1`,max:`65535`,required:``,disabled:a.value},null,8,pC),[[Y,l.value.port,void 0,{number:!0}]])])]),t[23]||=D(`p`,{class:`hint`},`localhost / 127.0.0.1 指运行 Yaovi 的服务器;不一定是你当前使用的设备。`,-1),D(`details`,null,[t[22]||=D(`summary`,null,`代理认证(可选)`,-1),D(`label`,null,[t[19]||=w(`用户名`,-1),d(D(`input`,{"onUpdate:modelValue":t[7]||=e=>l.value.username=e,autocomplete:`off`,disabled:a.value},null,8,mC),[[Y,l.value.username]])]),D(`label`,null,[t[20]||=w(`密码`,-1),d(D(`input`,{"onUpdate:modelValue":t[8]||=e=>l.value.password=e,type:`password`,autocomplete:`new-password`,placeholder:l.value.id?`留空保留已保存密码`:`可选`,disabled:a.value||l.value.clearPassword},null,8,hC),[[Y,l.value.password]])]),l.value.id?(u(),F(`label`,gC,[d(D(`input`,{"onUpdate:modelValue":t[9]||=e=>l.value.clearPassword=e,type:`checkbox`,disabled:a.value},null,8,_C),[[je,l.value.clearPassword]]),t[21]||=w(`清除已保存密码`,-1)])):z(``,!0)]),g.value?(u(),F(`p`,vC,s(g.value),1)):z(``,!0),_.value?(u(),F(`p`,yC,s(_.value.message),1)):z(``,!0),D(`div`,bC,[D(`button`,{type:`button`,disabled:a.value||!l.value.host||!l.value.port||!l.value.name,onClick:P},`测试此配置`,8,xC),D(`button`,{class:`primary`,type:`submit`,disabled:a.value},s(a.value?`处理中…`:`保存代理`),9,SC)])],32)]),_:1},8,[`title`])):z(``,!0)],8,JS))}}),[[`__scopeId`,`data-v-7033bcfb`]]),wC=[{key:`personal`,label:`偏好与资料`,icon:`users`,description:`管理服务器资料与当前设备的显示方式。`},{key:`models`,label:`模型服务`,icon:`model`,description:`管理模型连接与服务器默认配置。`},{key:`knowledge`,label:`知识与记忆`,icon:`brain`,description:`管理项目知识、共享事实与 Bot 的记忆方式。`},{key:`execution`,label:`执行与技能`,icon:`bolt`,description:`设置运行限制与 Bot 可用的技能。`},{key:`environment`,label:`环境与权限`,icon:`monitor`,description:`管理运行环境、设备连接与资源授权。`},{key:`system`,label:`系统与维护`,icon:`settings`,description:`查看服务器状态并管理推送、升级与备份。`}],TC=[{key:`user-profile`,category:`personal`,label:`用户资料`,keywords:`全局 个人资料 称呼 姓名 语言 时区 偏好 背景 主Bot 主 Bot`,summary:`填写一次,让已授权 Bot 了解你的背景和偏好;可由主 Bot 协助维护。`,admin:!0},{key:`account-profile`,category:`personal`,label:`服务器资料`,keywords:`头像 名称 账号资料 服务器名称`},{key:`appearance`,category:`personal`,label:`外观`,keywords:`主题 浅色 深色 跟随系统 显示 聊天气泡 预设 颜色`},{key:`chat-appearance`,category:`personal`,label:`聊天气泡`,keywords:`气泡 背景 样式`,parent:`appearance`},{key:`system-connection`,category:`models`,label:`模型连接`,keywords:`供应商 登录 OAuth API Key 密钥 自定义 端点 凭据池`,summary:`已配置的供应商供服务器里的 Bot 使用。`,admin:!0},{key:`system-models`,category:`models`,label:`默认模型`,keywords:`供应商 默认 对话 模型 故障 回退 备用`,summary:`Bot 没有单独指定模型时使用这里。`,admin:!0},{key:`system-auto`,category:`models`,label:`自动选模`,keywords:`Jev Jeff Auto 自动选模 候选 思考 决策`,summary:`由 Jev 或 Jeff 按任务选择能胜任的最轻模型。`,admin:!0},{key:`system-visibility`,category:`models`,label:`Bot 可见模型`,keywords:`可选模型 过滤 手动`,summary:`精简 Bot 手动选择时看到的模型。`,admin:!0},{key:`system-auxiliary`,category:`models`,label:`辅助模型`,keywords:`后台 模型 看图 标题 压缩 审批 分诊`,summary:`选用已授权的供应商,或跟随默认模型。`,admin:!0},{key:`system-image`,category:`models`,label:`图片`,keywords:`生成 编辑 图片`,summary:`用于生成和编辑图片。`,admin:!0},{key:`system-video`,category:`models`,label:`视频`,keywords:`生成 视频`,summary:`用于生成视频。`,admin:!0},{key:`system-voice`,category:`models`,label:`语音`,keywords:`语音 输入 输出 识别 合成 双流`,summary:`转录和合成各自选择连接与模型。`,admin:!0},{key:`system-web`,category:`models`,label:`搜索与网页`,keywords:`联网 搜索 网页 提取 Hermes Tavily Exa Firecrawl Brave SearXNG`,summary:`搜索与网页提取可分别选择供应商,所有 Bot 共用。`,admin:!0},{key:`bot-projects`,category:`knowledge`,label:`项目`,keywords:`项目 成员 知识 协作`},{key:`bot-user-memory`,category:`knowledge`,label:`用户记忆`,keywords:`用户 共享 长期事实 记忆 文件 历史`},{key:`bot-memory`,category:`knowledge`,label:`记忆`,keywords:`Bot 记忆 自动学习 召回 本地`,summary:`这些默认值用于没有单独设置的 Bot。`,admin:!0},{key:`bot-retrieval`,category:`knowledge`,label:`外部检索`,keywords:`OpenViking user peer 身份模式 检索 同步`,summary:`只做可关闭的同步和语义检索。`,admin:!0},{key:`my-bots`,category:`execution`,label:`我的 Bot`,keywords:`主 Bot 总管 机器人 模板 映射 身份 角色 模型 技能 记忆 运行记录`,summary:`选择主 Bot,统一管理身份、模型、技能、记忆与权限。`,admin:!0,feature:`bot-permissions-v2`},{key:`agent-runtime`,category:`execution`,label:`执行配置`,keywords:`Agent 运行配置 上下文 压缩 阈值 推理 次数 时间 限制 临时 子任务 分派`,admin:!0},{key:`agent-skills`,category:`execution`,label:`技能库`,keywords:`技能 范围 学习 版本 启用 停用`,admin:!0},{key:`workspace-permissions`,category:`environment`,label:`权限与操作审查`,keywords:`Bot 默认 完全开放 能力 允许 询问 拒绝 授权 资源 模板`,summary:`设置默认授权方式与操作审查,Bot 可独立选择。`,admin:!0,feature:`bot-permissions-v2`},{key:`bot-permission-requests`,category:`environment`,label:`请求记录`,keywords:`Bot 权限 申请 审批 请求 记录`,summary:`处理待确认请求,并查看已处理的授权记录。`,admin:!0,feature:`bot-permissions-v2`},{key:`bot-computers`,category:`environment`,label:`运行环境`,keywords:`环境 执行位置 本机 服务器 虚拟机 浏览器 电脑 审批 传输`,admin:!0},{key:`bot-vm`,category:`environment`,label:`本地虚拟机`,keywords:`本地 虚拟机 Docker 镜像 隔离`,admin:!0,parent:`bot-computers`},{key:`account-permissions`,category:`environment`,label:`本机权限`,keywords:`授权 本机 屏幕 辅助功能 电脑名称`,summary:`屏幕和辅助功能只授给这台电脑。`,admin:!0},{key:`execution-resources`,category:`environment`,label:`工具与服务授权`,keywords:`工具 服务 授权 环境变量 API 资源`,admin:!0},{key:`system-hermes-env`,category:`environment`,label:`Hermes 环境变量`,keywords:`Hermes 环境变量 密钥 自定义 工具`,summary:`管理系统 Hermes 的变量和凭据,与虚拟机脚本授权分别保存。`,admin:!0},{key:`bot-files`,category:`environment`,label:`文件访问`,keywords:`文件 预览 下载 目录 工作目录 文件夹 权限`,admin:!0},{key:`credential-vault`,category:`environment`,label:`密码与凭据`,keywords:`密码管理 密码库 SSH 私钥 凭据 网站 Token API 公众号 access_token`},{key:`system-network`,category:`environment`,label:`模型网络`,keywords:`代理 SOCKS HTTP 模型 登录`,summary:`用于模型登录、拉列表和发请求。`,admin:!0},{key:`system-hosts`,category:`environment`,label:`访问地址`,keywords:`外网 访问 地址 域名 IP`,summary:`允许哪些域名和 IP 访问这台 Yaovi。`,admin:!0},{key:`system-overview`,category:`system`,label:`状态与诊断`,keywords:`系统概览 状态 健康 连接 诊断`,admin:!0},{key:`system-push`,category:`system`,label:`推送服务`,keywords:`消息推送 通知 iOS Android APNs FCM`,admin:!0},{key:`system-update`,category:`system`,label:`升级`,keywords:`升级 更新 版本`,summary:`先备份,再从新的安装包目录升级。`,admin:!0},{key:`system-backup`,category:`system`,label:`备份`,keywords:`备份 恢复`,summary:`备份包里有凭据和浏览器资料。`,admin:!0},{key:`desktop-mode`,category:`system`,label:`运行模式`,keywords:`客户端 服务器 运行模式`,desktop:!0}];function EC(e){return TC.filter(t=>(!t.admin||e.isAdmin)&&(!t.desktop||e.desktop)&&(!t.feature||e.features?.includes(t.feature)))}var DC=[`onKeydownCapture`],OC={class:`settings-center__body`},kC={class:`settings-sidebar`,"aria-label":`设置分类`},AC={class:`settings-sidebar__mobilebar`},jC=[`disabled`],MC={class:`settings-search`},NC={key:0,class:`settings-category-nav`},PC={class:`settings-category`},FC=[`aria-current`,`disabled`,`onClick`],IC={key:1,class:`settings-search-results`,"aria-label":`设置搜索结果`},LC=[`disabled`,`onClick`],RC={key:0,class:`settings-search-empty`},zC={class:`settings-content__header`},BC=[`aria-label`,`disabled`],VC={class:`settings-content__heading`},HC={class:`settings-scope`},UC=[`disabled`],WC=[`aria-label`],GC={key:0,class:`settings-subpage-title`},KC=[`disabled`],qC={key:8,class:`settings-section-stack`},JC={key:10,class:`settings-section-stack`},YC={class:`settings-inline-nav`},XC=[`disabled`],ZC={key:17,class:`settings-section-stack`},QC={key:19,class:`appearance-panel`,"aria-label":`外观`},$C={class:`theme-options`,role:`radiogroup`,"aria-label":`界面主题`},ew=[`aria-checked`,`onClick`],tw=[`src`],nw={class:`appearance-note`},rw={key:0,class:`settings-content__footer`},iw={role:`status`},aw=[`disabled`],ow=[`disabled`],sw=V(E({__name:`SettingsCenterDialog`,props:{open:{type:Boolean},initialPage:{},features:{},targetBotId:{},userName:{default:``},userAvatar:{default:``},pairingUserName:{default:``},theme:{default:`light`},themePreference:{default:`system`},insecureTransport:{type:Boolean,default:!1},isAdmin:{type:Boolean,default:!1},upstreamReady:{type:Boolean,default:!1},upstreamError:{default:``}},emits:[`close`,`logout`,`set-theme`,`bot-settings-changed`],setup(e,{emit:t}){let n=te(()=>Qe(()=>import(`./BotSettingsPanel-CEH3KSAO.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12]))),r=te(()=>Qe(()=>import(`./BotControlSettingsPanel-DJF4oA6g.js`),__vite__mapDeps([13,1,2,3,4,5,6,7,8,9,10,11,14]))),i=e,c=t,l=O(),m=O(),h=O(),_=O(`account-profile`),v=O(`account-profile`),b=O(!1),x=O(!1),C=O(!1),E=O(!1),A=g({}),j=g({}),M=g({}),N=O(``),P=O(0),I=!!(window.yaoviDesktop?.modeState&&window.yaoviDesktop?.switchMode),B=H(()=>EC({isAdmin:i.isAdmin,desktop:I,features:i.features})),V=H(()=>B.value.find(e=>e.key===_.value)??B.value[0]);H(()=>V.value.parent??V.value.key);let W=H(()=>wC.filter(e=>B.value.some(t=>t.category===e.key))),ee=H(()=>wC.find(e=>e.key===V.value.category)),G=H(()=>{let e=N.value.trim().toLocaleLowerCase();return e?B.value.filter(t=>(t.label+` `+t.keywords).toLocaleLowerCase().includes(e)):[]}),K=H(()=>!!A[_.value]),ne=H(()=>x.value||C.value),re=H(()=>[`user-profile`,`system-models`,`system-auto`,`system-visibility`,`system-web`,`system-hermes-env`,`bot-memory`,`agent-runtime`,`agent-skills`,`bot-files`].includes(_.value)),ie=H(()=>_.value===`system-models`?`defaults`:_.value===`system-auto`?`auto`:_.value===`system-visibility`?`visibility`:_.value===`system-auxiliary`?`auxiliary`:_.value===`system-image`?`image`:_.value===`system-video`?`video`:_.value===`system-voice`?`voice`:`connections`),q=H(()=>_.value+`:`+P.value),ae=H(()=>i.pairingUserName||i.userName||`当前账号`),J=H(()=>_.value===`user-profile`?`全局用户资料`:_.value===`appearance`||_.value===`chat-appearance`?`当前设备 · 自动保存`:_.value===`credential-vault`?`当前账号:`+ae.value:_.value===`bot-projects`?`项目范围`:_.value===`bot-user-memory`?`用户共享`:[`bot-memory`,`agent-runtime`,`agent-skills`].includes(_.value)?`系统默认 / 指定 Bot`:[`system-models`,`system-auto`,`system-visibility`,`system-auxiliary`,`system-image`,`system-video`,`system-voice`].includes(_.value)?`系统默认 · 仅管理员`:V.value.admin?`服务器设置 · 仅管理员`:`当前服务器`);function oe(e){A[_.value]=e}function se(e,t){j[e]=t,oe(Object.values(j).some(Boolean))}function ce(e,t){M[e]=t,C.value=Object.values(M).some(Boolean)}function le(){return!K.value||window.confirm(`放弃当前页面未保存的更改?`)}function ue(){E.value=!1,C.value=!1;for(let e of Object.keys(j))delete j[e];for(let e of Object.keys(M))delete M[e]}function de(e){if(!(!B.value.some(t=>t.key===e)||ne.value)){if(e!==_.value){if(!le())return;A[_.value]=!1,_.value=e,P.value=0,ue()}v.value=e,b.value=!0,N.value=``,o(()=>m.value?.focus())}}function fe(){if(!(ne.value||!K.value)){if(h.value?.reset){h.value.reset();return}A[_.value]=!1,P.value++,ue()}}function pe(){ne.value||!le()||(A[_.value]=!1,c(`close`))}function me(){if(V.value.parent){de(V.value.parent);return}ne.value||!le()||(K.value&&fe(),b.value=!1,o(()=>l.value?.querySelector(`.settings-nav-item[aria-current="page"]`)?.focus()))}function he(){window.innerWidth<960&&b.value?me():pe()}function _e(e){let t=[...l.value?.querySelectorAll(`button:not(:disabled),input:not(:disabled),select:not(:disabled),textarea:not(:disabled),a[href],[tabindex="0"]`)??[]].filter(e=>e.tabIndex>=0&&e.getClientRects().length),n=t[0],r=t.at(-1);!n||!r||(e.shiftKey&&(document.activeElement===n||document.activeElement===l.value)?(e.preventDefault(),r.focus()):!e.shiftKey&&document.activeElement===r&&(e.preventDefault(),n.focus()))}return f(()=>[i.open,i.initialPage,i.isAdmin],([e,t])=>{if(!e){x.value=!1;return}let n=t&&t!==`account-profile`?t:v.value;_.value=B.value.some(e=>e.key===n)?n:`account-profile`,N.value=``,P.value=0,ue();for(let e of Object.keys(A))A[e]=!1;b.value=!!(t&&t!==`account-profile`),o(()=>l.value?.focus())},{immediate:!0}),(t,i)=>(u(),k(L,{to:`body`},[U(ge,{name:`settings-center-fade`},{default:S(()=>[e.open?(u(),F(`div`,{key:0,class:`settings-center-layer`,role:`presentation`,onMousedown:X(pe,[`self`])},[D(`section`,{ref_key:`dialog`,ref:l,class:y([`settings-center`,{"settings-center--mobile-detail":b.value}]),role:`dialog`,"aria-modal":`true`,"aria-label":`设置`,tabindex:`-1`,onKeydownCapture:Ye(X(he,[`prevent`,`stop`]),[`esc`]),onKeydown:Ye(_e,[`tab`])},[D(`div`,OC,[D(`aside`,kC,[D(`div`,AC,[i[34]||=D(`h2`,null,`设置`,-1),D(`button`,{class:`settings-mobile-close`,type:`button`,"aria-label":`关闭设置`,disabled:ne.value,onClick:pe},[U(Z,{name:`close`,size:20})],8,jC)]),D(`label`,MC,[U(Z,{name:`search`,size:16}),d(D(`input`,{"onUpdate:modelValue":i[0]||=e=>N.value=e,type:`search`,"aria-label":`搜索设置`,placeholder:`搜索设置`},null,512),[[Y,N.value]])]),N.value.trim()?(u(),F(`nav`,IC,[(u(!0),F(T,null,p(G.value,e=>(u(),F(`button`,{key:e.key,type:`button`,disabled:ne.value,onClick:t=>de(e.key)},[D(`strong`,null,s(e.label),1),D(`small`,null,s(R(wC).find(t=>t.key===e.category)?.label)+` → `+s(e.label),1)],8,LC))),128)),G.value.length?z(``,!0):(u(),F(`p`,RC,`没有匹配的设置`))])):(u(),F(`nav`,NC,[(u(!0),F(T,null,p(W.value,e=>(u(),F(`section`,{key:e.key},[D(`div`,PC,s(e.label),1),(u(!0),F(T,null,p(B.value.filter(t=>t.category===e.key),e=>(u(),F(`button`,{key:e.key,type:`button`,class:`settings-nav-item`,"aria-current":_.value===e.key?`page`:void 0,disabled:ne.value,onClick:t=>de(e.key)},s(e.label),9,FC))),128))]))),128))])),i[35]||=D(`footer`,{class:`settings-sidebar__footer`},`Yaovi`,-1)]),D(`main`,{class:y([`settings-content`,{"settings-content--with-footer":re.value}])},[D(`header`,zC,[D(`button`,{class:`mobile-back`,type:`button`,"aria-label":V.value.parent?`返回`+B.value.find(e=>e.key===V.value.parent)?.label:`返回设置分类`,disabled:ne.value,onClick:me},[U(Z,{name:`chevron-left`,size:20})],8,BC),D(`div`,VC,[D(`h3`,{ref_key:`contentTitle`,ref:m,tabindex:`-1`},s(V.value.label),513),D(`p`,null,s(V.value.summary||ee.value.description),1)]),D(`span`,HC,s(J.value),1),D(`button`,{class:`settings-center__close`,type:`button`,"aria-label":`关闭设置`,disabled:ne.value,onClick:pe},[U(Z,{name:`close`,size:20})],8,UC)]),(u(),F(`div`,{key:q.value,id:`settings-current-panel`,class:`settings-content__scroll`,role:`tabpanel`,"aria-label":V.value.label},[V.value.parent?(u(),F(`div`,GC,[D(`button`,{type:`button`,disabled:ne.value,onClick:i[1]||=e=>de(V.value.parent)},[U(Z,{name:`chevron-left`,size:16}),w(`返回`+s(B.value.find(e=>e.key===V.value.parent)?.label),1)],8,KC),D(`h4`,null,s(V.value.label),1)])):z(``,!0),[`my-bots`,`workspace-permissions`,`bot-permission-requests`].includes(_.value)&&e.isAdmin&&e.features?.includes(`bot-permissions-v2`)?(u(),k(R(r),{key:1,"target-bot-id":e.targetBotId,onNavigate:de,page:_.value===`my-bots`?`bots`:_.value===`workspace-permissions`?`permissions`:`requests`,onChanged:i[2]||=e=>c(`bot-settings-changed`),onDirtyChange:oe,onBusyChange:i[3]||=e=>C.value=e},null,8,[`target-bot-id`,`page`])):_.value===`user-profile`&&e.isAdmin?(u(),k(Mx,{key:2,ref_key:`activeEditor`,ref:h,"form-id":`settings-active-form`,onDirtyChange:oe,onCanSaveChange:i[4]||=e=>E.value=e,onBusyChange:i[5]||=e=>C.value=e},null,512)):_.value===`system-web`&&e.isAdmin?(u(),k(sS,{key:3,ref_key:`activeEditor`,ref:h,"form-id":`settings-active-form`,onDirtyChange:oe,onCanSaveChange:i[6]||=e=>E.value=e,onBusyChange:i[7]||=e=>C.value=e},null,512)):_.value===`system-hermes-env`&&e.isAdmin?(u(),k(TS,{key:4,ref_key:`activeEditor`,ref:h,"form-id":`settings-active-form`,onDirtyChange:oe,onCanSaveChange:i[8]||=e=>E.value=e,onBusyChange:i[9]||=e=>C.value=e},null,512)):ee.value.key===`models`&&e.isAdmin?(u(),k(Jm,{key:5,ref_key:`activeEditor`,ref:h,page:ie.value,"form-id":`settings-active-form`,onManageNetwork:i[10]||=e=>de(`system-network`),onDirtyChange:oe,onCanSaveChange:i[11]||=e=>E.value=e,onBusyChange:i[12]||=e=>C.value=e},null,8,[`page`])):[`bot-memory`,`agent-runtime`,`agent-skills`].includes(_.value)&&e.isAdmin?(u(),k(hl,{key:6,ref_key:`activeEditor`,ref:h,section:_.value===`bot-memory`?`memory`:_.value===`agent-skills`?`skills`:`execution`,"form-id":`settings-active-form`,embedded:``,onDirtyChange:oe,onCanSaveChange:i[13]||=e=>E.value=e,onBusyChange:i[14]||=e=>C.value=e},null,8,[`section`])):_.value===`bot-retrieval`&&e.isAdmin?(u(),k(Js,{key:7,open:``,onDirtyChange:oe,onBusyChange:i[15]||=e=>C.value=e})):_.value===`bot-vm`?(u(),F(`section`,qC,[U(R(n),{page:`vm`,"is-admin":e.isAdmin,onChanged:i[16]||=e=>c(`bot-settings-changed`),onDirtyChange:oe},null,8,[`is-admin`]),e.isAdmin?(u(),k(Yp,{key:0,section:`proxy`,onDirtyChange:i[17]||=e=>se(`proxy`,e),onBusyChange:i[18]||=e=>ce(`proxy`,e)})):z(``,!0)])):[`bot-projects`,`bot-user-memory`].includes(_.value)?(u(),k(R(n),{key:9,page:_.value===`bot-projects`?`projects`:`user`,"is-admin":e.isAdmin,onChanged:i[19]||=e=>c(`bot-settings-changed`),onDirtyChange:oe},null,8,[`page`,`is-admin`])):_.value===`bot-computers`&&e.isAdmin?(u(),F(`section`,JC,[D(`div`,YC,[D(`button`,{type:`button`,disabled:ne.value,onClick:i[20]||=e=>de(`bot-vm`)},[U(Z,{name:`monitor`,size:18}),i[36]||=w(`管理本地虚拟机`,-1),U(Z,{name:`chevron-left`,size:16})],8,XC)]),U(Yp,{section:`environment`,onDirtyChange:i[21]||=e=>se(`environment`,e),onBusyChange:i[22]||=e=>ce(`environment`,e)}),U(Uf,{section:`environment`,onDirtyChange:i[23]||=e=>se(`host-tools`,e),onBusyChange:i[24]||=e=>ce(`host-tools`,e)})])):_.value===`execution-resources`&&e.isAdmin?(u(),k(Yp,{key:11,section:`resources`,onDirtyChange:oe,onBusyChange:i[25]||=e=>C.value=e})):_.value===`bot-files`&&e.isAdmin?(u(),k(jd,{key:12,ref_key:`activeEditor`,ref:h,embedded:``,"form-id":`settings-active-form`,onDirtyChange:oe,onCanSaveChange:i[26]||=e=>E.value=e,onBusyChange:i[27]||=e=>C.value=e},null,512)):_.value===`system-network`&&e.isAdmin?(u(),k(CC,{key:13,onDirtyChange:i[28]||=e=>se(`model-network`,e),onBusyChange:i[29]||=e=>ce(`model-network`,e)})):_.value===`system-hosts`&&e.isAdmin?(u(),k(IS,{key:14,onDirtyChange:oe})):_.value===`credential-vault`?(u(),k(Sb,{key:15})):_.value===`account-profile`?(u(),k(nx,{key:16,section:`profile`,active:!0,onDirtyChange:oe,onLogout:i[30]||=e=>c(`logout`)})):_.value===`account-permissions`&&e.isAdmin?(u(),F(`section`,ZC,[U($d),U(Uf,{section:`devices`,onDirtyChange:oe,onBusyChange:i[31]||=e=>C.value=e})])):_.value===`desktop-mode`&&R(I)?(u(),k(Kx,{key:18})):_.value===`appearance`?(u(),F(`section`,QC,[i[39]||=D(`h4`,null,`界面主题`,-1),D(`div`,$C,[(u(),F(T,null,p([[`system`,`跟随系统`],[`light`,`浅色`],[`dark`,`深色`]],t=>D(`button`,{key:t[0],type:`button`,role:`radio`,"aria-checked":e.themePreference===t[0],class:y({active:e.themePreference===t[0]}),onClick:e=>c(`set-theme`,t[0])},[D(`img`,{src:`/setting-previews/${t[0]}.png`,alt:``,width:`480`,height:`300`},null,8,tw),D(`strong`,null,s(t[1]),1),(u(),k(a(e.themePreference===t[0]?R(Ct):R(jt)),{class:`theme-choice-mark`,"aria-hidden":`true`}))],10,ew)),64))]),D(`button`,{type:`button`,class:`bubble-settings-entry`,onClick:i[32]||=e=>de(`chat-appearance`)},[U(Z,{name:`chat`,size:20}),i[37]||=D(`span`,null,[D(`strong`,null,`聊天气泡`),D(`small`,null,`预设、背景颜色与样式`)],-1),U(Z,{name:`chevron-left`,size:18})]),D(`p`,nw,[U(Z,{name:`info`,size:16}),i[38]||=w(`更改自动保存到当前设备。`,-1)])])):_.value===`chat-appearance`?(u(),k(vv,{key:20,theme:e.theme},null,8,[`theme`])):_.value===`system-overview`&&e.isAdmin?(u(),k(US,{key:21,active:!0,"upstream-ready":e.upstreamReady,"upstream-error":e.upstreamError,onNavigate:de},null,8,[`upstream-ready`,`upstream-error`])):_.value===`system-push`&&e.isAdmin?(u(),k(Yh,{key:22,section:`push`,active:!0,onDirtyChange:oe})):_.value===`system-update`&&e.isAdmin?(u(),k(qS,{key:23,section:`upgrade`,onLockChange:i[33]||=e=>x.value=e})):_.value===`system-backup`&&e.isAdmin?(u(),k(qS,{key:24,section:`backup`})):z(``,!0)],8,WC)),re.value?(u(),F(`footer`,rw,[D(`p`,iw,s(C.value?`正在处理…`:K.value?`有未保存的更改`:`仅保存当前页面的更改`),1),D(`div`,null,[D(`button`,{type:`button`,class:`settings-footer__cancel`,disabled:ne.value||!K.value,onClick:fe},`取消更改`,8,aw),D(`button`,{type:`submit`,class:`settings-footer__save`,form:`settings-active-form`,disabled:ne.value||!E.value},s(C.value?`正在保存…`:`保存更改`),9,ow)])])):z(``,!0)],2)])],42,DC)],32)):z(``,!0)]),_:1})]))}}),[[`__scopeId`,`data-v-aaf61927`]]);function cw(e){let t=`.`,n=`__`,r=`--`,i;if(e){let i=e.blockPrefix;i&&(t=i),i=e.elementPrefix,i&&(n=i),i=e.modifierPrefix,i&&(r=i)}let a={install(e){i=e.c;let t=e.context;t.bem={},t.bem.b=null,t.bem.els=null}};function o(e){let n,r;return{before(e){n=e.bem.b,r=e.bem.els,e.bem.els=null},after(e){e.bem.b=n,e.bem.els=r},$({context:n,props:r}){return e=typeof e==`string`?e:e({context:n,props:r}),n.bem.b=e,`${r?.bPrefix||t}${n.bem.b}`}}}function s(e){let r;return{before(e){r=e.bem.els},after(e){e.bem.els=r},$({context:r,props:i}){return e=typeof e==`string`?e:e({context:r,props:i}),r.bem.els=e.split(`,`).map(e=>e.trim()),r.bem.els.map(e=>`${i?.bPrefix||t}${r.bem.b}${n}${e}`).join(`, `)}}}function c(e){return{$({context:i,props:a}){e=typeof e==`string`?e:e({context:i,props:a});let o=e.split(`,`).map(e=>e.trim());function s(e){return o.map(o=>`&${a?.bPrefix||t}${i.bem.b}${e===void 0?``:`${n}${e}`}${r}${o}`).join(`, `)}let c=i.bem.els;return c===null?s():s(c[0])}}}function l(e){return{$({context:i,props:a}){e=typeof e==`string`?e:e({context:i,props:a});let o=i.bem.els;return`&:not(${a?.bPrefix||t}${i.bem.b}${o!==null&&o.length>0?`${n}${o[0]}`:``}${r}${e})`}}}return Object.assign(a,{cB:((...e)=>i(o(e[0]),e[1],e[2])),cE:((...e)=>i(s(e[0]),e[1],e[2])),cM:((...e)=>i(c(e[0]),e[1],e[2])),cNotM:((...e)=>i(l(e[0]),e[1],e[2]))}),a}function lw(e){let t=0;for(let n=0;n<e.length;++n)e[n]===`&`&&++t;return t}var uw=/\s*,(?![^(]*\))\s*/g,dw=/\s+/g;function fw(e,t){let n=[];return t.split(uw).forEach(t=>{let r=lw(t);if(!r){e.forEach(e=>{n.push((e&&e+` `)+t)});return}if(r===1){e.forEach(e=>{n.push(t.replace(`&`,e))});return}let i=[t];for(;r--;){let t=[];i.forEach(n=>{e.forEach(e=>{t.push(n.replace(`&`,e))})}),i=t}i.forEach(e=>n.push(e))}),n}function pw(e,t){let n=[];return t.split(uw).forEach(t=>{e.forEach(e=>{n.push((e&&e+` `)+t)})}),n}function mw(e){let t=[``];return e.forEach(e=>{e&&=e.trim(),e&&(t=e.includes(`&`)?fw(t,e):pw(t,e))}),t.join(`, `).replace(dw,` `)}function hw(e){if(!e)return;let t=e.parentElement;t&&t.removeChild(e)}function gw(e,t){return(t??document.head).querySelector(`style[cssr-id="${e}"]`)}function _w(e){let t=document.createElement(`style`);return t.setAttribute(`cssr-id`,e),t}function vw(e){return e?/^\s*@(s|m)/.test(e):!1}var yw=/[A-Z]/g;function bw(e){return e.replace(yw,e=>`-`+e.toLowerCase())}function xw(e,t=` `){return typeof e==`object`&&e?` {
|
|
20
20
|
`+Object.entries(e).map(e=>t+` ${bw(e[0])}: ${e[1]};`).join(`
|
|
21
21
|
`)+`
|
|
22
22
|
`+t+`}`:`: ${e};`}function Sw(e,t,n){return typeof e==`function`?e({context:t.context,props:n}):e}function Cw(e,t,n,r){if(!t)return``;let i=Sw(t,n,r);if(!i)return``;if(typeof i==`string`)return`${e} {\n${i}\n}`;let a=Object.keys(i);if(a.length===0)return n.config.keepEmptyBlock?e+` {
|
|
@@ -211,7 +211,7 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho
|
|
|
211
211
|
right: 0;
|
|
212
212
|
opacity: 0;
|
|
213
213
|
}
|
|
214
|
-
`)]),IA=[`aria-valuenow`,`role`],LA={...rA.props,processing:Boolean,type:{type:String,default:`line`},gapDegree:Number,gapOffsetDegree:Number,status:{type:String,default:`default`},railColor:[String,Array],railStyle:[String,Array],color:[String,Array,Object],viewBoxWidth:{type:Number,default:100},strokeWidth:{type:Number,default:7},percentage:[Number,Array],unit:{type:String,default:`%`},showIndicator:{type:Boolean,default:!0},indicatorPosition:{type:String,default:`outside`},indicatorPlacement:{type:String,default:`outside`},indicatorTextColor:String,circleGap:{type:Number,default:1},height:Number,borderRadius:[String,Number],fillBorderRadius:[String,Number],offsetDegree:Number},RA=E({name:`Progress`,props:LA,setup(e){let t=H(()=>e.indicatorPlacement||e.indicatorPosition),n=H(()=>{if(e.gapDegree||e.gapDegree===0)return e.gapDegree;if(e.type===`dashboard`)return 75}),{mergedClsPrefixRef:r,inlineThemeDisabled:i}=ZO(e),a=rA(`Progress`,`-progress`,FA,gA,e,r),o=H(()=>{let{status:t}=e,{common:{cubicBezierEaseInOut:n},self:{fontSize:r,fontSizeCircle:i,railColor:o,railHeight:s,iconSizeCircle:c,iconSizeLine:l,textColorCircle:u,textColorLineInner:d,textColorLineOuter:f,lineBgProcessing:p,fontWeightCircle:m,[Jw(`iconColor`,t)]:h,[Jw(`fillColor`,t)]:g}}=a.value;return{"--n-bezier":n,"--n-fill-color":g,"--n-font-size":r,"--n-font-size-circle":i,"--n-font-weight-circle":m,"--n-icon-color":h,"--n-icon-size-circle":c,"--n-icon-size-line":l,"--n-line-bg-processing":p,"--n-rail-color":o,"--n-rail-height":s,"--n-text-color-circle":u,"--n-text-color-line-inner":d,"--n-text-color-line-outer":f}}),s=i?nA(`progress`,H(()=>e.status[0]),o,e):void 0;return{mergedClsPrefix:r,mergedIndicatorPlacement:t,gapDeg:n,cssVars:i?void 0:o,themeClass:s?.themeClass,onRender:s?.onRender}},render(){let{type:e,cssVars:t,indicatorTextColor:n,showIndicator:r,status:i,railColor:a,railStyle:o,color:s,percentage:c,viewBoxWidth:d,strokeWidth:f,mergedIndicatorPlacement:p,unit:m,borderRadius:h,fillBorderRadius:g,height:_,processing:v,circleGap:y,mergedClsPrefix:b,gapDeg:x,gapOffsetDegree:S,themeClass:C,$slots:w,onRender:E}=this;return E?.(),u(),F(`div`,{class:hk([C,`${b}-progress`,`${b}-progress--${e}`,`${b}-progress--${i}`]),style:l(t),"aria-valuemax":100,"aria-valuemin":0,"aria-valuenow":c,role:e===`circle`||e===`line`||e===`dashboard`?`progressbar`:`none`},[e===`circle`||e===`dashboard`?(u(),k(wA,{key:0,clsPrefix:b,status:i,showIndicator:r,indicatorTextColor:n,railColor:a,fillColor:s,railStyle:o,offsetDegree:this.offsetDegree,percentage:c,viewBoxWidth:d,strokeWidth:f,gapDegree:x===void 0?e===`dashboard`?75:0:x,gapOffsetDegree:S,unit:m},mk(w),1032,[`clsPrefix`,`status`,`showIndicator`,`indicatorTextColor`,`railColor`,`fillColor`,`railStyle`,`offsetDegree`,`percentage`,`viewBoxWidth`,`strokeWidth`,`gapDegree`,`gapOffsetDegree`,`unit`])):(u(),F(T,{key:1},[e===`line`?(u(),k(EA,{key:0,clsPrefix:b,status:i,showIndicator:r,indicatorTextColor:n,railColor:a,fillColor:s,railStyle:o,percentage:c,processing:v,indicatorPlacement:p,unit:m,fillBorderRadius:g,railBorderRadius:h,height:_},mk(w),1032,[`clsPrefix`,`status`,`showIndicator`,`indicatorTextColor`,`railColor`,`fillColor`,`railStyle`,`percentage`,`processing`,`indicatorPlacement`,`unit`,`fillBorderRadius`,`railBorderRadius`,`height`])):(u(),F(T,{key:1},[e===`multiple-circle`?(u(),k(PA,{key:0,clsPrefix:b,strokeWidth:f,railColor:a,fillColor:s,railStyle:o,viewBoxWidth:d,percentage:c,showIndicator:r,circleGap:y},mk(w),1032,[`clsPrefix`,`strokeWidth`,`railColor`,`fillColor`,`railStyle`,`viewBoxWidth`,`percentage`,`showIndicator`,`circleGap`])):fk(()=>null)],64))],64))],14,IA)}}),zA=[`title`],BA=[`title`,`aria-label`,`aria-busy`,`disabled`],VA=[`aria-label`,`aria-valuenow`],HA={viewBox:`0 0 24 24`,"aria-hidden":`true`},UA=[`stroke-dasharray`],WA={class:`desktop-update-entry__label`,"aria-live":`polite`},GA={key:2,class:`desktop-update-dot`,"aria-hidden":`true`},KA={key:0,class:`desktop-update-error`,role:`alert`},qA=V(E({__name:`DesktopUpdateEntry`,props:{state:{},pending:{type:Boolean},error:{}},emits:[`activate`],setup(e,{emit:t}){let n=e,r=t,i=H(()=>!!(n.pending||[`checking`,`downloading`,`verifying`,`preparing`,`installing`].includes(n.state?.phase??``))),a=H(()=>n.state?.phase===`downloading`&&n.state.total>0?Math.max(0,Math.min(100,Math.floor(n.state.received/n.state.total*100))):void 0),o=H(()=>{let e=n.state;return e?.phase===`ready`?e.installMode===`restart`?`重新启动`:`打开安装包`:e?.phase===`installing`?`正在重启…`:e?.phase===`downloading`?a.value===void 0?`正在下载…`:`正在下载 · ${a.value}%`:[`verifying`,`preparing`].includes(e?.phase??``)?`正在准备…`:e?.phase===`checking`||n.pending?`正在检测…`:e?.retryable===!1?`更新未完成`:e?.available?`可更新`:e?.phase===`failed`||n.error?`重试更新`:e?.phase===`checked`?`已是最新版本`:`检测更新`}),c=H(()=>n.error||n.state?.error||(n.state?.phase===`ready`?n.state.installMode===`restart`?`更新已下载,点击重新启动完成安装`:`更新已下载,点击打开安装包`:i.value?o.value:n.state?.available?`App ${n.state.latestVersion??``} 可更新,点击下载`:n.state?.message));return(t,n)=>(u(),F(`div`,{class:y([`desktop-update-entry`,{"desktop-update-entry--ready":e.state?.phase===`ready`}]),title:c.value},[D(`button`,{type:`button`,title:c.value,"aria-label":o.value,"aria-busy":i.value,disabled:i.value||e.state?.retryable===!1,onClick:n[0]||=e=>r(`activate`)},[i.value?(u(),F(`span`,{key:0,class:y([`desktop-update-ring`,{"desktop-update-ring--spinning":a.value===void 0}]),role:`progressbar`,"aria-label":o.value,"aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":a.value},[(u(),F(`svg`,HA,[n[1]||=D(`circle`,{class:`desktop-update-ring__track`,cx:`12`,cy:`12`,r:`9`},null,-1),D(`circle`,{class:`desktop-update-ring__value`,cx:`12`,cy:`12`,r:`9`,pathLength:`100`,"stroke-dasharray":`${a.value??25} 100`},null,8,UA)]))],10,VA)):(u(),k(Z,{key:1,name:e.state?.phase===`ready`?e.state.installMode===`restart`?`refresh`:`download`:e.state?.retryable===!1?`alert`:e.state?.available?`download`:`refresh`,size:20},null,8,[`name`])),D(`span`,WA,s(o.value),1),(e.state?.available||e.state?.phase===`ready`)&&!i.value?(u(),F(`span`,GA)):z(``,!0)],8,BA),e.error||e.state?.error?(u(),F(`p`,KA,s(e.error||e.state?.error),1)):z(``,!0)],10,zA))}}),[[`__scopeId`,`data-v-4ba891bf`]]),JA=[`aria-label`,`title`],YA=V(E({__name:`ColumnResizeHandle`,props:{label:{}},emits:[`drag`,`reset`],setup(e,{emit:t}){let n=t;return(t,r)=>(u(),F(`div`,{class:`column-resize`,role:`separator`,"aria-orientation":`vertical`,"aria-label":e.label,title:`${e.label}(双击恢复默认)`,onPointerdown:r[0]||=e=>n(`drag`,e),onDblclick:r[1]||=X(e=>n(`reset`),[`prevent`])},null,40,JA))}}),[[`__scopeId`,`data-v-2dca694d`]]);function XA(){let e=window.yaoviDesktop,t=!!(e?.updateState&&e?.updateAction),n=O(),r=O(``),a=O(!1),o=H(()=>!!(n.value?.available||[`downloading`,`verifying`,`preparing`,`ready`,`installing`].includes(n.value?.phase??``)||n.value?.phase===`failed`&&n.value.latestVersion)),s=!1,c=!1,l,u;async function d(){if(!(!t||s||c)){c=!0;try{let t=await e.updateState();s||(n.value=t)}catch{}finally{c=!1}}}async function f(i){if(!t||s||a.value)return;let o=n.value,c=i??(o?.phase===`ready`?o.installMode===`restart`?`install`:`open`:o?.available?`download`:`check`);if(!(!i&&(o?.retryable===!1||[`checking`,`downloading`,`verifying`,`preparing`,`installing`].includes(o?.phase??``)))){a.value=!0,r.value=``;try{let t=e.updateAction(c);d();let r=await t;!s&&r&&(n.value=r)}catch(e){s||(r.value=e instanceof Error?e.message:`更新未完成,请重试`)}finally{a.value=!1}}}return m(()=>{t&&(d(),l=setInterval(()=>void d(),500),u=e?.onUpdateRequested?.(()=>{d()}))}),i(()=>{s=!0,clearInterval(l),u?.()}),{supported:t,state:n,error:r,pending:a,visible:o,refresh:d,run:f}}function ZA(e,t,n){return n<t?t:Math.min(n,Math.max(t,Math.round(e)))}function QA(e,t){try{let n=localStorage.getItem(e);if(n==null)return t.default;let r=Number(n);return Number.isFinite(r)?ZA(r,t.min,t.max):t.default}catch{return t.default}}function $A(e,t){let n=O(QA(e,t)),r=!1,a=0,o=0,s=1,c,l,u=0;function d(e,n){let r=n==null?t.max:Math.min(t.max,n);return ZA(e,t.min,r)}function f(t,r){n.value=d(t,r);try{localStorage.setItem(e,String(n.value))}catch{}}function p(e){f(t.default,e)}function m(){if(r){if(r=!1,document.body.classList.remove(`yaovi-column-resizing`),document.removeEventListener(`pointermove`,h),document.removeEventListener(`pointerup`,g),document.removeEventListener(`pointercancel`,g),l)try{l.releasePointerCapture(u)}catch{}l=void 0,f(n.value,c?.()),c=void 0}}function h(e){r&&(n.value=d(o+s*(e.clientX-a),c?.()))}function g(){m()}function _(e,t){if(e.button===0){if(e.preventDefault(),r=!0,s=t?.direction??1,c=t?.maxAvailable,a=e.clientX,o=n.value,u=e.pointerId,l=e.currentTarget instanceof HTMLElement?e.currentTarget:void 0,l)try{l.setPointerCapture(u)}catch{}document.body.classList.add(`yaovi-column-resizing`),document.addEventListener(`pointermove`,h),document.addEventListener(`pointerup`,g),document.addEventListener(`pointercancel`,g)}}return i(m),{width:n,bounds:t,persist:f,reset:p,beginDrag:_}}var ej=[`data-desktop-update-inline`,`inert`],tj=[`inert`],nj=[`aria-label`],rj=[`inert`],ij={class:`bot-list-header`},aj=[`aria-label`],oj=[`aria-label`,`aria-expanded`],sj={key:0,class:`unread-entry__count`,"aria-hidden":`true`},cj=[`aria-expanded`],lj=[`aria-expanded`],uj={class:`sidebar-context__body`},dj={class:`sidebar-footer sidebar-footer--apps`},fj={class:`sidebar-account-switcher`},pj=[`aria-label`,`aria-expanded`],mj=[`aria-hidden`,`inert`],hj={class:`mobile-drawer__header`},gj={class:`mobile-drawer__actions`},_j=[`aria-expanded`],vj={class:`sidebar-context__body`},yj={class:`sidebar-footer mobile-drawer__footer sidebar-footer--apps`},bj={class:`sidebar-account-switcher`},xj=[`aria-label`,`aria-expanded`],Sj=[`inert`],Cj={class:`workspace-inspector`},wj={class:`workspace-inspector__close`},Tj=[`aria-label`,`title`],Ej=[`onKeydown`],Dj=[`disabled`,`aria-busy`],Oj=[`disabled`,`aria-busy`],kj={key:3,class:`update-menu-error`,role:`alert`},Aj={key:4,class:`update-menu-error`,role:`alert`},jj=[`onKeydown`],Mj=`yaovi:workspace-sidebar-width-conversations-v2`,Nj=`yaovi:workspace-inspector-width`,Pj=320,Fj=6,Ij=`yaovi:sidebar-search`,Lj=`yaovi:sidebar-search-close`,Rj=V(E({__name:`WorkspaceShell`,props:{serverName:{default:``},userName:{default:``},userAvatar:{default:``},pairingUserName:{default:``},theme:{default:`light`},themePreference:{default:`system`},insecureTransport:{type:Boolean,default:!1},sidebarFocusMode:{type:Boolean,default:!1},inspectorOpen:{type:Boolean,default:!1},inspectorCloseLabel:{default:`关闭预览`},isAdmin:{type:Boolean,default:!1},features:{},upstreamReady:{type:Boolean,default:!1},upstreamError:{default:``}},emits:[`logout`,`toggleTheme`,`setTheme`,`closeInspector`,`createAgent`,`createGroup`,`botSettingsChanged`],setup(e,{expose:t,emit:n}){let r=te(()=>Qe(()=>import(`./AboutDialog-BW25cB-W.js`),__vite__mapDeps([15,1,3,4,5,7,8,16]))),a=te(()=>Qe(()=>import(`./DevicePairingDialog-orOS4xqu.js`),__vite__mapDeps([17,4,1,3,5,7,8,18]))),c=te(()=>Qe(()=>import(`./UpdateCheckDialog-DYiM4xBv.js`),__vite__mapDeps([19,1,3,4,5,7,8,20]))),d=te(()=>Qe(()=>import(`./BotPluginsDialog-DjwFw-lt.js`),__vite__mapDeps([21,1,3,4,5,7,8,6,9,22]))),p={default:268,min:200,max:480},h={default:390,min:310,max:560},g=e,v=n,b=H(()=>g.serverName||g.userName||`服务器`),x=et(),C=O(!1),E=O({left:0,top:0}),A;function j(e){A=e.currentTarget;let t=A.getBoundingClientRect(),n=A.closest(`aside`).getBoundingClientRect();E.value={left:n.right+12,top:t.top},q.value=!1,se.value=!1,C.value=!0}function M(){C.value=!1,o(()=>{A?.isConnected&&A.focus()})}let N=xe(),P=Ce(),I=O(!1),B=O(!1),V=O(null),W=O(),ee=O(),G=O(`account-profile`),K=O(),ne=O(),re=O(),ie=O(!1),q=O(!1),ae=O(null),J=null,oe=O({left:`8px`,top:`58px`}),se=O(!1),ce=XA(),{state:le,error:ue,pending:de,visible:fe}=ce,pe=H(()=>ce.supported||!!window.yaoviDesktop?.openUpdates||g.isAdmin),me=H(()=>de.value||[`checking`,`downloading`,`verifying`,`preparing`,`installing`].includes(le.value?.phase??``)),he=H(()=>le.value?.phase===`checking`?`正在检测…`:le.value?.phase===`checked`&&!le.value.available?`已是最新版本`:`检测更新`),_e=O(!1),ve=O(``),ye=O(null),Y=null,be=O({left:`8px`,top:`8px`}),Se=O(null),we=O(null),Te=O(),De=$A(Mj,p),Oe=$A(Nj,h),ke=H(()=>De),Ae=H(()=>ke.value.width.value),je=H(()=>({"--workspace-sidebar-width":`${Ae.value}px`,"--workspace-inspector-width":`${Oe.width.value}px`}));function Me(){return Te.value?.clientWidth??window.innerWidth}function Ne(){let e=g.inspectorOpen?Oe.width.value+Fj:0;return Me()-Pj-Fj-e}function Pe(){return Me()-Pj-Fj-Ae.value-Fj}function Fe(e){ke.value.beginDrag(e,{direction:1,maxAvailable:Ne})}function Ie(){ke.value.reset(Ne())}function Le(e){Oe.beginDrag(e,{direction:-1,maxAvailable:Pe})}function Re(){Oe.reset(Pe())}async function ze(e){I.value=!1,await P.push(e)}function Be(){I.value=!0,o(()=>re.value?.focus())}function Ve(){I.value=!1,o(()=>ne.value?.focus())}function He(e){let t=e.target;t.closest(`.workspace-create-menu, .sidebar-create-trigger`)||(q.value=!1),t.closest(`.workspace-settings-menu, .sidebar-account-switcher__main`)||(se.value=!1)}function Ue(){q.value=!1,o(()=>{J?.isConnected&&J.focus()})}async function We(e){if(q.value){Ue();return}J=e.currentTarget;let t=J.getBoundingClientRect();oe.value={left:`${Math.max(8,Math.min(t.left,window.innerWidth-192))}px`,top:`${Math.max(8,Math.min(t.bottom+6,window.innerHeight-96))}px`},q.value=!0,await o(),ae.value?.querySelector(`[role="menuitem"]`)?.focus()}function Ge(e){Ue(),I.value=!1,v(e===`agent`?`createAgent`:`createGroup`)}function Ke(e){if(![`ArrowUp`,`ArrowDown`,`Home`,`End`].includes(e.key))return;e.preventDefault();let t=[...e.currentTarget.querySelectorAll(`[role="menuitem"]:not(:disabled)`)],n=t.indexOf(document.activeElement);t[e.key===`Home`?0:e.key===`End`?t.length-1:(n+(e.key===`ArrowUp`?-1:1)+t.length)%t.length]?.focus()}function qe(){se.value=!1,o(()=>{Y?.isConnected&&Y.focus()})}async function Je(e){if(se.value){qe();return}Y=e.currentTarget;let t=Y.getBoundingClientRect(),n=(2+Number(g.isAdmin)+3+Number(pe.value))*(window.innerWidth<768?44:36)+18;be.value={left:`${Math.max(8,Math.min(t.right-180,window.innerWidth-188))}px`,top:`${Math.max(8,t.top-n)}px`},q.value=!1,ve.value=``,ce.refresh(),se.value=!0,await o(),ye.value?.querySelector(`[role="menuitem"]`)?.focus()}async function Xe(){if(!(_e.value||!pe.value)){if(ve.value=``,ce.supported){await ce.run(`check`);return}if(window.yaoviDesktop?.openUpdates){_e.value=!0;try{await window.yaoviDesktop.openUpdates(),qe()}catch(e){ve.value=e instanceof Error?e.message:`无法打开更新窗口,请重试`}finally{_e.value=!1}return}W.value=Y?.closest(`.mobile-drawer`)?ne.value:Y??void 0,se.value=!1,I.value=!1,V.value=`update`}}function Ze(){K.value=W.value,V.value=null,st(`system-update`)}function $e(e){if(!(e===`pairing`&&!g.isAdmin)){if(se.value=!1,e===`bots`){at();return}if(K.value=Y?.closest(`.mobile-drawer`)?ne.value:Y??void 0,e===`about`||e===`pairing`){W.value=K.value,I.value=!1,V.value=e;return}st(`account-profile`)}}function Q(){V.value=null,o(()=>W.value?.isConnected&&W.value.focus())}f(()=>g.isAdmin,e=>{!e&&V.value===`pairing`&&Q()});function tt(e){let t=e.currentTarget;W.value=t.closest(`.mobile-drawer`)?ne.value:t,se.value=!1,q.value=!1,I.value=!1,V.value=`plugins`}function nt(){se.value=!1,ze(`/conversations/automations?from=`+encodeURIComponent(N.fullPath))}function rt(){se.value=!1,ze(`/conversations/workstreams?from=`+encodeURIComponent(N.fullPath))}function it(){se.value=!1,ze(`/conversations/usage?from=`+encodeURIComponent(N.fullPath))}function at(){g.isAdmin&&(B.value=!1,ze(`/conversations`))}function ot(e){!(e.metaKey||e.ctrlKey)||e.key.toLowerCase()!==`k`||B.value||document.querySelector(`dialog[open]`)||(e.preventDefault(),ie.value?document.dispatchEvent(new CustomEvent(Lj)):lt(null))}function st(e=`account-profile`,t,n){ee.value=n;let r=t?.currentTarget;r instanceof HTMLButtonElement&&(K.value=r.closest(`.mobile-drawer`)?ne.value:r),se.value=!1,I.value=!1,G.value=e,B.value=!0}function ct(){B.value=!1,o(()=>K.value?.focus())}async function lt(e){q.value=!1,ie.value=!0,document.dispatchEvent(new CustomEvent(Ij,{detail:{section:`groups`}}))}async function ut(e,t=!1,n=!1){let r=e?.querySelector(`input[type="search"]`);t&&r?.value&&(r.value=``,r.dispatchEvent(new Event(`input`,{bubbles:!0}))),ie.value=!1,document.dispatchEvent(new CustomEvent(Lj)),r?.blur(),n&&(await o(),e?.closest(`aside`)?.querySelector(`.sidebar-search-trigger`)?.focus())}function dt(e){let t=e.target;t.matches(`input[type="search"]`)&&!t.value&&ut(t.closest(`.sidebar-context`))}function ft(e){let t=e.target;t.matches(`input[type="search"]`)&&!t.value&&ut(t.closest(`.sidebar-context`))}function pt(){ie.value=!1}f(()=>N.fullPath,()=>{I.value=!1,q.value=!1,se.value=!1,V.value=null});function mt(){g.isAdmin&&(K.value=document.activeElement instanceof HTMLButtonElement?document.activeElement:void 0,V.value=null,st(`bot-vm`))}return m(()=>{window.addEventListener(`yaovi:local-vm-settings`,mt),document.addEventListener(`mousedown`,He),document.addEventListener(Lj,pt),document.addEventListener(`keydown`,ot)}),i(()=>{window.removeEventListener(`yaovi:local-vm-settings`,mt),document.removeEventListener(`mousedown`,He),document.removeEventListener(Lj,pt),document.removeEventListener(`keydown`,ot)}),t({openLocalVm:mt,openSettings:st}),(t,n)=>(u(),F(`div`,{ref_key:`shellEl`,ref:Te,class:y([`workspace-shell`,{"workspace-shell--sidebar-focused":e.sidebarFocusMode,"workspace-shell--conversations":!0,"workspace-shell--conversation-open":!!R(N).params.id||R(N).query.view===`bots`}]),"data-desktop-update-inline":R(ce).supported?``:void 0,style:l(je.value),inert:C.value||B.value||V.value||ie.value?!0:void 0},[D(`header`,{class:`mobile-header`,inert:I.value},[D(`button`,{ref_key:`mobileNavigationTrigger`,ref:ne,class:`icon-button`,type:`button`,"aria-label":`打开导航`,onClick:Be},[U(Z,{name:`menu`,size:20})],512),D(`button`,{class:`mobile-brand`,type:`button`,"aria-label":`返回聊天`,onClick:n[0]||=e=>ze(`/conversations`)},[U(Ee,{size:28,compact:``})]),D(`button`,{class:`icon-button`,type:`button`,"aria-label":e.theme===`dark`?`切换浅色主题`:`切换深色主题`,onClick:n[1]||=e=>v(`toggleTheme`)},[U(Z,{name:e.theme===`dark`?`sun`:`moon`},null,8,[`name`])],8,nj)],8,tj),D(`aside`,{class:`desktop-sidebar rail`,"aria-label":`主导航`,inert:I.value},[D(`div`,ij,[D(`button`,{class:`bot-logo-trigger sidebar-brand`,type:`button`,"aria-label":e.features?.includes(`bot-permissions-v2`)?`返回主 Bot`:`返回 Bot 列表`,title:`Yaovi`,onClick:n[2]||=e=>ze(`/conversations`)},[U(Ee,{size:32,label:!1,compact:``,bare:``})],8,aj),n[20]||=D(`span`,{class:`bot-list-header__spacer`},null,-1),D(`button`,{class:`bot-list-toolbar-button unread-entry`,type:`button`,"aria-label":`未读消息,${R(x).total} 条`,"aria-haspopup":`dialog`,"aria-controls":`unread-center`,"aria-expanded":C.value,title:`未读消息`,onClick:j},[U(Z,{name:`bell`,size:20}),R(x).total?(u(),F(`b`,sj,s(R(x).total>99?`99+`:R(x).total),1)):z(``,!0)],8,oj),R(ce).supported&&R(fe)?(u(),k(qA,{key:0,state:R(le),pending:R(de),error:R(ue),onActivate:n[3]||=e=>R(ce).run()},null,8,[`state`,`pending`,`error`])):z(``,!0),D(`button`,{class:`bot-list-toolbar-button sidebar-search-trigger`,type:`button`,"aria-label":`搜索`,"aria-expanded":ie.value,onClick:n[4]||=e=>lt(Se.value)},[U(Z,{name:`search`,size:21})],8,cj),D(`button`,{class:`bot-list-toolbar-button sidebar-create-trigger`,type:`button`,"aria-label":`新建`,"aria-haspopup":`menu`,"aria-expanded":q.value,onClick:We},[U(Z,{name:`plus`,size:23})],8,lj)]),D(`section`,{ref_key:`desktopSidebarContext`,ref:Se,class:y([`sidebar-context`,{"sidebar-context--searching":ie.value}]),onKeydownCapture:n[5]||=Ye(e=>ut(Se.value,!0,!0),[`esc`]),onInputCapture:dt,onFocusoutCapture:ft},[_(t.$slots,`sidebar-before-heading`,{},void 0,!0),D(`div`,uj,[_(t.$slots,`sidebar`,{},void 0,!0)])],34),D(`div`,dj,[D(`div`,fj,[D(`button`,{class:`sidebar-account-switcher__main`,type:`button`,title:`当前账号`,"aria-label":`${b.value},账号菜单`,"aria-haspopup":`menu`,"aria-expanded":se.value,onClick:n[6]||=e=>Je(e)},[U(Rg,{name:b.value,"image-url":e.userAvatar,size:40},null,8,[`name`,`image-url`])],8,pj)]),D(`button`,{class:`sidebar-apps-trigger`,type:`button`,"aria-haspopup":`dialog`,onClick:tt},[U(R(Qg),{"aria-hidden":`true`}),n[21]||=D(`span`,null,`连接应用`,-1)])])],8,rj),U(YA,{class:`column-resize--shell desktop-only-resize`,label:`调整侧栏宽度`,onDrag:Fe,onReset:Ie}),U(ge,{name:`drawer-fade`},{default:S(()=>[I.value?(u(),F(`button`,{key:0,class:`drawer-scrim`,type:`button`,"aria-label":`关闭导航`,onClick:Ve})):z(``,!0)]),_:1}),D(`aside`,{class:y([`mobile-drawer`,{"mobile-drawer--open":I.value,"mobile-drawer--focused":e.sidebarFocusMode}]),"aria-label":`移动导航`,"aria-hidden":!I.value,inert:!I.value},[D(`div`,hj,[D(`button`,{class:`sidebar-brand`,type:`button`,"aria-label":`返回聊天`,onClick:n[7]||=e=>ze(`/conversations`)},[U(Ee,{size:32,compact:``})]),D(`div`,gj,[R(ce).supported&&R(fe)?(u(),k(qA,{key:0,state:R(le),pending:R(de),error:R(ue),onActivate:n[8]||=e=>R(ce).run()},null,8,[`state`,`pending`,`error`])):z(``,!0),D(`button`,{ref_key:`mobileDrawerClose`,ref:re,class:`icon-button`,type:`button`,"aria-label":`关闭导航`,onClick:Ve},[U(Z,{name:`close`})],512),D(`button`,{class:`sidebar-create-trigger`,type:`button`,"aria-label":`新建`,title:`新建`,"aria-haspopup":`menu`,"aria-expanded":q.value,onClick:We},[U(Z,{name:`plus`,size:19})],8,_j)])]),D(`section`,{ref_key:`mobileSidebarContext`,ref:we,class:y([`sidebar-context mobile-drawer__context`,{"sidebar-context--searching":ie.value}]),onKeydownCapture:n[9]||=Ye(e=>ut(we.value,!0,!0),[`esc`]),onInputCapture:dt,onFocusoutCapture:ft},[_(t.$slots,`sidebar-before-heading`,{},void 0,!0),D(`div`,vj,[_(t.$slots,`mobile-sidebar`,{},void 0,!0)])],34),D(`div`,yj,[D(`div`,bj,[D(`button`,{class:`sidebar-account-switcher__main`,type:`button`,title:`当前账号`,"aria-label":`${b.value},账号菜单`,"aria-haspopup":`menu`,"aria-expanded":se.value,onClick:n[10]||=e=>Je(e)},[U(Rg,{name:b.value,"image-url":e.userAvatar,size:40},null,8,[`name`,`image-url`])],8,xj)]),D(`button`,{class:`sidebar-apps-trigger`,type:`button`,"aria-haspopup":`dialog`,onClick:tt},[U(R(Qg),{"aria-hidden":`true`}),n[22]||=D(`span`,null,`连接应用`,-1)])])],10,mj),D(`main`,{class:`workspace-main`,inert:I.value},[_(t.$slots,`default`,{},void 0,!0)],8,Sj),e.inspectorOpen?(u(),F(T,{key:0},[U(YA,{class:`column-resize--shell desktop-only-resize`,label:`调整预览栏宽度`,onDrag:Le,onReset:Re}),D(`aside`,Cj,[D(`div`,wj,[D(`button`,{class:`icon-button`,type:`button`,"aria-label":e.inspectorCloseLabel,title:e.inspectorCloseLabel,onClick:n[11]||=e=>v(`closeInspector`)},[U(Z,{name:`close`})],8,Tj)]),_(t.$slots,`inspector`,{},void 0,!0)])],64)):z(``,!0),V.value===`about`?(u(),k(R(r),{key:1,onClose:Q})):z(``,!0),V.value===`pairing`&&e.isAdmin?(u(),k(R(a),{key:2,onClose:Q})):z(``,!0),V.value===`update`&&e.isAdmin?(u(),k(R(c),{key:3,onClose:Q,onManage:Ze})):z(``,!0),V.value===`plugins`?(u(),k(R(d),{key:4,onClose:Q})):z(``,!0),U(sw,{open:B.value,features:e.features,"initial-page":G.value,"target-bot-id":ee.value,"user-name":b.value,"user-avatar":e.userAvatar,"pairing-user-name":e.pairingUserName,theme:e.theme,"theme-preference":e.themePreference,"insecure-transport":e.insecureTransport,"is-admin":e.isAdmin,"upstream-ready":e.upstreamReady,"upstream-error":e.upstreamError,onClose:ct,onLogout:n[12]||=e=>v(`logout`),onSetTheme:n[13]||=e=>v(`setTheme`,e),onBotSettingsChanged:n[14]||=e=>v(`botSettingsChanged`)},null,8,[`open`,`features`,`initial-page`,`target-bot-id`,`user-name`,`user-avatar`,`pairing-user-name`,`theme`,`theme-preference`,`insecure-transport`,`is-admin`,`upstream-ready`,`upstream-error`]),(u(),k(L,{to:`body`},[se.value?(u(),F(`div`,{key:0,class:`workspace-create-dismiss`,onPointerdown:X(qe,[`self`]),onKeydown:Ye(X(qe,[`prevent`,`stop`]),[`esc`])},[D(`div`,{ref_key:`settingsMenu`,ref:ye,class:`workspace-create-menu workspace-settings-menu`,style:l(be.value),role:`menu`,"aria-label":`账号菜单`,onKeydown:Ke},[D(`button`,{type:`button`,role:`menuitem`,onClick:n[15]||=e=>$e(`settings`)},[U(Z,{name:`settings`,size:17}),n[23]||=w(`设置`,-1)]),e.isAdmin?(u(),F(`button`,{key:0,type:`button`,role:`menuitem`,onClick:n[16]||=e=>$e(`pairing`)},[U(Z,{name:`monitor`,size:17}),n[24]||=w(`设备配对`,-1)])):z(``,!0),D(`button`,{type:`button`,role:`menuitem`,onClick:nt},[U(Z,{name:`clock`,size:17}),n[25]||=w(`自动化`,-1)]),D(`button`,{type:`button`,role:`menuitem`,onClick:rt},[U(Z,{name:`board`,size:17}),n[26]||=w(`工作流`,-1)]),D(`button`,{type:`button`,role:`menuitem`,onClick:it},[U(Z,{name:`history`,size:17}),n[27]||=w(`Token 用量`,-1)]),D(`button`,{type:`button`,role:`menuitem`,onClick:n[17]||=e=>$e(`about`)},[U(Z,{name:`info`,size:17}),n[28]||=w(`关于`,-1)]),R(ce).supported?(u(),F(`button`,{key:1,class:`desktop-update-check`,type:`button`,role:`menuitem`,disabled:me.value||R(le)?.phase===`ready`,"aria-busy":me.value,onClick:Xe},[U(Z,{name:`refresh`,size:17}),w(s(he.value),1)],8,Dj)):pe.value?(u(),F(`button`,{key:2,type:`button`,role:`menuitem`,disabled:_e.value,"aria-busy":_e.value,onClick:Xe},[U(Z,{name:`refresh`,size:17}),w(s(_e.value?`正在打开…`:`检测更新`),1)],8,Oj)):z(``,!0),ve.value?(u(),F(`p`,kj,s(ve.value),1)):z(``,!0),R(ce).supported&&(R(ue)||R(le)?.error)?(u(),F(`p`,Aj,s(R(ue)||R(le)?.error),1)):z(``,!0)],36)],40,Ej)):z(``,!0),q.value?(u(),F(`div`,{key:1,class:`workspace-create-dismiss`,onPointerdown:X(Ue,[`self`]),onKeydown:Ye(X(Ue,[`prevent`,`stop`]),[`esc`])},[D(`div`,{ref_key:`createMenu`,ref:ae,class:`workspace-create-menu`,style:l(oe.value),role:`menu`,"aria-label":`新建聊天`,onKeydown:Ke},[D(`button`,{type:`button`,role:`menuitem`,onClick:n[18]||=e=>Ge(`agent`)},[U(Z,{name:`users`,size:17}),n[29]||=w(`新建 Bot`,-1)]),D(`button`,{type:`button`,role:`menuitem`,onClick:n[19]||=e=>Ge(`group`)},[U(Z,{name:`groups`,size:17}),n[30]||=w(`新建群聊`,-1)])],36)],40,jj)):z(``,!0)])),C.value?(u(),k(Pg,{key:5,anchor:E.value,onClose:M},null,8,[`anchor`])):z(``,!0)],14,ej))}}),[[`__scopeId`,`data-v-b76db0b1`]]),zj={class:`resource-sidebar`},Bj={key:0,class:`sidebar-search`},Vj=[`value`,`placeholder`],Hj={key:0,class:`sidebar-loading`,"aria-label":`正在加载`},Uj=[`aria-selected`,`data-sidebar-id`,`onClick`,`onContextmenu`,`onKeydown`],Wj=[`aria-label`,`aria-expanded`,`onClick`],Gj=[`aria-label`,`onClick`],Kj={class:`sidebar-item__copy`},qj={class:`sidebar-item__row`},Jj={key:0},Yj={key:0,class:`sidebar-item__row sidebar-item__row--secondary`},Xj={key:0},Zj=[`onClick`],Qj=[`disabled`],$j={key:3,class:`sidebar-empty`},eM=`yaovi:sidebar-search`,tM=`yaovi:sidebar-search-close`,nM=V(E({__name:`ResourceSidebar`,props:{items:{},activeId:{default:``},loading:{type:Boolean,default:!1},searchable:{type:Boolean,default:!0},externalSearch:{type:Boolean,default:!1},search:{default:``},searchPlaceholder:{default:`搜索`},emptyTitle:{default:`暂无内容`},emptyDescription:{default:`新建一项开始使用。`},singleLine:{type:Boolean,default:!1},avatarSize:{default:23},avatarActions:{type:Boolean},hasMore:{type:Boolean,default:!1},loadingMore:{type:Boolean,default:!1}},emits:[`select`,`search`,`more`,`contextMenu`,`avatar`,`toggle`,`loadMore`],setup(e,{expose:t,emit:n}){let r=e,a=n,c=O(null),d=O(!!r.search),h=H(()=>r.items.reduce((e,t)=>(t.section&&!t.nested&&(e[t.section]=(e[t.section]??0)+1),e),{})),g=H(()=>r.items.map((e,t)=>({item:e,section:e.section&&e.section!==r.items[t-1]?.section?e.section:``,sectionLabel:e.section===`已置顶`?`已置顶 ${h.value[e.section]??0}`:e.section||``})));async function _(){if(!r.searchable)return;d.value=!0,await o();let e=c.value;!e||e.offsetParent===null||(e.focus(),e.select())}function v(e){let t=e.target.value;a(`search`,t),t||(d.value=!1)}function b(e=!1){e&&a(`search`,``),d.value=!1,document.dispatchEvent(new CustomEvent(tM))}function x(){r.externalSearch||_()}function C(){d.value=!1}function E(e,t){let n=t.currentTarget.getBoundingClientRect();a(`contextMenu`,e,new MouseEvent(`contextmenu`,{clientX:n.left+16,clientY:n.bottom}))}function A(e){let t=e.currentTarget;r.hasMore&&!r.loadingMore&&t.scrollHeight-t.scrollTop-t.clientHeight<96&&a(`loadMore`)}return f(()=>r.search,e=>{e&&(d.value=!0)}),m(()=>{document.addEventListener(eM,x),document.addEventListener(tM,C)}),i(()=>{document.removeEventListener(eM,x),document.removeEventListener(tM,C)}),t({focusSearch:_}),(t,n)=>(u(),F(`div`,zj,[U(ge,{name:`search-reveal`},{default:S(()=>[e.searchable&&!e.externalSearch&&d.value?(u(),F(`label`,Bj,[U(Z,{name:`search`,size:15}),D(`input`,{ref_key:`searchInput`,ref:c,value:e.search,type:`search`,placeholder:e.searchPlaceholder,onInput:v,onKeydown:n[0]||=Ye(X(e=>b(!0),[`prevent`]),[`esc`]),onBlur:n[1]||=t=>!e.search&&b()},null,40,Vj)])):z(``,!0)]),_:1}),D(`div`,{class:`sidebar-list`,role:`listbox`,"aria-label":`资源列表`,onScrollPassive:A},[e.loading&&!e.items.length?(u(),F(`div`,Hj,[(u(),F(T,null,p(7,e=>D(`span`,{key:e,class:`sidebar-skeleton`,style:l({opacity:1-e*.08})},null,4)),64))])):(u(!0),F(T,{key:1},p(g.value,t=>(u(),F(T,{key:t.item.id},[t.section?(u(),F(`div`,{key:0,class:y([`sidebar-section-label`,{"sidebar-section-label--pinned":t.section===`已置顶`}]),role:`presentation`},[D(`span`,null,s(t.sectionLabel),1)],2)):z(``,!0),D(`div`,{class:y([`sidebar-item`,{active:t.item.id===e.activeId||t.item.active,"sidebar-item--single-line":e.singleLine,"sidebar-item--nested":t.item.nested,"sidebar-item--topic":t.item.topic,"sidebar-item--expandable":t.item.expandable}]),role:`option`,tabindex:`0`,"aria-selected":t.item.id===e.activeId||t.item.active,"data-sidebar-id":t.item.id,onClick:e=>a(`select`,t.item.id),onContextmenu:X(e=>a(`contextMenu`,t.item.id,e),[`prevent`,`stop`]),onKeydown:[Ye(X(e=>E(t.item.id,e),[`shift`,`prevent`,`stop`]),[`f10`]),Ye(X(e=>E(t.item.id,e),[`prevent`,`stop`]),[`context-menu`]),Ye(X(e=>a(`select`,t.item.id),[`prevent`]),[`enter`]),Ye(X(e=>a(`select`,t.item.id),[`prevent`]),[`space`])]},[t.item.expandable?(u(),F(`button`,{key:0,class:y([`sidebar-item__expand`,{"sidebar-item__expand--collapsed":!t.item.expanded}]),type:`button`,"aria-label":`${t.item.expanded?`收起`:`展开`} ${t.item.title} 的话题`,"aria-expanded":t.item.expanded,onClick:X(e=>a(`toggle`,t.item.id),[`stop`])},[U(Z,{name:`chevron-down`,size:13})],10,Wj)):z(``,!0),e.singleLine?z(``,!0):(u(),F(`span`,{key:1,class:y([`sidebar-item__icon`,{"sidebar-item__icon--avatar":!t.item.icon}])},[e.avatarActions&&t.item.avatarKind===`agent`?(u(),F(`button`,{key:0,class:`sidebar-avatar-action`,"aria-label":`${t.item.title} 的身份与操作`,onClick:X(e=>a(`avatar`,t.item.id,e),[`stop`]),onKeydown:n[2]||=X(()=>{},[`stop`])},[U(Xe,{name:t.item.title,avatar:t.item.avatar,"main-bot":t.item.mainBot,unread:!!(t.item.unreadDot||t.item.unread),state:t.item.avatarState,"activity-key":t.item.avatarActivityKey,size:e.avatarSize,"working-dot":``},null,8,[`name`,`avatar`,`main-bot`,`unread`,`state`,`activity-key`,`size`])],40,Gj)):t.item.avatarKind===`agent`?(u(),k(Xe,{key:1,name:t.item.title,avatar:t.item.avatar,"main-bot":t.item.mainBot,unread:!!(t.item.unreadDot||t.item.unread),state:t.item.avatarState,"activity-key":t.item.avatarActivityKey,size:e.avatarSize,"working-dot":``},null,8,[`name`,`avatar`,`main-bot`,`unread`,`state`,`activity-key`,`size`])):t.item.avatar!==void 0||t.item.avatarMembers?.length?(u(),k(Ke,{key:2,name:t.item.title,avatar:t.item.avatar||``,members:t.item.avatarMembers||[],"fallback-key":t.item.avatarFallbackKey||t.item.id,size:e.avatarSize,"working-dot":``},null,8,[`name`,`avatar`,`members`,`fallback-key`,`size`])):t.item.icon?(u(),k(Z,{key:3,name:t.item.icon,size:t.item.topic?14:15},null,8,[`name`,`size`])):(u(),F(T,{key:4},[w(s(t.item.title.slice(0,1).toUpperCase()),1)],64)),t.item.status&&!t.item.mainBot&&!(e.avatarSize>=20&&(t.item.avatarState===`working`||t.item.avatarState===`loading`))?(u(),F(`span`,{key:5,class:y([`presence`,`presence--${t.item.status}`])},null,2)):z(``,!0)],2)),D(`span`,Kj,[D(`span`,qj,[D(`strong`,null,[t.item.pinned?(u(),k(Z,{key:0,name:`pin-filled`,size:12})):z(``,!0),w(s(t.item.title),1)]),t.item.meta?(u(),F(`small`,Jj,s(t.item.meta),1)):z(``,!0)]),!e.singleLine&&t.item.subtitle?(u(),F(`span`,Yj,[D(`span`,null,s(t.item.subtitle),1),t.item.unread?(u(),F(`b`,Xj,s(t.item.unread>99?`99+`:t.item.unread),1)):z(``,!0)])):z(``,!0)]),t.item.showMore===!1?z(``,!0):(u(),F(`button`,{key:2,class:`sidebar-item__more`,type:`button`,"aria-label":`更多操作`,onClick:X(e=>a(`more`,t.item.id,e),[`stop`])},[U(Z,{name:`dots`,size:16})],8,Zj))],42,Uj)],64))),128)),e.hasMore?(u(),F(`button`,{key:2,class:`sidebar-load-more`,type:`button`,disabled:e.loadingMore,onClick:n[3]||=e=>a(`loadMore`)},s(e.loadingMore?`正在加载更多…`:`继续加载会话`),9,Qj)):z(``,!0),!e.loading&&!e.items.length?(u(),F(`div`,$j,[D(`span`,null,[U(Z,{name:`chat`,size:20})]),D(`strong`,null,s(e.emptyTitle),1),D(`p`,null,s(e.emptyDescription),1)])):z(``,!0)],32)]))}}),[[`__scopeId`,`data-v-5a133510`]]),rM={};function iM(e){let t=rM[e];if(t)return t;t=rM[e]=[];for(let e=0;e<128;e++){let n=String.fromCharCode(e);t.push(n)}for(let n=0;n<e.length;n++){let r=e.charCodeAt(n);t[r]=`%`+(`0`+r.toString(16).toUpperCase()).slice(-2)}return t}function aM(e,t){typeof t!=`string`&&(t=aM.defaultChars);let n=iM(t);return e.replace(/(%[a-f0-9]{2})+/gi,function(e){let t=``;for(let r=0,i=e.length;r<i;r+=3){let a=parseInt(e.slice(r+1,r+3),16);if(a<128){t+=n[a];continue}if((a&224)==192&&r+3<i){let n=parseInt(e.slice(r+4,r+6),16);if((n&192)==128){let e=a<<6&1984|n&63;t+=e<128?`��`:String.fromCharCode(e),r+=3;continue}}if((a&240)==224&&r+6<i){let n=parseInt(e.slice(r+4,r+6),16),i=parseInt(e.slice(r+7,r+9),16);if((n&192)==128&&(i&192)==128){let e=a<<12&61440|n<<6&4032|i&63;t+=e<2048||e>=55296&&e<=57343?`���`:String.fromCharCode(e),r+=6;continue}}if((a&248)==240&&r+9<i){let n=parseInt(e.slice(r+4,r+6),16),i=parseInt(e.slice(r+7,r+9),16),o=parseInt(e.slice(r+10,r+12),16);if((n&192)==128&&(i&192)==128&&(o&192)==128){let e=a<<18&1835008|n<<12&258048|i<<6&4032|o&63;e<65536||e>1114111?t+=`����`:(e-=65536,t+=String.fromCharCode(55296+(e>>10),56320+(e&1023))),r+=9;continue}}t+=`�`}return t})}aM.defaultChars=`;/?:@&=+$,#`,aM.componentChars=``;var oM={};function sM(e){let t=oM[e];if(t)return t;t=oM[e]=[];for(let e=0;e<128;e++){let n=String.fromCharCode(e);/^[0-9a-z]$/i.test(n)?t.push(n):t.push(`%`+(`0`+e.toString(16).toUpperCase()).slice(-2))}for(let n=0;n<e.length;n++)t[e.charCodeAt(n)]=e[n];return t}function cM(e,t,n){typeof t!=`string`&&(n=t,t=cM.defaultChars),n===void 0&&(n=!0);let r=sM(t),i=``;for(let t=0,a=e.length;t<a;t++){let o=e.charCodeAt(t);if(n&&o===37&&t+2<a&&/^[0-9a-f]{2}$/i.test(e.slice(t+1,t+3))){i+=e.slice(t,t+3),t+=2;continue}if(o<128){i+=r[o];continue}if(o>=55296&&o<=57343){if(o>=55296&&o<=56319&&t+1<a){let n=e.charCodeAt(t+1);if(n>=56320&&n<=57343){i+=encodeURIComponent(e[t]+e[t+1]),t++;continue}}i+=`%EF%BF%BD`;continue}i+=encodeURIComponent(e[t])}return i}cM.defaultChars=`;/?:@&=+$,-_.!~*'()#`,cM.componentChars=`-_.!~*'()`;function lM(e){let t=``;return t+=e.protocol||``,t+=e.slashes?`//`:``,t+=e.auth?e.auth+`@`:``,e.hostname&&e.hostname.indexOf(`:`)!==-1?t+=`[`+e.hostname+`]`:t+=e.hostname||``,t+=e.port?`:`+e.port:``,t+=e.pathname||``,t+=e.search||``,t+=e.hash||``,t}function uM(){this.protocol=null,this.slashes=null,this.auth=null,this.port=null,this.hostname=null,this.hash=null,this.search=null,this.pathname=null}var dM=/^([a-z0-9.+-]+:)/i,fM=/:[0-9]*$/,pM=/^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,mM=[`%`,`/`,`?`,`;`,`#`,`'`,`{`,`}`,`|`,`\\`,`^`,"`",`<`,`>`,`"`,"`",` `,`\r`,`
|
|
214
|
+
`)]),IA=[`aria-valuenow`,`role`],LA={...rA.props,processing:Boolean,type:{type:String,default:`line`},gapDegree:Number,gapOffsetDegree:Number,status:{type:String,default:`default`},railColor:[String,Array],railStyle:[String,Array],color:[String,Array,Object],viewBoxWidth:{type:Number,default:100},strokeWidth:{type:Number,default:7},percentage:[Number,Array],unit:{type:String,default:`%`},showIndicator:{type:Boolean,default:!0},indicatorPosition:{type:String,default:`outside`},indicatorPlacement:{type:String,default:`outside`},indicatorTextColor:String,circleGap:{type:Number,default:1},height:Number,borderRadius:[String,Number],fillBorderRadius:[String,Number],offsetDegree:Number},RA=E({name:`Progress`,props:LA,setup(e){let t=H(()=>e.indicatorPlacement||e.indicatorPosition),n=H(()=>{if(e.gapDegree||e.gapDegree===0)return e.gapDegree;if(e.type===`dashboard`)return 75}),{mergedClsPrefixRef:r,inlineThemeDisabled:i}=ZO(e),a=rA(`Progress`,`-progress`,FA,gA,e,r),o=H(()=>{let{status:t}=e,{common:{cubicBezierEaseInOut:n},self:{fontSize:r,fontSizeCircle:i,railColor:o,railHeight:s,iconSizeCircle:c,iconSizeLine:l,textColorCircle:u,textColorLineInner:d,textColorLineOuter:f,lineBgProcessing:p,fontWeightCircle:m,[Jw(`iconColor`,t)]:h,[Jw(`fillColor`,t)]:g}}=a.value;return{"--n-bezier":n,"--n-fill-color":g,"--n-font-size":r,"--n-font-size-circle":i,"--n-font-weight-circle":m,"--n-icon-color":h,"--n-icon-size-circle":c,"--n-icon-size-line":l,"--n-line-bg-processing":p,"--n-rail-color":o,"--n-rail-height":s,"--n-text-color-circle":u,"--n-text-color-line-inner":d,"--n-text-color-line-outer":f}}),s=i?nA(`progress`,H(()=>e.status[0]),o,e):void 0;return{mergedClsPrefix:r,mergedIndicatorPlacement:t,gapDeg:n,cssVars:i?void 0:o,themeClass:s?.themeClass,onRender:s?.onRender}},render(){let{type:e,cssVars:t,indicatorTextColor:n,showIndicator:r,status:i,railColor:a,railStyle:o,color:s,percentage:c,viewBoxWidth:d,strokeWidth:f,mergedIndicatorPlacement:p,unit:m,borderRadius:h,fillBorderRadius:g,height:_,processing:v,circleGap:y,mergedClsPrefix:b,gapDeg:x,gapOffsetDegree:S,themeClass:C,$slots:w,onRender:E}=this;return E?.(),u(),F(`div`,{class:hk([C,`${b}-progress`,`${b}-progress--${e}`,`${b}-progress--${i}`]),style:l(t),"aria-valuemax":100,"aria-valuemin":0,"aria-valuenow":c,role:e===`circle`||e===`line`||e===`dashboard`?`progressbar`:`none`},[e===`circle`||e===`dashboard`?(u(),k(wA,{key:0,clsPrefix:b,status:i,showIndicator:r,indicatorTextColor:n,railColor:a,fillColor:s,railStyle:o,offsetDegree:this.offsetDegree,percentage:c,viewBoxWidth:d,strokeWidth:f,gapDegree:x===void 0?e===`dashboard`?75:0:x,gapOffsetDegree:S,unit:m},mk(w),1032,[`clsPrefix`,`status`,`showIndicator`,`indicatorTextColor`,`railColor`,`fillColor`,`railStyle`,`offsetDegree`,`percentage`,`viewBoxWidth`,`strokeWidth`,`gapDegree`,`gapOffsetDegree`,`unit`])):(u(),F(T,{key:1},[e===`line`?(u(),k(EA,{key:0,clsPrefix:b,status:i,showIndicator:r,indicatorTextColor:n,railColor:a,fillColor:s,railStyle:o,percentage:c,processing:v,indicatorPlacement:p,unit:m,fillBorderRadius:g,railBorderRadius:h,height:_},mk(w),1032,[`clsPrefix`,`status`,`showIndicator`,`indicatorTextColor`,`railColor`,`fillColor`,`railStyle`,`percentage`,`processing`,`indicatorPlacement`,`unit`,`fillBorderRadius`,`railBorderRadius`,`height`])):(u(),F(T,{key:1},[e===`multiple-circle`?(u(),k(PA,{key:0,clsPrefix:b,strokeWidth:f,railColor:a,fillColor:s,railStyle:o,viewBoxWidth:d,percentage:c,showIndicator:r,circleGap:y},mk(w),1032,[`clsPrefix`,`strokeWidth`,`railColor`,`fillColor`,`railStyle`,`viewBoxWidth`,`percentage`,`showIndicator`,`circleGap`])):fk(()=>null)],64))],64))],14,IA)}}),zA=[`title`],BA=[`title`,`aria-label`,`aria-busy`,`disabled`],VA=[`aria-label`,`aria-valuenow`],HA={viewBox:`0 0 24 24`,"aria-hidden":`true`},UA=[`stroke-dasharray`],WA={class:`desktop-update-entry__label`,"aria-live":`polite`},GA={key:2,class:`desktop-update-dot`,"aria-hidden":`true`},KA={key:0,class:`desktop-update-error`,role:`alert`},qA=V(E({__name:`DesktopUpdateEntry`,props:{state:{},pending:{type:Boolean},error:{}},emits:[`activate`],setup(e,{emit:t}){let n=e,r=t,i=H(()=>!!(n.pending||[`checking`,`downloading`,`verifying`,`preparing`,`installing`].includes(n.state?.phase??``))),a=H(()=>n.state?.phase===`downloading`&&n.state.total>0?Math.max(0,Math.min(100,Math.floor(n.state.received/n.state.total*100))):void 0),o=H(()=>{let e=n.state;return e?.phase===`ready`?e.installMode===`restart`?`重新启动`:`打开安装包`:e?.phase===`installing`?`正在重启…`:e?.phase===`downloading`?a.value===void 0?`正在下载…`:`正在下载 · ${a.value}%`:[`verifying`,`preparing`].includes(e?.phase??``)?`正在准备…`:e?.phase===`checking`||n.pending?`正在检测…`:e?.retryable===!1?`更新未完成`:e?.available?`可更新`:e?.phase===`failed`||n.error?`重试更新`:e?.phase===`checked`?`已是最新版本`:`检测更新`}),c=H(()=>n.error||n.state?.error||(n.state?.phase===`ready`?n.state.installMode===`restart`?`更新已下载,点击重新启动完成安装`:`更新已下载,点击打开安装包`:i.value?o.value:n.state?.available?`App ${n.state.latestVersion??``} 可更新,点击下载`:n.state?.message));return(t,n)=>(u(),F(`div`,{class:y([`desktop-update-entry`,{"desktop-update-entry--ready":e.state?.phase===`ready`}]),title:c.value},[D(`button`,{type:`button`,title:c.value,"aria-label":o.value,"aria-busy":i.value,disabled:i.value||e.state?.retryable===!1,onClick:n[0]||=e=>r(`activate`)},[i.value?(u(),F(`span`,{key:0,class:y([`desktop-update-ring`,{"desktop-update-ring--spinning":a.value===void 0}]),role:`progressbar`,"aria-label":o.value,"aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":a.value},[(u(),F(`svg`,HA,[n[1]||=D(`circle`,{class:`desktop-update-ring__track`,cx:`12`,cy:`12`,r:`9`},null,-1),D(`circle`,{class:`desktop-update-ring__value`,cx:`12`,cy:`12`,r:`9`,pathLength:`100`,"stroke-dasharray":`${a.value??25} 100`},null,8,UA)]))],10,VA)):(u(),k(Z,{key:1,name:e.state?.phase===`ready`?e.state.installMode===`restart`?`refresh`:`download`:e.state?.retryable===!1?`alert`:e.state?.available?`download`:`refresh`,size:20},null,8,[`name`])),D(`span`,WA,s(o.value),1),(e.state?.available||e.state?.phase===`ready`)&&!i.value?(u(),F(`span`,GA)):z(``,!0)],8,BA),e.error||e.state?.error?(u(),F(`p`,KA,s(e.error||e.state?.error),1)):z(``,!0)],10,zA))}}),[[`__scopeId`,`data-v-4ba891bf`]]),JA=[`aria-label`,`title`],YA=V(E({__name:`ColumnResizeHandle`,props:{label:{}},emits:[`drag`,`reset`],setup(e,{emit:t}){let n=t;return(t,r)=>(u(),F(`div`,{class:`column-resize`,role:`separator`,"aria-orientation":`vertical`,"aria-label":e.label,title:`${e.label}(双击恢复默认)`,onPointerdown:r[0]||=e=>n(`drag`,e),onDblclick:r[1]||=X(e=>n(`reset`),[`prevent`])},null,40,JA))}}),[[`__scopeId`,`data-v-2dca694d`]]);function XA(){let e=window.yaoviDesktop,t=!!(e?.updateState&&e?.updateAction),n=O(),r=O(``),a=O(!1),o=H(()=>!!(n.value?.available||[`downloading`,`verifying`,`preparing`,`ready`,`installing`].includes(n.value?.phase??``)||n.value?.phase===`failed`&&n.value.latestVersion)),s=!1,c=!1,l,u;async function d(){if(!(!t||s||c)){c=!0;try{let t=await e.updateState();s||(n.value=t)}catch{}finally{c=!1}}}async function f(i){if(!t||s||a.value)return;let o=n.value,c=i??(o?.phase===`ready`?o.installMode===`restart`?`install`:`open`:o?.available?`download`:`check`);if(!(!i&&(o?.retryable===!1||[`checking`,`downloading`,`verifying`,`preparing`,`installing`].includes(o?.phase??``)))){a.value=!0,r.value=``;try{let t=e.updateAction(c);d();let r=await t;!s&&r&&(n.value=r)}catch(e){s||(r.value=e instanceof Error?e.message:`更新未完成,请重试`)}finally{a.value=!1}}}return m(()=>{t&&(d(),l=setInterval(()=>void d(),500),u=e?.onUpdateRequested?.(()=>{d()}))}),i(()=>{s=!0,clearInterval(l),u?.()}),{supported:t,state:n,error:r,pending:a,visible:o,refresh:d,run:f}}function ZA(e,t,n){return n<t?t:Math.min(n,Math.max(t,Math.round(e)))}function QA(e,t){try{let n=localStorage.getItem(e);if(n==null)return t.default;let r=Number(n);return Number.isFinite(r)?ZA(r,t.min,t.max):t.default}catch{return t.default}}function $A(e,t){let n=O(QA(e,t)),r=!1,a=0,o=0,s=1,c,l,u=0;function d(e,n){let r=n==null?t.max:Math.min(t.max,n);return ZA(e,t.min,r)}function f(t,r){n.value=d(t,r);try{localStorage.setItem(e,String(n.value))}catch{}}function p(e){f(t.default,e)}function m(){if(r){if(r=!1,document.body.classList.remove(`yaovi-column-resizing`),document.removeEventListener(`pointermove`,h),document.removeEventListener(`pointerup`,g),document.removeEventListener(`pointercancel`,g),l)try{l.releasePointerCapture(u)}catch{}l=void 0,f(n.value,c?.()),c=void 0}}function h(e){r&&(n.value=d(o+s*(e.clientX-a),c?.()))}function g(){m()}function _(e,t){if(e.button===0){if(e.preventDefault(),r=!0,s=t?.direction??1,c=t?.maxAvailable,a=e.clientX,o=n.value,u=e.pointerId,l=e.currentTarget instanceof HTMLElement?e.currentTarget:void 0,l)try{l.setPointerCapture(u)}catch{}document.body.classList.add(`yaovi-column-resizing`),document.addEventListener(`pointermove`,h),document.addEventListener(`pointerup`,g),document.addEventListener(`pointercancel`,g)}}return i(m),{width:n,bounds:t,persist:f,reset:p,beginDrag:_}}var ej=[`data-desktop-update-inline`,`inert`],tj=[`inert`],nj=[`aria-label`],rj=[`inert`],ij={class:`bot-list-header`},aj=[`aria-label`],oj=[`aria-label`,`aria-expanded`],sj={key:0,class:`unread-entry__count`,"aria-hidden":`true`},cj=[`aria-expanded`],lj=[`aria-expanded`],uj={class:`sidebar-context__body`},dj={class:`sidebar-footer sidebar-footer--apps`},fj={class:`sidebar-account-switcher`},pj=[`aria-label`,`aria-expanded`],mj=[`aria-hidden`,`inert`],hj={class:`mobile-drawer__header`},gj={class:`mobile-drawer__actions`},_j=[`aria-expanded`],vj={class:`sidebar-context__body`},yj={class:`sidebar-footer mobile-drawer__footer sidebar-footer--apps`},bj={class:`sidebar-account-switcher`},xj=[`aria-label`,`aria-expanded`],Sj=[`inert`],Cj={class:`workspace-inspector`},wj={class:`workspace-inspector__close`},Tj=[`aria-label`,`title`],Ej=[`onKeydown`],Dj=[`disabled`,`aria-busy`],Oj=[`disabled`,`aria-busy`],kj={key:3,class:`update-menu-error`,role:`alert`},Aj={key:4,class:`update-menu-error`,role:`alert`},jj=[`onKeydown`],Mj=`yaovi:workspace-sidebar-width-conversations-v2`,Nj=`yaovi:workspace-inspector-width`,Pj=320,Fj=6,Ij=`yaovi:sidebar-search`,Lj=`yaovi:sidebar-search-close`,Rj=V(E({__name:`WorkspaceShell`,props:{serverName:{default:``},userName:{default:``},userAvatar:{default:``},pairingUserName:{default:``},theme:{default:`light`},themePreference:{default:`system`},insecureTransport:{type:Boolean,default:!1},sidebarFocusMode:{type:Boolean,default:!1},inspectorOpen:{type:Boolean,default:!1},inspectorCloseLabel:{default:`关闭预览`},isAdmin:{type:Boolean,default:!1},features:{},upstreamReady:{type:Boolean,default:!1},upstreamError:{default:``}},emits:[`logout`,`toggleTheme`,`setTheme`,`closeInspector`,`createAgent`,`createGroup`,`botSettingsChanged`],setup(e,{expose:t,emit:n}){let r=te(()=>Qe(()=>import(`./AboutDialog-CBKv505Y.js`),__vite__mapDeps([15,1,3,4,5,7,8,16]))),a=te(()=>Qe(()=>import(`./DevicePairingDialog-ByYk05DC.js`),__vite__mapDeps([17,4,1,3,5,7,8,18]))),c=te(()=>Qe(()=>import(`./UpdateCheckDialog-djkXTQgD.js`),__vite__mapDeps([19,1,3,4,5,7,8,20]))),d=te(()=>Qe(()=>import(`./BotPluginsDialog-BVOQ3DTp.js`),__vite__mapDeps([21,1,3,4,5,7,8,6,9,22]))),p={default:268,min:200,max:480},h={default:390,min:310,max:560},g=e,v=n,b=H(()=>g.serverName||g.userName||`服务器`),x=et(),C=O(!1),E=O({left:0,top:0}),A;function j(e){A=e.currentTarget;let t=A.getBoundingClientRect(),n=A.closest(`aside`).getBoundingClientRect();E.value={left:n.right+12,top:t.top},q.value=!1,se.value=!1,C.value=!0}function M(){C.value=!1,o(()=>{A?.isConnected&&A.focus()})}let N=xe(),P=Ce(),I=O(!1),B=O(!1),V=O(null),W=O(),ee=O(),G=O(`account-profile`),K=O(),ne=O(),re=O(),ie=O(!1),q=O(!1),ae=O(null),J=null,oe=O({left:`8px`,top:`58px`}),se=O(!1),ce=XA(),{state:le,error:ue,pending:de,visible:fe}=ce,pe=H(()=>ce.supported||!!window.yaoviDesktop?.openUpdates||g.isAdmin),me=H(()=>de.value||[`checking`,`downloading`,`verifying`,`preparing`,`installing`].includes(le.value?.phase??``)),he=H(()=>le.value?.phase===`checking`?`正在检测…`:le.value?.phase===`checked`&&!le.value.available?`已是最新版本`:`检测更新`),_e=O(!1),ve=O(``),ye=O(null),Y=null,be=O({left:`8px`,top:`8px`}),Se=O(null),we=O(null),Te=O(),De=$A(Mj,p),Oe=$A(Nj,h),ke=H(()=>De),Ae=H(()=>ke.value.width.value),je=H(()=>({"--workspace-sidebar-width":`${Ae.value}px`,"--workspace-inspector-width":`${Oe.width.value}px`}));function Me(){return Te.value?.clientWidth??window.innerWidth}function Ne(){let e=g.inspectorOpen?Oe.width.value+Fj:0;return Me()-Pj-Fj-e}function Pe(){return Me()-Pj-Fj-Ae.value-Fj}function Fe(e){ke.value.beginDrag(e,{direction:1,maxAvailable:Ne})}function Ie(){ke.value.reset(Ne())}function Le(e){Oe.beginDrag(e,{direction:-1,maxAvailable:Pe})}function Re(){Oe.reset(Pe())}async function ze(e){I.value=!1,await P.push(e)}function Be(){I.value=!0,o(()=>re.value?.focus())}function Ve(){I.value=!1,o(()=>ne.value?.focus())}function He(e){let t=e.target;t.closest(`.workspace-create-menu, .sidebar-create-trigger`)||(q.value=!1),t.closest(`.workspace-settings-menu, .sidebar-account-switcher__main`)||(se.value=!1)}function Ue(){q.value=!1,o(()=>{J?.isConnected&&J.focus()})}async function We(e){if(q.value){Ue();return}J=e.currentTarget;let t=J.getBoundingClientRect();oe.value={left:`${Math.max(8,Math.min(t.left,window.innerWidth-192))}px`,top:`${Math.max(8,Math.min(t.bottom+6,window.innerHeight-96))}px`},q.value=!0,await o(),ae.value?.querySelector(`[role="menuitem"]`)?.focus()}function Ge(e){Ue(),I.value=!1,v(e===`agent`?`createAgent`:`createGroup`)}function Ke(e){if(![`ArrowUp`,`ArrowDown`,`Home`,`End`].includes(e.key))return;e.preventDefault();let t=[...e.currentTarget.querySelectorAll(`[role="menuitem"]:not(:disabled)`)],n=t.indexOf(document.activeElement);t[e.key===`Home`?0:e.key===`End`?t.length-1:(n+(e.key===`ArrowUp`?-1:1)+t.length)%t.length]?.focus()}function qe(){se.value=!1,o(()=>{Y?.isConnected&&Y.focus()})}async function Je(e){if(se.value){qe();return}Y=e.currentTarget;let t=Y.getBoundingClientRect(),n=(2+Number(g.isAdmin)+3+Number(pe.value))*(window.innerWidth<768?44:36)+18;be.value={left:`${Math.max(8,Math.min(t.right-180,window.innerWidth-188))}px`,top:`${Math.max(8,t.top-n)}px`},q.value=!1,ve.value=``,ce.refresh(),se.value=!0,await o(),ye.value?.querySelector(`[role="menuitem"]`)?.focus()}async function Xe(){if(!(_e.value||!pe.value)){if(ve.value=``,ce.supported){await ce.run(`check`);return}if(window.yaoviDesktop?.openUpdates){_e.value=!0;try{await window.yaoviDesktop.openUpdates(),qe()}catch(e){ve.value=e instanceof Error?e.message:`无法打开更新窗口,请重试`}finally{_e.value=!1}return}W.value=Y?.closest(`.mobile-drawer`)?ne.value:Y??void 0,se.value=!1,I.value=!1,V.value=`update`}}function Ze(){K.value=W.value,V.value=null,st(`system-update`)}function $e(e){if(!(e===`pairing`&&!g.isAdmin)){if(se.value=!1,e===`bots`){at();return}if(K.value=Y?.closest(`.mobile-drawer`)?ne.value:Y??void 0,e===`about`||e===`pairing`){W.value=K.value,I.value=!1,V.value=e;return}st(`account-profile`)}}function Q(){V.value=null,o(()=>W.value?.isConnected&&W.value.focus())}f(()=>g.isAdmin,e=>{!e&&V.value===`pairing`&&Q()});function tt(e){let t=e.currentTarget;W.value=t.closest(`.mobile-drawer`)?ne.value:t,se.value=!1,q.value=!1,I.value=!1,V.value=`plugins`}function nt(){se.value=!1,ze(`/conversations/automations?from=`+encodeURIComponent(N.fullPath))}function rt(){se.value=!1,ze(`/conversations/workstreams?from=`+encodeURIComponent(N.fullPath))}function it(){se.value=!1,ze(`/conversations/usage?from=`+encodeURIComponent(N.fullPath))}function at(){g.isAdmin&&(B.value=!1,ze(`/conversations`))}function ot(e){!(e.metaKey||e.ctrlKey)||e.key.toLowerCase()!==`k`||B.value||document.querySelector(`dialog[open]`)||(e.preventDefault(),ie.value?document.dispatchEvent(new CustomEvent(Lj)):lt(null))}function st(e=`account-profile`,t,n){ee.value=n;let r=t?.currentTarget;r instanceof HTMLButtonElement&&(K.value=r.closest(`.mobile-drawer`)?ne.value:r),se.value=!1,I.value=!1,G.value=e,B.value=!0}function ct(){B.value=!1,o(()=>K.value?.focus())}async function lt(e){q.value=!1,ie.value=!0,document.dispatchEvent(new CustomEvent(Ij,{detail:{section:`groups`}}))}async function ut(e,t=!1,n=!1){let r=e?.querySelector(`input[type="search"]`);t&&r?.value&&(r.value=``,r.dispatchEvent(new Event(`input`,{bubbles:!0}))),ie.value=!1,document.dispatchEvent(new CustomEvent(Lj)),r?.blur(),n&&(await o(),e?.closest(`aside`)?.querySelector(`.sidebar-search-trigger`)?.focus())}function dt(e){let t=e.target;t.matches(`input[type="search"]`)&&!t.value&&ut(t.closest(`.sidebar-context`))}function ft(e){let t=e.target;t.matches(`input[type="search"]`)&&!t.value&&ut(t.closest(`.sidebar-context`))}function pt(){ie.value=!1}f(()=>N.fullPath,()=>{I.value=!1,q.value=!1,se.value=!1,V.value=null});function mt(){g.isAdmin&&(K.value=document.activeElement instanceof HTMLButtonElement?document.activeElement:void 0,V.value=null,st(`bot-vm`))}return m(()=>{window.addEventListener(`yaovi:local-vm-settings`,mt),document.addEventListener(`mousedown`,He),document.addEventListener(Lj,pt),document.addEventListener(`keydown`,ot)}),i(()=>{window.removeEventListener(`yaovi:local-vm-settings`,mt),document.removeEventListener(`mousedown`,He),document.removeEventListener(Lj,pt),document.removeEventListener(`keydown`,ot)}),t({openLocalVm:mt,openSettings:st}),(t,n)=>(u(),F(`div`,{ref_key:`shellEl`,ref:Te,class:y([`workspace-shell`,{"workspace-shell--sidebar-focused":e.sidebarFocusMode,"workspace-shell--conversations":!0,"workspace-shell--conversation-open":!!R(N).params.id||R(N).query.view===`bots`}]),"data-desktop-update-inline":R(ce).supported?``:void 0,style:l(je.value),inert:C.value||B.value||V.value||ie.value?!0:void 0},[D(`header`,{class:`mobile-header`,inert:I.value},[D(`button`,{ref_key:`mobileNavigationTrigger`,ref:ne,class:`icon-button`,type:`button`,"aria-label":`打开导航`,onClick:Be},[U(Z,{name:`menu`,size:20})],512),D(`button`,{class:`mobile-brand`,type:`button`,"aria-label":`返回聊天`,onClick:n[0]||=e=>ze(`/conversations`)},[U(Ee,{size:28,compact:``})]),D(`button`,{class:`icon-button`,type:`button`,"aria-label":e.theme===`dark`?`切换浅色主题`:`切换深色主题`,onClick:n[1]||=e=>v(`toggleTheme`)},[U(Z,{name:e.theme===`dark`?`sun`:`moon`},null,8,[`name`])],8,nj)],8,tj),D(`aside`,{class:`desktop-sidebar rail`,"aria-label":`主导航`,inert:I.value},[D(`div`,ij,[D(`button`,{class:`bot-logo-trigger sidebar-brand`,type:`button`,"aria-label":e.features?.includes(`bot-permissions-v2`)?`返回主 Bot`:`返回 Bot 列表`,title:`Yaovi`,onClick:n[2]||=e=>ze(`/conversations`)},[U(Ee,{size:32,label:!1,compact:``,bare:``})],8,aj),n[20]||=D(`span`,{class:`bot-list-header__spacer`},null,-1),D(`button`,{class:`bot-list-toolbar-button unread-entry`,type:`button`,"aria-label":`未读消息,${R(x).total} 条`,"aria-haspopup":`dialog`,"aria-controls":`unread-center`,"aria-expanded":C.value,title:`未读消息`,onClick:j},[U(Z,{name:`bell`,size:20}),R(x).total?(u(),F(`b`,sj,s(R(x).total>99?`99+`:R(x).total),1)):z(``,!0)],8,oj),R(ce).supported&&R(fe)?(u(),k(qA,{key:0,state:R(le),pending:R(de),error:R(ue),onActivate:n[3]||=e=>R(ce).run()},null,8,[`state`,`pending`,`error`])):z(``,!0),D(`button`,{class:`bot-list-toolbar-button sidebar-search-trigger`,type:`button`,"aria-label":`搜索`,"aria-expanded":ie.value,onClick:n[4]||=e=>lt(Se.value)},[U(Z,{name:`search`,size:21})],8,cj),D(`button`,{class:`bot-list-toolbar-button sidebar-create-trigger`,type:`button`,"aria-label":`新建`,"aria-haspopup":`menu`,"aria-expanded":q.value,onClick:We},[U(Z,{name:`plus`,size:23})],8,lj)]),D(`section`,{ref_key:`desktopSidebarContext`,ref:Se,class:y([`sidebar-context`,{"sidebar-context--searching":ie.value}]),onKeydownCapture:n[5]||=Ye(e=>ut(Se.value,!0,!0),[`esc`]),onInputCapture:dt,onFocusoutCapture:ft},[_(t.$slots,`sidebar-before-heading`,{},void 0,!0),D(`div`,uj,[_(t.$slots,`sidebar`,{},void 0,!0)])],34),D(`div`,dj,[D(`div`,fj,[D(`button`,{class:`sidebar-account-switcher__main`,type:`button`,title:`当前账号`,"aria-label":`${b.value},账号菜单`,"aria-haspopup":`menu`,"aria-expanded":se.value,onClick:n[6]||=e=>Je(e)},[U(Rg,{name:b.value,"image-url":e.userAvatar,size:40},null,8,[`name`,`image-url`])],8,pj)]),D(`button`,{class:`sidebar-apps-trigger`,type:`button`,"aria-haspopup":`dialog`,onClick:tt},[U(R(Qg),{"aria-hidden":`true`}),n[21]||=D(`span`,null,`连接应用`,-1)])])],8,rj),U(YA,{class:`column-resize--shell desktop-only-resize`,label:`调整侧栏宽度`,onDrag:Fe,onReset:Ie}),U(ge,{name:`drawer-fade`},{default:S(()=>[I.value?(u(),F(`button`,{key:0,class:`drawer-scrim`,type:`button`,"aria-label":`关闭导航`,onClick:Ve})):z(``,!0)]),_:1}),D(`aside`,{class:y([`mobile-drawer`,{"mobile-drawer--open":I.value,"mobile-drawer--focused":e.sidebarFocusMode}]),"aria-label":`移动导航`,"aria-hidden":!I.value,inert:!I.value},[D(`div`,hj,[D(`button`,{class:`sidebar-brand`,type:`button`,"aria-label":`返回聊天`,onClick:n[7]||=e=>ze(`/conversations`)},[U(Ee,{size:32,compact:``})]),D(`div`,gj,[R(ce).supported&&R(fe)?(u(),k(qA,{key:0,state:R(le),pending:R(de),error:R(ue),onActivate:n[8]||=e=>R(ce).run()},null,8,[`state`,`pending`,`error`])):z(``,!0),D(`button`,{ref_key:`mobileDrawerClose`,ref:re,class:`icon-button`,type:`button`,"aria-label":`关闭导航`,onClick:Ve},[U(Z,{name:`close`})],512),D(`button`,{class:`sidebar-create-trigger`,type:`button`,"aria-label":`新建`,title:`新建`,"aria-haspopup":`menu`,"aria-expanded":q.value,onClick:We},[U(Z,{name:`plus`,size:19})],8,_j)])]),D(`section`,{ref_key:`mobileSidebarContext`,ref:we,class:y([`sidebar-context mobile-drawer__context`,{"sidebar-context--searching":ie.value}]),onKeydownCapture:n[9]||=Ye(e=>ut(we.value,!0,!0),[`esc`]),onInputCapture:dt,onFocusoutCapture:ft},[_(t.$slots,`sidebar-before-heading`,{},void 0,!0),D(`div`,vj,[_(t.$slots,`mobile-sidebar`,{},void 0,!0)])],34),D(`div`,yj,[D(`div`,bj,[D(`button`,{class:`sidebar-account-switcher__main`,type:`button`,title:`当前账号`,"aria-label":`${b.value},账号菜单`,"aria-haspopup":`menu`,"aria-expanded":se.value,onClick:n[10]||=e=>Je(e)},[U(Rg,{name:b.value,"image-url":e.userAvatar,size:40},null,8,[`name`,`image-url`])],8,xj)]),D(`button`,{class:`sidebar-apps-trigger`,type:`button`,"aria-haspopup":`dialog`,onClick:tt},[U(R(Qg),{"aria-hidden":`true`}),n[22]||=D(`span`,null,`连接应用`,-1)])])],10,mj),D(`main`,{class:`workspace-main`,inert:I.value},[_(t.$slots,`default`,{},void 0,!0)],8,Sj),e.inspectorOpen?(u(),F(T,{key:0},[U(YA,{class:`column-resize--shell desktop-only-resize`,label:`调整预览栏宽度`,onDrag:Le,onReset:Re}),D(`aside`,Cj,[D(`div`,wj,[D(`button`,{class:`icon-button`,type:`button`,"aria-label":e.inspectorCloseLabel,title:e.inspectorCloseLabel,onClick:n[11]||=e=>v(`closeInspector`)},[U(Z,{name:`close`})],8,Tj)]),_(t.$slots,`inspector`,{},void 0,!0)])],64)):z(``,!0),V.value===`about`?(u(),k(R(r),{key:1,onClose:Q})):z(``,!0),V.value===`pairing`&&e.isAdmin?(u(),k(R(a),{key:2,onClose:Q})):z(``,!0),V.value===`update`&&e.isAdmin?(u(),k(R(c),{key:3,onClose:Q,onManage:Ze})):z(``,!0),V.value===`plugins`?(u(),k(R(d),{key:4,onClose:Q})):z(``,!0),U(sw,{open:B.value,features:e.features,"initial-page":G.value,"target-bot-id":ee.value,"user-name":b.value,"user-avatar":e.userAvatar,"pairing-user-name":e.pairingUserName,theme:e.theme,"theme-preference":e.themePreference,"insecure-transport":e.insecureTransport,"is-admin":e.isAdmin,"upstream-ready":e.upstreamReady,"upstream-error":e.upstreamError,onClose:ct,onLogout:n[12]||=e=>v(`logout`),onSetTheme:n[13]||=e=>v(`setTheme`,e),onBotSettingsChanged:n[14]||=e=>v(`botSettingsChanged`)},null,8,[`open`,`features`,`initial-page`,`target-bot-id`,`user-name`,`user-avatar`,`pairing-user-name`,`theme`,`theme-preference`,`insecure-transport`,`is-admin`,`upstream-ready`,`upstream-error`]),(u(),k(L,{to:`body`},[se.value?(u(),F(`div`,{key:0,class:`workspace-create-dismiss`,onPointerdown:X(qe,[`self`]),onKeydown:Ye(X(qe,[`prevent`,`stop`]),[`esc`])},[D(`div`,{ref_key:`settingsMenu`,ref:ye,class:`workspace-create-menu workspace-settings-menu`,style:l(be.value),role:`menu`,"aria-label":`账号菜单`,onKeydown:Ke},[D(`button`,{type:`button`,role:`menuitem`,onClick:n[15]||=e=>$e(`settings`)},[U(Z,{name:`settings`,size:17}),n[23]||=w(`设置`,-1)]),e.isAdmin?(u(),F(`button`,{key:0,type:`button`,role:`menuitem`,onClick:n[16]||=e=>$e(`pairing`)},[U(Z,{name:`monitor`,size:17}),n[24]||=w(`设备配对`,-1)])):z(``,!0),D(`button`,{type:`button`,role:`menuitem`,onClick:nt},[U(Z,{name:`clock`,size:17}),n[25]||=w(`自动化`,-1)]),D(`button`,{type:`button`,role:`menuitem`,onClick:rt},[U(Z,{name:`board`,size:17}),n[26]||=w(`工作流`,-1)]),D(`button`,{type:`button`,role:`menuitem`,onClick:it},[U(Z,{name:`history`,size:17}),n[27]||=w(`Token 用量`,-1)]),D(`button`,{type:`button`,role:`menuitem`,onClick:n[17]||=e=>$e(`about`)},[U(Z,{name:`info`,size:17}),n[28]||=w(`关于`,-1)]),R(ce).supported?(u(),F(`button`,{key:1,class:`desktop-update-check`,type:`button`,role:`menuitem`,disabled:me.value||R(le)?.phase===`ready`,"aria-busy":me.value,onClick:Xe},[U(Z,{name:`refresh`,size:17}),w(s(he.value),1)],8,Dj)):pe.value?(u(),F(`button`,{key:2,type:`button`,role:`menuitem`,disabled:_e.value,"aria-busy":_e.value,onClick:Xe},[U(Z,{name:`refresh`,size:17}),w(s(_e.value?`正在打开…`:`检测更新`),1)],8,Oj)):z(``,!0),ve.value?(u(),F(`p`,kj,s(ve.value),1)):z(``,!0),R(ce).supported&&(R(ue)||R(le)?.error)?(u(),F(`p`,Aj,s(R(ue)||R(le)?.error),1)):z(``,!0)],36)],40,Ej)):z(``,!0),q.value?(u(),F(`div`,{key:1,class:`workspace-create-dismiss`,onPointerdown:X(Ue,[`self`]),onKeydown:Ye(X(Ue,[`prevent`,`stop`]),[`esc`])},[D(`div`,{ref_key:`createMenu`,ref:ae,class:`workspace-create-menu`,style:l(oe.value),role:`menu`,"aria-label":`新建聊天`,onKeydown:Ke},[D(`button`,{type:`button`,role:`menuitem`,onClick:n[18]||=e=>Ge(`agent`)},[U(Z,{name:`users`,size:17}),n[29]||=w(`新建 Bot`,-1)]),D(`button`,{type:`button`,role:`menuitem`,onClick:n[19]||=e=>Ge(`group`)},[U(Z,{name:`groups`,size:17}),n[30]||=w(`新建群聊`,-1)])],36)],40,jj)):z(``,!0)])),C.value?(u(),k(Pg,{key:5,anchor:E.value,onClose:M},null,8,[`anchor`])):z(``,!0)],14,ej))}}),[[`__scopeId`,`data-v-b76db0b1`]]),zj={class:`resource-sidebar`},Bj={key:0,class:`sidebar-search`},Vj=[`value`,`placeholder`],Hj={key:0,class:`sidebar-loading`,"aria-label":`正在加载`},Uj=[`aria-selected`,`data-sidebar-id`,`onClick`,`onContextmenu`,`onKeydown`],Wj=[`aria-label`,`aria-expanded`,`onClick`],Gj=[`aria-label`,`onClick`],Kj={class:`sidebar-item__copy`},qj={class:`sidebar-item__row`},Jj={key:0},Yj={key:0,class:`sidebar-item__row sidebar-item__row--secondary`},Xj={key:0},Zj=[`onClick`],Qj=[`disabled`],$j={key:3,class:`sidebar-empty`},eM=`yaovi:sidebar-search`,tM=`yaovi:sidebar-search-close`,nM=V(E({__name:`ResourceSidebar`,props:{items:{},activeId:{default:``},loading:{type:Boolean,default:!1},searchable:{type:Boolean,default:!0},externalSearch:{type:Boolean,default:!1},search:{default:``},searchPlaceholder:{default:`搜索`},emptyTitle:{default:`暂无内容`},emptyDescription:{default:`新建一项开始使用。`},singleLine:{type:Boolean,default:!1},avatarSize:{default:23},avatarActions:{type:Boolean},hasMore:{type:Boolean,default:!1},loadingMore:{type:Boolean,default:!1}},emits:[`select`,`search`,`more`,`contextMenu`,`avatar`,`toggle`,`loadMore`],setup(e,{expose:t,emit:n}){let r=e,a=n,c=O(null),d=O(!!r.search),h=H(()=>r.items.reduce((e,t)=>(t.section&&!t.nested&&(e[t.section]=(e[t.section]??0)+1),e),{})),g=H(()=>r.items.map((e,t)=>({item:e,section:e.section&&e.section!==r.items[t-1]?.section?e.section:``,sectionLabel:e.section===`已置顶`?`已置顶 ${h.value[e.section]??0}`:e.section||``})));async function _(){if(!r.searchable)return;d.value=!0,await o();let e=c.value;!e||e.offsetParent===null||(e.focus(),e.select())}function v(e){let t=e.target.value;a(`search`,t),t||(d.value=!1)}function b(e=!1){e&&a(`search`,``),d.value=!1,document.dispatchEvent(new CustomEvent(tM))}function x(){r.externalSearch||_()}function C(){d.value=!1}function E(e,t){let n=t.currentTarget.getBoundingClientRect();a(`contextMenu`,e,new MouseEvent(`contextmenu`,{clientX:n.left+16,clientY:n.bottom}))}function A(e){let t=e.currentTarget;r.hasMore&&!r.loadingMore&&t.scrollHeight-t.scrollTop-t.clientHeight<96&&a(`loadMore`)}return f(()=>r.search,e=>{e&&(d.value=!0)}),m(()=>{document.addEventListener(eM,x),document.addEventListener(tM,C)}),i(()=>{document.removeEventListener(eM,x),document.removeEventListener(tM,C)}),t({focusSearch:_}),(t,n)=>(u(),F(`div`,zj,[U(ge,{name:`search-reveal`},{default:S(()=>[e.searchable&&!e.externalSearch&&d.value?(u(),F(`label`,Bj,[U(Z,{name:`search`,size:15}),D(`input`,{ref_key:`searchInput`,ref:c,value:e.search,type:`search`,placeholder:e.searchPlaceholder,onInput:v,onKeydown:n[0]||=Ye(X(e=>b(!0),[`prevent`]),[`esc`]),onBlur:n[1]||=t=>!e.search&&b()},null,40,Vj)])):z(``,!0)]),_:1}),D(`div`,{class:`sidebar-list`,role:`listbox`,"aria-label":`资源列表`,onScrollPassive:A},[e.loading&&!e.items.length?(u(),F(`div`,Hj,[(u(),F(T,null,p(7,e=>D(`span`,{key:e,class:`sidebar-skeleton`,style:l({opacity:1-e*.08})},null,4)),64))])):(u(!0),F(T,{key:1},p(g.value,t=>(u(),F(T,{key:t.item.id},[t.section?(u(),F(`div`,{key:0,class:y([`sidebar-section-label`,{"sidebar-section-label--pinned":t.section===`已置顶`}]),role:`presentation`},[D(`span`,null,s(t.sectionLabel),1)],2)):z(``,!0),D(`div`,{class:y([`sidebar-item`,{active:t.item.id===e.activeId||t.item.active,"sidebar-item--single-line":e.singleLine,"sidebar-item--nested":t.item.nested,"sidebar-item--topic":t.item.topic,"sidebar-item--expandable":t.item.expandable}]),role:`option`,tabindex:`0`,"aria-selected":t.item.id===e.activeId||t.item.active,"data-sidebar-id":t.item.id,onClick:e=>a(`select`,t.item.id),onContextmenu:X(e=>a(`contextMenu`,t.item.id,e),[`prevent`,`stop`]),onKeydown:[Ye(X(e=>E(t.item.id,e),[`shift`,`prevent`,`stop`]),[`f10`]),Ye(X(e=>E(t.item.id,e),[`prevent`,`stop`]),[`context-menu`]),Ye(X(e=>a(`select`,t.item.id),[`prevent`]),[`enter`]),Ye(X(e=>a(`select`,t.item.id),[`prevent`]),[`space`])]},[t.item.expandable?(u(),F(`button`,{key:0,class:y([`sidebar-item__expand`,{"sidebar-item__expand--collapsed":!t.item.expanded}]),type:`button`,"aria-label":`${t.item.expanded?`收起`:`展开`} ${t.item.title} 的话题`,"aria-expanded":t.item.expanded,onClick:X(e=>a(`toggle`,t.item.id),[`stop`])},[U(Z,{name:`chevron-down`,size:13})],10,Wj)):z(``,!0),e.singleLine?z(``,!0):(u(),F(`span`,{key:1,class:y([`sidebar-item__icon`,{"sidebar-item__icon--avatar":!t.item.icon}])},[e.avatarActions&&t.item.avatarKind===`agent`?(u(),F(`button`,{key:0,class:`sidebar-avatar-action`,"aria-label":`${t.item.title} 的身份与操作`,onClick:X(e=>a(`avatar`,t.item.id,e),[`stop`]),onKeydown:n[2]||=X(()=>{},[`stop`])},[U(Xe,{name:t.item.title,avatar:t.item.avatar,"main-bot":t.item.mainBot,unread:!!(t.item.unreadDot||t.item.unread),state:t.item.avatarState,"activity-key":t.item.avatarActivityKey,size:e.avatarSize,"working-dot":``},null,8,[`name`,`avatar`,`main-bot`,`unread`,`state`,`activity-key`,`size`])],40,Gj)):t.item.avatarKind===`agent`?(u(),k(Xe,{key:1,name:t.item.title,avatar:t.item.avatar,"main-bot":t.item.mainBot,unread:!!(t.item.unreadDot||t.item.unread),state:t.item.avatarState,"activity-key":t.item.avatarActivityKey,size:e.avatarSize,"working-dot":``},null,8,[`name`,`avatar`,`main-bot`,`unread`,`state`,`activity-key`,`size`])):t.item.avatar!==void 0||t.item.avatarMembers?.length?(u(),k(Ke,{key:2,name:t.item.title,avatar:t.item.avatar||``,members:t.item.avatarMembers||[],"fallback-key":t.item.avatarFallbackKey||t.item.id,size:e.avatarSize,"working-dot":``},null,8,[`name`,`avatar`,`members`,`fallback-key`,`size`])):t.item.icon?(u(),k(Z,{key:3,name:t.item.icon,size:t.item.topic?14:15},null,8,[`name`,`size`])):(u(),F(T,{key:4},[w(s(t.item.title.slice(0,1).toUpperCase()),1)],64)),t.item.status&&!t.item.mainBot&&!(e.avatarSize>=20&&(t.item.avatarState===`working`||t.item.avatarState===`loading`))?(u(),F(`span`,{key:5,class:y([`presence`,`presence--${t.item.status}`])},null,2)):z(``,!0)],2)),D(`span`,Kj,[D(`span`,qj,[D(`strong`,null,[t.item.pinned?(u(),k(Z,{key:0,name:`pin-filled`,size:12})):z(``,!0),w(s(t.item.title),1)]),t.item.meta?(u(),F(`small`,Jj,s(t.item.meta),1)):z(``,!0)]),!e.singleLine&&t.item.subtitle?(u(),F(`span`,Yj,[D(`span`,null,s(t.item.subtitle),1),t.item.unread?(u(),F(`b`,Xj,s(t.item.unread>99?`99+`:t.item.unread),1)):z(``,!0)])):z(``,!0)]),t.item.showMore===!1?z(``,!0):(u(),F(`button`,{key:2,class:`sidebar-item__more`,type:`button`,"aria-label":`更多操作`,onClick:X(e=>a(`more`,t.item.id,e),[`stop`])},[U(Z,{name:`dots`,size:16})],8,Zj))],42,Uj)],64))),128)),e.hasMore?(u(),F(`button`,{key:2,class:`sidebar-load-more`,type:`button`,disabled:e.loadingMore,onClick:n[3]||=e=>a(`loadMore`)},s(e.loadingMore?`正在加载更多…`:`继续加载会话`),9,Qj)):z(``,!0),!e.loading&&!e.items.length?(u(),F(`div`,$j,[D(`span`,null,[U(Z,{name:`chat`,size:20})]),D(`strong`,null,s(e.emptyTitle),1),D(`p`,null,s(e.emptyDescription),1)])):z(``,!0)],32)]))}}),[[`__scopeId`,`data-v-5a133510`]]),rM={};function iM(e){let t=rM[e];if(t)return t;t=rM[e]=[];for(let e=0;e<128;e++){let n=String.fromCharCode(e);t.push(n)}for(let n=0;n<e.length;n++){let r=e.charCodeAt(n);t[r]=`%`+(`0`+r.toString(16).toUpperCase()).slice(-2)}return t}function aM(e,t){typeof t!=`string`&&(t=aM.defaultChars);let n=iM(t);return e.replace(/(%[a-f0-9]{2})+/gi,function(e){let t=``;for(let r=0,i=e.length;r<i;r+=3){let a=parseInt(e.slice(r+1,r+3),16);if(a<128){t+=n[a];continue}if((a&224)==192&&r+3<i){let n=parseInt(e.slice(r+4,r+6),16);if((n&192)==128){let e=a<<6&1984|n&63;t+=e<128?`��`:String.fromCharCode(e),r+=3;continue}}if((a&240)==224&&r+6<i){let n=parseInt(e.slice(r+4,r+6),16),i=parseInt(e.slice(r+7,r+9),16);if((n&192)==128&&(i&192)==128){let e=a<<12&61440|n<<6&4032|i&63;t+=e<2048||e>=55296&&e<=57343?`���`:String.fromCharCode(e),r+=6;continue}}if((a&248)==240&&r+9<i){let n=parseInt(e.slice(r+4,r+6),16),i=parseInt(e.slice(r+7,r+9),16),o=parseInt(e.slice(r+10,r+12),16);if((n&192)==128&&(i&192)==128&&(o&192)==128){let e=a<<18&1835008|n<<12&258048|i<<6&4032|o&63;e<65536||e>1114111?t+=`����`:(e-=65536,t+=String.fromCharCode(55296+(e>>10),56320+(e&1023))),r+=9;continue}}t+=`�`}return t})}aM.defaultChars=`;/?:@&=+$,#`,aM.componentChars=``;var oM={};function sM(e){let t=oM[e];if(t)return t;t=oM[e]=[];for(let e=0;e<128;e++){let n=String.fromCharCode(e);/^[0-9a-z]$/i.test(n)?t.push(n):t.push(`%`+(`0`+e.toString(16).toUpperCase()).slice(-2))}for(let n=0;n<e.length;n++)t[e.charCodeAt(n)]=e[n];return t}function cM(e,t,n){typeof t!=`string`&&(n=t,t=cM.defaultChars),n===void 0&&(n=!0);let r=sM(t),i=``;for(let t=0,a=e.length;t<a;t++){let o=e.charCodeAt(t);if(n&&o===37&&t+2<a&&/^[0-9a-f]{2}$/i.test(e.slice(t+1,t+3))){i+=e.slice(t,t+3),t+=2;continue}if(o<128){i+=r[o];continue}if(o>=55296&&o<=57343){if(o>=55296&&o<=56319&&t+1<a){let n=e.charCodeAt(t+1);if(n>=56320&&n<=57343){i+=encodeURIComponent(e[t]+e[t+1]),t++;continue}}i+=`%EF%BF%BD`;continue}i+=encodeURIComponent(e[t])}return i}cM.defaultChars=`;/?:@&=+$,-_.!~*'()#`,cM.componentChars=`-_.!~*'()`;function lM(e){let t=``;return t+=e.protocol||``,t+=e.slashes?`//`:``,t+=e.auth?e.auth+`@`:``,e.hostname&&e.hostname.indexOf(`:`)!==-1?t+=`[`+e.hostname+`]`:t+=e.hostname||``,t+=e.port?`:`+e.port:``,t+=e.pathname||``,t+=e.search||``,t+=e.hash||``,t}function uM(){this.protocol=null,this.slashes=null,this.auth=null,this.port=null,this.hostname=null,this.hash=null,this.search=null,this.pathname=null}var dM=/^([a-z0-9.+-]+:)/i,fM=/:[0-9]*$/,pM=/^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,mM=[`%`,`/`,`?`,`;`,`#`,`'`,`{`,`}`,`|`,`\\`,`^`,"`",`<`,`>`,`"`,"`",` `,`\r`,`
|
|
215
215
|
`,` `],hM=[`/`,`?`,`#`],gM=255,_M=/^[+a-z0-9A-Z_-]{0,63}$/,vM=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,yM={javascript:!0,"javascript:":!0},bM={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0};function xM(e,t){if(e&&e instanceof uM)return e;let n=new uM;return n.parse(e,t),n}uM.prototype.parse=function(e,t){let n,r,i,a=e;if(a=a.trim(),!t&&e.split(`#`).length===1){let e=pM.exec(a);if(e)return this.pathname=e[1],e[2]&&(this.search=e[2]),this}let o=dM.exec(a);if(o&&(o=o[0],n=o.toLowerCase(),this.protocol=o,a=a.substr(o.length)),(t||o||a.match(/^\/\/[^@\/]+@[^@\/]+/))&&(i=a.substr(0,2)===`//`,i&&!(o&&yM[o])&&(a=a.substr(2),this.slashes=!0)),!yM[o]&&(i||o&&!bM[o])){let e=-1;for(let t=0;t<hM.length;t++)r=a.indexOf(hM[t]),r!==-1&&(e===-1||r<e)&&(e=r);let t,n;n=e===-1?a.lastIndexOf(`@`):a.lastIndexOf(`@`,e),n!==-1&&(t=a.slice(0,n),a=a.slice(n+1),this.auth=t),e=-1;for(let t=0;t<mM.length;t++)r=a.indexOf(mM[t]),r!==-1&&(e===-1||r<e)&&(e=r);e===-1&&(e=a.length),a[e-1]===`:`&&e--;let i=a.slice(0,e);a=a.slice(e),this.parseHost(i),this.hostname=this.hostname||``;let o=this.hostname[0]===`[`&&this.hostname[this.hostname.length-1]===`]`;if(!o){let e=this.hostname.split(/\./);for(let t=0,n=e.length;t<n;t++){let n=e[t];if(n&&!n.match(_M)){let r=``;for(let e=0,t=n.length;e<t;e++)n.charCodeAt(e)>127?r+=`x`:r+=n[e];if(!r.match(_M)){let r=e.slice(0,t),i=e.slice(t+1),o=n.match(vM);o&&(r.push(o[1]),i.unshift(o[2])),i.length&&(a=i.join(`.`)+a),this.hostname=r.join(`.`);break}}}}this.hostname.length>gM&&(this.hostname=``),o&&(this.hostname=this.hostname.substr(1,this.hostname.length-2))}let s=a.indexOf(`#`);s!==-1&&(this.hash=a.substr(s),a=a.slice(0,s));let c=a.indexOf(`?`);return c!==-1&&(this.search=a.substr(c),a=a.slice(0,c)),a&&(this.pathname=a),bM[n]&&this.hostname&&!this.pathname&&(this.pathname=``),this},uM.prototype.parseHost=function(e){let t=fM.exec(e);t&&(t=t[0],t!==`:`&&(this.port=t.substr(1)),e=e.substr(0,e.length-t.length)),e&&(this.hostname=e)};var SM=t({decode:()=>aM,encode:()=>cM,format:()=>lM,parse:()=>xM}),CM=/[\0-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,wM=/[\0-\x1F\x7F-\x9F]/,TM=/[\xAD\u0600-\u0605\u061C\u06DD\u070F\u0890\u0891\u08E2\u180E\u200B-\u200F\u202A-\u202E\u2060-\u2064\u2066-\u206F\uFEFF\uFFF9-\uFFFB]|\uD804[\uDCBD\uDCCD]|\uD80D[\uDC30-\uDC3F]|\uD82F[\uDCA0-\uDCA3]|\uD834[\uDD73-\uDD7A]|\uDB40[\uDC01\uDC20-\uDC7F]/,EM=/[!-#%-\*,-\/:;\?@\[-\]_\{\}\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061D-\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C77\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1B7D\u1B7E\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4F\u2E52-\u2E5D\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]|\uD800[\uDD00-\uDD02\uDF9F\uDFD0]|\uD801\uDD6F|\uD802[\uDC57\uDD1F\uDD3F\uDE50-\uDE58\uDE7F\uDEF0-\uDEF6\uDF39-\uDF3F\uDF99-\uDF9C]|\uD803[\uDEAD\uDF55-\uDF59\uDF86-\uDF89]|\uD804[\uDC47-\uDC4D\uDCBB\uDCBC\uDCBE-\uDCC1\uDD40-\uDD43\uDD74\uDD75\uDDC5-\uDDC8\uDDCD\uDDDB\uDDDD-\uDDDF\uDE38-\uDE3D\uDEA9]|\uD805[\uDC4B-\uDC4F\uDC5A\uDC5B\uDC5D\uDCC6\uDDC1-\uDDD7\uDE41-\uDE43\uDE60-\uDE6C\uDEB9\uDF3C-\uDF3E]|\uD806[\uDC3B\uDD44-\uDD46\uDDE2\uDE3F-\uDE46\uDE9A-\uDE9C\uDE9E-\uDEA2\uDF00-\uDF09]|\uD807[\uDC41-\uDC45\uDC70\uDC71\uDEF7\uDEF8\uDF43-\uDF4F\uDFFF]|\uD809[\uDC70-\uDC74]|\uD80B[\uDFF1\uDFF2]|\uD81A[\uDE6E\uDE6F\uDEF5\uDF37-\uDF3B\uDF44]|\uD81B[\uDE97-\uDE9A\uDFE2]|\uD82F\uDC9F|\uD836[\uDE87-\uDE8B]|\uD83A[\uDD5E\uDD5F]/,DM=/[\$\+<->\^`\|~\xA2-\xA6\xA8\xA9\xAC\xAE-\xB1\xB4\xB8\xD7\xF7\u02C2-\u02C5\u02D2-\u02DF\u02E5-\u02EB\u02ED\u02EF-\u02FF\u0375\u0384\u0385\u03F6\u0482\u058D-\u058F\u0606-\u0608\u060B\u060E\u060F\u06DE\u06E9\u06FD\u06FE\u07F6\u07FE\u07FF\u0888\u09F2\u09F3\u09FA\u09FB\u0AF1\u0B70\u0BF3-\u0BFA\u0C7F\u0D4F\u0D79\u0E3F\u0F01-\u0F03\u0F13\u0F15-\u0F17\u0F1A-\u0F1F\u0F34\u0F36\u0F38\u0FBE-\u0FC5\u0FC7-\u0FCC\u0FCE\u0FCF\u0FD5-\u0FD8\u109E\u109F\u1390-\u1399\u166D\u17DB\u1940\u19DE-\u19FF\u1B61-\u1B6A\u1B74-\u1B7C\u1FBD\u1FBF-\u1FC1\u1FCD-\u1FCF\u1FDD-\u1FDF\u1FED-\u1FEF\u1FFD\u1FFE\u2044\u2052\u207A-\u207C\u208A-\u208C\u20A0-\u20C0\u2100\u2101\u2103-\u2106\u2108\u2109\u2114\u2116-\u2118\u211E-\u2123\u2125\u2127\u2129\u212E\u213A\u213B\u2140-\u2144\u214A-\u214D\u214F\u218A\u218B\u2190-\u2307\u230C-\u2328\u232B-\u2426\u2440-\u244A\u249C-\u24E9\u2500-\u2767\u2794-\u27C4\u27C7-\u27E5\u27F0-\u2982\u2999-\u29D7\u29DC-\u29FB\u29FE-\u2B73\u2B76-\u2B95\u2B97-\u2BFF\u2CE5-\u2CEA\u2E50\u2E51\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u2FF0-\u2FFF\u3004\u3012\u3013\u3020\u3036\u3037\u303E\u303F\u309B\u309C\u3190\u3191\u3196-\u319F\u31C0-\u31E3\u31EF\u3200-\u321E\u322A-\u3247\u3250\u3260-\u327F\u328A-\u32B0\u32C0-\u33FF\u4DC0-\u4DFF\uA490-\uA4C6\uA700-\uA716\uA720\uA721\uA789\uA78A\uA828-\uA82B\uA836-\uA839\uAA77-\uAA79\uAB5B\uAB6A\uAB6B\uFB29\uFBB2-\uFBC2\uFD40-\uFD4F\uFDCF\uFDFC-\uFDFF\uFE62\uFE64-\uFE66\uFE69\uFF04\uFF0B\uFF1C-\uFF1E\uFF3E\uFF40\uFF5C\uFF5E\uFFE0-\uFFE6\uFFE8-\uFFEE\uFFFC\uFFFD]|\uD800[\uDD37-\uDD3F\uDD79-\uDD89\uDD8C-\uDD8E\uDD90-\uDD9C\uDDA0\uDDD0-\uDDFC]|\uD802[\uDC77\uDC78\uDEC8]|\uD805\uDF3F|\uD807[\uDFD5-\uDFF1]|\uD81A[\uDF3C-\uDF3F\uDF45]|\uD82F\uDC9C|\uD833[\uDF50-\uDFC3]|\uD834[\uDC00-\uDCF5\uDD00-\uDD26\uDD29-\uDD64\uDD6A-\uDD6C\uDD83\uDD84\uDD8C-\uDDA9\uDDAE-\uDDEA\uDE00-\uDE41\uDE45\uDF00-\uDF56]|\uD835[\uDEC1\uDEDB\uDEFB\uDF15\uDF35\uDF4F\uDF6F\uDF89\uDFA9\uDFC3]|\uD836[\uDC00-\uDDFF\uDE37-\uDE3A\uDE6D-\uDE74\uDE76-\uDE83\uDE85\uDE86]|\uD838[\uDD4F\uDEFF]|\uD83B[\uDCAC\uDCB0\uDD2E\uDEF0\uDEF1]|\uD83C[\uDC00-\uDC2B\uDC30-\uDC93\uDCA0-\uDCAE\uDCB1-\uDCBF\uDCC1-\uDCCF\uDCD1-\uDCF5\uDD0D-\uDDAD\uDDE6-\uDE02\uDE10-\uDE3B\uDE40-\uDE48\uDE50\uDE51\uDE60-\uDE65\uDF00-\uDFFF]|\uD83D[\uDC00-\uDED7\uDEDC-\uDEEC\uDEF0-\uDEFC\uDF00-\uDF76\uDF7B-\uDFD9\uDFE0-\uDFEB\uDFF0]|\uD83E[\uDC00-\uDC0B\uDC10-\uDC47\uDC50-\uDC59\uDC60-\uDC87\uDC90-\uDCAD\uDCB0\uDCB1\uDD00-\uDE53\uDE60-\uDE6D\uDE70-\uDE7C\uDE80-\uDE88\uDE90-\uDEBD\uDEBF-\uDEC5\uDECE-\uDEDB\uDEE0-\uDEE8\uDEF0-\uDEF8\uDF00-\uDF92\uDF94-\uDFCA]/,OM=/[ \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000]/,kM=t({Any:()=>CM,Cc:()=>wM,Cf:()=>TM,P:()=>EM,S:()=>DM,Z:()=>OM}),AM=new Uint16Array(`ᵁ<Õıʊҝջאٵ۞ޢߖࠏઑඡ༉༦ረዡᐕᒝᓃᓟᔥ\0\0\0\0\0\0ᕫᛍᦍᰒᷝ↰⊍⏀⏻⑂⠤⤒ⴈ⹈⿎〖㊺㘹㞬㣾㨨㩱㫠㬮ࠀEMabcfglmnoprstu\\bfms¦³¹ÈÏlig耻Æ䃆P耻&䀦cute耻Á䃁reve;䄂Āiyx}rc耻Â䃂;䐐r;쀀𝔄rave耻À䃀pha;䎑acr;䄀d;橓Āgp¡on;䄄f;쀀𝔸plyFunction;恡ing耻Å䃅Ācs¾Ãr;쀀𝒜ign;扔ilde耻Ã䃃ml耻Ä䃄ЀaceforsuåûþėĜĢħĪĀcrêòkslash;或Ŷöø;櫧ed;挆y;䐑ƀcrtąċĔause;戵noullis;愬a;䎒r;쀀𝔅pf;쀀𝔹eve;䋘còēmpeq;扎܀HOacdefhilorsuōőŖƀƞƢƵƷƺǜȕɳɸɾcy;䐧PY耻©䂩ƀcpyŝŢźute;䄆Ā;iŧŨ拒talDifferentialD;慅leys;愭ȀaeioƉƎƔƘron;䄌dil耻Ç䃇rc;䄈nint;戰ot;䄊ĀdnƧƭilla;䂸terDot;䂷òſi;䎧rcleȀDMPTLJNjǑǖot;抙inus;抖lus;投imes;抗oĀcsǢǸkwiseContourIntegral;戲eCurlyĀDQȃȏoubleQuote;思uote;怙ȀlnpuȞȨɇɕonĀ;eȥȦ户;橴ƀgitȯȶȺruent;扡nt;戯ourIntegral;戮ĀfrɌɎ;愂oduct;成nterClockwiseContourIntegral;戳oss;樯cr;쀀𝒞pĀ;Cʄʅ拓ap;才րDJSZacefiosʠʬʰʴʸˋ˗ˡ˦̳ҍĀ;oŹʥtrahd;椑cy;䐂cy;䐅cy;䐏ƀgrsʿ˄ˇger;怡r;憡hv;櫤Āayː˕ron;䄎;䐔lĀ;t˝˞戇a;䎔r;쀀𝔇Āaf˫̧Ācm˰̢riticalȀADGT̖̜̀̆cute;䂴oŴ̋̍;䋙bleAcute;䋝rave;䁠ilde;䋜ond;拄ferentialD;慆Ѱ̽\0\0\0͔͂\0Ѕf;쀀𝔻ƀ;DE͈͉͍䂨ot;惜qual;扐blèCDLRUVͣͲϏϢϸontourIntegraìȹoɴ\0\0ͻ»͉nArrow;懓Āeo·ΤftƀARTΐΖΡrrow;懐ightArrow;懔eåˊngĀLRΫτeftĀARγιrrow;柸ightArrow;柺ightArrow;柹ightĀATϘϞrrow;懒ee;抨pɁϩ\0\0ϯrrow;懑ownArrow;懕erticalBar;戥ǹABLRTaВЪаўѿͼrrowƀ;BUНОТ憓ar;椓pArrow;懵reve;䌑eft˒к\0ц\0ѐightVector;楐eeVector;楞ectorĀ;Bљњ憽ar;楖ightǔѧ\0ѱeeVector;楟ectorĀ;BѺѻ懁ar;楗eeĀ;A҆҇护rrow;憧ĀctҒҗr;쀀𝒟rok;䄐ࠀNTacdfglmopqstuxҽӀӄӋӞӢӧӮӵԡԯԶՒ՝ՠեG;䅊H耻Ð䃐cute耻É䃉ƀaiyӒӗӜron;䄚rc耻Ê䃊;䐭ot;䄖r;쀀𝔈rave耻È䃈ement;戈ĀapӺӾcr;䄒tyɓԆ\0\0ԒmallSquare;旻erySmallSquare;斫ĀgpԦԪon;䄘f;쀀𝔼silon;䎕uĀaiԼՉlĀ;TՂՃ橵ilde;扂librium;懌Āci՚r;愰m;橳a;䎗ml耻Ë䃋Āipժկsts;戃onentialE;慇ʀcfiosօֈ֍ֲy;䐤r;쀀𝔉lledɓ֗\0\0֣mallSquare;旼erySmallSquare;斪Ͱֺ\0ֿ\0\0ׄf;쀀𝔽All;戀riertrf;愱còJTabcdfgorstרׯؒؖ؛؝أ٬ٲcy;䐃耻>䀾mmaĀ;d䎓;䏜reve;䄞ƀeiy؇،ؐdil;䄢rc;䄜;䐓ot;䄠r;쀀𝔊;拙pf;쀀𝔾eater̀EFGLSTصلَٖٛ٦qualĀ;Lؾؿ扥ess;招ullEqual;执reater;檢ess;扷lantEqual;橾ilde;扳cr;쀀𝒢;扫ЀAacfiosuڅڋږڛڞڪھۊRDcy;䐪Āctڐڔek;䋇;䁞irc;䄤r;愌lbertSpace;愋ǰگ\0ڲf;愍izontalLine;攀Āctۃۅòکrok;䄦mpńېۘownHumðįqual;扏܀EJOacdfgmnostuۺ۾܃܇ܚܞܡܨ݄ݸދޏޕcy;䐕lig;䄲cy;䐁cute耻Í䃍Āiyܓܘrc耻Î䃎;䐘ot;䄰r;愑rave耻Ì䃌ƀ;apܠܯܿĀcgܴܷr;䄪inaryI;慈lieóϝǴ݉\0ݢĀ;eݍݎ戬Āgrݓݘral;戫section;拂isibleĀCTݬݲomma;恣imes;恢ƀgptݿރވon;䄮f;쀀𝕀a;䎙cr;愐ilde;䄨ǫޚ\0ޞcy;䐆l耻Ï䃏ʀcfosuެ߂ߐĀiyޱrc;䄴;䐙r;쀀𝔍pf;쀀𝕁ǣ߇\0ߌr;쀀𝒥rcy;䐈kcy;䐄HJacfosߤߨ߽߬߱ࠂࠈcy;䐥cy;䐌ppa;䎚Āey߶dil;䄶;䐚r;쀀𝔎pf;쀀𝕂cr;쀀𝒦րJTaceflmostࠥࠩࠬࡐࡣসে্ੇcy;䐉耻<䀼ʀcmnpr࠷࠼ࡁࡄࡍute;䄹bda;䎛g;柪lacetrf;愒r;憞ƀaeyࡗࡡron;䄽dil;䄻;䐛Āfsࡨ॰tԀACDFRTUVarࡾࢩࢱࣦ࣠ࣼयज़ΐ४ĀnrࢃgleBracket;柨rowƀ;BR࢙࢚࢞憐ar;懤ightArrow;懆eiling;挈oǵࢷ\0ࣃbleBracket;柦nǔࣈ\0࣒eeVector;楡ectorĀ;Bࣛࣜ懃ar;楙loor;挊ightĀAV࣯ࣵrrow;憔ector;楎Āerँगeƀ;AVउऊऐ抣rrow;憤ector;楚iangleƀ;BEतथऩ抲ar;槏qual;抴pƀDTVषूौownVector;楑eeVector;楠ectorĀ;Bॖॗ憿ar;楘ectorĀ;B॥०憼ar;楒ightáΜs̀EFGLSTॾঋকঝঢভqualGreater;拚ullEqual;扦reater;扶ess;檡lantEqual;橽ilde;扲r;쀀𝔏Ā;eঽা拘ftarrow;懚idot;䄿ƀnpwਖਛgȀLRlr৷ਂਐeftĀAR০৬rrow;柵ightArrow;柷ightArrow;柶eftĀarγਊightáοightáϊf;쀀𝕃erĀLRਢਬeftArrow;憙ightArrow;憘ƀchtਾੀੂòࡌ;憰rok;䅁;扪Ѐacefiosuਗ਼અઋp;椅y;䐜Ādl੯iumSpace;恟lintrf;愳r;쀀𝔐nusPlus;戓pf;쀀𝕄cò੶;䎜ҀJacefostuણધભીଔଙඑඞcy;䐊cute;䅃ƀaeyહાron;䅇dil;䅅;䐝ƀgswે૰ativeƀMTV૨ediumSpace;怋hiĀcn૦ëeryThiîtedĀGLଆreaterGreateòٳessLesóੈLine;䀊r;쀀𝔑ȀBnptଢନଷreak;恠BreakingSpace;䂠f;愕ڀ;CDEGHLNPRSTV୕ୖ୪௫ఄ಄ದൡඅ櫬Āoungruent;扢pCap;扭oubleVerticalBar;戦ƀlqxஃஊement;戉ualĀ;Tஒஓ扠ilde;쀀≂̸ists;戄reater;EFGLSTஶஷ扯qual;扱ullEqual;쀀≧̸reater;쀀≫̸ess;批lantEqual;쀀⩾̸ilde;扵umpń௲ownHump;쀀≎̸qual;쀀≏̸eĀfsఊధtTriangleƀ;BEచఛడ拪ar;쀀⧏̸qual;括s̀;EGLSTవశ఼ౄోౘ扮qual;扰reater;扸ess;쀀≪̸lantEqual;쀀⩽̸ilde;扴estedĀGL౨౹reaterGreater;쀀⪢̸essLess;쀀⪡̸recedesƀ;ESಒಓಛ技qual;쀀⪯̸lantEqual;拠ĀeiಫಹverseElement;戌ghtTriangleƀ;BEೋೌ拫ar;쀀⧐̸qual;拭ĀquೝഌuareSuĀbp೨setĀ;Eೳ쀀⊏̸qual;拢ersetĀ;Eഃആ쀀⊐̸qual;拣ƀbcpഓതൎsetĀ;Eഛഞ쀀⊂⃒qual;抈ceedsȀ;ESTലള഻െ抁qual;쀀⪰̸lantEqual;拡ilde;쀀≿̸ersetĀ;E൘൛쀀⊃⃒qual;抉ildeȀ;EFT൮൯൵ൿ扁qual;扄ullEqual;扇ilde;扉erticalBar;戤cr;쀀𝒩ilde耻Ñ䃑;䎝܀Eacdfgmoprstuvලෂෛ෧ขภยา฿ไlig;䅒cute耻Ó䃓Āiyීrc耻Ô䃔;䐞blac;䅐r;쀀𝔒rave耻Ò䃒ƀaei෮ෲcr;䅌ga;䎩cron;䎟pf;쀀𝕆enCurlyĀDQฎบoubleQuote;怜uote;怘;橔Āclวฬr;쀀𝒪ash耻Ø䃘iŬืde耻Õ䃕es;樷ml耻Ö䃖erĀBP๋Āar๐๓r;怾acĀek๚;揞et;掴arenthesis;揜ҀacfhilorsງຊຏຒດຝະrtialD;戂y;䐟r;쀀𝔓i;䎦;䎠usMinus;䂱Āipຢອncareplanåڝf;愙Ȁ;eio຺ູ檻cedesȀ;EST່້扺qual;檯lantEqual;扼ilde;找me;怳Ādpuct;戏ortionĀ;aȥl;戝Āci༁༆r;쀀𝒫;䎨ȀUfos༑༖༛༟OT耻"䀢r;쀀𝔔pf;愚cr;쀀𝒬BEacefhiorsu༾གྷཇའཱིྦྷྪྭ႖ႩႴႾarr;椐G耻®䂮ƀcnrཎནབute;䅔g;柫rĀ;tཛྷཝ憠l;椖ƀaeyཧཬཱron;䅘dil;䅖;䐠Ā;vླྀཹ愜erseĀEUྂྙĀlq྇ྎement;戋uilibrium;懋pEquilibrium;楯r»ཹo;䎡ghtЀACDFTUVa࿁ဢဨၛႇϘĀnr࿆࿒gleBracket;柩rowƀ;BL憒ar;懥eftArrow;懄eiling;按oǵ\0စbleBracket;柧nǔည\0နeeVector;楝ectorĀ;Bဝသ懂ar;楕loor;挋Āerိ၃eƀ;AVဵံြ抢rrow;憦ector;楛iangleƀ;BEၐၑၕ抳ar;槐qual;抵pƀDTVၣၮၸownVector;楏eeVector;楜ectorĀ;Bႂႃ憾ar;楔ectorĀ;B႑႒懀ar;楓Āpuႛ႞f;愝ndImplies;楰ightarrow;懛ĀchႹႼr;愛;憱leDelayed;槴ڀHOacfhimoqstuფჱჷჽᄙᄞᅑᅖᅡᅧᆵᆻᆿĀCcჩხHcy;䐩y;䐨FTcy;䐬cute;䅚ʀ;aeiyᄈᄉᄎᄓᄗ檼ron;䅠dil;䅞rc;䅜;䐡r;쀀𝔖ortȀDLRUᄪᄴᄾᅉownArrow»ОeftArrow»࢚ightArrow»pArrow;憑gma;䎣allCircle;战pf;쀀𝕊ɲᅭ\0\0ᅰt;戚areȀ;ISUᅻᅼᆉᆯ斡ntersection;抓uĀbpᆏᆞsetĀ;Eᆗᆘ抏qual;抑ersetĀ;Eᆨᆩ抐qual;抒nion;抔cr;쀀𝒮ar;拆ȀbcmpᇈᇛሉላĀ;sᇍᇎ拐etĀ;Eᇍᇕqual;抆ĀchᇠህeedsȀ;ESTᇭᇮᇴᇿ扻qual;檰lantEqual;扽ilde;承Tháྌ;我ƀ;esሒሓሣ拑rsetĀ;Eሜም抃qual;抇et»ሓրHRSacfhiorsሾቄቕቱቶኟዂወዑORN耻Þ䃞ADE;愢ĀHcቒcy;䐋y;䐦Ābuቚቜ;䀉;䎤ƀaeyብቪቯron;䅤dil;䅢;䐢r;쀀𝔗ĀeiቻDzኀ\0ኇefore;戴a;䎘ĀcnኘkSpace;쀀 Space;怉ldeȀ;EFTካኬኲኼ戼qual;扃ullEqual;扅ilde;扈pf;쀀𝕋ipleDot;惛Āctዖዛr;쀀𝒯rok;䅦ૡዷጎጚጦ\0ጬጱ\0\0\0\0\0ጸጽ፷ᎅ\0ᐄᐊᐐĀcrዻጁute耻Ú䃚rĀ;oጇገ憟cir;楉rǣጓ\0y;䐎ve;䅬Āiyጞጣrc耻Û䃛;䐣blac;䅰r;쀀𝔘rave耻Ù䃙acr;䅪Ādiፁ፩erĀBPፈ፝Āarፍፐr;䁟acĀekፗፙ;揟et;掵arenthesis;揝onĀ;P፰፱拃lus;抎Āgp፻on;䅲f;쀀𝕌ЀADETadps᎕ᎮᎸᏄϨᏒᏗᏳrrowƀ;BDᅐᎠᎤar;椒ownArrow;懅ownArrow;憕quilibrium;楮eeĀ;AᏋᏌ报rrow;憥ownáϳerĀLRᏞᏨeftArrow;憖ightArrow;憗iĀ;lᏹᏺ䏒on;䎥ing;䅮cr;쀀𝒰ilde;䅨ml耻Ü䃜ҀDbcdefosvᐧᐬᐰᐳᐾᒅᒊᒐᒖash;披ar;櫫y;䐒ashĀ;lᐻᐼ抩;櫦Āerᑃᑅ;拁ƀbtyᑌᑐᑺar;怖Ā;iᑏᑕcalȀBLSTᑡᑥᑪᑴar;戣ine;䁼eparator;杘ilde;所ThinSpace;怊r;쀀𝔙pf;쀀𝕍cr;쀀𝒱dash;抪ʀcefosᒧᒬᒱᒶᒼirc;䅴dge;拀r;쀀𝔚pf;쀀𝕎cr;쀀𝒲Ȁfiosᓋᓐᓒᓘr;쀀𝔛;䎞pf;쀀𝕏cr;쀀𝒳ҀAIUacfosuᓱᓵᓹᓽᔄᔏᔔᔚᔠcy;䐯cy;䐇cy;䐮cute耻Ý䃝Āiyᔉᔍrc;䅶;䐫r;쀀𝔜pf;쀀𝕐cr;쀀𝒴ml;䅸ЀHacdefosᔵᔹᔿᕋᕏᕝᕠᕤcy;䐖cute;䅹Āayᕄᕉron;䅽;䐗ot;䅻Dzᕔ\0ᕛoWidtèa;䎖r;愨pf;愤cr;쀀𝒵ᖃᖊᖐ\0ᖰᖶᖿ\0\0\0\0ᗆᗛᗫᙟ᙭\0ᚕ᚛ᚲᚹ\0ᚾcute耻á䃡reve;䄃̀;Ediuyᖜᖝᖡᖣᖨᖭ戾;쀀∾̳;房rc耻â䃢te肻´̆;䐰lig耻æ䃦Ā;r²ᖺ;쀀𝔞rave耻à䃠ĀepᗊᗖĀfpᗏᗔsym;愵èᗓha;䎱ĀapᗟcĀclᗤᗧr;䄁g;樿ɤᗰ\0\0ᘊʀ;adsvᗺᗻᗿᘁᘇ戧nd;橕;橜lope;橘;橚;elmrszᘘᘙᘛᘞᘿᙏᙙ戠;榤e»ᘙsdĀ;aᘥᘦ戡ѡᘰᘲᘴᘶᘸᘺᘼᘾ;榨;榩;榪;榫;榬;榭;榮;榯tĀ;vᙅᙆ戟bĀ;dᙌᙍ抾;榝Āptᙔᙗh;戢»¹arr;捼Āgpᙣᙧon;䄅f;쀀𝕒;Eaeiopᙻᙽᚂᚄᚇᚊ;橰cir;橯;扊d;手s;䀧roxĀ;eᚒñᚃing耻å䃥ƀctyᚡᚦᚨr;쀀𝒶;䀪mpĀ;eᚯñʈilde耻ã䃣ml耻ä䃤Āciᛂᛈoninôɲnt;樑ࠀNabcdefiklnoprsu᛭ᛱᜰᝃᝈ០៦ᠹᡐᜍ᥈ᥰot;櫭ĀcrᛶkȀcepsᜀᜅᜍᜓong;扌psilon;䏶rime;怵imĀ;e戽q;拍Ŷᜢᜦee;抽edĀ;gᜬᜭ挅e»ᜭrkĀ;tbrk;掶Āoyᜁᝁ;䐱quo;怞ʀcmprtᝓᝡᝤᝨausĀ;eĊĉptyv;榰séᜌnoõēƀahwᝯᝳ;䎲;愶een;扬r;쀀𝔟gcostuvwឍឝឳេ៕៛ƀaiuបពរðݠrc;旯p»፱ƀdptឤឨឭot;樀lus;樁imes;樂ɱឹ\0\0ើcup;樆ar;昅riangleĀdu៍្own;施p;斳plus;樄eåᑄåᒭarow;植ƀakoᠦᠵĀcn៲ᠣkƀlst֫᠂ozenge;槫riangleȀ;dlr᠒᠓᠘斴own;斾eft;旂ight;斸k;搣Ʊᠫ\0ᠳƲᠯ\0ᠱ;斒;斑4;斓ck;斈ĀeoᠾᡍĀ;qᡃᡆ쀀=⃥uiv;쀀≡⃥t;挐Ȁptwxᡙᡞᡧᡬf;쀀𝕓Ā;tᏋᡣom»Ꮜtie;拈DHUVbdhmptuvᢅᢖᢪᢻᣗᣛᣬᤅᤊᤐᤡȀLRlrᢎᢐᢒᢔ;敗;敔;敖;敓ʀ;DUduᢡᢢᢤᢦᢨ敐;敦;敩;敤;敧ȀLRlrᢳᢵᢷᢹ;敝;敚;敜;教;HLRhlrᣊᣋᣍᣏᣑᣓᣕ救;敬;散;敠;敫;敢;敟ox;槉ȀLRlrᣤᣦᣨᣪ;敕;敒;攐;攌ʀ;DUduڽ;敥;敨;攬;攴inus;抟lus;択imes;抠ȀLRlrᤙᤛᤝ;敛;敘;攘;攔;HLRhlrᤰᤱᤳᤵᤷ᤻᤹攂;敪;敡;敞;攼;攤;攜Āevģbar耻¦䂦Ȁceioᥑᥖᥚᥠr;쀀𝒷mi;恏mĀ;elƀ;bhᥨᥩᥫ䁜;槅sub;柈ŬᥴlĀ;e怢t»pƀ;Eeįᦅᦇ;檮Ā;qۜۛೡᦧ\0᧨ᨑᨕᨲ\0ᨷᩐ\0\0᪴\0\0᫁\0\0ᬡᬮ᭒\0᯽\0ᰌƀcprᦲute;䄇̀;abcdsᦿᧀᧄ᧕᧙戩nd;橄rcup;橉Āau᧒p;橋p;橇ot;橀;쀀∩︀Āeo᧢᧥t;恁îړȀaeiu᧰᧻ᨁᨅǰ᧵\0᧸s;橍on;䄍dil耻ç䃧rc;䄉psĀ;sᨌᨍ橌m;橐ot;䄋ƀdmnᨛᨠᨦil肻¸ƭptyv;榲t脀¢;eᨭᨮ䂢räƲr;쀀𝔠ƀceiᨽᩀᩍy;䑇ckĀ;mᩇᩈ朓ark»ᩈ;䏇r;Ecefms᩠ᩢᩫ᪤᪪旋;槃ƀ;elᩩᩪᩭ䋆q;扗eɡᩴ\0\0᪈rrowĀlr᩼᪁eft;憺ight;憻ʀRSacd᪒᪔᪖»ཇ;擈st;抛irc;抚ash;抝nint;樐id;櫯cir;槂ubsĀ;u᪻᪼晣it»᪼ˬ᫇\0ᬊonĀ;eᫍᫎ䀺Ā;qÇÆɭ\0\0aĀ;t䀬;䁀ƀ;fl戁îᅠeĀmxent»eóɍǧ\0ᬇĀ;dኻᬂot;橭nôɆƀfryᬐᬔᬗ;쀀𝕔oäɔ脀©;sŕᬝr;愗Āaoᬥᬩrr;憵ss;朗Ācuᬲᬷr;쀀𝒸Ābpᬼ᭄Ā;eᭁᭂ櫏;櫑Ā;eᭉᭊ櫐;櫒dot;拯delprvw᭠᭬᭷ᮂᮬᯔarrĀlr᭨᭪;椸;椵ɰ᭲\0\0᭵r;拞c;拟arrĀ;pᮀ憶;椽̀;bcdosᮏᮐᮖᮡᮥᮨ截rcap;橈Āauᮛᮞp;橆p;橊ot;抍r;橅;쀀∪︀Ȁalrv᮵ᮿᯞᯣrrĀ;mᮼᮽ憷;椼yƀevwᯇᯔᯘqɰᯎ\0\0ᯒreã᭳uã᭵ee;拎edge;拏en耻¤䂤earrowĀlrᯮ᯳eft»ᮀight»ᮽeäᯝĀciᰁᰇoninôǷnt;戱lcty;挭ঀAHabcdefhijlorstuwz᰻᰿ᱝᱩᱵᲞᲬᲷᴍᵻᶑᶫᶻ᷆᷍ròar;楥Ȁglrs᱈ᱍ᱒᱔ger;怠eth;愸òᄳhĀ;vᱚᱛ怐»ऊūᱡᱧarow;椏aã̕Āayᱮᱳron;䄏;䐴ƀ;ao̲ᱼᲄĀgrʿᲁr;懊tseq;橷ƀglmᲑᲔᲘ耻°䂰ta;䎴ptyv;榱ĀirᲣᲨsht;楿;쀀𝔡arĀlrᲳᲵ»ࣜ»သʀaegsv᳂᳖᳜᳠mƀ;oș᳔ndĀ;ș᳑uit;晦amma;䏝in;拲ƀ;io᳧᳨᳸䃷de脀÷;o᳧ᳰntimes;拇nø᳷cy;䑒cɯᴆ\0\0ᴊrn;挞op;挍ʀlptuwᴘᴝᴢᵉᵕlar;䀤f;쀀𝕕ʀ;emps̋ᴭᴷᴽᵂqĀ;d͒ᴳot;扑inus;戸lus;戔quare;抡blebarwedgåúnƀadhᄮᵝᵧownarrowóᲃarpoonĀlrᵲᵶefôᲴighôᲶŢᵿᶅkaro÷གɯᶊ\0\0ᶎrn;挟op;挌ƀcotᶘᶣᶦĀryᶝᶡ;쀀𝒹;䑕l;槶rok;䄑Ādrᶰᶴot;拱iĀ;fᶺ᠖斿Āah᷀᷃ròЩaòྦangle;榦Āci᷒ᷕy;䑟grarr;柿ऀDacdefglmnopqrstuxḁḉḙḸոḼṉṡṾấắẽỡἪἷὄĀDoḆᴴoôĀcsḎḔute耻é䃩ter;橮ȀaioyḢḧḱḶron;䄛rĀ;cḭḮ扖耻ê䃪lon;払;䑍ot;䄗ĀDrṁṅot;扒;쀀𝔢ƀ;rsṐṑṗ檚ave耻è䃨Ā;dṜṝ檖ot;檘Ȁ;ilsṪṫṲṴ檙nters;揧;愓Ā;dṹṺ檕ot;檗ƀapsẅẉẗcr;䄓tyƀ;svẒẓẕ戅et»ẓpĀ1;ẝẤijạả;怄;怅怃ĀgsẪẬ;䅋p;怂ĀgpẴẸon;䄙f;쀀𝕖ƀalsỄỎỒrĀ;sỊị拕l;槣us;橱iƀ;lvỚớở䎵on»ớ;䏵ȀcsuvỪỳἋἣĀioữḱrc»Ḯɩỹ\0\0ỻíՈantĀglἂἆtr»ṝess»ṺƀaeiἒἚls;䀽st;扟vĀ;DȵἠD;橸parsl;槥ĀDaἯἳot;打rr;楱ƀcdiἾὁỸr;愯oô͒ĀahὉὋ;䎷耻ð䃰Āmrὓὗl耻ë䃫o;悬ƀcipὡὤὧl;䀡sôծĀeoὬὴctatioîՙnentialåչৡᾒ\0ᾞ\0ᾡᾧ\0\0ῆῌ\0ΐ\0ῦῪ \0 ⁚llingdotseñṄy;䑄male;晀ƀilrᾭᾳ῁lig;耀ffiɩᾹ\0\0᾽g;耀ffig;耀ffl;쀀𝔣lig;耀filig;쀀fjƀaltῙῡt;晭ig;耀flns;斱of;䆒ǰ΅\0ῳf;쀀𝕗ĀakֿῷĀ;vῼ´拔;櫙artint;樍Āao⁕Ācs‑⁒ႉ‸⁅⁈\0⁐β•‥‧\0耻½䂽;慓耻¼䂼;慕;慙;慛Ƴ‴\0‶;慔;慖ʴ‾⁁\0\0⁃耻¾䂾;慗;慜5;慘ƶ⁌\0⁎;慚;慝8;慞l;恄wn;挢cr;쀀𝒻ࢀEabcdefgijlnorstv₂₉₥₰₴⃰℃ℒℸ̗ℾ⅒↞Ā;lٍ₇;檌ƀcmpₐₕute;䇵maĀ;dₜ᳚䎳;檆reve;䄟Āiy₪₮rc;䄝;䐳ot;䄡Ȁ;lqsؾق₽ƀ;qsؾٌlanô٥Ȁ;cdl٥⃒⃥⃕c;檩otĀ;o⃜⃝檀Ā;l⃢⃣檂;檄Ā;e⃪⃭쀀⋛︀s;檔r;쀀𝔤Ā;gٳ؛mel;愷cy;䑓Ȁ;Eajٚℌℎℐ;檒;檥;檤ȀEaesℛℝ℩ℴ;扩pĀ;p℣ℤ檊rox»ℤĀ;q℮ℯ檈Ā;q℮ℛim;拧pf;쀀𝕘Āci⅃ⅆr;愊mƀ;el٫ⅎ⅐;檎;檐茀>;cdlqrⅠⅪⅮⅳⅹĀciⅥⅧ;檧r;橺ot;拗Par;榕uest;橼ʀadelsↄⅪ←ٖ↛ǰ↉\0proør;楸qĀlqؿ↖lesó₈ií٫Āen↣↭rtneqq;쀀≩︀Å↪ԀAabcefkosy⇄⇇⇱⇵⇺∘∝∯≨≽ròΠȀilmr⇐⇔⇗⇛rsðᒄf»․ilôکĀdr⇠⇤cy;䑊ƀ;cwࣴ⇫⇯ir;楈;憭ar;意irc;䄥ƀalr∁∎∓rtsĀ;u∉∊晥it»∊lip;怦con;抹r;쀀𝔥sĀew∣∩arow;椥arow;椦ʀamopr∺∾≃≞≣rr;懿tht;戻kĀlr≉≓eftarrow;憩ightarrow;憪f;쀀𝕙bar;怕ƀclt≯≴≸r;쀀𝒽asè⇴rok;䄧Ābp⊂⊇ull;恃hen»ᱛૡ⊣\0⊪\0⊸⋅⋎\0⋕⋳\0\0⋸⌢⍧⍢⍿\0⎆⎪⎴cute耻í䃭ƀ;iyݱ⊰⊵rc耻î䃮;䐸Ācx⊼⊿y;䐵cl耻¡䂡ĀfrΟ⋉;쀀𝔦rave耻ì䃬Ȁ;inoܾ⋝⋩⋮Āin⋢⋦nt;樌t;戭fin;槜ta;愩lig;䄳ƀaop⋾⌚⌝ƀcgt⌅⌈⌗r;䄫ƀelpܟ⌏⌓inåގarôܠh;䄱f;抷ed;䆵ʀ;cfotӴ⌬⌱⌽⍁are;愅inĀ;t⌸⌹戞ie;槝doô⌙ʀ;celpݗ⍌⍐⍛⍡al;抺Āgr⍕⍙eróᕣã⍍arhk;樗rod;樼Ȁcgpt⍯⍲⍶⍻y;䑑on;䄯f;쀀𝕚a;䎹uest耻¿䂿Āci⎊⎏r;쀀𝒾nʀ;EdsvӴ⎛⎝⎡ӳ;拹ot;拵Ā;v⎦⎧拴;拳Ā;iݷ⎮lde;䄩ǫ⎸\0⎼cy;䑖l耻ï䃯̀cfmosu⏌⏗⏜⏡⏧⏵Āiy⏑⏕rc;䄵;䐹r;쀀𝔧ath;䈷pf;쀀𝕛ǣ⏬\0⏱r;쀀𝒿rcy;䑘kcy;䑔Ѐacfghjos␋␖␢ppaĀ;v␓␔䎺;䏰Āey␛␠dil;䄷;䐺r;쀀𝔨reen;䄸cy;䑅cy;䑜pf;쀀𝕜cr;쀀𝓀ABEHabcdefghjlmnoprstuv⑰⒁⒆⒍⒑┎┽╚▀♎♞♥♹♽⚚⚲⛘❝❨➋⟀⠁⠒ƀart⑷⑺⑼ròòΕail;椛arr;椎Ā;gঔ⒋;檋ar;楢ॣ⒥\0⒪\0⒱\0\0\0\0\0⒵Ⓔ\0ⓆⓈⓍ\0⓹ute;䄺mptyv;榴raîࡌbda;䎻gƀ;dlࢎⓁⓃ;榑åࢎ;檅uo耻«䂫rЀ;bfhlpst࢙ⓞⓦⓩ⓫⓮⓱⓵Ā;f࢝ⓣs;椟s;椝ë≒p;憫l;椹im;楳l;憢ƀ;ae⓿─┄檫il;椙Ā;s┉┊檭;쀀⪭︀ƀabr┕┙┝rr;椌rk;杲Āak┢┬cĀek┨┪;䁻;䁛Āes┱┳;榋lĀdu┹┻;榏;榍Ȁaeuy╆╋╖╘ron;䄾Ādi═╔il;䄼ìࢰâ┩;䐻Ȁcqrs╣╦╭╽a;椶uoĀ;rนᝆĀdu╲╷har;楧shar;楋h;憲ʀ;fgqs▋▌উ◳◿扤tʀahlrt▘▤▷◂◨rrowĀ;t࢙□aé⓶arpoonĀdu▯▴own»њp»०eftarrows;懇ightƀahs◍◖◞rrowĀ;sࣴࢧarpoonóquigarro÷⇰hreetimes;拋ƀ;qs▋ও◺lanôবʀ;cdgsব☊☍☝☨c;檨otĀ;o☔☕橿Ā;r☚☛檁;檃Ā;e☢☥쀀⋚︀s;檓ʀadegs☳☹☽♉♋pproøⓆot;拖qĀgq♃♅ôউgtò⒌ôছiíলƀilr♕࣡♚sht;楼;쀀𝔩Ā;Eজ♣;檑š♩♶rĀdu▲♮Ā;l॥♳;楪lk;斄cy;䑙ʀ;achtੈ⚈⚋⚑⚖rò◁orneòᴈard;楫ri;旺Āio⚟⚤dot;䅀ustĀ;a⚬⚭掰che»⚭ȀEaes⚻⚽⛉⛔;扨pĀ;p⛃⛄檉rox»⛄Ā;q⛎⛏檇Ā;q⛎⚻im;拦Ѐabnoptwz⛩⛴⛷✚✯❁❇❐Ānr⛮⛱g;柬r;懽rëࣁgƀlmr⛿✍✔eftĀar০✇ightá৲apsto;柼ightá৽parrowĀlr✥✩efô⓭ight;憬ƀafl✶✹✽r;榅;쀀𝕝us;樭imes;樴š❋❏st;戗áፎƀ;ef❗❘᠀旊nge»❘arĀ;l❤❥䀨t;榓ʀachmt❳❶❼➅➇ròࢨorneòᶌarĀ;d➃;業;怎ri;抿̀achiqt➘➝ੀ➢➮➻quo;怹r;쀀𝓁mƀ;egল➪➬;檍;檏Ābu┪➳oĀ;rฟ➹;怚rok;䅂萀<;cdhilqrࠫ⟒☹⟜⟠⟥⟪⟰Āci⟗⟙;檦r;橹reå◲mes;拉arr;楶uest;橻ĀPi⟵⟹ar;榖ƀ;ef⠀भ旃rĀdu⠇⠍shar;楊har;楦Āen⠗⠡rtneqq;쀀≨︀Å⠞܀Dacdefhilnopsu⡀⡅⢂⢎⢓⢠⢥⢨⣚⣢⣤ઃ⣳⤂Dot;戺Ȁclpr⡎⡒⡣⡽r耻¯䂯Āet⡗⡙;時Ā;e⡞⡟朠se»⡟Ā;sျ⡨toȀ;dluျ⡳⡷⡻owîҌefôएðᏑker;斮Āoy⢇⢌mma;権;䐼ash;怔asuredangle»ᘦr;쀀𝔪o;愧ƀcdn⢯⢴⣉ro耻µ䂵Ȁ;acdᑤ⢽⣀⣄sôᚧir;櫰ot肻·Ƶusƀ;bd⣒ᤃ⣓戒Ā;uᴼ⣘;横ţ⣞⣡p;櫛ò−ðઁĀdp⣩⣮els;抧f;쀀𝕞Āct⣸⣽r;쀀𝓂pos»ᖝƀ;lm⤉⤊⤍䎼timap;抸ఀGLRVabcdefghijlmoprstuvw⥂⥓⥾⦉⦘⧚⧩⨕⨚⩘⩝⪃⪕⪤⪨⬄⬇⭄⭿⮮ⰴⱧⱼ⳩Āgt⥇⥋;쀀⋙̸Ā;v⥐쀀≫⃒ƀelt⥚⥲⥶ftĀar⥡⥧rrow;懍ightarrow;懎;쀀⋘̸Ā;v⥻ే쀀≪⃒ightarrow;懏ĀDd⦎⦓ash;抯ash;抮ʀbcnpt⦣⦧⦬⦱⧌la»˞ute;䅄g;쀀∠⃒ʀ;Eiop⦼⧀⧅⧈;쀀⩰̸d;쀀≋̸s;䅉roøurĀ;a⧓⧔普lĀ;s⧓ସdz⧟\0⧣p肻\xA0ଷmpĀ;e௹ఀʀaeouy⧴⧾⨃⨐⨓ǰ⧹\0⧻;橃on;䅈dil;䅆ngĀ;dൾ⨊ot;쀀⩭̸p;橂;䐽ash;怓;Aadqsxஒ⨩⨭⨻⩁⩅⩐rr;懗rĀhr⨳⨶k;椤Ā;oᏲᏰot;쀀≐̸uiöୣĀei⩊⩎ar;椨íistĀ;sடr;쀀𝔫ȀEest⩦⩹⩼ƀ;qs⩭ƀ;qs⩴lanôií௪Ā;rஶ⪁»ஷƀAap⪊⪍⪑rò⥱rr;憮ar;櫲ƀ;svྍ⪜ྌĀ;d⪡⪢拼;拺cy;䑚AEadest⪷⪺⪾⫂⫅⫶⫹rò⥦;쀀≦̸rr;憚r;急Ȁ;fqs⫎⫣⫯tĀar⫔⫙rro÷⫁ightarro÷⪐ƀ;qs⪺⫪lanôౕĀ;sౕ⫴»శiíౝĀ;rవ⫾iĀ;eచథiäඐĀpt⬌⬑f;쀀𝕟膀¬;in⬙⬚⬶䂬nȀ;Edvஉ⬤⬨⬮;쀀⋹̸ot;쀀⋵̸ǡஉ⬳⬵;拷;拶iĀ;vಸ⬼ǡಸ⭁⭃;拾;拽ƀaor⭋⭣⭩rȀ;ast⭕⭚⭟lleìl;쀀⫽⃥;쀀∂̸lint;樔ƀ;ceಒ⭰⭳uåಥĀ;cಘ⭸Ā;eಒ⭽ñಘȀAait⮈⮋⮝⮧rò⦈rrƀ;cw⮔⮕⮙憛;쀀⤳̸;쀀↝̸ghtarrow»⮕riĀ;eೋೖchimpqu⮽⯍⯙⬄⯤⯯Ȁ;cerല⯆ഷ⯉uå;쀀𝓃ortɭ⬅\0\0⯖ará⭖mĀ;e൮⯟Ā;q൴൳suĀbp⯫⯭ååഋƀbcp⯶ⰑⰙȀ;Ees⯿ⰀഢⰄ抄;쀀⫅̸etĀ;eഛⰋqĀ;qണⰀcĀ;eലⰗñസȀ;EesⰢⰣൟⰧ抅;쀀⫆̸etĀ;e൘ⰮqĀ;qൠⰣȀgilrⰽⰿⱅⱇìௗlde耻ñ䃱çృiangleĀlrⱒⱜeftĀ;eచⱚñదightĀ;eೋⱥñĀ;mⱬⱭ䎽ƀ;esⱴⱵⱹ䀣ro;愖p;怇ҀDHadgilrsⲏⲔⲙⲞⲣⲰⲶⳓⳣash;抭arr;椄p;쀀≍⃒ash;抬ĀetⲨⲬ;쀀≥⃒;쀀>⃒nfin;槞ƀAetⲽⳁⳅrr;椂;쀀≤⃒Ā;rⳊⳍ쀀<⃒ie;쀀⊴⃒ĀAtⳘⳜrr;椃rie;쀀⊵⃒im;쀀∼⃒ƀAan⳰ⴂrr;懖rĀhr⳺⳽k;椣Ā;oᏧᏥear;椧ቓ᪕\0\0\0\0\0\0\0\0\0\0\0\0\0ⴭ\0ⴸⵈⵠⵥⶄᬇ\0\0ⶍⶫ\0ⷈⷎ\0ⷜ⸙⸫⸾⹃Ācsⴱ᪗ute耻ó䃳ĀiyⴼⵅrĀ;cⵂ耻ô䃴;䐾ʀabios᪠ⵒⵗLjⵚlac;䅑v;樸old;榼lig;䅓Ācrir;榿;쀀𝔬ͯ\0\0\0ⶂn;䋛ave耻ò䃲;槁Ābmⶈ෴ar;榵Ȁacitⶕⶥⶨrò᪀Āirⶠr;榾oss;榻nå๒;槀ƀaeiⶱⶵⶹcr;䅍ga;䏉ƀcdnⷀⷅǍron;䎿;榶pf;쀀𝕠ƀaelⷔǒr;榷rp;榹;adiosvⷪⷫⷮ⸈⸍⸐⸖戨rò᪆Ȁ;efmⷷⷸ⸂⸅橝rĀ;oⷾⷿ愴f»ⷿ耻ª䂪耻º䂺gof;抶r;橖lope;橗;橛ƀclo⸟⸡⸧ò⸁ash耻ø䃸l;折iŬⸯ⸴de耻õ䃵esĀ;aǛ⸺s;樶ml耻ö䃶bar;挽ૡ\0\0⺀⺝\0⺢⺹\0\0⻋ຜ\0⼓\0\0⼫⾼\0⿈rȀ;astЃ脀¶;l䂶leìЃɩ\0\0m;櫳;櫽y;䐿rʀcimpt⺋⺏⺓ᡥ⺗nt;䀥od;䀮il;怰enk;怱r;쀀𝔭ƀimo⺨⺰⺴Ā;v⺭⺮䏆;䏕maô੶ne;明ƀ;tv⺿⻀⻈䏀chfork»´;䏖Āau⻏⻟nĀck⻕⻝kĀ;h⇴⻛;愎ö⇴sҀ;abcdemst⻳ᤈ⼄⼆⼊⼎䀫cir;樣ir;樢Āouᵀ⼂;樥;橲n肻±ຝim;樦wo;樧ƀipu⼙⼠⼥ntint;樕f;쀀𝕡nd耻£䂣Ԁ;Eaceinosu່⼿⽁⽄⽇⾁⾉⾒⽾⾶;檳p;檷uå໙Ā;c໎⽌̀;acens່⽙⽟⽦⽨⽾pproø⽃urlyeñ໙ñ໎ƀaes⽯⽶⽺pprox;檹qq;檵im;拨iíໟmeĀ;s⾈ຮ怲ƀEas⽸⾐⽺ð⽵ƀdfp⾙⾯ƀals⾠⾥⾪lar;挮ine;挒urf;挓Ā;t⾴ïrel;抰Āci⿀⿅r;쀀𝓅;䏈ncsp;怈̀fiopsu⋢⿱r;쀀𝔮pf;쀀𝕢rime;恗cr;쀀𝓆ƀaeo⿸〉〓tĀei々rnionóڰnt;樖stĀ;e【】䀿ñἙô༔ABHabcdefhilmnoprstuxけさすムㄎㄫㅇㅢㅲㆎ㈆㈕㈤㈩㉘㉮㉲㊐㊰㊷ƀartぇおがròႳòϝail;検aròᱥar;楤cdenqrtとふへみわゔヌĀeuねぱ;쀀∽̱te;䅕iãᅮmptyv;榳gȀ;del࿑らるろ;榒;榥å࿑uo耻»䂻rր;abcfhlpstwガクシスゼゾダッデナp;極Ā;fゴs;椠;椳s;椞ë≝ð✮l;楅im;楴l;憣;憝Āaiパフil;椚oĀ;nホボ戶aló༞ƀabrョリヮrò៥rk;杳ĀakンヽcĀekヹ・;䁽;䁝Āes;榌lĀduㄊㄌ;榎;榐Ȁaeuyㄗㄜㄧㄩron;䅙Ādiㄡㄥil;䅗ìâヺ;䑀Ȁclqsㄴㄷㄽㅄa;椷dhar;楩uoĀ;rȎȍh;憳ƀacgㅎㅟངlȀ;ipsླྀㅘㅛႜnåႻarôྩt;断ƀilrㅩဣㅮsht;楽;쀀𝔯ĀaoㅷㆆrĀduㅽㅿ»ѻĀ;l႑ㆄ;楬Ā;vㆋㆌ䏁;䏱ƀgns㆕ㇹㇼht̀ahlrstㆤㆰ㇂㇘rrowĀ;tㆭaéトarpoonĀduㆻㆿowîㅾp»႒eftĀah㇊㇐rrowóarpoonóՑightarrows;應quigarro÷ニhreetimes;拌g;䋚ingdotseñἲƀahm㈍㈐㈓ròaòՑ;怏oustĀ;a㈞掱che»mid;櫮Ȁabpt㈲㈽㉀㉒Ānr㈷㈺g;柭r;懾rëဃƀafl㉇㉊㉎r;榆;쀀𝕣us;樮imes;樵Āap㉝㉧rĀ;g㉣㉤䀩t;榔olint;樒arò㇣Ȁachq㉻㊀Ⴜ㊅quo;怺r;쀀𝓇Ābu・㊊oĀ;rȔȓƀhir㊗㊛㊠reåㇸmes;拊iȀ;efl㊪ၙᠡ㊫方tri;槎luhar;楨;愞ൡ㋕㋛㋟㌬㌸㍱\0㍺㎤\0\0㏬㏰\0㐨㑈㑚㒭㒱㓊㓱\0㘖\0\0㘳cute;䅛quï➺Ԁ;Eaceinpsyᇭ㋳㋵㋿㌂㌋㌏㌟㌦㌩;檴ǰ㋺\0㋼;檸on;䅡uåᇾĀ;dᇳ㌇il;䅟rc;䅝ƀEas㌖㌘㌛;檶p;檺im;择olint;樓iíሄ;䑁otƀ;be㌴ᵇ㌵担;橦Aacmstx㍆㍊㍗㍛㍞㍣㍭rr;懘rĀhr㍐㍒ë∨Ā;oਸ਼t耻§䂧i;䀻war;椩mĀin㍩ðnuóñt;朶rĀ;o㍶⁕쀀𝔰Ȁacoy㎂㎆㎑㎠rp;景Āhy㎋㎏cy;䑉;䑈rtɭ㎙\0\0㎜iäᑤaraì耻䂭Āgm㎨㎴maƀ;fv㎱㎲㎲䏃;䏂Ѐ;deglnprካ㏅㏉㏎㏖㏞㏡㏦ot;橪Ā;qኰĀ;E㏓㏔檞;檠Ā;E㏛㏜檝;檟e;扆lus;樤arr;楲aròᄽȀaeit㏸㐈㐏㐗Āls㏽㐄lsetmé㍪hp;樳parsl;槤Ādlᑣ㐔e;挣Ā;e㐜㐝檪Ā;s㐢㐣檬;쀀⪬︀ƀflp㐮㐳㑂tcy;䑌Ā;b㐸㐹䀯Ā;a㐾㐿槄r;挿f;쀀𝕤aĀdr㑍ЂesĀ;u㑔㑕晠it»㑕ƀcsu㑠㑹㒟Āau㑥㑯pĀ;sᆈ㑫;쀀⊓︀pĀ;sᆴ㑵;쀀⊔︀uĀbp㑿㒏ƀ;esᆗᆜ㒆etĀ;eᆗ㒍ñᆝƀ;esᆨᆭ㒖etĀ;eᆨ㒝ñᆮƀ;afᅻ㒦ְrť㒫ֱ»ᅼaròᅈȀcemt㒹㒾㓂㓅r;쀀𝓈tmîñiì㐕aræᆾĀar㓎㓕rĀ;f㓔ឿ昆Āan㓚㓭ightĀep㓣㓪psiloîỠhé⺯s»⡒ʀbcmnp㓻㕞ሉ㖋㖎Ҁ;Edemnprs㔎㔏㔑㔕㔞㔣㔬㔱㔶抂;櫅ot;檽Ā;dᇚ㔚ot;櫃ult;櫁ĀEe㔨㔪;櫋;把lus;檿arr;楹ƀeiu㔽㕒㕕tƀ;en㔎㕅㕋qĀ;qᇚ㔏eqĀ;q㔫㔨m;櫇Ābp㕚㕜;櫕;櫓c̀;acensᇭ㕬㕲㕹㕻㌦pproø㋺urlyeñᇾñᇳƀaes㖂㖈㌛pproø㌚qñ㌗g;晪ڀ123;Edehlmnps㖩㖬㖯ሜ㖲㖴㗀㗉㗕㗚㗟㗨㗭耻¹䂹耻²䂲耻³䂳;櫆Āos㖹㖼t;檾ub;櫘Ā;dሢ㗅ot;櫄sĀou㗏㗒l;柉b;櫗arr;楻ult;櫂ĀEe㗤㗦;櫌;抋lus;櫀ƀeiu㗴㘉㘌tƀ;enሜ㗼㘂qĀ;qሢ㖲eqĀ;q㗧㗤m;櫈Ābp㘑㘓;櫔;櫖ƀAan㘜㘠㘭rr;懙rĀhr㘦㘨ë∮Ā;oਫwar;椪lig耻ß䃟㙑㙝㙠ዎ㙳㙹\0㙾㛂\0\0\0\0\0㛛㜃\0㜉㝬\0\0\0㞇ɲ㙖\0\0㙛get;挖;䏄rëƀaey㙦㙫㙰ron;䅥dil;䅣;䑂lrec;挕r;쀀𝔱Ȁeiko㚆㚝㚵㚼Dz㚋\0㚑eĀ4fኄኁaƀ;sv㚘㚙㚛䎸ym;䏑Ācn㚢㚲kĀas㚨㚮pproøim»ኬsðኞĀas㚺㚮ðrn耻þ䃾Ǭ̟㛆⋧es膀×;bd㛏㛐㛘䃗Ā;aᤏ㛕r;樱;樰ƀeps㛡㛣㜀á⩍Ȁ;bcf҆㛬㛰㛴ot;挶ir;櫱Ā;o㛹㛼쀀𝕥rk;櫚á㍢rime;怴ƀaip㜏㜒㝤dåቈadempst㜡㝍㝀㝑㝗㝜㝟ngleʀ;dlqr㜰㜱㜶㝀㝂斵own»ᶻeftĀ;e⠀㜾ñम;扜ightĀ;e㊪㝋ñၚot;旬inus;樺lus;樹b;槍ime;樻ezium;揢ƀcht㝲㝽㞁Āry㝷㝻;쀀𝓉;䑆cy;䑛rok;䅧Āio㞋㞎xôheadĀlr㞗㞠eftarro÷ࡏightarrow»ཝऀAHabcdfghlmoprstuw㟐㟓㟗㟤㟰㟼㠎㠜㠣㠴㡑㡝㡫㢩㣌㣒㣪㣶ròϭar;楣Ācr㟜㟢ute耻ú䃺òᅐrǣ㟪\0㟭y;䑞ve;䅭Āiy㟵㟺rc耻û䃻;䑃ƀabh㠃㠆㠋ròᎭlac;䅱aòᏃĀir㠓㠘sht;楾;쀀𝔲rave耻ù䃹š㠧㠱rĀlr㠬㠮»ॗ»ႃlk;斀Āct㠹㡍ɯ㠿\0\0㡊rnĀ;e㡅㡆挜r»㡆op;挏ri;旸Āal㡖㡚cr;䅫肻¨͉Āgp㡢㡦on;䅳f;쀀𝕦̀adhlsuᅋ㡸㡽፲㢑㢠ownáᎳarpoonĀlr㢈㢌efô㠭ighô㠯iƀ;hl㢙㢚㢜䏅»ᏺon»㢚parrows;懈ƀcit㢰㣄㣈ɯ㢶\0\0㣁rnĀ;e㢼㢽挝r»㢽op;挎ng;䅯ri;旹cr;쀀𝓊ƀdir㣙㣝㣢ot;拰lde;䅩iĀ;f㜰㣨»᠓Āam㣯㣲rò㢨l耻ü䃼angle;榧ހABDacdeflnoprsz㤜㤟㤩㤭㦵㦸㦽㧟㧤㧨㧳㧹㧽㨁㨠ròϷarĀ;v㤦㤧櫨;櫩asèϡĀnr㤲㤷grt;榜eknprst㓣㥆㥋㥒㥝㥤㦖appá␕othinçẖƀhir㓫⻈㥙opô⾵Ā;hᎷ㥢ïㆍĀiu㥩㥭gmá㎳Ābp㥲㦄setneqĀ;q㥽㦀쀀⊊︀;쀀⫋︀setneqĀ;q㦏㦒쀀⊋︀;쀀⫌︀Āhr㦛㦟etá㚜iangleĀlr㦪㦯eft»थight»ၑy;䐲ash»ံƀelr㧄㧒㧗ƀ;beⷪ㧋㧏ar;抻q;扚lip;拮Ābt㧜ᑨaòᑩr;쀀𝔳tré㦮suĀbp㧯㧱»ജ»൙pf;쀀𝕧roðtré㦴Ācu㨆㨋r;쀀𝓋Ābp㨐㨘nĀEe㦀㨖»㥾nĀEe㦒㨞»㦐igzag;榚cefoprs㨶㨻㩖㩛㩔㩡㩪irc;䅵Ādi㩀㩑Ābg㩅㩉ar;機eĀ;qᗺ㩏;扙erp;愘r;쀀𝔴pf;쀀𝕨Ā;eᑹ㩦atèᑹcr;쀀𝓌ૣណ㪇\0㪋\0㪐㪛\0\0㪝㪨㪫㪯\0\0㫃㫎\0㫘ៜtré៑r;쀀𝔵ĀAa㪔㪗ròσrò৶;䎾ĀAa㪡㪤ròθrò৫að✓is;拻ƀdptឤ㪵㪾Āfl㪺ឩ;쀀𝕩imåឲĀAa㫇㫊ròώròਁĀcq㫒ីr;쀀𝓍Āpt៖㫜ré។Ѐacefiosu㫰㫽㬈㬌㬑㬕㬛㬡cĀuy㫶㫻te耻ý䃽;䑏Āiy㬂㬆rc;䅷;䑋n耻¥䂥r;쀀𝔶cy;䑗pf;쀀𝕪cr;쀀𝓎Ācm㬦㬩y;䑎l耻ÿ䃿Ԁacdefhiosw㭂㭈㭔㭘㭤㭩㭭㭴㭺㮀cute;䅺Āay㭍㭒ron;䅾;䐷ot;䅼Āet㭝㭡træᕟa;䎶r;쀀𝔷cy;䐶grarr;懝pf;쀀𝕫cr;쀀𝓏Ājn㮅㮇;怍j;怌`.split(``).map(e=>e.charCodeAt(0))),jM=new Uint16Array(`Ȁaglq \x1Bɭ\0\0p;䀦os;䀧t;䀾t;䀼uot;䀢`.split(``).map(e=>e.charCodeAt(0))),MM=new Map([[0,65533],[128,8364],[130,8218],[131,402],[132,8222],[133,8230],[134,8224],[135,8225],[136,710],[137,8240],[138,352],[139,8249],[140,338],[142,381],[145,8216],[146,8217],[147,8220],[148,8221],[149,8226],[150,8211],[151,8212],[152,732],[153,8482],[154,353],[155,8250],[156,339],[158,382],[159,376]]),NM=String.fromCodePoint??function(e){let t=``;return e>65535&&(e-=65536,t+=String.fromCharCode(e>>>10&1023|55296),e=56320|e&1023),t+=String.fromCharCode(e),t};function PM(e){return e>=55296&&e<=57343||e>1114111?65533:MM.get(e)??e}var FM;(function(e){e[e.NUM=35]=`NUM`,e[e.SEMI=59]=`SEMI`,e[e.EQUALS=61]=`EQUALS`,e[e.ZERO=48]=`ZERO`,e[e.NINE=57]=`NINE`,e[e.LOWER_A=97]=`LOWER_A`,e[e.LOWER_F=102]=`LOWER_F`,e[e.LOWER_X=120]=`LOWER_X`,e[e.LOWER_Z=122]=`LOWER_Z`,e[e.UPPER_A=65]=`UPPER_A`,e[e.UPPER_F=70]=`UPPER_F`,e[e.UPPER_Z=90]=`UPPER_Z`})(FM||={});var IM=32,LM;(function(e){e[e.VALUE_LENGTH=49152]=`VALUE_LENGTH`,e[e.BRANCH_LENGTH=16256]=`BRANCH_LENGTH`,e[e.JUMP_TABLE=127]=`JUMP_TABLE`})(LM||={});function RM(e){return e>=FM.ZERO&&e<=FM.NINE}function zM(e){return e>=FM.UPPER_A&&e<=FM.UPPER_F||e>=FM.LOWER_A&&e<=FM.LOWER_F}function BM(e){return e>=FM.UPPER_A&&e<=FM.UPPER_Z||e>=FM.LOWER_A&&e<=FM.LOWER_Z||RM(e)}function VM(e){return e===FM.EQUALS||BM(e)}var HM;(function(e){e[e.EntityStart=0]=`EntityStart`,e[e.NumericStart=1]=`NumericStart`,e[e.NumericDecimal=2]=`NumericDecimal`,e[e.NumericHex=3]=`NumericHex`,e[e.NamedEntity=4]=`NamedEntity`})(HM||={});var UM;(function(e){e[e.Legacy=0]=`Legacy`,e[e.Strict=1]=`Strict`,e[e.Attribute=2]=`Attribute`})(UM||={});var WM=class{constructor(e,t,n){this.decodeTree=e,this.emitCodePoint=t,this.errors=n,this.state=HM.EntityStart,this.consumed=1,this.result=0,this.treeIndex=0,this.excess=1,this.decodeMode=UM.Strict}startEntity(e){this.decodeMode=e,this.state=HM.EntityStart,this.result=0,this.treeIndex=0,this.excess=1,this.consumed=1}write(e,t){switch(this.state){case HM.EntityStart:return e.charCodeAt(t)===FM.NUM?(this.state=HM.NumericStart,this.consumed+=1,this.stateNumericStart(e,t+1)):(this.state=HM.NamedEntity,this.stateNamedEntity(e,t));case HM.NumericStart:return this.stateNumericStart(e,t);case HM.NumericDecimal:return this.stateNumericDecimal(e,t);case HM.NumericHex:return this.stateNumericHex(e,t);case HM.NamedEntity:return this.stateNamedEntity(e,t)}}stateNumericStart(e,t){return t>=e.length?-1:(e.charCodeAt(t)|IM)===FM.LOWER_X?(this.state=HM.NumericHex,this.consumed+=1,this.stateNumericHex(e,t+1)):(this.state=HM.NumericDecimal,this.stateNumericDecimal(e,t))}addToNumericResult(e,t,n,r){if(t!==n){let i=n-t;this.result=this.result*r**+i+parseInt(e.substr(t,i),r),this.consumed+=i}}stateNumericHex(e,t){let n=t;for(;t<e.length;){let r=e.charCodeAt(t);if(RM(r)||zM(r))t+=1;else return this.addToNumericResult(e,n,t,16),this.emitNumericEntity(r,3)}return this.addToNumericResult(e,n,t,16),-1}stateNumericDecimal(e,t){let n=t;for(;t<e.length;){let r=e.charCodeAt(t);if(RM(r))t+=1;else return this.addToNumericResult(e,n,t,10),this.emitNumericEntity(r,2)}return this.addToNumericResult(e,n,t,10),-1}emitNumericEntity(e,t){var n;if(this.consumed<=t)return(n=this.errors)==null||n.absenceOfDigitsInNumericCharacterReference(this.consumed),0;if(e===FM.SEMI)this.consumed+=1;else if(this.decodeMode===UM.Strict)return 0;return this.emitCodePoint(PM(this.result),this.consumed),this.errors&&(e!==FM.SEMI&&this.errors.missingSemicolonAfterCharacterReference(),this.errors.validateNumericCharacterReference(this.result)),this.consumed}stateNamedEntity(e,t){let{decodeTree:n}=this,r=n[this.treeIndex],i=(r&LM.VALUE_LENGTH)>>14;for(;t<e.length;t++,this.excess++){let a=e.charCodeAt(t);if(this.treeIndex=KM(n,r,this.treeIndex+Math.max(1,i),a),this.treeIndex<0)return this.result===0||this.decodeMode===UM.Attribute&&(i===0||VM(a))?0:this.emitNotTerminatedNamedEntity();if(r=n[this.treeIndex],i=(r&LM.VALUE_LENGTH)>>14,i!==0){if(a===FM.SEMI)return this.emitNamedEntityData(this.treeIndex,i,this.consumed+this.excess);this.decodeMode!==UM.Strict&&(this.result=this.treeIndex,this.consumed+=this.excess,this.excess=0)}}return-1}emitNotTerminatedNamedEntity(){var e;let{result:t,decodeTree:n}=this,r=(n[t]&LM.VALUE_LENGTH)>>14;return this.emitNamedEntityData(t,r,this.consumed),(e=this.errors)==null||e.missingSemicolonAfterCharacterReference(),this.consumed}emitNamedEntityData(e,t,n){let{decodeTree:r}=this;return this.emitCodePoint(t===1?r[e]&~LM.VALUE_LENGTH:r[e+1],n),t===3&&this.emitCodePoint(r[e+2],n),n}end(){var e;switch(this.state){case HM.NamedEntity:return this.result!==0&&(this.decodeMode!==UM.Attribute||this.result===this.treeIndex)?this.emitNotTerminatedNamedEntity():0;case HM.NumericDecimal:return this.emitNumericEntity(0,2);case HM.NumericHex:return this.emitNumericEntity(0,3);case HM.NumericStart:return(e=this.errors)==null||e.absenceOfDigitsInNumericCharacterReference(this.consumed),0;case HM.EntityStart:return 0}}};function GM(e){let t=``,n=new WM(e,e=>t+=NM(e));return function(e,r){let i=0,a=0;for(;(a=e.indexOf(`&`,a))>=0;){t+=e.slice(i,a),n.startEntity(r);let o=n.write(e,a+1);if(o<0){i=a+n.end();break}i=a+o,a=o===0?i+1:i}let o=t+e.slice(i);return t=``,o}}function KM(e,t,n,r){let i=(t&LM.BRANCH_LENGTH)>>7,a=t&LM.JUMP_TABLE;if(i===0)return a!==0&&r===a?n:-1;if(a){let t=r-a;return t<0||t>=i?-1:e[n+t]-1}let o=n,s=o+i-1;for(;o<=s;){let t=o+s>>>1,n=e[t];if(n<r)o=t+1;else if(n>r)s=t-1;else return e[t+i]}return-1}var qM=GM(AM);GM(jM);function JM(e,t=UM.Legacy){return qM(e,t)}function YM(e){return qM(e,UM.Strict)}var XM=t({arrayReplaceAt:()=>nN,asciiTrim:()=>TN,assign:()=>tN,escapeHtml:()=>hN,escapeRE:()=>_N,fromCodePoint:()=>iN,has:()=>eN,isMdAsciiPunct:()=>SN,isPunctChar:()=>bN,isPunctCharCode:()=>xN,isSpace:()=>vN,isString:()=>QM,isValidEntityCode:()=>rN,isWhiteSpace:()=>yN,lib:()=>EN,normalizeReference:()=>CN,unescapeAll:()=>uN,unescapeMd:()=>lN});function ZM(e){return Object.prototype.toString.call(e)}function QM(e){return ZM(e)===`[object String]`}var $M=Object.prototype.hasOwnProperty;function eN(e,t){return $M.call(e,t)}function tN(e){return Array.prototype.slice.call(arguments,1).forEach(function(t){if(t){if(typeof t!=`object`)throw TypeError(t+`must be object`);Object.keys(t).forEach(function(n){e[n]=t[n]})}}),e}function nN(e,t,n){return[].concat(e.slice(0,t),n,e.slice(t+1))}function rN(e){return!(e>=55296&&e<=57343||e>=64976&&e<=65007||(e&65535)==65535||(e&65535)==65534||e>=0&&e<=8||e===11||e>=14&&e<=31||e>=127&&e<=159||e>1114111)}function iN(e){if(e>65535){e-=65536;let t=55296+(e>>10),n=56320+(e&1023);return String.fromCharCode(t,n)}return String.fromCharCode(e)}var aN=/\\([!"#$%&'()*+,\-./:;<=>?@[\\\]^_`{|}~])/g,oN=RegExp(aN.source+`|&([a-z#][a-z0-9]{1,31});`,`gi`),sN=/^#((?:x[a-f0-9]{1,8}|[0-9]{1,8}))$/i;function cN(e,t){if(t.charCodeAt(0)===35&&sN.test(t)){let n=t[1].toLowerCase()===`x`?parseInt(t.slice(2),16):parseInt(t.slice(1),10);return rN(n)?iN(n):e}let n=JM(e);return n===e?e:n}function lN(e){return e.indexOf(`\\`)<0?e:e.replace(aN,`$1`)}function uN(e){return e.indexOf(`\\`)<0&&e.indexOf(`&`)<0?e:e.replace(oN,function(e,t,n){return t||cN(e,n)})}var dN=/[&<>"]/,fN=/[&<>"]/g,pN={"&":`&`,"<":`<`,">":`>`,'"':`"`};function mN(e){return pN[e]}function hN(e){return dN.test(e)?e.replace(fN,mN):e}var gN=/[.?*+^$[\]\\(){}|-]/g;function _N(e){return e.replace(gN,`\\$&`)}function vN(e){switch(e){case 9:case 32:return!0}return!1}function yN(e){if(e>=8192&&e<=8202)return!0;switch(e){case 9:case 10:case 11:case 12:case 13:case 32:case 160:case 5760:case 8239:case 8287:case 12288:return!0}return!1}function bN(e){return EM.test(e)||DM.test(e)}function xN(e){return bN(iN(e))}function SN(e){switch(e){case 33:case 34:case 35:case 36:case 37:case 38:case 39:case 40:case 41:case 42:case 43:case 44:case 45:case 46:case 47:case 58:case 59:case 60:case 61:case 62:case 63:case 64:case 91:case 92:case 93:case 94:case 95:case 96:case 123:case 124:case 125:case 126:return!0;default:return!1}}function CN(e){return e=e.trim().replace(/\s+/g,` `),e.toLowerCase().toUpperCase()}function wN(e){return e===32||e===9||e===10||e===13}function TN(e){let t=0;for(;t<e.length&&wN(e.charCodeAt(t));t++);let n=e.length-1;for(;n>=t&&wN(e.charCodeAt(n));n--);return e.slice(t,n+1)}var EN={mdurl:SM,ucmicro:kM};function DN(e,t,n){let r,i,a,o,s=e.posMax,c=e.pos;for(e.pos=t+1,r=1;e.pos<s;){if(a=e.src.charCodeAt(e.pos),a===93&&(r--,r===0)){i=!0;break}if(o=e.pos,e.md.inline.skipToken(e),a===91){if(o===e.pos-1)r++;else if(n)return e.pos=c,-1}}let l=-1;return i&&(l=e.pos),e.pos=c,l}function ON(e,t,n){let r,i=t,a={ok:!1,pos:0,str:``};if(e.charCodeAt(i)===60){for(i++;i<n;){if(r=e.charCodeAt(i),r===10||r===60)return a;if(r===62)return a.pos=i+1,a.str=uN(e.slice(t+1,i)),a.ok=!0,a;if(r===92&&i+1<n){i+=2;continue}i++}return a}let o=0;for(;i<n&&(r=e.charCodeAt(i),!(r===32||r<32||r===127));){if(r===92&&i+1<n){if(e.charCodeAt(i+1)===32){i++;continue}i+=2;continue}if(r===40&&(o++,o>32))return a;if(r===41){if(o===0)break;o--}i++}return t===i||o!==0?a:(a.str=uN(e.slice(t,i)),a.pos=i,a.ok=!0,a)}function kN(e,t,n,r){let i,a=t,o={ok:!1,can_continue:!1,pos:0,str:``,marker:0};if(r)o.str=r.str,o.marker=r.marker;else{if(a>=n)return o;let r=e.charCodeAt(a);if(r!==34&&r!==39&&r!==40)return o;t++,a++,r===40&&(r=41),o.marker=r}for(;a<n;){if(i=e.charCodeAt(a),i===o.marker)return o.pos=a+1,o.str+=uN(e.slice(t,a)),o.ok=!0,o;if(i===40&&o.marker===41)return o;i===92&&a+1<n&&a++,a++}return o.can_continue=!0,o.str+=uN(e.slice(t,a)),o}var AN=t({parseLinkDestination:()=>ON,parseLinkLabel:()=>DN,parseLinkTitle:()=>kN}),jN={};jN.code_inline=function(e,t,n,r,i){let a=e[t];return`<code`+i.renderAttrs(a)+`>`+hN(a.content)+`</code>`},jN.code_block=function(e,t,n,r,i){let a=e[t];return`<pre`+i.renderAttrs(a)+`><code>`+hN(e[t].content)+`</code></pre>
|
|
216
216
|
`},jN.fence=function(e,t,n,r,i){let a=e[t],o=a.info?uN(a.info).trim():``,s=``,c=``;if(o){let e=o.split(/(\s+)/g);s=e[0],c=e.slice(2).join(``)}let l;if(l=n.highlight&&n.highlight(a.content,s,c)||hN(a.content),l.indexOf(`<pre`)===0)return l+`
|
|
217
217
|
`;if(o){let e=a.attrIndex(`class`),t=a.attrs?a.attrs.slice():[];e<0?t.push([`class`,n.langPrefix+s]):(t[e]=t[e].slice(),t[e][1]+=` `+n.langPrefix+s);let r={attrs:t};return`<pre><code${i.renderAttrs(r)}>${l}</code></pre>\n`}return`<pre><code${i.renderAttrs(a)}>${l}</code></pre>\n`},jN.image=function(e,t,n,r,i){let a=e[t];return a.attrs[a.attrIndex(`alt`)][1]=i.renderInlineAsText(a.children,n,r),i.renderToken(e,t,n)},jN.hardbreak=function(e,t,n){return n.xhtmlOut?`<br />
|
|
@@ -242,7 +242,7 @@ https://github.com/highlightjs/highlight.js/issues/2277`),i=e,r=t),n===void 0&&(
|
|
|
242
242
|
`},{className:`string`,begin:`\\d{4}-\\d{2}-\\d{2}(\\s+)\\d{2}:\\d{2}:\\d{2}.\\d+Z`},{className:`string`,begin:`(\\+|-)\\d+`},{className:`keyword`,relevance:10,variants:[{begin:`^(test|testing|success|successful|failure|error|skip|xfail|uxsuccess)(:?)\\s+(test)?`},{begin:`^progress(:?)(\\s+)?(pop|push)?`},{begin:`^tags:`},{begin:`^time:`}]}]}}t.exports=n})),WB=n(((e,t)=>{function n(e){return e?typeof e==`string`?e:e.source:null}function r(e){return i(`(?=`,e,`)`)}function i(...e){return e.map(e=>n(e)).join(``)}function a(e){let t=e[e.length-1];return typeof t==`object`&&t.constructor===Object?(e.splice(e.length-1,1),t):{}}function o(...e){return`(`+(a(e).capture?``:`?:`)+e.map(e=>n(e)).join(`|`)+`)`}new RegExp(o(/\[(?:[^\\\]]|\\.)*\]/,/\(\?<(?![=!])[^>]+>/,/\(\?'[^']+'/,/\(\??/,/\\([1-9][0-9]*)/,/\\./));var s=e=>i(/\b/,e,/\w$/.test(e)?/\b/:/\B/),c=[`Protocol`,`Type`].map(s),l=[`init`,`self`].map(s),u=[`Any`,`Self`],d=[`actor`,`any`,`associatedtype`,`async`,`await`,/as\?/,/as!/,`as`,`borrowing`,`break`,`case`,`catch`,`class`,`consume`,`consuming`,`continue`,`convenience`,`copy`,`default`,`defer`,`deinit`,`didSet`,`distributed`,`do`,`dynamic`,`each`,`else`,`enum`,`extension`,`fallthrough`,/fileprivate\(set\)/,`fileprivate`,`final`,`for`,`func`,`get`,`guard`,`if`,`import`,`indirect`,`infix`,/init\?/,/init!/,`inout`,/internal\(set\)/,`internal`,`in`,`is`,`isolated`,`nonisolated`,`lazy`,`let`,`macro`,`mutating`,`nonmutating`,/open\(set\)/,`open`,`operator`,`optional`,`override`,`package`,`postfix`,`precedencegroup`,`prefix`,/private\(set\)/,`private`,`protocol`,/public\(set\)/,`public`,`repeat`,`required`,`rethrows`,`return`,`set`,`some`,`static`,`struct`,`subscript`,`super`,`switch`,`throws`,`throw`,/try\?/,/try!/,`try`,`typealias`,/unowned\(safe\)/,/unowned\(unsafe\)/,`unowned`,`var`,`weak`,`where`,`while`,`willSet`],f=[`false`,`nil`,`true`],p=[`assignment`,`associativity`,`higherThan`,`left`,`lowerThan`,`none`,`right`],m=[`#colorLiteral`,`#column`,`#dsohandle`,`#else`,`#elseif`,`#endif`,`#error`,`#file`,`#fileID`,`#fileLiteral`,`#filePath`,`#function`,`#if`,`#imageLiteral`,`#keyPath`,`#line`,`#selector`,`#sourceLocation`,`#warning`],h=`abs.all.any.assert.assertionFailure.debugPrint.dump.fatalError.getVaList.isKnownUniquelyReferenced.max.min.numericCast.pointwiseMax.pointwiseMin.precondition.preconditionFailure.print.readLine.repeatElement.sequence.stride.swap.swift_unboxFromSwiftValueWithType.transcode.type.unsafeBitCast.unsafeDowncast.withExtendedLifetime.withUnsafeMutablePointer.withUnsafePointer.withVaList.withoutActuallyEscaping.zip`.split(`.`),g=o(/[/=\-+!*%<>&|^~?]/,/[\u00A1-\u00A7]/,/[\u00A9\u00AB]/,/[\u00AC\u00AE]/,/[\u00B0\u00B1]/,/[\u00B6\u00BB\u00BF\u00D7\u00F7]/,/[\u2016-\u2017]/,/[\u2020-\u2027]/,/[\u2030-\u203E]/,/[\u2041-\u2053]/,/[\u2055-\u205E]/,/[\u2190-\u23FF]/,/[\u2500-\u2775]/,/[\u2794-\u2BFF]/,/[\u2E00-\u2E7F]/,/[\u3001-\u3003]/,/[\u3008-\u3020]/,/[\u3030]/),_=o(g,/[\u0300-\u036F]/,/[\u1DC0-\u1DFF]/,/[\u20D0-\u20FF]/,/[\uFE00-\uFE0F]/,/[\uFE20-\uFE2F]/),v=i(g,_,`*`),y=o(/[a-zA-Z_]/,/[\u00A8\u00AA\u00AD\u00AF\u00B2-\u00B5\u00B7-\u00BA]/,/[\u00BC-\u00BE\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u00FF]/,/[\u0100-\u02FF\u0370-\u167F\u1681-\u180D\u180F-\u1DBF]/,/[\u1E00-\u1FFF]/,/[\u200B-\u200D\u202A-\u202E\u203F-\u2040\u2054\u2060-\u206F]/,/[\u2070-\u20CF\u2100-\u218F\u2460-\u24FF\u2776-\u2793]/,/[\u2C00-\u2DFF\u2E80-\u2FFF]/,/[\u3004-\u3007\u3021-\u302F\u3031-\u303F\u3040-\uD7FF]/,/[\uF900-\uFD3D\uFD40-\uFDCF\uFDF0-\uFE1F\uFE30-\uFE44]/,/[\uFE47-\uFEFE\uFF00-\uFFFD]/),b=o(y,/\d/,/[\u0300-\u036F\u1DC0-\u1DFF\u20D0-\u20FF\uFE20-\uFE2F]/),x=i(y,b,`*`),S=i(/[A-Z]/,b,`*`),C=[`attached`,`autoclosure`,i(/convention\(/,o(`swift`,`block`,`c`),/\)/),`discardableResult`,`dynamicCallable`,`dynamicMemberLookup`,`escaping`,`freestanding`,`frozen`,`GKInspectable`,`IBAction`,`IBDesignable`,`IBInspectable`,`IBOutlet`,`IBSegueAction`,`inlinable`,`main`,`nonobjc`,`NSApplicationMain`,`NSCopying`,`NSManaged`,i(/objc\(/,x,/\)/),`objc`,`objcMembers`,`propertyWrapper`,`requires_stored_property_inits`,`resultBuilder`,`Sendable`,`testable`,`UIApplicationMain`,`unchecked`,`unknown`,`usableFromInline`,`warn_unqualified_access`],w=[`iOS`,`iOSApplicationExtension`,`macOS`,`macOSApplicationExtension`,`macCatalyst`,`macCatalystApplicationExtension`,`watchOS`,`watchOSApplicationExtension`,`tvOS`,`tvOSApplicationExtension`,`swift`];function T(e){let t={match:/\s+/,relevance:0},n=e.COMMENT(`/\\*`,`\\*/`,{contains:[`self`]}),a=[e.C_LINE_COMMENT_MODE,n],g={match:[/\./,o(...c,...l)],className:{2:`keyword`}},y={match:i(/\./,o(...d)),relevance:0},T=d.filter(e=>typeof e==`string`).concat([`_|0`]),E={variants:[{className:`keyword`,match:o(...d.filter(e=>typeof e!=`string`).concat(u).map(s),...l)}]},D={$pattern:o(/\b\w+/,/#\w+/),keyword:T.concat(m),literal:f},O=[g,y,E],k=[{match:i(/\./,o(...h)),relevance:0},{className:`built_in`,match:i(/\b/,o(...h),/(?=\()/)}],A={match:/->/,relevance:0},j=[A,{className:`operator`,relevance:0,variants:[{match:v},{match:`\\.(\\.|${_})+`}]}],M=`([0-9]_*)+`,N=`([0-9a-fA-F]_*)+`,P={className:`number`,relevance:0,variants:[{match:`\\b(${M})(\\.(${M}))?([eE][+-]?(${M}))?\\b`},{match:`\\b0x(${N})(\\.(${N}))?([pP][+-]?(${M}))?\\b`},{match:/\b0o([0-7]_*)+\b/},{match:/\b0b([01]_*)+\b/}]},F=(e=``)=>({className:`subst`,variants:[{match:i(/\\/,e,/[0\\tnr"']/)},{match:i(/\\/,e,/u\{[0-9a-fA-F]{1,8}\}/)}]}),I=(e=``)=>({className:`subst`,match:i(/\\/,e,/[\t ]*(?:[\r\n]|\r\n)/)}),L=(e=``)=>({className:`subst`,label:`interpol`,begin:i(/\\/,e,/\(/),end:/\)/}),R=(e=``)=>({begin:i(e,/"""/),end:i(/"""/,e),contains:[F(e),I(e),L(e)]}),z=(e=``)=>({begin:i(e,/"/),end:i(/"/,e),contains:[F(e),L(e)]}),B={className:`string`,variants:[R(),R(`#`),R(`##`),R(`###`),z(),z(`#`),z(`##`),z(`###`)]},V=[e.BACKSLASH_ESCAPE,{begin:/\[/,end:/\]/,relevance:0,contains:[e.BACKSLASH_ESCAPE]}],H={begin:/\/[^\s](?=[^/\n]*\/)/,end:/\//,contains:V},U=e=>{let t=i(e,/\//),n=i(/\//,e);return{begin:t,end:n,contains:[...V,{scope:`comment`,begin:`#(?!.*${n})`,end:/$/}]}},W={scope:`regexp`,variants:[U(`###`),U(`##`),U(`#`),H]},ee={match:i(/`/,x,/`/)},te=[ee,{className:`variable`,match:/\$\d+/},{className:`variable`,match:`\\$${b}+`}],G=[{match:/(@|#(un)?)available/,scope:`keyword`,starts:{contains:[{begin:/\(/,end:/\)/,keywords:w,contains:[...j,P,B]}]}},{scope:`keyword`,match:i(/@/,o(...C),r(o(/\(/,/\s+/)))},{scope:`meta`,match:i(/@/,x)}],K={match:r(/\b[A-Z]/),relevance:0,contains:[{className:`type`,match:i(/(AV|CA|CF|CG|CI|CL|CM|CN|CT|MK|MP|MTK|MTL|NS|SCN|SK|UI|WK|XC)/,b,`+`)},{className:`type`,match:S,relevance:0},{match:/[?!]+/,relevance:0},{match:/\.\.\./,relevance:0},{match:i(/\s+&\s+/,r(S)),relevance:0}]},ne={begin:/</,end:/>/,keywords:D,contains:[...a,...O,...G,A,K]};K.contains.push(ne);let re={begin:/\(/,end:/\)/,relevance:0,keywords:D,contains:[`self`,{match:i(x,/\s*:/),keywords:`_|0`,relevance:0},...a,W,...O,...k,...j,P,B,...te,...G,K]},ie={begin:/</,end:/>/,keywords:`repeat each`,contains:[...a,K]},q={begin:/\(/,end:/\)/,keywords:D,contains:[{begin:o(r(i(x,/\s*:/)),r(i(x,/\s+/,x,/\s*:/))),end:/:/,relevance:0,contains:[{className:`keyword`,match:/\b_\b/},{className:`params`,match:x}]},...a,...O,...j,P,B,...G,K,re],endsParent:!0,illegal:/["']/},ae={match:[/(func|macro)/,/\s+/,o(ee.match,x,v)],className:{1:`keyword`,3:`title.function`},contains:[ie,q,t],illegal:[/\[/,/%/]},J={match:[/\b(?:subscript|init[?!]?)/,/\s*(?=[<(])/],className:{1:`keyword`},contains:[ie,q,t],illegal:/\[|%/},oe={match:[/operator/,/\s+/,v],className:{1:`keyword`,3:`title`}},se={begin:[/precedencegroup/,/\s+/,S],className:{1:`keyword`,3:`title`},contains:[K],keywords:[...p,...f],end:/}/},ce={match:[/class\b/,/\s+/,/func\b/,/\s+/,/\b[A-Za-z_][A-Za-z0-9_]*\b/],scope:{1:`keyword`,3:`keyword`,5:`title.function`}},le={match:[/class\b/,/\s+/,/var\b/],scope:{1:`keyword`,3:`keyword`}},ue={begin:[/(struct|protocol|class|extension|enum|actor)/,/\s+/,x,/\s*/],beginScope:{1:`keyword`,3:`title.class`},keywords:D,contains:[ie,...O,{begin:/:/,end:/\{/,keywords:D,contains:[{scope:`title.class.inherited`,match:S},...O],relevance:0}]};for(let e of B.variants){let t=e.contains.find(e=>e.label===`interpol`);t.keywords=D;let n=[...O,...k,...j,P,B,...te];t.contains=[...n,{begin:/\(/,end:/\)/,contains:[`self`,...n]}]}return{name:`Swift`,keywords:D,contains:[...a,ae,J,ce,le,ue,oe,se,{beginKeywords:`import`,end:/$/,contains:[...a],relevance:0},W,...O,...k,...j,P,B,...te,...G,K,re]}}t.exports=T})),GB=n(((e,t)=>{function n(e){return{name:`Tagger Script`,contains:[{className:`comment`,begin:/\$noop\(/,end:/\)/,contains:[{begin:/\\[()]/},{begin:/\(/,end:/\)/,contains:[{begin:/\\[()]/},`self`]}],relevance:10},{className:`keyword`,begin:/\$[_a-zA-Z0-9]+(?=\()/},{className:`variable`,begin:/%[_a-zA-Z0-9:]+%/},{className:`symbol`,begin:/\\[\\nt$%,()]/},{className:`symbol`,begin:/\\u[a-fA-F0-9]{4}/}]}}t.exports=n})),KB=n(((e,t)=>{function n(e){let t=`true false yes no null`,n={className:`attr`,variants:[{begin:/[\w*@][\w*@ :()\./-]*:(?=[ \t]|$)/},{begin:/"[\w*@][\w*@ :()\./-]*":(?=[ \t]|$)/},{begin:/'[\w*@][\w*@ :()\./-]*':(?=[ \t]|$)/}]},r={className:`template-variable`,variants:[{begin:/\{\{/,end:/\}\}/},{begin:/%\{/,end:/\}/}]},i={className:`string`,relevance:0,begin:/'/,end:/'/,contains:[{match:/''/,scope:`char.escape`,relevance:0}]},a={className:`string`,relevance:0,variants:[{begin:/"/,end:/"/},{begin:/\S+/}],contains:[e.BACKSLASH_ESCAPE,r]},o=e.inherit(a,{variants:[{begin:/'/,end:/'/,contains:[{begin:/''/,relevance:0}]},{begin:/"/,end:/"/},{begin:/[^\s,{}[\]]+/}]}),s={className:`number`,begin:`\\b[0-9]{4}(-[0-9][0-9]){0,2}([Tt \\t][0-9][0-9]?(:[0-9][0-9]){2})?(\\.[0-9]*)?([ \\t])*(Z|[-+][0-9][0-9]?(:[0-9][0-9])?)?\\b`},c={end:`,`,endsWithParent:!0,excludeEnd:!0,keywords:t,relevance:0},l={begin:/\{/,end:/\}/,contains:[c],illegal:`\\n`,relevance:0},u={begin:`\\[`,end:`\\]`,contains:[c],illegal:`\\n`,relevance:0},d=[n,{className:`meta`,begin:`^---\\s*$`,relevance:10},{className:`string`,begin:`[\\|>]([1-9]?[+-])?[ ]*\\n( +)[^ ][^\\n]*\\n(\\2[^\\n]+\\n?)*`},{begin:`<%[%=-]?`,end:`[%-]?%>`,subLanguage:`ruby`,excludeBegin:!0,excludeEnd:!0,relevance:0},{className:`type`,begin:`!\\w+![\\w#;/?:@&=+$,.~*'()[\\]]+`},{className:`type`,begin:`!<[\\w#;/?:@&=+$,.~*'()[\\]]+>`},{className:`type`,begin:`![\\w#;/?:@&=+$,.~*'()[\\]]+`},{className:`type`,begin:`!![\\w#;/?:@&=+$,.~*'()[\\]]+`},{className:`meta`,begin:`&`+e.UNDERSCORE_IDENT_RE+`$`},{className:`meta`,begin:`\\*`+e.UNDERSCORE_IDENT_RE+`$`},{className:`bullet`,begin:`-(?=[ ]|$)`,relevance:0},e.HASH_COMMENT_MODE,{beginKeywords:t,keywords:{literal:t}},s,{className:`number`,begin:e.C_NUMBER_RE+`\\b`,relevance:0},l,u,i,a],f=[...d];return f.pop(),f.push(o),c.contains=f,{name:`YAML`,case_insensitive:!0,aliases:[`yml`],contains:d}}t.exports=n})),qB=n(((e,t)=>{function n(e){return{name:`Test Anything Protocol`,case_insensitive:!0,contains:[e.HASH_COMMENT_MODE,{className:`meta`,variants:[{begin:`^TAP version (\\d+)$`},{begin:`^1\\.\\.(\\d+)$`}]},{begin:/---$/,end:`\\.\\.\\.$`,subLanguage:`yaml`,relevance:0},{className:`number`,begin:` (\\d+) `},{className:`symbol`,variants:[{begin:`^ok`},{begin:`^not ok`}]}]}}t.exports=n})),JB=n(((e,t)=>{function n(e){let t=e.regex,n=/[a-zA-Z_][a-zA-Z0-9_]*/,r={className:`number`,variants:[e.BINARY_NUMBER_MODE,e.C_NUMBER_MODE]};return{name:`Tcl`,aliases:[`tk`],keywords:`after.append.apply.array.auto_execok.auto_import.auto_load.auto_mkindex.auto_mkindex_old.auto_qualify.auto_reset.bgerror.binary.break.catch.cd.chan.clock.close.concat.continue.dde.dict.encoding.eof.error.eval.exec.exit.expr.fblocked.fconfigure.fcopy.file.fileevent.filename.flush.for.foreach.format.gets.glob.global.history.http.if.incr.info.interp.join.lappend|10.lassign|10.lindex|10.linsert|10.list.llength|10.load.lrange|10.lrepeat|10.lreplace|10.lreverse|10.lsearch|10.lset|10.lsort|10.mathfunc.mathop.memory.msgcat.namespace.open.package.parray.pid.pkg::create.pkg_mkIndex.platform.platform::shell.proc.puts.pwd.read.refchan.regexp.registry.regsub|10.rename.return.safe.scan.seek.set.socket.source.split.string.subst.switch.tcl_endOfWord.tcl_findLibrary.tcl_startOfNextWord.tcl_startOfPreviousWord.tcl_wordBreakAfter.tcl_wordBreakBefore.tcltest.tclvars.tell.time.tm.trace.unknown.unload.unset.update.uplevel.upvar.variable.vwait.while`.split(`.`),contains:[e.COMMENT(`;[ \\t]*#`,`$`),e.COMMENT(`^[ \\t]*#`,`$`),{beginKeywords:`proc`,end:`[\\{]`,excludeEnd:!0,contains:[{className:`title`,begin:`[ \\t\\n\\r]+(::)?[a-zA-Z_]((::)?[a-zA-Z0-9_])*`,end:`[ \\t\\n\\r]`,endsWithParent:!0,excludeEnd:!0}]},{className:`variable`,variants:[{begin:t.concat(/\$/,t.optional(/::/),n,`(::`,n,`)*`)},{begin:`\\$\\{(::)?[a-zA-Z_]((::)?[a-zA-Z0-9_])*`,end:`\\}`,contains:[r]}]},{className:`string`,contains:[e.BACKSLASH_ESCAPE],variants:[e.inherit(e.QUOTE_STRING_MODE,{illegal:null})]},r]}}t.exports=n})),YB=n(((e,t)=>{function n(e){let t=[`bool`,`byte`,`i16`,`i32`,`i64`,`double`,`string`,`binary`];return{name:`Thrift`,keywords:{keyword:[`namespace`,`const`,`typedef`,`struct`,`enum`,`service`,`exception`,`void`,`oneway`,`set`,`list`,`map`,`required`,`optional`],type:t,literal:`true false`},contains:[e.QUOTE_STRING_MODE,e.NUMBER_MODE,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:`class`,beginKeywords:`struct enum service exception`,end:/\{/,illegal:/\n/,contains:[e.inherit(e.TITLE_MODE,{starts:{endsWithParent:!0,excludeEnd:!0}})]},{begin:`\\b(set|list|map)\\s*<`,keywords:{type:[...t,`set`,`list`,`map`]},end:`>`,contains:[`self`]}]}}t.exports=n})),XB=n(((e,t)=>{function n(e){let t={className:`number`,begin:`[1-9][0-9]*`,relevance:0},n={className:`symbol`,begin:`:[^\\]]+`};return{name:`TP`,keywords:{keyword:`ABORT.ACC.ADJUST.AND.AP_LD.BREAK.CALL.CNT.COL.CONDITION.CONFIG.DA.DB.DIV.DETECT.ELSE.END.ENDFOR.ERR_NUM.ERROR_PROG.FINE.FOR.GP.GUARD.INC.IF.JMP.LINEAR_MAX_SPEED.LOCK.MOD.MONITOR.OFFSET.Offset.OR.OVERRIDE.PAUSE.PREG.PTH.RT_LD.RUN.SELECT.SKIP.Skip.TA.TB.TO.TOOL_OFFSET.Tool_Offset.UF.UT.UFRAME_NUM.UTOOL_NUM.UNLOCK.WAIT.X.Y.Z.W.P.R.STRLEN.SUBSTR.FINDSTR.VOFFSET.PROG.ATTR.MN.POS`.split(`.`),literal:[`ON`,`OFF`,`max_speed`,`LPOS`,`JPOS`,`ENABLE`,`DISABLE`,`START`,`STOP`,`RESET`]},contains:[{className:`built_in`,begin:`(AR|P|PAYLOAD|PR|R|SR|RSR|LBL|VR|UALM|MESSAGE|UTOOL|UFRAME|TIMER|TIMER_OVERFLOW|JOINT_MAX_SPEED|RESUME_PROG|DIAG_REC)\\[`,end:`\\]`,contains:[`self`,t,n]},{className:`built_in`,begin:`(AI|AO|DI|DO|F|RI|RO|UI|UO|GI|GO|SI|SO)\\[`,end:`\\]`,contains:[`self`,t,e.QUOTE_STRING_MODE,n]},{className:`keyword`,begin:`/(PROG|ATTR|MN|POS|END)\\b`},{className:`keyword`,begin:`(CALL|RUN|POINT_LOGIC|LBL)\\b`},{className:`keyword`,begin:`\\b(ACC|CNT|Skip|Offset|PSPD|RT_LD|AP_LD|Tool_Offset)`},{className:`number`,begin:`\\d+(sec|msec|mm/sec|cm/min|inch/min|deg/sec|mm|in|cm)?\\b`,relevance:0},e.COMMENT(`//`,`[;$]`),e.COMMENT(`!`,`[;$]`),e.COMMENT(`--eg:`,`$`),e.QUOTE_STRING_MODE,{className:`string`,begin:`'`,end:`'`},e.C_NUMBER_MODE,{className:`variable`,begin:`\\$[A-Za-z0-9_]+`}]}}t.exports=n})),ZB=n(((e,t)=>{function n(e){let t=e.regex,n=`absolute_url.asset|0.asset_version.attribute.block.constant.controller|0.country_timezones.csrf_token.cycle.date.dump.expression.form|0.form_end.form_errors.form_help.form_label.form_rest.form_row.form_start.form_widget.html_classes.include.is_granted.logout_path.logout_url.max.min.parent.path|0.random.range.relative_path.render.render_esi.source.template_from_string.url|0`.split(`.`),r=`abs.abbr_class.abbr_method.batch.capitalize.column.convert_encoding.country_name.currency_name.currency_symbol.data_uri.date.date_modify.default.escape.file_excerpt.file_link.file_relative.filter.first.format.format_args.format_args_as_text.format_currency.format_date.format_datetime.format_file.format_file_from_text.format_number.format_time.html_to_markdown.humanize.inky_to_html.inline_css.join.json_encode.keys.language_name.last.length.locale_name.lower.map.markdown.markdown_to_html.merge.nl2br.number_format.raw.reduce.replace.reverse.round.slice.slug.sort.spaceless.split.striptags.timezone_name.title.trans.transchoice.trim.u|0.upper.url_encode.yaml_dump.yaml_encode`.split(`.`),i=`apply.autoescape.block.cache.deprecated.do.embed.extends.filter.flush.for.form_theme.from.if.import.include.macro.sandbox.set.stopwatch.trans.trans_default_domain.transchoice.use.verbatim.with`.split(`.`);i=i.concat(i.map(e=>`end${e}`));let a={scope:`string`,variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/}]},o={scope:`number`,match:/\d+/},s={begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,contains:[a,o]},c={beginKeywords:n.join(` `),keywords:{name:n},relevance:0,contains:[s]},l={match:/\|(?=[A-Za-z_]+:?)/,beginScope:`punctuation`,relevance:0,contains:[{match:/[A-Za-z_]+:?/,keywords:r}]},u=(e,{relevance:n})=>({beginScope:{1:`template-tag`,3:`name`},relevance:n||2,endScope:`template-tag`,begin:[/\{%/,/\s*/,t.either(...e)],end:/%\}/,keywords:`in`,contains:[l,c,a,o]}),d=/[a-z_]+/,f=u(i,{relevance:2}),p=u([d],{relevance:1});return{name:`Twig`,aliases:[`craftcms`],case_insensitive:!0,subLanguage:`xml`,contains:[e.COMMENT(/\{#/,/#\}/),f,p,{className:`template-variable`,begin:/\{\{/,end:/\}\}/,contains:[`self`,l,c,a,o]}]}}t.exports=n})),QB=n(((e,t)=>{var n=`[A-Za-z$_][0-9A-Za-z$_]*`,r=`as.in.of.if.for.while.finally.var.new.function.do.return.void.else.break.catch.instanceof.with.throw.case.default.try.switch.continue.typeof.delete.let.yield.const.class.debugger.async.await.static.import.from.export.extends.using`.split(`.`),i=[`true`,`false`,`null`,`undefined`,`NaN`,`Infinity`],a=`Object.Function.Boolean.Symbol.Math.Date.Number.BigInt.String.RegExp.Array.Float32Array.Float64Array.Int8Array.Uint8Array.Uint8ClampedArray.Int16Array.Int32Array.Uint16Array.Uint32Array.BigInt64Array.BigUint64Array.Set.Map.WeakSet.WeakMap.ArrayBuffer.SharedArrayBuffer.Atomics.DataView.JSON.Promise.Generator.GeneratorFunction.AsyncFunction.Reflect.Proxy.Intl.WebAssembly`.split(`.`),o=[`Error`,`EvalError`,`InternalError`,`RangeError`,`ReferenceError`,`SyntaxError`,`TypeError`,`URIError`],s=[`setInterval`,`setTimeout`,`clearInterval`,`clearTimeout`,`require`,`exports`,`eval`,`isFinite`,`isNaN`,`parseFloat`,`parseInt`,`decodeURI`,`decodeURIComponent`,`encodeURI`,`encodeURIComponent`,`escape`,`unescape`],c=[`arguments`,`this`,`super`,`console`,`window`,`document`,`localStorage`,`sessionStorage`,`module`,`self`,`global`],l=[].concat(s,a,o);function u(e){let t=e.regex,u=(e,{after:t})=>{let n=`</`+e[0].slice(1);return e.input.indexOf(n,t)!==-1},d=n,f={begin:`<>`,end:`</>`},p=/<[A-Za-z0-9\\._:-]+\s*\/>/,m={begin:/<[A-Za-z0-9\\._:-]+/,end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(e,t)=>{let n=e[0].length+e.index,r=e.input[n];if(r===`<`||r===`,`){t.ignoreMatch();return}r===`>`&&(u(e,{after:n})||t.ignoreMatch());let i,a=e.input.substring(n);if(i=a.match(/^\s*=/)){t.ignoreMatch();return}if((i=a.match(/^\s+extends\s+/))&&i.index===0){t.ignoreMatch();return}}},h={$pattern:n,keyword:r,literal:i,built_in:l,"variable.language":c},g=`[0-9](_?[0-9])*`,_=`\\.(${g})`,v=`0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*`,y={className:`number`,variants:[{begin:`(\\b(${v})((${_})|\\.)?|(${_}))[eE][+-]?(${g})\\b`},{begin:`\\b(${v})\\b((${_})\\b|\\.)?|(${_})\\b`},{begin:`\\b(0|[1-9](_?[0-9])*)n\\b`},{begin:`\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\b`},{begin:`\\b0[bB][0-1](_?[0-1])*n?\\b`},{begin:`\\b0[oO][0-7](_?[0-7])*n?\\b`},{begin:`\\b0[0-7]+n?\\b`}],relevance:0},b={className:`subst`,begin:`\\$\\{`,end:`\\}`,keywords:h,contains:[]},x={begin:".?html`",end:``,starts:{end:"`",returnEnd:!1,contains:[e.BACKSLASH_ESCAPE,b],subLanguage:`xml`}},S={begin:".?css`",end:``,starts:{end:"`",returnEnd:!1,contains:[e.BACKSLASH_ESCAPE,b],subLanguage:`css`}},C={begin:".?gql`",end:``,starts:{end:"`",returnEnd:!1,contains:[e.BACKSLASH_ESCAPE,b],subLanguage:`graphql`}},w={className:`string`,begin:"`",end:"`",contains:[e.BACKSLASH_ESCAPE,b]},T={className:`comment`,variants:[e.COMMENT(/\/\*\*(?!\/)/,`\\*/`,{relevance:0,contains:[{begin:`(?=@[A-Za-z]+)`,relevance:0,contains:[{className:`doctag`,begin:`@[A-Za-z]+`},{className:`type`,begin:`\\{`,end:`\\}`,excludeEnd:!0,excludeBegin:!0,relevance:0},{className:`variable`,begin:`[A-Za-z$_][0-9A-Za-z$_]*(?=\\s*(-)|$)`,endsParent:!0,relevance:0},{begin:/(?=[^\n])\s/,relevance:0}]}]}),e.C_BLOCK_COMMENT_MODE,e.C_LINE_COMMENT_MODE]},E=[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,x,S,C,w,{match:/\$\d+/},y];b.contains=E.concat({begin:/\{/,end:/\}/,keywords:h,contains:[`self`].concat(E)});let D=[].concat(T,b.contains),O=D.concat([{begin:/(\s*)\(/,end:/\)/,keywords:h,contains:[`self`].concat(D)}]),k={className:`params`,begin:/(\s*)\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:h,contains:O},A={variants:[{match:[/class/,/\s+/,d,/\s+/,/extends/,/\s+/,t.concat(d,`(`,t.concat(/\./,d),`)*`)],scope:{1:`keyword`,3:`title.class`,5:`keyword`,7:`title.class.inherited`}},{match:[/class/,/\s+/,d],scope:{1:`keyword`,3:`title.class`}}]},j={relevance:0,match:t.either(/\bJSON/,/\b[A-Z][a-z]+([A-Z][a-z]*|\d)*/,/\b[A-Z]{2,}([A-Z][a-z]+|\d)+([A-Z][a-z]*)*/,/\b[A-Z]{2,}[a-z]+([A-Z][a-z]+|\d)*([A-Z][a-z]*)*/),className:`title.class`,keywords:{_:[...a,...o]}},M={label:`use_strict`,className:`meta`,relevance:10,begin:/^\s*['"]use (strict|asm)['"]/},N={variants:[{match:[/function/,/\s+/,d,/(?=\s*\()/]},{match:[/function/,/\s*(?=\()/]}],className:{1:`keyword`,3:`title.function`},label:`func.def`,contains:[k],illegal:/%/},P={relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/,className:`variable.constant`};function F(e){return t.concat(`(?!`,e.join(`|`),`)`)}let I={match:t.concat(/\b/,F([...s,`super`,`import`,`await`].map(e=>`${e}\\s*\\(`)),d,t.lookahead(/\s*\(/)),className:`title.function`,relevance:0},L={begin:t.concat(/\./,t.lookahead(t.concat(d,/(?![0-9A-Za-z$_(])/))),end:d,excludeBegin:!0,keywords:`prototype`,className:`property`,relevance:0},R={match:[/get|set/,/\s+/,d,/(?=\()/],className:{1:`keyword`,3:`title.function`},contains:[{begin:/\(\)/},k]},z=`(\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)|`+e.UNDERSCORE_IDENT_RE+`)\\s*=>`,B={match:[/const|var|let/,/\s+/,d,/\s*/,/=\s*/,/(async\s*)?/,t.lookahead(z)],keywords:`async`,className:{1:`keyword`,3:`title.function`},contains:[k]};return{name:`JavaScript`,aliases:[`js`,`jsx`,`mjs`,`cjs`],keywords:h,exports:{PARAMS_CONTAINS:O,CLASS_REFERENCE:j},illegal:/#(?![$_A-Za-z])/,contains:[e.SHEBANG({label:`shebang`,binary:`node`,relevance:5}),M,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,x,S,C,w,T,{match:/\$\d+/},y,j,{scope:`attr`,match:d+t.lookahead(`:`),relevance:0},B,{begin:`(`+e.RE_STARTERS_RE+`|\\b(case|return|throw)\\b)\\s*`,keywords:`return throw case`,relevance:0,contains:[T,e.REGEXP_MODE,{className:`function`,begin:z,returnBegin:!0,end:`\\s*=>`,contains:[{className:`params`,variants:[{begin:e.UNDERSCORE_IDENT_RE,relevance:0},{className:null,begin:/\(\s*\)/,skip:!0},{begin:/(\s*)\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:h,contains:O}]}]},{begin:/,/,relevance:0},{match:/\s+/,relevance:0},{variants:[{begin:f.begin,end:f.end},{match:p},{begin:m.begin,"on:begin":m.isTrulyOpeningTag,end:m.end}],subLanguage:`xml`,contains:[{begin:m.begin,end:m.end,skip:!0,contains:[`self`]}]}]},N,{beginKeywords:`while if switch catch for`},{begin:`\\b(?!function)`+e.UNDERSCORE_IDENT_RE+`\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{`,returnBegin:!0,label:`func.def`,contains:[k,e.inherit(e.TITLE_MODE,{begin:d,className:`title.function`})]},{match:/\.\.\./,relevance:0},L,{match:`\\$[A-Za-z$_][0-9A-Za-z$_]*`,relevance:0},{match:[/\bconstructor(?=\s*\()/],className:{1:`title.function`},contains:[k]},I,P,A,R,{match:/\$[(.]/}]}}function d(e){let t=e.regex,a=u(e),o=[`any`,`void`,`number`,`boolean`,`string`,`object`,`never`,`symbol`,`bigint`,`unknown`],s={begin:[/namespace/,/\s+/,e.IDENT_RE],beginScope:{1:`keyword`,3:`title.class`}},d={beginKeywords:`interface`,end:/\{/,excludeEnd:!0,keywords:{keyword:`interface extends`,built_in:o},contains:[a.exports.CLASS_REFERENCE]},f={className:`meta`,relevance:10,begin:/^\s*['"]use strict['"]/},p={$pattern:n,keyword:r.concat([`type`,`interface`,`public`,`private`,`protected`,`implements`,`declare`,`abstract`,`readonly`,`enum`,`override`,`satisfies`]),literal:i,built_in:l.concat(o),"variable.language":c},m={className:`meta`,begin:`@[A-Za-z$_][0-9A-Za-z$_]*`},h=(e,t,n)=>{let r=e.contains.findIndex(e=>e.label===t);if(r===-1)throw Error(`can not find mode to replace`);e.contains.splice(r,1,n)};Object.assign(a.keywords,p),a.exports.PARAMS_CONTAINS.push(m);let g=a.contains.find(e=>e.scope===`attr`),_=Object.assign({},g,{match:t.concat(`[A-Za-z$_][0-9A-Za-z$_]*`,t.lookahead(/\s*\?:/))});a.exports.PARAMS_CONTAINS.push([a.exports.CLASS_REFERENCE,g,_]),a.contains=a.contains.concat([m,s,d,_]),h(a,`shebang`,e.SHEBANG()),h(a,`use_strict`,f);let v=a.contains.find(e=>e.label===`func.def`);return v.relevance=0,Object.assign(a,{name:`TypeScript`,aliases:[`ts`,`tsx`,`mts`,`cts`]}),a}t.exports=d})),$B=n(((e,t)=>{function n(e){return{name:`Vala`,keywords:{keyword:`char uchar unichar int uint long ulong short ushort int8 int16 int32 int64 uint8 uint16 uint32 uint64 float double bool struct enum string void weak unowned owned async signal static abstract interface override virtual delegate if while do for foreach else switch case break default return try catch public private protected internal using new this get set const stdout stdin stderr var`,built_in:`DBus GLib CCode Gee Object Gtk Posix`,literal:`false true null`},contains:[{className:`class`,beginKeywords:`class interface namespace`,end:/\{/,excludeEnd:!0,illegal:`[^,:\\n\\s\\.]`,contains:[e.UNDERSCORE_TITLE_MODE]},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:`string`,begin:`"""`,end:`"""`,relevance:5},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.C_NUMBER_MODE,{className:`meta`,begin:`^#`,end:`$`}]}}t.exports=n})),eV=n(((e,t)=>{function n(e){let t=e.regex,n={className:`string`,begin:/"(""|[^/n])"C\b/},r={className:`string`,begin:/"/,end:/"/,illegal:/\n/,contains:[{begin:/""/}]},i=/\d{1,2}\/\d{1,2}\/\d{4}/,a=/\d{4}-\d{1,2}-\d{1,2}/,o=/(\d|1[012])(:\d+){0,2} *(AM|PM)/,s=/\d{1,2}(:\d{1,2}){1,2}/,c={className:`literal`,variants:[{begin:t.concat(/# */,t.either(a,i),/ *#/)},{begin:t.concat(/# */,s,/ *#/)},{begin:t.concat(/# */,o,/ *#/)},{begin:t.concat(/# */,t.either(a,i),/ +/,t.either(o,s),/ *#/)}]},l={className:`number`,relevance:0,variants:[{begin:/\b\d[\d_]*((\.[\d_]+(E[+-]?[\d_]+)?)|(E[+-]?[\d_]+))[RFD@!#]?/},{begin:/\b\d[\d_]*((U?[SIL])|[%&])?/},{begin:/&H[\dA-F_]+((U?[SIL])|[%&])?/},{begin:/&O[0-7_]+((U?[SIL])|[%&])?/},{begin:/&B[01_]+((U?[SIL])|[%&])?/}]},u={className:`label`,begin:/^\w+:/},d=e.COMMENT(/'''/,/$/,{contains:[{className:`doctag`,begin:/<\/?/,end:/>/}]}),f=e.COMMENT(null,/$/,{variants:[{begin:/'/},{begin:/([\t ]|^)REM(?=\s)/}]});return{name:`Visual Basic .NET`,aliases:[`vb`],case_insensitive:!0,classNameAliases:{label:`symbol`},keywords:{keyword:`addhandler alias aggregate ansi as async assembly auto binary by byref byval call case catch class compare const continue custom declare default delegate dim distinct do each equals else elseif end enum erase error event exit explicit finally for friend from function get global goto group handles if implements imports in inherits interface into iterator join key let lib loop me mid module mustinherit mustoverride mybase myclass namespace narrowing new next notinheritable notoverridable of off on operator option optional order overloads overridable overrides paramarray partial preserve private property protected public raiseevent readonly redim removehandler resume return select set shadows shared skip static step stop structure strict sub synclock take text then throw to try unicode until using when where while widening with withevents writeonly yield`,built_in:`addressof and andalso await directcast gettype getxmlnamespace is isfalse isnot istrue like mod nameof new not or orelse trycast typeof xor cbool cbyte cchar cdate cdbl cdec cint clng cobj csbyte cshort csng cstr cuint culng cushort`,type:`boolean byte char date decimal double integer long object sbyte short single string uinteger ulong ushort`,literal:`true false nothing`},illegal:`//|\\{|\\}|endif|gosub|variant|wend|^\\$ `,contains:[n,r,c,l,u,d,f,{className:`meta`,begin:/[\t ]*#(const|disable|else|elseif|enable|end|externalsource|if|region)\b/,end:/$/,keywords:{keyword:`const disable else elseif enable end externalsource if region then`},contains:[f]}]}}t.exports=n})),tV=n(((e,t)=>{function n(e){let t=e.regex,n=`lcase.month.vartype.instrrev.ubound.setlocale.getobject.rgb.getref.string.weekdayname.rnd.dateadd.monthname.now.day.minute.isarray.cbool.round.formatcurrency.conversions.csng.timevalue.second.year.space.abs.clng.timeserial.fixs.len.asc.isempty.maths.dateserial.atn.timer.isobject.filter.weekday.datevalue.ccur.isdate.instr.datediff.formatdatetime.replace.isnull.right.sgn.array.snumeric.log.cdbl.hex.chr.lbound.msgbox.ucase.getlocale.cos.cdate.cbyte.rtrim.join.hour.oct.typename.trim.strcomp.int.createobject.loadpicture.tan.formatnumber.mid.split.cint.sin.datepart.ltrim.sqr.time.derived.eval.date.formatpercent.exp.inputbox.left.ascw.chrw.regexp.cstr.err`.split(`.`),r=[`server`,`response`,`request`,`scriptengine`,`scriptenginebuildversion`,`scriptengineminorversion`,`scriptenginemajorversion`],i={begin:t.concat(t.either(...n),`\\s*\\(`),relevance:0,keywords:{built_in:n}};return{name:`VBScript`,aliases:[`vbs`],case_insensitive:!0,keywords:{keyword:`call.class.const.dim.do.loop.erase.execute.executeglobal.exit.for.each.next.function.if.then.else.on.error.option.explicit.new.private.property.let.get.public.randomize.redim.rem.select.case.set.stop.sub.while.wend.with.end.to.elseif.is.or.xor.and.not.class_initialize.class_terminate.default.preserve.in.me.byval.byref.step.resume.goto`.split(`.`),built_in:r,literal:[`true`,`false`,`null`,`nothing`,`empty`]},illegal:`//`,contains:[i,e.inherit(e.QUOTE_STRING_MODE,{contains:[{begin:`""`}]}),e.COMMENT(/'/,/$/,{relevance:0}),e.C_NUMBER_MODE]}}t.exports=n})),nV=n(((e,t)=>{function n(e){return{name:`VBScript in HTML`,subLanguage:`xml`,contains:[{begin:`<%`,end:`%>`,subLanguage:`vbscript`}]}}t.exports=n})),rV=n(((e,t)=>{function n(e){let t=e.regex,n={$pattern:/\$?[\w]+(\$[\w]+)*/,keyword:`accept_on.alias.always.always_comb.always_ff.always_latch.and.assert.assign.assume.automatic.before.begin.bind.bins.binsof.bit.break.buf|0.bufif0.bufif1.byte.case.casex.casez.cell.chandle.checker.class.clocking.cmos.config.const.constraint.context.continue.cover.covergroup.coverpoint.cross.deassign.default.defparam.design.disable.dist.do.edge.else.end.endcase.endchecker.endclass.endclocking.endconfig.endfunction.endgenerate.endgroup.endinterface.endmodule.endpackage.endprimitive.endprogram.endproperty.endspecify.endsequence.endtable.endtask.enum.event.eventually.expect.export.extends.extern.final.first_match.for.force.foreach.forever.fork.forkjoin.function.generate|5.genvar.global.highz0.highz1.if.iff.ifnone.ignore_bins.illegal_bins.implements.implies.import.incdir.include.initial.inout.input.inside.instance.int.integer.interconnect.interface.intersect.join.join_any.join_none.large.let.liblist.library.local.localparam.logic.longint.macromodule.matches.medium.modport.module.nand.negedge.nettype.new.nexttime.nmos.nor.noshowcancelled.not.notif0.notif1.or.output.package.packed.parameter.pmos.posedge.primitive.priority.program.property.protected.pull0.pull1.pulldown.pullup.pulsestyle_ondetect.pulsestyle_onevent.pure.rand.randc.randcase.randsequence.rcmos.real.realtime.ref.reg.reject_on.release.repeat.restrict.return.rnmos.rpmos.rtran.rtranif0.rtranif1.s_always.s_eventually.s_nexttime.s_until.s_until_with.scalared.sequence.shortint.shortreal.showcancelled.signed.small.soft.solve.specify.specparam.static.string.strong.strong0.strong1.struct.super.supply0.supply1.sync_accept_on.sync_reject_on.table.tagged.task.this.throughout.time.timeprecision.timeunit.tran.tranif0.tranif1.tri.tri0.tri1.triand.trior.trireg.type.typedef.union.unique.unique0.unsigned.until.until_with.untyped.use.uwire.var.vectored.virtual.void.wait.wait_order.wand.weak.weak0.weak1.while.wildcard.wire.with.within.wor.xnor.xor`.split(`.`),literal:[`null`],built_in:`$finish.$stop.$exit.$fatal.$error.$warning.$info.$realtime.$time.$printtimescale.$bitstoreal.$bitstoshortreal.$itor.$signed.$cast.$bits.$stime.$timeformat.$realtobits.$shortrealtobits.$rtoi.$unsigned.$asserton.$assertkill.$assertpasson.$assertfailon.$assertnonvacuouson.$assertoff.$assertcontrol.$assertpassoff.$assertfailoff.$assertvacuousoff.$isunbounded.$sampled.$fell.$changed.$past_gclk.$fell_gclk.$changed_gclk.$rising_gclk.$steady_gclk.$coverage_control.$coverage_get.$coverage_save.$set_coverage_db_name.$rose.$stable.$past.$rose_gclk.$stable_gclk.$future_gclk.$falling_gclk.$changing_gclk.$display.$coverage_get_max.$coverage_merge.$get_coverage.$load_coverage_db.$typename.$unpacked_dimensions.$left.$low.$increment.$clog2.$ln.$log10.$exp.$sqrt.$pow.$floor.$ceil.$sin.$cos.$tan.$countbits.$onehot.$isunknown.$fatal.$warning.$dimensions.$right.$high.$size.$asin.$acos.$atan.$atan2.$hypot.$sinh.$cosh.$tanh.$asinh.$acosh.$atanh.$countones.$onehot0.$error.$info.$random.$dist_chi_square.$dist_erlang.$dist_exponential.$dist_normal.$dist_poisson.$dist_t.$dist_uniform.$q_initialize.$q_remove.$q_exam.$async$and$array.$async$nand$array.$async$or$array.$async$nor$array.$sync$and$array.$sync$nand$array.$sync$or$array.$sync$nor$array.$q_add.$q_full.$psprintf.$async$and$plane.$async$nand$plane.$async$or$plane.$async$nor$plane.$sync$and$plane.$sync$nand$plane.$sync$or$plane.$sync$nor$plane.$system.$display.$displayb.$displayh.$displayo.$strobe.$strobeb.$strobeh.$strobeo.$write.$readmemb.$readmemh.$writememh.$value$plusargs.$dumpvars.$dumpon.$dumplimit.$dumpports.$dumpportson.$dumpportslimit.$writeb.$writeh.$writeo.$monitor.$monitorb.$monitorh.$monitoro.$writememb.$dumpfile.$dumpoff.$dumpall.$dumpflush.$dumpportsoff.$dumpportsall.$dumpportsflush.$fclose.$fdisplay.$fdisplayb.$fdisplayh.$fdisplayo.$fstrobe.$fstrobeb.$fstrobeh.$fstrobeo.$swrite.$swriteb.$swriteh.$swriteo.$fscanf.$fread.$fseek.$fflush.$feof.$fopen.$fwrite.$fwriteb.$fwriteh.$fwriteo.$fmonitor.$fmonitorb.$fmonitorh.$fmonitoro.$sformat.$sformatf.$fgetc.$ungetc.$fgets.$sscanf.$rewind.$ftell.$ferror`.split(`.`)},r=[`__FILE__`,`__LINE__`],i=`begin_keywords.celldefine.default_nettype.default_decay_time.default_trireg_strength.define.delay_mode_distributed.delay_mode_path.delay_mode_unit.delay_mode_zero.else.elsif.end_keywords.endcelldefine.endif.ifdef.ifndef.include.line.nounconnected_drive.pragma.resetall.timescale.unconnected_drive.undef.undefineall`.split(`.`);return{name:`Verilog`,aliases:[`v`,`sv`,`svh`],case_insensitive:!1,keywords:n,contains:[e.C_BLOCK_COMMENT_MODE,e.C_LINE_COMMENT_MODE,e.QUOTE_STRING_MODE,{scope:`number`,contains:[e.BACKSLASH_ESCAPE],variants:[{begin:/\b((\d+'([bhodBHOD]))[0-9xzXZa-fA-F_]+)/},{begin:/\B(('([bhodBHOD]))[0-9xzXZa-fA-F_]+)/},{begin:/\b[0-9][0-9_]*/,relevance:0}]},{scope:`variable`,variants:[{begin:`#\\((?!parameter).+\\)`},{begin:`\\.\\w+`,relevance:0}]},{scope:`variable.constant`,match:t.concat(/`/,t.either(...r))},{scope:`meta`,begin:t.concat(/`/,t.either(...i)),end:/$|\/\/|\/\*/,returnEnd:!0,keywords:i}]}}t.exports=n})),iV=n(((e,t)=>{function n(e){return{name:`VHDL`,case_insensitive:!0,keywords:{keyword:`abs.access.after.alias.all.and.architecture.array.assert.assume.assume_guarantee.attribute.begin.block.body.buffer.bus.case.component.configuration.constant.context.cover.disconnect.downto.default.else.elsif.end.entity.exit.fairness.file.for.force.function.generate.generic.group.guarded.if.impure.in.inertial.inout.is.label.library.linkage.literal.loop.map.mod.nand.new.next.nor.not.null.of.on.open.or.others.out.package.parameter.port.postponed.procedure.process.property.protected.pure.range.record.register.reject.release.rem.report.restrict.restrict_guarantee.return.rol.ror.select.sequence.severity.shared.signal.sla.sll.sra.srl.strong.subtype.then.to.transport.type.unaffected.units.until.use.variable.view.vmode.vprop.vunit.wait.when.while.with.xnor.xor`.split(`.`),built_in:`boolean.bit.character.integer.time.delay_length.natural.positive.string.bit_vector.file_open_kind.file_open_status.std_logic.std_logic_vector.unsigned.signed.boolean_vector.integer_vector.std_ulogic.std_ulogic_vector.unresolved_unsigned.u_unsigned.unresolved_signed.u_signed.real_vector.time_vector`.split(`.`),literal:[`false`,`true`,`note`,`warning`,`error`,`failure`,`line`,`text`,`side`,`width`]},illegal:/\{/,contains:[e.C_BLOCK_COMMENT_MODE,e.COMMENT(`--`,`$`),e.QUOTE_STRING_MODE,{className:`number`,begin:`\\b(\\d(_|\\d)*#\\w+(\\.\\w+)?#([eE][-+]?\\d(_|\\d)*)?|\\d(_|\\d)*(\\.\\d(_|\\d)*)?([eE][-+]?\\d(_|\\d)*)?)`,relevance:0},{className:`string`,begin:`'(U|X|0|1|Z|W|L|H|-)'`,contains:[e.BACKSLASH_ESCAPE]},{className:`symbol`,begin:`'[A-Za-z](_?[A-Za-z0-9])*`,contains:[e.BACKSLASH_ESCAPE]}]}}t.exports=n})),aV=n(((e,t)=>{function n(e){return{name:`Vim Script`,keywords:{$pattern:/[!#@\w]+/,keyword:`N|0 P|0 X|0 a|0 ab abc abo al am an|0 ar arga argd arge argdo argg argl argu as au aug aun b|0 bN ba bad bd be bel bf bl bm bn bo bp br brea breaka breakd breakl bro bufdo buffers bun bw c|0 cN cNf ca cabc caddb cad caddf cal cat cb cc ccl cd ce cex cf cfir cgetb cgete cg changes chd che checkt cl cla clo cm cmapc cme cn cnew cnf cno cnorea cnoreme co col colo com comc comp con conf cope cp cpf cq cr cs cst cu cuna cunme cw delm deb debugg delc delf dif diffg diffo diffp diffpu diffs diffthis dig di dl dell dj dli do doautoa dp dr ds dsp e|0 ea ec echoe echoh echom echon el elsei em en endfo endf endt endw ene ex exe exi exu f|0 files filet fin fina fini fir fix fo foldc foldd folddoc foldo for fu go gr grepa gu gv ha helpf helpg helpt hi hid his ia iabc if ij il im imapc ime ino inorea inoreme int is isp iu iuna iunme j|0 ju k|0 keepa kee keepj lN lNf l|0 lad laddb laddf la lan lat lb lc lch lcl lcs le lefta let lex lf lfir lgetb lgete lg lgr lgrepa lh ll lla lli lmak lm lmapc lne lnew lnf ln loadk lo loc lockv lol lope lp lpf lr ls lt lu lua luad luaf lv lvimgrepa lw m|0 ma mak map mapc marks mat me menut mes mk mks mksp mkv mkvie mod mz mzf nbc nb nbs new nm nmapc nme nn nnoreme noa no noh norea noreme norm nu nun nunme ol o|0 om omapc ome on ono onoreme opt ou ounme ow p|0 profd prof pro promptr pc ped pe perld po popu pp pre prev ps pt ptN ptf ptj ptl ptn ptp ptr pts pu pw py3 python3 py3d py3f py pyd pyf quita qa rec red redi redr redraws reg res ret retu rew ri rightb rub rubyd rubyf rund ru rv sN san sa sal sav sb sbN sba sbf sbl sbm sbn sbp sbr scrip scripte scs se setf setg setl sf sfir sh sim sig sil sl sla sm smap smapc sme sn sni sno snor snoreme sor so spelld spe spelli spellr spellu spellw sp spr sre st sta startg startr star stopi stj sts sun sunm sunme sus sv sw sy synti sync tN tabN tabc tabdo tabe tabf tabfir tabl tabm tabnew tabn tabo tabp tabr tabs tab ta tags tc tcld tclf te tf th tj tl tm tn to tp tr try ts tu u|0 undoj undol una unh unl unlo unm unme uns up ve verb vert vim vimgrepa vi viu vie vm vmapc vme vne vn vnoreme vs vu vunme windo w|0 wN wa wh wi winc winp wn wp wq wqa ws wu wv x|0 xa xmapc xm xme xn xnoreme xu xunme y|0 z|0 ~ Next Print append abbreviate abclear aboveleft all amenu anoremenu args argadd argdelete argedit argglobal arglocal argument ascii autocmd augroup aunmenu buffer bNext ball badd bdelete behave belowright bfirst blast bmodified bnext botright bprevious brewind break breakadd breakdel breaklist browse bunload bwipeout change cNext cNfile cabbrev cabclear caddbuffer caddexpr caddfile call catch cbuffer cclose center cexpr cfile cfirst cgetbuffer cgetexpr cgetfile chdir checkpath checktime clist clast close cmap cmapclear cmenu cnext cnewer cnfile cnoremap cnoreabbrev cnoremenu copy colder colorscheme command comclear compiler continue confirm copen cprevious cpfile cquit crewind cscope cstag cunmap cunabbrev cunmenu cwindow delete delmarks debug debuggreedy delcommand delfunction diffupdate diffget diffoff diffpatch diffput diffsplit digraphs display deletel djump dlist doautocmd doautoall deletep drop dsearch dsplit edit earlier echo echoerr echohl echomsg else elseif emenu endif endfor endfunction endtry endwhile enew execute exit exusage file filetype find finally finish first fixdel fold foldclose folddoopen folddoclosed foldopen function global goto grep grepadd gui gvim hardcopy help helpfind helpgrep helptags highlight hide history insert iabbrev iabclear ijump ilist imap imapclear imenu inoremap inoreabbrev inoremenu intro isearch isplit iunmap iunabbrev iunmenu join jumps keepalt keepmarks keepjumps lNext lNfile list laddexpr laddbuffer laddfile last language later lbuffer lcd lchdir lclose lcscope left leftabove lexpr lfile lfirst lgetbuffer lgetexpr lgetfile lgrep lgrepadd lhelpgrep llast llist lmake lmap lmapclear lnext lnewer lnfile lnoremap loadkeymap loadview lockmarks lockvar lolder lopen lprevious lpfile lrewind ltag lunmap luado luafile lvimgrep lvimgrepadd lwindow move mark make mapclear match menu menutranslate messages mkexrc mksession mkspell mkvimrc mkview mode mzscheme mzfile nbclose nbkey nbsart next nmap nmapclear nmenu nnoremap nnoremenu noautocmd noremap nohlsearch noreabbrev noremenu normal number nunmap nunmenu oldfiles open omap omapclear omenu only onoremap onoremenu options ounmap ounmenu ownsyntax print profdel profile promptfind promptrepl pclose pedit perl perldo pop popup ppop preserve previous psearch ptag ptNext ptfirst ptjump ptlast ptnext ptprevious ptrewind ptselect put pwd py3do py3file python pydo pyfile quit quitall qall read recover redo redir redraw redrawstatus registers resize retab return rewind right rightbelow ruby rubydo rubyfile rundo runtime rviminfo substitute sNext sandbox sargument sall saveas sbuffer sbNext sball sbfirst sblast sbmodified sbnext sbprevious sbrewind scriptnames scriptencoding scscope set setfiletype setglobal setlocal sfind sfirst shell simalt sign silent sleep slast smagic smapclear smenu snext sniff snomagic snoremap snoremenu sort source spelldump spellgood spellinfo spellrepall spellundo spellwrong split sprevious srewind stop stag startgreplace startreplace startinsert stopinsert stjump stselect sunhide sunmap sunmenu suspend sview swapname syntax syntime syncbind tNext tabNext tabclose tabedit tabfind tabfirst tablast tabmove tabnext tabonly tabprevious tabrewind tag tcl tcldo tclfile tearoff tfirst throw tjump tlast tmenu tnext topleft tprevious trewind tselect tunmenu undo undojoin undolist unabbreviate unhide unlet unlockvar unmap unmenu unsilent update vglobal version verbose vertical vimgrep vimgrepadd visual viusage view vmap vmapclear vmenu vnew vnoremap vnoremenu vsplit vunmap vunmenu write wNext wall while winsize wincmd winpos wnext wprevious wqall wsverb wundo wviminfo xit xall xmapclear xmap xmenu xnoremap xnoremenu xunmap xunmenu yank`,built_in:`synIDtrans atan2 range matcharg did_filetype asin feedkeys xor argv complete_check add getwinposx getqflist getwinposy screencol clearmatches empty extend getcmdpos mzeval garbagecollect setreg ceil sqrt diff_hlID inputsecret get getfperm getpid filewritable shiftwidth max sinh isdirectory synID system inputrestore winline atan visualmode inputlist tabpagewinnr round getregtype mapcheck hasmapto histdel argidx findfile sha256 exists toupper getcmdline taglist string getmatches bufnr strftime winwidth bufexists strtrans tabpagebuflist setcmdpos remote_read printf setloclist getpos getline bufwinnr float2nr len getcmdtype diff_filler luaeval resolve libcallnr foldclosedend reverse filter has_key bufname str2float strlen setline getcharmod setbufvar index searchpos shellescape undofile foldclosed setqflist buflisted strchars str2nr virtcol floor remove undotree remote_expr winheight gettabwinvar reltime cursor tabpagenr finddir localtime acos getloclist search tanh matchend rename gettabvar strdisplaywidth type abs py3eval setwinvar tolower wildmenumode log10 spellsuggest bufloaded synconcealed nextnonblank server2client complete settabwinvar executable input wincol setmatches getftype hlID inputsave searchpair or screenrow line settabvar histadd deepcopy strpart remote_peek and eval getftime submatch screenchar winsaveview matchadd mkdir screenattr getfontname libcall reltimestr getfsize winnr invert pow getbufline byte2line soundfold repeat fnameescape tagfiles sin strwidth spellbadword trunc maparg log lispindent hostname setpos globpath remote_foreground getchar synIDattr fnamemodify cscope_connection stridx winbufnr indent min complete_add nr2char searchpairpos inputdialog values matchlist items hlexists strridx browsedir expand fmod pathshorten line2byte argc count getwinvar glob foldtextresult getreg foreground cosh matchdelete has char2nr simplify histget searchdecl iconv winrestcmd pumvisible writefile foldlevel haslocaldir keys cos matchstr foldtext histnr tan tempname getcwd byteidx getbufvar islocked escape eventhandler remote_send serverlist winrestview synstack pyeval prevnonblank readfile cindent filereadable changenr exp`},illegal:/;/,contains:[e.NUMBER_MODE,{className:`string`,begin:`'`,end:`'`,illegal:`\\n`},{className:`string`,begin:/"(\\"|\n\\|[^"\n])*"/},e.COMMENT(`"`,`$`),{className:`variable`,begin:/[bwtglsav]:[\w\d_]+/},{begin:[/\b(?:function|function!)/,/\s+/,e.IDENT_RE],className:{1:`keyword`,3:`title`},end:`$`,relevance:0,contains:[{className:`params`,begin:`\\(`,end:`\\)`}]},{className:`symbol`,begin:/<[\w-]+>/}]}}t.exports=n})),oV=n(((e,t)=>{function n(e){e.regex;let t=e.COMMENT(/\(;/,/;\)/);return t.contains.push(`self`),{name:`WebAssembly`,keywords:{$pattern:/[\w.]+/,keyword:`anyfunc,block,br,br_if,br_table,call,call_indirect,data,drop,elem,else,end,export,func,global.get,global.set,local.get,local.set,local.tee,get_global,get_local,global,if,import,local,loop,memory,memory.grow,memory.size,module,mut,nop,offset,param,result,return,select,set_global,set_local,start,table,tee_local,then,type,unreachable`.split(`,`)},contains:[e.COMMENT(/;;/,/$/),t,{match:[/(?:offset|align)/,/\s*/,/=/],className:{1:`keyword`,3:`operator`}},{className:`variable`,begin:/\$[\w_]+/},{match:/(\((?!;)|\))+/,className:`punctuation`,relevance:0},{begin:[/(?:func|call|call_indirect)/,/\s+/,/\$[^\s)]+/],className:{1:`keyword`,3:`title.function`}},e.QUOTE_STRING_MODE,{match:/(i32|i64|f32|f64)(?!\.)/,className:`type`},{className:`keyword`,match:/\b(f32|f64|i32|i64)(?:\.(?:abs|add|and|ceil|clz|const|convert_[su]\/i(?:32|64)|copysign|ctz|demote\/f64|div(?:_[su])?|eqz?|extend_[su]\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|nearest|neg?|or|popcnt|promote\/f32|reinterpret\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|store(?:8|16|32)?|sqrt|sub|trunc(?:_[su]\/f(?:32|64))?|wrap\/i64|xor))\b/},{className:`number`,relevance:0,match:/[+-]?\b(?:\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:[eE][+-]?\d(?:_?\d)*)?|0x[\da-fA-F](?:_?[\da-fA-F])*(?:\.[\da-fA-F](?:_?[\da-fA-D])*)?(?:[pP][+-]?\d(?:_?\d)*)?)\b|\binf\b|\bnan(?::0x[\da-fA-F](?:_?[\da-fA-D])*)?\b/}]}}t.exports=n})),sV=n(((e,t)=>{function n(e){let t=e.regex,n=/[a-zA-Z]\w*/,r=[`as`,`break`,`class`,`construct`,`continue`,`else`,`for`,`foreign`,`if`,`import`,`in`,`is`,`return`,`static`,`var`,`while`],i=[`true`,`false`,`null`],a=[`this`,`super`],o=[`Bool`,`Class`,`Fiber`,`Fn`,`List`,`Map`,`Null`,`Num`,`Object`,`Range`,`Sequence`,`String`,`System`],s=[`-`,`~`,/\*/,`%`,/\.\.\./,/\.\./,/\+/,`<<`,`>>`,`>=`,`<=`,`<`,`>`,/\^/,/!=/,/!/,/\bis\b/,`==`,`&&`,`&`,/\|\|/,/\|/,/\?:/,`=`],c={relevance:0,match:t.concat(/\b(?!(if|while|for|else|super)\b)/,n,/(?=\s*[({])/),className:`title.function`},l={match:t.concat(t.either(t.concat(/\b(?!(if|while|for|else|super)\b)/,n),t.either(...s)),/(?=\s*\([^)]+\)\s*\{)/),className:`title.function`,starts:{contains:[{begin:/\(/,end:/\)/,contains:[{relevance:0,scope:`params`,match:n}]}]}},u={variants:[{match:[/class\s+/,n,/\s+is\s+/,n]},{match:[/class\s+/,n]}],scope:{2:`title.class`,4:`title.class.inherited`},keywords:r},d={relevance:0,match:t.either(...s),className:`operator`},f={className:`string`,begin:/"""/,end:/"""/},p={className:`property`,begin:t.concat(/\./,t.lookahead(n)),end:n,excludeBegin:!0,relevance:0},m={relevance:0,match:t.concat(/\b_/,n),scope:`variable`},h={relevance:0,match:/\b[A-Z]+[a-z]+([A-Z]+[a-z]+)*/,scope:`title.class`,keywords:{_:o}},g=e.C_NUMBER_MODE,_={match:[n,/\s*/,/=/,/\s*/,/\(/,n,/\)\s*\{/],scope:{1:`title.function`,3:`operator`,6:`params`}},v=e.COMMENT(/\/\*\*/,/\*\//,{contains:[{match:/@[a-z]+/,scope:`doctag`},`self`]}),y={scope:`subst`,begin:/%\(/,end:/\)/,contains:[g,h,c,m,d]},b={scope:`string`,begin:/"/,end:/"/,contains:[y,{scope:`char.escape`,variants:[{match:/\\\\|\\["0%abefnrtv]/},{match:/\\x[0-9A-F]{2}/},{match:/\\u[0-9A-F]{4}/},{match:/\\U[0-9A-F]{8}/}]}]};y.contains.push(b);let x=[...r,...a,...i],S={relevance:0,match:t.concat(`\\b(?!`,x.join(`|`),`\\b)`,/[a-zA-Z_]\w*(?:[?!]|\b)/),className:`variable`};return{name:`Wren`,keywords:{keyword:r,"variable.language":a,literal:i},contains:[{scope:`comment`,variants:[{begin:[/#!?/,/[A-Za-z_]+(?=\()/],beginScope:{},keywords:{literal:i},contains:[],end:/\)/},{begin:[/#!?/,/[A-Za-z_]+/],beginScope:{},end:/$/}]},g,b,f,v,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,h,u,_,l,c,d,m,p,S]}}t.exports=n})),cV=n(((e,t)=>{function n(e){return{name:`Intel x86 Assembly`,case_insensitive:!0,keywords:{$pattern:`[.%]?`+e.IDENT_RE,keyword:`lock rep repe repz repne repnz xaquire xrelease bnd nobnd aaa aad aam aas adc add and arpl bb0_reset bb1_reset bound bsf bsr bswap bt btc btr bts call cbw cdq cdqe clc cld cli clts cmc cmp cmpsb cmpsd cmpsq cmpsw cmpxchg cmpxchg486 cmpxchg8b cmpxchg16b cpuid cpu_read cpu_write cqo cwd cwde daa das dec div dmint emms enter equ f2xm1 fabs fadd faddp fbld fbstp fchs fclex fcmovb fcmovbe fcmove fcmovnb fcmovnbe fcmovne fcmovnu fcmovu fcom fcomi fcomip fcomp fcompp fcos fdecstp fdisi fdiv fdivp fdivr fdivrp femms feni ffree ffreep fiadd ficom ficomp fidiv fidivr fild fimul fincstp finit fist fistp fisttp fisub fisubr fld fld1 fldcw fldenv fldl2e fldl2t fldlg2 fldln2 fldpi fldz fmul fmulp fnclex fndisi fneni fninit fnop fnsave fnstcw fnstenv fnstsw fpatan fprem fprem1 fptan frndint frstor fsave fscale fsetpm fsin fsincos fsqrt fst fstcw fstenv fstp fstsw fsub fsubp fsubr fsubrp ftst fucom fucomi fucomip fucomp fucompp fxam fxch fxtract fyl2x fyl2xp1 hlt ibts icebp idiv imul in inc incbin insb insd insw int int01 int1 int03 int3 into invd invpcid invlpg invlpga iret iretd iretq iretw jcxz jecxz jrcxz jmp jmpe lahf lar lds lea leave les lfence lfs lgdt lgs lidt lldt lmsw loadall loadall286 lodsb lodsd lodsq lodsw loop loope loopne loopnz loopz lsl lss ltr mfence monitor mov movd movq movsb movsd movsq movsw movsx movsxd movzx mul mwait neg nop not or out outsb outsd outsw packssdw packsswb packuswb paddb paddd paddsb paddsiw paddsw paddusb paddusw paddw pand pandn pause paveb pavgusb pcmpeqb pcmpeqd pcmpeqw pcmpgtb pcmpgtd pcmpgtw pdistib pf2id pfacc pfadd pfcmpeq pfcmpge pfcmpgt pfmax pfmin pfmul pfrcp pfrcpit1 pfrcpit2 pfrsqit1 pfrsqrt pfsub pfsubr pi2fd pmachriw pmaddwd pmagw pmulhriw pmulhrwa pmulhrwc pmulhw pmullw pmvgezb pmvlzb pmvnzb pmvzb pop popa popad popaw popf popfd popfq popfw por prefetch prefetchw pslld psllq psllw psrad psraw psrld psrlq psrlw psubb psubd psubsb psubsiw psubsw psubusb psubusw psubw punpckhbw punpckhdq punpckhwd punpcklbw punpckldq punpcklwd push pusha pushad pushaw pushf pushfd pushfq pushfw pxor rcl rcr rdshr rdmsr rdpmc rdtsc rdtscp ret retf retn rol ror rdm rsdc rsldt rsm rsts sahf sal salc sar sbb scasb scasd scasq scasw sfence sgdt shl shld shr shrd sidt sldt skinit smi smint smintold smsw stc std sti stosb stosd stosq stosw str sub svdc svldt svts swapgs syscall sysenter sysexit sysret test ud0 ud1 ud2b ud2 ud2a umov verr verw fwait wbinvd wrshr wrmsr xadd xbts xchg xlatb xlat xor cmove cmovz cmovne cmovnz cmova cmovnbe cmovae cmovnb cmovb cmovnae cmovbe cmovna cmovg cmovnle cmovge cmovnl cmovl cmovnge cmovle cmovng cmovc cmovnc cmovo cmovno cmovs cmovns cmovp cmovpe cmovnp cmovpo je jz jne jnz ja jnbe jae jnb jb jnae jbe jna jg jnle jge jnl jl jnge jle jng jc jnc jo jno js jns jpo jnp jpe jp sete setz setne setnz seta setnbe setae setnb setnc setb setnae setcset setbe setna setg setnle setge setnl setl setnge setle setng sets setns seto setno setpe setp setpo setnp addps addss andnps andps cmpeqps cmpeqss cmpleps cmpless cmpltps cmpltss cmpneqps cmpneqss cmpnleps cmpnless cmpnltps cmpnltss cmpordps cmpordss cmpunordps cmpunordss cmpps cmpss comiss cvtpi2ps cvtps2pi cvtsi2ss cvtss2si cvttps2pi cvttss2si divps divss ldmxcsr maxps maxss minps minss movaps movhps movlhps movlps movhlps movmskps movntps movss movups mulps mulss orps rcpps rcpss rsqrtps rsqrtss shufps sqrtps sqrtss stmxcsr subps subss ucomiss unpckhps unpcklps xorps fxrstor fxrstor64 fxsave fxsave64 xgetbv xsetbv xsave xsave64 xsaveopt xsaveopt64 xrstor xrstor64 prefetchnta prefetcht0 prefetcht1 prefetcht2 maskmovq movntq pavgb pavgw pextrw pinsrw pmaxsw pmaxub pminsw pminub pmovmskb pmulhuw psadbw pshufw pf2iw pfnacc pfpnacc pi2fw pswapd maskmovdqu clflush movntdq movnti movntpd movdqa movdqu movdq2q movq2dq paddq pmuludq pshufd pshufhw pshuflw pslldq psrldq psubq punpckhqdq punpcklqdq addpd addsd andnpd andpd cmpeqpd cmpeqsd cmplepd cmplesd cmpltpd cmpltsd cmpneqpd cmpneqsd cmpnlepd cmpnlesd cmpnltpd cmpnltsd cmpordpd cmpordsd cmpunordpd cmpunordsd cmppd comisd cvtdq2pd cvtdq2ps cvtpd2dq cvtpd2pi cvtpd2ps cvtpi2pd cvtps2dq cvtps2pd cvtsd2si cvtsd2ss cvtsi2sd cvtss2sd cvttpd2pi cvttpd2dq cvttps2dq cvttsd2si divpd divsd maxpd maxsd minpd minsd movapd movhpd movlpd movmskpd movupd mulpd mulsd orpd shufpd sqrtpd sqrtsd subpd subsd ucomisd unpckhpd unpcklpd xorpd addsubpd addsubps haddpd haddps hsubpd hsubps lddqu movddup movshdup movsldup clgi stgi vmcall vmclear vmfunc vmlaunch vmload vmmcall vmptrld vmptrst vmread vmresume vmrun vmsave vmwrite vmxoff vmxon invept invvpid pabsb pabsw pabsd palignr phaddw phaddd phaddsw phsubw phsubd phsubsw pmaddubsw pmulhrsw pshufb psignb psignw psignd extrq insertq movntsd movntss lzcnt blendpd blendps blendvpd blendvps dppd dpps extractps insertps movntdqa mpsadbw packusdw pblendvb pblendw pcmpeqq pextrb pextrd pextrq phminposuw pinsrb pinsrd pinsrq pmaxsb pmaxsd pmaxud pmaxuw pminsb pminsd pminud pminuw pmovsxbw pmovsxbd pmovsxbq pmovsxwd pmovsxwq pmovsxdq pmovzxbw pmovzxbd pmovzxbq pmovzxwd pmovzxwq pmovzxdq pmuldq pmulld ptest roundpd roundps roundsd roundss crc32 pcmpestri pcmpestrm pcmpistri pcmpistrm pcmpgtq popcnt getsec pfrcpv pfrsqrtv movbe aesenc aesenclast aesdec aesdeclast aesimc aeskeygenassist vaesenc vaesenclast vaesdec vaesdeclast vaesimc vaeskeygenassist vaddpd vaddps vaddsd vaddss vaddsubpd vaddsubps vandpd vandps vandnpd vandnps vblendpd vblendps vblendvpd vblendvps vbroadcastss vbroadcastsd vbroadcastf128 vcmpeq_ospd vcmpeqpd vcmplt_ospd vcmpltpd vcmple_ospd vcmplepd vcmpunord_qpd vcmpunordpd vcmpneq_uqpd vcmpneqpd vcmpnlt_uspd vcmpnltpd vcmpnle_uspd vcmpnlepd vcmpord_qpd vcmpordpd vcmpeq_uqpd vcmpnge_uspd vcmpngepd vcmpngt_uspd vcmpngtpd vcmpfalse_oqpd vcmpfalsepd vcmpneq_oqpd vcmpge_ospd vcmpgepd vcmpgt_ospd vcmpgtpd vcmptrue_uqpd vcmptruepd vcmplt_oqpd vcmple_oqpd vcmpunord_spd vcmpneq_uspd vcmpnlt_uqpd vcmpnle_uqpd vcmpord_spd vcmpeq_uspd vcmpnge_uqpd vcmpngt_uqpd vcmpfalse_ospd vcmpneq_ospd vcmpge_oqpd vcmpgt_oqpd vcmptrue_uspd vcmppd vcmpeq_osps vcmpeqps vcmplt_osps vcmpltps vcmple_osps vcmpleps vcmpunord_qps vcmpunordps vcmpneq_uqps vcmpneqps vcmpnlt_usps vcmpnltps vcmpnle_usps vcmpnleps vcmpord_qps vcmpordps vcmpeq_uqps vcmpnge_usps vcmpngeps vcmpngt_usps vcmpngtps vcmpfalse_oqps vcmpfalseps vcmpneq_oqps vcmpge_osps vcmpgeps vcmpgt_osps vcmpgtps vcmptrue_uqps vcmptrueps vcmplt_oqps vcmple_oqps vcmpunord_sps vcmpneq_usps vcmpnlt_uqps vcmpnle_uqps vcmpord_sps vcmpeq_usps vcmpnge_uqps vcmpngt_uqps vcmpfalse_osps vcmpneq_osps vcmpge_oqps vcmpgt_oqps vcmptrue_usps vcmpps vcmpeq_ossd vcmpeqsd vcmplt_ossd vcmpltsd vcmple_ossd vcmplesd vcmpunord_qsd vcmpunordsd vcmpneq_uqsd vcmpneqsd vcmpnlt_ussd vcmpnltsd vcmpnle_ussd vcmpnlesd vcmpord_qsd vcmpordsd vcmpeq_uqsd vcmpnge_ussd vcmpngesd vcmpngt_ussd vcmpngtsd vcmpfalse_oqsd vcmpfalsesd vcmpneq_oqsd vcmpge_ossd vcmpgesd vcmpgt_ossd vcmpgtsd vcmptrue_uqsd vcmptruesd vcmplt_oqsd vcmple_oqsd vcmpunord_ssd vcmpneq_ussd vcmpnlt_uqsd vcmpnle_uqsd vcmpord_ssd vcmpeq_ussd vcmpnge_uqsd vcmpngt_uqsd vcmpfalse_ossd vcmpneq_ossd vcmpge_oqsd vcmpgt_oqsd vcmptrue_ussd vcmpsd vcmpeq_osss vcmpeqss vcmplt_osss vcmpltss vcmple_osss vcmpless vcmpunord_qss vcmpunordss vcmpneq_uqss vcmpneqss vcmpnlt_usss vcmpnltss vcmpnle_usss vcmpnless vcmpord_qss vcmpordss vcmpeq_uqss vcmpnge_usss vcmpngess vcmpngt_usss vcmpngtss vcmpfalse_oqss vcmpfalsess vcmpneq_oqss vcmpge_osss vcmpgess vcmpgt_osss vcmpgtss vcmptrue_uqss vcmptruess vcmplt_oqss vcmple_oqss vcmpunord_sss vcmpneq_usss vcmpnlt_uqss vcmpnle_uqss vcmpord_sss vcmpeq_usss vcmpnge_uqss vcmpngt_uqss vcmpfalse_osss vcmpneq_osss vcmpge_oqss vcmpgt_oqss vcmptrue_usss vcmpss vcomisd vcomiss vcvtdq2pd vcvtdq2ps vcvtpd2dq vcvtpd2ps vcvtps2dq vcvtps2pd vcvtsd2si vcvtsd2ss vcvtsi2sd vcvtsi2ss vcvtss2sd vcvtss2si vcvttpd2dq vcvttps2dq vcvttsd2si vcvttss2si vdivpd vdivps vdivsd vdivss vdppd vdpps vextractf128 vextractps vhaddpd vhaddps vhsubpd vhsubps vinsertf128 vinsertps vlddqu vldqqu vldmxcsr vmaskmovdqu vmaskmovps vmaskmovpd vmaxpd vmaxps vmaxsd vmaxss vminpd vminps vminsd vminss vmovapd vmovaps vmovd vmovq vmovddup vmovdqa vmovqqa vmovdqu vmovqqu vmovhlps vmovhpd vmovhps vmovlhps vmovlpd vmovlps vmovmskpd vmovmskps vmovntdq vmovntqq vmovntdqa vmovntpd vmovntps vmovsd vmovshdup vmovsldup vmovss vmovupd vmovups vmpsadbw vmulpd vmulps vmulsd vmulss vorpd vorps vpabsb vpabsw vpabsd vpacksswb vpackssdw vpackuswb vpackusdw vpaddb vpaddw vpaddd vpaddq vpaddsb vpaddsw vpaddusb vpaddusw vpalignr vpand vpandn vpavgb vpavgw vpblendvb vpblendw vpcmpestri vpcmpestrm vpcmpistri vpcmpistrm vpcmpeqb vpcmpeqw vpcmpeqd vpcmpeqq vpcmpgtb vpcmpgtw vpcmpgtd vpcmpgtq vpermilpd vpermilps vperm2f128 vpextrb vpextrw vpextrd vpextrq vphaddw vphaddd vphaddsw vphminposuw vphsubw vphsubd vphsubsw vpinsrb vpinsrw vpinsrd vpinsrq vpmaddwd vpmaddubsw vpmaxsb vpmaxsw vpmaxsd vpmaxub vpmaxuw vpmaxud vpminsb vpminsw vpminsd vpminub vpminuw vpminud vpmovmskb vpmovsxbw vpmovsxbd vpmovsxbq vpmovsxwd vpmovsxwq vpmovsxdq vpmovzxbw vpmovzxbd vpmovzxbq vpmovzxwd vpmovzxwq vpmovzxdq vpmulhuw vpmulhrsw vpmulhw vpmullw vpmulld vpmuludq vpmuldq vpor vpsadbw vpshufb vpshufd vpshufhw vpshuflw vpsignb vpsignw vpsignd vpslldq vpsrldq vpsllw vpslld vpsllq vpsraw vpsrad vpsrlw vpsrld vpsrlq vptest vpsubb vpsubw vpsubd vpsubq vpsubsb vpsubsw vpsubusb vpsubusw vpunpckhbw vpunpckhwd vpunpckhdq vpunpckhqdq vpunpcklbw vpunpcklwd vpunpckldq vpunpcklqdq vpxor vrcpps vrcpss vrsqrtps vrsqrtss vroundpd vroundps vroundsd vroundss vshufpd vshufps vsqrtpd vsqrtps vsqrtsd vsqrtss vstmxcsr vsubpd vsubps vsubsd vsubss vtestps vtestpd vucomisd vucomiss vunpckhpd vunpckhps vunpcklpd vunpcklps vxorpd vxorps vzeroall vzeroupper pclmullqlqdq pclmulhqlqdq pclmullqhqdq pclmulhqhqdq pclmulqdq vpclmullqlqdq vpclmulhqlqdq vpclmullqhqdq vpclmulhqhqdq vpclmulqdq vfmadd132ps vfmadd132pd vfmadd312ps vfmadd312pd vfmadd213ps vfmadd213pd vfmadd123ps vfmadd123pd vfmadd231ps vfmadd231pd vfmadd321ps vfmadd321pd vfmaddsub132ps vfmaddsub132pd vfmaddsub312ps vfmaddsub312pd vfmaddsub213ps vfmaddsub213pd vfmaddsub123ps vfmaddsub123pd vfmaddsub231ps vfmaddsub231pd vfmaddsub321ps vfmaddsub321pd vfmsub132ps vfmsub132pd vfmsub312ps vfmsub312pd vfmsub213ps vfmsub213pd vfmsub123ps vfmsub123pd vfmsub231ps vfmsub231pd vfmsub321ps vfmsub321pd vfmsubadd132ps vfmsubadd132pd vfmsubadd312ps vfmsubadd312pd vfmsubadd213ps vfmsubadd213pd vfmsubadd123ps vfmsubadd123pd vfmsubadd231ps vfmsubadd231pd vfmsubadd321ps vfmsubadd321pd vfnmadd132ps vfnmadd132pd vfnmadd312ps vfnmadd312pd vfnmadd213ps vfnmadd213pd vfnmadd123ps vfnmadd123pd vfnmadd231ps vfnmadd231pd vfnmadd321ps vfnmadd321pd vfnmsub132ps vfnmsub132pd vfnmsub312ps vfnmsub312pd vfnmsub213ps vfnmsub213pd vfnmsub123ps vfnmsub123pd vfnmsub231ps vfnmsub231pd vfnmsub321ps vfnmsub321pd vfmadd132ss vfmadd132sd vfmadd312ss vfmadd312sd vfmadd213ss vfmadd213sd vfmadd123ss vfmadd123sd vfmadd231ss vfmadd231sd vfmadd321ss vfmadd321sd vfmsub132ss vfmsub132sd vfmsub312ss vfmsub312sd vfmsub213ss vfmsub213sd vfmsub123ss vfmsub123sd vfmsub231ss vfmsub231sd vfmsub321ss vfmsub321sd vfnmadd132ss vfnmadd132sd vfnmadd312ss vfnmadd312sd vfnmadd213ss vfnmadd213sd vfnmadd123ss vfnmadd123sd vfnmadd231ss vfnmadd231sd vfnmadd321ss vfnmadd321sd vfnmsub132ss vfnmsub132sd vfnmsub312ss vfnmsub312sd vfnmsub213ss vfnmsub213sd vfnmsub123ss vfnmsub123sd vfnmsub231ss vfnmsub231sd vfnmsub321ss vfnmsub321sd rdfsbase rdgsbase rdrand wrfsbase wrgsbase vcvtph2ps vcvtps2ph adcx adox rdseed clac stac xstore xcryptecb xcryptcbc xcryptctr xcryptcfb xcryptofb montmul xsha1 xsha256 llwpcb slwpcb lwpval lwpins vfmaddpd vfmaddps vfmaddsd vfmaddss vfmaddsubpd vfmaddsubps vfmsubaddpd vfmsubaddps vfmsubpd vfmsubps vfmsubsd vfmsubss vfnmaddpd vfnmaddps vfnmaddsd vfnmaddss vfnmsubpd vfnmsubps vfnmsubsd vfnmsubss vfrczpd vfrczps vfrczsd vfrczss vpcmov vpcomb vpcomd vpcomq vpcomub vpcomud vpcomuq vpcomuw vpcomw vphaddbd vphaddbq vphaddbw vphadddq vphaddubd vphaddubq vphaddubw vphaddudq vphadduwd vphadduwq vphaddwd vphaddwq vphsubbw vphsubdq vphsubwd vpmacsdd vpmacsdqh vpmacsdql vpmacssdd vpmacssdqh vpmacssdql vpmacsswd vpmacssww vpmacswd vpmacsww vpmadcsswd vpmadcswd vpperm vprotb vprotd vprotq vprotw vpshab vpshad vpshaq vpshaw vpshlb vpshld vpshlq vpshlw vbroadcasti128 vpblendd vpbroadcastb vpbroadcastw vpbroadcastd vpbroadcastq vpermd vpermpd vpermps vpermq vperm2i128 vextracti128 vinserti128 vpmaskmovd vpmaskmovq vpsllvd vpsllvq vpsravd vpsrlvd vpsrlvq vgatherdpd vgatherqpd vgatherdps vgatherqps vpgatherdd vpgatherqd vpgatherdq vpgatherqq xabort xbegin xend xtest andn bextr blci blcic blsi blsic blcfill blsfill blcmsk blsmsk blsr blcs bzhi mulx pdep pext rorx sarx shlx shrx tzcnt tzmsk t1mskc valignd valignq vblendmpd vblendmps vbroadcastf32x4 vbroadcastf64x4 vbroadcasti32x4 vbroadcasti64x4 vcompresspd vcompressps vcvtpd2udq vcvtps2udq vcvtsd2usi vcvtss2usi vcvttpd2udq vcvttps2udq vcvttsd2usi vcvttss2usi vcvtudq2pd vcvtudq2ps vcvtusi2sd vcvtusi2ss vexpandpd vexpandps vextractf32x4 vextractf64x4 vextracti32x4 vextracti64x4 vfixupimmpd vfixupimmps vfixupimmsd vfixupimmss vgetexppd vgetexpps vgetexpsd vgetexpss vgetmantpd vgetmantps vgetmantsd vgetmantss vinsertf32x4 vinsertf64x4 vinserti32x4 vinserti64x4 vmovdqa32 vmovdqa64 vmovdqu32 vmovdqu64 vpabsq vpandd vpandnd vpandnq vpandq vpblendmd vpblendmq vpcmpltd vpcmpled vpcmpneqd vpcmpnltd vpcmpnled vpcmpd vpcmpltq vpcmpleq vpcmpneqq vpcmpnltq vpcmpnleq vpcmpq vpcmpequd vpcmpltud vpcmpleud vpcmpnequd vpcmpnltud vpcmpnleud vpcmpud vpcmpequq vpcmpltuq vpcmpleuq vpcmpnequq vpcmpnltuq vpcmpnleuq vpcmpuq vpcompressd vpcompressq vpermi2d vpermi2pd vpermi2ps vpermi2q vpermt2d vpermt2pd vpermt2ps vpermt2q vpexpandd vpexpandq vpmaxsq vpmaxuq vpminsq vpminuq vpmovdb vpmovdw vpmovqb vpmovqd vpmovqw vpmovsdb vpmovsdw vpmovsqb vpmovsqd vpmovsqw vpmovusdb vpmovusdw vpmovusqb vpmovusqd vpmovusqw vpord vporq vprold vprolq vprolvd vprolvq vprord vprorq vprorvd vprorvq vpscatterdd vpscatterdq vpscatterqd vpscatterqq vpsraq vpsravq vpternlogd vpternlogq vptestmd vptestmq vptestnmd vptestnmq vpxord vpxorq vrcp14pd vrcp14ps vrcp14sd vrcp14ss vrndscalepd vrndscaleps vrndscalesd vrndscaless vrsqrt14pd vrsqrt14ps vrsqrt14sd vrsqrt14ss vscalefpd vscalefps vscalefsd vscalefss vscatterdpd vscatterdps vscatterqpd vscatterqps vshuff32x4 vshuff64x2 vshufi32x4 vshufi64x2 kandnw kandw kmovw knotw kortestw korw kshiftlw kshiftrw kunpckbw kxnorw kxorw vpbroadcastmb2q vpbroadcastmw2d vpconflictd vpconflictq vplzcntd vplzcntq vexp2pd vexp2ps vrcp28pd vrcp28ps vrcp28sd vrcp28ss vrsqrt28pd vrsqrt28ps vrsqrt28sd vrsqrt28ss vgatherpf0dpd vgatherpf0dps vgatherpf0qpd vgatherpf0qps vgatherpf1dpd vgatherpf1dps vgatherpf1qpd vgatherpf1qps vscatterpf0dpd vscatterpf0dps vscatterpf0qpd vscatterpf0qps vscatterpf1dpd vscatterpf1dps vscatterpf1qpd vscatterpf1qps prefetchwt1 bndmk bndcl bndcu bndcn bndmov bndldx bndstx sha1rnds4 sha1nexte sha1msg1 sha1msg2 sha256rnds2 sha256msg1 sha256msg2 hint_nop0 hint_nop1 hint_nop2 hint_nop3 hint_nop4 hint_nop5 hint_nop6 hint_nop7 hint_nop8 hint_nop9 hint_nop10 hint_nop11 hint_nop12 hint_nop13 hint_nop14 hint_nop15 hint_nop16 hint_nop17 hint_nop18 hint_nop19 hint_nop20 hint_nop21 hint_nop22 hint_nop23 hint_nop24 hint_nop25 hint_nop26 hint_nop27 hint_nop28 hint_nop29 hint_nop30 hint_nop31 hint_nop32 hint_nop33 hint_nop34 hint_nop35 hint_nop36 hint_nop37 hint_nop38 hint_nop39 hint_nop40 hint_nop41 hint_nop42 hint_nop43 hint_nop44 hint_nop45 hint_nop46 hint_nop47 hint_nop48 hint_nop49 hint_nop50 hint_nop51 hint_nop52 hint_nop53 hint_nop54 hint_nop55 hint_nop56 hint_nop57 hint_nop58 hint_nop59 hint_nop60 hint_nop61 hint_nop62 hint_nop63`,built_in:`ip eip rip al ah bl bh cl ch dl dh sil dil bpl spl r8b r9b r10b r11b r12b r13b r14b r15b ax bx cx dx si di bp sp r8w r9w r10w r11w r12w r13w r14w r15w eax ebx ecx edx esi edi ebp esp eip r8d r9d r10d r11d r12d r13d r14d r15d rax rbx rcx rdx rsi rdi rbp rsp r8 r9 r10 r11 r12 r13 r14 r15 cs ds es fs gs ss st st0 st1 st2 st3 st4 st5 st6 st7 mm0 mm1 mm2 mm3 mm4 mm5 mm6 mm7 xmm0 xmm1 xmm2 xmm3 xmm4 xmm5 xmm6 xmm7 xmm8 xmm9 xmm10 xmm11 xmm12 xmm13 xmm14 xmm15 xmm16 xmm17 xmm18 xmm19 xmm20 xmm21 xmm22 xmm23 xmm24 xmm25 xmm26 xmm27 xmm28 xmm29 xmm30 xmm31 ymm0 ymm1 ymm2 ymm3 ymm4 ymm5 ymm6 ymm7 ymm8 ymm9 ymm10 ymm11 ymm12 ymm13 ymm14 ymm15 ymm16 ymm17 ymm18 ymm19 ymm20 ymm21 ymm22 ymm23 ymm24 ymm25 ymm26 ymm27 ymm28 ymm29 ymm30 ymm31 zmm0 zmm1 zmm2 zmm3 zmm4 zmm5 zmm6 zmm7 zmm8 zmm9 zmm10 zmm11 zmm12 zmm13 zmm14 zmm15 zmm16 zmm17 zmm18 zmm19 zmm20 zmm21 zmm22 zmm23 zmm24 zmm25 zmm26 zmm27 zmm28 zmm29 zmm30 zmm31 k0 k1 k2 k3 k4 k5 k6 k7 bnd0 bnd1 bnd2 bnd3 cr0 cr1 cr2 cr3 cr4 cr8 dr0 dr1 dr2 dr3 dr8 tr3 tr4 tr5 tr6 tr7 r0 r1 r2 r3 r4 r5 r6 r7 r0b r1b r2b r3b r4b r5b r6b r7b r0w r1w r2w r3w r4w r5w r6w r7w r0d r1d r2d r3d r4d r5d r6d r7d r0h r1h r2h r3h r0l r1l r2l r3l r4l r5l r6l r7l r8l r9l r10l r11l r12l r13l r14l r15l db dw dd dq dt ddq do dy dz resb resw resd resq rest resdq reso resy resz incbin equ times byte word dword qword nosplit rel abs seg wrt strict near far a32 ptr`,meta:`%define %xdefine %+ %undef %defstr %deftok %assign %strcat %strlen %substr %rotate %elif %else %endif %if %ifmacro %ifctx %ifidn %ifidni %ifid %ifnum %ifstr %iftoken %ifempty %ifenv %error %warning %fatal %rep %endrep %include %push %pop %repl %pathsearch %depend %use %arg %stacksize %local %line %comment %endcomment .nolist __FILE__ __LINE__ __SECT__ __BITS__ __OUTPUT_FORMAT__ __DATE__ __TIME__ __DATE_NUM__ __TIME_NUM__ __UTC_DATE__ __UTC_TIME__ __UTC_DATE_NUM__ __UTC_TIME_NUM__ __PASS__ struc endstruc istruc at iend align alignb sectalign daz nodaz up down zero default option assume public bits use16 use32 use64 default section segment absolute extern global common cpu float __utf16__ __utf16le__ __utf16be__ __utf32__ __utf32le__ __utf32be__ __float8__ __float16__ __float32__ __float64__ __float80m__ __float80e__ __float128l__ __float128h__ __Infinity__ __QNaN__ __SNaN__ Inf NaN QNaN SNaN float8 float16 float32 float64 float80m float80e float128l float128h __FLOAT_DAZ__ __FLOAT_ROUND__ __FLOAT__`},contains:[e.COMMENT(`;`,`$`,{relevance:0}),{className:`number`,variants:[{begin:`\\b(?:([0-9][0-9_]*)?\\.[0-9_]*(?:[eE][+-]?[0-9_]+)?|(0[Xx])?[0-9][0-9_]*(\\.[0-9_]*)?(?:[pP](?:[+-]?[0-9_]+)?)?)\\b`,relevance:0},{begin:`\\$[0-9][0-9A-Fa-f]*`,relevance:0},{begin:`\\b(?:[0-9A-Fa-f][0-9A-Fa-f_]*[Hh]|[0-9][0-9_]*[DdTt]?|[0-7][0-7_]*[QqOo]|[0-1][0-1_]*[BbYy])\\b`},{begin:`\\b(?:0[Xx][0-9A-Fa-f_]+|0[DdTt][0-9_]+|0[QqOo][0-7_]+|0[BbYy][0-1_]+)\\b`}]},e.QUOTE_STRING_MODE,{className:`string`,variants:[{begin:`'`,end:`[^\\\\]'`},{begin:"`",end:"[^\\\\]`"}],relevance:0},{className:`symbol`,variants:[{begin:`^\\s*[A-Za-z._?][A-Za-z0-9_$#@~.?]*(:|\\s+label)`},{begin:`^\\s*%%[A-Za-z0-9_$#@~.?]*:`}],relevance:0},{className:`subst`,begin:`%[0-9]+`,relevance:0},{className:`subst`,begin:`%!S+`,relevance:0},{className:`meta`,begin:/^\s*\.[\w_-]+/}]}}t.exports=n})),lV=n(((e,t)=>{function n(e){let t={$pattern:/[a-zA-Z][a-zA-Z0-9_?]*/,keyword:`if.then.else.do.while.until.for.loop.import.with.is.as.where.when.by.data.constant.integer.real.text.name.boolean.symbol.infix.prefix.postfix.block.tree`.split(`.`),literal:[`true`,`false`,`nil`],built_in:`in.mod.rem.and.or.xor.not.abs.sign.floor.ceil.sqrt.sin.cos.tan.asin.acos.atan.exp.expm1.log.log2.log10.log1p.pi.at.text_length.text_range.text_find.text_replace.contains.page.slide.basic_slide.title_slide.title.subtitle.fade_in.fade_out.fade_at.clear_color.color.line_color.line_width.texture_wrap.texture_transform.texture.scale_?x.scale_?y.scale_?z?.translate_?x.translate_?y.translate_?z?.rotate_?x.rotate_?y.rotate_?z?.rectangle.circle.ellipse.sphere.path.line_to.move_to.quad_to.curve_to.theme.background.contents.locally.time.mouse_?x.mouse_?y.mouse_buttons`.split(`.`).concat([`ObjectLoader`,`Animate`,`MovieCredits`,`Slides`,`Filters`,`Shading`,`Materials`,`LensFlare`,`Mapping`,`VLCAudioVideo`,`StereoDecoder`,`PointCloud`,`NetworkAccess`,`RemoteControl`,`RegExp`,`ChromaKey`,`Snowfall`,`NodeJS`,`Speech`,`Charts`])},n={className:`string`,begin:`"`,end:`"`,illegal:`\\n`},r={className:`string`,begin:`'`,end:`'`,illegal:`\\n`},i={className:`string`,begin:`<<`,end:`>>`},a={className:`number`,begin:`[0-9]+#[0-9A-Z_]+(\\.[0-9-A-Z_]+)?#?([Ee][+-]?[0-9]+)?`},o={beginKeywords:`import`,end:`$`,keywords:t,contains:[n]},s={className:`function`,begin:/[a-z][^\n]*->/,returnBegin:!0,end:/->/,contains:[e.inherit(e.TITLE_MODE,{starts:{endsWithParent:!0,keywords:t}})]};return{name:`XL`,aliases:[`tao`],keywords:t,contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,n,r,i,s,o,a,e.NUMBER_MODE]}}t.exports=n})),uV=n(((e,t)=>{function n(e){return{name:`XQuery`,aliases:[`xpath`,`xq`,`xqm`],case_insensitive:!1,illegal:/(proc)|(abstract)|(extends)|(until)|(#)/,keywords:{$pattern:/[a-zA-Z$][a-zA-Z0-9_:-]*/,keyword:`module.schema.namespace.boundary-space.preserve.no-preserve.strip.default.collation.base-uri.ordering.context.decimal-format.decimal-separator.copy-namespaces.empty-sequence.except.exponent-separator.external.grouping-separator.inherit.no-inherit.lax.minus-sign.per-mille.percent.schema-attribute.schema-element.strict.unordered.zero-digit.declare.import.option.function.validate.variable.for.at.in.let.where.order.group.by.return.if.then.else.tumbling.sliding.window.start.when.only.end.previous.next.stable.ascending.descending.allowing.empty.greatest.least.some.every.satisfies.switch.case.typeswitch.try.catch.and.or.to.union.intersect.instance.of.treat.as.castable.cast.map.array.delete.insert.into.replace.value.rename.copy.modify.update`.split(`.`),type:`item.document-node.node.attribute.document.element.comment.namespace.namespace-node.processing-instruction.text.construction.xs:anyAtomicType.xs:untypedAtomic.xs:duration.xs:time.xs:decimal.xs:float.xs:double.xs:gYearMonth.xs:gYear.xs:gMonthDay.xs:gMonth.xs:gDay.xs:boolean.xs:base64Binary.xs:hexBinary.xs:anyURI.xs:QName.xs:NOTATION.xs:dateTime.xs:dateTimeStamp.xs:date.xs:string.xs:normalizedString.xs:token.xs:language.xs:NMTOKEN.xs:Name.xs:NCName.xs:ID.xs:IDREF.xs:ENTITY.xs:integer.xs:nonPositiveInteger.xs:negativeInteger.xs:long.xs:int.xs:short.xs:byte.xs:nonNegativeInteger.xs:unisignedLong.xs:unsignedInt.xs:unsignedShort.xs:unsignedByte.xs:positiveInteger.xs:yearMonthDuration.xs:dayTimeDuration`.split(`.`),literal:[`eq`,`ne`,`lt`,`le`,`gt`,`ge`,`is`,`self::`,`child::`,`descendant::`,`descendant-or-self::`,`attribute::`,`following::`,`following-sibling::`,`parent::`,`ancestor::`,`ancestor-or-self::`,`preceding::`,`preceding-sibling::`,`NaN`]},contains:[{className:`variable`,begin:/[$][\w\-:]+/},{className:`built_in`,variants:[{begin:/\barray:/,end:/(?:append|filter|flatten|fold-(?:left|right)|for-each(?:-pair)?|get|head|insert-before|join|put|remove|reverse|size|sort|subarray|tail)\b/},{begin:/\bmap:/,end:/(?:contains|entry|find|for-each|get|keys|merge|put|remove|size)\b/},{begin:/\bmath:/,end:/(?:a(?:cos|sin|tan[2]?)|cos|exp(?:10)?|log(?:10)?|pi|pow|sin|sqrt|tan)\b/},{begin:/\bop:/,end:/\(/,excludeEnd:!0},{begin:/\bfn:/,end:/\(/,excludeEnd:!0},{begin:/[^</$:'"-]\b(?:abs|accumulator-(?:after|before)|adjust-(?:date(?:Time)?|time)-to-timezone|analyze-string|apply|available-(?:environment-variables|system-properties)|avg|base-uri|boolean|ceiling|codepoints?-(?:equal|to-string)|collation-key|collection|compare|concat|contains(?:-token)?|copy-of|count|current(?:-)?(?:date(?:Time)?|time|group(?:ing-key)?|output-uri|merge-(?:group|key))?data|dateTime|days?-from-(?:date(?:Time)?|duration)|deep-equal|default-(?:collation|language)|distinct-values|document(?:-uri)?|doc(?:-available)?|element-(?:available|with-id)|empty|encode-for-uri|ends-with|environment-variable|error|escape-html-uri|exactly-one|exists|false|filter|floor|fold-(?:left|right)|for-each(?:-pair)?|format-(?:date(?:Time)?|time|integer|number)|function-(?:arity|available|lookup|name)|generate-id|has-children|head|hours-from-(?:dateTime|duration|time)|id(?:ref)?|implicit-timezone|in-scope-prefixes|index-of|innermost|insert-before|iri-to-uri|json-(?:doc|to-xml)|key|lang|last|load-xquery-module|local-name(?:-from-QName)?|(?:lower|upper)-case|matches|max|minutes-from-(?:dateTime|duration|time)|min|months?-from-(?:date(?:Time)?|duration)|name(?:space-uri-?(?:for-prefix|from-QName)?)?|nilled|node-name|normalize-(?:space|unicode)|not|number|one-or-more|outermost|parse-(?:ietf-date|json)|path|position|(?:prefix-from-)?QName|random-number-generator|regex-group|remove|replace|resolve-(?:QName|uri)|reverse|root|round(?:-half-to-even)?|seconds-from-(?:dateTime|duration|time)|snapshot|sort|starts-with|static-base-uri|stream-available|string-?(?:join|length|to-codepoints)?|subsequence|substring-?(?:after|before)?|sum|system-property|tail|timezone-from-(?:date(?:Time)?|time)|tokenize|trace|trans(?:form|late)|true|type-available|unordered|unparsed-(?:entity|text)?-?(?:public-id|uri|available|lines)?|uri-collection|xml-to-json|years?-from-(?:date(?:Time)?|duration)|zero-or-one)\b/},{begin:/\blocal:/,end:/\(/,excludeEnd:!0},{begin:/\bzip:/,end:/(?:zip-file|(?:xml|html|text|binary)-entry| (?:update-)?entries)\b/},{begin:/\b(?:util|db|functx|app|xdmp|xmldb):/,end:/\(/,excludeEnd:!0}]},{className:`string`,variants:[{begin:/"/,end:/"/,contains:[{begin:/""/,relevance:0}]},{begin:/'/,end:/'/,contains:[{begin:/''/,relevance:0}]}]},{className:`number`,begin:/(\b0[0-7_]+)|(\b0x[0-9a-fA-F_]+)|(\b[1-9][0-9_]*(\.[0-9_]+)?)|[0_]\b/,relevance:0},{className:`comment`,begin:/\(:/,end:/:\)/,relevance:10,contains:[{className:`doctag`,begin:/@\w+/}]},{className:`meta`,begin:/%[\w\-:]+/},{className:`title`,begin:/\bxquery version "[13]\.[01]"\s?(?:encoding ".+")?/,end:/;/},{beginKeywords:`element attribute comment document processing-instruction`,end:/\{/,excludeEnd:!0},{begin:/<([\w._:-]+)(\s+\S*=('|").*('|"))?>/,end:/(\/[\w._:-]+>)/,subLanguage:`xml`,contains:[{begin:/\{/,end:/\}/,subLanguage:`xquery`},`self`]}]}}t.exports=n})),dV=n(((e,t)=>{function n(e){let t={className:`string`,contains:[e.BACKSLASH_ESCAPE],variants:[e.inherit(e.APOS_STRING_MODE,{illegal:null}),e.inherit(e.QUOTE_STRING_MODE,{illegal:null})]},n=e.UNDERSCORE_TITLE_MODE,r={variants:[e.BINARY_NUMBER_MODE,e.C_NUMBER_MODE]},i=`namespace class interface use extends function return abstract final public protected private static deprecated throw try catch Exception echo empty isset instanceof unset let var new const self require if else elseif switch case default do while loop for continue break likely unlikely __LINE__ __FILE__ __DIR__ __FUNCTION__ __CLASS__ __TRAIT__ __METHOD__ __NAMESPACE__ array boolean float double integer object resource string char long unsigned bool int uint ulong uchar true false null undefined`;return{name:`Zephir`,aliases:[`zep`],keywords:i,contains:[e.C_LINE_COMMENT_MODE,e.COMMENT(/\/\*/,/\*\//,{contains:[{className:`doctag`,begin:/@[A-Za-z]+/}]}),{className:`string`,begin:/<<<['"]?\w+['"]?$/,end:/^\w+;/,contains:[e.BACKSLASH_ESCAPE]},{begin:/(::|->)+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/},{className:`function`,beginKeywords:`function fn`,end:/[;{]/,excludeEnd:!0,illegal:/\$|\[|%/,contains:[n,{className:`params`,begin:/\(/,end:/\)/,keywords:i,contains:[`self`,e.C_BLOCK_COMMENT_MODE,t,r]}]},{className:`class`,beginKeywords:`class interface`,end:/\{/,excludeEnd:!0,illegal:/[:($"]/,contains:[{beginKeywords:`extends implements`},n]},{beginKeywords:`namespace`,end:/;/,illegal:/[.']/,contains:[n]},{beginKeywords:`use`,end:/;/,contains:[n]},{begin:/=>/},t,r]}}t.exports=n})),fV=e(n(((e,t)=>{var n=PL();n.registerLanguage(`1c`,FL()),n.registerLanguage(`abnf`,IL()),n.registerLanguage(`accesslog`,LL()),n.registerLanguage(`actionscript`,RL()),n.registerLanguage(`ada`,zL()),n.registerLanguage(`angelscript`,BL()),n.registerLanguage(`apache`,VL()),n.registerLanguage(`applescript`,HL()),n.registerLanguage(`arcade`,UL()),n.registerLanguage(`arduino`,WL()),n.registerLanguage(`armasm`,GL()),n.registerLanguage(`xml`,KL()),n.registerLanguage(`asciidoc`,qL()),n.registerLanguage(`aspectj`,JL()),n.registerLanguage(`autohotkey`,YL()),n.registerLanguage(`autoit`,XL()),n.registerLanguage(`avrasm`,ZL()),n.registerLanguage(`awk`,QL()),n.registerLanguage(`axapta`,$L()),n.registerLanguage(`bash`,eR()),n.registerLanguage(`basic`,tR()),n.registerLanguage(`bnf`,nR()),n.registerLanguage(`brainfuck`,rR()),n.registerLanguage(`c`,iR()),n.registerLanguage(`cal`,aR()),n.registerLanguage(`capnproto`,oR()),n.registerLanguage(`ceylon`,sR()),n.registerLanguage(`clean`,cR()),n.registerLanguage(`clojure`,lR()),n.registerLanguage(`clojure-repl`,uR()),n.registerLanguage(`cmake`,dR()),n.registerLanguage(`coffeescript`,fR()),n.registerLanguage(`coq`,pR()),n.registerLanguage(`cos`,mR()),n.registerLanguage(`cpp`,hR()),n.registerLanguage(`crmsh`,gR()),n.registerLanguage(`crystal`,_R()),n.registerLanguage(`csharp`,vR()),n.registerLanguage(`csp`,yR()),n.registerLanguage(`css`,bR()),n.registerLanguage(`d`,xR()),n.registerLanguage(`markdown`,SR()),n.registerLanguage(`dart`,CR()),n.registerLanguage(`delphi`,wR()),n.registerLanguage(`diff`,TR()),n.registerLanguage(`django`,ER()),n.registerLanguage(`dns`,DR()),n.registerLanguage(`dockerfile`,OR()),n.registerLanguage(`dos`,kR()),n.registerLanguage(`dsconfig`,AR()),n.registerLanguage(`dts`,jR()),n.registerLanguage(`dust`,MR()),n.registerLanguage(`ebnf`,NR()),n.registerLanguage(`elixir`,PR()),n.registerLanguage(`elm`,FR()),n.registerLanguage(`ruby`,IR()),n.registerLanguage(`erb`,LR()),n.registerLanguage(`erlang-repl`,RR()),n.registerLanguage(`erlang`,zR()),n.registerLanguage(`excel`,BR()),n.registerLanguage(`fix`,VR()),n.registerLanguage(`flix`,HR()),n.registerLanguage(`fortran`,UR()),n.registerLanguage(`freedesktop`,WR()),n.registerLanguage(`fsharp`,GR()),n.registerLanguage(`gams`,KR()),n.registerLanguage(`gauss`,qR()),n.registerLanguage(`gcode`,JR()),n.registerLanguage(`gherkin`,YR()),n.registerLanguage(`glsl`,XR()),n.registerLanguage(`gml`,ZR()),n.registerLanguage(`go`,QR()),n.registerLanguage(`golo`,$R()),n.registerLanguage(`gradle`,ez()),n.registerLanguage(`graphql`,tz()),n.registerLanguage(`groovy`,nz()),n.registerLanguage(`haml`,rz()),n.registerLanguage(`handlebars`,iz()),n.registerLanguage(`haskell`,az()),n.registerLanguage(`haxe`,oz()),n.registerLanguage(`hsp`,sz()),n.registerLanguage(`http`,cz()),n.registerLanguage(`hy`,lz()),n.registerLanguage(`inform7`,uz()),n.registerLanguage(`ini`,dz()),n.registerLanguage(`irpf90`,fz()),n.registerLanguage(`isbl`,pz()),n.registerLanguage(`java`,mz()),n.registerLanguage(`javascript`,hz()),n.registerLanguage(`jboss-cli`,gz()),n.registerLanguage(`json`,_z()),n.registerLanguage(`julia`,vz()),n.registerLanguage(`julia-repl`,yz()),n.registerLanguage(`kotlin`,bz()),n.registerLanguage(`lasso`,xz()),n.registerLanguage(`latex`,Sz()),n.registerLanguage(`ldif`,Cz()),n.registerLanguage(`leaf`,wz()),n.registerLanguage(`less`,Tz()),n.registerLanguage(`lisp`,Ez()),n.registerLanguage(`livecodeserver`,Dz()),n.registerLanguage(`livescript`,Oz()),n.registerLanguage(`llvm`,kz()),n.registerLanguage(`lsl`,Az()),n.registerLanguage(`lua`,jz()),n.registerLanguage(`makefile`,Mz()),n.registerLanguage(`mathematica`,Nz()),n.registerLanguage(`matlab`,Pz()),n.registerLanguage(`maxima`,Fz()),n.registerLanguage(`mel`,Iz()),n.registerLanguage(`mercury`,Lz()),n.registerLanguage(`mipsasm`,Rz()),n.registerLanguage(`mizar`,zz()),n.registerLanguage(`perl`,Bz()),n.registerLanguage(`mojolicious`,Vz()),n.registerLanguage(`monkey`,Hz()),n.registerLanguage(`moonscript`,Uz()),n.registerLanguage(`n1ql`,Wz()),n.registerLanguage(`nestedtext`,Gz()),n.registerLanguage(`nginx`,Kz()),n.registerLanguage(`nim`,qz()),n.registerLanguage(`nix`,Jz()),n.registerLanguage(`node-repl`,Yz()),n.registerLanguage(`nsis`,Xz()),n.registerLanguage(`objectivec`,Zz()),n.registerLanguage(`ocaml`,Qz()),n.registerLanguage(`openscad`,$z()),n.registerLanguage(`oxygene`,eB()),n.registerLanguage(`parser3`,tB()),n.registerLanguage(`pf`,nB()),n.registerLanguage(`pgsql`,rB()),n.registerLanguage(`php`,iB()),n.registerLanguage(`php-template`,aB()),n.registerLanguage(`plaintext`,oB()),n.registerLanguage(`pony`,sB()),n.registerLanguage(`powershell`,cB()),n.registerLanguage(`processing`,lB()),n.registerLanguage(`profile`,uB()),n.registerLanguage(`prolog`,dB()),n.registerLanguage(`properties`,fB()),n.registerLanguage(`protobuf`,pB()),n.registerLanguage(`puppet`,mB()),n.registerLanguage(`purebasic`,hB()),n.registerLanguage(`python`,gB()),n.registerLanguage(`python-repl`,_B()),n.registerLanguage(`q`,vB()),n.registerLanguage(`qml`,yB()),n.registerLanguage(`r`,bB()),n.registerLanguage(`reasonml`,xB()),n.registerLanguage(`rib`,SB()),n.registerLanguage(`roboconf`,CB()),n.registerLanguage(`routeros`,wB()),n.registerLanguage(`rsl`,TB()),n.registerLanguage(`ruleslanguage`,EB()),n.registerLanguage(`rust`,DB()),n.registerLanguage(`sas`,OB()),n.registerLanguage(`scala`,kB()),n.registerLanguage(`scheme`,AB()),n.registerLanguage(`scilab`,jB()),n.registerLanguage(`scss`,MB()),n.registerLanguage(`shell`,NB()),n.registerLanguage(`smali`,PB()),n.registerLanguage(`smalltalk`,FB()),n.registerLanguage(`sml`,IB()),n.registerLanguage(`sqf`,LB()),n.registerLanguage(`sql`,RB()),n.registerLanguage(`stan`,zB()),n.registerLanguage(`stata`,BB()),n.registerLanguage(`step21`,VB()),n.registerLanguage(`stylus`,HB()),n.registerLanguage(`subunit`,UB()),n.registerLanguage(`swift`,WB()),n.registerLanguage(`taggerscript`,GB()),n.registerLanguage(`yaml`,KB()),n.registerLanguage(`tap`,qB()),n.registerLanguage(`tcl`,JB()),n.registerLanguage(`thrift`,YB()),n.registerLanguage(`tp`,XB()),n.registerLanguage(`twig`,ZB()),n.registerLanguage(`typescript`,QB()),n.registerLanguage(`vala`,$B()),n.registerLanguage(`vbnet`,eV()),n.registerLanguage(`vbscript`,tV()),n.registerLanguage(`vbscript-html`,nV()),n.registerLanguage(`verilog`,rV()),n.registerLanguage(`vhdl`,iV()),n.registerLanguage(`vim`,aV()),n.registerLanguage(`wasm`,oV()),n.registerLanguage(`wren`,sV()),n.registerLanguage(`x86asm`,cV()),n.registerLanguage(`xl`,lV()),n.registerLanguage(`xquery`,uV()),n.registerLanguage(`zephir`,dV()),n.HighlightJS=n,n.default=n,t.exports=n}))()).default,pV={key:0,class:`message-media`},mV=[`aria-label`],hV=[`src`,`alt`],gV=[`aria-label`],_V={class:`message-file__icon`},vV={class:`message-file__info`},yV={class:`message-file__name`},bV={class:`message-file__basename`},xV={class:`message-file__extension`},SV={key:0,class:`message-file__size`},CV=V(E({__name:`MessageAttachment`,props:{attachment:{}},emits:[`open`,`rendered`],setup(e,{emit:t}){let n=e,r=t,i=O(!1),a=O(0);f(()=>n.attachment.url,()=>{i.value=!1,a.value=0});let o=H(()=>{if(!a.value||!n.attachment.url)return n.attachment.url;let e=new URL(n.attachment.url,window.location.href);return e.searchParams.set(`_retry`,String(a.value)),e.href}),c=H(()=>{let e=n.attachment.name,t=e.lastIndexOf(`.`);return t>0?[e.slice(0,t),e.slice(t)]:[e,``]}),l=H(()=>{let e=n.attachment.size;return e===void 0||e<0?``:e<1024?`${e} B`:e<1024**2?`${+(e/1024).toFixed(1)} KB`:`${+(e/1024**2).toFixed(1)} MB`});return(t,n)=>e.attachment.kind===`image`&&e.attachment.url?(u(),F(`div`,pV,[i.value?(u(),F(`button`,{key:1,class:`message-file`,type:`button`,onClick:n[3]||=e=>{i.value=!1,a.value=Date.now()}},[U(Z,{name:`image`,size:22}),D(`span`,null,s(e.attachment.name)+` · 加载失败,点击重试`,1)])):(u(),F(`button`,{key:0,class:`message-media__image`,type:`button`,"aria-label":`预览图片 ${e.attachment.name}`,onClick:n[2]||=t=>r(`open`,e.attachment)},[D(`img`,{src:o.value,alt:e.attachment.name,onLoad:n[0]||=e=>r(`rendered`),onError:n[1]||=e=>{i.value=!0,r(`rendered`)}},null,40,hV)],8,mV))])):(u(),F(`button`,{key:1,class:`message-file`,type:`button`,"aria-label":`预览文件 ${e.attachment.name}${l.value?`,${l.value}`:``}`,onClick:n[4]||=t=>r(`open`,e.attachment)},[D(`span`,_V,[U(Z,{name:e.attachment.kind||`file`,size:20},null,8,[`name`])]),D(`span`,vV,[D(`span`,yV,[D(`span`,bV,s(c.value[0]),1),D(`span`,xV,s(c.value[1]),1)]),l.value?(u(),F(`span`,SV,s(l.value),1)):z(``,!0)])],8,gV))}}),[[`__scopeId`,`data-v-45dd9d46`]]),wV=new Set([`md`,`markdown`,`mdown`,`mkd`]);function TV(e){let t=e.match(/^( {0,3})(`{3,}|~{3,})(.*)$/);if(!t)return null;let[,n,r,i=``]=t,a=r[0],o=i.trim();return a==="`"&&o.includes("`")?null:{indent:n,marker:a,fence:r,length:r.length,info:o}}function EV(e,t=e.length,n=e.info){return`${e.indent}${e.marker.repeat(t)}${n?` ${n}`:``}`}function DV(e){let t=e.info.split(/\s+/)[0]?.toLowerCase();return wV.has(t)}function OV(e,t){let n=TV(e);return!!(n&&n.marker===t.marker&&n.length>=t.length&&n.info===``)}function kV(e,t=e.length-1){let n=t;for(;n>=0&&e[n].trim()===``;)--n;return n}function AV(e,t,n){for(let r=kV(e);r>n;--r)if(OV(e[r],t))return r;return-1}function jV(e,t){let n=[],r=!1;for(let i of e){let e=TV(i);if(!e||e.marker!==t)continue;r=!0;let a=n[n.length-1];if(e.info===``&&a&&e.length>=a.length){n.pop();continue}n.push({marker:e.marker,length:e.length})}return r&&n.length===0}function MV(e,t,n){let r=[];for(let i=n;i<e.length;i+=1){let n=TV(e[i]);n&&n.marker===t.marker&&n.info===``&&n.length>=t.length&&r.push(i)}for(let i=r.length-1;i>=0;--i){let a=r[i];if(jV(e.slice(n,a),t.marker))return a}return r[0]??-1}function NV(e,t){let n=0;for(let r of e){let e=TV(r);e?.marker===t&&(n=Math.max(n,e.length))}return n}function PV(e){let t=[];for(let n=0;n<e.length;n+=1){let r=TV(e[n]);if(!r||!DV(r)){t.push(e[n]);continue}let i=MV(e,r,n+1);if(i===-1){t.push(e[n]);continue}let a=e.slice(n+1,i),o=NV(a,r.marker);if(o>=r.length){let e=o+1;t.push(EV(r,e)),t.push(...a),t.push(EV(r,e,``))}else t.push(e[n]),t.push(...a),t.push(e[i]);n=i}return t}function FV(e){if(!e.includes("```")&&!e.includes(`~~~`))return e;let t=e.split(`
|
|
243
243
|
`),n=[],r=!1;for(let e=0;e<t.length;e+=1){let i=TV(t[e]);if(!i||!DV(i)){n.push(t[e]);continue}let a=AV(t,i,e+1);if(a===-1){n.push(t[e]);continue}if(a!==kV(t)){n.push(t[e]);continue}n.push(...PV(t.slice(e+1,a))),n.push(...t.slice(a+1)),r=!0;break}return r?n.join(`
|
|
244
244
|
`):e}function IV(e){let t=``,n=0;for(let r of e.split(`
|
|
245
|
-
`)){let e=TV(r);e&&(t?e.marker===t&&e.info===``&&e.length>=n&&(t=``):(t=e.marker,n=e.length))}return t?`${e}\n${t.repeat(n)}`:e}function LV(e,t=!1){let n=FV(e);return t?n:IV(n)}var RV={key:0,class:`plain-text`},zV=[`innerHTML`],BV={key:1,class:`plain-text`},VV=[`innerHTML`],HV=V(E({__name:`MarkdownContent`,props:{content:{},streaming:{type:Boolean,default:!1},streamIntervalMs:{default:80},legacyMedia:{type:Boolean,default:!1},plain:{type:Boolean,default:!1},mentionNames:{},fileCards:{type:Boolean,default:!1},processContent:{type:Boolean,default:!1},outlinePrefix:{default:``},fileProfile:{},separateMedia:{type:Boolean},bubble:{type:Boolean},attachments:{},contentParts:{}},emits:[`fileLink`,`preview`,`rendered`],setup(e,{emit:t}){let n=e,r=t,a=O(null),c=O(``),l=O(n.content),d;function g(){d!==void 0&&clearTimeout(d),d=void 0}f(()=>[n.content,n.streaming,n.plain],([e,t,r])=>{!t||r||n.streamIntervalMs===0||!e.startsWith(l.value)||!l.value?(g(),l.value=e):d===void 0&&(d=setTimeout(()=>{d=void 0,l.value=n.content},n.streamIntervalMs))}),i(g);let _=new Map,v=0;function b(e,t){let n=`${t}\0${e}`,r=_.get(n);if(r!==void 0)return r;let i=t&&fV.getLanguage(t)?fV.highlight(e,{language:t,ignoreIllegals:!0}).value:x(e);if(n.length+i.length<=256e3)for(_.set(n,i),v+=n.length+i.length;_.size>32||v>512e3;){let e=_.keys().next().value;v-=e.length+_.get(e).length,_.delete(e)}return i}function x(e){return e.replace(/&/g,`&`).replace(/</g,`<`).replace(/>/g,`>`).replace(/"/g,`"`)}let S=new mI({html:!1,breaks:!0,linkify:!0,typographer:!1,highlight(e,t){let n=t.trim().split(/\s+/)[0]?.toLowerCase()||``,r=b(e,n),i=n||`text`;return`<pre class="code-block"><div class="code-header"><span class="code-lang">${x(i)}</span><button type="button" class="code-copy" aria-label="复制代码">复制</button></div><code class="hljs language-${x(i)}">${r}</code></pre>`}});S.disable(`smartquotes`);let C=S.validateLink;S.validateLink=e=>!!SI(e)||C(e);let w=S.renderer.rules.image;S.renderer.rules.image=(e,t,r,i,a)=>{if(n.processContent)return x(e[t].content||e[t].attrGet(`src`)||`图片`);let o=SI(e[t].attrGet(`src`)||``,n.fileProfile);return o&&e[t].attrSet(`src`,o),w(e,t,r,i,a)};let E=S.renderer.rules.link_open??((e,t,n,r,i)=>i.renderToken(e,t,n));S.renderer.rules.link_open=(e,t,r,i,a)=>{let o=e[t],s=o.attrGet(`href`)||``,c=!n.processContent&&n.fileCards?SI(s,n.fileProfile):void 0;return c&&/\.[^/]+$/.test(yI(s)??``)&&o.attrSet(`href`,c),o.attrSet(`target`,`_blank`),o.attrSet(`rel`,`noopener noreferrer`),E(e,t,r,i,a)};let D=H(()=>{let e=n.legacyMedia?II(l.value||``,n.streaming):l.value||``;return e=LV(e,n.streaming),e});function A(e){let t=n.mentionNames;if(!t?.length)return e;let r=[...new Set(t.filter(Boolean))].sort((e,t)=>t.length-e.length).map(e=>e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`));if(!r.length)return e;let i=RegExp(`(?<![\\w])@(?:${r.join(`|`)})(?=$|[\\s.,!?;:,。!?;:)\\]}>])`,`gi`);return e.replace(i,e=>`<span class="mention-highlight">${e}</span>`)}let j={USE_PROFILES:{html:!0},FORBID_TAGS:[`style`,`svg`,`math`,`form`,`input`,`iframe`,`object`,`embed`],FORBID_ATTR:[`style`,`onerror`,`onclick`,`onload`],ALLOW_UNKNOWN_PROTOCOLS:!1,ADD_ATTR:[`target`]},M=_d(window);M.setConfig(j);function N(e){return M.sanitize(A(e))}let P=H(()=>{if(n.plain||n.separateMedia)return[];let e={},t=S.parse(D.value,e),r=[],i=0,a=0;for(let n=0;n<t.length;n++)a+=t[n].nesting,a===0&&(r.push(N(S.renderer.render(t.slice(i,n+1),S.options,e))),i=n+1);return r});function I(e){try{let t=new URL(e,window.location.href);return t.pathname=t.pathname.replace(/(\/api\/app\/files\/[^/]+)\/(?:preview|download)$/,`$1`),t.searchParams.delete(`_retry`),t.searchParams.sort(),t.href}catch{return e}}let L=H(()=>{if(!n.separateMedia)return[];let e=[],t=new Set,r=n.attachments??[];function i(n){t.add(n.id),e.push({attachment:n})}function a(t){if(!t.replace(/<[^>]+>/g,``).trim()&&!/<(?:img|hr|pre|table)\b/.test(t))return;let n=e.at(-1);n&&`html`in n&&!n.text?n.html+=t:e.push({html:t})}function o(t){if(n.plain){t.trim()&&e.push({html:``,text:t});return}let o=document.createElement(`template`);o.innerHTML=N(S.render(t));for(let e of[...o.content.children]){if(e.tagName!==`P`){a(e.outerHTML);continue}let t=``;for(let n of[...e.childNodes]){let e=n instanceof HTMLElement?n:void 0,o=e?.tagName===`IMG`?e:void 0,s=e?.tagName===`A`?e:void 0,c;if(s&&B(s))try{c=V(new URL(s.href,window.location.href))}catch{}if(o||c){a(`<p>${t}</p>`),t=``;let e=o?.getAttribute(`src`)||s.getAttribute(`href`),n=r.find(t=>t.url&&I(t.url)===I(e)),l=n?.name||(o?o.alt||`图片`:U(s,c));i(n??{id:e,url:e,name:l,kind:o?`image`:`file`})}else t+=e?e.outerHTML:x(n.textContent||``)}a(`<p>${t}</p>`)}}if(n.contentParts?.length)for(let e of n.contentParts)if(`text`in e)o(n.legacyMedia?II(e.text,n.streaming):e.text);else{let t=r.find(t=>t.id===e.attachmentId);t&&i(t)}else o(D.value);for(let e of r)t.has(e.id)||i(e);return e});f([P,L],async()=>{await o(),r(`rendered`)},{flush:`post`});function R(){a.value&&a.value.querySelectorAll(`pre .code-copy`).forEach((e,t)=>{e.dataset.bound||(e.dataset.bound=`true`,e.addEventListener(`click`,async()=>{let n=e.closest(`pre`)?.querySelector(`code`)?.textContent??``,r=`${t}:${n.length}`;c.value=r;let i=await lt(n);e.textContent=i?`已复制`:`复制失败`,e.setAttribute(`aria-label`,i?`代码已复制`:`复制代码失败`),window.setTimeout(()=>{c.value!==r||!e.isConnected||(c.value=``,e.textContent=`复制`,e.setAttribute(`aria-label`,`复制代码`))},1400)}))})}function B(e){if(e.closest(`blockquote, table, h1, h2, h3, h4, h5, h6, pre, code, strong, em, del`))return!1;let t=e.parentElement;if(!t||t.tagName!==`P`&&t.tagName!==`LI`)return!1;for(let t=e.previousSibling;t&&t.nodeName!==`BR`;t=t.previousSibling)if(t.nodeType!==Node.TEXT_NODE||t.textContent?.trim())return!1;for(let t=e.nextSibling;t&&t.nodeName!==`BR`;t=t.nextSibling)if(t.nodeType!==Node.TEXT_NODE||t.textContent?.trim())return!1;return!0}function V(e){if(e.origin!==window.location.origin)return;if(/^\/api\/app\/files\/[^/]+\/(?:download|preview)$/i.test(e.pathname))return{remote:!0};if(e.pathname!==`/api/files/download`)return;let t=yI(e.searchParams.get(`path`)||``);if(!(!t||!xI(t)))return{path:t,remote:!1}}function U(e,t){return t.path?.split(`/`).at(-1)||e.textContent?.trim()||`文件`}function W(){n.processContent||!n.fileCards||!a.value||a.value.querySelectorAll(`a`).forEach(e=>{if(e.dataset.fileCard)return;let t;try{t=new URL(e.href,window.location.href)}catch{return}let n=V(t);if(!n||!B(e))return;e.dataset.fileCard=`true`,e.classList.add(`file-link-card`),e.removeAttribute(`target`),e.removeAttribute(`rel`);let i=U(e,n);e.textContent=i,e.setAttribute(`aria-label`,`预览文件 ${i}`),e.addEventListener(`click`,e=>{e.preventDefault(),r(`fileLink`,i,`${t.pathname}${t.search}`)})})}function ee(){n.processContent||!n.fileCards||!a.value||a.value.querySelectorAll(`img`).forEach(e=>{if(e.dataset.mediaPreview||e.closest(`.message-media`))return;let t;try{t=new URL(e.currentSrc||e.src,window.location.href)}catch{return}if(t.origin!==window.location.origin)return;e.dataset.mediaPreview=`true`;let n=(t.searchParams.get(`path`)||decodeURIComponent(t.pathname)).split(`/`).at(-1)||`图片`;e.setAttribute(`role`,`button`),e.setAttribute(`tabindex`,`0`),e.setAttribute(`aria-label`,`预览图片 ${n}`);let i=e=>{e.preventDefault(),e.stopPropagation(),r(`fileLink`,n,`${t.pathname}${t.search}`)};e.addEventListener(`click`,i),e.addEventListener(`keydown`,e=>{(e.key===`Enter`||e.key===` `)&&i(e)});let a,o=async()=>{if(!e.isConnected||a)return;a=document.createElement(`span`),a.className=`media-load-error`,a.setAttribute(`role`,`alert`);let r=document.createElement(`span`);r.textContent=`${n}:图片加载失败。`;let i=document.createElement(`button`);if(i.type=`button`,i.textContent=`重试`,i.addEventListener(`click`,()=>{a?.remove(),a=void 0,e.hidden=!1;let n=new URL(t);n.searchParams.set(`_retry`,String(Date.now())),e.src=n.toString()}),a.append(r,i),e.after(a),e.hidden=!0,t.pathname===`/api/files/download`)try{let e=await fetch(t,{credentials:`same-origin`});if(e.ok)await e.body?.cancel(),r.textContent=`${n}:文件内容不是可解码的图片。`;else{let t=await e.json().catch(()=>({})),i=t.error?.message||(typeof t.error==`string`?t.error:void 0)||t.message||t.detail;r.textContent=`${n}:${typeof i==`string`?i:e.status===404?`服务器文件不存在或已被移动。`:e.status===403?`此目录未获授权,请检查设置中的文件访问权限。`:`服务器暂时无法读取此文件。`}`}}catch{r.textContent=`${n}:连接失败,请重试。`}};e.addEventListener(`error`,()=>{o()}),e.addEventListener(`load`,()=>{e.hidden=!1,a?.remove(),a=void 0}),e.complete&&e.naturalWidth===0&&o()})}function te(){!n.outlinePrefix||!a.value||a.value.querySelectorAll(`h1, h2, h3`).forEach((e,t)=>{e.id=`${n.outlinePrefix}-heading-${t+1}`})}function G(e){let t=e.target.closest(`a`);if(!t)return;let n=t.getAttribute(`href`)||``;/^(javascript|data|vbscript):/i.test(n)&&e.preventDefault()}return m(()=>{R(),W(),ee(),te()}),h(()=>{R(),W(),ee(),te()}),(t,n)=>(u(),F(T,null,[e.separateMedia?(u(),F(`div`,{key:0,ref_key:`root`,ref:a,class:y([`markdown message-parts`,{"message-parts--streaming":e.streaming}]),onClick:G},[(u(!0),F(T,null,p(L.value,(t,i)=>(u(),F(T,{key:i},[`attachment`in t?(u(),k(CV,{key:0,attachment:t.attachment,onOpen:n[0]||=e=>r(`preview`,e),onRendered:n[1]||=e=>r(`rendered`)},null,8,[`attachment`])):(u(),F(`div`,{key:1,class:y([`message-prose`,{"chat-bubble":e.bubble}])},[t.text===void 0?(u(),F(`div`,{key:1,class:`markdown-block`,innerHTML:t.html},null,8,zV)):(u(),F(`div`,RV,s(t.text),1))],2))],64))),128))],2)):e.plain?(u(),F(`div`,BV,s(e.content),1)):(u(),F(`div`,{key:2,ref_key:`root`,ref:a,class:y([`markdown`,{"markdown--streaming":e.streaming}]),onClick:G},[(u(!0),F(T,null,p(P.value,(e,t)=>(u(),F(`div`,{key:t,class:`markdown-block`,innerHTML:e},null,8,VV))),128))],2)),e.streaming?(u(),k(Z,{key:3,class:`stream-caret`,name:`arrow-up`,size:0})):z(``,!0)],64))}}),[[`__scopeId`,`data-v-19a2aa79`]]),UV={class:`preview-inspector`},WV=[`title`],GV={class:`preview-header-actions`},KV=[`href`],qV=[`src`,`alt`],JV=[`src`],YV=[`src`],XV={key:5,class:`preview-sheet`},ZV={key:6,class:`preview-text`},QV={key:0},$V=[`href`],eH={key:8,class:`preview-unavailable`},tH=V(E({__name:`PreviewInspector`,props:{item:{},showClose:{type:Boolean,default:!1},canAddToComposer:{type:Boolean,default:!0}},emits:[`close`,`addToComposer`,`source`],setup(e,{emit:t}){let n=e,r=t,a=H(()=>!!n.item.previewUrl),c=H(()=>[`text`,`code`].includes(n.item.kind)),l=H(()=>n.item.previewUrl||n.item.downloadUrl||``),d=O(null),m=O(null),h=O([]),g=O(``),_=O(!1),v=O(!1),b=O(``),x=H(()=>n.item.name.split(`.`).at(-1)?.toLocaleLowerCase()||``),S=H(()=>x.value===`docx`||/wordprocessingml/.test(n.item.mimeType||``)),C=H(()=>[`xlsx`,`xls`].includes(x.value)||/spreadsheetml|excel/.test(n.item.mimeType||``)),w=H(()=>n.item.kind===`pdf`||x.value===`pdf`||n.item.mimeType===`application/pdf`),E=0,A,j=new URL(`/assets/pdf.worker.min-CHFwMXne.mjs`,``+import.meta.url).href;function M(){let e=d.value;if(!e)return;e.style.setProperty(`--docx-preview-scale`,`1`);let t=[...e.querySelectorAll(`section.docx`)],n=Math.max(0,...t.map(e=>e.getBoundingClientRect().width));if(!n)return;let r=Math.max(1,e.clientWidth),i=Math.min(1,Math.max(.1,r/n));e.style.setProperty(`--docx-preview-scale`,i.toFixed(4))}function N(){A?.disconnect(),!(!d.value||typeof ResizeObserver>`u`)&&(A=new ResizeObserver(M),A.observe(d.value))}async function P(){let e=++E;if(A?.disconnect(),A=void 0,d.value?.style.removeProperty(`--docx-preview-scale`),h.value=[],g.value=n.item.textContent||``,_.value=n.item.textContent!==void 0,b.value=``,l.value&&!(!S.value&&!C.value&&!c.value&&!w.value)){v.value=!0;try{let t=await fetch(l.value,{credentials:`same-origin`});if(!t.ok)throw Error(`预览读取失败(${t.status})`);let n=await t.blob();if(e!==E)return;if(w.value){let t=await Qe(()=>import(`./pdf-BCisgslg.js`),__vite__mapDeps([23,3,4,1,5]));if(t.GlobalWorkerOptions.workerSrc=j,await o(),!m.value)return;m.value.replaceChildren();let r=await t.getDocument({data:await n.arrayBuffer()}).promise;for(let t=1;t<=Math.min(r.numPages,24);t+=1){if(e!==E||!m.value)return;let n=await r.getPage(t),i=n.getViewport({scale:1}),a=Math.min(1.45,Math.max(.55,(m.value.clientWidth-24)/i.width)),o=n.getViewport({scale:a}),s=Math.min(2,window.devicePixelRatio||1),c=document.createElement(`div`);c.className=`pdf-page`;let l=document.createElement(`canvas`);l.width=Math.floor(o.width*s),l.height=Math.floor(o.height*s),l.style.width=`${o.width}px`,l.style.height=`${o.height}px`,c.appendChild(l),m.value.appendChild(c);let u=l.getContext(`2d`);u&&await n.render({canvas:l,canvasContext:u,viewport:o,transform:s===1?void 0:[s,0,0,s,0,0]}).promise}}else if(S.value){let{renderAsync:e}=await Qe(async()=>{let{renderAsync:e}=await import(`./docx-preview-DZusoPTe.js`);return{renderAsync:e}},__vite__mapDeps([24,4]));if(await o(),!d.value)return;d.value.replaceChildren(),await e(n,d.value,void 0,{inWrapper:!0,breakPages:!0,ignoreWidth:!1,ignoreHeight:!1}),M(),N()}else if(C.value){let{default:e}=await Qe(async()=>{let{default:e}=await import(`./browser-B97PQaMt.js`);return{default:e}},[]);h.value=await e(n)}else c.value&&(_.value||(g.value=await n.text()),_.value=!0)}catch(e){b.value=e instanceof Error?e.message:`无法生成预览`}finally{v.value=!1}}}return f(()=>n.item.id,P,{immediate:!0,flush:`post`}),i(()=>A?.disconnect()),(t,n)=>(u(),F(`div`,UV,[D(`header`,null,[D(`strong`,{title:e.item.name},s(e.item.title||e.item.name),9,WV),D(`div`,GV,[e.item.sourceSessionId?(u(),F(`button`,{key:0,class:`icon-button`,type:`button`,"aria-label":`跳转到来源消息`,title:`跳转到来源消息`,onClick:n[0]||=t=>r(`source`,e.item)},[U(Z,{name:`external`,size:15})])):z(``,!0),e.item.downloadUrl||e.item.previewUrl?(u(),F(`a`,{key:1,class:`icon-button`,href:e.item.downloadUrl||e.item.previewUrl,download:``,"aria-label":`下载`,title:`下载`},[U(Z,{name:`download`,size:16})],8,KV)):z(``,!0),e.canAddToComposer?(u(),F(`button`,{key:2,class:`icon-button`,type:`button`,"aria-label":`加入输入框`,title:`加入输入框`,onClick:n[1]||=t=>r(`addToComposer`,e.item)},[U(Z,{name:`plus`,size:17})])):z(``,!0),e.showClose?(u(),F(`button`,{key:3,class:`icon-button preview-close`,type:`button`,"aria-label":`关闭预览`,title:`关闭预览`,onClick:n[2]||=e=>r(`close`)},[U(Z,{name:`close`,size:17})])):z(``,!0)])]),D(`div`,{class:y([`preview-stage`,`preview-stage--${e.item.kind}`])},[e.item.kind===`image`&&a.value?(u(),F(`img`,{key:0,src:e.item.previewUrl,alt:e.item.name},null,8,qV)):e.item.kind===`video`&&a.value?(u(),F(`video`,{key:1,src:e.item.previewUrl,controls:``,playsinline:``},null,8,JV)):e.item.kind===`audio`&&a.value?(u(),F(`audio`,{key:2,src:e.item.previewUrl,controls:``},null,8,YV)):w.value&&a.value?(u(),F(`div`,{key:3,ref_key:`pdfRoot`,ref:m,class:`preview-pdf`},null,512)):S.value?(u(),F(`div`,{key:4,ref_key:`officeRoot`,ref:d,class:`preview-office`},null,512)):C.value&&h.value.length?(u(),F(`div`,XV,[D(`table`,null,[D(`tbody`,null,[(u(!0),F(T,null,p(h.value.slice(0,200),(e,t)=>(u(),F(`tr`,{key:t},[(u(!0),F(T,null,p(e.slice(0,50),(e,t)=>(u(),F(`td`,{key:t},s(e),1))),128))]))),128))])])])):c.value&&_.value?(u(),F(`div`,ZV,[e.item.kind===`code`?(u(),F(`pre`,QV,s(g.value),1)):(u(),k(HV,{key:1,content:g.value},null,8,[`content`]))])):e.item.kind===`link`&&(e.item.previewUrl||e.item.downloadUrl)?(u(),F(`a`,{key:7,class:`preview-link`,href:e.item.previewUrl||e.item.downloadUrl,target:`_blank`,rel:`noopener noreferrer`},[D(`span`,null,[U(Z,{name:`link`,size:27})]),D(`strong`,null,s(e.item.title||e.item.name),1),n[3]||=D(`small`,null,`在新窗口中打开`,-1)],8,$V)):(u(),F(`div`,eH,[D(`span`,null,[U(Z,{name:b.value?`alert`:`file`,size:28},null,8,[`name`])]),D(`strong`,null,s(v.value?`正在生成预览…`:b.value||`此格式暂不支持内嵌预览`),1),D(`p`,null,s(b.value?`仍可下载文件后使用系统应用查看。`:`可下载文件,使用系统应用查看。`),1)]))],2)]))}}),[[`__scopeId`,`data-v-da7e4daa`]]),nH=[`aria-label`],rH=V(E({__name:`PreviewModal`,props:{item:{},items:{default:()=>[]},canAddToComposer:{type:Boolean,default:!0}},emits:[`close`,`addToComposer`,`source`],setup(e,{emit:t}){let n=e,r=t,a=H(()=>{let e=n.items.filter(e=>e.kind===`image`||e.kind===`video`);return e.some(e=>e.id===n.item.id||e.previewUrl===n.item.previewUrl)?e:[n.item]}),o=O(0),s=H(()=>a.value[o.value]??n.item),c=H(()=>o.value>0),l=H(()=>o.value<a.value.length-1),d;function p(){let e=a.value.findIndex(e=>e.id===n.item.id||e.previewUrl===n.item.previewUrl);o.value=e>=0?e:0}function h(){c.value&&--o.value}function g(){l.value&&(o.value+=1)}function _(e){(e.button===0||e.pointerType!==`mouse`)&&(e.target.closest(`button, a, audio`)||(d=e.clientX))}function v(e){if(d===void 0)return;let t=e.clientX-d;d=void 0,!(Math.abs(t)<48)&&(t<0?g():h())}function y(e){e.key===`Escape`?(e.preventDefault(),r(`close`)):e.key===`ArrowLeft`?(e.preventDefault(),h()):e.key===`ArrowRight`&&(e.preventDefault(),g())}return f([()=>n.item.id,a],p,{immediate:!0}),m(()=>window.addEventListener(`keydown`,y)),i(()=>window.removeEventListener(`keydown`,y)),(t,n)=>(u(),k(L,{to:`body`},[U(ge,{name:`preview-modal`},{default:S(()=>[D(`div`,{class:`preview-modal-layer`,onMousedown:n[4]||=X(e=>r(`close`),[`self`])},[D(`section`,{class:`preview-modal`,role:`dialog`,"aria-modal":`true`,"aria-label":`预览 ${s.value.title||s.value.name}`,onPointerdown:_,onPointerup:v,onPointercancel:n[3]||=e=>C(d)?d.value=void 0:d=void 0},[U(tH,{item:s.value,"show-close":``,"can-add-to-composer":e.canAddToComposer,onClose:n[0]||=e=>r(`close`),onAddToComposer:n[1]||=e=>r(`addToComposer`,e),onSource:n[2]||=e=>r(`source`,e)},null,8,[`item`,`can-add-to-composer`]),c.value?(u(),F(`button`,{key:0,class:`media-nav media-nav--previous`,type:`button`,"aria-label":`上一张媒体`,title:`上一张媒体`,onClick:h},[U(Z,{name:`chevron-left`,size:22})])):z(``,!0),l.value?(u(),F(`button`,{key:1,class:`media-nav media-nav--next`,type:`button`,"aria-label":`下一张媒体`,title:`下一张媒体`,onClick:g},[U(Z,{class:`media-nav__next-icon`,name:`chevron-left`,size:22})])):z(``,!0)],40,nH)],32)]),_:1})]))}}),[[`__scopeId`,`data-v-b797b8fc`]]),iH=new Set([`apng`,`avif`,`bmp`,`gif`,`heic`,`heif`,`ico`,`jfif`,`jpeg`,`jpg`,`jxl`,`png`,`svg`,`tif`,`tiff`,`webp`]),aH=new Set([`avi`,`m4v`,`mkv`,`mov`,`mp4`,`mpeg`,`mpg`,`webm`]);function oH(e,t,n=`local:${t}`,r){let i=e.split(`.`).at(-1)?.toLocaleLowerCase()||``,a=iH.has(i)?`image`:aH.has(i)?`video`:[`mp3`,`wav`,`m4a`,`aac`,`ogg`].includes(i)?`audio`:i===`pdf`?`pdf`:[`md`,`markdown`,`txt`,`json`,`yaml`,`yml`,`csv`,`js`,`ts`,`py`,`sh`].includes(i)?`text`:`file`;return{id:n,name:e,kind:r||a,previewUrl:t,downloadUrl:t}}function sH(e){try{let t=new URL(e,window.location.origin);return t.origin===window.location.origin&&t.pathname===`/api/files/download`&&(t.searchParams.delete(`_retry`),t.searchParams.sort()),t.origin===window.location.origin&&(t.pathname=t.pathname.replace(/(\/api\/app\/files\/[^/]+)\/(?:preview|download)$/,`$1`)),t.href}catch{return e}}function cH(e){try{let t=new URL(e,window.location.origin);return(t.pathname===`/api/files/download`?t.searchParams.get(`path`)||t.pathname:decodeURIComponent(t.pathname)).split(`/`).at(-1)||`媒体`}catch{return`媒体`}}function lH(e){let t=[],n=new Set,r=e=>{if(!e.previewUrl||![`image`,`video`].includes(e.kind))return;let r=sH(e.previewUrl);n.has(r)||(n.add(r),t.push(e))},i=new mI({html:!1}),a=i.validateLink;i.validateLink=e=>!!SI(e)||a(e);for(let t of e){if(![`user`,`assistant`].includes(t.role)&&!t.communication)continue;let e=e=>{let n=t.attachments?.find(t=>t.id===e);n?.url&&[`image`,`video`].includes(n.kind||`file`)&&r(oH(n.name,n.url,`${t.id}:${n.id}`,n.kind))},n=e=>{if(t.role===`user`)return;let n=II(e,t.status===`streaming`);for(let e of i.parse(n,{}))for(let n of e.children??[]){let e=n.type===`image`?n.attrGet(`src`):n.type===`link_open`?n.attrGet(`href`):null;if(!e)continue;let i=SI(e,t.profile)||e,a=t.attachments?.find(e=>e.url&&sH(e.url)===sH(i));r(oH(a?.name||cH(i),i,`${t.id}:${i}`,a?.kind))}};if(t.contentParts?.length)for(let r of t.contentParts)`text`in r?n(r.text):e(r.attachmentId);else n(t.content);for(let n of t.attachments??[])e(n.id)}return t}var uH={class:`chat-files`,"aria-label":`聊天文件`},dH={class:`files-search`},fH=[`aria-busy`],pH=[`aria-label`,`onClick`],mH={class:`attachment-copy`},hH=[`title`],gH=[`datetime`],_H={key:0,class:`files-status`,role:`status`},vH={key:1,class:`files-status`,role:`alert`},yH={key:2,class:`files-status`},bH=V(E({__name:`BotFilesPanel`,props:{conversationId:{},active:{type:Boolean,default:!0},revision:{}},setup(e){let t=e,n=O(``),r=O([]),a=O(null),c=O(!1),l=O(``),m=O(null),h=0,g,_,v=null;async function b(e=!1){if(!t.conversationId||!t.active)return;g?.abort();let i=++h;g=new AbortController,c.value=!0,l.value=``;let o=new URLSearchParams({limit:`50`});n.value.trim()&&o.set(`search`,n.value.trim()),e&&a.value&&o.set(`cursor`,a.value);try{let n=await Q(`/api/app/conversations/${encodeURIComponent(t.conversationId)}/files?${o}`,{signal:g.signal});if(i!==h)return;let s=new Map((e?r.value:[]).map(e=>[e.id,e]));for(let e of n.items)s.set(e.id,e);r.value=[...s.values()].sort((e,t)=>t.sentAt-e.sentAt),a.value=n.nextCursor}catch(e){i===h&&(l.value=e instanceof Error?e.message:`暂时无法读取文件`)}finally{i===h&&(c.value=!1)}}f([()=>t.conversationId,()=>t.active,()=>t.revision,()=>n.value.trim()],(e,n)=>{h++,g?.abort(),clearTimeout(_),r.value=[],a.value=null,m.value=null,l.value=``,c.value=!!(t.conversationId&&t.active),c.value&&(n&&e[0]===n[0]&&e[3]!==n[3]?_=setTimeout(()=>void b(),220):b())},{immediate:!0});function x(e){let t=new Date(e);return t.toLocaleString(`zh-CN`,{...t.getFullYear()===new Date().getFullYear()?{}:{year:`numeric`},month:`2-digit`,day:`2-digit`,hour:`2-digit`,minute:`2-digit`,hour12:!1})}function S(e){return e<1024?`${e} B`:e<1048576?`${(e/1024).toFixed(1)} KB`:`${(e/1048576).toFixed(1)} MB`}function C(e){return e.mimeType.startsWith(`image/`)?`image`:e.mimeType.startsWith(`video/`)?`video`:e.mimeType.startsWith(`audio/`)?`audio`:/\.(csv|xlsx?)$/i.test(e.name)?`board`:`file`}async function E(e){v=document.activeElement;let t=e.mimeType.toLowerCase().split(`;`)[0]||``,n=t.startsWith(`image/`)?`image`:t.startsWith(`video/`)?`video`:t.startsWith(`audio/`)?`audio`:t===`application/pdf`?`pdf`:t.startsWith(`text/`)||/json|xml|javascript/.test(t)?`text`:void 0,r=`/api/app/files/${encodeURIComponent(e.id)}`;m.value={...oH(e.name,`${r}/preview`,e.id,n),mimeType:e.mimeType,size:e.size,downloadUrl:`${r}/download`},await o(),document.querySelector(`.preview-modal .preview-close`)?.focus()}async function A(){m.value=null,await o(),v?.isConnected&&v.focus({preventScroll:!0})}return i(()=>{h++,g?.abort(),clearTimeout(_)}),(e,t)=>(u(),F(`section`,uH,[D(`label`,dH,[U(Z,{name:`search`,size:18}),d(D(`input`,{"onUpdate:modelValue":t[0]||=e=>n.value=e,"aria-label":`搜索文件`,placeholder:`搜索文件`},null,512),[[Y,n.value]]),n.value?(u(),F(`button`,{key:0,type:`button`,"aria-label":`清空搜索`,onClick:t[1]||=e=>n.value=``},[U(Z,{name:`close`,size:16})])):z(``,!0)]),D(`div`,{class:`files-scroll`,"aria-label":`文件列表,按日期从新到旧`,"aria-busy":c.value},[(u(!0),F(T,null,p(r.value,e=>(u(),F(`button`,{key:e.id,type:`button`,class:`attachment-row`,"aria-label":`预览 ${e.name}`,onClick:t=>E(e)},[D(`span`,{class:y([`attachment-icon`,{spreadsheet:C(e)===`board`,image:C(e)===`image`}])},[U(Z,{name:C(e),size:22},null,8,[`name`])],2),D(`span`,mH,[D(`strong`,{title:e.name},s(e.name),9,hH),D(`small`,null,[D(`time`,{datetime:new Date(e.sentAt).toISOString()},s(x(e.sentAt)),9,gH),t[4]||=D(`span`,null,`·`,-1),w(s(S(e.size)),1)])])],8,pH))),128)),c.value?(u(),F(`p`,_H,`正在读取文件…`)):l.value?(u(),F(`p`,vH,[w(s(l.value),1),D(`button`,{type:`button`,onClick:t[2]||=e=>b(r.value.length>0)},`重试`)])):r.value.length?a.value?(u(),F(`button`,{key:3,class:`load-more`,type:`button`,onClick:t[3]||=e=>b(!0)},`加载更多`)):z(``,!0):(u(),F(`p`,yH,s(n.value.trim()?`没有找到相关文件`:`暂无文件`),1))],8,fH),m.value?(u(),k(rH,{key:0,item:m.value,"can-add-to-composer":!1,onClose:A},null,8,[`item`])):z(``,!0)]))}}),[[`__scopeId`,`data-v-cde52027`]]),xH={class:`grok-auth`,"aria-label":`Grok Bot 登录授权`},SH={class:`account-icon`},CH={"aria-live":`polite`},wH={key:0,class:`connected`},TH={key:0,class:`account`},EH={key:0},DH={key:1,class:`hint`},OH={key:2,class:`pending`,role:`status`},kH={key:3,class:`error`,role:`alert`},AH=[`href`],jH={class:`actions`},MH=[`disabled`],NH=[`disabled`],PH=[`disabled`],FH={key:1,class:`hint`},IH={key:2,class:`hint`},LH={key:0},RH=[`disabled`],zH=[`open`],BH=[`disabled`],VH=V(E({__name:`GrokAuthPanel`,props:{isAdmin:{type:Boolean}},emits:[`changed`],setup(e,{emit:t}){let n=t,r=O(),a=O(``),o=O(``),c=O(!1),l=O(!0),d=O(!1),f=H(()=>r.value?.attempt?.status===`pending`),p=H(()=>f.value?`等待浏览器授权`:r.value?.status===`reauthorization-required`?`需要重新授权`:r.value?.status===`refreshing`?`正在续期`:r.value?.status===`connected`?`已授权`:`尚未登录`),h=H(()=>{try{let e=r.value?.attempt?.loginUrl;if(!e)return``;let t=new URL(e);return t.protocol===`https:`&&t.hostname===`cursor.com`&&!t.port&&!t.username&&!t.password&&t.pathname===`/loginDeepControl`&&t.searchParams.get(`redirectTarget`)===`cli`?t.href:``}catch{return``}}),g=!1,_,v,y,b=``;function x(e){r.value=e,e.attempt?.status!==`pending`&&(y=void 0);let t=JSON.stringify([e.status,e.account,e.attempt?.status]);b&&b!==t&&n(`changed`),b=t}async function S(){if(g||document.hidden||c.value)return;v?.abort();let e=new AbortController;v=e;try{let t=await Q(`/api/app/grok-cloud/auth`,{signal:e.signal});!g&&!e.signal.aborted&&(x(t),o.value=``)}catch(t){!g&&!e.signal.aborted&&(o.value=t instanceof Error?t.message:`无法读取 Grok Bot 授权状态`)}finally{g||(l.value=!1)}}async function C(e){if(!c.value){v?.abort(),c.value=!0,a.value=``;try{let t=await e();g||x(t)}catch(e){g||(a.value=e instanceof Error?e.message:`Grok Bot 授权操作未完成`)}finally{c.value=!1,l.value=!1}}}async function E(){y??=pt(),await C(()=>Q(`/api/app/grok-cloud/auth/start`,{method:`POST`,body:{requestId:y}})),f.value&&h.value&&window.open(h.value,`_blank`,`noopener,noreferrer`),f.value||(y=void 0),a.value&&await S()}async function k(){let e=r.value?.attempt?.id;e&&(await C(()=>Q(`/api/app/grok-cloud/auth/${e}/cancel`,{method:`POST`,body:{}})),y=void 0)}async function A(){let e=r.value?.attempt?.id;e&&await C(()=>Q(`/api/app/grok-cloud/auth/${e}/poll`,{method:`POST`,body:{}}))}async function j(){await C(()=>Q(`/api/app/grok-cloud/auth`,{method:`DELETE`})),y=void 0}async function M(){await C(()=>Q(`/api/app/grok-cloud/connect`,{method:`POST`,body:{importLocal:!0,version:r.value?.version??`0.47.0`}}))}async function N(){await S(),g||(_=setTimeout(N,f.value?2e3:1e4))}let P=()=>{document.hidden||S()};return m(()=>{document.addEventListener(`visibilitychange`,P),N()}),i(()=>{g=!0,clearTimeout(_),v?.abort(),document.removeEventListener(`visibilitychange`,P)}),(t,n)=>(u(),F(`section`,xH,[D(`header`,null,[D(`span`,SH,[U(Z,{name:`globe`,size:20})]),D(`div`,null,[n[1]||=D(`strong`,null,`Grok Bot`,-1),D(`small`,CH,s(l.value?`正在检查授权…`:p.value),1)]),r.value?.status===`connected`&&!f.value?(u(),F(`span`,wH,[U(Z,{name:`check`,size:14}),n[2]||=w(`已连接`,-1)])):z(``,!0)]),r.value?.account?.email||r.value?.account?.name?(u(),F(`p`,TH,[w(s(r.value.account.name),1),r.value.account.email?(u(),F(`span`,EH,s(r.value.account.email),1)):z(``,!0)])):z(``,!0),!r.value?.configured&&!f.value?(u(),F(`p`,DH,`使用 Grok Bot 所属的 Cursor 账号,在浏览器完成登录授权。`)):z(``,!0),f.value?(u(),F(`div`,OH,[...n[3]||=[D(`span`,{class:`pulse`},null,-1),D(`div`,null,[D(`strong`,null,`请在浏览器中完成授权`),D(`p`,null,`完成后返回Yaovi,这里会自动更新。授权链接有效期约 10 分钟。`)],-1)]])):z(``,!0),a.value||o.value||r.value?.attempt?.error||r.value?.error?(u(),F(`p`,kH,s(a.value||o.value||r.value?.attempt?.error||r.value?.error),1)):z(``,!0),f.value?(u(),F(T,{key:4},[h.value?(u(),F(`a`,{key:0,class:`primary`,href:h.value,target:`_blank`,rel:`noopener noreferrer`},[U(Z,{name:`external`,size:14}),n[4]||=w(`在浏览器继续授权`,-1)],8,AH)):z(``,!0),D(`div`,jH,[D(`button`,{disabled:c.value,onClick:A},`我已完成授权`,8,MH),D(`button`,{disabled:c.value,onClick:k},`取消授权`,8,NH)])],64)):(u(),F(T,{key:5},[e.isAdmin?(u(),F(`button`,{key:0,class:`primary`,disabled:c.value||l.value,onClick:E},[U(Z,{name:`external`,size:15}),w(s(r.value?.status===`connected`?`重新授权`:`使用 Cursor 账号登录`),1)],8,PH)):r.value?.configured?z(``,!0):(u(),F(`p`,FH,`请由管理员为当前账号完成云端授权。`)),r.value?.configured?(u(),F(`p`,IH,[w(s(r.value.automaticRefresh?`登录会自动续期,无需重复登录。`:`此连接尚未取得自动续期授权,建议重新登录。`),1),r.value.expiresAt&&r.value.status!==`reauthorization-required`?(u(),F(`span`,LH,`当前凭据有效期至 `+s(new Date(r.value.expiresAt).toLocaleString(`zh-CN`))+`。`,1)):z(``,!0)])):z(``,!0),r.value?.configured?(u(),F(`button`,{key:3,class:`disconnect`,disabled:c.value,onClick:j},`断开连接`,8,RH)):z(``,!0)],64)),n[7]||=D(`p`,{class:`privacy`},`登录凭据加密保存在当前服务器,供当前账号的机器人使用。`,-1),e.isAdmin&&!f.value?(u(),F(`details`,{key:6,open:d.value,onToggle:n[0]||=e=>d.value=e.target.open},[n[5]||=D(`summary`,null,`兼容旧连接`,-1),n[6]||=D(`p`,{class:`hint`},`仅用于迁移服务器上已有的 Grok Bot 登录;推荐使用上方浏览器授权。`,-1),D(`button`,{disabled:c.value,onClick:M},`导入服务器上的已有登录`,8,BH)],40,zH)):z(``,!0)]))}}),[[`__scopeId`,`data-v-65a30394`]]),HH={class:`panel-body`},UH={key:0,class:`agent-select`},WH=[`disabled`],GH=[`value`],KH={key:1},qH={class:`screen-caption`},JH=[`disabled`],YH={value:``},XH=[`value`],ZH=[`value`],QH={key:1},$H=[`disabled`,`aria-label`],eU=[`src`,`alt`],tU={key:1,class:`empty`},nU={key:2,class:`open-badge`},rU={key:0,class:`problem`,role:`alert`},iU={class:`computer-options`},aU={key:0,class:`managed-browser-option`,"aria-label":`托管浏览器`},oU={key:0,class:`hint`,role:`status`},sU=[`value`],cU=[`disabled`,`aria-busy`],lU=[`disabled`],uU=[`disabled`],dU={key:1,class:`hint`},fU={key:1,class:`problem`,role:`alert`,"aria-label":`本地虚拟机状态`},pU=[`disabled`],mU=[`value`,`disabled`],hU=[`disabled`],gU={key:0,class:`hint`},_U=[`value`,`disabled`],vU={key:0,value:``,disabled:``},yU=[`value`,`disabled`],bU={class:`hint`},xU=[`disabled`],SU=[`disabled`],CU=[`disabled`],wU=[`disabled`],TU=[`disabled`],EU={class:`control-state`},DU={key:8,class:`vm-actions`},OU=[`disabled`],kU=[`disabled`],AU=[`disabled`],jU={class:`hint`},MU=V(E({__name:`LocalVmChatPanel`,props:{agents:{},isAdmin:{type:Boolean},active:{type:Boolean},embedded:{type:Boolean}},emits:[`close`,`changed`,`settings`,`desktop`,`workspace`],setup(e,{emit:t}){let n=e,r=t,a=O(``),o=O(),c=O(),l=O(``),m=O(!1),h=O(!0),g=H(()=>n.agents.find(e=>e.id===a.value)),_=O({vm:!0,cloud:!0,managedBrowser:!1}),v=O(),b=O(!1),x=O(``),S=O(),C=O(!1),E=H(()=>_.value.cloud),A=H(()=>_.value.vm&&!!o.value),j=O(``),M=H(()=>o.value?.desktops?.find(e=>e.id===j.value)),N=H(()=>!!o.value?.enabled&&o.value.desktopId===j.value),P=H(()=>o.value?.fixedCapacity&&!m.value&&!o.value.inUse&&!g.value?.temporaryGoalId&&!N.value&&M.value?.online&&M.value.ready&&M.value.available!==!1);f(()=>o.value,e=>{if(!e?.fixedCapacity){j.value=``;return}if(e.desktops?.some(e=>e.id===j.value))return;let t=e.desktops?.filter(e=>e.online&&e.ready&&e.available!==!1)??[];j.value=e.desktopId??(t.length===1?t[0].id:``)});let I=H(()=>[_.value.cloud?`云虚拟机`:``,_.value.vm?`本地虚拟机`:``,_.value.managedBrowser?`托管浏览器`:``].filter(Boolean).join(` · `)),L=H(()=>{let e=[];return _.value.cloud&&S.value?.configured&&e.push({key:`cloud`,label:`云虚拟机`,backend:`cloud`}),_.value.vm&&e.push({key:`vm`,label:`本地虚拟机`,backend:`vm`}),_.value.managedBrowser&&e.push({key:`managed-browser`,label:`托管浏览器`,backend:`managed-browser`}),e}),B=O(``),V=H(()=>{let e=L.value.find(e=>e.backend===`vm`);return e&&o.value?.enabled&&o.value.container===`running`&&o.value.ready&&!o.value.problem?e:L.value.find(e=>e.backend===`cloud`&&S.value?.running&&S.value.connected)||L.value[0]}),W=H(()=>B.value?L.value.find(e=>e.key===B.value):V.value),ee=O(!1),te=H(()=>{let e=W.value;return e?e.backend===`cloud`?S.value?.configured?S.value?.running?`正在连接桌面…`:`打开云端电脑后可查看桌面`:`尚未连接 Grok Bot 账号`:e.backend===`managed-browser`?v.value?.available?v.value.open?`正在读取浏览器画面…`:`浏览器尚未打开,接管后可打开网页`:v.value?.installation?.message||v.value?.reason||`托管浏览器执行节点不可用`:o.value?.enabled?o.value.problem?o.value.problem:o.value.image?o.value.container===`missing`?`尚未创建虚拟机`:o.value.container===`stopped`?`虚拟机已停止`:`正在连接桌面…`:`本地虚拟机尚未准备`:o.value?.fixedCapacity?`请先连接下方的共享桌面`:`未使用电脑`:B.value?`所选电脑已不可用,请重新选择`:`暂无已开放的电脑`}),G,K=!1,ne=0,re=0,ie=0,q=()=>`/api/app/agents/${encodeURIComponent(a.value)}/local-vm`;async function ae(){let e=a.value,t=++ie;try{let n=await Q(`/api/app/agents/${encodeURIComponent(e)}/managed-browser`);!K&&e===a.value&&t===ie&&(v.value=n,x.value=``)}catch(n){!K&&e===a.value&&t===ie&&(v.value=void 0,x.value=n instanceof Error?n.message:`无法读取托管浏览器状态`)}}async function J(){if(!(m.value||b.value)){b.value=!0;try{await ae(),await oe()}finally{b.value=!1}}}async function oe(){if(K||n.active===!1||!a.value||document.hidden||m.value)return;let e=++re,t=a.value,r=W.value,i=r?.backend===`vm`?o.value?.container===`running`&&o.value?.ready:r?.backend===`cloud`?!!S.value?.running&&!!S.value?.connected:r?.backend===`managed-browser`&&!!v.value?.available&&!!v.value?.open;if(!r||!i){c.value=void 0,ee.value=!1;return}ee.value=!0;try{let n=new URLSearchParams({backend:r.backend});r.host&&n.set(`host`,r.host);let i=await Q(`/api/app/agents/${encodeURIComponent(t)}/computer/frame?${n}`);e===re&&!K&&t===a.value&&(c.value=i)}catch{e===re&&!K&&(c.value=void 0)}finally{e===re&&!K&&(ee.value=!1)}}f(()=>W.value?.key,()=>{re++,c.value=void 0,oe()},{flush:`sync`});async function se(){if(K||n.active===!1||!a.value||document.hidden||m.value)return;let e=ne;try{try{let t=await Q(`/api/app/settings/host-tools`);e===ne&&!K&&(_.value={vm:t.vm!==!1,cloud:t.cloud!==!1,managedBrowser:t.managedBrowser===!0})}catch{}let t=a.value,[n,r]=await Promise.all([Q(`/api/app/agents/${t}/cloud-computer`),_.value.vm?Q(q()):Promise.resolve(void 0),_.value.managedBrowser?ae():Promise.resolve(void 0)]);if(e!==ne||K||(S.value=n,o.value=r,await oe(),e!==ne||K))return;l.value=``}catch(t){e===ne&&(l.value=t instanceof Error?t.message:`无法读取电脑画面`)}finally{e===ne&&(h.value=!1)}}async function ce(e){let t=``;if(m.value)return!1;m.value=!0,l.value=``;try{await e(),r(`changed`)}catch(e){t=e instanceof Error&&e.message?e.message:`电脑操作未完成`}finally{m.value=!1,await se(),t&&(l.value=t)}return!t}async function le(){if(!P.value)return;let e=a.value,t=j.value;await ce(()=>Q(`/api/app/agents/${encodeURIComponent(e)}/local-vm`,{method:`PUT`,body:{enabled:!0,desktopId:t}}))&&a.value===e&&(B.value=`vm`)}async function ue(e,t){let n=g.value;!n||m.value||![`vm`,`cloud`,`managed-browser`].includes(e)||e===`cloud`&&!await ce(()=>Q(`/api/app/agents/${encodeURIComponent(n.id)}/cloud-computer/open`,{method:`POST`,body:{}}))||!K&&g.value?.id===n.id&&r(`desktop`,n,e,t)}async function de(){let e=W.value;e&&c.value&&await ue(e.backend,e.host)}function fe(e){e===`recreate`&&!confirm(`重建这台虚拟机?当前桌面程序将关闭,工作文件、软件配置和登录资料会保留。`)||e===`remove`&&!confirm(`移除这台虚拟机实例以切换镜像?工作文件、软件配置和登录资料会保留。`)||ce(()=>Q(q()+`/`+e,{method:`POST`,body:{}}))}async function pe(){let e=ne;await se(),!K&&e===ne&&(G=setTimeout(pe,3e3))}return f(()=>n.agents.map(e=>e.id).join(`,`),()=>{n.agents.some(e=>e.id===a.value)||(a.value=n.agents[0]?.id??``)},{immediate:!0}),f(a,()=>{ne++,re++,ie++,o.value=void 0,j.value=``,S.value=void 0,v.value=void 0,x.value=``,c.value=void 0,l.value=``,h.value=!0,B.value=``,clearTimeout(G),pe()},{immediate:!0}),f(()=>n.active,e=>{e&&se()}),i(()=>{K=!0,ne++,re++,clearTimeout(G)}),(t,n)=>(u(),F(`aside`,{class:y([`local-vm-chat-panel`,{embedded:e.embedded}]),"aria-label":`机器人电脑面板`},[D(`header`,null,[n[20]||=D(`strong`,null,`电脑`,-1),D(`button`,{"aria-label":`关闭电脑面板`,onClick:n[0]||=e=>r(`close`)},[U(Z,{name:`close`})])]),D(`div`,HH,[e.agents.length>1?(u(),F(`label`,UH,[n[21]||=w(`机器人`,-1),d(D(`select`,{"onUpdate:modelValue":n[1]||=e=>a.value=e,disabled:m.value},[(u(!0),F(T,null,p(e.agents,e=>(u(),F(`option`,{key:e.id,value:e.id},s(e.name),9,GH))),128))],8,WH),[[Me,a.value]])])):z(``,!0),g.value?(u(),F(T,{key:2},[D(`div`,qH,[D(`span`,null,s(g.value.name)+`的电脑`,1),L.value.length>1||B.value?d((u(),F(`select`,{key:0,"onUpdate:modelValue":n[2]||=e=>B.value=e,disabled:m.value,class:`screen-select`,"aria-label":`显示的桌面`},[D(`option`,YH,`自动`+s(W.value&&!B.value?` · `+W.value.label:``),1),B.value&&!W.value?(u(),F(`option`,{key:0,value:B.value,disabled:``},`所选电脑不可用`,8,XH)):z(``,!0),(u(!0),F(T,null,p(L.value,e=>(u(),F(`option`,{key:e.key,value:e.key},s(e.label),9,ZH))),128))],8,JH)),[[Me,B.value]]):I.value?(u(),F(`small`,QH,s(W.value?.label||I.value),1)):z(``,!0)]),D(`button`,{class:`preview`,disabled:!c.value||m.value,"aria-label":`打开${W.value?.label||g.value.name}的桌面`,onClick:n[3]||=e=>de()},[c.value?(u(),F(`img`,{key:0,src:`data:image/png;base64,${c.value.data}`,alt:`${W.value?.label||g.value.name}的电脑画面`},null,8,eU)):(u(),F(`span`,tU,[U(Z,{name:`monitor`,size:26}),D(`span`,null,s(h.value?`正在检查电脑…`:ee.value?`正在读取所选电脑画面…`:te.value),1)])),c.value?(u(),F(`span`,nU,[U(Z,{name:`external`,size:12}),n[22]||=w(`打开桌面`,-1)])):z(``,!0)],8,$H),l.value?(u(),F(`p`,rU,s(l.value),1)):z(``,!0),n[34]||=D(`p`,{class:`hint`},`可查看和接管本地虚拟机、云虚拟机和托管浏览器。设备授权状态在「设置 → 环境与权限 → 本机权限」中查看。`,-1),D(`div`,iU,[_.value.managedBrowser?(u(),F(`section`,aU,[n[23]||=D(`strong`,null,`托管浏览器`,-1),n[24]||=D(`p`,null,`网页操作使用独立浏览器。虚拟机的运行和维护状态在下方显示;查看状态不会打开网页。`,-1),v.value?.available?z(``,!0):(u(),F(`p`,oU,s(x.value||v.value?.installation?.message||v.value?.reason||`执行节点尚未提供浏览器能力,请检查节点配置与连接。`),1)),v.value?.installation?.status===`installing`?(u(),F(`progress`,{key:1,value:v.value.installation.progress,max:`100`,"aria-label":`浏览器准备进度`},null,8,sU)):z(``,!0),v.value?.available?z(``,!0):(u(),F(`button`,{key:2,type:`button`,disabled:m.value||b.value,"aria-busy":b.value,onClick:J},s(b.value?`正在检测…`:`重新检测`),9,cU)),D(`button`,{class:`primary`,disabled:m.value||b.value||!R(gt)(v.value),onClick:n[4]||=e=>ue(`managed-browser`)},s(v.value?.installation?.status===`failed`?`重试并接管浏览器`:v.value?.open?`接管浏览器`:`打开并接管浏览器`),9,lU)])):z(``,!0),E.value?(u(),F(T,{key:1},[n[25]||=D(`strong`,null,`云虚拟机`,-1),n[26]||=D(`p`,null,`多个机器人共用同一台 Grok Bot 云端虚拟机、工作文件和浏览器登录。各 Bot 的身份、记忆和聊天记录保持独立。`,-1),S.value?.configured?(u(),F(`button`,{key:0,class:`primary`,disabled:m.value,onClick:n[5]||=e=>ue(`cloud`)},s(S.value?.mode===`human`?`打开控制中的桌面`:`接管云虚拟机`),9,uU)):z(``,!0),D(`button`,{onClick:n[6]||=e=>C.value=!C.value},s(S.value?.configured?`云端连接设置`:`连接 Grok Bot`),1),!e.isAdmin&&!S.value?.configured?(u(),F(`p`,dU,`请由管理员为当前账号配置 Grok Bot 连接。`)):z(``,!0)],64)):z(``,!0),A.value&&o.value?(u(),F(T,{key:2},[n[32]||=D(`strong`,null,`本地虚拟机`,-1),D(`p`,null,s(g.value.temporaryGoalId?`临时助手的电脑由当前任务管理`:o.value.fixedCapacity||o.value.mode===`shared`?`共享虚拟机 · 与其他成员共用桌面和工作文件`:`此机器人的独立虚拟机`),1),o.value.maintenance?(u(),k(Ll,{key:0,state:o.value.maintenance},null,8,[`state`])):z(``,!0),o.value.problem?(u(),F(`p`,fU,s(o.value.problem),1)):z(``,!0),o.value.fixedCapacity&&!g.value.temporaryGoalId?(u(),F(T,{key:2},[D(`label`,null,[n[28]||=w(`共享桌面`,-1),d(D(`select`,{"onUpdate:modelValue":n[7]||=e=>j.value=e,"aria-label":`共享桌面`,disabled:m.value||o.value.inUse},[n[27]||=D(`option`,{value:``,disabled:``},`请选择共享桌面`,-1),(u(!0),F(T,null,p(o.value.desktops,e=>(u(),F(`option`,{key:e.id,value:e.id,disabled:!e.online||!e.ready||e.available===!1},s(e.name)+s(e.available===!1?` · 不可用`:e.online?e.ready?``:` · 正在启动`:` · 离线`),9,mU))),128))],8,pU),[[Me,j.value]])]),D(`button`,{class:`primary`,"data-testid":`connect-compose-desktop`,disabled:!P.value,onClick:le},s(N.value?`已连接`:`连接所选桌面`),9,hU),o.value.desktops?.length?z(``,!0):(u(),F(`p`,gU,`暂无可连接的共享桌面,请检查本地虚拟机设置。`))],64)):z(``,!0),!o.value.fixedCapacity&&o.value.images?.length&&!g.value.temporaryGoalId?(u(),F(T,{key:3},[D(`label`,null,[n[29]||=w(`虚拟机镜像`,-1),D(`select`,{value:o.value.imageKey??``,disabled:m.value||o.value.inUse||o.value.container!==`missing`,onChange:n[8]||=e=>ce(()=>R(Q)(q()+`/image`,{method:`PUT`,body:{imageKey:e.target.value}}))},[o.value.imageKey?z(``,!0):(u(),F(`option`,vU,s(o.value.image?`当前保留的镜像`:`请选择已准备的镜像`),1)),(u(!0),F(T,null,p(o.value.images,e=>(u(),F(`option`,{key:e.key,value:e.key,disabled:!e.ready},s(e.name)+s(e.ready?``:` · 未准备`),9,yU))),128))],40,_U)]),D(`p`,bU,s(o.value.mode===`shared`?`同一共享桌面只能使用一个镜像,选择会对所有共享成员生效。`:`此桌面的镜像、文件和浏览器资料与其他独立桌面分开。`)+s(o.value.container===`missing`?``:`切换镜像前请先移除实例。`),1)],64)):z(``,!0),!o.value.fixedCapacity&&!o.value.image?(u(),F(`button`,{key:4,class:`primary`,disabled:!e.isAdmin,onClick:n[9]||=e=>r(`settings`)},`设置本地虚拟机`,8,xU)):!o.value.fixedCapacity&&o.value.container===`missing`&&!g.value.temporaryGoalId?(u(),F(`button`,{key:5,class:`primary`,disabled:m.value,onClick:n[10]||=e=>fe(`create`)},`创建 `+s(g.value.name)+` 的虚拟机`,9,SU)):!o.value.fixedCapacity&&o.value.container===`stopped`&&!g.value.temporaryGoalId?(u(),F(`button`,{key:6,class:`primary`,disabled:m.value,onClick:n[11]||=e=>fe(`start`)},`启动虚拟机`,8,CU)):o.value.container===`running`?(u(),F(T,{key:7},[D(`button`,{class:`primary`,disabled:!o.value.ready||m.value,onClick:n[12]||=e=>ue(`vm`)},`打开桌面`,8,wU),o.value.mode===`per-bot`?(u(),F(`button`,{key:0,disabled:m.value,onClick:n[13]||=e=>r(`workspace`,g.value)},[U(Z,{name:`panel`}),n[30]||=w(`打开双桌面`,-1)],8,TU)):z(``,!0),D(`p`,EU,s(o.value.controlMode===`human`?`你或其他操作者正在控制电脑`:o.value.inUse?`机器人正在操作`:`仅查看 · 虚拟机空闲`),1)],64)):z(``,!0),!o.value.fixedCapacity&&o.value.container!==`missing`&&!g.value.temporaryGoalId?(u(),F(`div`,DU,[D(`button`,{disabled:m.value||o.value.inUse,onClick:n[14]||=e=>fe(`stop`)},`停止虚拟机`,8,OU),D(`button`,{disabled:m.value||o.value.inUse,onClick:n[15]||=e=>fe(`recreate`)},`重建虚拟机`,8,kU),D(`button`,{disabled:m.value||o.value.inUse,onClick:n[16]||=e=>fe(`remove`)},`移除实例`,8,AU)])):z(``,!0),D(`p`,jU,s(o.value.fixedCapacity?`桌面由 Compose 创建,数量固定。这里只连接已有共享桌面;工作目录为 /home/cua/workspace。`:`重建会保留工作文件、软件配置和登录资料。${R(zl)(o.value.idleStopMinutes)},可在设置中修改。`),1),e.isAdmin?(u(),F(`button`,{key:9,class:`settings-link`,onClick:n[17]||=e=>r(`settings`)},[U(Z,{name:`settings`,size:14}),n[31]||=w(`本地虚拟机设置`,-1)])):z(``,!0)],64)):z(``,!0)]),E.value?z(``,!0):(u(),F(`button`,{key:1,class:`settings-link`,onClick:n[18]||=e=>C.value=!C.value},[U(Z,{name:`globe`,size:14}),n[33]||=w(`Grok Bot 云端连接`,-1)])),C.value?(u(),k(VH,{key:2,"is-admin":e.isAdmin,onChanged:n[19]||=e=>{r(`changed`),se()}},null,8,[`is-admin`])):z(``,!0)],64)):(u(),F(`p`,KH,`当前聊天没有可用的机器人。`))])],2))}}),[[`__scopeId`,`data-v-ac3d303c`]]);function NU(e,t=Date.now()){if(!e)return`时间未记录`;let n=new Date(e),r=new Date(t);if(n.toDateString()===r.toDateString())return`今天`;let i=new Date(r);return i.setDate(r.getDate()-1),n.toDateString()===i.toDateString()?`昨天`:n.toLocaleDateString(`zh-CN`)}var PU=[`onKeydown`],FU={class:`detail-heading`},IU=[`disabled`],LU={key:0,class:`home-header`},RU={role:`status`},zU={key:1,class:`home-tabs`,"aria-label":`Bot 功能`},BU=[`aria-pressed`,`onClick`],VU={key:2,class:`home-content`},HU={class:`record-status`},UU={key:0},WU={key:1,class:`home-task`,"aria-label":`任务详情`},GU={class:`home-task-owner`},KU={class:`home-task-person`},qU={key:0},JU={key:1},YU={key:2},XU={key:0,class:`home-task-criteria`},ZU={key:0},QU={key:1,class:`detail-text`},$U={key:2,class:`home-task-artifacts`},eW=[`href`],tW={key:2,class:`detail-text`},nW={key:3,class:`note`},rW={key:4,class:`actions`},iW=[`disabled`],aW=[`disabled`],oW={key:5,class:`note`},sW={key:3,class:`home-content`},cW={key:4,class:`home-content`},lW={key:0,class:`note`,role:`status`},uW=[`onClick`],dW={class:`record-copy`},fW={key:0,class:`record-task-owner`},pW={key:1},mW={key:1,class:`home-empty`},hW={key:8,class:`home-error`,role:`alert`},gW=V(E({__name:`BotHomePanel`,props:{agent:{},draft:{},agents:{},conversations:{},conversationId:{},isAdmin:{type:Boolean},permissionControl:{type:Boolean},mainBotId:{},knowledgeEnabled:{type:Boolean},busy:{type:Boolean},error:{},initialEdit:{type:Boolean},active:{type:Boolean},connection:{}},emits:[`close`,`save`,`changed`,`manageModels`,`managePermissions`,`configure`,`desktop`,`workspace`,`settings`,`openConversation`],setup(e,{expose:t,emit:n}){let r=e,a=n,o=[{id:`activity`,label:`活动`,icon:`menu`},{id:`review`,label:`审核`,icon:`shield`},{id:`computer`,label:`电脑`,icon:`monitor`},{id:`routines`,label:`定时`,icon:`clock`},{id:`files`,label:`Bot 文件`,icon:`files`}],c=O(!1),l=O(`activity`),d=O(),h=O(!!r.initialEdit),g=O(r.initialEdit?`overview`:`identity`),_=O(!1),v=O(!1),b=O(),x=O(),S=O(),C=O(!1),E=O(``),A=O(!1),j=!0,M=0,N,P=null,I=H(()=>UI(r.conversations).get(r.agent.id)??`idle`),L=H(()=>({working:`工作中`,waiting:`等待处理`,loading:`同步中`,idle:`空闲`})[I.value]??`状态待确认`),B=H(()=>r.connection===`online`?`服务器在线 · ${L.value}`:r.connection===`offline`?`服务器离线`:r.connection===`expired`?`登录已过期`:`连接与同步中`),V=H(()=>{let e=l.value===`review`?S.value?.reviews??[]:S.value?.activities??[],t=new Map;for(let n of e){let e=l.value===`review`?n.pending?`待处理请求`:`历史记录`:NU(n.at);t.set(e,[...t.get(e)??[],n])}return[...t].map(([e,t])=>({title:e,rows:t}))});async function W(){let e=++M;C.value=!S.value;try{let t=await Q(`/api/app/agents/${encodeURIComponent(r.agent.id)}/home`);j&&e===M&&(S.value=t,E.value=``,d.value&&=[...t.activities,...t.reviews].find(e=>e.id===d.value?.id))}catch(t){j&&e===M&&(E.value=t instanceof Error?t.message:`暂时无法读取记录`)}finally{j&&e===M&&(C.value=!1)}}async function ee(){await W(),j&&(N=setTimeout(()=>{document.hidden?N=setTimeout(()=>void ee(),5e3):ee()},5e3))}function te(e){return e.kind===`approval`?`shield`:e.kind===`communication`?`chat`:e.kind===`goal`?`file`:e.kind===`runtime-task`?`branch`:e.kind===`memory`?`brain`:`file`}function G(){return(!h.value||b.value?.beforeClose()!==!1)&&(!v.value||window.confirm(`放弃当前记忆未保存的更改?`))&&!A.value}function ne(){G()&&a(`close`)}function re(e){v.value&&!window.confirm(`放弃当前记忆未保存的更改?`)||(v.value=!1,l.value=e,d.value=void 0,_.value=!1)}function ie(e=`identity`){g.value=e,h.value=!0}async function q(e){if(!(!d.value?.pending||A.value||r.connection!==`online`)){A.value=!0,E.value=``;try{await Q(`/api/app/interactions/${encodeURIComponent(d.value.interactionId)}/respond`,{method:`POST`,body:{answer:e}}),a(`changed`)}catch(e){E.value=e instanceof Error?e.message:`答复未确认`}finally{A.value=!1,await W()}}}function ae(){x.value?.focus()}return f(()=>r.agent.id,()=>{M++,S.value=void 0,d.value=void 0,l.value=`activity`,W()}),m(()=>{P=document.activeElement,ae(),ee()}),i(()=>{j=!1,M++,clearTimeout(N),x.value?.contains(document.activeElement)&&P?.isConnected&&P.focus()}),t({beforeClose:G,markSaved:e=>b.value?.markSaved(e),focus:ae}),(t,n)=>(u(),F(`aside`,{ref_key:`panel`,ref:x,class:`bot-home`,"aria-label":`Bot 主页`,tabindex:`-1`,onKeydown:Ye(X(ne,[`stop`,`prevent`]),[`esc`])},[h.value?(u(),F(T,{key:0},[D(`header`,FU,[D(`button`,{"aria-label":`返回 Bot 主页`,disabled:e.busy,onClick:n[0]||=e=>b.value?.beforeClose()!==!1&&(h.value=!1)},[U(Z,{name:`chevron-left`}),n[20]||=w(`返回 `,-1)],8,IU)]),U(ko,{ref_key:`editor`,ref:b,embedded:``,"initial-page":g.value,agent:e.agent,draft:e.draft,agents:e.agents,conversations:e.conversations,"conversation-id":e.conversationId,"is-admin":e.isAdmin,"permission-control":e.permissionControl,"knowledge-enabled":e.knowledgeEnabled,busy:e.busy,error:r.error,onClose:n[1]||=e=>h.value=!1,onSave:n[2]||=e=>a(`save`,e),onChanged:n[3]||=e=>a(`changed`),onManageModels:n[4]||=e=>a(`manageModels`),onManagePermissions:n[5]||=e=>a(`managePermissions`)},null,8,[`initial-page`,`agent`,`draft`,`agents`,`conversations`,`conversation-id`,`is-admin`,`permission-control`,`knowledge-enabled`,`busy`,`error`])],64)):(u(),F(T,{key:1},[c.value?z(``,!0):(u(),F(`header`,LU,[D(`button`,{class:`home-close`,"aria-label":`关闭 Bot 主页`,onClick:ne},[U(Z,{name:`close`,size:21})]),D(`div`,{class:y([`avatar-wrap`,{"has-main-badge":e.agent.id===e.mainBotId}])},[U(Xe,{name:e.agent.name,avatar:e.agent.avatar,state:I.value,size:84,"main-bot":e.agent.id===e.mainBotId},null,8,[`name`,`avatar`,`state`,`main-bot`]),D(`button`,{class:`avatar-edit`,"aria-label":`编辑 Bot 头像与名称`,onClick:n[6]||=e=>ie()},[U(Z,{name:`edit`,size:17})])],2),D(`h2`,null,s(e.agent.name),1),D(`p`,RU,[D(`i`,{class:y({online:e.connection===`online`})},null,2),w(s(B.value),1)])])),c.value?z(``,!0):(u(),F(`nav`,zU,[(u(),F(T,null,p(o,e=>D(`button`,{key:e.id,"aria-pressed":l.value===e.id,onClick:t=>re(e.id)},[U(Z,{name:e.icon,size:21},null,8,[`name`]),D(`span`,null,s(e.label),1)],8,BU)),64))])),d.value?(u(),F(`div`,VU,[D(`button`,{class:`back`,onClick:n[7]||=e=>d.value=void 0},[U(Z,{name:`chevron-left`}),w(`返回`+s(l.value===`review`?`审核`:`活动`),1)]),D(`h3`,null,s(d.value.title),1),D(`p`,HU,s(d.value.status),1),d.value.at?(u(),F(`small`,UU,s(new Date(d.value.at).toLocaleString(`zh-CN`)),1)):z(``,!0),d.value.task?(u(),F(`section`,WU,[D(`p`,GU,[w(`负责人 `+s(d.value.task.coordinatorName),1),d.value.task.assignmentCount?(u(),F(T,{key:0},[w(` · `+s(d.value.task.reviewedCount)+`/`+s(d.value.task.assignmentCount)+` 项已复核`,1)],64)):(u(),F(T,{key:1},[w(` · 直接处理`)],64))]),(u(!0),F(T,null,p(d.value.task.assignments,t=>(u(),F(`article`,{key:t.id},[D(`header`,null,[U(Xe,{name:t.agentName,avatar:e.agents.find(e=>e.id===t.agentId)?.avatar,size:24,animated:!1},null,8,[`name`,`avatar`]),D(`strong`,null,s(t.title),1),D(`small`,{class:y(t.status)},s(t.status===`complete`?`已复核`:R(K)(t.status)),3)]),D(`p`,KU,s(t.agentName),1),t.brief?(u(),F(`p`,qU,s(t.brief),1)):z(``,!0),t.result?(u(),F(`p`,JU,[n[21]||=D(`span`,null,`执行结果`,-1),w(s(t.result),1)])):z(``,!0),t.review?(u(),F(`p`,YU,[n[22]||=D(`span`,null,`复核意见`,-1),w(s(t.review),1)])):z(``,!0)]))),128)),d.value.task.acceptanceCriteria.length?(u(),F(`div`,XU,[n[23]||=D(`h4`,null,`验收要求`,-1),(u(!0),F(T,null,p(d.value.task.acceptanceCriteria,(e,t)=>(u(),F(`p`,{key:t},[D(`small`,null,s(d.value.task.checks?.some(e=>e.criterion===t&&e.passed)?`已验收`:`待验收`),1),w(s(e),1),d.value.task.checks?.find(e=>e.criterion===t)?.evidence?(u(),F(`span`,ZU,s(d.value.task.checks.find(e=>e.criterion===t)?.evidence),1)):z(``,!0)]))),128))])):z(``,!0),d.value.task.result?(u(),F(`p`,QU,s(d.value.task.result),1)):z(``,!0),d.value.task.artifacts?.length?(u(),F(`div`,$U,[(u(!0),F(T,null,p(d.value.task.artifacts,e=>(u(),F(`a`,{key:e.id,href:`/api/app/files/${encodeURIComponent(e.id)}/download`,target:`_blank`,rel:`noopener`},[U(Z,{name:`file`,size:15}),w(s(e.name),1)],8,eW))),128))])):z(``,!0)])):(u(),F(`p`,tW,s(d.value.content||`这条记录没有附加内容。`),1)),d.value.responseState===`uncertain`||d.value.responseState===`sending`?(u(),F(`p`,nW,` 答复尚未确认,请核对原请求;这里不会重复投递。 `)):z(``,!0),d.value.pending?(u(),F(`div`,rW,[D(`button`,{disabled:A.value||e.connection!==`online`,onClick:n[8]||=e=>q(`deny`)},` 拒绝`,8,iW),D(`button`,{disabled:A.value||e.connection!==`online`,onClick:n[9]||=e=>q(`once`)},` 仅允许本次 `,8,aW)])):z(``,!0),d.value.pending&&e.connection!==`online`?(u(),F(`p`,oW,` 恢复连接后才能答复。 `)):z(``,!0),d.value.conversationId?(u(),F(`button`,{key:6,class:`soft-action`,onClick:n[10]||=e=>a(`openConversation`,d.value.conversationId,d.value.taskId)},` 查看原对话`)):z(``,!0),d.value.kind===`memory`?(u(),F(`button`,{key:7,class:`soft-action`,onClick:n[11]||=e=>{d.value=void 0,l.value=`activity`,_.value=!0}},` 查看 Bot 记忆 `)):z(``,!0)])):_.value?(u(),F(`div`,sW,[D(`button`,{class:`back`,onClick:n[12]||=e=>re(`activity`)},[U(Z,{name:`chevron-left`}),n[24]||=w(`返回活动 `,-1)]),U(pe,{embedded:``,"initial-tab":`agent`,"selected-agent-id":e.agent.id,"hide-agent-controls":``,agents:[e.agent],conversations:e.conversations,onChanged:n[13]||=e=>a(`changed`),onDirtyChange:n[14]||=e=>v.value=e},null,8,[`selected-agent-id`,`agents`,`conversations`])])):l.value===`activity`||l.value===`review`?(u(),F(`div`,cW,[C.value?(u(),F(`p`,lW,`正在读取记录…`)):z(``,!0),(u(!0),F(T,null,p(V.value,e=>(u(),F(`section`,{key:e.title},[D(`h3`,null,s(e.title),1),(u(!0),F(T,null,p(e.rows,e=>(u(),F(`button`,{key:e.id,class:`record`,onClick:t=>d.value=e},[D(`span`,{class:y([`record-icon`,e.kind])},[U(Z,{name:te(e),size:22},null,8,[`name`])],2),D(`span`,dW,[D(`strong`,null,s(e.title),1),D(`span`,null,s(e.summary),1),e.task?(u(),F(`span`,fW,`负责人 `+s(e.task.coordinatorName),1)):z(``,!0),e.at?(u(),F(`small`,pW,s(new Date(e.at).toLocaleTimeString(`zh-CN`,{hour:`2-digit`,minute:`2-digit`})),1)):z(``,!0)]),U(Z,{name:`chevron-down`,class:`record-arrow`,size:16})],8,uW))),128))]))),128)),!C.value&&!E.value&&!V.value.length?(u(),F(`div`,mW,[U(Z,{name:l.value===`review`?`shield`:`history`,size:28},null,8,[`name`]),D(`h3`,null,s(l.value===`review`?`暂无审核请求`:`还没有活动记录`),1),D(`p`,null,s(l.value===`review`?`这个 Bot 的权限请求和处理记录会显示在这里。`:`回复、交付、协作与记忆更新会显示在这里。`),1)])):z(``,!0)])):l.value===`computer`?(u(),k(MU,{key:5,embedded:``,agents:[e.agent],"is-admin":!!e.isAdmin,active:e.active,onDesktop:n[15]||=(e,t,n)=>a(`desktop`,e,t,n),onWorkspace:n[16]||=e=>a(`workspace`,e),onChanged:n[17]||=e=>a(`changed`),onSettings:n[18]||=e=>a(`settings`)},null,8,[`agents`,`is-admin`,`active`])):l.value===`routines`?(u(),k(ht,{key:6,"agent-id":e.agent.id,onEditingChange:n[19]||=e=>c.value=e,home:``,inline:``},null,8,[`agent-id`])):l.value===`files`?(u(),k(bH,{key:7,"conversation-id":e.conversationId,active:e.active,revision:e.conversations.find(t=>t.id===e.conversationId)?.lastSeq},null,8,[`conversation-id`,`active`,`revision`])):z(``,!0),E.value?(u(),F(`p`,hW,[w(s(E.value)+` `,1),D(`button`,{onClick:W},`重试`)])):z(``,!0)],64))],40,PU))}}),[[`__scopeId`,`data-v-c2e27faf`]]);function _W(e,t=Date.now()){let n=e.usage&&typeof e.usage==`object`?{...e,...e.usage}:e,r=(e,t=!1)=>e.map(e=>n[e]).find(e=>typeof e==`number`&&Number.isSafeInteger(e)&&(t?e>0:e>=0)),i=r([`usedTokens`,`context_used`,`contextUsed`,`context_tokens`,`contextTokens`]);if(i===void 0)return;let a=r([`limitTokens`,`context_max`,`contextMax`,`context_limit`,`contextLimit`],!0);return{kind:`reported-context`,usedTokens:i,...a===void 0?{}:{limitTokens:a},observedAt:t,...typeof n.model==`string`?{model:n.model}:{},...typeof n.provider==`string`?{provider:n.provider}:{}}}var vW=[`data-request-id`],yW=[`aria-label`,`aria-expanded`],bW={key:0},xW={key:1},SW={key:0,class:`context-details__usage`},CW={key:1,class:`context-details__usage`},wW={class:`context-bar`,"aria-hidden":`true`},TW={class:`muted`},EW={key:2,class:`context-composition`},DW={class:`context-row`},OW={class:`muted`},kW={class:`context-bar context-bar--small`,"aria-hidden":`true`},AW={key:3,class:`muted`},jW={class:`muted`},MW={class:`muted`},NW={class:`muted`},PW={key:4,class:`muted`},FW={key:5},IW={class:`context-extra`},LW={key:0,class:`muted`},RW={key:1,class:`muted`},zW={key:2,class:`warning`},BW={class:`context-details__footnote`},VW=V(E({__name:`PromptContextMeter`,props:{compact:{type:Boolean},snapshot:{},agentId:{},nextBudget:{},nextWindow:{},usedTokens:{},limitTokens:{},percentUsed:{}},setup(e){let t=e,n=e=>typeof e==`number`&&Number.isSafeInteger(e)&&e>=0,r=H(()=>{let e=t.snapshot;return e?.kind===`prompt-context`&&(!t.agentId||e.agentId===t.agentId)&&n(e.usedTokens)&&n(e.limitTokens)&&e.limitTokens>0&&n(e.configuredBudget)&&e.configuredBudget>0&&typeof e.observedAt==`number`&&Number.isFinite(e.observedAt)&&n(e.omittedTurns)&&n(e.checkpointThrough)&&[`provider-usage`,`server-estimate`].includes(String(e.usedSource))?e:void 0}),a=H(()=>{if(t.snapshot?.kind===`reported-context`&&(!t.agentId||t.snapshot.agentId===t.agentId))return _W(t.snapshot,Number(t.snapshot.observedAt));if(n(t.usedTokens)&&t.usedTokens>0)return{usedTokens:t.usedTokens,limitTokens:t.limitTokens&&t.limitTokens>0?t.limitTokens:void 0,model:void 0,provider:void 0,observedAt:void 0}}),c=H(()=>r.value?.usedTokens??a.value?.usedTokens),d=H(()=>r.value?.limitTokens??a.value?.limitTokens),h=H(()=>c.value!==void 0&&d.value?!r.value&&!t.snapshot&&typeof t.percentUsed==`number`&&Number.isFinite(t.percentUsed)?t.percentUsed:c.value/d.value*100:void 0),g=H(()=>r.value?.usedSource===`server-estimate`),_=H(()=>h.value===void 0?c.value===void 0?`待报告`:`已报告`:`${g.value?`约 `:``}${h.value.toFixed(1)}%`),v=H(()=>r.value?.usedSource===`provider-usage`?`提供方实际输入`:r.value?`服务端粗估`:a.value?`执行器报告 · 计数来源未注明`:`尚无本次用量`),b={system:`系统与 Bot 规则`,memoryAndTask:`记忆与任务`,history:`对话与当前输入`,tools:`工具与助手定义`,toolResults:`工具返回结果`,checkpoint:`压缩摘要`},x=[`#9875d7`,`#c4a154`,`#5b7ce9`,`#dc9455`,`#5aab96`,`#ad7fc6`],S=H(()=>Object.entries(b).flatMap(([e,t])=>{let i=r.value?.components?.[e];return n(i)?[{key:e,label:t,tokens:i}]:[]})),C=H(()=>S.value.some(e=>e.tokens>0)),E=e=>e.toLocaleString(`zh-CN`),k=e=>`${Math.min(100,Math.max(0,e/Math.max(1,d.value??c.value??1)*100))}%`,A=O(),j=O(),M=O(!1),N=O({}),P=O({});function I(e=!1){A.value&&(A.value.open=!1),M.value=!1,e&&A.value?.querySelector(`summary`)?.focus()}async function L(){if(!M.value)return;await o();let e=A.value?.querySelector(`summary`)?.getBoundingClientRect();if(!e)return;let t=window.visualViewport,n=Math.min(300,(t?.width??innerWidth)-24),r=e.left+e.width/2,i=Math.max(12,Math.min(r-n/2,(t?.width??innerWidth)-n-12)),a=(t?.offsetTop??0)+12,s=(t?.offsetTop??0)+(t?.height??innerHeight)-12,c=Math.max(0,e.top-a-10),l=Math.max(0,s-e.bottom-10),u=c>=(j.value?.scrollHeight??340)||c>=l;P.value={left:`${i+Math.max(24,Math.min(r-i,n-24))-6}px`,top:`${u?e.top-16:e.bottom+4}px`},N.value={width:`${n}px`,left:`${i}px`,maxHeight:`${u?c:l}px`,"--arrow-left":`${Math.max(24,Math.min(r-i,n-24))}px`,...u?{bottom:`${innerHeight-e.top+10}px`,top:`auto`}:{top:`${e.bottom+10}px`,bottom:`auto`}}}function B(){M.value=!!A.value?.open,M.value&&L()}function V(e){A.value?.contains(e.target)||I()}function W(e){e.key===`Escape`&&M.value&&(e.stopPropagation(),I(!0))}return f(()=>t.agentId,()=>I()),f(()=>t.snapshot,()=>{M.value&&L()}),m(()=>{document.addEventListener(`pointerdown`,V),document.addEventListener(`keydown`,W),window.addEventListener(`resize`,L),window.addEventListener(`scroll`,L,!0),window.visualViewport?.addEventListener(`resize`,L)}),i(()=>{document.removeEventListener(`pointerdown`,V),document.removeEventListener(`keydown`,W),window.removeEventListener(`resize`,L),window.removeEventListener(`scroll`,L,!0),window.visualViewport?.removeEventListener(`resize`,L)}),(t,n)=>(u(),F(`details`,{ref_key:`details`,ref:A,class:y([`context-meter`,{"context-meter--compact":e.compact}]),"aria-label":`上下文详情`,"data-request-id":r.value?.requestId,onToggle:B},[D(`summary`,{"aria-label":`上下文:${_.value}`,title:`最近一次模型请求的上下文用量;点击查看详情`,"aria-expanded":M.value},[U(R(RA),{"aria-hidden":`true`,type:`circle`,percentage:Math.min(100,Math.max(0,h.value??0)),"show-indicator":!1,"stroke-width":12,color:(h.value??0)>80?`var(--warning)`:`var(--text-secondary)`,"rail-color":`var(--line-strong)`,height:20,style:{width:`20px`,flex:`0 0 20px`}},null,8,[`percentage`,`color`]),e.compact?z(``,!0):(u(),F(`span`,bW,`上下文`)),e.compact?z(``,!0):(u(),F(`strong`,xW,s(_.value),1))],8,yW),M.value?(u(),F(`div`,{key:0,class:`context-pointer`,style:l(P.value),"aria-hidden":`true`},null,4)):z(``,!0),D(`div`,{ref_key:`card`,ref:j,class:y([`context-details`,{"context-details--below":N.value.top!==`auto`&&N.value.top}]),style:l(N.value),role:`dialog`,"aria-label":`上下文窗口`},[D(`header`,null,[n[1]||=D(`span`,null,`上下文窗口`,-1),D(`button`,{type:`button`,"aria-label":`关闭上下文详情`,onClick:n[0]||=e=>I(!0)},[U(Z,{name:`close`,size:12})])]),c.value===void 0?(u(),F(`p`,CW,[n[3]||=w(`用量待报告`,-1),e.limitTokens?(u(),F(T,{key:0},[w(` · 配置窗口 `+s(E(e.limitTokens)),1)],64)):z(``,!0)])):(u(),F(`p`,SW,[w(`已用 `+s(g.value?`约 `:``)+s(E(c.value)),1),d.value?(u(),F(T,{key:0},[w(` / `+s(E(d.value)),1)],64)):z(``,!0),n[2]||=w(` tokens`,-1),d.value?z(``,!0):(u(),F(T,{key:1},[w(` · 上限未知`)],64))])),D(`div`,wW,[D(`i`,{style:l({width:k(c.value??0)})},null,4)]),D(`p`,TW,s(h.value===void 0?`上限未知`:`${g.value?`约 `:``}占用 ${h.value.toFixed(1)}%`)+` · 最近一次模型请求`,1),n[7]||=D(`p`,{class:`muted`},`占用构成 · 粗估`,-1),C.value?(u(),F(`div`,EW,[(u(!0),F(T,null,p(S.value,(e,t)=>(u(),F(`div`,{key:e.key},[D(`div`,DW,[D(`span`,null,s(e.label),1),D(`span`,OW,s(E(e.tokens)),1)]),D(`div`,kW,[D(`i`,{style:l({width:k(e.tokens),background:x[t%x.length]})},null,4)])]))),128))])):(u(),F(`p`,AW,`本次未报告分项构成`)),D(`p`,jW,s(v.value)+` · 分项粗估`,1),D(`p`,MW,[w(`有效上限 `+s(d.value?E(d.value):`未报告`),1),r.value?(u(),F(T,{key:0},[w(`(`+s(r.value.limitSource===`provider-model`?`模型窗口`:`本地预算`)+`)`,1)],64)):z(``,!0)]),D(`p`,NW,`模型窗口 `+s(r.value?.modelWindow?E(r.value.modelWindow):!r.value&&!a.value&&e.nextWindow?`${E(e.nextWindow)}(下次请求)`:`未声明`),1),r.value?.model||a.value?.model?(u(),F(`p`,PW,[w(s(r.value?.model??a.value?.model),1),r.value?.provider||a.value?.provider?(u(),F(T,{key:0},[w(` · `+s(r.value?.provider??a.value?.provider),1)],64)):z(``,!0)])):z(``,!0),r.value?.reasoningEffort?(u(),F(`p`,FW,`推理强度 · `+s(R(se)[r.value.reasoningEffort]??r.value.reasoningEffort),1)):z(``,!0),D(`details`,IW,[n[5]||=D(`summary`,null,`来源与压缩详情`,-1),n[6]||=D(`p`,{class:`muted`},`组成均为服务端粗估,不能当作提供方实际分项用量。`,-1),r.value||!a.value&&e.nextBudget?(u(),F(`p`,LW,[w(`本地预算 `+s(E(r.value?.configuredBudget??e.nextBudget)),1),r.value?z(``,!0):(u(),F(T,{key:0},[w(`(下次请求)`)],64))])):z(``,!0),r.value?.omittedTurns?(u(),F(`p`,RW,`已裁剪 `+s(r.value.omittedTurns)+` 个较早回合,压缩摘要涵盖前 `+s(r.value.checkpointThrough)+` 条记录。`,1)):z(``,!0),(h.value??0)>100?(u(),F(`p`,zW,`已报告输入超过有效预算。`)):z(``,!0),D(`p`,BW,[n[4]||=w(`单次输入,非累计用量`,-1),r.value?.observedAt?(u(),F(T,{key:0},[w(` · `+s(new Date(r.value.observedAt).toLocaleTimeString()),1)],64)):z(``,!0)])])],6)],42,vW))}}),[[`__scopeId`,`data-v-147b85a1`]]),HW=[`disabled`,`title`],UW={key:1,class:`model-control__effort`},WW={key:0,class:`model-controls__reasoning`},GW=[`disabled`,`title`,`aria-label`,`aria-expanded`],KW={key:0,class:`reasoning-menu`,role:`dialog`,"aria-label":`推理强度`},qW={class:`reasoning-menu__options`,role:`group`,"aria-label":`推理档位`},JW=[`aria-pressed`,`disabled`,`onClick`],YW={key:0},XW=[`aria-checked`,`aria-label`,`disabled`],ZW=V(E({__name:`ModelControls`,props:{modelLabel:{},reasoningValue:{default:``},reasoningLabel:{default:`默认`},reasoningOptions:{default:()=>[]},disabled:{type:Boolean},reasoningDisabled:{type:Boolean},fastMode:{type:Boolean},fastDisabled:{type:Boolean},fastLabel:{default:`快速`},scope:{default:``},combined:{type:Boolean},compact:{type:Boolean},fastTarget:{}},emits:[`modelClick`,`reasoningChange`,`fastModeToggle`],setup(e,{emit:t}){let n=e,r=t,a=O(),o=O(),c=O(!1),l=H(()=>d.value.replace(/^继承 · /,``).replace(/^提供方默认.*$/,`默认`)),d=H(()=>n.reasoningOptions.find(e=>e.id===n.reasoningValue)?.label||n.reasoningLabel);function h(e=!1){c.value=!1,e&&o.value?.focus()}function g(e){a.value?.contains(e.target)||h()}function _(e){r(`reasoningChange`,e),h(!0)}return f(()=>n.disabled,e=>{e&&h()}),m(()=>document.addEventListener(`pointerdown`,g)),i(()=>document.removeEventListener(`pointerdown`,g)),(t,n)=>(u(),F(`div`,{ref_key:`root`,ref:a,class:y([`model-controls`,{"model-controls--compact":e.compact,"model-controls--combined":e.combined}]),onKeydown:n[4]||=Ye(X(e=>h(!0),[`stop`,`prevent`]),[`esc`])},[D(`button`,{class:`model-control model-control--model`,type:`button`,disabled:e.disabled,title:e.modelLabel,"aria-label":`选择模型`,"aria-haspopup":`dialog`,onClick:n[0]||=e=>{h(),r(`modelClick`,e.currentTarget)}},[e.combined&&e.fastMode&&!e.fastDisabled?(u(),k(Z,{key:0,name:`bolt`,size:13})):z(``,!0),D(`span`,null,s(e.modelLabel),1),e.combined&&!e.compact&&!e.reasoningDisabled?(u(),F(`small`,UW,s(l.value),1)):z(``,!0),U(Z,{name:`chevron-down`,size:12})],8,HW),e.combined?z(``,!0):(u(),F(`div`,WW,[D(`button`,{ref_key:`reasoningTrigger`,ref:o,class:y([`model-control`,{active:c.value}]),type:`button`,disabled:e.disabled||e.reasoningDisabled||!e.reasoningOptions.length,title:`推理强度:${d.value}`,"aria-label":`推理强度:${d.value}`,"aria-expanded":c.value,"aria-haspopup":`dialog`,onClick:n[1]||=e=>c.value=!c.value},[U(Z,{name:`brain`,size:17}),D(`span`,null,`推理 · `+s(l.value),1),U(Z,{name:`chevron-down`,size:14})],10,GW),c.value?(u(),F(`section`,KW,[D(`header`,null,[n[5]||=D(`strong`,null,`推理强度`,-1),D(`button`,{type:`button`,"aria-label":`关闭推理强度`,onClick:n[2]||=e=>h(!0)},[U(Z,{name:`close`,size:16})])]),D(`div`,qW,[(u(!0),F(T,null,p(e.reasoningOptions,t=>(u(),F(`button`,{key:t.id,type:`button`,"aria-pressed":t.id===e.reasoningValue,disabled:e.disabled||t.disabled,onClick:e=>_(t.id)},[D(`span`,null,s(t.label),1),t.id===e.reasoningValue?(u(),k(Z,{key:0,name:`check`,size:16})):z(``,!0)],8,JW))),128))]),n[6]||=D(`p`,null,`更高的强度用于深入分析复杂问题。`,-1),e.scope?(u(),F(`p`,YW,s(e.scope),1)):z(``,!0)])):z(``,!0)])),(u(),k(L,{to:e.fastTarget??`body`,disabled:!e.fastTarget},[!e.compact||e.fastTarget?(u(),F(`button`,{key:0,class:`model-control model-control--fast`,type:`button`,role:`switch`,"aria-checked":e.fastMode,"aria-label":`快速模式:${e.fastMode?`已开启`:`已关闭`}`,disabled:e.disabled||e.fastDisabled,title:`快速模式:响应更快,消耗更多额度`,onClick:n[3]||=t=>r(`fastModeToggle`,!e.fastMode)},[U(Z,{name:`bolt`,size:17}),D(`span`,null,s(e.fastLabel),1),D(`span`,{class:y([`model-control__switch`,{on:e.fastMode}]),"aria-hidden":`true`},[...n[7]||=[D(`span`,null,null,-1)]],2)],8,XW)):z(``,!0)],8,[`to`,`disabled`]))],34))}}),[[`__scopeId`,`data-v-7f4990ce`]]),QW=[`aria-label`,`aria-labelledby`,`aria-busy`],$W={class:`model-dialog__header`},eG=[`disabled`],tG={class:`model-dialog__search`},nG=[`placeholder`,`disabled`],rG={class:`model-dialog__columns`},iG={class:`model-dialog__body`},aG={class:`model-dialog__list`},oG=[`disabled`,`aria-label`,`aria-pressed`,`onClick`],sG={class:`model-dialog__item-label`},cG={class:`model-dialog__flat-name`},lG={class:`model-dialog__provider`},uG={class:`model-dialog__states`},dG={key:0},fG={key:1,class:`sr-only`},pG=[`disabled`,`aria-label`,`onClick`],mG=[`aria-expanded`,`disabled`,`onClick`],hG={class:`model-dialog__items`},gG=[`disabled`,`onClick`],_G={class:`model-dialog__item-label`},vG=[`title`],yG={key:0,class:`model-dialog__badge`},bG={key:1,class:`model-dialog__badge model-dialog__badge--quiet`},xG={key:2,class:`model-dialog__empty`},SG={key:0,class:`model-dialog__tuning`},CG={key:0,class:`model-dialog__status`,role:`status`},wG=V(E({__name:`ModelChoiceDialog`,props:{open:{type:Boolean},options:{},selectedId:{default:``},busy:{type:Boolean,default:!1},tuning:{type:Boolean},editing:{type:Boolean},anchor:{}},emits:[`close`,`select`,`edit`],setup(e,{emit:t}){let n=e,r=t,a=O(``),c=O(null),h=O({});function g(){if(!n.open)return;if(!n.anchor){h.value={};return}let e=n.anchor.getBoundingClientRect(),t=Math.min(n.tuning?n.editing?740:420:360,window.innerWidth-24),r=e.top-20,i=window.innerHeight-e.bottom-20,a=r>=300||r>=i;h.value={width:`${t}px`,left:`${Math.max(12,Math.min(e.left,window.innerWidth-t-12))}px`,maxHeight:`${Math.max(100,a?r:i)}px`,...a?{bottom:`${window.innerHeight-e.top+10}px`}:{top:`${e.bottom+10}px`}}}function v(e){n.open&&n.anchor&&!c.value?.contains(e.target)&&!n.anchor.contains(e.target)&&M()}let b=O(null),x=O({}),C={inherit:`默认配置`,auto:`Auto`,anthropic:`Anthropic`,google:`Google`,groq:`Groq`,minimax:`MiniMax`,mistral:`Mistral`,ollama:`Ollama`,openai:`OpenAI`,openrouter:`OpenRouter`,xai:`xAI`};function w(e){return`${e.provider}:${e.id}`}function E(e){let t=e.toLocaleLowerCase();return C[t]||e.replace(/[-_]+/g,` `).replace(/\b\w/g,e=>e.toLocaleUpperCase())}let A=H(()=>{let e=a.value.trim().toLocaleLowerCase();return n.options.filter(t=>`${t.name} ${t.id} ${t.providerName||t.provider}`.toLocaleLowerCase().includes(e))}),j=H(()=>{let e=a.value.trim().toLocaleLowerCase(),t=new Map;for(let r of n.options){let n=`${r.name} ${r.id} ${r.provider}`.toLocaleLowerCase();if(e&&!n.includes(e))continue;let i=t.get(r.provider)??[];i.push(r),t.set(r.provider,i)}return[...t].map(([e,t])=>({provider:e,label:E(e),models:t}))});function M(e=`dismiss`){n.busy||r(`close`,e)}function N(e){n.busy||(x.value={...x.value,[e]:!x.value[e]})}function P(e){if(n.open&&(e.key===`Escape`&&(e.preventDefault(),M(`escape`)),e.key===`Tab`)){let t=[...c.value?.querySelectorAll(`button:not(:disabled), input:not(:disabled)`)??[]].filter(e=>!e.closest(`[style*="display: none"]`)),n=t[0],r=t.at(-1);e.shiftKey&&document.activeElement===n?(e.preventDefault(),r?.focus()):!e.shiftKey&&document.activeElement===r&&(e.preventDefault(),n?.focus())}}let I=O(null);function R(e,t){I.value=t.currentTarget,r(`edit`,e)}return f(()=>n.editing,async e=>{await o(),g(),e?c.value?.querySelector(`.model-dialog__tuning button`)?.focus():I.value?.focus()}),f(()=>n.open,async e=>{if(!e){n.anchor?.focus();return}a.value=``,x.value={},await o(),g(),b.value?.focus()}),m(()=>{window.addEventListener(`keydown`,P),window.addEventListener(`resize`,g),window.addEventListener(`scroll`,g,!0),document.addEventListener(`pointerdown`,v),n.open&&(g(),b.value?.focus())}),i(()=>{window.removeEventListener(`keydown`,P),window.removeEventListener(`resize`,g),window.removeEventListener(`scroll`,g,!0),document.removeEventListener(`pointerdown`,v)}),(t,n)=>(u(),k(L,{to:`body`},[U(ge,{name:`model-dialog-fade`},{default:S(()=>[e.open?(u(),F(`div`,{key:0,class:y([`model-dialog-layer`,{"model-dialog-layer--anchored":e.anchor}]),role:`presentation`,onMousedown:n[2]||=X(e=>M(),[`self`])},[D(`section`,{ref_key:`dialog`,ref:c,class:y([`model-dialog`,{"model-dialog--tuning":e.tuning,"model-dialog--editing":e.editing}]),style:l(h.value),role:`dialog`,"aria-modal":`true`,"aria-label":e.editing?`模型参数`:void 0,"aria-labelledby":e.editing?void 0:`model-dialog-title`,"aria-busy":e.busy},[D(`header`,$W,[n[3]||=D(`h2`,{id:`model-dialog-title`},`选择模型`,-1),D(`button`,{class:`icon-button`,type:`button`,"aria-label":`关闭模型选择`,disabled:e.busy,onClick:n[0]||=e=>M()},[U(Z,{name:`close`,size:15})],8,eG)]),D(`label`,tG,[U(Z,{name:`search`,size:14}),d(D(`input`,{ref_key:`searchInput`,ref:b,"onUpdate:modelValue":n[1]||=e=>a.value=e,type:`search`,placeholder:e.tuning?`搜索模型`:`搜索模型名称或 ID`,"aria-label":`搜索模型`,disabled:e.busy,autocomplete:`off`},null,8,nG),[[Y,a.value]])]),D(`div`,rG,[D(`div`,iG,[D(`div`,aG,[e.tuning?(u(!0),F(T,{key:0},p(A.value,t=>(u(),F(`div`,{key:w(t),class:y([`model-dialog__row`,{"model-dialog__row--active":w(t)===e.selectedId}])},[D(`button`,{class:y([`model-dialog__item`,{"model-dialog__item--active":w(t)===e.selectedId}]),type:`button`,disabled:e.busy||t.disabled,"aria-label":[t.name,t.providerName||E(t.provider),t.isDefault?`默认`:``,w(t)===e.selectedId?`当前`:``,t.hint].filter(Boolean).join(`,`),"aria-pressed":w(t)===e.selectedId,onClick:e=>r(`select`,w(t))},[D(`span`,sG,[D(`span`,cG,s(t.name),1),D(`small`,lG,s(t.providerName||E(t.provider)),1)]),D(`span`,uG,[t.isDefault?(u(),F(`span`,dG,`默认`)):z(``,!0),w(t)===e.selectedId?(u(),F(`span`,fG,`当前`)):z(``,!0),w(t)===e.selectedId?(u(),k(Z,{key:2,name:`check`,size:16})):z(``,!0)])],10,oG),D(`button`,{class:`model-dialog__edit`,type:`button`,disabled:e.busy||t.disabled,"aria-label":`编辑 ${t.name} · ${t.providerName||E(t.provider)} 参数`,onClick:e=>R(w(t),e)},[U(Z,{name:`dots`,size:18})],8,pG)],2))),128)):z(``,!0),(u(!0),F(T,null,p(e.tuning?[]:j.value,t=>(u(),F(`section`,{key:t.provider,class:`model-dialog__group`},[D(`button`,{class:`model-dialog__group-header`,type:`button`,"aria-expanded":!x.value[t.provider],disabled:e.busy,onClick:e=>N(t.provider)},[U(Z,{class:y([`model-dialog__chevron`,{collapsed:x.value[t.provider]}]),name:`chevron-down`,size:13},null,8,[`class`]),D(`strong`,null,s(t.label),1),D(`span`,null,s(t.models.length),1)],8,mG),d(D(`div`,hG,[(u(!0),F(T,null,p(t.models,t=>(u(),F(`button`,{key:w(t),class:y([`model-dialog__item`,{"model-dialog__item--active":w(t)===e.selectedId}]),type:`button`,disabled:e.busy||t.disabled,onClick:e=>r(`select`,w(t))},[D(`span`,_G,[D(`strong`,null,s(t.name||t.id),1),t.hint||t.name&&t.name!==t.id?(u(),F(`small`,{key:0,title:t.hint},s(t.hint||t.id),9,vG)):z(``,!0)]),t.isDefault?(u(),F(`span`,yG,`默认`)):z(``,!0),t.supportsReasoning?(u(),F(`span`,bG,`推理`)):z(``,!0),w(t)===e.selectedId?(u(),k(Z,{key:2,class:`model-dialog__check`,name:`check`,size:15})):z(``,!0)],10,gG))),128))],512),[[Se,!x.value[t.provider]]])]))),128)),e.tuning?_(t.$slots,`footer`,{},void 0,!0,1):z(``,!0),(e.tuning?!A.value.length:!j.value.length)?(u(),F(`p`,xG,`没有匹配的模型`)):z(``,!0)])]),e.tuning&&e.editing?(u(),F(`aside`,SG,[_(t.$slots,`tuning`,{},void 0,!0)])):z(``,!0)]),e.busy?(u(),F(`p`,CG,`正在保存…`)):z(``,!0)],14,QW)],34)):z(``,!0)]),_:3})]))}}),[[`__scopeId`,`data-v-654f5e6c`]]);function TG(e,t,n){let r=t===`auto`,i=e.models.find(e=>e.provider===t&&e.model===n),a=e.settings??ae(),o=!r&&!(!a.provider&&e.auto?.enabled)&&(a.provider??e.defaults.provider)===t&&(a.model??e.defaults.model)===n,s=a.modelPresets?.find(e=>e.provider===t&&e.model===n),c=o?a:s;return{provider:t,model:n,revision:e.revision,reasoningEffort:c?.reasoningEffort&&i?.reasoningKnown&&i.reasoningEfforts.includes(c.reasoningEffort)?c.reasoningEffort:null,fastMode:c?.fastMode&&i?.fastModes.includes(c.fastMode)?c.fastMode:null}}function EG(e,t){if(t.revision!==e.revision)throw Error(`Bot 设置已更新,请重新打开模型参数后保存。`);let n=e.models.find(e=>e.provider===t.provider&&e.model===t.model);if(!n)throw Error(`模型已不可用,请重新读取。`);if(t.reasoningEffort&&(!n.reasoningKnown||!n.reasoningEfforts.includes(t.reasoningEffort)))throw Error(`此模型不支持所选推理强度。`);if(t.fastMode&&!n.fastModes.includes(t.fastMode))throw Error(`当前连接不支持所选速度。`);let r=e.settings??ae(),i=!(!r.provider&&e.auto?.enabled)&&(r.provider??e.defaults.provider)===t.provider&&(r.model??e.defaults.model)===t.model,{revision:a,...o}=t;return{...r,modelPresets:[...(r.modelPresets??[]).filter(e=>e.provider!==t.provider||e.model!==t.model),o],...i?{reasoningEffort:t.reasoningEffort,fastMode:t.fastMode}:{}}}function DG(e,t,n){let r=e.settings??ae();if(t===`auto`&&n===`auto`){if(!e.auto?.available)throw Error(e.auto?.unavailableReason??`Jev Auto 尚未配置。`);return{...r,provider:`auto`,model:`auto`,autoPool:null,reasoningEffort:null,fastMode:null}}let i=e.models.find(r=>r.provider===(t??e.defaults.provider)&&r.model===(n??e.defaults.model));if(t&&!i)throw Error(`模型已不可用,请重新读取。`);let a=r.modelPresets?.find(e=>e.provider===i?.provider&&e.model===i.model)??r;return{...r,provider:t??null,model:n??null,reasoningEffort:a.reasoningEffort&&i?.reasoningKnown&&i.reasoningEfforts.includes(a.reasoningEffort)?a.reasoningEffort:null,fastMode:a.fastMode&&i?.fastModes.includes(a.fastMode)?a.fastMode:null}}var OG=[`aria-busy`,`title`],kG=[`role`],AG=[`disabled`],jG=[`disabled`],MG={key:0,class:`bot-model-tuning`,"aria-label":`模型参数`},NG=[`disabled`],PG=[`disabled`],FG={class:`bot-model-tuning__row`},IG=[`aria-checked`,`disabled`],LG={key:0},RG={class:`bot-model-tuning__row`},zG=[`aria-expanded`,`disabled`],BG={key:1,class:`bot-model-tuning__efforts`,role:`group`,"aria-label":`推理强度选项`},VG=[`aria-pressed`,`onClick`],HG={class:`bot-model-tuning__check`},UG={key:2},WG={class:`bot-model-tuning__scope`},GG={key:3,role:`alert`,class:`error`},KG={class:`sr-only`},qG=V(E({__name:`BotChatControls`,props:{agent:{},running:{type:Boolean},disabled:{type:Boolean},context:{},contextTarget:{},compact:{type:Boolean},optionsTarget:{}},emits:[`saved`],setup(e,{emit:t}){let n=e,r=t,a=O(),c=O(ae()),l=O(!1),d=O(!1),h=O(``),g=O(``),_=0,v;function b(e=``){v!==void 0&&clearTimeout(v),g.value=e,v=e?setTimeout(()=>{g.value=``,v=void 0},3e3):void 0}let x=O(!1),C=O(null),E=(e,t)=>JSON.stringify([e,t]);H(()=>c.value.provider&&c.value.model?E(c.value.provider,c.value.model):``);let A=H(()=>q(c.value)),j=H(()=>A.value||!c.value.provider&&!!a.value?.auto?.enabled),M=H(()=>re(a.value?.auto?.backend)),N=H(()=>A.value?void 0:a.value?.models.find(e=>e.provider===(c.value.provider??a.value?.defaults.provider)&&e.model===(c.value.model??a.value?.defaults.model))),P=H(()=>{if(j.value)return`Auto · ${M.value}`;let e=(N.value?.name??(A.value||!c.value.model?l.value?`正在读取…`:a.value?.defaults.model:c.value.model))?.trim()||`选择模型`;return n.compact?e.split(` · `).at(-1)?.trim()||`选择模型`:e}),I=H(()=>N.value?.defaultReasoningEffort??a.value?.defaults.reasoningEffort??`default`),B=e=>e==="default"?`提供方默认(未声明实际强度)`:se[e]??e,V=H(()=>!j.value&&!!N.value?.reasoningKnown&&!!N.value.reasoningEfforts.length),W=H(()=>l.value||d.value||n.disabled||!a.value);async function ee(){let e=++_,t=n.agent.id;l.value=!0,d.value=!1,h.value=``,b(),a.value=void 0;try{let n=await Q(`/api/app/agents/${t}/model-options`);if(e!==_)return;if(n.version!==1)throw Error(`模型目录版本不兼容。`);a.value=n,c.value={...ae(),...n.settings}}catch(t){e===_&&(h.value=t instanceof Error?t.message:`模型配置读取失败`)}finally{e===_&&(l.value=!1)}}async function te(e){if(W.value||!a.value)return;let t=_,i=n.agent.id,o={...c.value},s=JSON.parse(JSON.stringify({modelSettings:{...e},expectedRevision:a.value.revision}));d.value=!0,h.value=``,b();try{let e=await Q(`/api/app/agents/${i}`,{method:`PATCH`,body:s});if(t!==_)return;if(e.confirmationRequired){if(!window.confirm(e.confirmationMessage||`确认切换模型?`)){b(`已取消,保留原设置。`);return}if(!e.confirmationTarget)throw Error(`模型确认无效,请重新读取。`);if(e=await Q(`/api/app/agents/${i}`,{method:`PATCH`,body:{...s,confirmedModel:e.confirmationTarget}}),t!==_)return}if(!e.agent)throw Error(`设置尚未保存,请重新读取。`);if(n.agent.revision>e.agent.revision){b(`其他端已更新,正在重新读取。`);return}return c.value={...ae(),...e.agent.modelSettings},a.value={...a.value,revision:e.agent.revision,settings:e.agent.modelSettings??null},b(`已保存,下一轮生效。`),r(`saved`,e.agent),!0}catch(e){t===_&&(c.value=o,h.value=e instanceof Error?e.message:`保存失败,保留原设置。`)}finally{t===_&&(d.value=!1)}}let G=H(()=>`下一轮生效;仅此 Bot,适用于它的所有会话。${n.running?`当前运行保持原设置。`:``}`),K=H(()=>ue(a.value)),ne=H(()=>{let e=K.value.find(e=>e.isCurrent);return e?`${e.provider}:${e.id}`:``}),J=O(!1),oe=O(null);f(J,async e=>{!e&&pe.value&&(await o(),oe.value?.focus())});let ce=H(()=>j.value?[]:[{id:``,label:`继承 · ${B(I.value)}`},...(N.value?.reasoningEfforts??[]).map(e=>({id:e,label:B(e)}))]),le=H(()=>j.value?`normal`:c.value.fastMode??a.value?.defaults.fastMode??`normal`),de=H(()=>!j.value&&!!N.value?.fastModes.includes(`fast`)&&!!N.value?.fastModes.includes(`normal`));async function fe(e){if(!a.value)return;let t=e===`inherit:default`?{provider:`inherit`,id:`default`}:K.value.find(t=>`${t.provider}:${t.id}`===e);if(t)try{await te(DG(a.value,t.provider===`inherit`?void 0:t.provider,t.provider===`inherit`?void 0:t.id))&&(x.value=!1,pe.value=void 0)}catch(e){h.value=e instanceof Error?e.message:String(e)}}let pe=O(),me=H(()=>K.value.find(e=>e.provider===pe.value?.provider&&e.id===pe.value?.model)),he=H(()=>a.value?.models.find(e=>e.provider===pe.value?.provider&&e.model===pe.value?.model)),ge=H(()=>!!he.value?.fastModes.includes(`normal`)&&!!he.value?.fastModes.includes(`fast`)),_e=H(()=>pe.value?.fastMode??a.value?.defaults.fastMode??`normal`),ve=H(()=>!!he.value?.reasoningKnown&&!!he.value.reasoningEfforts.length),ye=H(()=>[{id:``,label:`跟随默认`},...(he.value?.reasoningEfforts??[]).map(e=>({id:e,label:B(e)}))]);function Y(e){let t=K.value.find(t=>`${t.provider}:${t.id}`===e);!t||!a.value||W.value||(J.value=!1,pe.value=TG(a.value,t.provider===`inherit`?a.value.defaults.provider:t.provider,t.provider===`inherit`?a.value.defaults.model:t.id))}function be(){pe.value=void 0,J.value=!1}async function xe(){if(!(!pe.value||!a.value)){if(pe.value.provider===`auto`){be();return}try{await te(EG(a.value,pe.value))&&be()}catch(e){h.value=e instanceof Error?e.message:String(e)}}}function X(e){if(e!==`escape`){be(),x.value=!1;return}if(J.value){J.value=!1;return}if(pe.value){be();return}x.value=!1}function Se(e){te({...c.value,reasoningEffort:e||null})}function Ce(e){de.value&&te({...c.value,fastMode:e?`fast`:`normal`})}function we(e){C.value=e,be(),x.value=!0,ee()}return f(()=>[n.agent.revision,d.value],([e])=>{!d.value&&a.value&&e>a.value.revision&&ee()}),f(()=>n.agent.id,()=>{x.value=!1,be(),ee()}),m(ee),i(()=>{_++,b()}),(t,n)=>(u(),F(`section`,{class:`bot-chat-controls`,"aria-label":`Bot 聊天模型快捷设置`,"aria-busy":l.value||d.value,title:G.value},[U(ZW,{"model-label":P.value,combined:e.compact,compact:e.compact,"fast-target":e.optionsTarget,"reasoning-value":c.value.reasoningEffort??``,"reasoning-label":j.value?`自动 · ${M.value}`:B(c.value.reasoningEffort??I.value),"reasoning-options":ce.value,"reasoning-disabled":!V.value,disabled:W.value,"fast-mode":le.value!==`normal`,"fast-disabled":!de.value,"fast-label":le.value===`normal`||le.value===`fast`?`快速`:R(ie)[le.value],scope:G.value,onModelClick:we,onReasoningChange:Se,onFastModeToggle:Ce},null,8,[`model-label`,`combined`,`compact`,`fast-target`,`reasoning-value`,`reasoning-label`,`reasoning-options`,`reasoning-disabled`,`disabled`,`fast-mode`,`fast-disabled`,`fast-label`,`scope`]),(u(),k(L,{to:e.contextTarget??`body`,disabled:!e.contextTarget},[U(VW,{compact:e.compact,snapshot:e.context,"agent-id":e.agent.id,"next-budget":N.value?.contextBudget,"next-window":N.value?.contextWindow},null,8,[`compact`,`snapshot`,`agent-id`,`next-budget`,`next-window`])],8,[`to`,`disabled`])),d.value||g.value||h.value?(u(),F(`div`,{key:0,class:y([`bot-control-status`,{error:h.value}]),role:h.value?`alert`:`status`},[D(`span`,null,s(h.value||(d.value?`正在保存…`:g.value)),1),h.value?(u(),F(`button`,{key:0,type:`button`,disabled:l.value||d.value,onClick:ee},`重新读取`,8,AG)):z(``,!0)],10,kG)):z(``,!0),U(wG,{open:x.value,anchor:C.value,options:K.value,"selected-id":ne.value,busy:d.value,tuning:!0,editing:!!pe.value,onClose:X,onSelect:fe,onEdit:Y},{footer:S(()=>[c.value.provider||c.value.model?(u(),F(`button`,{key:0,class:`bot-model-inherit`,type:`button`,disabled:W.value,onClick:n[0]||=e=>fe(`inherit:default`)},`跟随系统默认`,8,jG)):z(``,!0)]),tuning:S(()=>[pe.value?(u(),F(`section`,MG,[D(`header`,null,[D(`button`,{type:`button`,"aria-label":`取消模型参数修改`,disabled:d.value,onClick:be},[U(Z,{name:`close`,size:15})],8,NG),D(`div`,null,[D(`strong`,null,s(pe.value.model===`auto`?`Auto`:pe.value.model),1),D(`small`,null,s(me.value?.providerName||he.value?.providerName||pe.value.provider),1)]),D(`button`,{class:`bot-model-tuning__done`,disabled:W.value,type:`button`,onClick:xe},`完成`,8,PG)]),D(`div`,FG,[n[4]||=D(`span`,null,`快速`,-1),D(`button`,{type:`button`,role:`switch`,"aria-label":`快速`,"aria-checked":_e.value===`fast`,disabled:W.value||!ge.value,onClick:n[1]||=e=>pe.value.fastMode=_e.value===`fast`?`normal`:`fast`},[D(`span`,{class:y([`bot-model-switch`,{on:_e.value===`fast`}])},[...n[3]||=[D(`i`,null,null,-1)]],2)],8,IG)]),ge.value?z(``,!0):(u(),F(`p`,LG,s(pe.value.provider===`auto`?`由实际模型决定`:`当前连接暂未开放`),1)),D(`div`,RG,[n[5]||=D(`span`,null,`推理强度`,-1),D(`button`,{ref_key:`effortTrigger`,ref:oe,type:`button`,"aria-label":`选择推理强度`,"aria-expanded":J.value,disabled:W.value||!ve.value,onClick:n[2]||=e=>J.value=!J.value},[w(s(pe.value.provider===`auto`?`自动`:pe.value.reasoningEffort?B(pe.value.reasoningEffort):`跟随默认`),1),U(Z,{name:`chevron-down`,size:12})],8,zG)]),J.value?(u(),F(`div`,BG,[(u(!0),F(T,null,p(ye.value,e=>(u(),F(`button`,{key:e.id,type:`button`,"aria-pressed":e.id===(pe.value.reasoningEffort??``),onClick:t=>{pe.value.reasoningEffort=e.id||null,J.value=!1}},[D(`span`,HG,[e.id===(pe.value.reasoningEffort??``)?(u(),k(Z,{key:0,name:`check`,size:14})):z(``,!0)]),w(s(e.label),1)],8,VG))),128))])):z(``,!0),ve.value?z(``,!0):(u(),F(`p`,UG,s(pe.value.provider===`auto`?`${M.value} 自动选择模型和推理强度。`:he.value?.reasoningKnown?`此模型不提供推理强度选择。`:`模型目录未声明推理能力,采用提供方默认。`),1)),D(`p`,WG,s(G.value)+s(ne.value===`${pe.value.provider}:${pe.value.model}`?``:`选择此模型后使用这些参数。`),1),h.value?(u(),F(`p`,GG,s(h.value),1)):z(``,!0)])):z(``,!0)]),_:1},8,[`open`,`anchor`,`options`,`selected-id`,`busy`,`editing`]),D(`span`,KG,s(G.value)+` `+s(N.value&&!V.value?N.value.reasoningKnown?`此模型不提供推理强度选择。`:`模型目录未声明推理能力,将采用提供方默认。`:``),1)],8,OG))}}),[[`__scopeId`,`data-v-4e1a0ae6`]]),JG={class:`inspector`,"aria-label":`Inspector 请求查看器`},YG={class:`inspector-toolbar`},XG={class:`lenses`,role:`group`,"aria-label":`Inspector 视图`},ZG=[`aria-pressed`],QG=[`aria-pressed`],$G=[`disabled`],eK={key:0,role:`alert`,class:`error`},tK={key:1,class:`empty`},nK={class:`summary`},rK={key:0},iK=V(E({__name:`WorkspaceInspectorPanel`,props:{conversationId:{},taskId:{},showClose:{type:Boolean}},emits:[`close`],setup(e,{emit:t}){let n=e,r=t,a=O([]),c=O(``),l=O(!1),d=O(`events`),m=O(),h,g=!1,_=0,v=O(!0),b=H(()=>a.value.filter(e=>d.value===`events`?e.direction===`event`:e.direction!==`event`)),x=H(()=>{let e=[];for(let t of[...b.value].sort((e,t)=>e.at-t.at)){let n=t.data,r=String(n?.text??n?.delta??n?.content??n?.error??n?.message??``).replace(/\s+/g,` `).slice(0,120),i=d.value===`raw`?t.direction===`request`?`→ out`:t.direction===`error`?`! error`:`← in`:t.method,a=t.direction===`error`||/error|failed/.test(t.method)?`error`:/start|complete|finish/.test(t.method)?`boundary`:`plain`,o=e.at(-1);if(d.value===`events`&&/delta$/.test(t.method)&&o?.tag===i&&o.data[0]?.runId===t.runId&&o.data[0]?.agentId===t.agentId){o.count++,o.at=t.at,o.data.push(t),o.summary=(o.summary+r).slice(0,120);continue}e.push({id:t.id,at:t.at,tag:i,summary:d.value===`raw`?t.method+(t.requestId?` #`+t.requestId.slice(0,8):``):r||t.method,tone:a,count:1,data:[t],duration:t.durationMs})}return e.reverse()}),S=e=>new Date(e).toLocaleTimeString(`zh-CN`,{hour12:!1})+`.`+String(e%1e3).padStart(3,`0`);async function C(){let e=_;l.value=!0;try{let t=await Q(`/api/app/conversations/${n.conversationId}/inspector${n.taskId?`?taskId=`+encodeURIComponent(n.taskId):``}`);e===_&&!g&&(a.value=t.entries,c.value=``)}catch(t){e===_&&!g&&(c.value=t instanceof Error?t.message:`无法读取请求记录`)}finally{e===_&&(l.value=!1)}}async function E(){let e=_;document.hidden||await C(),!g&&e===_&&(h=setTimeout(E,3e3))}return f(()=>[n.conversationId,n.taskId],()=>{_++,a.value=[],v.value=!0,clearTimeout(h),E()},{immediate:!0}),f(d,async()=>{v.value=!0,await o(),m.value&&(m.value.scrollTop=0)}),f(x,async()=>{let e=v.value;await o(),e&&m.value&&(m.value.scrollTop=0)}),i(()=>{g=!0,_++,clearTimeout(h)}),(t,n)=>(u(),F(`section`,JG,[D(`header`,null,[U(Z,{name:`bug`,size:16}),n[4]||=D(`strong`,null,`Inspector`,-1),e.showClose?(u(),F(`button`,{key:0,class:`close`,"aria-label":`关闭 Inspector`,title:`关闭 Inspector`,onClick:n[0]||=e=>r(`close`)},[U(Z,{name:`close`,size:16})])):z(``,!0)]),D(`div`,YG,[D(`div`,XG,[D(`button`,{"aria-pressed":d.value===`events`,onClick:n[1]||=e=>d.value=`events`},`Events`,8,ZG),D(`button`,{"aria-pressed":d.value===`raw`,onClick:n[2]||=e=>d.value=`raw`},`Raw`,8,QG)]),D(`span`,null,s(l.value&&!a.value.length?`读取中…`:b.value.length+` 条记录`),1),D(`button`,{class:`reload`,"aria-label":`刷新请求记录`,title:`重新读取记录`,disabled:l.value,onClick:C},[U(Z,{name:`refresh`,size:14})],8,$G)]),D(`div`,{ref_key:`list`,ref:m,class:`inspector-list`,onScroll:n[3]||=e=>v.value=!!m.value&&m.value.scrollTop<40},[c.value?(u(),F(`p`,eK,s(c.value),1)):!x.value.length&&!l.value?(u(),F(`p`,tK,s(d.value===`raw`?`此聊天尚未记录网关请求与响应。`:`此聊天尚未产生运行事件。`),1)):z(``,!0),(u(!0),F(T,null,p(x.value,e=>(u(),F(`details`,{key:e.id,class:y([`inspector-row`,e.tone])},[D(`summary`,null,[U(Z,{class:`chevron`,name:`chevron-left`,size:12}),D(`time`,null,s(S(e.at)),1),D(`span`,{class:y([`tag`,{native:d.value===`raw`}])},[w(s(e.tag),1),e.count>1?(u(),F(T,{key:0},[w(` ×`+s(e.count),1)],64)):z(``,!0)],2),D(`span`,nK,s(e.summary),1),e.duration===void 0?z(``,!0):(u(),F(`small`,rK,s(e.duration)+`ms`,1))]),D(`pre`,null,s(JSON.stringify(e.count===1?e.data[0]:e.data,null,2)),1)],2))),128))],544)]))}}),[[`__scopeId`,`data-v-8c8ae801`]]),aK={class:`bot-panel`,"aria-label":`Inspector 侧栏`},oK=V(E({__name:`WorkspaceBotPanel`,props:{conversationId:{},taskId:{}},emits:[`close`],setup(e,{emit:t}){let n=t;return(t,r)=>(u(),F(`aside`,aK,[U(iK,{"show-close":``,"conversation-id":e.conversationId,"task-id":e.taskId,onClose:r[0]||=e=>n(`close`)},null,8,[`conversation-id`,`task-id`])]))}}),[[`__scopeId`,`data-v-71f7f023`]]),sK={class:`local-vm-workspace`,"aria-label":`双桌面工作区`},cK=[`disabled`],lK={key:0,role:`alert`},uK={class:`panes`},dK=[`value`,`disabled`,`aria-label`,`onChange`],fK=[`value`,`disabled`],pK={key:1,class:`empty`},mK=V(E({__name:`LocalVmWorkspace`,props:{agents:{},primary:{}},emits:[`close`],setup(e,{expose:t,emit:n}){let r=e,i=n,a=O([r.primary,r.agents.find(e=>e.id!==r.primary)?.id??``]),o=[],c=O(!1),l=O(``),d=O(),f=H(()=>r.agents.filter(e=>!e.computerEnvironmentId));async function m(){for(let e of o)e?.hasControl()&&await e.releaseControl();d.value=void 0}async function h(e){if(!c.value){c.value=!0,l.value=``;try{await m(),await o[e]?.take(),o[e]?.hasControl()&&(d.value=e)}catch(e){l.value=e instanceof Error?e.message:`切换控制失败`}finally{c.value=!1}}}async function g(e,t){if(!c.value){c.value=!0,l.value=``;try{await m(),a.value[e]=t}catch(e){l.value=String(e)}finally{c.value=!1}}}async function _(){if(c.value)return!1;c.value=!0;try{return await m(),i(`close`),!0}catch(e){return l.value=String(e),!1}finally{c.value=!1}}return t({close:_}),(e,t)=>(u(),F(`main`,sK,[D(`header`,null,[t[0]||=D(`div`,null,[D(`strong`,null,`本地虚拟机 · 双桌面`),D(`p`,null,`同时查看两个机器人的桌面,每次只控制其中一台。`)],-1),D(`button`,{disabled:c.value,onClick:_},`交还并关闭`,8,cK)]),l.value?(u(),F(`p`,lK,s(l.value),1)):z(``,!0),D(`div`,uK,[(u(!0),F(T,null,p(a.value,(e,n)=>(u(),F(`section`,{key:n,class:y([`pane`,{controlled:d.value===n}])},[D(`label`,null,[w(`桌面 `+s(n+1),1),D(`select`,{value:a.value[n],disabled:c.value,"aria-label":`选择桌面 ${n+1}`,onChange:e=>g(n,e.target.value)},[t[1]||=D(`option`,{value:``},`选择机器人`,-1),(u(!0),F(T,null,p(f.value,e=>(u(),F(`option`,{key:e.id,value:e.id,disabled:a.value[1-n]===e.id},s(e.name),9,fK))),128))],40,dK)]),a.value[n]&&f.value.some(e=>e.id===a.value[n])?(u(),k(_t,{key:a.value[n],ref_for:!0,ref:e=>o[n]=e,embedded:``,agents:f.value.filter(e=>e.id===a.value[n]),onControlRequest:e=>h(n)},null,8,[`agents`,`onControlRequest`])):(u(),F(`p`,pK,`选择另一位机器人。打开工作区不会创建或启动虚拟机。`))],2))),128))])]))}}),[[`__scopeId`,`data-v-3c7b5891`]]),hK={class:`task-plan__header`},gK=[`aria-expanded`,`aria-controls`],_K={class:`task-plan__icon`},vK={class:`task-plan__heading`},yK={key:0,class:`task-plan__count`},bK={class:`task-plan__actions`},xK=[`id`,`onKeydown`],SK=[`aria-valuenow`],CK={key:1,class:`task-plan__steps`,"aria-label":`任务步骤`},wK={key:2,class:`task-plan__result`},TK={class:`result result--summary`},EK=[`open`],DK={class:`plan-details`},OK={key:0,class:`objective`},kK={key:1,class:`result`},AK={key:2},jK={key:0,class:`result`},MK={key:1},NK=[`disabled`],PK={key:0,class:`criteria-error`,role:`alert`},FK={class:`criteria-actions`},IK=[`disabled`],LK=[`disabled`],RK={key:0,class:`criteria`},zK={key:0},BK=V(E({__name:`TaskPlan`,props:{embedded:{type:Boolean},goal:{},assignments:{},agents:{},saveCriteria:{type:Function}},emits:[`stop`,`resume`],setup(e,{expose:t}){let n=e,r={queued:`排队中`,interrupted:`已中断`,pending:`待执行`,running:`进行中`,review:`待复核`,complete:`已完成`,failed:`执行失败`,blocked:`遇到阻碍`,cancelling:`正在停止`,cancelled:`已停止`,waiting:`需要补充信息`},i=H(()=>n.assignments.filter(e=>e.status===`complete`).length),a=H(()=>n.assignments.length?Math.round(i.value/n.assignments.length*100):n.goal?.status===`complete`?100:0),c=H(()=>!!n.saveCriteria&&!!n.goal&&[`running`,`review`,`waiting`].includes(n.goal.status)),l=O(!!n.embedded),m=x(),h=O(!1),g=O(!1),_=O(``),v=O(``),b=O(),S=O(),C=O();async function E(){l.value=!0,await o(),C.value?.scrollIntoView?.({block:`nearest`})}async function A(){g.value||(l.value=!1,await o(),C.value?.focus())}t({open:E});let j=1;f(()=>n.goal?.id??n.assignments[0]?.goalId??``,()=>{l.value=!!n.embedded,h.value=!1,v.value=``});async function M(){n.goal&&(_.value=n.goal.acceptanceCriteria.join(`
|
|
245
|
+
`)){let e=TV(r);e&&(t?e.marker===t&&e.info===``&&e.length>=n&&(t=``):(t=e.marker,n=e.length))}return t?`${e}\n${t.repeat(n)}`:e}function LV(e,t=!1){let n=FV(e);return t?n:IV(n)}var RV={key:0,class:`plain-text`},zV=[`innerHTML`],BV={key:1,class:`plain-text`},VV=[`innerHTML`],HV=V(E({__name:`MarkdownContent`,props:{content:{},streaming:{type:Boolean,default:!1},streamIntervalMs:{default:80},legacyMedia:{type:Boolean,default:!1},plain:{type:Boolean,default:!1},mentionNames:{},fileCards:{type:Boolean,default:!1},processContent:{type:Boolean,default:!1},outlinePrefix:{default:``},fileProfile:{},separateMedia:{type:Boolean},bubble:{type:Boolean},attachments:{},contentParts:{}},emits:[`fileLink`,`preview`,`rendered`],setup(e,{emit:t}){let n=e,r=t,a=O(null),c=O(``),l=O(n.content),d;function g(){d!==void 0&&clearTimeout(d),d=void 0}f(()=>[n.content,n.streaming,n.plain],([e,t,r])=>{!t||r||n.streamIntervalMs===0||!e.startsWith(l.value)||!l.value?(g(),l.value=e):d===void 0&&(d=setTimeout(()=>{d=void 0,l.value=n.content},n.streamIntervalMs))}),i(g);let _=new Map,v=0;function b(e,t){let n=`${t}\0${e}`,r=_.get(n);if(r!==void 0)return r;let i=t&&fV.getLanguage(t)?fV.highlight(e,{language:t,ignoreIllegals:!0}).value:x(e);if(n.length+i.length<=256e3)for(_.set(n,i),v+=n.length+i.length;_.size>32||v>512e3;){let e=_.keys().next().value;v-=e.length+_.get(e).length,_.delete(e)}return i}function x(e){return e.replace(/&/g,`&`).replace(/</g,`<`).replace(/>/g,`>`).replace(/"/g,`"`)}let S=new mI({html:!1,breaks:!0,linkify:!0,typographer:!1,highlight(e,t){let n=t.trim().split(/\s+/)[0]?.toLowerCase()||``,r=b(e,n),i=n||`text`;return`<pre class="code-block"><div class="code-header"><span class="code-lang">${x(i)}</span><button type="button" class="code-copy" aria-label="复制代码">复制</button></div><code class="hljs language-${x(i)}">${r}</code></pre>`}});S.disable(`smartquotes`);let C=S.validateLink;S.validateLink=e=>!!SI(e)||C(e);let w=S.renderer.rules.image;S.renderer.rules.image=(e,t,r,i,a)=>{if(n.processContent)return x(e[t].content||e[t].attrGet(`src`)||`图片`);let o=SI(e[t].attrGet(`src`)||``,n.fileProfile);return o&&e[t].attrSet(`src`,o),w(e,t,r,i,a)};let E=S.renderer.rules.link_open??((e,t,n,r,i)=>i.renderToken(e,t,n));S.renderer.rules.link_open=(e,t,r,i,a)=>{let o=e[t],s=o.attrGet(`href`)||``,c=!n.processContent&&n.fileCards?SI(s,n.fileProfile):void 0;return c&&/\.[^/]+$/.test(yI(s)??``)&&o.attrSet(`href`,c),o.attrSet(`target`,`_blank`),o.attrSet(`rel`,`noopener noreferrer`),E(e,t,r,i,a)};let D=H(()=>{let e=n.legacyMedia?II(l.value||``,n.streaming):l.value||``;return e=LV(e,n.streaming),e});function A(e){let t=n.mentionNames;if(!t?.length)return e;let r=[...new Set(t.filter(Boolean))].sort((e,t)=>t.length-e.length).map(e=>e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`));if(!r.length)return e;let i=RegExp(`(?<![\\w])@(?:${r.join(`|`)})(?=$|[\\s.,!?;:,。!?;:)\\]}>])`,`gi`);return e.replace(i,e=>`<span class="mention-highlight">${e}</span>`)}let j={USE_PROFILES:{html:!0},FORBID_TAGS:[`style`,`svg`,`math`,`form`,`input`,`iframe`,`object`,`embed`],FORBID_ATTR:[`style`,`onerror`,`onclick`,`onload`],ALLOW_UNKNOWN_PROTOCOLS:!1,ADD_ATTR:[`target`]},M=_d(window);M.setConfig(j);function N(e){return M.sanitize(A(e))}let P=H(()=>{if(n.plain||n.separateMedia)return[];let e={},t=S.parse(D.value,e),r=[],i=0,a=0;for(let n=0;n<t.length;n++)a+=t[n].nesting,a===0&&(r.push(N(S.renderer.render(t.slice(i,n+1),S.options,e))),i=n+1);return r});function I(e){try{let t=new URL(e,window.location.href);return t.pathname=t.pathname.replace(/(\/api\/app\/files\/[^/]+)\/(?:preview|download)$/,`$1`),t.searchParams.delete(`_retry`),t.searchParams.sort(),t.href}catch{return e}}let L=H(()=>{if(!n.separateMedia)return[];let e=[],t=new Set,r=n.attachments??[];function i(n){t.add(n.id),e.push({attachment:n})}function a(t){if(!t.replace(/<[^>]+>/g,``).trim()&&!/<(?:img|hr|pre|table)\b/.test(t))return;let n=e.at(-1);n&&`html`in n&&!n.text?n.html+=t:e.push({html:t})}function o(t){if(n.plain){t.trim()&&e.push({html:``,text:t});return}let o=document.createElement(`template`);o.innerHTML=N(S.render(t));for(let e of[...o.content.children]){if(e.tagName!==`P`){a(e.outerHTML);continue}let t=``;for(let n of[...e.childNodes]){let e=n instanceof HTMLElement?n:void 0,o=e?.tagName===`IMG`?e:void 0,s=e?.tagName===`A`?e:void 0,c;if(s&&B(s))try{c=V(new URL(s.href,window.location.href))}catch{}if(o||c){a(`<p>${t}</p>`),t=``;let e=o?.getAttribute(`src`)||s.getAttribute(`href`),n=r.find(t=>t.url&&I(t.url)===I(e)),l=n?.name||(o?o.alt||`图片`:U(s,c));i(n??{id:e,url:e,name:l,kind:o?`image`:`file`})}else t+=e?e.outerHTML:x(n.textContent||``)}a(`<p>${t}</p>`)}}if(n.contentParts?.length)for(let e of n.contentParts)if(`text`in e)o(n.legacyMedia?II(e.text,n.streaming):e.text);else{let t=r.find(t=>t.id===e.attachmentId);t&&i(t)}else o(D.value);for(let e of r)t.has(e.id)||i(e);return e});f([P,L],async()=>{await o(),r(`rendered`)},{flush:`post`});function R(){a.value&&a.value.querySelectorAll(`pre .code-copy`).forEach((e,t)=>{e.dataset.bound||(e.dataset.bound=`true`,e.addEventListener(`click`,async()=>{let n=e.closest(`pre`)?.querySelector(`code`)?.textContent??``,r=`${t}:${n.length}`;c.value=r;let i=await lt(n);e.textContent=i?`已复制`:`复制失败`,e.setAttribute(`aria-label`,i?`代码已复制`:`复制代码失败`),window.setTimeout(()=>{c.value!==r||!e.isConnected||(c.value=``,e.textContent=`复制`,e.setAttribute(`aria-label`,`复制代码`))},1400)}))})}function B(e){if(e.closest(`blockquote, table, h1, h2, h3, h4, h5, h6, pre, code, strong, em, del`))return!1;let t=e.parentElement;if(!t||t.tagName!==`P`&&t.tagName!==`LI`)return!1;for(let t=e.previousSibling;t&&t.nodeName!==`BR`;t=t.previousSibling)if(t.nodeType!==Node.TEXT_NODE||t.textContent?.trim())return!1;for(let t=e.nextSibling;t&&t.nodeName!==`BR`;t=t.nextSibling)if(t.nodeType!==Node.TEXT_NODE||t.textContent?.trim())return!1;return!0}function V(e){if(e.origin!==window.location.origin)return;if(/^\/api\/app\/files\/[^/]+\/(?:download|preview)$/i.test(e.pathname))return{remote:!0};if(e.pathname!==`/api/files/download`)return;let t=yI(e.searchParams.get(`path`)||``);if(!(!t||!xI(t)))return{path:t,remote:!1}}function U(e,t){return t.path?.split(`/`).at(-1)||e.textContent?.trim()||`文件`}function W(){n.processContent||!n.fileCards||!a.value||a.value.querySelectorAll(`a`).forEach(e=>{if(e.dataset.fileCard)return;let t;try{t=new URL(e.href,window.location.href)}catch{return}let n=V(t);if(!n||!B(e))return;e.dataset.fileCard=`true`,e.classList.add(`file-link-card`),e.removeAttribute(`target`),e.removeAttribute(`rel`);let i=U(e,n);e.textContent=i,e.setAttribute(`aria-label`,`预览文件 ${i}`),e.addEventListener(`click`,e=>{e.preventDefault(),r(`fileLink`,i,`${t.pathname}${t.search}`)})})}function ee(){n.processContent||!n.fileCards||!a.value||a.value.querySelectorAll(`img`).forEach(e=>{if(e.dataset.mediaPreview||e.closest(`.message-media`))return;let t;try{t=new URL(e.currentSrc||e.src,window.location.href)}catch{return}if(t.origin!==window.location.origin)return;e.dataset.mediaPreview=`true`;let n=(t.searchParams.get(`path`)||decodeURIComponent(t.pathname)).split(`/`).at(-1)||`图片`;e.setAttribute(`role`,`button`),e.setAttribute(`tabindex`,`0`),e.setAttribute(`aria-label`,`预览图片 ${n}`);let i=e=>{e.preventDefault(),e.stopPropagation(),r(`fileLink`,n,`${t.pathname}${t.search}`)};e.addEventListener(`click`,i),e.addEventListener(`keydown`,e=>{(e.key===`Enter`||e.key===` `)&&i(e)});let a,o=async()=>{if(!e.isConnected||a)return;a=document.createElement(`span`),a.className=`media-load-error`,a.setAttribute(`role`,`alert`);let r=document.createElement(`span`);r.textContent=`${n}:图片加载失败。`;let i=document.createElement(`button`);if(i.type=`button`,i.textContent=`重试`,i.addEventListener(`click`,()=>{a?.remove(),a=void 0,e.hidden=!1;let n=new URL(t);n.searchParams.set(`_retry`,String(Date.now())),e.src=n.toString()}),a.append(r,i),e.after(a),e.hidden=!0,t.pathname===`/api/files/download`)try{let e=await fetch(t,{credentials:`same-origin`});if(e.ok)await e.body?.cancel(),r.textContent=`${n}:文件内容不是可解码的图片。`;else{let t=await e.json().catch(()=>({})),i=t.error?.message||(typeof t.error==`string`?t.error:void 0)||t.message||t.detail;r.textContent=`${n}:${typeof i==`string`?i:e.status===404?`服务器文件不存在或已被移动。`:e.status===403?`此目录未获授权,请检查设置中的文件访问权限。`:`服务器暂时无法读取此文件。`}`}}catch{r.textContent=`${n}:连接失败,请重试。`}};e.addEventListener(`error`,()=>{o()}),e.addEventListener(`load`,()=>{e.hidden=!1,a?.remove(),a=void 0}),e.complete&&e.naturalWidth===0&&o()})}function te(){!n.outlinePrefix||!a.value||a.value.querySelectorAll(`h1, h2, h3`).forEach((e,t)=>{e.id=`${n.outlinePrefix}-heading-${t+1}`})}function G(e){let t=e.target.closest(`a`);if(!t)return;let n=t.getAttribute(`href`)||``;/^(javascript|data|vbscript):/i.test(n)&&e.preventDefault()}return m(()=>{R(),W(),ee(),te()}),h(()=>{R(),W(),ee(),te()}),(t,n)=>(u(),F(T,null,[e.separateMedia?(u(),F(`div`,{key:0,ref_key:`root`,ref:a,class:y([`markdown message-parts`,{"message-parts--streaming":e.streaming}]),onClick:G},[(u(!0),F(T,null,p(L.value,(t,i)=>(u(),F(T,{key:i},[`attachment`in t?(u(),k(CV,{key:0,attachment:t.attachment,onOpen:n[0]||=e=>r(`preview`,e),onRendered:n[1]||=e=>r(`rendered`)},null,8,[`attachment`])):(u(),F(`div`,{key:1,class:y([`message-prose`,{"chat-bubble":e.bubble}])},[t.text===void 0?(u(),F(`div`,{key:1,class:`markdown-block`,innerHTML:t.html},null,8,zV)):(u(),F(`div`,RV,s(t.text),1))],2))],64))),128))],2)):e.plain?(u(),F(`div`,BV,s(e.content),1)):(u(),F(`div`,{key:2,ref_key:`root`,ref:a,class:y([`markdown`,{"markdown--streaming":e.streaming}]),onClick:G},[(u(!0),F(T,null,p(P.value,(e,t)=>(u(),F(`div`,{key:t,class:`markdown-block`,innerHTML:e},null,8,VV))),128))],2)),e.streaming?(u(),k(Z,{key:3,class:`stream-caret`,name:`arrow-up`,size:0})):z(``,!0)],64))}}),[[`__scopeId`,`data-v-19a2aa79`]]),UV={class:`preview-inspector`},WV=[`title`],GV={class:`preview-header-actions`},KV=[`href`],qV=[`src`,`alt`],JV=[`src`],YV=[`src`],XV={key:5,class:`preview-sheet`},ZV={key:6,class:`preview-text`},QV={key:0},$V=[`href`],eH={key:8,class:`preview-unavailable`},tH=V(E({__name:`PreviewInspector`,props:{item:{},showClose:{type:Boolean,default:!1},canAddToComposer:{type:Boolean,default:!0}},emits:[`close`,`addToComposer`,`source`],setup(e,{emit:t}){let n=e,r=t,a=H(()=>!!n.item.previewUrl),c=H(()=>[`text`,`code`].includes(n.item.kind)),l=H(()=>n.item.previewUrl||n.item.downloadUrl||``),d=O(null),m=O(null),h=O([]),g=O(``),_=O(!1),v=O(!1),b=O(``),x=H(()=>n.item.name.split(`.`).at(-1)?.toLocaleLowerCase()||``),S=H(()=>x.value===`docx`||/wordprocessingml/.test(n.item.mimeType||``)),C=H(()=>[`xlsx`,`xls`].includes(x.value)||/spreadsheetml|excel/.test(n.item.mimeType||``)),w=H(()=>n.item.kind===`pdf`||x.value===`pdf`||n.item.mimeType===`application/pdf`),E=0,A,j=new URL(`/assets/pdf.worker.min-CHFwMXne.mjs`,``+import.meta.url).href;function M(){let e=d.value;if(!e)return;e.style.setProperty(`--docx-preview-scale`,`1`);let t=[...e.querySelectorAll(`section.docx`)],n=Math.max(0,...t.map(e=>e.getBoundingClientRect().width));if(!n)return;let r=Math.max(1,e.clientWidth),i=Math.min(1,Math.max(.1,r/n));e.style.setProperty(`--docx-preview-scale`,i.toFixed(4))}function N(){A?.disconnect(),!(!d.value||typeof ResizeObserver>`u`)&&(A=new ResizeObserver(M),A.observe(d.value))}async function P(){let e=++E;if(A?.disconnect(),A=void 0,d.value?.style.removeProperty(`--docx-preview-scale`),h.value=[],g.value=n.item.textContent||``,_.value=n.item.textContent!==void 0,b.value=``,l.value&&!(!S.value&&!C.value&&!c.value&&!w.value)){v.value=!0;try{let t=await fetch(l.value,{credentials:`same-origin`});if(!t.ok)throw Error(`预览读取失败(${t.status})`);let n=await t.blob();if(e!==E)return;if(w.value){let t=await Qe(()=>import(`./pdf-Q2a37aK5.js`),__vite__mapDeps([23,3,4,1,5]));if(t.GlobalWorkerOptions.workerSrc=j,await o(),!m.value)return;m.value.replaceChildren();let r=await t.getDocument({data:await n.arrayBuffer()}).promise;for(let t=1;t<=Math.min(r.numPages,24);t+=1){if(e!==E||!m.value)return;let n=await r.getPage(t),i=n.getViewport({scale:1}),a=Math.min(1.45,Math.max(.55,(m.value.clientWidth-24)/i.width)),o=n.getViewport({scale:a}),s=Math.min(2,window.devicePixelRatio||1),c=document.createElement(`div`);c.className=`pdf-page`;let l=document.createElement(`canvas`);l.width=Math.floor(o.width*s),l.height=Math.floor(o.height*s),l.style.width=`${o.width}px`,l.style.height=`${o.height}px`,c.appendChild(l),m.value.appendChild(c);let u=l.getContext(`2d`);u&&await n.render({canvas:l,canvasContext:u,viewport:o,transform:s===1?void 0:[s,0,0,s,0,0]}).promise}}else if(S.value){let{renderAsync:e}=await Qe(async()=>{let{renderAsync:e}=await import(`./docx-preview-DZusoPTe.js`);return{renderAsync:e}},__vite__mapDeps([24,4]));if(await o(),!d.value)return;d.value.replaceChildren(),await e(n,d.value,void 0,{inWrapper:!0,breakPages:!0,ignoreWidth:!1,ignoreHeight:!1}),M(),N()}else if(C.value){let{default:e}=await Qe(async()=>{let{default:e}=await import(`./browser-B97PQaMt.js`);return{default:e}},[]);h.value=await e(n)}else c.value&&(_.value||(g.value=await n.text()),_.value=!0)}catch(e){b.value=e instanceof Error?e.message:`无法生成预览`}finally{v.value=!1}}}return f(()=>n.item.id,P,{immediate:!0,flush:`post`}),i(()=>A?.disconnect()),(t,n)=>(u(),F(`div`,UV,[D(`header`,null,[D(`strong`,{title:e.item.name},s(e.item.title||e.item.name),9,WV),D(`div`,GV,[e.item.sourceSessionId?(u(),F(`button`,{key:0,class:`icon-button`,type:`button`,"aria-label":`跳转到来源消息`,title:`跳转到来源消息`,onClick:n[0]||=t=>r(`source`,e.item)},[U(Z,{name:`external`,size:15})])):z(``,!0),e.item.downloadUrl||e.item.previewUrl?(u(),F(`a`,{key:1,class:`icon-button`,href:e.item.downloadUrl||e.item.previewUrl,download:``,"aria-label":`下载`,title:`下载`},[U(Z,{name:`download`,size:16})],8,KV)):z(``,!0),e.canAddToComposer?(u(),F(`button`,{key:2,class:`icon-button`,type:`button`,"aria-label":`加入输入框`,title:`加入输入框`,onClick:n[1]||=t=>r(`addToComposer`,e.item)},[U(Z,{name:`plus`,size:17})])):z(``,!0),e.showClose?(u(),F(`button`,{key:3,class:`icon-button preview-close`,type:`button`,"aria-label":`关闭预览`,title:`关闭预览`,onClick:n[2]||=e=>r(`close`)},[U(Z,{name:`close`,size:17})])):z(``,!0)])]),D(`div`,{class:y([`preview-stage`,`preview-stage--${e.item.kind}`])},[e.item.kind===`image`&&a.value?(u(),F(`img`,{key:0,src:e.item.previewUrl,alt:e.item.name},null,8,qV)):e.item.kind===`video`&&a.value?(u(),F(`video`,{key:1,src:e.item.previewUrl,controls:``,playsinline:``},null,8,JV)):e.item.kind===`audio`&&a.value?(u(),F(`audio`,{key:2,src:e.item.previewUrl,controls:``},null,8,YV)):w.value&&a.value?(u(),F(`div`,{key:3,ref_key:`pdfRoot`,ref:m,class:`preview-pdf`},null,512)):S.value?(u(),F(`div`,{key:4,ref_key:`officeRoot`,ref:d,class:`preview-office`},null,512)):C.value&&h.value.length?(u(),F(`div`,XV,[D(`table`,null,[D(`tbody`,null,[(u(!0),F(T,null,p(h.value.slice(0,200),(e,t)=>(u(),F(`tr`,{key:t},[(u(!0),F(T,null,p(e.slice(0,50),(e,t)=>(u(),F(`td`,{key:t},s(e),1))),128))]))),128))])])])):c.value&&_.value?(u(),F(`div`,ZV,[e.item.kind===`code`?(u(),F(`pre`,QV,s(g.value),1)):(u(),k(HV,{key:1,content:g.value},null,8,[`content`]))])):e.item.kind===`link`&&(e.item.previewUrl||e.item.downloadUrl)?(u(),F(`a`,{key:7,class:`preview-link`,href:e.item.previewUrl||e.item.downloadUrl,target:`_blank`,rel:`noopener noreferrer`},[D(`span`,null,[U(Z,{name:`link`,size:27})]),D(`strong`,null,s(e.item.title||e.item.name),1),n[3]||=D(`small`,null,`在新窗口中打开`,-1)],8,$V)):(u(),F(`div`,eH,[D(`span`,null,[U(Z,{name:b.value?`alert`:`file`,size:28},null,8,[`name`])]),D(`strong`,null,s(v.value?`正在生成预览…`:b.value||`此格式暂不支持内嵌预览`),1),D(`p`,null,s(b.value?`仍可下载文件后使用系统应用查看。`:`可下载文件,使用系统应用查看。`),1)]))],2)]))}}),[[`__scopeId`,`data-v-da7e4daa`]]),nH=[`aria-label`],rH=V(E({__name:`PreviewModal`,props:{item:{},items:{default:()=>[]},canAddToComposer:{type:Boolean,default:!0}},emits:[`close`,`addToComposer`,`source`],setup(e,{emit:t}){let n=e,r=t,a=H(()=>{let e=n.items.filter(e=>e.kind===`image`||e.kind===`video`);return e.some(e=>e.id===n.item.id||e.previewUrl===n.item.previewUrl)?e:[n.item]}),o=O(0),s=H(()=>a.value[o.value]??n.item),c=H(()=>o.value>0),l=H(()=>o.value<a.value.length-1),d;function p(){let e=a.value.findIndex(e=>e.id===n.item.id||e.previewUrl===n.item.previewUrl);o.value=e>=0?e:0}function h(){c.value&&--o.value}function g(){l.value&&(o.value+=1)}function _(e){(e.button===0||e.pointerType!==`mouse`)&&(e.target.closest(`button, a, audio`)||(d=e.clientX))}function v(e){if(d===void 0)return;let t=e.clientX-d;d=void 0,!(Math.abs(t)<48)&&(t<0?g():h())}function y(e){e.key===`Escape`?(e.preventDefault(),r(`close`)):e.key===`ArrowLeft`?(e.preventDefault(),h()):e.key===`ArrowRight`&&(e.preventDefault(),g())}return f([()=>n.item.id,a],p,{immediate:!0}),m(()=>window.addEventListener(`keydown`,y)),i(()=>window.removeEventListener(`keydown`,y)),(t,n)=>(u(),k(L,{to:`body`},[U(ge,{name:`preview-modal`},{default:S(()=>[D(`div`,{class:`preview-modal-layer`,onMousedown:n[4]||=X(e=>r(`close`),[`self`])},[D(`section`,{class:`preview-modal`,role:`dialog`,"aria-modal":`true`,"aria-label":`预览 ${s.value.title||s.value.name}`,onPointerdown:_,onPointerup:v,onPointercancel:n[3]||=e=>C(d)?d.value=void 0:d=void 0},[U(tH,{item:s.value,"show-close":``,"can-add-to-composer":e.canAddToComposer,onClose:n[0]||=e=>r(`close`),onAddToComposer:n[1]||=e=>r(`addToComposer`,e),onSource:n[2]||=e=>r(`source`,e)},null,8,[`item`,`can-add-to-composer`]),c.value?(u(),F(`button`,{key:0,class:`media-nav media-nav--previous`,type:`button`,"aria-label":`上一张媒体`,title:`上一张媒体`,onClick:h},[U(Z,{name:`chevron-left`,size:22})])):z(``,!0),l.value?(u(),F(`button`,{key:1,class:`media-nav media-nav--next`,type:`button`,"aria-label":`下一张媒体`,title:`下一张媒体`,onClick:g},[U(Z,{class:`media-nav__next-icon`,name:`chevron-left`,size:22})])):z(``,!0)],40,nH)],32)]),_:1})]))}}),[[`__scopeId`,`data-v-b797b8fc`]]),iH=new Set([`apng`,`avif`,`bmp`,`gif`,`heic`,`heif`,`ico`,`jfif`,`jpeg`,`jpg`,`jxl`,`png`,`svg`,`tif`,`tiff`,`webp`]),aH=new Set([`avi`,`m4v`,`mkv`,`mov`,`mp4`,`mpeg`,`mpg`,`webm`]);function oH(e,t,n=`local:${t}`,r){let i=e.split(`.`).at(-1)?.toLocaleLowerCase()||``,a=iH.has(i)?`image`:aH.has(i)?`video`:[`mp3`,`wav`,`m4a`,`aac`,`ogg`].includes(i)?`audio`:i===`pdf`?`pdf`:[`md`,`markdown`,`txt`,`json`,`yaml`,`yml`,`csv`,`js`,`ts`,`py`,`sh`].includes(i)?`text`:`file`;return{id:n,name:e,kind:r||a,previewUrl:t,downloadUrl:t}}function sH(e){try{let t=new URL(e,window.location.origin);return t.origin===window.location.origin&&t.pathname===`/api/files/download`&&(t.searchParams.delete(`_retry`),t.searchParams.sort()),t.origin===window.location.origin&&(t.pathname=t.pathname.replace(/(\/api\/app\/files\/[^/]+)\/(?:preview|download)$/,`$1`)),t.href}catch{return e}}function cH(e){try{let t=new URL(e,window.location.origin);return(t.pathname===`/api/files/download`?t.searchParams.get(`path`)||t.pathname:decodeURIComponent(t.pathname)).split(`/`).at(-1)||`媒体`}catch{return`媒体`}}function lH(e){let t=[],n=new Set,r=e=>{if(!e.previewUrl||![`image`,`video`].includes(e.kind))return;let r=sH(e.previewUrl);n.has(r)||(n.add(r),t.push(e))},i=new mI({html:!1}),a=i.validateLink;i.validateLink=e=>!!SI(e)||a(e);for(let t of e){if(![`user`,`assistant`].includes(t.role)&&!t.communication)continue;let e=e=>{let n=t.attachments?.find(t=>t.id===e);n?.url&&[`image`,`video`].includes(n.kind||`file`)&&r(oH(n.name,n.url,`${t.id}:${n.id}`,n.kind))},n=e=>{if(t.role===`user`)return;let n=II(e,t.status===`streaming`);for(let e of i.parse(n,{}))for(let n of e.children??[]){let e=n.type===`image`?n.attrGet(`src`):n.type===`link_open`?n.attrGet(`href`):null;if(!e)continue;let i=SI(e,t.profile)||e,a=t.attachments?.find(e=>e.url&&sH(e.url)===sH(i));r(oH(a?.name||cH(i),i,`${t.id}:${i}`,a?.kind))}};if(t.contentParts?.length)for(let r of t.contentParts)`text`in r?n(r.text):e(r.attachmentId);else n(t.content);for(let n of t.attachments??[])e(n.id)}return t}var uH={class:`chat-files`,"aria-label":`聊天文件`},dH={class:`files-search`},fH=[`aria-busy`],pH=[`aria-label`,`onClick`],mH={class:`attachment-copy`},hH=[`title`],gH=[`datetime`],_H={key:0,class:`files-status`,role:`status`},vH={key:1,class:`files-status`,role:`alert`},yH={key:2,class:`files-status`},bH=V(E({__name:`BotFilesPanel`,props:{conversationId:{},active:{type:Boolean,default:!0},revision:{}},setup(e){let t=e,n=O(``),r=O([]),a=O(null),c=O(!1),l=O(``),m=O(null),h=0,g,_,v=null;async function b(e=!1){if(!t.conversationId||!t.active)return;g?.abort();let i=++h;g=new AbortController,c.value=!0,l.value=``;let o=new URLSearchParams({limit:`50`});n.value.trim()&&o.set(`search`,n.value.trim()),e&&a.value&&o.set(`cursor`,a.value);try{let n=await Q(`/api/app/conversations/${encodeURIComponent(t.conversationId)}/files?${o}`,{signal:g.signal});if(i!==h)return;let s=new Map((e?r.value:[]).map(e=>[e.id,e]));for(let e of n.items)s.set(e.id,e);r.value=[...s.values()].sort((e,t)=>t.sentAt-e.sentAt),a.value=n.nextCursor}catch(e){i===h&&(l.value=e instanceof Error?e.message:`暂时无法读取文件`)}finally{i===h&&(c.value=!1)}}f([()=>t.conversationId,()=>t.active,()=>t.revision,()=>n.value.trim()],(e,n)=>{h++,g?.abort(),clearTimeout(_),r.value=[],a.value=null,m.value=null,l.value=``,c.value=!!(t.conversationId&&t.active),c.value&&(n&&e[0]===n[0]&&e[3]!==n[3]?_=setTimeout(()=>void b(),220):b())},{immediate:!0});function x(e){let t=new Date(e);return t.toLocaleString(`zh-CN`,{...t.getFullYear()===new Date().getFullYear()?{}:{year:`numeric`},month:`2-digit`,day:`2-digit`,hour:`2-digit`,minute:`2-digit`,hour12:!1})}function S(e){return e<1024?`${e} B`:e<1048576?`${(e/1024).toFixed(1)} KB`:`${(e/1048576).toFixed(1)} MB`}function C(e){return e.mimeType.startsWith(`image/`)?`image`:e.mimeType.startsWith(`video/`)?`video`:e.mimeType.startsWith(`audio/`)?`audio`:/\.(csv|xlsx?)$/i.test(e.name)?`board`:`file`}async function E(e){v=document.activeElement;let t=e.mimeType.toLowerCase().split(`;`)[0]||``,n=t.startsWith(`image/`)?`image`:t.startsWith(`video/`)?`video`:t.startsWith(`audio/`)?`audio`:t===`application/pdf`?`pdf`:t.startsWith(`text/`)||/json|xml|javascript/.test(t)?`text`:void 0,r=`/api/app/files/${encodeURIComponent(e.id)}`;m.value={...oH(e.name,`${r}/preview`,e.id,n),mimeType:e.mimeType,size:e.size,downloadUrl:`${r}/download`},await o(),document.querySelector(`.preview-modal .preview-close`)?.focus()}async function A(){m.value=null,await o(),v?.isConnected&&v.focus({preventScroll:!0})}return i(()=>{h++,g?.abort(),clearTimeout(_)}),(e,t)=>(u(),F(`section`,uH,[D(`label`,dH,[U(Z,{name:`search`,size:18}),d(D(`input`,{"onUpdate:modelValue":t[0]||=e=>n.value=e,"aria-label":`搜索文件`,placeholder:`搜索文件`},null,512),[[Y,n.value]]),n.value?(u(),F(`button`,{key:0,type:`button`,"aria-label":`清空搜索`,onClick:t[1]||=e=>n.value=``},[U(Z,{name:`close`,size:16})])):z(``,!0)]),D(`div`,{class:`files-scroll`,"aria-label":`文件列表,按日期从新到旧`,"aria-busy":c.value},[(u(!0),F(T,null,p(r.value,e=>(u(),F(`button`,{key:e.id,type:`button`,class:`attachment-row`,"aria-label":`预览 ${e.name}`,onClick:t=>E(e)},[D(`span`,{class:y([`attachment-icon`,{spreadsheet:C(e)===`board`,image:C(e)===`image`}])},[U(Z,{name:C(e),size:22},null,8,[`name`])],2),D(`span`,mH,[D(`strong`,{title:e.name},s(e.name),9,hH),D(`small`,null,[D(`time`,{datetime:new Date(e.sentAt).toISOString()},s(x(e.sentAt)),9,gH),t[4]||=D(`span`,null,`·`,-1),w(s(S(e.size)),1)])])],8,pH))),128)),c.value?(u(),F(`p`,_H,`正在读取文件…`)):l.value?(u(),F(`p`,vH,[w(s(l.value),1),D(`button`,{type:`button`,onClick:t[2]||=e=>b(r.value.length>0)},`重试`)])):r.value.length?a.value?(u(),F(`button`,{key:3,class:`load-more`,type:`button`,onClick:t[3]||=e=>b(!0)},`加载更多`)):z(``,!0):(u(),F(`p`,yH,s(n.value.trim()?`没有找到相关文件`:`暂无文件`),1))],8,fH),m.value?(u(),k(rH,{key:0,item:m.value,"can-add-to-composer":!1,onClose:A},null,8,[`item`])):z(``,!0)]))}}),[[`__scopeId`,`data-v-cde52027`]]),xH={class:`grok-auth`,"aria-label":`Grok Bot 登录授权`},SH={class:`account-icon`},CH={"aria-live":`polite`},wH={key:0,class:`connected`},TH={key:0,class:`account`},EH={key:0},DH={key:1,class:`hint`},OH={key:2,class:`pending`,role:`status`},kH={key:3,class:`error`,role:`alert`},AH=[`href`],jH={class:`actions`},MH=[`disabled`],NH=[`disabled`],PH=[`disabled`],FH={key:1,class:`hint`},IH={key:2,class:`hint`},LH={key:0},RH=[`disabled`],zH=[`open`],BH=[`disabled`],VH=V(E({__name:`GrokAuthPanel`,props:{isAdmin:{type:Boolean}},emits:[`changed`],setup(e,{emit:t}){let n=t,r=O(),a=O(``),o=O(``),c=O(!1),l=O(!0),d=O(!1),f=H(()=>r.value?.attempt?.status===`pending`),p=H(()=>f.value?`等待浏览器授权`:r.value?.status===`reauthorization-required`?`需要重新授权`:r.value?.status===`refreshing`?`正在续期`:r.value?.status===`connected`?`已授权`:`尚未登录`),h=H(()=>{try{let e=r.value?.attempt?.loginUrl;if(!e)return``;let t=new URL(e);return t.protocol===`https:`&&t.hostname===`cursor.com`&&!t.port&&!t.username&&!t.password&&t.pathname===`/loginDeepControl`&&t.searchParams.get(`redirectTarget`)===`cli`?t.href:``}catch{return``}}),g=!1,_,v,y,b=``;function x(e){r.value=e,e.attempt?.status!==`pending`&&(y=void 0);let t=JSON.stringify([e.status,e.account,e.attempt?.status]);b&&b!==t&&n(`changed`),b=t}async function S(){if(g||document.hidden||c.value)return;v?.abort();let e=new AbortController;v=e;try{let t=await Q(`/api/app/grok-cloud/auth`,{signal:e.signal});!g&&!e.signal.aborted&&(x(t),o.value=``)}catch(t){!g&&!e.signal.aborted&&(o.value=t instanceof Error?t.message:`无法读取 Grok Bot 授权状态`)}finally{g||(l.value=!1)}}async function C(e){if(!c.value){v?.abort(),c.value=!0,a.value=``;try{let t=await e();g||x(t)}catch(e){g||(a.value=e instanceof Error?e.message:`Grok Bot 授权操作未完成`)}finally{c.value=!1,l.value=!1}}}async function E(){y??=pt(),await C(()=>Q(`/api/app/grok-cloud/auth/start`,{method:`POST`,body:{requestId:y}})),f.value&&h.value&&window.open(h.value,`_blank`,`noopener,noreferrer`),f.value||(y=void 0),a.value&&await S()}async function k(){let e=r.value?.attempt?.id;e&&(await C(()=>Q(`/api/app/grok-cloud/auth/${e}/cancel`,{method:`POST`,body:{}})),y=void 0)}async function A(){let e=r.value?.attempt?.id;e&&await C(()=>Q(`/api/app/grok-cloud/auth/${e}/poll`,{method:`POST`,body:{}}))}async function j(){await C(()=>Q(`/api/app/grok-cloud/auth`,{method:`DELETE`})),y=void 0}async function M(){await C(()=>Q(`/api/app/grok-cloud/connect`,{method:`POST`,body:{importLocal:!0,version:r.value?.version??`0.47.0`}}))}async function N(){await S(),g||(_=setTimeout(N,f.value?2e3:1e4))}let P=()=>{document.hidden||S()};return m(()=>{document.addEventListener(`visibilitychange`,P),N()}),i(()=>{g=!0,clearTimeout(_),v?.abort(),document.removeEventListener(`visibilitychange`,P)}),(t,n)=>(u(),F(`section`,xH,[D(`header`,null,[D(`span`,SH,[U(Z,{name:`globe`,size:20})]),D(`div`,null,[n[1]||=D(`strong`,null,`Grok Bot`,-1),D(`small`,CH,s(l.value?`正在检查授权…`:p.value),1)]),r.value?.status===`connected`&&!f.value?(u(),F(`span`,wH,[U(Z,{name:`check`,size:14}),n[2]||=w(`已连接`,-1)])):z(``,!0)]),r.value?.account?.email||r.value?.account?.name?(u(),F(`p`,TH,[w(s(r.value.account.name),1),r.value.account.email?(u(),F(`span`,EH,s(r.value.account.email),1)):z(``,!0)])):z(``,!0),!r.value?.configured&&!f.value?(u(),F(`p`,DH,`使用 Grok Bot 所属的 Cursor 账号,在浏览器完成登录授权。`)):z(``,!0),f.value?(u(),F(`div`,OH,[...n[3]||=[D(`span`,{class:`pulse`},null,-1),D(`div`,null,[D(`strong`,null,`请在浏览器中完成授权`),D(`p`,null,`完成后返回Yaovi,这里会自动更新。授权链接有效期约 10 分钟。`)],-1)]])):z(``,!0),a.value||o.value||r.value?.attempt?.error||r.value?.error?(u(),F(`p`,kH,s(a.value||o.value||r.value?.attempt?.error||r.value?.error),1)):z(``,!0),f.value?(u(),F(T,{key:4},[h.value?(u(),F(`a`,{key:0,class:`primary`,href:h.value,target:`_blank`,rel:`noopener noreferrer`},[U(Z,{name:`external`,size:14}),n[4]||=w(`在浏览器继续授权`,-1)],8,AH)):z(``,!0),D(`div`,jH,[D(`button`,{disabled:c.value,onClick:A},`我已完成授权`,8,MH),D(`button`,{disabled:c.value,onClick:k},`取消授权`,8,NH)])],64)):(u(),F(T,{key:5},[e.isAdmin?(u(),F(`button`,{key:0,class:`primary`,disabled:c.value||l.value,onClick:E},[U(Z,{name:`external`,size:15}),w(s(r.value?.status===`connected`?`重新授权`:`使用 Cursor 账号登录`),1)],8,PH)):r.value?.configured?z(``,!0):(u(),F(`p`,FH,`请由管理员为当前账号完成云端授权。`)),r.value?.configured?(u(),F(`p`,IH,[w(s(r.value.automaticRefresh?`登录会自动续期,无需重复登录。`:`此连接尚未取得自动续期授权,建议重新登录。`),1),r.value.expiresAt&&r.value.status!==`reauthorization-required`?(u(),F(`span`,LH,`当前凭据有效期至 `+s(new Date(r.value.expiresAt).toLocaleString(`zh-CN`))+`。`,1)):z(``,!0)])):z(``,!0),r.value?.configured?(u(),F(`button`,{key:3,class:`disconnect`,disabled:c.value,onClick:j},`断开连接`,8,RH)):z(``,!0)],64)),n[7]||=D(`p`,{class:`privacy`},`登录凭据加密保存在当前服务器,供当前账号的机器人使用。`,-1),e.isAdmin&&!f.value?(u(),F(`details`,{key:6,open:d.value,onToggle:n[0]||=e=>d.value=e.target.open},[n[5]||=D(`summary`,null,`兼容旧连接`,-1),n[6]||=D(`p`,{class:`hint`},`仅用于迁移服务器上已有的 Grok Bot 登录;推荐使用上方浏览器授权。`,-1),D(`button`,{disabled:c.value,onClick:M},`导入服务器上的已有登录`,8,BH)],40,zH)):z(``,!0)]))}}),[[`__scopeId`,`data-v-65a30394`]]),HH={class:`panel-body`},UH={key:0,class:`agent-select`},WH=[`disabled`],GH=[`value`],KH={key:1},qH={class:`screen-caption`},JH=[`disabled`],YH={value:``},XH=[`value`],ZH=[`value`],QH={key:1},$H=[`disabled`,`aria-label`],eU=[`src`,`alt`],tU={key:1,class:`empty`},nU={key:2,class:`open-badge`},rU={key:0,class:`problem`,role:`alert`},iU={class:`computer-options`},aU={key:0,class:`managed-browser-option`,"aria-label":`托管浏览器`},oU={key:0,class:`hint`,role:`status`},sU=[`value`],cU=[`disabled`,`aria-busy`],lU=[`disabled`],uU=[`disabled`],dU={key:1,class:`hint`},fU={key:1,class:`problem`,role:`alert`,"aria-label":`本地虚拟机状态`},pU=[`disabled`],mU=[`value`,`disabled`],hU=[`disabled`],gU={key:0,class:`hint`},_U=[`value`,`disabled`],vU={key:0,value:``,disabled:``},yU=[`value`,`disabled`],bU={class:`hint`},xU=[`disabled`],SU=[`disabled`],CU=[`disabled`],wU=[`disabled`],TU=[`disabled`],EU={class:`control-state`},DU={key:8,class:`vm-actions`},OU=[`disabled`],kU=[`disabled`],AU=[`disabled`],jU={class:`hint`},MU=V(E({__name:`LocalVmChatPanel`,props:{agents:{},isAdmin:{type:Boolean},active:{type:Boolean},embedded:{type:Boolean}},emits:[`close`,`changed`,`settings`,`desktop`,`workspace`],setup(e,{emit:t}){let n=e,r=t,a=O(``),o=O(),c=O(),l=O(``),m=O(!1),h=O(!0),g=H(()=>n.agents.find(e=>e.id===a.value)),_=O({vm:!0,cloud:!0,managedBrowser:!1}),v=O(),b=O(!1),x=O(``),S=O(),C=O(!1),E=H(()=>_.value.cloud),A=H(()=>_.value.vm&&!!o.value),j=O(``),M=H(()=>o.value?.desktops?.find(e=>e.id===j.value)),N=H(()=>!!o.value?.enabled&&o.value.desktopId===j.value),P=H(()=>o.value?.fixedCapacity&&!m.value&&!o.value.inUse&&!g.value?.temporaryGoalId&&!N.value&&M.value?.online&&M.value.ready&&M.value.available!==!1);f(()=>o.value,e=>{if(!e?.fixedCapacity){j.value=``;return}if(e.desktops?.some(e=>e.id===j.value))return;let t=e.desktops?.filter(e=>e.online&&e.ready&&e.available!==!1)??[];j.value=e.desktopId??(t.length===1?t[0].id:``)});let I=H(()=>[_.value.cloud?`云虚拟机`:``,_.value.vm?`本地虚拟机`:``,_.value.managedBrowser?`托管浏览器`:``].filter(Boolean).join(` · `)),L=H(()=>{let e=[];return _.value.cloud&&S.value?.configured&&e.push({key:`cloud`,label:`云虚拟机`,backend:`cloud`}),_.value.vm&&e.push({key:`vm`,label:`本地虚拟机`,backend:`vm`}),_.value.managedBrowser&&e.push({key:`managed-browser`,label:`托管浏览器`,backend:`managed-browser`}),e}),B=O(``),V=H(()=>{let e=L.value.find(e=>e.backend===`vm`);return e&&o.value?.enabled&&o.value.container===`running`&&o.value.ready&&!o.value.problem?e:L.value.find(e=>e.backend===`cloud`&&S.value?.running&&S.value.connected)||L.value[0]}),W=H(()=>B.value?L.value.find(e=>e.key===B.value):V.value),ee=O(!1),te=H(()=>{let e=W.value;return e?e.backend===`cloud`?S.value?.configured?S.value?.running?`正在连接桌面…`:`打开云端电脑后可查看桌面`:`尚未连接 Grok Bot 账号`:e.backend===`managed-browser`?v.value?.available?v.value.open?`正在读取浏览器画面…`:`浏览器尚未打开,接管后可打开网页`:v.value?.installation?.message||v.value?.reason||`托管浏览器执行节点不可用`:o.value?.enabled?o.value.problem?o.value.problem:o.value.image?o.value.container===`missing`?`尚未创建虚拟机`:o.value.container===`stopped`?`虚拟机已停止`:`正在连接桌面…`:`本地虚拟机尚未准备`:o.value?.fixedCapacity?`请先连接下方的共享桌面`:`未使用电脑`:B.value?`所选电脑已不可用,请重新选择`:`暂无已开放的电脑`}),G,K=!1,ne=0,re=0,ie=0,q=()=>`/api/app/agents/${encodeURIComponent(a.value)}/local-vm`;async function ae(){let e=a.value,t=++ie;try{let n=await Q(`/api/app/agents/${encodeURIComponent(e)}/managed-browser`);!K&&e===a.value&&t===ie&&(v.value=n,x.value=``)}catch(n){!K&&e===a.value&&t===ie&&(v.value=void 0,x.value=n instanceof Error?n.message:`无法读取托管浏览器状态`)}}async function J(){if(!(m.value||b.value)){b.value=!0;try{await ae(),await oe()}finally{b.value=!1}}}async function oe(){if(K||n.active===!1||!a.value||document.hidden||m.value)return;let e=++re,t=a.value,r=W.value,i=r?.backend===`vm`?o.value?.container===`running`&&o.value?.ready:r?.backend===`cloud`?!!S.value?.running&&!!S.value?.connected:r?.backend===`managed-browser`&&!!v.value?.available&&!!v.value?.open;if(!r||!i){c.value=void 0,ee.value=!1;return}ee.value=!0;try{let n=new URLSearchParams({backend:r.backend});r.host&&n.set(`host`,r.host);let i=await Q(`/api/app/agents/${encodeURIComponent(t)}/computer/frame?${n}`);e===re&&!K&&t===a.value&&(c.value=i)}catch{e===re&&!K&&(c.value=void 0)}finally{e===re&&!K&&(ee.value=!1)}}f(()=>W.value?.key,()=>{re++,c.value=void 0,oe()},{flush:`sync`});async function se(){if(K||n.active===!1||!a.value||document.hidden||m.value)return;let e=ne;try{try{let t=await Q(`/api/app/settings/host-tools`);e===ne&&!K&&(_.value={vm:t.vm!==!1,cloud:t.cloud!==!1,managedBrowser:t.managedBrowser===!0})}catch{}let t=a.value,[n,r]=await Promise.all([Q(`/api/app/agents/${t}/cloud-computer`),_.value.vm?Q(q()):Promise.resolve(void 0),_.value.managedBrowser?ae():Promise.resolve(void 0)]);if(e!==ne||K||(S.value=n,o.value=r,await oe(),e!==ne||K))return;l.value=``}catch(t){e===ne&&(l.value=t instanceof Error?t.message:`无法读取电脑画面`)}finally{e===ne&&(h.value=!1)}}async function ce(e){let t=``;if(m.value)return!1;m.value=!0,l.value=``;try{await e(),r(`changed`)}catch(e){t=e instanceof Error&&e.message?e.message:`电脑操作未完成`}finally{m.value=!1,await se(),t&&(l.value=t)}return!t}async function le(){if(!P.value)return;let e=a.value,t=j.value;await ce(()=>Q(`/api/app/agents/${encodeURIComponent(e)}/local-vm`,{method:`PUT`,body:{enabled:!0,desktopId:t}}))&&a.value===e&&(B.value=`vm`)}async function ue(e,t){let n=g.value;!n||m.value||![`vm`,`cloud`,`managed-browser`].includes(e)||e===`cloud`&&!await ce(()=>Q(`/api/app/agents/${encodeURIComponent(n.id)}/cloud-computer/open`,{method:`POST`,body:{}}))||!K&&g.value?.id===n.id&&r(`desktop`,n,e,t)}async function de(){let e=W.value;e&&c.value&&await ue(e.backend,e.host)}function fe(e){e===`recreate`&&!confirm(`重建这台虚拟机?当前桌面程序将关闭,工作文件、软件配置和登录资料会保留。`)||e===`remove`&&!confirm(`移除这台虚拟机实例以切换镜像?工作文件、软件配置和登录资料会保留。`)||ce(()=>Q(q()+`/`+e,{method:`POST`,body:{}}))}async function pe(){let e=ne;await se(),!K&&e===ne&&(G=setTimeout(pe,3e3))}return f(()=>n.agents.map(e=>e.id).join(`,`),()=>{n.agents.some(e=>e.id===a.value)||(a.value=n.agents[0]?.id??``)},{immediate:!0}),f(a,()=>{ne++,re++,ie++,o.value=void 0,j.value=``,S.value=void 0,v.value=void 0,x.value=``,c.value=void 0,l.value=``,h.value=!0,B.value=``,clearTimeout(G),pe()},{immediate:!0}),f(()=>n.active,e=>{e&&se()}),i(()=>{K=!0,ne++,re++,clearTimeout(G)}),(t,n)=>(u(),F(`aside`,{class:y([`local-vm-chat-panel`,{embedded:e.embedded}]),"aria-label":`机器人电脑面板`},[D(`header`,null,[n[20]||=D(`strong`,null,`电脑`,-1),D(`button`,{"aria-label":`关闭电脑面板`,onClick:n[0]||=e=>r(`close`)},[U(Z,{name:`close`})])]),D(`div`,HH,[e.agents.length>1?(u(),F(`label`,UH,[n[21]||=w(`机器人`,-1),d(D(`select`,{"onUpdate:modelValue":n[1]||=e=>a.value=e,disabled:m.value},[(u(!0),F(T,null,p(e.agents,e=>(u(),F(`option`,{key:e.id,value:e.id},s(e.name),9,GH))),128))],8,WH),[[Me,a.value]])])):z(``,!0),g.value?(u(),F(T,{key:2},[D(`div`,qH,[D(`span`,null,s(g.value.name)+`的电脑`,1),L.value.length>1||B.value?d((u(),F(`select`,{key:0,"onUpdate:modelValue":n[2]||=e=>B.value=e,disabled:m.value,class:`screen-select`,"aria-label":`显示的桌面`},[D(`option`,YH,`自动`+s(W.value&&!B.value?` · `+W.value.label:``),1),B.value&&!W.value?(u(),F(`option`,{key:0,value:B.value,disabled:``},`所选电脑不可用`,8,XH)):z(``,!0),(u(!0),F(T,null,p(L.value,e=>(u(),F(`option`,{key:e.key,value:e.key},s(e.label),9,ZH))),128))],8,JH)),[[Me,B.value]]):I.value?(u(),F(`small`,QH,s(W.value?.label||I.value),1)):z(``,!0)]),D(`button`,{class:`preview`,disabled:!c.value||m.value,"aria-label":`打开${W.value?.label||g.value.name}的桌面`,onClick:n[3]||=e=>de()},[c.value?(u(),F(`img`,{key:0,src:`data:image/png;base64,${c.value.data}`,alt:`${W.value?.label||g.value.name}的电脑画面`},null,8,eU)):(u(),F(`span`,tU,[U(Z,{name:`monitor`,size:26}),D(`span`,null,s(h.value?`正在检查电脑…`:ee.value?`正在读取所选电脑画面…`:te.value),1)])),c.value?(u(),F(`span`,nU,[U(Z,{name:`external`,size:12}),n[22]||=w(`打开桌面`,-1)])):z(``,!0)],8,$H),l.value?(u(),F(`p`,rU,s(l.value),1)):z(``,!0),n[34]||=D(`p`,{class:`hint`},`可查看和接管本地虚拟机、云虚拟机和托管浏览器。设备授权状态在「设置 → 环境与权限 → 本机权限」中查看。`,-1),D(`div`,iU,[_.value.managedBrowser?(u(),F(`section`,aU,[n[23]||=D(`strong`,null,`托管浏览器`,-1),n[24]||=D(`p`,null,`网页操作使用独立浏览器。虚拟机的运行和维护状态在下方显示;查看状态不会打开网页。`,-1),v.value?.available?z(``,!0):(u(),F(`p`,oU,s(x.value||v.value?.installation?.message||v.value?.reason||`执行节点尚未提供浏览器能力,请检查节点配置与连接。`),1)),v.value?.installation?.status===`installing`?(u(),F(`progress`,{key:1,value:v.value.installation.progress,max:`100`,"aria-label":`浏览器准备进度`},null,8,sU)):z(``,!0),v.value?.available?z(``,!0):(u(),F(`button`,{key:2,type:`button`,disabled:m.value||b.value,"aria-busy":b.value,onClick:J},s(b.value?`正在检测…`:`重新检测`),9,cU)),D(`button`,{class:`primary`,disabled:m.value||b.value||!R(gt)(v.value),onClick:n[4]||=e=>ue(`managed-browser`)},s(v.value?.installation?.status===`failed`?`重试并接管浏览器`:v.value?.open?`接管浏览器`:`打开并接管浏览器`),9,lU)])):z(``,!0),E.value?(u(),F(T,{key:1},[n[25]||=D(`strong`,null,`云虚拟机`,-1),n[26]||=D(`p`,null,`多个机器人共用同一台 Grok Bot 云端虚拟机、工作文件和浏览器登录。各 Bot 的身份、记忆和聊天记录保持独立。`,-1),S.value?.configured?(u(),F(`button`,{key:0,class:`primary`,disabled:m.value,onClick:n[5]||=e=>ue(`cloud`)},s(S.value?.mode===`human`?`打开控制中的桌面`:`接管云虚拟机`),9,uU)):z(``,!0),D(`button`,{onClick:n[6]||=e=>C.value=!C.value},s(S.value?.configured?`云端连接设置`:`连接 Grok Bot`),1),!e.isAdmin&&!S.value?.configured?(u(),F(`p`,dU,`请由管理员为当前账号配置 Grok Bot 连接。`)):z(``,!0)],64)):z(``,!0),A.value&&o.value?(u(),F(T,{key:2},[n[32]||=D(`strong`,null,`本地虚拟机`,-1),D(`p`,null,s(g.value.temporaryGoalId?`临时助手的电脑由当前任务管理`:o.value.fixedCapacity||o.value.mode===`shared`?`共享虚拟机 · 与其他成员共用桌面和工作文件`:`此机器人的独立虚拟机`),1),o.value.maintenance?(u(),k(Ll,{key:0,state:o.value.maintenance},null,8,[`state`])):z(``,!0),o.value.problem?(u(),F(`p`,fU,s(o.value.problem),1)):z(``,!0),o.value.fixedCapacity&&!g.value.temporaryGoalId?(u(),F(T,{key:2},[D(`label`,null,[n[28]||=w(`共享桌面`,-1),d(D(`select`,{"onUpdate:modelValue":n[7]||=e=>j.value=e,"aria-label":`共享桌面`,disabled:m.value||o.value.inUse},[n[27]||=D(`option`,{value:``,disabled:``},`请选择共享桌面`,-1),(u(!0),F(T,null,p(o.value.desktops,e=>(u(),F(`option`,{key:e.id,value:e.id,disabled:!e.online||!e.ready||e.available===!1},s(e.name)+s(e.available===!1?` · 不可用`:e.online?e.ready?``:` · 正在启动`:` · 离线`),9,mU))),128))],8,pU),[[Me,j.value]])]),D(`button`,{class:`primary`,"data-testid":`connect-compose-desktop`,disabled:!P.value,onClick:le},s(N.value?`已连接`:`连接所选桌面`),9,hU),o.value.desktops?.length?z(``,!0):(u(),F(`p`,gU,`暂无可连接的共享桌面,请检查本地虚拟机设置。`))],64)):z(``,!0),!o.value.fixedCapacity&&o.value.images?.length&&!g.value.temporaryGoalId?(u(),F(T,{key:3},[D(`label`,null,[n[29]||=w(`虚拟机镜像`,-1),D(`select`,{value:o.value.imageKey??``,disabled:m.value||o.value.inUse||o.value.container!==`missing`,onChange:n[8]||=e=>ce(()=>R(Q)(q()+`/image`,{method:`PUT`,body:{imageKey:e.target.value}}))},[o.value.imageKey?z(``,!0):(u(),F(`option`,vU,s(o.value.image?`当前保留的镜像`:`请选择已准备的镜像`),1)),(u(!0),F(T,null,p(o.value.images,e=>(u(),F(`option`,{key:e.key,value:e.key,disabled:!e.ready},s(e.name)+s(e.ready?``:` · 未准备`),9,yU))),128))],40,_U)]),D(`p`,bU,s(o.value.mode===`shared`?`同一共享桌面只能使用一个镜像,选择会对所有共享成员生效。`:`此桌面的镜像、文件和浏览器资料与其他独立桌面分开。`)+s(o.value.container===`missing`?``:`切换镜像前请先移除实例。`),1)],64)):z(``,!0),!o.value.fixedCapacity&&!o.value.image?(u(),F(`button`,{key:4,class:`primary`,disabled:!e.isAdmin,onClick:n[9]||=e=>r(`settings`)},`设置本地虚拟机`,8,xU)):!o.value.fixedCapacity&&o.value.container===`missing`&&!g.value.temporaryGoalId?(u(),F(`button`,{key:5,class:`primary`,disabled:m.value,onClick:n[10]||=e=>fe(`create`)},`创建 `+s(g.value.name)+` 的虚拟机`,9,SU)):!o.value.fixedCapacity&&o.value.container===`stopped`&&!g.value.temporaryGoalId?(u(),F(`button`,{key:6,class:`primary`,disabled:m.value,onClick:n[11]||=e=>fe(`start`)},`启动虚拟机`,8,CU)):o.value.container===`running`?(u(),F(T,{key:7},[D(`button`,{class:`primary`,disabled:!o.value.ready||m.value,onClick:n[12]||=e=>ue(`vm`)},`打开桌面`,8,wU),o.value.mode===`per-bot`?(u(),F(`button`,{key:0,disabled:m.value,onClick:n[13]||=e=>r(`workspace`,g.value)},[U(Z,{name:`panel`}),n[30]||=w(`打开双桌面`,-1)],8,TU)):z(``,!0),D(`p`,EU,s(o.value.controlMode===`human`?`你或其他操作者正在控制电脑`:o.value.inUse?`机器人正在操作`:`仅查看 · 虚拟机空闲`),1)],64)):z(``,!0),!o.value.fixedCapacity&&o.value.container!==`missing`&&!g.value.temporaryGoalId?(u(),F(`div`,DU,[D(`button`,{disabled:m.value||o.value.inUse,onClick:n[14]||=e=>fe(`stop`)},`停止虚拟机`,8,OU),D(`button`,{disabled:m.value||o.value.inUse,onClick:n[15]||=e=>fe(`recreate`)},`重建虚拟机`,8,kU),D(`button`,{disabled:m.value||o.value.inUse,onClick:n[16]||=e=>fe(`remove`)},`移除实例`,8,AU)])):z(``,!0),D(`p`,jU,s(o.value.fixedCapacity?`桌面由 Compose 创建,数量固定。这里只连接已有共享桌面;工作目录为 /home/cua/workspace。`:`重建会保留工作文件、软件配置和登录资料。${R(zl)(o.value.idleStopMinutes)},可在设置中修改。`),1),e.isAdmin?(u(),F(`button`,{key:9,class:`settings-link`,onClick:n[17]||=e=>r(`settings`)},[U(Z,{name:`settings`,size:14}),n[31]||=w(`本地虚拟机设置`,-1)])):z(``,!0)],64)):z(``,!0)]),E.value?z(``,!0):(u(),F(`button`,{key:1,class:`settings-link`,onClick:n[18]||=e=>C.value=!C.value},[U(Z,{name:`globe`,size:14}),n[33]||=w(`Grok Bot 云端连接`,-1)])),C.value?(u(),k(VH,{key:2,"is-admin":e.isAdmin,onChanged:n[19]||=e=>{r(`changed`),se()}},null,8,[`is-admin`])):z(``,!0)],64)):(u(),F(`p`,KH,`当前聊天没有可用的机器人。`))])],2))}}),[[`__scopeId`,`data-v-ac3d303c`]]);function NU(e,t=Date.now()){if(!e)return`时间未记录`;let n=new Date(e),r=new Date(t);if(n.toDateString()===r.toDateString())return`今天`;let i=new Date(r);return i.setDate(r.getDate()-1),n.toDateString()===i.toDateString()?`昨天`:n.toLocaleDateString(`zh-CN`)}var PU=[`onKeydown`],FU={class:`detail-heading`},IU=[`disabled`],LU={key:0,class:`home-header`},RU={role:`status`},zU={key:1,class:`home-tabs`,"aria-label":`Bot 功能`},BU=[`aria-pressed`,`onClick`],VU={key:2,class:`home-content`},HU={class:`record-status`},UU={key:0},WU={key:1,class:`home-task`,"aria-label":`任务详情`},GU={class:`home-task-owner`},KU={class:`home-task-person`},qU={key:0},JU={key:1},YU={key:2},XU={key:0,class:`home-task-criteria`},ZU={key:0},QU={key:1,class:`detail-text`},$U={key:2,class:`home-task-artifacts`},eW=[`href`],tW={key:2,class:`detail-text`},nW={key:3,class:`note`},rW={key:4,class:`actions`},iW=[`disabled`],aW=[`disabled`],oW={key:5,class:`note`},sW={key:3,class:`home-content`},cW={key:4,class:`home-content`},lW={key:0,class:`note`,role:`status`},uW=[`onClick`],dW={class:`record-copy`},fW={key:0,class:`record-task-owner`},pW={key:1},mW={key:1,class:`home-empty`},hW={key:8,class:`home-error`,role:`alert`},gW=V(E({__name:`BotHomePanel`,props:{agent:{},draft:{},agents:{},conversations:{},conversationId:{},isAdmin:{type:Boolean},permissionControl:{type:Boolean},mainBotId:{},knowledgeEnabled:{type:Boolean},busy:{type:Boolean},error:{},initialEdit:{type:Boolean},active:{type:Boolean},connection:{}},emits:[`close`,`save`,`changed`,`manageModels`,`managePermissions`,`configure`,`desktop`,`workspace`,`settings`,`openConversation`],setup(e,{expose:t,emit:n}){let r=e,a=n,o=[{id:`activity`,label:`活动`,icon:`menu`},{id:`review`,label:`审核`,icon:`shield`},{id:`computer`,label:`电脑`,icon:`monitor`},{id:`routines`,label:`定时`,icon:`clock`},{id:`files`,label:`Bot 文件`,icon:`files`}],c=O(!1),l=O(`activity`),d=O(),h=O(!!r.initialEdit),g=O(r.initialEdit?`overview`:`identity`),_=O(!1),v=O(!1),b=O(),x=O(),S=O(),C=O(!1),E=O(``),A=O(!1),j=!0,M=0,N,P=null,I=H(()=>UI(r.conversations).get(r.agent.id)??`idle`),L=H(()=>({working:`工作中`,waiting:`等待处理`,loading:`同步中`,idle:`空闲`})[I.value]??`状态待确认`),B=H(()=>r.connection===`online`?`服务器在线 · ${L.value}`:r.connection===`offline`?`服务器离线`:r.connection===`expired`?`登录已过期`:`连接与同步中`),V=H(()=>{let e=l.value===`review`?S.value?.reviews??[]:S.value?.activities??[],t=new Map;for(let n of e){let e=l.value===`review`?n.pending?`待处理请求`:`历史记录`:NU(n.at);t.set(e,[...t.get(e)??[],n])}return[...t].map(([e,t])=>({title:e,rows:t}))});async function W(){let e=++M;C.value=!S.value;try{let t=await Q(`/api/app/agents/${encodeURIComponent(r.agent.id)}/home`);j&&e===M&&(S.value=t,E.value=``,d.value&&=[...t.activities,...t.reviews].find(e=>e.id===d.value?.id))}catch(t){j&&e===M&&(E.value=t instanceof Error?t.message:`暂时无法读取记录`)}finally{j&&e===M&&(C.value=!1)}}async function ee(){await W(),j&&(N=setTimeout(()=>{document.hidden?N=setTimeout(()=>void ee(),5e3):ee()},5e3))}function te(e){return e.kind===`approval`?`shield`:e.kind===`communication`?`chat`:e.kind===`goal`?`file`:e.kind===`runtime-task`?`branch`:e.kind===`memory`?`brain`:`file`}function G(){return(!h.value||b.value?.beforeClose()!==!1)&&(!v.value||window.confirm(`放弃当前记忆未保存的更改?`))&&!A.value}function ne(){G()&&a(`close`)}function re(e){v.value&&!window.confirm(`放弃当前记忆未保存的更改?`)||(v.value=!1,l.value=e,d.value=void 0,_.value=!1)}function ie(e=`identity`){g.value=e,h.value=!0}async function q(e){if(!(!d.value?.pending||A.value||r.connection!==`online`)){A.value=!0,E.value=``;try{await Q(`/api/app/interactions/${encodeURIComponent(d.value.interactionId)}/respond`,{method:`POST`,body:{answer:e}}),a(`changed`)}catch(e){E.value=e instanceof Error?e.message:`答复未确认`}finally{A.value=!1,await W()}}}function ae(){x.value?.focus()}return f(()=>r.agent.id,()=>{M++,S.value=void 0,d.value=void 0,l.value=`activity`,W()}),m(()=>{P=document.activeElement,ae(),ee()}),i(()=>{j=!1,M++,clearTimeout(N),x.value?.contains(document.activeElement)&&P?.isConnected&&P.focus()}),t({beforeClose:G,markSaved:e=>b.value?.markSaved(e),focus:ae}),(t,n)=>(u(),F(`aside`,{ref_key:`panel`,ref:x,class:`bot-home`,"aria-label":`Bot 主页`,tabindex:`-1`,onKeydown:Ye(X(ne,[`stop`,`prevent`]),[`esc`])},[h.value?(u(),F(T,{key:0},[D(`header`,FU,[D(`button`,{"aria-label":`返回 Bot 主页`,disabled:e.busy,onClick:n[0]||=e=>b.value?.beforeClose()!==!1&&(h.value=!1)},[U(Z,{name:`chevron-left`}),n[20]||=w(`返回 `,-1)],8,IU)]),U(ko,{ref_key:`editor`,ref:b,embedded:``,"initial-page":g.value,agent:e.agent,draft:e.draft,agents:e.agents,conversations:e.conversations,"conversation-id":e.conversationId,"is-admin":e.isAdmin,"permission-control":e.permissionControl,"knowledge-enabled":e.knowledgeEnabled,busy:e.busy,error:r.error,onClose:n[1]||=e=>h.value=!1,onSave:n[2]||=e=>a(`save`,e),onChanged:n[3]||=e=>a(`changed`),onManageModels:n[4]||=e=>a(`manageModels`),onManagePermissions:n[5]||=e=>a(`managePermissions`)},null,8,[`initial-page`,`agent`,`draft`,`agents`,`conversations`,`conversation-id`,`is-admin`,`permission-control`,`knowledge-enabled`,`busy`,`error`])],64)):(u(),F(T,{key:1},[c.value?z(``,!0):(u(),F(`header`,LU,[D(`button`,{class:`home-close`,"aria-label":`关闭 Bot 主页`,onClick:ne},[U(Z,{name:`close`,size:21})]),D(`div`,{class:y([`avatar-wrap`,{"has-main-badge":e.agent.id===e.mainBotId}])},[U(Xe,{name:e.agent.name,avatar:e.agent.avatar,state:I.value,size:84,"main-bot":e.agent.id===e.mainBotId},null,8,[`name`,`avatar`,`state`,`main-bot`]),D(`button`,{class:`avatar-edit`,"aria-label":`编辑 Bot 头像与名称`,onClick:n[6]||=e=>ie()},[U(Z,{name:`edit`,size:17})])],2),D(`h2`,null,s(e.agent.name),1),D(`p`,RU,[D(`i`,{class:y({online:e.connection===`online`})},null,2),w(s(B.value),1)])])),c.value?z(``,!0):(u(),F(`nav`,zU,[(u(),F(T,null,p(o,e=>D(`button`,{key:e.id,"aria-pressed":l.value===e.id,onClick:t=>re(e.id)},[U(Z,{name:e.icon,size:21},null,8,[`name`]),D(`span`,null,s(e.label),1)],8,BU)),64))])),d.value?(u(),F(`div`,VU,[D(`button`,{class:`back`,onClick:n[7]||=e=>d.value=void 0},[U(Z,{name:`chevron-left`}),w(`返回`+s(l.value===`review`?`审核`:`活动`),1)]),D(`h3`,null,s(d.value.title),1),D(`p`,HU,s(d.value.status),1),d.value.at?(u(),F(`small`,UU,s(new Date(d.value.at).toLocaleString(`zh-CN`)),1)):z(``,!0),d.value.task?(u(),F(`section`,WU,[D(`p`,GU,[w(`负责人 `+s(d.value.task.coordinatorName),1),d.value.task.assignmentCount?(u(),F(T,{key:0},[w(` · `+s(d.value.task.reviewedCount)+`/`+s(d.value.task.assignmentCount)+` 项已复核`,1)],64)):(u(),F(T,{key:1},[w(` · 直接处理`)],64))]),(u(!0),F(T,null,p(d.value.task.assignments,t=>(u(),F(`article`,{key:t.id},[D(`header`,null,[U(Xe,{name:t.agentName,avatar:e.agents.find(e=>e.id===t.agentId)?.avatar,size:24,animated:!1},null,8,[`name`,`avatar`]),D(`strong`,null,s(t.title),1),D(`small`,{class:y(t.status)},s(t.status===`complete`?`已复核`:R(K)(t.status)),3)]),D(`p`,KU,s(t.agentName),1),t.brief?(u(),F(`p`,qU,s(t.brief),1)):z(``,!0),t.result?(u(),F(`p`,JU,[n[21]||=D(`span`,null,`执行结果`,-1),w(s(t.result),1)])):z(``,!0),t.review?(u(),F(`p`,YU,[n[22]||=D(`span`,null,`复核意见`,-1),w(s(t.review),1)])):z(``,!0)]))),128)),d.value.task.acceptanceCriteria.length?(u(),F(`div`,XU,[n[23]||=D(`h4`,null,`验收要求`,-1),(u(!0),F(T,null,p(d.value.task.acceptanceCriteria,(e,t)=>(u(),F(`p`,{key:t},[D(`small`,null,s(d.value.task.checks?.some(e=>e.criterion===t&&e.passed)?`已验收`:`待验收`),1),w(s(e),1),d.value.task.checks?.find(e=>e.criterion===t)?.evidence?(u(),F(`span`,ZU,s(d.value.task.checks.find(e=>e.criterion===t)?.evidence),1)):z(``,!0)]))),128))])):z(``,!0),d.value.task.result?(u(),F(`p`,QU,s(d.value.task.result),1)):z(``,!0),d.value.task.artifacts?.length?(u(),F(`div`,$U,[(u(!0),F(T,null,p(d.value.task.artifacts,e=>(u(),F(`a`,{key:e.id,href:`/api/app/files/${encodeURIComponent(e.id)}/download`,target:`_blank`,rel:`noopener`},[U(Z,{name:`file`,size:15}),w(s(e.name),1)],8,eW))),128))])):z(``,!0)])):(u(),F(`p`,tW,s(d.value.content||`这条记录没有附加内容。`),1)),d.value.responseState===`uncertain`||d.value.responseState===`sending`?(u(),F(`p`,nW,` 答复尚未确认,请核对原请求;这里不会重复投递。 `)):z(``,!0),d.value.pending?(u(),F(`div`,rW,[D(`button`,{disabled:A.value||e.connection!==`online`,onClick:n[8]||=e=>q(`deny`)},` 拒绝`,8,iW),D(`button`,{disabled:A.value||e.connection!==`online`,onClick:n[9]||=e=>q(`once`)},` 仅允许本次 `,8,aW)])):z(``,!0),d.value.pending&&e.connection!==`online`?(u(),F(`p`,oW,` 恢复连接后才能答复。 `)):z(``,!0),d.value.conversationId?(u(),F(`button`,{key:6,class:`soft-action`,onClick:n[10]||=e=>a(`openConversation`,d.value.conversationId,d.value.taskId)},` 查看原对话`)):z(``,!0),d.value.kind===`memory`?(u(),F(`button`,{key:7,class:`soft-action`,onClick:n[11]||=e=>{d.value=void 0,l.value=`activity`,_.value=!0}},` 查看 Bot 记忆 `)):z(``,!0)])):_.value?(u(),F(`div`,sW,[D(`button`,{class:`back`,onClick:n[12]||=e=>re(`activity`)},[U(Z,{name:`chevron-left`}),n[24]||=w(`返回活动 `,-1)]),U(pe,{embedded:``,"initial-tab":`agent`,"selected-agent-id":e.agent.id,"hide-agent-controls":``,agents:[e.agent],conversations:e.conversations,onChanged:n[13]||=e=>a(`changed`),onDirtyChange:n[14]||=e=>v.value=e},null,8,[`selected-agent-id`,`agents`,`conversations`])])):l.value===`activity`||l.value===`review`?(u(),F(`div`,cW,[C.value?(u(),F(`p`,lW,`正在读取记录…`)):z(``,!0),(u(!0),F(T,null,p(V.value,e=>(u(),F(`section`,{key:e.title},[D(`h3`,null,s(e.title),1),(u(!0),F(T,null,p(e.rows,e=>(u(),F(`button`,{key:e.id,class:`record`,onClick:t=>d.value=e},[D(`span`,{class:y([`record-icon`,e.kind])},[U(Z,{name:te(e),size:22},null,8,[`name`])],2),D(`span`,dW,[D(`strong`,null,s(e.title),1),D(`span`,null,s(e.summary),1),e.task?(u(),F(`span`,fW,`负责人 `+s(e.task.coordinatorName),1)):z(``,!0),e.at?(u(),F(`small`,pW,s(new Date(e.at).toLocaleTimeString(`zh-CN`,{hour:`2-digit`,minute:`2-digit`})),1)):z(``,!0)]),U(Z,{name:`chevron-down`,class:`record-arrow`,size:16})],8,uW))),128))]))),128)),!C.value&&!E.value&&!V.value.length?(u(),F(`div`,mW,[U(Z,{name:l.value===`review`?`shield`:`history`,size:28},null,8,[`name`]),D(`h3`,null,s(l.value===`review`?`暂无审核请求`:`还没有活动记录`),1),D(`p`,null,s(l.value===`review`?`这个 Bot 的权限请求和处理记录会显示在这里。`:`回复、交付、协作与记忆更新会显示在这里。`),1)])):z(``,!0)])):l.value===`computer`?(u(),k(MU,{key:5,embedded:``,agents:[e.agent],"is-admin":!!e.isAdmin,active:e.active,onDesktop:n[15]||=(e,t,n)=>a(`desktop`,e,t,n),onWorkspace:n[16]||=e=>a(`workspace`,e),onChanged:n[17]||=e=>a(`changed`),onSettings:n[18]||=e=>a(`settings`)},null,8,[`agents`,`is-admin`,`active`])):l.value===`routines`?(u(),k(ht,{key:6,"agent-id":e.agent.id,onEditingChange:n[19]||=e=>c.value=e,home:``,inline:``},null,8,[`agent-id`])):l.value===`files`?(u(),k(bH,{key:7,"conversation-id":e.conversationId,active:e.active,revision:e.conversations.find(t=>t.id===e.conversationId)?.lastSeq},null,8,[`conversation-id`,`active`,`revision`])):z(``,!0),E.value?(u(),F(`p`,hW,[w(s(E.value)+` `,1),D(`button`,{onClick:W},`重试`)])):z(``,!0)],64))],40,PU))}}),[[`__scopeId`,`data-v-c2e27faf`]]);function _W(e,t=Date.now()){let n=e.usage&&typeof e.usage==`object`?{...e,...e.usage}:e,r=(e,t=!1)=>e.map(e=>n[e]).find(e=>typeof e==`number`&&Number.isSafeInteger(e)&&(t?e>0:e>=0)),i=r([`usedTokens`,`context_used`,`contextUsed`,`context_tokens`,`contextTokens`]);if(i===void 0)return;let a=r([`limitTokens`,`context_max`,`contextMax`,`context_limit`,`contextLimit`],!0);return{kind:`reported-context`,usedTokens:i,...a===void 0?{}:{limitTokens:a},observedAt:t,...typeof n.model==`string`?{model:n.model}:{},...typeof n.provider==`string`?{provider:n.provider}:{}}}var vW=[`data-request-id`],yW=[`aria-label`,`aria-expanded`],bW={key:0},xW={key:1},SW={key:0,class:`context-details__usage`},CW={key:1,class:`context-details__usage`},wW={class:`context-bar`,"aria-hidden":`true`},TW={class:`muted`},EW={key:2,class:`context-composition`},DW={class:`context-row`},OW={class:`muted`},kW={class:`context-bar context-bar--small`,"aria-hidden":`true`},AW={key:3,class:`muted`},jW={class:`muted`},MW={class:`muted`},NW={class:`muted`},PW={key:4,class:`muted`},FW={key:5},IW={class:`context-extra`},LW={key:0,class:`muted`},RW={key:1,class:`muted`},zW={key:2,class:`warning`},BW={class:`context-details__footnote`},VW=V(E({__name:`PromptContextMeter`,props:{compact:{type:Boolean},snapshot:{},agentId:{},nextBudget:{},nextWindow:{},usedTokens:{},limitTokens:{},percentUsed:{}},setup(e){let t=e,n=e=>typeof e==`number`&&Number.isSafeInteger(e)&&e>=0,r=H(()=>{let e=t.snapshot;return e?.kind===`prompt-context`&&(!t.agentId||e.agentId===t.agentId)&&n(e.usedTokens)&&n(e.limitTokens)&&e.limitTokens>0&&n(e.configuredBudget)&&e.configuredBudget>0&&typeof e.observedAt==`number`&&Number.isFinite(e.observedAt)&&n(e.omittedTurns)&&n(e.checkpointThrough)&&[`provider-usage`,`server-estimate`].includes(String(e.usedSource))?e:void 0}),a=H(()=>{if(t.snapshot?.kind===`reported-context`&&(!t.agentId||t.snapshot.agentId===t.agentId))return _W(t.snapshot,Number(t.snapshot.observedAt));if(n(t.usedTokens)&&t.usedTokens>0)return{usedTokens:t.usedTokens,limitTokens:t.limitTokens&&t.limitTokens>0?t.limitTokens:void 0,model:void 0,provider:void 0,observedAt:void 0}}),c=H(()=>r.value?.usedTokens??a.value?.usedTokens),d=H(()=>r.value?.limitTokens??a.value?.limitTokens),h=H(()=>c.value!==void 0&&d.value?!r.value&&!t.snapshot&&typeof t.percentUsed==`number`&&Number.isFinite(t.percentUsed)?t.percentUsed:c.value/d.value*100:void 0),g=H(()=>r.value?.usedSource===`server-estimate`),_=H(()=>h.value===void 0?c.value===void 0?`待报告`:`已报告`:`${g.value?`约 `:``}${h.value.toFixed(1)}%`),v=H(()=>r.value?.usedSource===`provider-usage`?`提供方实际输入`:r.value?`服务端粗估`:a.value?`执行器报告 · 计数来源未注明`:`尚无本次用量`),b={system:`系统与 Bot 规则`,memoryAndTask:`记忆与任务`,history:`对话与当前输入`,tools:`工具与助手定义`,toolResults:`工具返回结果`,checkpoint:`压缩摘要`},x=[`#9875d7`,`#c4a154`,`#5b7ce9`,`#dc9455`,`#5aab96`,`#ad7fc6`],S=H(()=>Object.entries(b).flatMap(([e,t])=>{let i=r.value?.components?.[e];return n(i)?[{key:e,label:t,tokens:i}]:[]})),C=H(()=>S.value.some(e=>e.tokens>0)),E=e=>e.toLocaleString(`zh-CN`),k=e=>`${Math.min(100,Math.max(0,e/Math.max(1,d.value??c.value??1)*100))}%`,A=O(),j=O(),M=O(!1),N=O({}),P=O({});function I(e=!1){A.value&&(A.value.open=!1),M.value=!1,e&&A.value?.querySelector(`summary`)?.focus()}async function L(){if(!M.value)return;await o();let e=A.value?.querySelector(`summary`)?.getBoundingClientRect();if(!e)return;let t=window.visualViewport,n=Math.min(300,(t?.width??innerWidth)-24),r=e.left+e.width/2,i=Math.max(12,Math.min(r-n/2,(t?.width??innerWidth)-n-12)),a=(t?.offsetTop??0)+12,s=(t?.offsetTop??0)+(t?.height??innerHeight)-12,c=Math.max(0,e.top-a-10),l=Math.max(0,s-e.bottom-10),u=c>=(j.value?.scrollHeight??340)||c>=l;P.value={left:`${i+Math.max(24,Math.min(r-i,n-24))-6}px`,top:`${u?e.top-16:e.bottom+4}px`},N.value={width:`${n}px`,left:`${i}px`,maxHeight:`${u?c:l}px`,"--arrow-left":`${Math.max(24,Math.min(r-i,n-24))}px`,...u?{bottom:`${innerHeight-e.top+10}px`,top:`auto`}:{top:`${e.bottom+10}px`,bottom:`auto`}}}function B(){M.value=!!A.value?.open,M.value&&L()}function V(e){A.value?.contains(e.target)||I()}function W(e){e.key===`Escape`&&M.value&&(e.stopPropagation(),I(!0))}return f(()=>t.agentId,()=>I()),f(()=>t.snapshot,()=>{M.value&&L()}),m(()=>{document.addEventListener(`pointerdown`,V),document.addEventListener(`keydown`,W),window.addEventListener(`resize`,L),window.addEventListener(`scroll`,L,!0),window.visualViewport?.addEventListener(`resize`,L)}),i(()=>{document.removeEventListener(`pointerdown`,V),document.removeEventListener(`keydown`,W),window.removeEventListener(`resize`,L),window.removeEventListener(`scroll`,L,!0),window.visualViewport?.removeEventListener(`resize`,L)}),(t,n)=>(u(),F(`details`,{ref_key:`details`,ref:A,class:y([`context-meter`,{"context-meter--compact":e.compact}]),"aria-label":`上下文详情`,"data-request-id":r.value?.requestId,onToggle:B},[D(`summary`,{"aria-label":`上下文:${_.value}`,title:`最近一次模型请求的上下文用量;点击查看详情`,"aria-expanded":M.value},[U(R(RA),{"aria-hidden":`true`,type:`circle`,percentage:Math.min(100,Math.max(0,h.value??0)),"show-indicator":!1,"stroke-width":12,color:(h.value??0)>80?`var(--warning)`:`var(--text-secondary)`,"rail-color":`var(--line-strong)`,height:20,style:{width:`20px`,flex:`0 0 20px`}},null,8,[`percentage`,`color`]),e.compact?z(``,!0):(u(),F(`span`,bW,`上下文`)),e.compact?z(``,!0):(u(),F(`strong`,xW,s(_.value),1))],8,yW),M.value?(u(),F(`div`,{key:0,class:`context-pointer`,style:l(P.value),"aria-hidden":`true`},null,4)):z(``,!0),D(`div`,{ref_key:`card`,ref:j,class:y([`context-details`,{"context-details--below":N.value.top!==`auto`&&N.value.top}]),style:l(N.value),role:`dialog`,"aria-label":`上下文窗口`},[D(`header`,null,[n[1]||=D(`span`,null,`上下文窗口`,-1),D(`button`,{type:`button`,"aria-label":`关闭上下文详情`,onClick:n[0]||=e=>I(!0)},[U(Z,{name:`close`,size:12})])]),c.value===void 0?(u(),F(`p`,CW,[n[3]||=w(`用量待报告`,-1),e.limitTokens?(u(),F(T,{key:0},[w(` · 配置窗口 `+s(E(e.limitTokens)),1)],64)):z(``,!0)])):(u(),F(`p`,SW,[w(`已用 `+s(g.value?`约 `:``)+s(E(c.value)),1),d.value?(u(),F(T,{key:0},[w(` / `+s(E(d.value)),1)],64)):z(``,!0),n[2]||=w(` tokens`,-1),d.value?z(``,!0):(u(),F(T,{key:1},[w(` · 上限未知`)],64))])),D(`div`,wW,[D(`i`,{style:l({width:k(c.value??0)})},null,4)]),D(`p`,TW,s(h.value===void 0?`上限未知`:`${g.value?`约 `:``}占用 ${h.value.toFixed(1)}%`)+` · 最近一次模型请求`,1),n[7]||=D(`p`,{class:`muted`},`占用构成 · 粗估`,-1),C.value?(u(),F(`div`,EW,[(u(!0),F(T,null,p(S.value,(e,t)=>(u(),F(`div`,{key:e.key},[D(`div`,DW,[D(`span`,null,s(e.label),1),D(`span`,OW,s(E(e.tokens)),1)]),D(`div`,kW,[D(`i`,{style:l({width:k(e.tokens),background:x[t%x.length]})},null,4)])]))),128))])):(u(),F(`p`,AW,`本次未报告分项构成`)),D(`p`,jW,s(v.value)+` · 分项粗估`,1),D(`p`,MW,[w(`有效上限 `+s(d.value?E(d.value):`未报告`),1),r.value?(u(),F(T,{key:0},[w(`(`+s(r.value.limitSource===`provider-model`?`模型窗口`:`本地预算`)+`)`,1)],64)):z(``,!0)]),D(`p`,NW,`模型窗口 `+s(r.value?.modelWindow?E(r.value.modelWindow):!r.value&&!a.value&&e.nextWindow?`${E(e.nextWindow)}(下次请求)`:`未声明`),1),r.value?.model||a.value?.model?(u(),F(`p`,PW,[w(s(r.value?.model??a.value?.model),1),r.value?.provider||a.value?.provider?(u(),F(T,{key:0},[w(` · `+s(r.value?.provider??a.value?.provider),1)],64)):z(``,!0)])):z(``,!0),r.value?.reasoningEffort?(u(),F(`p`,FW,`推理强度 · `+s(R(se)[r.value.reasoningEffort]??r.value.reasoningEffort),1)):z(``,!0),D(`details`,IW,[n[5]||=D(`summary`,null,`来源与压缩详情`,-1),n[6]||=D(`p`,{class:`muted`},`组成均为服务端粗估,不能当作提供方实际分项用量。`,-1),r.value||!a.value&&e.nextBudget?(u(),F(`p`,LW,[w(`本地预算 `+s(E(r.value?.configuredBudget??e.nextBudget)),1),r.value?z(``,!0):(u(),F(T,{key:0},[w(`(下次请求)`)],64))])):z(``,!0),r.value?.omittedTurns?(u(),F(`p`,RW,`已裁剪 `+s(r.value.omittedTurns)+` 个较早回合,压缩摘要涵盖前 `+s(r.value.checkpointThrough)+` 条记录。`,1)):z(``,!0),(h.value??0)>100?(u(),F(`p`,zW,`已报告输入超过有效预算。`)):z(``,!0),D(`p`,BW,[n[4]||=w(`单次输入,非累计用量`,-1),r.value?.observedAt?(u(),F(T,{key:0},[w(` · `+s(new Date(r.value.observedAt).toLocaleTimeString()),1)],64)):z(``,!0)])])],6)],42,vW))}}),[[`__scopeId`,`data-v-147b85a1`]]),HW=[`disabled`,`title`],UW={key:1,class:`model-control__effort`},WW={key:0,class:`model-controls__reasoning`},GW=[`disabled`,`title`,`aria-label`,`aria-expanded`],KW={key:0,class:`reasoning-menu`,role:`dialog`,"aria-label":`推理强度`},qW={class:`reasoning-menu__options`,role:`group`,"aria-label":`推理档位`},JW=[`aria-pressed`,`disabled`,`onClick`],YW={key:0},XW=[`aria-checked`,`aria-label`,`disabled`],ZW=V(E({__name:`ModelControls`,props:{modelLabel:{},reasoningValue:{default:``},reasoningLabel:{default:`默认`},reasoningOptions:{default:()=>[]},disabled:{type:Boolean},reasoningDisabled:{type:Boolean},fastMode:{type:Boolean},fastDisabled:{type:Boolean},fastLabel:{default:`快速`},scope:{default:``},combined:{type:Boolean},compact:{type:Boolean},fastTarget:{}},emits:[`modelClick`,`reasoningChange`,`fastModeToggle`],setup(e,{emit:t}){let n=e,r=t,a=O(),o=O(),c=O(!1),l=H(()=>d.value.replace(/^继承 · /,``).replace(/^提供方默认.*$/,`默认`)),d=H(()=>n.reasoningOptions.find(e=>e.id===n.reasoningValue)?.label||n.reasoningLabel);function h(e=!1){c.value=!1,e&&o.value?.focus()}function g(e){a.value?.contains(e.target)||h()}function _(e){r(`reasoningChange`,e),h(!0)}return f(()=>n.disabled,e=>{e&&h()}),m(()=>document.addEventListener(`pointerdown`,g)),i(()=>document.removeEventListener(`pointerdown`,g)),(t,n)=>(u(),F(`div`,{ref_key:`root`,ref:a,class:y([`model-controls`,{"model-controls--compact":e.compact,"model-controls--combined":e.combined}]),onKeydown:n[4]||=Ye(X(e=>h(!0),[`stop`,`prevent`]),[`esc`])},[D(`button`,{class:`model-control model-control--model`,type:`button`,disabled:e.disabled,title:e.modelLabel,"aria-label":`选择模型`,"aria-haspopup":`dialog`,onClick:n[0]||=e=>{h(),r(`modelClick`,e.currentTarget)}},[e.combined&&e.fastMode&&!e.fastDisabled?(u(),k(Z,{key:0,name:`bolt`,size:13})):z(``,!0),D(`span`,null,s(e.modelLabel),1),e.combined&&!e.compact&&!e.reasoningDisabled?(u(),F(`small`,UW,s(l.value),1)):z(``,!0),U(Z,{name:`chevron-down`,size:12})],8,HW),e.combined?z(``,!0):(u(),F(`div`,WW,[D(`button`,{ref_key:`reasoningTrigger`,ref:o,class:y([`model-control`,{active:c.value}]),type:`button`,disabled:e.disabled||e.reasoningDisabled||!e.reasoningOptions.length,title:`推理强度:${d.value}`,"aria-label":`推理强度:${d.value}`,"aria-expanded":c.value,"aria-haspopup":`dialog`,onClick:n[1]||=e=>c.value=!c.value},[U(Z,{name:`brain`,size:17}),D(`span`,null,`推理 · `+s(l.value),1),U(Z,{name:`chevron-down`,size:14})],10,GW),c.value?(u(),F(`section`,KW,[D(`header`,null,[n[5]||=D(`strong`,null,`推理强度`,-1),D(`button`,{type:`button`,"aria-label":`关闭推理强度`,onClick:n[2]||=e=>h(!0)},[U(Z,{name:`close`,size:16})])]),D(`div`,qW,[(u(!0),F(T,null,p(e.reasoningOptions,t=>(u(),F(`button`,{key:t.id,type:`button`,"aria-pressed":t.id===e.reasoningValue,disabled:e.disabled||t.disabled,onClick:e=>_(t.id)},[D(`span`,null,s(t.label),1),t.id===e.reasoningValue?(u(),k(Z,{key:0,name:`check`,size:16})):z(``,!0)],8,JW))),128))]),n[6]||=D(`p`,null,`更高的强度用于深入分析复杂问题。`,-1),e.scope?(u(),F(`p`,YW,s(e.scope),1)):z(``,!0)])):z(``,!0)])),(u(),k(L,{to:e.fastTarget??`body`,disabled:!e.fastTarget},[!e.compact||e.fastTarget?(u(),F(`button`,{key:0,class:`model-control model-control--fast`,type:`button`,role:`switch`,"aria-checked":e.fastMode,"aria-label":`快速模式:${e.fastMode?`已开启`:`已关闭`}`,disabled:e.disabled||e.fastDisabled,title:`快速模式:响应更快,消耗更多额度`,onClick:n[3]||=t=>r(`fastModeToggle`,!e.fastMode)},[U(Z,{name:`bolt`,size:17}),D(`span`,null,s(e.fastLabel),1),D(`span`,{class:y([`model-control__switch`,{on:e.fastMode}]),"aria-hidden":`true`},[...n[7]||=[D(`span`,null,null,-1)]],2)],8,XW)):z(``,!0)],8,[`to`,`disabled`]))],34))}}),[[`__scopeId`,`data-v-7f4990ce`]]),QW=[`aria-label`,`aria-labelledby`,`aria-busy`],$W={class:`model-dialog__header`},eG=[`disabled`],tG={class:`model-dialog__search`},nG=[`placeholder`,`disabled`],rG={class:`model-dialog__columns`},iG={class:`model-dialog__body`},aG={class:`model-dialog__list`},oG=[`disabled`,`aria-label`,`aria-pressed`,`onClick`],sG={class:`model-dialog__item-label`},cG={class:`model-dialog__flat-name`},lG={class:`model-dialog__provider`},uG={class:`model-dialog__states`},dG={key:0},fG={key:1,class:`sr-only`},pG=[`disabled`,`aria-label`,`onClick`],mG=[`aria-expanded`,`disabled`,`onClick`],hG={class:`model-dialog__items`},gG=[`disabled`,`onClick`],_G={class:`model-dialog__item-label`},vG=[`title`],yG={key:0,class:`model-dialog__badge`},bG={key:1,class:`model-dialog__badge model-dialog__badge--quiet`},xG={key:2,class:`model-dialog__empty`},SG={key:0,class:`model-dialog__tuning`},CG={key:0,class:`model-dialog__status`,role:`status`},wG=V(E({__name:`ModelChoiceDialog`,props:{open:{type:Boolean},options:{},selectedId:{default:``},busy:{type:Boolean,default:!1},tuning:{type:Boolean},editing:{type:Boolean},anchor:{}},emits:[`close`,`select`,`edit`],setup(e,{emit:t}){let n=e,r=t,a=O(``),c=O(null),h=O({});function g(){if(!n.open)return;if(!n.anchor){h.value={};return}let e=n.anchor.getBoundingClientRect(),t=Math.min(n.tuning?n.editing?740:420:360,window.innerWidth-24),r=e.top-20,i=window.innerHeight-e.bottom-20,a=r>=300||r>=i;h.value={width:`${t}px`,left:`${Math.max(12,Math.min(e.left,window.innerWidth-t-12))}px`,maxHeight:`${Math.max(100,a?r:i)}px`,...a?{bottom:`${window.innerHeight-e.top+10}px`}:{top:`${e.bottom+10}px`}}}function v(e){n.open&&n.anchor&&!c.value?.contains(e.target)&&!n.anchor.contains(e.target)&&M()}let b=O(null),x=O({}),C={inherit:`默认配置`,auto:`Auto`,anthropic:`Anthropic`,google:`Google`,groq:`Groq`,minimax:`MiniMax`,mistral:`Mistral`,ollama:`Ollama`,openai:`OpenAI`,openrouter:`OpenRouter`,xai:`xAI`};function w(e){return`${e.provider}:${e.id}`}function E(e){let t=e.toLocaleLowerCase();return C[t]||e.replace(/[-_]+/g,` `).replace(/\b\w/g,e=>e.toLocaleUpperCase())}let A=H(()=>{let e=a.value.trim().toLocaleLowerCase();return n.options.filter(t=>`${t.name} ${t.id} ${t.providerName||t.provider}`.toLocaleLowerCase().includes(e))}),j=H(()=>{let e=a.value.trim().toLocaleLowerCase(),t=new Map;for(let r of n.options){let n=`${r.name} ${r.id} ${r.provider}`.toLocaleLowerCase();if(e&&!n.includes(e))continue;let i=t.get(r.provider)??[];i.push(r),t.set(r.provider,i)}return[...t].map(([e,t])=>({provider:e,label:E(e),models:t}))});function M(e=`dismiss`){n.busy||r(`close`,e)}function N(e){n.busy||(x.value={...x.value,[e]:!x.value[e]})}function P(e){if(n.open&&(e.key===`Escape`&&(e.preventDefault(),M(`escape`)),e.key===`Tab`)){let t=[...c.value?.querySelectorAll(`button:not(:disabled), input:not(:disabled)`)??[]].filter(e=>!e.closest(`[style*="display: none"]`)),n=t[0],r=t.at(-1);e.shiftKey&&document.activeElement===n?(e.preventDefault(),r?.focus()):!e.shiftKey&&document.activeElement===r&&(e.preventDefault(),n?.focus())}}let I=O(null);function R(e,t){I.value=t.currentTarget,r(`edit`,e)}return f(()=>n.editing,async e=>{await o(),g(),e?c.value?.querySelector(`.model-dialog__tuning button`)?.focus():I.value?.focus()}),f(()=>n.open,async e=>{if(!e){n.anchor?.focus();return}a.value=``,x.value={},await o(),g(),b.value?.focus()}),m(()=>{window.addEventListener(`keydown`,P),window.addEventListener(`resize`,g),window.addEventListener(`scroll`,g,!0),document.addEventListener(`pointerdown`,v),n.open&&(g(),b.value?.focus())}),i(()=>{window.removeEventListener(`keydown`,P),window.removeEventListener(`resize`,g),window.removeEventListener(`scroll`,g,!0),document.removeEventListener(`pointerdown`,v)}),(t,n)=>(u(),k(L,{to:`body`},[U(ge,{name:`model-dialog-fade`},{default:S(()=>[e.open?(u(),F(`div`,{key:0,class:y([`model-dialog-layer`,{"model-dialog-layer--anchored":e.anchor}]),role:`presentation`,onMousedown:n[2]||=X(e=>M(),[`self`])},[D(`section`,{ref_key:`dialog`,ref:c,class:y([`model-dialog`,{"model-dialog--tuning":e.tuning,"model-dialog--editing":e.editing}]),style:l(h.value),role:`dialog`,"aria-modal":`true`,"aria-label":e.editing?`模型参数`:void 0,"aria-labelledby":e.editing?void 0:`model-dialog-title`,"aria-busy":e.busy},[D(`header`,$W,[n[3]||=D(`h2`,{id:`model-dialog-title`},`选择模型`,-1),D(`button`,{class:`icon-button`,type:`button`,"aria-label":`关闭模型选择`,disabled:e.busy,onClick:n[0]||=e=>M()},[U(Z,{name:`close`,size:15})],8,eG)]),D(`label`,tG,[U(Z,{name:`search`,size:14}),d(D(`input`,{ref_key:`searchInput`,ref:b,"onUpdate:modelValue":n[1]||=e=>a.value=e,type:`search`,placeholder:e.tuning?`搜索模型`:`搜索模型名称或 ID`,"aria-label":`搜索模型`,disabled:e.busy,autocomplete:`off`},null,8,nG),[[Y,a.value]])]),D(`div`,rG,[D(`div`,iG,[D(`div`,aG,[e.tuning?(u(!0),F(T,{key:0},p(A.value,t=>(u(),F(`div`,{key:w(t),class:y([`model-dialog__row`,{"model-dialog__row--active":w(t)===e.selectedId}])},[D(`button`,{class:y([`model-dialog__item`,{"model-dialog__item--active":w(t)===e.selectedId}]),type:`button`,disabled:e.busy||t.disabled,"aria-label":[t.name,t.providerName||E(t.provider),t.isDefault?`默认`:``,w(t)===e.selectedId?`当前`:``,t.hint].filter(Boolean).join(`,`),"aria-pressed":w(t)===e.selectedId,onClick:e=>r(`select`,w(t))},[D(`span`,sG,[D(`span`,cG,s(t.name),1),D(`small`,lG,s(t.providerName||E(t.provider)),1)]),D(`span`,uG,[t.isDefault?(u(),F(`span`,dG,`默认`)):z(``,!0),w(t)===e.selectedId?(u(),F(`span`,fG,`当前`)):z(``,!0),w(t)===e.selectedId?(u(),k(Z,{key:2,name:`check`,size:16})):z(``,!0)])],10,oG),D(`button`,{class:`model-dialog__edit`,type:`button`,disabled:e.busy||t.disabled,"aria-label":`编辑 ${t.name} · ${t.providerName||E(t.provider)} 参数`,onClick:e=>R(w(t),e)},[U(Z,{name:`dots`,size:18})],8,pG)],2))),128)):z(``,!0),(u(!0),F(T,null,p(e.tuning?[]:j.value,t=>(u(),F(`section`,{key:t.provider,class:`model-dialog__group`},[D(`button`,{class:`model-dialog__group-header`,type:`button`,"aria-expanded":!x.value[t.provider],disabled:e.busy,onClick:e=>N(t.provider)},[U(Z,{class:y([`model-dialog__chevron`,{collapsed:x.value[t.provider]}]),name:`chevron-down`,size:13},null,8,[`class`]),D(`strong`,null,s(t.label),1),D(`span`,null,s(t.models.length),1)],8,mG),d(D(`div`,hG,[(u(!0),F(T,null,p(t.models,t=>(u(),F(`button`,{key:w(t),class:y([`model-dialog__item`,{"model-dialog__item--active":w(t)===e.selectedId}]),type:`button`,disabled:e.busy||t.disabled,onClick:e=>r(`select`,w(t))},[D(`span`,_G,[D(`strong`,null,s(t.name||t.id),1),t.hint||t.name&&t.name!==t.id?(u(),F(`small`,{key:0,title:t.hint},s(t.hint||t.id),9,vG)):z(``,!0)]),t.isDefault?(u(),F(`span`,yG,`默认`)):z(``,!0),t.supportsReasoning?(u(),F(`span`,bG,`推理`)):z(``,!0),w(t)===e.selectedId?(u(),k(Z,{key:2,class:`model-dialog__check`,name:`check`,size:15})):z(``,!0)],10,gG))),128))],512),[[Se,!x.value[t.provider]]])]))),128)),e.tuning?_(t.$slots,`footer`,{},void 0,!0,1):z(``,!0),(e.tuning?!A.value.length:!j.value.length)?(u(),F(`p`,xG,`没有匹配的模型`)):z(``,!0)])]),e.tuning&&e.editing?(u(),F(`aside`,SG,[_(t.$slots,`tuning`,{},void 0,!0)])):z(``,!0)]),e.busy?(u(),F(`p`,CG,`正在保存…`)):z(``,!0)],14,QW)],34)):z(``,!0)]),_:3})]))}}),[[`__scopeId`,`data-v-654f5e6c`]]);function TG(e,t,n){let r=t===`auto`,i=e.models.find(e=>e.provider===t&&e.model===n),a=e.settings??ae(),o=!r&&!(!a.provider&&e.auto?.enabled)&&(a.provider??e.defaults.provider)===t&&(a.model??e.defaults.model)===n,s=a.modelPresets?.find(e=>e.provider===t&&e.model===n),c=o?a:s;return{provider:t,model:n,revision:e.revision,reasoningEffort:c?.reasoningEffort&&i?.reasoningKnown&&i.reasoningEfforts.includes(c.reasoningEffort)?c.reasoningEffort:null,fastMode:c?.fastMode&&i?.fastModes.includes(c.fastMode)?c.fastMode:null}}function EG(e,t){if(t.revision!==e.revision)throw Error(`Bot 设置已更新,请重新打开模型参数后保存。`);let n=e.models.find(e=>e.provider===t.provider&&e.model===t.model);if(!n)throw Error(`模型已不可用,请重新读取。`);if(t.reasoningEffort&&(!n.reasoningKnown||!n.reasoningEfforts.includes(t.reasoningEffort)))throw Error(`此模型不支持所选推理强度。`);if(t.fastMode&&!n.fastModes.includes(t.fastMode))throw Error(`当前连接不支持所选速度。`);let r=e.settings??ae(),i=!(!r.provider&&e.auto?.enabled)&&(r.provider??e.defaults.provider)===t.provider&&(r.model??e.defaults.model)===t.model,{revision:a,...o}=t;return{...r,modelPresets:[...(r.modelPresets??[]).filter(e=>e.provider!==t.provider||e.model!==t.model),o],...i?{reasoningEffort:t.reasoningEffort,fastMode:t.fastMode}:{}}}function DG(e,t,n){let r=e.settings??ae();if(t===`auto`&&n===`auto`){if(!e.auto?.available)throw Error(e.auto?.unavailableReason??`Jev Auto 尚未配置。`);return{...r,provider:`auto`,model:`auto`,autoPool:null,reasoningEffort:null,fastMode:null}}let i=e.models.find(r=>r.provider===(t??e.defaults.provider)&&r.model===(n??e.defaults.model));if(t&&!i)throw Error(`模型已不可用,请重新读取。`);let a=r.modelPresets?.find(e=>e.provider===i?.provider&&e.model===i.model)??r;return{...r,provider:t??null,model:n??null,reasoningEffort:a.reasoningEffort&&i?.reasoningKnown&&i.reasoningEfforts.includes(a.reasoningEffort)?a.reasoningEffort:null,fastMode:a.fastMode&&i?.fastModes.includes(a.fastMode)?a.fastMode:null}}var OG=[`aria-busy`,`title`],kG=[`role`],AG=[`disabled`],jG=[`disabled`],MG={key:0,class:`bot-model-tuning`,"aria-label":`模型参数`},NG=[`disabled`],PG=[`disabled`],FG={class:`bot-model-tuning__row`},IG=[`aria-checked`,`disabled`],LG={key:0},RG={class:`bot-model-tuning__row`},zG=[`aria-expanded`,`disabled`],BG={key:1,class:`bot-model-tuning__efforts`,role:`group`,"aria-label":`推理强度选项`},VG=[`aria-pressed`,`onClick`],HG={class:`bot-model-tuning__check`},UG={key:2},WG={class:`bot-model-tuning__scope`},GG={key:3,role:`alert`,class:`error`},KG={class:`sr-only`},qG=V(E({__name:`BotChatControls`,props:{agent:{},running:{type:Boolean},disabled:{type:Boolean},context:{},contextTarget:{},compact:{type:Boolean},optionsTarget:{}},emits:[`saved`],setup(e,{emit:t}){let n=e,r=t,a=O(),c=O(ae()),l=O(!1),d=O(!1),h=O(``),g=O(``),_=0,v;function b(e=``){v!==void 0&&clearTimeout(v),g.value=e,v=e?setTimeout(()=>{g.value=``,v=void 0},3e3):void 0}let x=O(!1),C=O(null),E=(e,t)=>JSON.stringify([e,t]);H(()=>c.value.provider&&c.value.model?E(c.value.provider,c.value.model):``);let A=H(()=>q(c.value)),j=H(()=>A.value||!c.value.provider&&!!a.value?.auto?.enabled),M=H(()=>re(a.value?.auto?.backend)),N=H(()=>A.value?void 0:a.value?.models.find(e=>e.provider===(c.value.provider??a.value?.defaults.provider)&&e.model===(c.value.model??a.value?.defaults.model))),P=H(()=>{if(j.value)return`Auto · ${M.value}`;let e=(N.value?.name??(A.value||!c.value.model?l.value?`正在读取…`:a.value?.defaults.model:c.value.model))?.trim()||`选择模型`;return n.compact?e.split(` · `).at(-1)?.trim()||`选择模型`:e}),I=H(()=>N.value?.defaultReasoningEffort??a.value?.defaults.reasoningEffort??`default`),B=e=>e==="default"?`提供方默认(未声明实际强度)`:se[e]??e,V=H(()=>!j.value&&!!N.value?.reasoningKnown&&!!N.value.reasoningEfforts.length),W=H(()=>l.value||d.value||n.disabled||!a.value);async function ee(){let e=++_,t=n.agent.id;l.value=!0,d.value=!1,h.value=``,b(),a.value=void 0;try{let n=await Q(`/api/app/agents/${t}/model-options`);if(e!==_)return;if(n.version!==1)throw Error(`模型目录版本不兼容。`);a.value=n,c.value={...ae(),...n.settings}}catch(t){e===_&&(h.value=t instanceof Error?t.message:`模型配置读取失败`)}finally{e===_&&(l.value=!1)}}async function te(e){if(W.value||!a.value)return;let t=_,i=n.agent.id,o={...c.value},s=JSON.parse(JSON.stringify({modelSettings:{...e},expectedRevision:a.value.revision}));d.value=!0,h.value=``,b();try{let e=await Q(`/api/app/agents/${i}`,{method:`PATCH`,body:s});if(t!==_)return;if(e.confirmationRequired){if(!window.confirm(e.confirmationMessage||`确认切换模型?`)){b(`已取消,保留原设置。`);return}if(!e.confirmationTarget)throw Error(`模型确认无效,请重新读取。`);if(e=await Q(`/api/app/agents/${i}`,{method:`PATCH`,body:{...s,confirmedModel:e.confirmationTarget}}),t!==_)return}if(!e.agent)throw Error(`设置尚未保存,请重新读取。`);if(n.agent.revision>e.agent.revision){b(`其他端已更新,正在重新读取。`);return}return c.value={...ae(),...e.agent.modelSettings},a.value={...a.value,revision:e.agent.revision,settings:e.agent.modelSettings??null},b(`已保存,下一轮生效。`),r(`saved`,e.agent),!0}catch(e){t===_&&(c.value=o,h.value=e instanceof Error?e.message:`保存失败,保留原设置。`)}finally{t===_&&(d.value=!1)}}let G=H(()=>`下一轮生效;仅此 Bot,适用于它的所有会话。${n.running?`当前运行保持原设置。`:``}`),K=H(()=>ue(a.value)),ne=H(()=>{let e=K.value.find(e=>e.isCurrent);return e?`${e.provider}:${e.id}`:``}),J=O(!1),oe=O(null);f(J,async e=>{!e&&pe.value&&(await o(),oe.value?.focus())});let ce=H(()=>j.value?[]:[{id:``,label:`继承 · ${B(I.value)}`},...(N.value?.reasoningEfforts??[]).map(e=>({id:e,label:B(e)}))]),le=H(()=>j.value?`normal`:c.value.fastMode??a.value?.defaults.fastMode??`normal`),de=H(()=>!j.value&&!!N.value?.fastModes.includes(`fast`)&&!!N.value?.fastModes.includes(`normal`));async function fe(e){if(!a.value)return;let t=e===`inherit:default`?{provider:`inherit`,id:`default`}:K.value.find(t=>`${t.provider}:${t.id}`===e);if(t)try{await te(DG(a.value,t.provider===`inherit`?void 0:t.provider,t.provider===`inherit`?void 0:t.id))&&(x.value=!1,pe.value=void 0)}catch(e){h.value=e instanceof Error?e.message:String(e)}}let pe=O(),me=H(()=>K.value.find(e=>e.provider===pe.value?.provider&&e.id===pe.value?.model)),he=H(()=>a.value?.models.find(e=>e.provider===pe.value?.provider&&e.model===pe.value?.model)),ge=H(()=>!!he.value?.fastModes.includes(`normal`)&&!!he.value?.fastModes.includes(`fast`)),_e=H(()=>pe.value?.fastMode??a.value?.defaults.fastMode??`normal`),ve=H(()=>!!he.value?.reasoningKnown&&!!he.value.reasoningEfforts.length),ye=H(()=>[{id:``,label:`跟随默认`},...(he.value?.reasoningEfforts??[]).map(e=>({id:e,label:B(e)}))]);function Y(e){let t=K.value.find(t=>`${t.provider}:${t.id}`===e);!t||!a.value||W.value||(J.value=!1,pe.value=TG(a.value,t.provider===`inherit`?a.value.defaults.provider:t.provider,t.provider===`inherit`?a.value.defaults.model:t.id))}function be(){pe.value=void 0,J.value=!1}async function xe(){if(!(!pe.value||!a.value)){if(pe.value.provider===`auto`){be();return}try{await te(EG(a.value,pe.value))&&be()}catch(e){h.value=e instanceof Error?e.message:String(e)}}}function X(e){if(e!==`escape`){be(),x.value=!1;return}if(J.value){J.value=!1;return}if(pe.value){be();return}x.value=!1}function Se(e){te({...c.value,reasoningEffort:e||null})}function Ce(e){de.value&&te({...c.value,fastMode:e?`fast`:`normal`})}function we(e){C.value=e,be(),x.value=!0,ee()}return f(()=>[n.agent.revision,d.value],([e])=>{!d.value&&a.value&&e>a.value.revision&&ee()}),f(()=>n.agent.id,()=>{x.value=!1,be(),ee()}),m(ee),i(()=>{_++,b()}),(t,n)=>(u(),F(`section`,{class:`bot-chat-controls`,"aria-label":`Bot 聊天模型快捷设置`,"aria-busy":l.value||d.value,title:G.value},[U(ZW,{"model-label":P.value,combined:e.compact,compact:e.compact,"fast-target":e.optionsTarget,"reasoning-value":c.value.reasoningEffort??``,"reasoning-label":j.value?`自动 · ${M.value}`:B(c.value.reasoningEffort??I.value),"reasoning-options":ce.value,"reasoning-disabled":!V.value,disabled:W.value,"fast-mode":le.value!==`normal`,"fast-disabled":!de.value,"fast-label":le.value===`normal`||le.value===`fast`?`快速`:R(ie)[le.value],scope:G.value,onModelClick:we,onReasoningChange:Se,onFastModeToggle:Ce},null,8,[`model-label`,`combined`,`compact`,`fast-target`,`reasoning-value`,`reasoning-label`,`reasoning-options`,`reasoning-disabled`,`disabled`,`fast-mode`,`fast-disabled`,`fast-label`,`scope`]),(u(),k(L,{to:e.contextTarget??`body`,disabled:!e.contextTarget},[U(VW,{compact:e.compact,snapshot:e.context,"agent-id":e.agent.id,"next-budget":N.value?.contextBudget,"next-window":N.value?.contextWindow},null,8,[`compact`,`snapshot`,`agent-id`,`next-budget`,`next-window`])],8,[`to`,`disabled`])),d.value||g.value||h.value?(u(),F(`div`,{key:0,class:y([`bot-control-status`,{error:h.value}]),role:h.value?`alert`:`status`},[D(`span`,null,s(h.value||(d.value?`正在保存…`:g.value)),1),h.value?(u(),F(`button`,{key:0,type:`button`,disabled:l.value||d.value,onClick:ee},`重新读取`,8,AG)):z(``,!0)],10,kG)):z(``,!0),U(wG,{open:x.value,anchor:C.value,options:K.value,"selected-id":ne.value,busy:d.value,tuning:!0,editing:!!pe.value,onClose:X,onSelect:fe,onEdit:Y},{footer:S(()=>[c.value.provider||c.value.model?(u(),F(`button`,{key:0,class:`bot-model-inherit`,type:`button`,disabled:W.value,onClick:n[0]||=e=>fe(`inherit:default`)},`跟随系统默认`,8,jG)):z(``,!0)]),tuning:S(()=>[pe.value?(u(),F(`section`,MG,[D(`header`,null,[D(`button`,{type:`button`,"aria-label":`取消模型参数修改`,disabled:d.value,onClick:be},[U(Z,{name:`close`,size:15})],8,NG),D(`div`,null,[D(`strong`,null,s(pe.value.model===`auto`?`Auto`:pe.value.model),1),D(`small`,null,s(me.value?.providerName||he.value?.providerName||pe.value.provider),1)]),D(`button`,{class:`bot-model-tuning__done`,disabled:W.value,type:`button`,onClick:xe},`完成`,8,PG)]),D(`div`,FG,[n[4]||=D(`span`,null,`快速`,-1),D(`button`,{type:`button`,role:`switch`,"aria-label":`快速`,"aria-checked":_e.value===`fast`,disabled:W.value||!ge.value,onClick:n[1]||=e=>pe.value.fastMode=_e.value===`fast`?`normal`:`fast`},[D(`span`,{class:y([`bot-model-switch`,{on:_e.value===`fast`}])},[...n[3]||=[D(`i`,null,null,-1)]],2)],8,IG)]),ge.value?z(``,!0):(u(),F(`p`,LG,s(pe.value.provider===`auto`?`由实际模型决定`:`当前连接暂未开放`),1)),D(`div`,RG,[n[5]||=D(`span`,null,`推理强度`,-1),D(`button`,{ref_key:`effortTrigger`,ref:oe,type:`button`,"aria-label":`选择推理强度`,"aria-expanded":J.value,disabled:W.value||!ve.value,onClick:n[2]||=e=>J.value=!J.value},[w(s(pe.value.provider===`auto`?`自动`:pe.value.reasoningEffort?B(pe.value.reasoningEffort):`跟随默认`),1),U(Z,{name:`chevron-down`,size:12})],8,zG)]),J.value?(u(),F(`div`,BG,[(u(!0),F(T,null,p(ye.value,e=>(u(),F(`button`,{key:e.id,type:`button`,"aria-pressed":e.id===(pe.value.reasoningEffort??``),onClick:t=>{pe.value.reasoningEffort=e.id||null,J.value=!1}},[D(`span`,HG,[e.id===(pe.value.reasoningEffort??``)?(u(),k(Z,{key:0,name:`check`,size:14})):z(``,!0)]),w(s(e.label),1)],8,VG))),128))])):z(``,!0),ve.value?z(``,!0):(u(),F(`p`,UG,s(pe.value.provider===`auto`?`${M.value} 自动选择模型和推理强度。`:he.value?.reasoningKnown?`此模型不提供推理强度选择。`:`模型目录未声明推理能力,采用提供方默认。`),1)),D(`p`,WG,s(G.value)+s(ne.value===`${pe.value.provider}:${pe.value.model}`?``:`选择此模型后使用这些参数。`),1),h.value?(u(),F(`p`,GG,s(h.value),1)):z(``,!0)])):z(``,!0)]),_:1},8,[`open`,`anchor`,`options`,`selected-id`,`busy`,`editing`]),D(`span`,KG,s(G.value)+` `+s(N.value&&!V.value?N.value.reasoningKnown?`此模型不提供推理强度选择。`:`模型目录未声明推理能力,将采用提供方默认。`:``),1)],8,OG))}}),[[`__scopeId`,`data-v-4e1a0ae6`]]),JG={class:`inspector`,"aria-label":`Inspector 请求查看器`},YG={class:`inspector-toolbar`},XG={class:`lenses`,role:`group`,"aria-label":`Inspector 视图`},ZG=[`aria-pressed`],QG=[`aria-pressed`],$G=[`disabled`],eK={key:0,role:`alert`,class:`error`},tK={key:1,class:`empty`},nK={class:`summary`},rK={key:0},iK=V(E({__name:`WorkspaceInspectorPanel`,props:{conversationId:{},taskId:{},showClose:{type:Boolean}},emits:[`close`],setup(e,{emit:t}){let n=e,r=t,a=O([]),c=O(``),l=O(!1),d=O(`events`),m=O(),h,g=!1,_=0,v=O(!0),b=H(()=>a.value.filter(e=>d.value===`events`?e.direction===`event`:e.direction!==`event`)),x=H(()=>{let e=[];for(let t of[...b.value].sort((e,t)=>e.at-t.at)){let n=t.data,r=String(n?.text??n?.delta??n?.content??n?.error??n?.message??``).replace(/\s+/g,` `).slice(0,120),i=d.value===`raw`?t.direction===`request`?`→ out`:t.direction===`error`?`! error`:`← in`:t.method,a=t.direction===`error`||/error|failed/.test(t.method)?`error`:/start|complete|finish/.test(t.method)?`boundary`:`plain`,o=e.at(-1);if(d.value===`events`&&/delta$/.test(t.method)&&o?.tag===i&&o.data[0]?.runId===t.runId&&o.data[0]?.agentId===t.agentId){o.count++,o.at=t.at,o.data.push(t),o.summary=(o.summary+r).slice(0,120);continue}e.push({id:t.id,at:t.at,tag:i,summary:d.value===`raw`?t.method+(t.requestId?` #`+t.requestId.slice(0,8):``):r||t.method,tone:a,count:1,data:[t],duration:t.durationMs})}return e.reverse()}),S=e=>new Date(e).toLocaleTimeString(`zh-CN`,{hour12:!1})+`.`+String(e%1e3).padStart(3,`0`);async function C(){let e=_;l.value=!0;try{let t=await Q(`/api/app/conversations/${n.conversationId}/inspector${n.taskId?`?taskId=`+encodeURIComponent(n.taskId):``}`);e===_&&!g&&(a.value=t.entries,c.value=``)}catch(t){e===_&&!g&&(c.value=t instanceof Error?t.message:`无法读取请求记录`)}finally{e===_&&(l.value=!1)}}async function E(){let e=_;document.hidden||await C(),!g&&e===_&&(h=setTimeout(E,3e3))}return f(()=>[n.conversationId,n.taskId],()=>{_++,a.value=[],v.value=!0,clearTimeout(h),E()},{immediate:!0}),f(d,async()=>{v.value=!0,await o(),m.value&&(m.value.scrollTop=0)}),f(x,async()=>{let e=v.value;await o(),e&&m.value&&(m.value.scrollTop=0)}),i(()=>{g=!0,_++,clearTimeout(h)}),(t,n)=>(u(),F(`section`,JG,[D(`header`,null,[U(Z,{name:`bug`,size:16}),n[4]||=D(`strong`,null,`Inspector`,-1),e.showClose?(u(),F(`button`,{key:0,class:`close`,"aria-label":`关闭 Inspector`,title:`关闭 Inspector`,onClick:n[0]||=e=>r(`close`)},[U(Z,{name:`close`,size:16})])):z(``,!0)]),D(`div`,YG,[D(`div`,XG,[D(`button`,{"aria-pressed":d.value===`events`,onClick:n[1]||=e=>d.value=`events`},`Events`,8,ZG),D(`button`,{"aria-pressed":d.value===`raw`,onClick:n[2]||=e=>d.value=`raw`},`Raw`,8,QG)]),D(`span`,null,s(l.value&&!a.value.length?`读取中…`:b.value.length+` 条记录`),1),D(`button`,{class:`reload`,"aria-label":`刷新请求记录`,title:`重新读取记录`,disabled:l.value,onClick:C},[U(Z,{name:`refresh`,size:14})],8,$G)]),D(`div`,{ref_key:`list`,ref:m,class:`inspector-list`,onScroll:n[3]||=e=>v.value=!!m.value&&m.value.scrollTop<40},[c.value?(u(),F(`p`,eK,s(c.value),1)):!x.value.length&&!l.value?(u(),F(`p`,tK,s(d.value===`raw`?`此聊天尚未记录网关请求与响应。`:`此聊天尚未产生运行事件。`),1)):z(``,!0),(u(!0),F(T,null,p(x.value,e=>(u(),F(`details`,{key:e.id,class:y([`inspector-row`,e.tone])},[D(`summary`,null,[U(Z,{class:`chevron`,name:`chevron-left`,size:12}),D(`time`,null,s(S(e.at)),1),D(`span`,{class:y([`tag`,{native:d.value===`raw`}])},[w(s(e.tag),1),e.count>1?(u(),F(T,{key:0},[w(` ×`+s(e.count),1)],64)):z(``,!0)],2),D(`span`,nK,s(e.summary),1),e.duration===void 0?z(``,!0):(u(),F(`small`,rK,s(e.duration)+`ms`,1))]),D(`pre`,null,s(JSON.stringify(e.count===1?e.data[0]:e.data,null,2)),1)],2))),128))],544)]))}}),[[`__scopeId`,`data-v-8c8ae801`]]),aK={class:`bot-panel`,"aria-label":`Inspector 侧栏`},oK=V(E({__name:`WorkspaceBotPanel`,props:{conversationId:{},taskId:{}},emits:[`close`],setup(e,{emit:t}){let n=t;return(t,r)=>(u(),F(`aside`,aK,[U(iK,{"show-close":``,"conversation-id":e.conversationId,"task-id":e.taskId,onClose:r[0]||=e=>n(`close`)},null,8,[`conversation-id`,`task-id`])]))}}),[[`__scopeId`,`data-v-71f7f023`]]),sK={class:`local-vm-workspace`,"aria-label":`双桌面工作区`},cK=[`disabled`],lK={key:0,role:`alert`},uK={class:`panes`},dK=[`value`,`disabled`,`aria-label`,`onChange`],fK=[`value`,`disabled`],pK={key:1,class:`empty`},mK=V(E({__name:`LocalVmWorkspace`,props:{agents:{},primary:{}},emits:[`close`],setup(e,{expose:t,emit:n}){let r=e,i=n,a=O([r.primary,r.agents.find(e=>e.id!==r.primary)?.id??``]),o=[],c=O(!1),l=O(``),d=O(),f=H(()=>r.agents.filter(e=>!e.computerEnvironmentId));async function m(){for(let e of o)e?.hasControl()&&await e.releaseControl();d.value=void 0}async function h(e){if(!c.value){c.value=!0,l.value=``;try{await m(),await o[e]?.take(),o[e]?.hasControl()&&(d.value=e)}catch(e){l.value=e instanceof Error?e.message:`切换控制失败`}finally{c.value=!1}}}async function g(e,t){if(!c.value){c.value=!0,l.value=``;try{await m(),a.value[e]=t}catch(e){l.value=String(e)}finally{c.value=!1}}}async function _(){if(c.value)return!1;c.value=!0;try{return await m(),i(`close`),!0}catch(e){return l.value=String(e),!1}finally{c.value=!1}}return t({close:_}),(e,t)=>(u(),F(`main`,sK,[D(`header`,null,[t[0]||=D(`div`,null,[D(`strong`,null,`本地虚拟机 · 双桌面`),D(`p`,null,`同时查看两个机器人的桌面,每次只控制其中一台。`)],-1),D(`button`,{disabled:c.value,onClick:_},`交还并关闭`,8,cK)]),l.value?(u(),F(`p`,lK,s(l.value),1)):z(``,!0),D(`div`,uK,[(u(!0),F(T,null,p(a.value,(e,n)=>(u(),F(`section`,{key:n,class:y([`pane`,{controlled:d.value===n}])},[D(`label`,null,[w(`桌面 `+s(n+1),1),D(`select`,{value:a.value[n],disabled:c.value,"aria-label":`选择桌面 ${n+1}`,onChange:e=>g(n,e.target.value)},[t[1]||=D(`option`,{value:``},`选择机器人`,-1),(u(!0),F(T,null,p(f.value,e=>(u(),F(`option`,{key:e.id,value:e.id,disabled:a.value[1-n]===e.id},s(e.name),9,fK))),128))],40,dK)]),a.value[n]&&f.value.some(e=>e.id===a.value[n])?(u(),k(_t,{key:a.value[n],ref_for:!0,ref:e=>o[n]=e,embedded:``,agents:f.value.filter(e=>e.id===a.value[n]),onControlRequest:e=>h(n)},null,8,[`agents`,`onControlRequest`])):(u(),F(`p`,pK,`选择另一位机器人。打开工作区不会创建或启动虚拟机。`))],2))),128))])]))}}),[[`__scopeId`,`data-v-3c7b5891`]]),hK={class:`task-plan__header`},gK=[`aria-expanded`,`aria-controls`],_K={class:`task-plan__icon`},vK={class:`task-plan__heading`},yK={key:0,class:`task-plan__count`},bK={class:`task-plan__actions`},xK=[`id`,`onKeydown`],SK=[`aria-valuenow`],CK={key:1,class:`task-plan__steps`,"aria-label":`任务步骤`},wK={key:2,class:`task-plan__result`},TK={class:`result result--summary`},EK=[`open`],DK={class:`plan-details`},OK={key:0,class:`objective`},kK={key:1,class:`result`},AK={key:2},jK={key:0,class:`result`},MK={key:1},NK=[`disabled`],PK={key:0,class:`criteria-error`,role:`alert`},FK={class:`criteria-actions`},IK=[`disabled`],LK=[`disabled`],RK={key:0,class:`criteria`},zK={key:0},BK=V(E({__name:`TaskPlan`,props:{embedded:{type:Boolean},goal:{},assignments:{},agents:{},saveCriteria:{type:Function}},emits:[`stop`,`resume`],setup(e,{expose:t}){let n=e,r={queued:`排队中`,interrupted:`已中断`,pending:`待执行`,running:`进行中`,review:`待复核`,complete:`已完成`,failed:`执行失败`,blocked:`遇到阻碍`,cancelling:`正在停止`,cancelled:`已停止`,waiting:`需要补充信息`},i=H(()=>n.assignments.filter(e=>e.status===`complete`).length),a=H(()=>n.assignments.length?Math.round(i.value/n.assignments.length*100):n.goal?.status===`complete`?100:0),c=H(()=>!!n.saveCriteria&&!!n.goal&&[`running`,`review`,`waiting`].includes(n.goal.status)),l=O(!!n.embedded),m=x(),h=O(!1),g=O(!1),_=O(``),v=O(``),b=O(),S=O(),C=O();async function E(){l.value=!0,await o(),C.value?.scrollIntoView?.({block:`nearest`})}async function A(){g.value||(l.value=!1,await o(),C.value?.focus())}t({open:E});let j=1;f(()=>n.goal?.id??n.assignments[0]?.goalId??``,()=>{l.value=!!n.embedded,h.value=!1,v.value=``});async function M(){n.goal&&(_.value=n.goal.acceptanceCriteria.join(`
|
|
246
246
|
`),j=n.goal.acceptanceRevision??1,v.value=``,h.value=!0,await o(),b.value?.focus())}async function N(){h.value=!1,await o(),S.value?.focus()}async function P(){if(!n.goal||!n.saveCriteria||g.value)return;let e=_.value.split(`
|
|
247
247
|
`).map(e=>e.trim()).filter(Boolean);if(!e.length||e.length>12||e.some(e=>e.length>1e3)){v.value=`请填写 1 至 12 条验收要求,每条不超过 1000 字。`;return}g.value=!0,v.value=``;try{await n.saveCriteria(n.goal.id,j,e),await N()}catch(e){v.value=e instanceof Error?e.message:`保存失败,请重试`}finally{g.value=!1}}return(t,n)=>e.goal||e.assignments.length?(u(),F(`section`,{key:0,class:y([`task-plan`,{"task-plan--expanded":l.value,"task-plan--embedded":e.embedded}]),"aria-label":`目标进度`},[D(`header`,hK,[e.embedded&&e.goal?(u(),F(`span`,{key:0,class:y([`task-plan__status`,`task-plan__status--${e.goal.status}`])},[n[4]||=D(`i`,null,null,-1),w(s(r[e.goal.status]),1)],2)):z(``,!0),e.embedded?z(``,!0):(u(),F(`button`,{key:1,ref_key:`disclosure`,ref:C,class:`task-plan__disclosure`,type:`button`,"aria-expanded":l.value,"aria-controls":R(m),onClick:n[0]||=e=>l.value?A():E()},[D(`span`,_K,[U(Z,{name:`files`,size:17})]),D(`span`,vK,[n[6]||=D(`strong`,null,`交付进展`,-1),e.goal?(u(),F(`span`,{key:0,class:y([`task-plan__status`,`task-plan__status--${e.goal.status}`])},[n[5]||=D(`i`,null,null,-1),w(s(r[e.goal.status]),1)],2)):z(``,!0)]),e.assignments.length?(u(),F(`strong`,yK,[w(s(i.value)+`/`+s(e.assignments.length)+` `,1),n[7]||=D(`small`,null,`项完成`,-1)])):z(``,!0),U(Z,{class:`task-plan__header-chevron`,name:`chevron-down`,size:15})],8,gK)),D(`div`,bK,[e.goal&&[`running`,`review`,`waiting`].includes(e.goal.status)?(u(),F(`button`,{key:0,type:`button`,onClick:n[1]||=e=>t.$emit(`stop`)},`停止任务`)):z(``,!0),e.goal&&[`blocked`,`waiting`,`cancelled`].includes(e.goal.status)?(u(),F(`button`,{key:1,type:`button`,onClick:n[2]||=e=>t.$emit(`resume`)},`继续任务`)):z(``,!0)])]),l.value?(u(),F(`div`,{key:0,id:R(m),class:`task-plan__content`,onKeydown:Ye(X(A,[`stop`,`prevent`]),[`esc`])},[e.assignments.length?(u(),F(`div`,{key:0,class:`task-plan__progress`,role:`progressbar`,"aria-label":`交付完成进度`,"aria-valuemin":`0`,"aria-valuemax":`100`,"aria-valuenow":a.value},[(u(!0),F(T,null,p(e.assignments,e=>(u(),F(`span`,{key:e.id,class:y({complete:e.status===`complete`,active:[`running`,`review`].includes(e.status),failed:[`failed`,`blocked`].includes(e.status)})},null,2))),128))],8,SK)):z(``,!0),e.assignments.length?(u(),F(`div`,CK,[(u(!0),F(T,null,p(e.assignments,(e,t)=>(u(),F(`div`,{key:e.id,class:y({complete:e.status===`complete`,active:[`running`,`review`].includes(e.status),failed:[`failed`,`blocked`].includes(e.status)})},[D(`span`,null,[e.status===`complete`?(u(),k(Z,{key:0,name:`check`,size:11})):(u(),F(T,{key:1},[w(s(t+1),1)],64))]),D(`strong`,null,s(e.title),1)],2))),128))])):z(``,!0),e.goal?.result?(u(),F(`div`,wK,[n[8]||=D(`small`,null,`最新结果`,-1),D(`p`,TK,s(e.goal.result),1)])):z(``,!0),D(`details`,{open:e.embedded},[D(`summary`,null,[U(Z,{name:`file`,size:15}),n[9]||=D(`span`,null,`任务与验收详情`,-1),U(Z,{class:`task-plan__chevron`,name:`chevron-down`,size:14})]),D(`div`,DK,[e.goal?(u(),F(`p`,OK,s(e.goal.objective),1)):z(``,!0),e.goal?.result?(u(),F(`p`,kK,s(e.goal.result),1)):z(``,!0),e.assignments.length?(u(),F(`ol`,AK,[(u(!0),F(T,null,p(e.assignments,t=>(u(),F(`li`,{key:t.id},[D(`div`,null,[D(`strong`,null,s(t.title),1),D(`span`,null,s(t.status===`complete`?`已复核`:r[t.status]),1)]),D(`small`,null,[w(s(e.agents.find(e=>e.id===t.agentId)?.name||`成员不可用`),1),e.agents.find(e=>e.id===t.agentId)?.temporaryGoalId?(u(),F(T,{key:0},[w(` · 临时助手`+s(e.agents.find(e=>e.id===t.agentId)?.archived?e.agents.find(e=>e.id===t.agentId)?.cleanupState===`pending`?`(已退役,等待清理)`:`(已退役)`:``),1)],64)):z(``,!0)]),t.result?(u(),F(`p`,jK,s(t.result),1)):z(``,!0),t.review?(u(),F(`p`,MK,s(t.review),1)):z(``,!0)]))),128))])):z(``,!0),h.value?(u(),F(`form`,{key:3,onSubmit:X(P,[`prevent`])},[D(`label`,null,[n[10]||=w(`验收要求`,-1),d(D(`textarea`,{ref_key:`editor`,ref:b,"onUpdate:modelValue":n[3]||=e=>_.value=e,disabled:g.value,rows:`4`,"aria-describedby":`criteria-help`},null,8,NK),[[Y,_.value]])]),n[11]||=D(`small`,{id:`criteria-help`},`每行一条,描述你需要的交付结果。`,-1),v.value?(u(),F(`p`,PK,s(v.value),1)):z(``,!0),D(`div`,FK,[D(`button`,{type:`submit`,disabled:g.value||!c.value},s(g.value?`保存中…`:`保存验收要求`),9,IK),D(`button`,{type:`button`,disabled:g.value,onClick:N},`取消`,8,LK)])],32)):(u(),F(T,{key:4},[e.goal?.acceptanceCriteria.length?(u(),F(`ul`,RK,[(u(!0),F(T,null,p(e.goal.acceptanceCriteria,(t,n)=>(u(),F(`li`,{key:n},[D(`span`,null,s(e.goal.checks?.some(e=>e.criterion===n&&e.passed)?`已验收`:`待验收`),1),w(` `+s(t),1),e.goal.checks?.find(e=>e.criterion===n)?.evidence?(u(),F(`p`,zK,s(e.goal.checks.find(e=>e.criterion===n)?.evidence),1)):z(``,!0)]))),128))])):z(``,!0),c.value?(u(),F(`button`,{key:1,ref_key:`editButton`,ref:S,type:`button`,onClick:M},`调整验收要求`,512)):z(``,!0)],64))])],8,EK)],40,xK)):z(``,!0)],2)):z(``,!0)}}),[[`__scopeId`,`data-v-e5c8af94`]]);function VK(e=[],t=[]){let n=new Map(e.map(e=>[`${e.taskId}:${e.seq}`,e]));for(let e of t)n.set(`${e.taskId}:${e.seq}`,e);return[...n.values()].sort((e,t)=>e.seq-t.seq||e.id.localeCompare(t.id))}function HK(e=[],t=[]){return t.map(t=>{let n=e.find(e=>e.id===t.id);return n?{...n,...t,records:VK(n.records,t.records)}:t})}function UK(e,t){let n=e.status===`running`&&e.startedAt!==void 0?Math.max(0,t-e.startedAt):e.durationMs??(e.startedAt!==void 0&&e.endedAt!==void 0?Math.max(0,e.endedAt-e.startedAt):void 0);if(n===void 0)return e.status===`queued`?`等待执行`:`耗时未记录`;let r=Math.floor(n/1e3),i=Math.floor(r/3600),a=i?`${i} 小时 ${Math.floor(r%3600/60)} 分`:r>=60?`${Math.floor(r/60)} 分 ${r%60} 秒`:`${r} 秒`;return`${e.durationSource===`estimated`?`约 `:``}${a}`}function WK(e){let t=new Map(e.map(e=>[e.id,e])),n=new Set,r=[],i=(t,a)=>{if(!n.has(t.id)){n.add(t.id),r.push({task:t,depth:a});for(let n of e)n.parentTaskId===t.id&&i(n,a+1)}};for(let n of e)t.has(n.parentTaskId)||i(n,0);for(let t of e)i(t,0);return r}var GK=e=>({start:`开始`,text:`输出`,thinking:`思考`,"tool-start":`调用工具`,"tool-result":`工具结果`,progress:`进展`,complete:`完成`,error:`失败`,interrupted:`已中断`})[e.kind]??e.kind;async function KK(e,t){let n=VK([],e);for(;;){let e=n.findIndex((e,t)=>t>0&&e.taskId===n[t-1].taskId&&e.seq>n[t-1].seq+1);if(e<0)return n;let r=n[e-1].seq,i=await t(r),a=VK(n,i.records);if(!i.records.some(t=>t.seq>r&&t.seq<n[e].seq))return a;n=a}}var qK={key:0,role:`status`},JK={class:`record-toolbar`},YK=[`disabled`],XK={key:0,role:`alert`},ZK=[`disabled`],QK={key:1},$K=[`data-record-kind`],eq={key:0},tq=[`disabled`,`onClick`],nq={key:2},rq=V(E({__name:`KernelTaskRecords`,props:{task:{}},setup(e){let t=e,n=O(!1),r=O(!1),a=O(0),c=O(!1),l=O(``),d=O([]),m=O(),h=O(),g=O({}),_=O(``),v=H(()=>VK(d.value,t.task.records)),y=H(()=>m.value??t.task.hasOlderRecords??!t.task.records?.length),b=H(()=>`/api/app/runtime-tasks/${encodeURIComponent(t.task.id)}`),x=!1,S=!1,C=!1,E=!1;i(()=>{x=!0});async function k(){await o(),h.value&&(h.value.scrollTop=h.value.scrollHeight)}function A(){r.value=!1,a.value=0,k()}function j(){let e=h.value;e&&e.scrollHeight-e.scrollTop-e.clientHeight>36&&(r.value=!0)}f(()=>t.task.records?.at(-1)?.seq,(e,i)=>{e!==void 0&&e!==i&&(r.value||!n.value?a.value+=t.task.records?.filter(e=>e.seq>(i??0)).length??1:k())});async function M(){if(!(!n.value||x)){if(S){C=!0;return}S=!0;try{do{C=!1;let e=await KK(v.value,e=>Q(`${b.value}/records?after=${e}&limit=50`));x||(d.value=VK(d.value,e))}while(C&&!x&&n.value)}catch(e){x||(l.value=e instanceof Error?e.message:`断线期间的记录未补齐,请重试`)}finally{S=!1}}}f([n,()=>t.task.records],()=>{M()});async function N(){if(c.value)return;c.value=!0,l.value=``,r.value=!0;let e=v.value[0]?.seq,t=h.value,n=t?.scrollHeight??0,i=t?.scrollTop??0;try{let r=await Q(`${b.value}/records?limit=50${e===void 0?``:`&before=${e}`}`);if(x)return;d.value=VK(d.value,r.records),m.value=r.hasMore,await o(),t&&(t.scrollTop=i+t.scrollHeight-n)}catch(e){x||(l.value=e instanceof Error?e.message:`记录读取失败,请重试`)}finally{c.value=!1}}async function P(e){if(n.value=e.target.open,!n.value)return;let t=!E;E=!0,v.value.length||await N(),!x&&t&&A()}async function I(e){if(!e.resultId||_.value)return;_.value=e.id,l.value=``;let t=g.value[e.id],n=t?.next??0;try{let r=await Q(`${b.value}/results/${encodeURIComponent(e.resultId)}?offset=${n}&length=12000`);x||(g.value[e.id]={text:(t?.text??``)+r.text,next:r.offset+r.text.length,hasMore:r.hasMore})}catch(e){x||(l.value=e instanceof Error?e.message:`工具结果读取失败`)}finally{_.value=``}}return(e,t)=>(u(),F(`details`,{class:`task-records`,onToggle:P},[D(`summary`,null,[t[1]||=w(`执行记录 `,-1),a.value?(u(),F(`span`,qK,`· 有 `+s(a.value)+` 条新记录`,1)):z(``,!0)]),n.value?(u(),F(T,{key:0},[D(`div`,JK,[D(`button`,{type:`button`,disabled:c.value,onClick:t[0]||=e=>r.value?A():r.value=!0},s(r.value?`继续跟随`:`暂停滚动`),9,YK),a.value?(u(),F(`button`,{key:0,type:`button`,onClick:A},`查看 `+s(a.value)+` 条新记录`,1)):z(``,!0)]),l.value?(u(),F(`p`,XK,[w(s(l.value)+` `,1),D(`button`,{type:`button`,onClick:M},`重试补齐`)])):z(``,!0),D(`div`,{ref_key:`list`,ref:h,class:`record-list`,tabindex:`0`,"aria-label":`子任务执行记录`,onScroll:j},[y.value?(u(),F(`button`,{key:0,type:`button`,disabled:c.value,onClick:N},s(c.value?`正在读取…`:`加载更早记录`),9,ZK)):z(``,!0),!v.value.length&&!c.value?(u(),F(`p`,QK,`暂无执行记录。`)):z(``,!0),(u(!0),F(T,null,p(v.value,e=>(u(),F(`article`,{key:e.id,class:`record`,"data-record-kind":e.kind},[D(`header`,null,[D(`strong`,null,[w(s(R(GK)(e)),1),e.toolName?(u(),F(T,{key:0},[w(` · `+s(e.toolName),1)],64)):z(``,!0)]),D(`time`,null,s(new Date(e.at).toLocaleTimeString()),1)]),D(`pre`,null,s(g.value[e.id]?.text??e.text),1),e.status?(u(),F(`small`,eq,s(e.status),1)):z(``,!0),e.resultId&&(!g.value[e.id]||g.value[e.id]?.hasMore)?(u(),F(`button`,{key:1,type:`button`,disabled:!!_.value,onClick:t=>I(e)},s(_.value===e.id?`正在读取…`:g.value[e.id]?`加载更多工具结果`:`查看完整工具结果`),9,tq)):e.truncated&&!e.resultId?(u(),F(`small`,nq,`此记录仅保留摘要。`)):z(``,!0)],8,$K))),128))],544)],64)):z(``,!0)],32))}}),[[`__scopeId`,`data-v-eca920db`]]),iq=[`open`],aq={key:0,class:`execution-content`},oq=[`data-task-id`],sq={key:0},cq={key:1,class:`task-error`},lq={key:2},uq=V(E({__name:`KernelTaskDetails`,props:{tasks:{},embedded:{type:Boolean}},setup(e){let t=e,n=O(!!t.embedded),r=O(Date.now()),a=H(()=>WK(t.tasks)),o=setInterval(()=>{n.value&&t.tasks.some(e=>e.status===`running`)&&(r.value=Date.now())},1e3);return i(()=>clearInterval(o)),(t,i)=>e.tasks.length?(u(),F(`details`,{key:0,class:y([`execution-details`,{embedded:e.embedded}]),open:e.embedded,onToggle:i[0]||=e=>n.value=e.target.open},[D(`summary`,null,`执行详情 · `+s(e.tasks.length)+` 项内部子任务`,1),n.value?(u(),F(`div`,aq,[(u(!0),F(T,null,p(a.value,({task:e,depth:t})=>(u(),F(`article`,{key:e.id,style:l({marginInlineStart:`${Math.min(t,4)*12}px`}),"data-task-id":e.id},[D(`header`,null,[D(`strong`,null,s(e.goal),1),D(`span`,null,s(e.status===`complete`?`执行完成`:R(K)(e.status))+` · `+s(R(UK)(e,r.value)),1)]),t?(u(),F(`small`,sq,`第 `+s(t+1)+` 层子任务`,1)):z(``,!0),e.failureReason?(u(),F(`p`,cq,s(e.failureReason),1)):z(``,!0),e.result?(u(),F(`p`,lq,s(e.result),1)):z(``,!0),U(rq,{task:e},null,8,[`task`])],12,oq))),128))])):z(``,!0)],42,iq)):z(``,!0)}}),[[`__scopeId`,`data-v-b3c13d27`]]),dq={class:`task-details-scroll`},fq={key:1,class:`task-details-artifacts`},pq=[`href`],mq=V(E({__name:`TaskDetailsPanel`,props:{goal:{},assignments:{},agents:{},runtimeTasks:{},artifacts:{},runtimeOnly:{type:Boolean},saveCriteria:{type:Function}},emits:[`close`,`stop`,`resume`],setup(e,{emit:t}){let n=t,r=O(),a=null;return m(()=>{a=document.activeElement,r.value?.focus()}),i(()=>{r.value?.contains(document.activeElement)&&a?.isConnected&&a.focus()}),(t,i)=>(u(),F(`aside`,{ref_key:`panel`,ref:r,tabindex:`-1`,class:`task-details-panel`,"aria-label":`任务详情`,onKeydown:i[3]||=Ye(X(e=>n(`close`),[`stop`]),[`esc`])},[D(`header`,null,[D(`h2`,null,s(e.runtimeOnly?`临时子任务`:`任务详情`),1),D(`button`,{"aria-label":`关闭任务详情`,onClick:i[0]||=e=>n(`close`)},[U(Z,{name:`close`,size:20})])]),D(`div`,dq,[e.runtimeOnly?z(``,!0):(u(),k(BK,{key:0,embedded:``,goal:e.goal,assignments:e.assignments,agents:e.agents,"save-criteria":e.saveCriteria,onStop:i[1]||=e=>n(`stop`),onResume:i[2]||=e=>n(`resume`)},null,8,[`goal`,`assignments`,`agents`,`save-criteria`])),!e.runtimeOnly&&e.artifacts?.length?(u(),F(`div`,fq,[i[4]||=D(`h3`,null,`产物`,-1),(u(!0),F(T,null,p(e.artifacts,e=>(u(),F(`a`,{key:e.id,href:`/api/app/files/${encodeURIComponent(e.id)}/download`,target:`_blank`,rel:`noopener`},[U(Z,{name:`file`,size:16}),w(s(e.name),1)],8,pq))),128))])):z(``,!0),e.runtimeOnly?(u(),k(uq,{key:2,embedded:``,tasks:e.runtimeTasks},null,8,[`tasks`])):z(``,!0)])],544))}}),[[`__scopeId`,`data-v-5b054a06`]]);function hq(e,t,n,r,i=[]){let a=new Map,o=new Map;for(let t of e)if(t.taskOutcome){let e=t.taskOutcome.goalId;a.set(e,t),o.set(e,[...o.get(e)??[],t.id])}let s=new Set,c=[];for(let n of e){let e=n.taskOutcome?.goalId;if(!e){c.push(n);continue}e===t?.id||s.has(e)||(s.add(e),c.push({...a.get(e),id:n.id,createdAt:n.createdAt,sourceMessageIds:o.get(e)}))}let l=e=>{let t=c.findIndex(t=>{let n=Number(new Date(t.createdAt??0)),r=Number(e.createdAt);return n>r||n===r&&t.role===`assistant`});c.splice(t>=0?t:c.length,0,e)};if(t){let r=e.filter(e=>e.taskOutcome?.goalId===t.id).flatMap(e=>e.taskOutcome?.artifacts.filter(e=>t.artifactIds.includes(e.id))??[]),a=[...new Map([...r,...i.filter(e=>t.artifactIds.includes(e.id))].map(e=>[e.id,e])).values()];l({id:`goal:${t.id}`,role:`system`,content:``,createdAt:t.createdAt,sourceMessageIds:o.get(t.id)??[],goalCard:{goal:t,assignments:n.filter(e=>e.goalId===t.id),artifacts:a}})}let u=new Map;for(let e of r){let t=u.get(e.rootRunId)??[];t.push(e),u.set(e.rootRunId,t)}for(let[e,t]of u)l({id:`runtime-tasks:${e}`,role:`system`,content:``,createdAt:Math.min(...t.map(e=>e.createdAt)),runtimeTaskCard:t});return c}function gq(e,t){return e.find(e=>e.id===t||e.sourceMessageIds?.includes(t))?.id??t}function _q(e,t){let n=new Set(t);return[...new Set(e.filter(e=>n.has(e.id)).flatMap(e=>e.sourceMessageIds??(e.goalCard||e.runtimeTaskCard?[]:[e.id])))]}var vq=[`aria-label`,`onKeydown`],yq=[`placeholder`,`aria-label`],bq=[`aria-label`,`aria-selected`,`tabindex`,`aria-controls`,`onClick`],xq={key:0,class:`floating-resource-search__navigation`,"aria-label":`搜索范围`},Sq={key:0,class:`floating-resource-search__navigation-heading`},Cq=[`onClick`],wq=[`id`,`role`,`aria-label`],Tq={key:0,class:`floating-resource-search__context`},Eq=[`role`],Dq={key:0,class:`floating-resource-search__section`},Oq=[`role`],kq=[`role`,`aria-haspopup`,`onClick`],Aq={key:0,class:`floating-resource-search__icon floating-resource-search__icon--avatar`},jq={key:1,class:`floating-resource-search__icon`},Mq={class:`floating-resource-search__copy`},Nq={key:0},Pq={key:2},Fq={key:0},Iq=`yaovi:sidebar-search`,Lq=`yaovi:sidebar-search-close`,Rq=V(E({__name:`FloatingResourceSearch`,props:{section:{},label:{},items:{},split:{type:Boolean,default:!1},tabbed:{type:Boolean,default:!1}},emits:[`open`,`select`],setup(e,{emit:t}){let n=e,r=t,a=O(!1),c=O(``),l=O(null),h=O(null),g=O(null),v=null,b=O(``),x=H(()=>n.items.find(e=>e.id===b.value)),S=H(()=>x.value?.children??n.items),C=H(()=>c.value.trim().toLocaleLowerCase()),E=H(()=>{let e=C.value;return e?S.value.filter(t=>`${t.title} ${t.subtitle||``} ${t.meta||``}`.toLocaleLowerCase().includes(e)).slice(0,50):S.value.slice(0,50)}),A=H(()=>E.value.map((e,t)=>({item:e,hasChildren:e.children!==void 0,showSection:!!(e.section&&e.section!==E.value[t-1]?.section)}))),j=H(()=>n.items.map((e,t)=>({item:e,showSection:!!(e.section&&e.section!==n.items[t-1]?.section)})));async function M(e){e.detail?.section===n.section&&(c.value=``,v=document.activeElement instanceof HTMLElement?document.activeElement:null,b.value=(n.split||n.tabbed)&&n.items[0]?.id||``,a.value=!0,r(`open`),await o(),l.value?.focus())}function N(){a.value&&(a.value=!1,c.value=``,b.value=``,document.dispatchEvent(new CustomEvent(Lq)),o(()=>{v?.isConnected&&v.focus()}))}async function P(e){if(e.children!==void 0){b.value=e.id,n.tabbed||(c.value=``,await o(),l.value?.focus());return}r(`select`,e.id),N()}async function I(){b.value=``,c.value=``,await o(),l.value?.focus()}function R(e){let t=n.items.findIndex(e=>e.id===b.value);b.value=n.items[(t+e+n.items.length)%n.items.length]?.id||``,o(()=>g.value?.querySelector(`[aria-selected="true"]`)?.focus())}function B(e){let t=[...h.value?.querySelectorAll(`button:not(:disabled),input,[tabindex="0"]`)??[]].filter(e=>e.tabIndex>=0&&e.getClientRects().length>0);t.length&&(e.shiftKey&&document.activeElement===t[0]?(e.preventDefault(),t.at(-1)?.focus()):!e.shiftKey&&document.activeElement===t.at(-1)&&(e.preventDefault(),t[0]?.focus()))}return f(E,async()=>{await o(),a.value&&document.activeElement===document.body&&l.value?.focus()}),m(()=>{document.addEventListener(Iq,M),document.addEventListener(Lq,N)}),i(()=>{document.removeEventListener(Iq,M),document.removeEventListener(Lq,N)}),(t,n)=>(u(),k(L,{to:`body`},[a.value?(u(),F(`div`,{key:0,class:`floating-resource-search__backdrop`,onClick:X(N,[`self`])},[D(`section`,{ref_key:`panel`,ref:h,class:y([`floating-resource-search`,{"floating-resource-search--split":e.split}]),role:`dialog`,"aria-modal":`true`,"aria-label":e.label,onKeydown:[Ye(B,[`tab`]),Ye(X(N,[`prevent`]),[`esc`])]},[D(`header`,null,[x.value&&!e.split&&!e.tabbed?(u(),F(`button`,{key:0,class:`floating-resource-search__back`,type:`button`,"aria-label":`返回搜索结果`,onClick:I},[U(Z,{name:`chevron-left`,size:17})])):z(``,!0),D(`label`,null,[U(Z,{name:`search`,size:18}),d(D(`input`,{ref_key:`input`,ref:l,"onUpdate:modelValue":n[0]||=e=>c.value=e,type:`search`,placeholder:e.tabbed?`搜索聊天名称或内容`:x.value?`搜索${x.value.title}`:e.label,"aria-label":e.tabbed?e.label:x.value?`搜索${x.value.title}`:e.label,onKeydown:n[1]||=Ye(X(t=>e.split||e.tabbed?N():x.value?I():N(),[`stop`,`prevent`]),[`esc`])},null,40,yq),[[Y,c.value]])]),D(`button`,{type:`button`,"aria-label":`关闭搜索`,title:`关闭搜索`,onClick:N},[U(Z,{name:`close`,size:17})])]),e.tabbed?(u(),F(`nav`,{key:0,ref_key:`categories`,ref:g,class:`floating-resource-search__tabs`,role:`tablist`,"aria-label":`聊天分类`,onKeydown:[n[2]||=Ye(X(e=>R(-1),[`prevent`]),[`left`]),n[3]||=Ye(X(e=>R(1),[`prevent`]),[`right`])]},[(u(!0),F(T,null,p(e.items,t=>(u(),F(`button`,{key:t.id,type:`button`,role:`tab`,"aria-label":t.title,"aria-selected":t.id===b.value,tabindex:t.id===b.value?0:-1,"aria-controls":`${e.section}-search-results`,onClick:e=>P(t)},[w(s(t.title),1),D(`small`,null,s(t.children?.length??0),1)],8,bq))),128))],544)):z(``,!0),D(`div`,{class:y([`floating-resource-search__body`,{"floating-resource-search__body--split":e.split}])},[e.split?(u(),F(`nav`,xq,[(u(!0),F(T,null,p(j.value,e=>(u(),F(T,{key:e.item.id},[e.showSection?(u(),F(`div`,Sq,s(e.item.section),1)):z(``,!0),D(`button`,{type:`button`,class:y({active:e.item.id===b.value}),onClick:t=>P(e.item)},[e.item.icon?(u(),k(Z,{key:0,name:e.item.icon,size:15},null,8,[`name`])):z(``,!0),D(`span`,null,s(e.item.title),1)],10,Cq)],64))),128))])):z(``,!0),D(`section`,{id:`${e.section}-search-results`,class:`floating-resource-search__result-pane`,role:e.tabbed?`tabpanel`:void 0,"aria-label":e.tabbed?x.value?.title:void 0},[x.value&&!e.tabbed?(u(),F(`div`,Tq,[D(`strong`,null,s(x.value.title),1),D(`span`,null,s(x.value.subtitle),1)])):z(``,!0),D(`div`,{class:`floating-resource-search__results`,role:t.$slots[`item-actions`]?`list`:`listbox`,"aria-label":`搜索结果`},[(u(!0),F(T,null,p(A.value,e=>(u(),F(T,{key:e.item.id},[e.showSection?(u(),F(`div`,Dq,s(e.item.section),1)):z(``,!0),D(`div`,{class:`floating-resource-search__row`,role:t.$slots[`item-actions`]?`listitem`:`presentation`},[D(`button`,{class:`floating-resource-search__select`,type:`button`,role:t.$slots[`item-actions`]?void 0:`option`,"aria-haspopup":e.hasChildren?`listbox`:void 0,onClick:t=>P(e.item)},[e.item.avatar!==void 0||e.item.avatarMembers?.length?(u(),F(`span`,Aq,[e.item.avatarKind===`agent`?(u(),k(Xe,{key:0,name:e.item.title,avatar:e.item.avatar,state:e.item.avatarState,size:30},null,8,[`name`,`avatar`,`state`])):(u(),k(Ke,{key:1,name:e.item.title,avatar:e.item.avatar||``,members:e.item.avatarMembers||[],"fallback-key":e.item.avatarFallbackKey||e.item.id,size:30},null,8,[`name`,`avatar`,`members`,`fallback-key`]))])):e.item.icon?(u(),F(`span`,jq,[U(Z,{name:e.item.icon,size:16},null,8,[`name`])])):z(``,!0),D(`span`,Mq,[D(`strong`,null,s(e.item.title),1),e.item.subtitle?(u(),F(`small`,Nq,s(e.item.subtitle),1)):z(``,!0)]),e.item.meta?(u(),F(`small`,Pq,s(e.item.meta),1)):z(``,!0)],8,kq),_(t.$slots,`item-actions`,{item:e.item},void 0,!0)],8,Oq)],64))),128)),E.value.length?z(``,!0):(u(),F(`p`,Fq,s(x.value?.emptyText||(x.value?`暂无${x.value.title}内容`:`没有匹配结果`)),1))],8,Eq)],8,wq)],2),_(t.$slots,`footer`,{},void 0,!0)],42,vq)])):z(``,!0)]))}}),[[`__scopeId`,`data-v-102c59fc`]]);function zq(e,t){let n,r=new Set,a=()=>{let n=e.value;if(!n||document.hidden||!document.hasFocus()){r.clear();return}let i=n.getBoundingClientRect(),a=new Set;for(let e of n.querySelectorAll(`[data-message-id]`)){let t=e.getBoundingClientRect(),n=Math.max(t.top,i.top,0),r=Math.min(t.bottom,i.bottom,innerHeight),o=Math.max(t.left,i.left,0),s=Math.min(t.right,i.right,innerWidth);if(r-n<Math.min(24,t.height)||s<=o)continue;let c=document.elementFromPoint((o+s)/2,(n+r)/2);c&&e.contains(c)&&e.dataset.messageId&&a.add(e.dataset.messageId)}let o=[...a].filter(e=>r.has(e));r=a,o.length&&t(o)};m(()=>{n=setInterval(a,350)}),i(()=>{clearInterval(n),r.clear()})}var Bq={key:0,class:`capsule__icon`},Vq={key:1,class:`capsule__name`},Hq={key:0,class:`capsule__dot`,"aria-hidden":`true`},Uq={class:`capsule__type`},Wq=E({__name:`CapsulePill`,props:{as:{default:`span`},name:{},type:{},size:{default:`default`},tone:{},arrow:{type:Boolean}},setup(e){return(t,n)=>(u(),k(a(e.as),{class:y([`capsule`,[`capsule--${e.size}`,{"capsule--interactive":e.as!==`span`&&e.as!==`div`,"capsule--tinted":!!e.tone}]]),style:l(e.tone?{"--capsule-tone":e.tone}:void 0),type:e.as===`button`?`button`:void 0},{default:S(()=>[t.$slots.icon?(u(),F(`span`,Bq,[_(t.$slots,`icon`)])):z(``,!0),e.name?(u(),F(`span`,Vq,s(e.name),1)):z(``,!0),e.type?(u(),F(T,{key:2},[e.name?(u(),F(`i`,Hq)):z(``,!0),D(`span`,Uq,s(e.type),1)],64)):z(``,!0),_(t.$slots,`default`),e.arrow?(u(),k(Z,{key:3,class:`capsule__arrow`,name:`chevron-right`,size:e.size===`compact`?10:13,"aria-hidden":`true`},null,8,[`size`])):z(``,!0)]),_:3},8,[`class`,`style`,`type`]))}}),Gq={class:`system-message-notice`},Kq={class:`capsule__name`},qq={key:1},Jq={class:`capsule__name`,role:`status`},Yq={class:`system-message-notice__details`},Xq={class:`capsule__name`},Zq=V(E({__name:`SystemMessageNotice`,props:{title:{},icon:{},href:{},accessibleLabel:{}},setup(e){return(t,n)=>(u(),F(`div`,Gq,[e.href?(u(),k(Wq,{key:0,as:`a`,class:`system-message-notice__label`,href:e.href,"aria-label":e.accessibleLabel||e.title,arrow:``},{icon:S(()=>[U(Z,{name:e.icon||`info`,size:14,"aria-hidden":`true`},null,8,[`name`])]),default:S(()=>[D(`span`,Kq,s(e.title),1)]),_:1},8,[`href`,`aria-label`])):t.$slots.default?(u(),F(`details`,qq,[U(Wq,{as:`summary`,class:`system-message-notice__label`,"aria-label":e.accessibleLabel||`${e.title},查看详情`,arrow:``},{icon:S(()=>[U(Z,{name:e.icon||`info`,size:14,"aria-hidden":`true`},null,8,[`name`])]),default:S(()=>[D(`span`,Jq,s(e.title),1)]),_:1},8,[`aria-label`]),D(`div`,Yq,[_(t.$slots,`default`,{},void 0,!0)])])):(u(),k(Wq,{key:2,class:`system-message-notice__label`,role:`status`},{icon:S(()=>[U(Z,{name:e.icon||`info`,size:14,"aria-hidden":`true`},null,8,[`name`])]),default:S(()=>[D(`span`,Xq,s(e.title),1)]),_:1}))]))}}),[[`__scopeId`,`data-v-b9599f8f`]]),Qq={key:0},$q=V(E({__name:`MessageFailureNotice`,props:{failure:{}},setup(e){return(t,n)=>(u(),k(Zq,{class:`failure-notice`,title:e.failure.title,icon:`info`},{default:S(()=>[D(`p`,null,s(e.failure.hint),1),e.failure.detail?(u(),F(`pre`,Qq,s(e.failure.detail),1)):z(``,!0)]),_:1},8,[`title`]))}}),[[`__scopeId`,`data-v-739155c5`]]),eJ=/^执行失败[::]\s*/;function tJ(e){if(e.communication||e.taskReference||e.role===`tool`||e.status!==`failed`&&!e.error?.trim())return;let t=e.content.trim(),n=e.role!==`user`&&e.status===`failed`&&eJ.test(t),r=e.error?.trim()||(n?t.replace(eJ,``):``);if(!r&&e.status!==`failed`)return;let i=e.role===`assistant`&&e.status===`failed`&&t.includes(`Provider said:`)&&/didn[’']t respond in time on any of \d+ attempts/.test(t),a=e.role!==`user`&&(n||i||!!r&&t===r||!t),o=[...new Set([a?t.replace(eJ,``):``,r].filter(Boolean))].filter((e,t,n)=>!n.some((n,r)=>r!==t&&n.includes(e))).join(`
|
|
248
248
|
|
|
@@ -273,6 +273,6 @@ https://github.com/highlightjs/highlight.js/issues/2277`),i=e,r=t),n===void 0&&(
|
|
|
273
273
|
`,iQ=()=>new DOMException(`语音对话已结束`,`AbortError`),aQ=e=>{if(e.aborted)throw iQ()};function oQ(e){return hI(e).replace(/```[\s\S]*?```/g,`这里有一段代码。`).replace(/!\[[^\]]*\]\([^)]*\)/g,`图片`).replace(/\[([^\]]+)\]\([^)]*\)/g,`$1`).replace(/https?:\/\/\S+/g,`链接`).replace(/<[^>]+>/g,``).replace(/^[\s]*[>#*-]+\s*/gm,``).replace(/[*_`~]/g,``).trim()}var sQ=class{request;audio;submit;changed;botId;epoch=0;controller;state={phase:`idle`,error:``,text:``,reply:``};constructor(e,t,n,r,i){this.request=e,this.audio=t,this.submit=n,this.changed=r,this.botId=i}set(e){this.state={...this.state,...e},this.changed(this.state)}async start(){this.stop();let e=this.epoch,t=new AbortController,{signal:n}=t;this.controller=t,this.set({phase:`starting`,error:``,text:``,reply:``});let r=this.botId?{botId:this.botId}:{};try{let e=await this.request(`/api/app/harness/speech${this.botId?`?botId=${encodeURIComponent(this.botId)}`:``}`,{signal:n});if(aQ(n),!e.transcription||!e.speech)throw Error(`请先在“设置 → 模型服务 → 语音”配置语音识别和语音合成。`);for(await this.audio.open(n),aQ(n);!n.aborted;){this.set({phase:`listening`});let e=await this.audio.record(n,()=>{n.aborted||this.set({phase:`recording`})});if(aQ(n),!e?.size)continue;if(e.size>2097152)throw Error(`录音过长,请控制在一分钟以内。`);this.set({phase:`transcribing`});let t=new Uint8Array(await e.arrayBuffer()),i=``;for(let e of t)i+=String.fromCharCode(e);aQ(n);let a=await this.request(`/api/app/harness/speech/transcription`,{method:`POST`,signal:n,body:{requestId:pt(),...r,audio:btoa(i),mimeType:e.type.split(`;`)[0]||`audio/webm`}});if(aQ(n),!a.text.trim())continue;this.set({phase:`waiting`,text:a.text.trim(),reply:``});let o=await this.submit(a.text.trim(),n);aQ(n),this.set({phase:`speaking`,reply:o});let s=oQ(o);for(let e=0;e<s.length;e+=4e3){let t=await this.request(`/api/app/harness/speech/speech`,{method:`POST`,signal:n,body:{requestId:pt(),...r,text:s.slice(e,e+4e3)}});aQ(n);let i=Uint8Array.from(atob(t.audio),e=>e.charCodeAt(0));await this.audio.play(new Blob([i],{type:t.mimeType}),n),aQ(n)}}}catch(t){e===this.epoch&&!n.aborted&&this.set({phase:`error`,error:t instanceof Error?t.message:`语音对话失败`})}finally{e===this.epoch&&(t.abort(),this.controller=void 0,this.audio.close(),this.state.phase!==`error`&&this.set({phase:`idle`}))}}stop(){this.epoch++,this.controller?.abort(),this.controller=void 0,this.audio.close(),this.set({phase:`idle`})}},cQ=class{stream;context;analyser;cancel;async open(e){if(!navigator.mediaDevices?.getUserMedia||typeof MediaRecorder>`u`||typeof AudioContext>`u`)throw Error(`当前浏览器不支持语音对话,请使用支持录音的浏览器,并通过本机地址或 HTTPS 访问。`);let t=await navigator.mediaDevices.getUserMedia({audio:{echoCancellation:!0,noiseSuppression:!0}});if(e.aborted)throw t.getTracks().forEach(e=>e.stop()),iQ();this.stream=t;let n=new AudioContext;this.context=n;let r=n.createAnalyser();r.fftSize=1024,n.createMediaStreamSource(t).connect(r),this.analyser=r,await n.resume(),aQ(e)}record(e,t){if(aQ(e),!this.stream||!this.analyser)return Promise.reject(Error(`麦克风未连接,请重新开始。`));let n=this.stream,r=this.analyser;return new Promise((i,a)=>{let o;try{o=new MediaRecorder(n)}catch(e){a(e);return}let s=[],c=new Float32Array(r.fftSize),l=performance.now(),u=0,d=0,f=0,p=0,m=!1,h=()=>{clearInterval(v),e.removeEventListener(`abort`,_),this.cancel===_&&(this.cancel=void 0)},g=e=>{m||(m=!0,h(),o.state===`recording`&&o.stop(),a(e))},_=()=>g(iQ());this.cancel=_,e.addEventListener(`abort`,_,{once:!0}),o.ondataavailable=e=>{p+=e.data.size,p>2097152?g(Error(`录音过长,请分段对话。`)):s.push(e.data)},o.onerror=()=>g(Error(`录音失败,请检查麦克风权限。`)),o.onstop=()=>{m||(m=!0,h(),i(u?new Blob(s,{type:o.mimeType||`audio/webm`}):void 0))};let v=setInterval(()=>{if(!n.getAudioTracks().some(e=>e.readyState===`live`)){g(Error(`麦克风已断开,请重新连接后开始对话。`));return}r.getFloatTimeDomainData(c);let e=0;for(let t of c)e+=t*t;let i=20*Math.log10(Math.max(1e-8,Math.sqrt(e/c.length))),a=performance.now();u?i>=-46&&(d=a):(f=i>=-40?f+1:0,f>=2&&(u=d=a,t())),(a-l>=6e4||u&&a-u>=250&&a-d>=800)&&(clearInterval(v),o.state===`recording`&&o.stop())},80);try{o.start(500)}catch(e){g(e)}})}play(e,t){return aQ(t),new Promise((n,r)=>{let i=URL.createObjectURL(e),a=new Audio(i),o=!1,s=e=>{o||(o=!0,a.pause(),a.removeAttribute(`src`),URL.revokeObjectURL(i),t.removeEventListener(`abort`,c),this.cancel===c&&(this.cancel=void 0),e?r(e):n())},c=()=>s(iQ());this.cancel=c,t.addEventListener(`abort`,c,{once:!0}),a.onended=()=>s(),a.onerror=()=>s(Error(`语音播放失败,请检查输出设备。`)),a.play().catch(e=>s(e))})}close(){this.cancel?.(),this.cancel=void 0,this.stream?.getTracks().forEach(e=>e.stop()),this.stream=void 0,this.context?.close().catch(()=>{}),this.context=void 0,this.analyser=void 0}},lQ=[`disabled`,`aria-label`,`title`],uQ=[`innerHTML`],dQ={key:0,class:`voice-conversation-panel`,"aria-label":`实时语音对话`},fQ={class:`voice-conversation-panel__heading`},pQ={role:`status`,"aria-live":`polite`},mQ={key:0,role:`alert`},hQ={key:0,class:`voice-conversation-panel__text`},gQ={class:`voice-conversation-panel__actions`},_Q=V(E({__name:`HarnessVoiceConversation`,props:{disabled:{type:Boolean},draftKey:{},botId:{},submit:{type:Function}},emits:[`activeChange`,`error`,`settings`],setup(e,{emit:t}){let n=e,r=t,a=O({phase:`idle`,error:``,text:``,reply:``}),o=H(()=>![`idle`,`error`].includes(a.value.phase)),c={idle:`实时对话`,starting:`正在连接麦克风…`,listening:`正在聆听`,recording:`正在听你说…`,transcribing:`正在识别语音…`,waiting:`等待 Bot 回复…`,speaking:`正在朗读回复`,error:`语音对话未连接`},l;function d(){l?.stop(),l=void 0}function p(){n.disabled||o.value||(l=new sQ(Q,new cQ,n.submit,e=>{a.value=e,r(`activeChange`,![`idle`,`error`].includes(e.phase)),e.phase===`error`&&r(`error`,e.error)},n.botId),l.start())}function h(){a.value={...a.value,phase:`idle`,error:``}}function g(){document.hidden&&d()}return f(()=>[n.draftKey,n.botId],d),m(()=>document.addEventListener(`visibilitychange`,g)),i(()=>{d(),document.removeEventListener(`visibilitychange`,g)}),(t,n)=>(u(),F(T,null,[D(`button`,{class:`voice-conversation-trigger`,type:`button`,disabled:e.disabled&&!o.value,"aria-label":o.value?`结束实时对话`:`实时对话`,title:o.value?`结束实时对话`:`实时对话`,onClick:n[0]||=e=>o.value?d():p()},[o.value?(u(),k(R(Jg),{key:0,"aria-hidden":`true`})):(u(),F(`span`,{key:1,class:`voice-conversation-wave`,"aria-hidden":`true`,innerHTML:R(rQ)},null,8,uQ))],8,lQ),(u(),k(L,{to:`body`},[o.value||a.value.error?(u(),F(`section`,dQ,[D(`div`,fQ,[D(`strong`,pQ,s(c[a.value.phase]),1),a.value.error?(u(),F(`button`,{key:0,type:`button`,"aria-label":`关闭语音提示`,onClick:h},[U(R(o_),{"aria-hidden":`true`})])):z(``,!0)]),a.value.error?(u(),F(`p`,mQ,s(a.value.error),1)):(u(),F(T,{key:1},[n[2]||=D(`p`,null,`说完后自动发送;回复完成后继续聆听。`,-1),a.value.text?(u(),F(`p`,hQ,`你:`+s(a.value.text),1)):z(``,!0)],64)),D(`div`,gQ,[a.value.error?(u(),F(`button`,{key:0,type:`button`,onClick:n[1]||=e=>{r(`settings`),h()}},`语音设置`)):z(``,!0),o.value?(u(),F(`button`,{key:1,type:`button`,class:`voice-conversation-panel__end`,onClick:d},[U(R(Jg),{"aria-hidden":`true`}),n[3]||=w(`结束对话`,-1)])):z(``,!0)])])):z(``,!0)]))],64))}}),[[`__scopeId`,`data-v-3b401726`]]);function vQ(e,t,n){if(!t||t.id!==e)return;if(t.status===`waiting`)return{error:`Bot 正在等待授权或补充信息,请在聊天中处理后重新开始语音对话。`};if(t.status===`uncertain`)return{error:`本轮执行状态尚未确认,请在聊天中查看,语音不会重复发送。`};if(t.status===`failed`)return{error:t.error||`本轮执行失败,请在聊天中查看详情。`};if(t.status===`interrupted`)return{error:`本轮已停止。`};if(t.status!==`complete`)return;let r=n.filter(t=>t.runId===e&&t.role===`assistant`&&t.visible!==!1&&t.status===`complete`&&t.content.trim()).sort((e,t)=>e.seq-t.seq).map(e=>hI(e.content).trim()).filter(Boolean).join(`
|
|
274
274
|
|
|
275
275
|
`);return r?{text:r}:{error:`本轮已结束,没有可朗读的回复。请在聊天中查看交付结果。`}}var yQ=[`aria-label`],bQ={class:`image-preview-actions`},xQ=[`href`,`aria-label`,`title`],SQ=[`aria-label`,`title`],CQ=[`aria-label`,`title`],wQ=[`aria-label`],TQ=[`src`,`aria-label`],EQ=[`src`,`alt`],DQ=[`aria-label`],OQ={key:2,class:`image-preview-counter`},kQ=V(E({__name:`ImagePreviewLightbox`,props:{images:{},modelValue:{},closeLabel:{},addLabel:{},canAdd:{type:Boolean,default:!0},previousLabel:{},nextLabel:{}},emits:[`update:modelValue`,`close`,`add`],setup(e,{emit:t}){let n=e,r=t,a=O(null),o=H(()=>n.modelValue===null?null:n.images[n.modelValue]||null),c=H(()=>(n.modelValue??0)>0),l=H(()=>n.modelValue!==null&&n.modelValue<n.images.length-1);function d(){a.value=null,r(`update:modelValue`,null),r(`close`)}function f(e){if(n.modelValue===null)return;let t=n.modelValue+e;t>=0&&t<n.images.length&&r(`update:modelValue`,t)}function p(e){n.modelValue!==null&&(e.key===`Escape`?(e.preventDefault(),d()):e.key===`ArrowLeft`?(e.preventDefault(),f(-1)):e.key===`ArrowRight`&&(e.preventDefault(),f(1)))}function h(e){e.isPrimary&&(a.value={pointerId:e.pointerId,x:e.clientX})}function g(e){let t=a.value;a.value=null,!(!t||t.pointerId!==e.pointerId||Math.abs(e.clientX-t.x)<48)&&f(e.clientX<t.x?1:-1)}return m(()=>window.addEventListener(`keydown`,p)),i(()=>window.removeEventListener(`keydown`,p)),(t,n)=>(u(),k(L,{to:`body`},[o.value?(u(),F(`div`,{key:0,class:`image-preview-overlay`,role:`dialog`,"aria-modal":`true`,"aria-label":`预览 ${o.value.name}`,onClick:X(d,[`self`]),onPointerdown:h,onPointerup:g,onPointercancel:n[7]||=e=>a.value=null},[D(`div`,bQ,[D(`a`,{href:o.value.url,download:``,"aria-label":`下载 ${o.value.name}`,title:`下载 ${o.value.name}`},[U(R(kt),{"aria-hidden":`true`})],8,xQ),e.canAdd?(u(),F(`button`,{key:0,type:`button`,"aria-label":e.addLabel||`添加到聊天`,title:e.addLabel||`添加到聊天`,onClick:n[0]||=X(e=>r(`add`,o.value),[`stop`])},[U(R(xt),{"aria-hidden":`true`})],8,SQ)):z(``,!0),D(`button`,{type:`button`,"aria-label":e.closeLabel||`关闭预览`,title:e.closeLabel||`关闭预览`,onClick:d},[U(R(Dt),{"aria-hidden":`true`})],8,CQ)]),c.value?(u(),F(`button`,{key:0,class:`image-preview-nav image-preview-nav--previous`,type:`button`,"aria-label":e.previousLabel||`上一张媒体`,onClick:n[1]||=X(e=>f(-1),[`stop`])},[U(R(Tt),{"aria-hidden":`true`})],8,wQ)):z(``,!0),U(ge,{name:`image-preview-change`,mode:`out-in`},{default:S(()=>[o.value.type===`video`?(u(),F(`video`,{key:o.value.url,src:o.value.url,"aria-label":o.value.name,class:`image-preview-video`,controls:``,playsinline:``,preload:`metadata`,onClick:n[2]||=X(()=>{},[`stop`]),onPointerdown:n[3]||=X(()=>{},[`stop`]),onPointerup:n[4]||=X(()=>{},[`stop`])},null,40,TQ)):(u(),F(`img`,{key:o.value.url,src:o.value.url,alt:o.value.name,class:`image-preview-img`,draggable:`false`,onClick:n[5]||=X(()=>{},[`stop`])},null,8,EQ))]),_:1}),l.value?(u(),F(`button`,{key:1,class:`image-preview-nav image-preview-nav--next`,type:`button`,"aria-label":e.nextLabel||`下一张媒体`,onClick:n[6]||=X(e=>f(1),[`stop`])},[U(R(G),{"aria-hidden":`true`})],8,DQ)):z(``,!0),e.images.length>1?(u(),F(`span`,OQ,s((e.modelValue||0)+1)+` / `+s(e.images.length),1)):z(``,!0)],40,yQ)):z(``,!0)]))}}),[[`__scopeId`,`data-v-c250743b`]]),AQ=[{id:`information-research`,name:`信息收集团队`,summary:`检索、核验并整理可信资料`,instructions:`围绕用户目标拆解调研问题,分别完成资料检索、交叉核验和结构化整理。引用关键来源,明确事实、推断与待确认项,最后由调研负责人汇总可直接使用的结论。`,roles:[{name:`调研负责人`,description:`拆解问题、分派任务并汇总最终结论`,host:!0},{name:`信息检索`,description:`广泛查找资料、案例和一手来源`},{name:`事实核验`,description:`交叉验证关键数据、时效与来源可信度`},{name:`资料整理`,description:`归纳要点、证据和待确认事项`}]},{id:`product-design`,name:`产品设计团队`,summary:`从需求洞察推进到可评审方案`,instructions:`先澄清目标用户、问题和成功指标,再分别完成用户洞察、交互方案、视觉表达与设计评审。所有决策说明依据、约束和取舍,由产品负责人整合为可执行方案。`,roles:[{name:`产品负责人`,description:`定义目标、优先级和验收标准`,host:!0},{name:`用户研究`,description:`分析用户、场景、痛点和使用动机`},{name:`交互设计`,description:`设计信息架构、流程和交互细节`},{name:`视觉设计`,description:`负责界面层级、视觉规范和表现一致性`},{name:`设计评审`,description:`检查可用性、无障碍、边界状态和实现风险`}]},{id:`software-development`,name:`软件开发团队`,summary:`覆盖设计、实现、测试与审查`,instructions:`先确认需求、现有架构和验收方式,再按前端、后端、测试和审查分工推进。优先复用现有约定,保护无关行为;提交结论时列明改动、风险和真实验证证据。`,roles:[{name:`技术负责人`,description:`拆解方案、协调依赖并把控技术边界`,host:!0},{name:`前端开发`,description:`负责界面、交互、状态和客户端测试`},{name:`后端开发`,description:`负责接口、数据、服务逻辑和兼容性`},{name:`测试工程师`,description:`设计并执行功能、回归和边界验证`},{name:`代码审查`,description:`检查正确性、安全性、性能和可维护性`}]},{id:`copywriting`,name:`文案书写团队`,summary:`策划、撰写并校对完整内容`,instructions:`先明确读者、目标、语气和发布渠道,再完成资料整理、内容结构、文案撰写与校对。保持术语统一和事实准确,由内容策划整合最终版本。`,roles:[{name:`内容策划`,description:`确定受众、目标、结构和表达策略`,host:!0},{name:`资料编辑`,description:`整理素材、事实、术语和引用依据`},{name:`文案撰写`,description:`完成正文、标题和不同渠道版本`},{name:`校对审核`,description:`检查事实、逻辑、语气、语法和一致性`}]},{id:`project-management`,name:`项目管理团队`,summary:`协调需求、进度、依赖与风险`,instructions:`围绕目标、范围、时间和责任人建立项目计划。持续同步需求变化、进度、依赖、风险与决策,所有行动项必须包含负责人和完成条件,由项目负责人维护统一结论。`,roles:[{name:`项目负责人`,description:`维护目标、范围、计划和最终决策`,host:!0},{name:`需求协调`,description:`澄清需求、优先级和跨方依赖`},{name:`进度跟踪`,description:`跟进里程碑、行动项和交付状态`},{name:`风险管理`,description:`识别风险、阻塞并准备应对方案`}]},{id:`data-analysis`,name:`数据分析团队`,summary:`从数据处理到业务洞察汇报`,instructions:`先定义问题、指标口径和数据边界,再完成数据处理、指标分析和洞察验证。明确数据质量、假设和不确定性,由分析负责人输出可复核的结论与建议。`,roles:[{name:`分析负责人`,description:`定义分析问题、口径并整合结论`,host:!0},{name:`数据处理`,description:`负责数据获取、清洗和质量检查`},{name:`指标分析`,description:`计算指标、识别趋势并验证假设`},{name:`洞察汇报`,description:`将发现转化为图表、结论和行动建议`}]},{id:`meeting-collaboration`,name:`会议协作团队`,summary:`会前准备、会议记录与会后跟进`,instructions:`会前整理议题、背景和待决策事项;会中记录关键观点、结论和分歧;会后输出带负责人和截止条件的行动项。由会议主持控制议程并确认最终记录。`,roles:[{name:`会议主持`,description:`组织议程、推动决策并控制讨论范围`,host:!0},{name:`议题研究`,description:`准备背景资料、备选方案和关键问题`},{name:`会议记录`,description:`记录观点、决策、分歧和上下文`},{name:`行动跟进`,description:`整理责任人、完成条件并跟踪后续事项`}]},{id:`operations`,name:`运维保障团队`,summary:`发布、监控、排障与安全检查`,instructions:`所有操作先确认环境、影响范围、回滚方式和验证标准。发布、监控排障与安全审查分别执行并互相复核,由运维负责人统一判断是否继续、回滚或升级处理。`,roles:[{name:`运维负责人`,description:`制定方案、控制风险并负责最终决策`,host:!0},{name:`发布执行`,description:`负责变更步骤、配置检查和回滚准备`},{name:`监控排障`,description:`观察指标日志、定位故障并验证恢复`},{name:`安全审查`,description:`检查权限、数据、依赖和操作安全性`}]}],jQ={class:`preset-picker`,"aria-label":`团队预设`},MQ={class:`preset-grid`},NQ=[`disabled`,`aria-label`,`onClick`],PQ={key:0,class:`preset-help`},FQ=V(E({__name:`TeamPresetPicker`,props:{selected:{},available:{}},emits:[`select`],setup(e,{emit:t}){let n=e,r=t,i=e=>Math.max(0,e.roles.length-n.available);return(t,n)=>(u(),F(`section`,jQ,[n[2]||=D(`div`,{class:`preset-picker__heading`},[D(`span`,null,`团队预设`),D(`small`,null,`选择后分配已创建的机器人`)],-1),D(`div`,MQ,[D(`button`,{type:`button`,class:y({selected:e.selected===`custom`}),onClick:n[0]||=e=>r(`select`)},[...n[1]||=[D(`strong`,null,`自定义团队`,-1),D(`small`,null,`手动选择机器人和协作配置`,-1),D(`em`,null,`自由配置`,-1)]],2),(u(!0),F(T,null,p(R(AQ),t=>(u(),F(`button`,{key:t.id,type:`button`,class:y({selected:e.selected===t.id}),disabled:i(t)>0,"aria-label":t.name,onClick:e=>r(`select`,t)},[D(`strong`,null,s(t.name),1),D(`small`,null,s(t.summary),1),D(`em`,null,s(i(t)?`还缺 ${i(t)} 人`:`${t.roles.length} 人`),1)],10,NQ))),128))]),e.available<5?(u(),F(`small`,PQ,`成员不足时,请先创建所需的机器人。`)):z(``,!0)]))}}),[[`__scopeId`,`data-v-22ca72e6`]]),IQ={key:0,class:`directory-view`},LQ={key:0,role:`alert`,class:`error`},RQ={key:0,class:`header-actions`},zQ={key:0,class:`task-picker-shell`},BQ=[`aria-busy`,`disabled`,`value`],VQ=[`value`],HQ=[`aria-pressed`],UQ={key:0,class:`error`,role:`alert`},WQ={key:0,class:`task-queue-status`,role:`status`},GQ={key:1,class:`task-queue-status`,role:`status`},KQ={key:0,class:`group-approval-summary`,role:`status`},qQ=[`onClick`],JQ={key:1,class:`knowledge-shortcuts composer-knowledge`},YQ={key:0},XQ=[`value`],ZQ={key:1},QQ=[`value`],$Q={key:2},e$={value:``},t$=[`value`],n$={key:0,class:`search-lifecycle-actions`},r$=[`aria-label`,`disabled`,`onClick`],i$=[`aria-label`,`disabled`,`aria-busy`,`onClick`],a$={key:0,class:`search-delete-error`,role:`alert`},o$={key:0,class:`lifecycle-error`,role:`alert`},s$={id:`conversation-editor-title`},c$={class:`editor-content`},l$={key:0,class:`error`,role:`alert`},u$=[`readonly`],d$={key:2,class:`group-options`},f$={key:3},p$=[`aria-expanded`],m$={key:5,class:`team-avatar-settings`},h$={key:6},g$=[`readonly`,`placeholder`],_$={class:`model-summary`},v$={key:0,class:`group-options`},y$={class:`team-management-permission`},b$={key:8,class:`preset-role-mapping`},x$=[`value`,`aria-label`,`onChange`],S$=[`value`],C$={key:9},w$=[`value`,`disabled`],T$={class:`member-choice__copy`},E$={key:0},D$={key:1},O$=[`onClick`],k$={key:10},A$=[`value`],j$={key:0,class:`group-help`},M$={key:1,class:`group-help`},N$={key:0,value:`discussion`},P$={class:`group-options`},F$={key:1},I$=[`value`],L$={key:2},R$=[`checked`],z$={key:3},B$=[`disabled`],V$=`yaovi:workspace-dock-width`,H$=320,U$=6,W$=`__create_task__`,G$=E({__name:`ConversationsView`,setup(e){let t=Fe(),n=nt(),r=xe(),a=Ce(),c=O([]),h=O([]),_=I([]),v=O(),b=O(null),x=O([]),C=O([]),E=O(null),A=O([]),j=O(),M=O([]),N=O(``),P=H(()=>A.value.includes(Mt)),B=H(()=>A.value.includes(`background-tasks-v1`)),V=H(()=>j.value?.enabled?j.value.mainBotId:null),W=H(()=>P.value&&r.query.view===`bots`),ee=H(()=>!!V.value&&v.value?.kind===`direct`&&v.value.memberIds[0]===V.value),te=H(()=>yt(M.value)),G=H(()=>new Set(M.value.map(e=>e.runId).filter(Boolean))),K=H(()=>b.value&&!G.value.has(b.value.id)?b.value:null),ne=H(()=>!!K.value&&[`queued`,`running`,`waiting`,`uncertain`].includes(K.value.status)||tg(_.value.filter(e=>!e.runId||!G.value.has(e.runId)))),re=H(()=>!!v.value?.activeRunId&&!G.value.has(v.value.activeRunId)),ie,q=0,ae=O([]),J=O(null),oe=O([]),se=O([]),ce=O(!1),le=O(),ue=O([]),de=H(()=>ae.value.filter(e=>ue.value.includes(e.id)));function fe(e){Mn()&&(Rt.value===`editAgent`&&Nr(),hn.value=void 0,ue.value=e??[],le.value=e?`runtime`:`goal`)}let me=O(!1),he=O(),ge=O(0),ve=O(!1),be=O([]),we=O(``),Te=O(),Ee=O(``),Oe=H(()=>Rn.value.filter(e=>!e.temporaryGoalId&&!e.archived&&!e.remoteAgentId)),ke=H(()=>Oe.value.find(e=>e.id===v.value?.administratorId)??Oe.value[0]),Ae=H(()=>v.value?.kind===`group`&&!v.value.archived&&!J.value?.goal&&(v.value.collaborationMode===`discussion`?Oe.value.length>0:Rn.value.some(e=>e.id===v.value?.administratorId&&!e.temporaryGoalId&&!e.archived&&!e.remoteAgentId))),Pe=new Map,Ie=new Map,Le=H(()=>`${t.user?.id}:${v.value?.id}${J.value?`:${J.value.id}`:``}`);f(Le,()=>{le.value=void 0,ce.value=!1,we.value=``,Te.value=void 0,Ee.value=``});async function Re(){await nr(),ve.value&&(be.value=(await Q(`/api/app/workspace/projects`)).projects)}async function Be(){await Promise.all([Re(),Zn()])}let Ve=O(``),He=O(``),Ue=O(!1),We=O(!1),Ge=O([]),qe=O([]),Je=O(!0),Ye=O(``),Ze=O(``);f(()=>`${r.params.id}:${C.value[0]?.id}`,()=>{Ze.value=``});let Qe=H(()=>UI(h.value)),$e=H(()=>[!1,!0].map(e=>{let t=h.value.filter(t=>t.archived===e).map(e=>WI(e,c.value,Qe.value));return{id:e?`archived`:`unarchived`,title:e?`已归档`:`未归档`,children:t,emptyText:e?`没有已归档聊天`:`没有未归档聊天`}})),it=H(()=>new Set(h.value.filter(e=>e.archived).map(e=>e.id))),at=O(``),ot=O(``),st=O(``),ct=O(),lt=O(),ut=O(!1),dt=O(0),ft,mt=O(),ht=O(null),gt=O(null),bt=O(null),xt=O(!1),St=new dZ,Ct=new WeakMap,wt=I([]),Tt=new Set;function Et(e,n=t.user?.id){!n||n!==t.user?.id||(ag(n,e),wt.value=e)}f(()=>t.user?.id,e=>{if(wt.value=[],e)try{wt.value=ig(e)}catch(e){He.value=e instanceof Error?e.message:`待发送消息缓存无法读取`}},{immediate:!0}),f(_,e=>{let t=new Set(e.filter(e=>e.clientRequestId).map(e=>e.clientRequestId)),n=wt.value.filter(e=>e.conversationId!==v.value?.id||(e.taskId??``)!==(J.value?.id??``)||!t.has(e.requestId));if(n.length!==wt.value.length)try{Et(n)}catch{}});let Dt=H(()=>hq(Zh(og(_.value,wt.value.filter(e=>e.conversationId===v.value?.id&&(e.taskId??``)===(J.value?.id??``)))).filter(e=>e.visible!==!1).map(e=>{let t=Ct.get(e);return t||(t={...BI([e])[0],localRequestId:e.localRequestId},Ct.set(e,t)),t}),J.value?.goal,se.value,ae.value,_.value.flatMap(e=>e.attachments))),Ot=O(!1),kt=H(()=>lH(Dt.value)),At=H(()=>kt.value.filter(e=>e.kind===`image`||e.kind===`video`).map(e=>({url:e.previewUrl||e.downloadUrl||``,name:e.name,type:e.kind}))),jt=H(()=>ht.value?{id:ht.value.id,content:ht.value.content,author:ht.value.author}:null),Nt=H(()=>({name:zt.value||`机器人`,displayName:$.name||`机器人`,agentName:$.name||`机器人`,agentAvatar:$.avatar,isDefault:!1,isRunning:!0}));function Pt(e){let t=e.url||``;try{t=decodeURIComponent(new URL(t,window.location.origin).pathname)}catch{}let n=_.value.flatMap(e=>e.attachments).find(e=>t===e.sourcePath||t===`/api/app/files/${e.id}/download`||t===`/api/app/files/${e.id}/preview`),r=n?.mimeType.toLowerCase().split(`;`)[0]||``,i=r.startsWith(`text/`)||[`application/json`,`application/xml`,`application/yaml`,`application/x-yaml`].includes(r),a=oH(n?.name||e.name,e.url||``,void 0,i?`text`:void 0),o=At.value.findIndex(e=>e.url===(a.previewUrl||a.downloadUrl));o>=0?bt.value=o:gt.value=a}let Ft=[],It=[];async function Lt(e){let t=lt.value,n=t?.submissionToken(),r=Le.value,i=Rr;if(Ve.value=ht.value?`> ${ht.value.author||`我`}: ${ht.value.content.replace(/\n/g,`
|
|
276
|
-
> `)}\n\n${e.text}`:e.text,qe.value=e.mentionIds,e.files.length)try{if(Ue.value=!0,e.files.length===Ft.length&&e.files.every((e,t)=>e===Ft[t]))Ge.value=It;else{let t=new FormData;for(let n of e.files)t.append(`files`,n);let n=await Q(`/api/app/uploads`,{method:`POST`,body:t});if(r!==Le.value||i!==Rr)return;Ge.value=n.files,Ft=[...e.files],It=[...Ge.value]}}catch(e){He.value=e instanceof Error?e.message:`上传失败`;return}finally{i===Rr&&(Ue.value=!1)}r===Le.value&&i===Rr&&(e.files.length||(Ge.value=[]),await Vr()&&t?.clearAfterSend(n)&<.value===t&&Le.value===r&&Rr===i&&(ht.value=null,Ft=[],It=[]))}let Rt=O(null),zt=O(``),Bt=O(``);O(),O();let Vt=O(),Ht=O(),Ut=O(!1),Wt=O(``);function Gt(e){let n=c.value.find(t=>t.id===e);!P.value||t.user?.role!==`admin`||!n||n.archived||n.temporaryGoalId||n.remoteAgentId||n.nodeId!==`local`||!Mn()||(Nr(),Wt.value=e)}async function Kt(e){let t=h.value.find(t=>t.kind===`direct`&&t.memberIds[0]===e.id&&!t.archived);t&&Mn()&&await Ar(`editAgent`,t,!0)}function qt(e){j.value=e,Zn()}let Jt=0,Yt=H(()=>h.value.find(e=>e.id===Bt.value)??(v.value?.id===Bt.value?v.value:void 0)),Xt=H(()=>c.value.find(e=>e.id===zt.value)),Zt=H(()=>Rt.value===`editAgent`&&!!c.value.find(e=>e.id===zt.value)?.remoteAgentId),$=g({name:``,avatar:``,instructions:``,description:``,job:``,antiJobs:[],voice:``,voiceCustom:``,actBias:``,execution:`profile`,canManageTeam:!0,canCollaborate:!0,memoryEnabled:!0,approvalPolicy:`ask`,memberIds:[],memberRoles:{},administratorId:``,mode:`discussion`,autoReplyIds:[],maxReplyRounds:3}),Qt=O(`custom`),$t=H(()=>Rt.value===`group`?AQ.find(e=>e.id===Qt.value):void 0);function en(e){$.memberRoles=Object.fromEntries(e.roles.flatMap((e,t)=>{let n=$.memberIds[t];return n?[[n,{name:e.name,description:e.description}]]:[]})),$.administratorId=$.memberIds[Math.max(0,e.roles.findIndex(e=>e.host))]??``}function tn(e){let t=c.value.filter(e=>!e.archived&&!e.temporaryGoalId);e&&t.length<e.roles.length||(Qt.value=e?.id??`custom`,Object.assign($,{name:e?.name??``,instructions:e?.instructions??``,job:``,antiJobs:[],voice:``,voiceCustom:``,actBias:``,memberIds:e?t.slice(0,e.roles.length).map(e=>e.id):[],memberRoles:{},administratorId:``,mode:ve.value?`discussion`:`host`,autoReplyIds:[],maxReplyRounds:3}),e&&en(e))}function nn(e,t){if(!$t.value)return;let n=[...$.memberIds],r=n[e],i=n.indexOf(t);n[e]=t,i>=0&&i!==e&&r&&(n[i]=r),$.memberIds=n,en($t.value)}g({});let rn=0,an=!1,on,sn=0,cn=H(()=>typeof r.params.id==`string`?r.params.id:void 0),ln=H(()=>typeof r.query.taskId==`string`?r.query.taskId:``),un=O(),dn=O(),fn=O(),pn=O(!0),mn=O(!1),hn=O(),gn=O(!1),vn=O(),yn=O(),bn=O(``),xn={default:380,min:280,max:480},Sn=O(),Cn=$A(V$,xn),wn=H(()=>Cn.width.value),Tn=H(()=>({flex:`0 0 ${wn.value}px`,width:`${wn.value}px`})),En=H(()=>!!(le.value||hn.value||Rt.value===`editAgent`&&Xt.value));function Dn(){let e=Sn.value?.clientWidth||0,t=e>0?e:Math.min(window.innerWidth,1200)-360;return Math.max(xn.min,t-H$-U$)}function On(){Cn.persist(Cn.width.value,Dn())}function kn(e){On(),Cn.beginDrag(e,{direction:-1,maxAvailable:Dn})}function An(){Cn.reset(Dn())}f(En,e=>{e&&o(()=>On())});let jn=O(!1);function Mn(){return Rt.value!==`editAgent`||(Ht.value?.beforeClose?.()??!0)}function Nn(e){Mn()&&(Rt.value===`editAgent`&&Nr(),le.value=void 0,hn.value=hn.value===e?void 0:e)}async function Pn(e,t,n,r=!0){if(r&&window.yaoviDesktop?.openComputer){try{await window.yaoviDesktop.openComputer(e.id,{backend:t,host:n})}catch(e){He.value=e instanceof Error?e.message:`无法打开电脑窗口`}return}if(mn.value&&fn.value){if(vn.value?.id===e.id&&yn.value===t&&bn.value===(n??``))return;try{await fn.value.releaseControl(),mn.value=!1,await o()}catch(e){He.value=e instanceof Error?e.message:`请先交还当前电脑`;return}}vn.value=e,yn.value=t,bn.value=n??``,pn.value=r,mn.value=!0}function Fn(e){_.value.some(t=>t.credentialDrafts?.some(t=>t.id===e.id))&&(yv.value=e.id,un.value?.openSettings(`credential-vault`))}async function In(e){if(!_.value.some(t=>t.browserCard?.id===e.id&&t.browserCard.agentId===e.agentId))return;let t=c.value.find(t=>t.id===e.agentId&&!t.archived);if(!t){He.value=`此浏览器所属机器人已不可用,或你已没有访问权限`;return}await Pn(t,`managed-browser`)}async function Ln(){if(gn.value&&dn.value&&!await dn.value.close())return!1;if(mn.value&&fn.value)try{await fn.value.releaseControl(),mn.value=!1}catch{return!1}return!0}rt(Ln),De(()=>Mn()?Ln():!1);let Rn=H(()=>c.value.filter(e=>v.value?.memberIds.includes(e.id))),zn=H(()=>v.value?.kind===`direct`?c.value.find(e=>e.id===v.value?.memberIds[0]):void 0),Bn=H(()=>zn.value?.name||v.value?.name||`Bot 模式`),Vn=H(()=>v.value?zn.value?.name||v.value.name:``),Hn=H(()=>zn.value?.avatar||v.value?.avatar||``),Un=H(()=>v.value?.kind===`group`?VI(v.value.memberIds,c.value,v.value):[]),Wn=H(()=>{let e=K.value;return pg({vmWait:e?.vmWait,runStatus:e?.status??(ne.value?`running`:void 0),stopRequested:e?.stopRequested,collaborationWaiting:!!v.value?.collaborationWaiting,backgroundPhase:e?.backgroundPhase,...mg(_.value)})??(ne.value?`正在输入…`:``)}),Gn=H(()=>yg({foregroundActive:ne.value,tasks:B.value?M.value:[],conversation:v.value})??``),qn=H(()=>ne.value?Wn.value:Gn.value),Jn=H(()=>{let e=[...Dt.value].reverse().find(e=>e.role===`assistant`&&e.status===`streaming`)?.profile,t=zn.value?.id||b.value?.activeAgentId||e||v.value?.activeAgentId||Object.entries(v.value?.activeAgentStates??{}).find(([,e])=>e===`running`)?.[0]||v.value?.memberIds[0],n=c.value.find(e=>e.id===t);return{name:n?.name||v.value?.name||`机器人`,avatar:n?.avatar||(v.value?.kind===`direct`?v.value.avatar:``)||``}}),Yn=H(()=>Rt.value===`agent`||Rt.value===`editAgent`),Xn=e=>e;async function Zn(){let e=++q,n=t.user?.id,r=()=>!an&&e===q&&t.user?.id===n,i=[];await Promise.all([P.value?Q(`/api/app/permissions/control`).then(e=>{r()&&(j.value=e)}).catch(e=>{i.push(e instanceof Error?e.message:`无法读取 Bot 权限`)}):Promise.resolve(),B.value?Q(`/api/app/background-tasks`).then(e=>{r()&&(M.value=vt(M.value,e.tasks))}).catch(e=>{i.push(e instanceof Error?e.message:`无法读取后台任务`)}):Promise.resolve()]),r()&&(N.value=i.join(`;`))}function Qn(){if(le.value=void 0,r.query.taskDetails===`goal`){let{taskDetails:e,...t}=r.query;a.replace({path:r.path,query:t})}}f(()=>[J.value?.id,We.value,r.query.taskDetails],async()=>{if(We.value||r.query.taskDetails!==`goal`||!J.value?.goal||J.value.id!==ln.value)return;let e=J.value.id;await o(),!an&&!We.value&&J.value?.id===e&&ln.value===e&&r.query.taskDetails===`goal`&&fe()});async function $n(){Mn()&&(Nr(),await a.push(`/conversations?view=bots`))}async function er(e,t=!1){let n=h.value.find(t=>t.kind===`direct`&&t.memberIds[0]===e.id&&!t.archived);if(!n){N.value=`此 Bot 的聊天尚不可用,请刷新后重试。`;return}if(t&&P.value){Mn()&&(Nr(),un.value?.openSettings(`my-bots`,void 0,e.id));return}t?(await Or(n.id),await Ar(`editAgent`,n)):await Or(n.id)}async function tr(){if(cn.value||r.query.view===`bots`||r.query.view===`chats`||!V.value)return;let e=h.value.find(e=>e.kind===`direct`&&e.memberIds[0]===V.value&&!e.archived);e&&await a.replace(`/conversations/${e.id}`)}async function nr(){let e=St.cursor,n=t.user?.id,[r,i]=await Promise.all([Q(`/api/app/agents`),Q(`/api/app/conversations`)]);if(an||t.user?.id!==n||St.cursor!==e)return;c.value=r.agents;let a=new Map(h.value.map(e=>[e.id,e]));St.conversations=i.conversations.map(e=>{let t=a.get(e.id);return t&&t.unreadVersion===e.unreadVersion&&[...sr].some(t=>t.startsWith(`${e.id}:`))?{...e,unread:t.unread,unreadCount:t.unreadCount}:e}),St.agents=c.value,h.value=St.conversations,rn||(rn=i.cursor,St.cursor=i.cursor)}async function rr(e=cn.value,n=!1,i){if(!e){sn++,v.value=void 0,_.value=[],b.value=null,C.value=[],E.value=null,J.value=null,oe.value=[],se.value=[],ae.value=[];return}let s=++sn,c=t.user?.id,l=Rr,u=()=>!an&&s===sn&&!i?.aborted&&t.user?.id===c&&Rr===l,d=Le.value,f=lt.value?.filesSnapshot()??[],p=ht.value,m=ln.value||(v.value?.id===e?J.value?.id:void 0),g=n?void 0:St.get(e,m),y=St.beginRead();n||(We.value=!g),v.value?.id!==e&&(v.value=h.value.find(t=>t.id===e),_.value=g?.messages??[],b.value=null,C.value=[],E.value=null,J.value=null,oe.value=[],se.value=[],ae.value=[],ht.value=null,Je.value=!1);try{let a=g??await Q(`/api/app/conversations/${e}?limit=50&toolDetails=lazy${m?`&taskId=${encodeURIComponent(m)}`:``}`,{signal:i});if(!u())return;let s=g??St.finishRead(y,a);g&&St.staleDetails.has(cZ(e,g.task?.id))&&queueMicrotask(()=>{u()&&v.value?.id===e&&rr(e,!0,i)});let c=mt.value?.isFollowingBottom()??!0;if(v.value=s.conversation,s.task&&St.selectedTasks.set(e,s.task.id),J.value=s.task??null,oe.value=s.tasks??[],se.value=s.assignments??[],ae.value=s.runtimeTasks??[],_.value=s.messages,b.value=s.run,x.value=s.approvalSummaries??[],C.value=s.interactions,E.value=s.context,d!==Le.value){if(Pe.set(d,f),Ie.set(d,p),J.value&&!m){let e=`yaovi:composer:group:${t.user?.id}:${v.value.id}`,n=`yaovi:composer:group:${Le.value}`;try{let t=localStorage.getItem(e);t&&!localStorage.getItem(n)&&(localStorage.setItem(n,t),localStorage.removeItem(e))}catch{}}if(await o(),!u())return;let e=Pe.get(Le.value);if(e?.length&&await lt.value?.attachFiles(e),!u())return;ht.value=Ie.get(Le.value)??null}if(n||(Je.value=s.hasOlder??s.messages.length===50),!n||c){if(await o(),!u())return;!n&&typeof r.query.unread!=`string`&&mt.value?.scrollToBottom(`auto`),typeof r.query.unread==`string`&&ar(r.query.unread)}}catch(t){if(u()&&m&&t instanceof _e&&t.status===404)try{let t=(await Q(`/api/app/conversations/${e}/tasks`,{signal:i})).tasks[0];if(u()&&t&&t.id!==m){await a.replace({query:{...r.query,taskId:t.id}});return}}catch{}u()&&(He.value=t instanceof Error?t.message:`加载失败`)}finally{St.cancelRead(y),s===sn&&(We.value=!1)}}let ir=0;async function ar(e){let t=++ir,n=cn.value,i=ln.value,s=r.path,c=()=>!an&&t===ir&&r.path===s&&v.value?.id===n&&cn.value===n&&ln.value===i&&r.query.unread===e;try{for(let t=0;t<100&&c();t++){if(await o(),!c()||mt.value?.scrollToMessage(e)||!Je.value||Ot.value)return;await Xr()}}finally{if(c()){let e={...r.query};delete e.unread,await a.replace({query:e})}}}f(()=>r.query.unread,e=>{typeof e==`string`&&!We.value&&v.value?.id===cn.value&&ar(e)},{flush:`post`});let or=et(),sr=new Set;async function cr(e){let t=v.value;if(!t||We.value||mn.value||typeof r.query.unread==`string`)return;let n=`${t.id}:${e.join(`,`)}`;if(sr.has(n))return;let i=new Set(_.value.filter(e=>e.role===`assistant`&&e.status===`complete`&&e.visible!==!1).map(e=>e.id));sr.add(n);try{await or.visible(`bot`,t.id,void 0,e.filter(e=>i.has(e)))}catch{}finally{sr.delete(n)}}async function lr(e){let t=e.currentTarget,n=t.value;if(n!==W$){await a.push({query:{...r.query,taskId:n}});return}if(t.value=J.value?.id??``,!v.value||v.value.kind!==`group`||jn.value)return;let i=v.value.id;jn.value=!0,He.value=``;try{let e=await Q(`/api/app/conversations/${i}/tasks`,{method:`POST`,body:{}});if(v.value?.id!==i)return;oe.value=[e.task,...oe.value.filter(t=>t.id!==e.task.id)],await a.push({query:{...r.query,taskId:e.task.id}})}catch(e){He.value=e instanceof Error?e.message:`新建话题失败`}finally{jn.value=!1}}async function ur(){if(!(!v.value||!J.value))try{await Q(`/api/app/conversations/${v.value.id}/tasks/${J.value.id}/stop`,{method:`POST`,body:{}}),await rr(void 0,!0)}catch(e){He.value=e instanceof Error?e.message:`停止任务失败`}}async function dr(){if(!(!v.value||!J.value))try{await Q(`/api/app/conversations/${v.value.id}/tasks/${J.value.id}/resume`,{method:`POST`,body:{requestId:pt()}}),await rr(void 0,!0)}catch(e){He.value=e instanceof Error?e.message:`恢复任务失败`}}async function fr(e,t,n){let r=v.value?.id;if(!r||J.value?.id!==e)throw Error(`话题已切换,请重新打开目标`);let i=await Q(`/api/app/conversations/${r}/tasks/${e}/plan`,{method:`PATCH`,body:{requestId:pt(),expectedRevision:t,acceptanceCriteria:n}});v.value?.id===r&&J.value?.id===e&&(J.value.goal=i.goal,await rr(r,!0))}function pr(e){if(e.button!==0||e.metaKey||e.ctrlKey||e.shiftKey||e.altKey)return;let t=e.target?.closest?.(`a[href]`);if(t)try{let n=new URL(t.getAttribute(`href`)||``,window.location.origin);if(n.origin!==window.location.origin||!/^\/conversations\/[^/]+$/.test(n.pathname)||!n.searchParams.get(`taskId`))return;e.preventDefault(),e.stopPropagation(),a.push(n.pathname+n.search)}catch{}}let mr=!1,hr=O(`connecting`),gr,_r,vr=[],yr;function br(){yr?.abort(),yr=void 0,on&&clearTimeout(on),on=void 0}function xr(e){mt.value?.isFollowingBottom(),v.value=e.conversation,_.value=e.messages,J.value=e.task??null,oe.value=e.tasks??[],b.value=e.run,C.value=e.interactions,x.value=e.approvalSummaries??[],E.value=e.context,se.value=e.assignments??[],ae.value=e.runtimeTasks??[],Je.value=e.hasOlder??!1}function Sr(){_r=void 0;try{for(let e of vr){let t=e.seq>St.cursor;if(St.apply(e),e.type===`message.changed`){let t=e.data;if(t.clientRequestId&&wt.value.some(e=>e.requestId===t.clientRequestId&&e.conversationId===t.conversationId&&(e.taskId??``)===(t.conversationTaskId??``)))try{Et(wt.value.filter(e=>e.requestId!==t.clientRequestId))}catch{}}if(e.type===`server.identity.changed`&&tt(e.data),t&&ft?.(e),String(e.type)===`background-task.changed`){let t=e.data;M.value=vt(M.value,[t])}if((String(e.type).startsWith(`bot.control.`)||String(e.type).startsWith(`bot.permission.`))&&Zn(),e.type===`project.changed`){let t=e.data;be.value=[...be.value.filter(e=>e.id!==t.id),t]}(/^(memory|project|collaboration)\./.test(e.type)||e.type===`message.changed`&&e.data.activity)&&ge.value++}}catch{vr=[],gr?.close(),Dr();return}if(vr=[],rn=St.cursor,c.value=St.agents,h.value=St.conversations,cn.value){let e=St.get(cn.value,ln.value||J.value?.id);e?xr(e):h.value.some(e=>e.id===cn.value)?J.value&&!St.details.has(cZ(cn.value,J.value.id))&&(a.replace(`/conversations/${cn.value}`),rr(cn.value,!0)):a.replace(`/conversations`)}ft&&dt.value++}async function Cr(e){let n=t.user?.id,r=Rr,i=await Q(`/api/app/capabilities`,{signal:e});if(e.aborted||an||Rr!==r||t.user?.id!==n)return;mr=i.features.includes(sg),ve.value=i.features.includes(`bot-file-memory-v1`),A.value=i.features,i.csrfToken&&ye(i.csrfToken);let a=St.beginRead();try{let i=new URLSearchParams({details:`selected`,toolDetails:`lazy`});cn.value&&i.set(`conversationId`,cn.value),ln.value&&i.set(`taskId`,ln.value);let a=await Q(`/api/app/workspace/snapshot?${i}`,{signal:e});if(e.aborted||an||Rr!==r||t.user?.id!==n||(St.hydrate(a),c.value=a.agents,h.value=St.conversations,rn=a.cursor,be.value=a.projects??[],tt(a.serverIdentity),await Zn(),e.aborted||an||Rr!==r||t.user?.id!==n))return;await tr()}finally{St.cancelRead(a)}}function wr(){if(gr?.close(),an)return;if(!navigator.onLine){Tr();return}let e=new EventSource(`/api/app/events/stream?after=${rn}&toolDetails=lazy${mr?`&format=patch-v1`:``}`);gr=e,e.addEventListener(`workspace`,t=>{if(!(an||gr!==e))try{vr.push(JSON.parse(t.data)),_r===void 0&&(_r=requestAnimationFrame(Sr))}catch{e.close(),He.value=`消息同步失败,正在恢复`,Dr()}}),e.addEventListener(`ready`,t=>{gr===e&&(Sr(),He.value=``,hr.value=`online`,tt(JSON.parse(t.data).serverIdentity))}),e.addEventListener(`reset`,()=>{!an&&gr===e&&(e.close(),Dr())}),e.onerror=()=>{an||gr!==e||(hr.value=`connecting`,He.value=`连接中断,正在重连`,Q(`/api/app/capabilities`).catch(t=>{t instanceof _e&&[401,403].includes(t.status)&&(e.close(),hr.value=`expired`,He.value=t.message)}))}}function Tr(){br(),gr?.close(),gr=void 0,hr.value=`offline`,He.value=`网络已断开,恢复连接后将自动同步`}function Er(){!an&&t.user?.id&&Dr()}async function Dr(e=!1){if(br(),an||!t.user?.id)return;if(!navigator.onLine){Tr();return}let n=new AbortController,r=t.user.id,i=Rr;yr=n;let a=()=>!an&&!n.signal.aborted&&yr===n&&Rr===i&&t.user?.id===r;gr?.close(),gr=void 0,vr=[],_r!==void 0&&cancelAnimationFrame(_r),_r=void 0;try{if(await Cr(n.signal),!a())return;let t=!e&&cn.value?St.get(cn.value,ln.value||J.value?.id):void 0;t?(xr(t),St.staleDetails.has(cZ(t.conversation.id,t.task?.id))&&await rr(t.conversation.id,!0,n.signal)):await rr(cn.value,!1,n.signal),a()&&wr()}catch(e){if(!a())return;if(!navigator.onLine){Tr();return}if(He.value=e instanceof Error?e.message:`连接中断`,e instanceof _e&&[401,403].includes(e.status))return;on=setTimeout(()=>void Dr(),1500)}finally{yr===n&&(yr=void 0)}}async function Or(e){let t=h.value.find(t=>t.id===e),n;if(Rt.value===`editAgent`&&(t?.kind===`direct`?t.memberIds[0]:void 0)!==zt.value){if(!Mn())return;let e=Ut.value;Nr(),t?.kind===`direct`&&(n=e)}He.value=``,Ge.value=[],qe.value=[],Ve.value=``,gt.value=null,bt.value=null,await a.push(`/conversations/${e}`),n!==void 0&&t?.kind===`direct`&&await Ar(`editAgent`,t,n)}function kr(e,t=!1){let n=h.value.find(t=>t.id===e);if(n?.kind===`direct`&&P.value&&(t||window.matchMedia?.(`(max-width: 900px)`).matches)){Mn()&&(Nr(),un.value?.openSettings(`my-bots`,void 0,n.memberIds[0]));return}n&&Ar(n.kind===`direct`?`editAgent`:`editGroup`,n)}async function Ar(e,t=v.value,n=!1){if(e===`editAgent`&&Rt.value===`editAgent`&&zt.value===t?.memberIds[0]){Ht.value?.focus?.();return}if(!Mn())return;let r=++Jt,i=Rr,a=()=>r===Jt&&i===Rr&&!an;e===`editAgent`&&(le.value=void 0,hn.value=void 0,Ut.value=n),He.value=``,Rt.value=e,me.value=!1,zt.value=``,Bt.value=e===`editAgent`||e===`editGroup`?t?.id??``:``,Qt.value=`custom`,Object.assign($,{name:``,avatar:e===`agent`?ze(Ne(`new-agent`,`机器人`)):``,job:``,antiJobs:[],voice:``,voiceCustom:``,actBias:``,instructions:``,description:``,execution:`profile`,canManageTeam:!0,canCollaborate:!0,memoryEnabled:!0,approvalPolicy:`ask`,memberIds:[],memberRoles:{},administratorId:``,mode:ve.value?`discussion`:`host`,autoReplyIds:[],maxReplyRounds:3});try{if(e===`editAgent`){let e=c.value.find(e=>e.id===t?.memberIds[0]);if(!e)throw Error(`机器人不存在,请刷新后重试`);if(Object.assign($,e),$.description??=``,$.job??=``,$.antiJobs??=[],$.voice??=``,$.voiceCustom??=``,$.actBias??=``,e.remoteAgentId){let t=(await Q(`/api/app/nodes/${e.nodeId}/agents`)).agents.find(t=>t.id===e.remoteAgentId);if(!a())return;t&&Object.assign($,t)}$.approvalPolicy=e.approvalPolicy??`ask`,zt.value=e.id}e===`editGroup`&&t&&(zt.value=t.id,Object.assign($,t,{mode:t.collaborationMode??t.mode,memberIds:[...t.memberIds],autoReplyIds:[...t.autoReplyIds],memberRoles:Object.fromEntries(Object.entries(t.memberRoles??{}).map(([e,t])=>[e,{...t}]))})),await o(),a()&&Vt.value?.showModal()}catch(e){if(!a())return;He.value=String(e),Rt.value=null}}let jr=O(!1),Mr=O(!1);function Nr(){Rt.value===`editGroup`&&(Mr.value||jr.value&&!window.confirm(`权限更改尚未保存,确定放弃?`))||(jr.value=!1,Jt++,zt.value=``,Vt.value?.close(),Rt.value=null,Bt.value=``)}function Pr(e){Object.assign($,e),$.description??=``,$.job??=``,$.antiJobs??=[],$.voice??=``,$.voiceCustom??=``,$.actBias??=``,Fr.value=e.modelSettings&&e.expectedRevision?{modelSettings:e.modelSettings,expectedRevision:e.expectedRevision}:void 0,Lr()}f(()=>$.memberIds.slice(),e=>{e.includes($.administratorId)||($.administratorId=e[0]??``),$.autoReplyIds=$.autoReplyIds.filter(t=>e.includes(t)),$.memberRoles=Object.fromEntries(Object.entries($.memberRoles).filter(([t])=>e.includes(t)))});let Fr=O();async function Ir(e){if(Ue.value||Rt.value!==`agent`)return;let t=Jt,n=Rr,r=()=>t===Jt&&n===Rr&&!an;Ue.value=!0,He.value=``;let i={...e,computer:`auto`,envs:{vm:!0,cloud:!0,desktop:!0},execution:`profile`};try{let e=await Q(`/api/app/agents`,{method:`POST`,body:Xn(i)});if(!r())return;if(e.confirmationRequired){if(!e.confirmationTarget)throw Error(`模型确认信息不完整,请重新选择模型。`);if(!window.confirm(e.confirmationMessage||`确认使用所选模型创建 Bot?`)||(e=await Q(`/api/app/agents`,{method:`POST`,body:Xn({...i,confirmedModel:e.confirmationTarget})}),!r()))return}if(!e.agent)throw Error(`创建尚未确认,请刷新 Bot 列表后检查。`);let t=e.agent.id;if(Nr(),await Promise.all([nr(),Zn()]),n!==Rr||an)return;let a=h.value.find(e=>e.kind===`direct`&&e.memberIds[0]===t);a&&await Or(a.id)}catch(e){n===Rr&&!an&&(He.value=e instanceof Error?e.message:`创建失败`)}finally{n===Rr&&!an&&(Ue.value=!1)}}async function Lr(){let e=Rt.value,t=Jt,n=Rr,r=Fr.value;Fr.value=void 0;let i,a=()=>t===Jt&&n===Rr&&!an;Ue.value=!0,He.value=``;try{let t={name:$.name,...Yn.value?{avatar:$.avatar,description:$.description.trim(),canManageTeam:$.canManageTeam,approvalPolicy:$.approvalPolicy,...ve.value?{canCollaborate:$.canCollaborate,memoryEnabled:$.memoryEnabled}:{}}:{},instructions:$.instructions},o={job:$.job.trim()?$.job.trim():null,antiJobs:$.antiJobs.length?$.antiJobs:null,voice:$.voice||null,voiceCustom:$.voice===`custom`&&$.voiceCustom.trim()?$.voiceCustom:null,actBias:$.actBias||null},s=Object.fromEntries(Object.entries(o).filter(([,e])=>e!=null));if(Zt.value)await Q(`/api/app/agents/${zt.value}`,{method:`PATCH`,body:{approvalPolicy:$.approvalPolicy}});else if(Rt.value===`agent`){let e=await Q(`/api/app/agents`,{method:`POST`,body:{...t,...s,computer:`auto`,envs:{vm:!0,cloud:!0,desktop:!0},execution:`profile`}});await nr();let n=h.value.find(t=>t.kind===`direct`&&t.memberIds[0]===e.agent.id);n&&await Or(n.id)}else if(Rt.value===`editAgent`){let e={...t,...o,...r},n=await Q(`/api/app/agents/${zt.value}`,{method:`PATCH`,body:Xn(e)});if(!a())return;if(n.confirmationRequired){if(!window.confirm(n.confirmationMessage||`确认使用此模型?`))return;if(!n.confirmationTarget)throw Error(`模型确认响应无效,请重新加载。`);n=await Q(`/api/app/agents/${zt.value}`,{method:`PATCH`,body:Xn({...e,confirmedModel:n.confirmationTarget})})}if(r&&!n.agent)throw Error(`模型设置尚未保存,请重新加载后重试。`);i=n.agent}else{let e={...t,administratorId:$.administratorId||$.memberIds[0],mode:$.mode===`discussion`?`free`:$.mode,...ve.value?{collaborationMode:$.mode}:{},autoReplyIds:$.autoReplyIds,maxReplyRounds:$.maxReplyRounds,...Rt.value===`editGroup`?{expectedRevision:Yt.value?.revision??0}:{},memberIds:$.memberIds,memberRoles:$.memberRoles};await Or((await Q(Rt.value===`group`?`/api/app/conversations`:`/api/app/conversations/${zt.value}`,{method:Rt.value===`group`?`POST`:`PATCH`,body:Xn(e)})).conversation.id)}if(!a())return;e===`editAgent`?Ht.value?.markSaved?.(i):Nr(),await nr(),P.value&&await Zn(),n===Rr&&!an&&await rr()}catch(e){a()&&(He.value=e instanceof Error?e.message:`保存失败`)}finally{n===Rr&&(Ue.value=!1)}}let Rr=0,zr=new Map;function Br(e,n,r,i){clearTimeout(zr.get(n)),zr.set(n,setTimeout(()=>{zr.delete(n),!(an||t.user?.id!==i||Le.value!==n)&&(e.cursor!==void 0&&St.cursor>=e.cursor&&gr?.readyState===EventSource.OPEN||rr(r,!0).catch(()=>{He.value=`消息已发送,正在恢复同步`}))},e.cursor===void 0?0:2e3))}async function Vr(){let e=v.value;if(!e||Ue.value||!Ve.value.trim()&&!Ge.value.length)return;Ue.value=!0,He.value=``;let t=J.value?.id,n=ce.value&&!J.value?.goal?`goal`:void 0;try{let r=pt(),i={requestId:r,conversationId:e.id,taskId:t,content:Ve.value,attachments:Ge.value,createdAt:Date.now(),afterSeq:Math.max(0,..._.value.map(e=>e.seq)),state:`queued`,body:{requestId:r,...n?{mode:n}:{},...ve.value?{...e.kind===`direct`&&we.value?{projectId:we.value}:{},...Te.value&&e.collaborationMode===`discussion`?{rounds:Te.value}:{},...ce.value&&e.collaborationMode===`discussion`?{coordinatorId:Ee.value||ke.value?.id}:{}}:{},...J.value?{taskId:J.value.id}:{},content:Ve.value,mentionIds:qe.value,fileIds:Ge.value.map(e=>e.id)}};return Et([...wt.value,i]),Ve.value=``,Ge.value=[],qe.value=[],ce.value=!1,Hr(i),!0}catch(e){He.value=e instanceof Error?e.message:`发送失败`}finally{Ue.value=!1}}async function Hr(e,n){if(Tt.has(e.requestId))return;let r=t.user?.id,i=Rr;Tt.add(e.requestId);try{Et(wt.value.map(t=>t.requestId===e.requestId?{...t,state:`sending`,error:void 0}:t));let a=await Q(`/api/app/conversations/${e.conversationId}/messages`,{method:`POST`,body:e.body,...n?{signal:n}:{}});if(an||Rr!==i||t.user?.id!==r)return;Sr(),St.acceptReceipt(a),h.value=St.conversations;let o=St.get(e.conversationId,e.taskId);return o&&v.value?.id===e.conversationId&&(J.value?.id??``)===(e.taskId??``)&&(xr(o),Br(a,Le.value,e.conversationId,r)),Et(wt.value.filter(t=>t.requestId!==e.requestId)),a}catch(n){if(!an&&Rr===i&&t.user?.id===r){if(!wt.value.some(t=>t.requestId===e.requestId))return;let t=n instanceof Error?n.message:`发送结果尚未确认`,r=n instanceof _e&&n.status>=400&&n.status<500&&n.status!==408,i=wt.value.map(n=>n.requestId===e.requestId?{...n,state:r?`failed`:`uncertain`,error:t}:n);try{Et(i)}catch{wt.value=i}He.value=t}}finally{Tt.delete(e.requestId)}}function Ur(e){let t=wt.value.find(t=>t.requestId===e);t&&Hr(t)}async function Wr(e,n){let r=v.value,i=t.user?.id,a=Rr,o=Le.value,s=J.value?.id;if(!r||r.archived||Ue.value||We.value||n.aborted)throw Error(`当前会话暂时无法发送语音,请稍后重试。`);let c=()=>!an&&!n.aborted&&t.user?.id===i&&Rr===a&&Le.value===o&&cn.value===r.id,l=new Map,u=e=>{if(e.type!==`run.changed`)return;let t=e.data;t.conversationId===r.id&&t.conversationTaskId===s&&l.set(t.id,t)};ft=u,Ue.value=!0;let d=!0;try{let a=pt(),u={requestId:a,conversationId:r.id,taskId:s,content:e,attachments:[],createdAt:Date.now(),afterSeq:Math.max(0,..._.value.map(e=>e.seq)),state:`queued`,body:{requestId:a,content:e,mentionIds:[],fileIds:[],...s?{taskId:s}:{},...ve.value&&r.kind===`direct`&&we.value?{projectId:we.value}:{},...ve.value&&Te.value&&r.collaborationMode===`discussion`?{rounds:Te.value}:{}}};Et([...wt.value,u]);let p=await Hr(u,n);if(!c())throw iQ();if(!p?.run?.id)throw Error(`发送结果尚未确认,请在聊天中查看。语音不会重复发送。`);let m=p.run.steeredInto??p.run.id;Sr(),l.has(p.run.id)||l.set(p.run.id,p.run),St.acceptReceipt(p),h.value=St.conversations;let g=St.get(r.id,s);return g&&xr(g),Br(p,o,r.id,i),Ue.value=!1,d=!1,await new Promise((e,i)=>{let a=!1,o=()=>{},u,d=(t,r=``)=>{a||(a=!0,o(),clearTimeout(u),n.removeEventListener(`abort`,p),t?i(t):e(r))},p=()=>d(iQ()),h=()=>{if(!c())return p();if(hr.value!==`online`)return d(Error(`连接中断,本次语音等待已结束,请在聊天中查看消息状态。`));let e=St.get(r.id,s),t=e?.run?.id===m?e.run:void 0,n=l.get(m),i=t&&(!n||t.updatedAt>n.updatedAt)?t:n,a=vQ(m,i,e?.messages??[]);a&&(`error`in a?d(Error(a.error)):d(void 0,a.text))};n.addEventListener(`abort`,p,{once:!0}),o=f([dt,_,b,Le,cn,()=>t.user?.id,hr],h),u=setTimeout(()=>d(Error(`本轮仍未收到完整回复,本次语音等待已结束。可在聊天中继续查看进展。`)),6e5),h()})}finally{ft===u&&(ft=void 0),d&&Rr===a&&(Ue.value=!1)}}async function Gr(e,t=v.value?.id){let n=h.value.find(e=>e.id===t);if(n){if(e===`archive`)return Kr(n.archived?`restore`:`archive`,n.id);try{await Q(`/api/app/conversations/${n.id}`,{method:`PATCH`,body:{pinned:!n.pinned}}),await nr(),await rr()}catch(e){He.value=String(e)}}}async function Kr(e,t,n=!1){let r=h.value.find(e=>e.id===t);if(!r||at.value)return;let i=n?ot:st;i.value=``,at.value=t,ct.value=e;try{let n=`/api/app/conversations/${t}/lifecycle`,i;if(e!==`restore`){let t=await Q(n),r=t.groups.filter(e=>e.administrator);if(r.length)throw Error(`此 Bot 是群聊${r.map(e=>`「${e.name}」`).join(`、`)}的管理者,请先转交管理权,再归档或删除。`);let a=e===`delete`?`永久删除`:`归档`,o=`${a} ${t.kind===`direct`?`Bot`:`群聊`}「${t.name}」${e===`delete`?`及其聊天记录`:``}?`;if(t.groups.length&&(o+=`\n此 Bot 已加入群聊:${t.groups.map(e=>`「${e.name}」`).join(`、`)}。确认后会先从这些群聊移除,再${a}。`),o+=e===`delete`?`\n此操作无法撤销,${t.kind===`group`?`成员 Bot 和`:``}文件库中的文件会保留。`:`
|
|
277
|
-
聊天记录会保留,可在搜索的“已归档”中取消归档。`,!confirm(o))return;i=t.confirmationToken}await Q(n,{method:`POST`,body:{action:e,...i?{confirmationToken:i}:{}}}),e===`delete`&&(h.value=h.value.filter(e=>e.id!==t),r.kind===`direct`&&(c.value=c.value.filter(e=>e.id!==r.memberIds[0])),cn.value===t&&await a.replace(`/conversations`)),await nr(),cn.value===t&&await rr()}catch(e){i.value=e instanceof Error?e.message:`操作失败,请重试`}finally{at.value=``,ct.value=void 0}}async function qr(e){if(Yt.value)try{await Q(`/api/app/conversations/${Yt.value.id}/agents/${e}/stop`,{method:`POST`,body:{}}),await rr(),await nr()}catch(e){He.value=e instanceof Error?e.message:`停止失败`}}async function Jr(e){let t=K.value?.id??(v.value?.activeRunId&&!G.value.has(v.value.activeRunId)?v.value.activeRunId:void 0)??J.value?.activeRunId;if(t)try{await Q(`/api/app/runs/${t}/${e}`,{method:`POST`,body:{}}),await rr(void 0,!0)}catch(e){He.value=String(e)}}async function Yr(e,t){if(!Ye.value){Ye.value=e.id,Ze.value=``;try{let n=Xh(e.kind,t);await Q(`/api/app/interactions/${encodeURIComponent(e.id)}/${n.action}`,{method:`POST`,body:n.body}),await rr(void 0,!0)}catch(n){if(Ze.value=n instanceof Error?n.message:`审批答复失败,请重试`,e.kind===`approval`&&t===`full_access`)try{await rr(void 0,!0)}catch{}}finally{Ye.value=``}}}async function Xr(){let e=v.value;if(!e||Ot.value)return;Ot.value=!0;let t=St.beginRead(),n=J.value?.id,r=sn;try{let i=await Q(`/api/app/conversations/${e.id}/messages?limit=50&toolDetails=lazy&before=${_.value[0]?.seq??0}${J.value?`&taskId=${J.value.id}`:``}`);if(r!==sn||v.value?.id!==e.id||J.value?.id!==n)return;let a=St.get(e.id,n);if(!a)return;let o=St.finishRead(t,{...a,messages:i.messages,cursor:i.cursor});o.hasOlder=i.messages.length===50,_.value=o.messages,Je.value=o.hasOlder}catch(e){He.value=String(e)}finally{St.cancelRead(t),Ot.value=!1}}return f(()=>r.query.view,()=>{tr()}),f([cn,ln],()=>{Pe.set(Le.value,lt.value?.filesSnapshot()??[]),Ie.set(Le.value,ht.value),Ge.value=[],qe.value=[],Ve.value=``,Ft=[],It=[],rr(),tr()}),f(()=>t.user?.id,(e,t)=>{e!==t&&(he.value?.close(),ve.value=!1,be.value=[],ge.value++,Rr++,q++,A.value=[],j.value=void 0,M.value=[],N.value=``,Ue.value=!1,Nr(),sn++,br(),Ve.value=``,Ge.value=[],qe.value=[],ht.value=null,Ft=[],It=[],gr?.close(),gr=void 0,vr=[],_r!==void 0&&cancelAnimationFrame(_r),_r=void 0,rn=0,St.hydrate({agents:[],conversations:[],details:[],cursor:0}),St.selectedTasks.clear(),c.value=[],h.value=[],_.value=[],v.value=void 0,oe.value=[],J.value=null,b.value=null,C.value=[],E.value=null,Pe.clear(),Ie.clear(),e&&Dr())}),m(async()=>{window.addEventListener(`offline`,Tr),window.addEventListener(`online`,Er),await Dr(!0),ie=setInterval(()=>{document.visibilityState===`visible`&&navigator.onLine&&(P.value||B.value)&&Zn()},1e4)}),i(()=>{window.removeEventListener(`offline`,Tr),window.removeEventListener(`online`,Er);for(let e of zr.values())clearTimeout(e);zr.clear(),an=!0,q++,ie&&clearInterval(ie),gr?.close(),_r!==void 0&&cancelAnimationFrame(_r),sn++,br()}),(e,r)=>(u(),k(Rj,{ref_key:`shell`,ref:un,"server-name":R(t).serverIdentity?.displayName,"user-name":R(t).accountDisplayName,"user-avatar":R(t).user?.avatar,"is-admin":R(t).user?.role===`admin`,features:A.value,"upstream-ready":R(t).upstreamReady,"upstream-error":R(t).upstreamError,theme:R(n).resolvedTheme,"theme-preference":R(n).theme,"sidebar-title":`聊天`,"sidebar-context-title":`聊天列表`,onLogout:R(t).logout,onToggleTheme:R(n).toggle,onSetTheme:R(n).setTheme,onCreateAgent:r[68]||=e=>Ar(`agent`),onCreateGroup:r[69]||=e=>Ar(`group`),onBotSettingsChanged:Be},{sidebar:S(()=>[U(YI,{conversations:h.value,agents:c.value,selected:cn.value,"main-bot-id":V.value,"bot-control":P.value,"directory-selected":W.value,"is-admin":R(t).user?.role===`admin`,"background-count":B.value?te.value.active:void 0,onMainBot:Gt,onDirectory:$n,onSelect:Or,onSettings:kr,onPin:r[0]||=e=>Gr(`pin`,e),onArchive:r[1]||=e=>Gr(`archive`,e),onDelete:r[2]||=e=>Kr(`delete`,e)},null,8,[`conversations`,`agents`,`selected`,`main-bot-id`,`bot-control`,`directory-selected`,`is-admin`,`background-count`])]),"mobile-sidebar":S(()=>[U(YI,{conversations:h.value,agents:c.value,selected:cn.value,"main-bot-id":V.value,"bot-control":P.value,"directory-selected":W.value,"is-admin":R(t).user?.role===`admin`,"background-count":B.value?te.value.active:void 0,onMainBot:Gt,onDirectory:$n,onSelect:Or,onSettings:r[3]||=e=>kr(e,!0),onPin:r[4]||=e=>Gr(`pin`,e),onArchive:r[5]||=e=>Gr(`archive`,e),onDelete:r[6]||=e=>Kr(`delete`,e)},null,8,[`conversations`,`agents`,`selected`,`main-bot-id`,`bot-control`,`directory-selected`,`is-admin`,`background-count`])]),default:S(()=>[W.value?(u(),F(`div`,IQ,[N.value?(u(),F(`p`,LQ,s(N.value),1)):z(``,!0),U(aL,{"is-admin":R(t).user?.role===`admin`,agents:c.value,"main-bot-id":V.value,onProfile:Kt,onBack:r[7]||=e=>R(a).push(`/conversations?view=chats`),onSelect:r[8]||=e=>er(e),onEdit:r[9]||=e=>er(e,!0),onCreate:r[10]||=e=>Ar(`agent`),onManage:r[11]||=e=>un.value?.openSettings(`my-bots`)},null,8,[`is-admin`,`agents`,`main-bot-id`])])):z(``,!0),d(D(`div`,{ref_key:`dockRowEl`,ref:Sn,class:`conversation-with-computer`,style:l({"--workspace-dock-width":`${wn.value}px`})},[D(`section`,{class:y([`workspace-chat`,{"workspace-chat--main":ee.value&&B.value}]),"aria-label":`聊天`,onClickCapture:pr},[U(sZ,{onProfile:r[15]||=e=>v.value&&Ar(v.value.kind===`direct`?`editAgent`:`editGroup`,v.value,!0),"current-goal-id":J.value?.goal?.id,"activity-agents":c.value,onTaskDetails:r[16]||=e=>fe(),onRuntimeDetails:r[17]||=e=>fe(e),onVisibleMessages:cr,ref_key:`timeline`,ref:mt,identity:`${cn.value}:${J.value?.id??``}`,"loading-older":Ot.value,messages:Dt.value,title:Bn.value,subtitle:v.value?.kind===`group`?`${Rn.value.length} 位成员`:ee.value?(ne.value?`正在回复`:`可以继续对话`)+(B.value&&te.value.active?` · 工作流 ${te.value.active}`:``):``,"header-main-bot":ee.value,"header-avatar-name":Vn.value,"header-avatar":Hn.value,"header-avatar-kind":v.value?.kind===`group`?`team`:`agent`,"header-avatar-members":Un.value,"header-avatar-state":ee.value?ne.value?`working`:`idle`:zn.value?R(HI)(v.value,zn.value.id):`idle`,"header-avatar-activity-key":v.value?.lastSeq,"frosted-header":``,loading:We.value,"has-older":Je.value&&!!v.value,"show-tools":xt.value,"allow-branch":!1,thinking:ne.value||!!Gn.value,"thinking-label":qn.value,"thinking-identity":Jn.value,"agent-avatars":Object.fromEntries(c.value.map(e=>[e.id,e.avatar])),"show-assistant-identity":v.value?.kind===`group`,"agent-states":Object.fromEntries(Rn.value.map(e=>[e.id,R(HI)(v.value,e.id)])),"mention-names":Rn.value.map(e=>e.name),"empty-logo":!!v.value,"empty-title":v.value?`聊点什么`:`还没有聊天`,"empty-description":v.value?``:`创建机器人,或选择成员新建群聊。`,interaction:C.value[0]?{id:C.value[0].id,kind:C.value[0].kind,prompt:C.value[0].message,options:C.value[0].choices,reviewAvailable:C.value[0].reviewAvailable,approvalReview:C.value[0].approvalReview}:null,"interaction-busy":!!Ye.value,"interaction-error":Ze.value,"approval-agent-name":c.value.find(e=>e.id===C.value[0]?.agentId)?.name,"can-manage-permissions":R(t).user?.role===`admin`,onLoadOlder:Xr,onQuote:r[18]||=e=>ht.value=e,onPreview:Pt,onPreviewFile:Pt,onRetrySend:Ur,onBrowserControl:In,onCredentialDraft:Fn,onApprovalChoice:r[19]||=e=>C.value[0]&&Yr(C.value[0],e),onClarify:r[20]||=e=>C.value[0]&&Yr(C.value[0],e)},{"header-leading":S(()=>[v.value?(u(),F(`button`,{key:0,class:`workspace-list-back icon-button`,"aria-label":`返回 Bot 列表`,onClick:r[12]||=e=>R(a).push(P.value?`/conversations?view=chats`:`/conversations`)},[U(Z,{name:`chevron-left`})])):z(``,!0)]),"header-actions":S(()=>[v.value?(u(),F(`div`,RQ,[v.value.kind===`group`&&oe.value.length?(u(),F(`span`,zQ,[D(`select`,{class:`task-picker`,"aria-label":`当前话题`,"aria-busy":jn.value,disabled:jn.value,value:J.value?.id,onChange:lr},[(u(!0),F(T,null,p(oe.value,e=>(u(),F(`option`,{key:e.id,value:e.id},s(!e.messageCount&&e.titleSource===`automatic`?`新话题`:e.title),9,VQ))),128)),D(`option`,{value:W$},`新建话题`)],40,BQ),U(Z,{name:`chevron-down`,size:14})])):z(``,!0),v.value.kind===`group`?(u(),F(`button`,{key:1,class:`icon-button`,"aria-label":`群聊设置`,title:`群聊设置`,onClick:r[13]||=e=>Ar(`editGroup`)},[U(Z,{name:`settings`})])):z(``,!0),D(`button`,{type:`button`,class:`icon-button`,"aria-label":`Inspector`,title:`Inspector`,"aria-pressed":hn.value===`inspector`,onClick:r[14]||=e=>Nn(`inspector`)},[U(Z,{name:`bug`})],8,HQ)])):z(``,!0)]),_:1},8,`current-goal-id.activity-agents.identity.loading-older.messages.title.subtitle.header-main-bot.header-avatar-name.header-avatar.header-avatar-kind.header-avatar-members.header-avatar-state.header-avatar-activity-key.loading.has-older.show-tools.thinking.thinking-label.thinking-identity.agent-avatars.show-assistant-identity.agent-states.mention-names.empty-logo.empty-title.empty-description.interaction.interaction-busy.interaction-error.approval-agent-name.can-manage-permissions`.split(`.`)),He.value?(u(),F(`p`,UQ,[w(s(He.value),1),D(`button`,{class:`icon-button`,onClick:r[21]||=e=>He.value=``,"aria-label":`关闭错误`},[U(Z,{name:`close`})])])):z(``,!0),v.value?(u(),k(nQ,{key:Le.value,ref_key:`composer`,ref:lt,mode:`group`,"bot-layout":``,"draft-key":Le.value,"voice-bot-id":zn.value?.id,"voice-active":ut.value,"delivery-mode":ce.value,"onUpdate:deliveryMode":r[30]||=e=>ce.value=e,"delivery-available":v.value.kind===`group`&&!J.value?.goal,"delivery-disabled":!Ae.value||Ue.value||We.value||!!J.value?.activeRunId,"delivery-disabled-reason":Ae.value?``:`负责人需要是本机上未归档的 Bot`,disabled:v.value.archived||We.value||v.value.id!==cn.value,sending:Ue.value,"stop-while-running":``,streaming:re.value,"tool-trace-visible":xt.value,reference:jt.value,"mention-options":v.value.kind===`group`?Rn.value.map(e=>({id:e.id,label:e.name,insertText:`@${e.name} `})):[],onSend:Lt,onStop:r[31]||=e=>Jr(`stop`),onToolTraceToggle:r[32]||=e=>xt.value=!xt.value,onClearReference:r[33]||=e=>ht.value=null,onError:r[34]||=e=>He.value=e},{activity:S(()=>[K.value?.status===`queued`?(u(),F(`p`,WQ,`正在等待可用机器人`)):v.value.collaborationWaiting?(u(),F(`p`,GQ,[D(`button`,{onClick:r[22]||=e=>he.value?.open(`collaboration`,v.value.memberIds[0])},`等待同伴回复 · 查看协作`)])):z(``,!0)]),"model-controls":S(({contextTarget:e,optionsTarget:n})=>[zn.value?(u(),k(qG,{compact:``,"options-target":n,"context-target":e,key:`${R(t).user?.id}:${zn.value.id}`,agent:zn.value,context:E.value,running:ne.value,disabled:v.value.archived||We.value||Ue.value,onSaved:r[23]||=e=>{c.value=c.value.map(t=>t.id===e.id?e:t)}},null,8,[`options-target`,`context-target`,`agent`,`context`,`running`,`disabled`])):(u(),k(VW,{key:1,compact:``,snapshot:E.value},null,8,[`snapshot`]))]),"realtime-voice":S(({disabled:e})=>[U(_Q,{disabled:e,"draft-key":Le.value,"bot-id":zn.value?.id,submit:Wr,onActiveChange:r[24]||=e=>ut.value=e,onError:r[25]||=e=>He.value=e,onSettings:r[26]||=e=>un.value?.openSettings(`system-voice`)},null,8,[`disabled`,`draft-key`,`bot-id`])]),"before-input":S(()=>[v.value?.kind===`group`&&x.value.length?(u(),F(`aside`,KQ,[(u(!0),F(T,null,p(x.value,e=>(u(),F(`button`,{key:e.id,type:`button`,onClick:t=>Or(e.displayConversationId)},`等待你处理 · 前往执行 Bot 单聊`,8,qQ))),128))])):z(``,!0),ve.value?(u(),F(`div`,JQ,[v.value.kind===`direct`&&be.value.some(e=>e.memberIds.includes(v.value.memberIds[0]))?(u(),F(`label`,YQ,[r[71]||=w(`当前项目`,-1),d(D(`select`,{"onUpdate:modelValue":r[27]||=e=>we.value=e},[r[70]||=D(`option`,{value:``},`不关联项目`,-1),(u(!0),F(T,null,p(be.value.filter(e=>!e.archived&&e.memberIds.includes(v.value.memberIds[0])),e=>(u(),F(`option`,{key:e.id,value:e.id},s(e.name),9,XQ))),128))],512),[[Me,we.value]])])):z(``,!0),v.value.collaborationMode===`discussion`&&!ce.value?(u(),F(`label`,ZQ,[r[73]||=w(`讨论轮数`,-1),d(D(`select`,{"onUpdate:modelValue":r[28]||=e=>Te.value=e},[r[72]||=D(`option`,{value:void 0},`按消息要求`,-1),(u(),F(T,null,p(12,e=>D(`option`,{key:e,value:e},s(e)+` 轮`,9,QQ)),64))],512),[[Me,Te.value]])])):z(``,!0),ce.value&&v.value.collaborationMode===`discussion`?(u(),F(`label`,$Q,[r[74]||=w(`交付负责人`,-1),d(D(`select`,{"onUpdate:modelValue":r[29]||=e=>Ee.value=e},[D(`option`,e$,s(ke.value?.name??`请先授权负责人`),1),(u(!0),F(T,null,p(Oe.value,e=>(u(),F(`option`,{key:e.id,value:e.id},s(e.name),9,t$))),128))],512),[[Me,Ee.value]])])):z(``,!0)])):z(``,!0)]),_:1},8,[`draft-key`,`voice-bot-id`,`voice-active`,`delivery-mode`,`delivery-available`,`delivery-disabled`,`delivery-disabled-reason`,`disabled`,`sending`,`streaming`,`tool-trace-visible`,`reference`,`mention-options`])):z(``,!0)],34),En.value?(u(),F(T,{key:0},[U(YA,{class:`desktop-only-dock-resize`,label:`调整右侧栏宽度`,onDrag:kn,onReset:An}),D(`aside`,{class:`conversation-dock`,style:l(Tn.value)},[le.value?(u(),k(mq,{key:`${J.value?.id}:${le.value}`,goal:J.value?.goal,assignments:se.value,agents:c.value,"runtime-tasks":de.value,artifacts:Dt.value.find(e=>e.goalCard)?.goalCard?.artifacts,"runtime-only":le.value===`runtime`,"save-criteria":fr,onClose:Qn,onStop:ur,onResume:dr},null,8,[`goal`,`assignments`,`agents`,`runtime-tasks`,`artifacts`,`runtime-only`])):hn.value===`inspector`&&v.value?(u(),k(oK,{key:1,"conversation-id":v.value.id,"task-id":J.value?.id,onClose:r[35]||=e=>hn.value=void 0},null,8,[`conversation-id`,`task-id`])):Rt.value===`editAgent`&&Xt.value?(u(),k(gW,{active:!gn.value,onWorkspace:r[36]||=e=>{vn.value=e,gn.value=!0},"main-bot-id":V.value,onConfigure:r[37]||=e=>{Mn()&&(Nr(),un.value?.openSettings(`my-bots`,void 0,e))},"initial-edit":!Ut.value,connection:hr.value,onDesktop:r[38]||=(e,t,n)=>Pn(e,t,n,!1),onSettings:r[39]||=e=>un.value?.openLocalVm(),onOpenConversation:r[40]||=(e,t)=>{Mn()&&(Nr(),R(a).push({path:`/conversations/`+e,query:t?{taskId:t}:{}}))},ref_key:`botProfile`,ref:Ht,key:Xt.value.id,"permission-control":P.value,onManagePermissions:r[41]||=e=>un.value?.openSettings(`my-bots`),agent:Xt.value,draft:$,agents:c.value,conversations:h.value,"conversation-id":Bt.value,"is-admin":R(t).user?.role===`admin`,"knowledge-enabled":ve.value,busy:Ue.value,error:He.value,onClose:Nr,onSave:Pr,onChanged:Re,onManageModels:r[42]||=e=>un.value?.openSettings(`system-models`)},null,8,[`active`,`main-bot-id`,`initial-edit`,`connection`,`permission-control`,`agent`,`draft`,`agents`,`conversations`,`conversation-id`,`is-admin`,`knowledge-enabled`,`busy`,`error`])):z(``,!0)],4)],64)):z(``,!0),Wt.value?(u(),k(Ml,{key:1,"target-bot-id":Wt.value,onClose:r[43]||=e=>Wt.value=``,onChanged:qt},null,8,[`target-bot-id`])):z(``,!0)],4),[[Se,!gn.value&&!W.value]]),mn.value&&vn.value?(u(),k(_t,{key:1,ref_key:`desktopViewer`,ref:fn,agents:[vn.value],backend:yn.value,host:bn.value,"auto-take":pn.value,onChanged:r[44]||=e=>rr(),onClose:r[45]||=e=>mn.value=!1},null,8,[`agents`,`backend`,`host`,`auto-take`])):z(``,!0),gn.value&&vn.value?(u(),k(mK,{key:2,ref_key:`vmWorkspace`,ref:dn,agents:c.value.filter(e=>e.execution===`computer`&&!e.archived&&!e.computerEnvironmentId),primary:vn.value.id,onClose:r[46]||=e=>gn.value=!1},null,8,[`agents`,`primary`])):z(``,!0),U(Rq,{section:`groups`,label:`搜索聊天`,items:$e.value,tabbed:``,onOpen:r[47]||=e=>ot.value=``,onSelect:Or},{"item-actions":S(({item:e})=>[it.value.has(e.id)?(u(),F(`div`,n$,[D(`button`,{type:`button`,class:`search-restore`,"aria-label":`取消归档:${e.title}`,disabled:!!at.value,onClick:t=>Kr(`restore`,e.id,!0)},s(at.value===e.id&&ct.value===`restore`?`恢复中…`:`取消归档`),9,r$),D(`button`,{type:`button`,class:`search-delete`,"aria-label":`删除聊天:${e.title}`,disabled:!!at.value,"aria-busy":at.value===e.id&&ct.value===`delete`,onClick:t=>Kr(`delete`,e.id,!0)},[U(Z,{name:`trash`,size:15}),w(s(at.value===e.id&&ct.value===`delete`?`删除中…`:`删除`),1)],8,i$)])):z(``,!0)]),footer:S(()=>[ot.value?(u(),F(`p`,a$,s(ot.value),1)):z(``,!0)]),_:1},8,[`items`]),(u(),k(L,{to:`body`},[st.value?(u(),F(`div`,o$,[D(`span`,null,s(st.value),1),D(`button`,{type:`button`,"aria-label":`关闭聊天操作提示`,onClick:r[48]||=e=>st.value=``},[U(Z,{name:`close`,size:16})])])):z(``,!0)])),gt.value?(u(),k(rH,{key:3,item:gt.value,items:kt.value,onClose:r[49]||=e=>gt.value=null},null,8,[`item`,`items`])):z(``,!0),U(kQ,{modelValue:bt.value,"onUpdate:modelValue":r[50]||=e=>bt.value=e,images:At.value},null,8,[`modelValue`,`images`]),(u(),k(L,{to:`body`},[Rt.value&&Rt.value!==`editAgent`?(u(),F(`dialog`,{key:0,ref_key:`dialogElement`,ref:Vt,class:`editor`,"aria-labelledby":`conversation-editor-title`,onCancel:r[67]||=X(e=>!Ue.value&&Nr(),[`prevent`])},[Rt.value===`agent`&&P.value?(u(),k(NL,{key:0,busy:Ue.value,error:He.value,onClose:Nr,onSubmit:Ir},null,8,[`busy`,`error`])):(u(),F(`form`,{key:1,onSubmit:X(Lr,[`prevent`])},[D(`header`,null,[D(`h2`,s$,s(Rt.value===`agent`?`创建 Bot`:Rt.value===`group`?`创建团队`:`群聊设置`),1),D(`button`,{type:`button`,class:`icon-button`,"aria-label":`关闭`,onClick:Nr},[U(Z,{name:`close`,size:18})])]),D(`div`,c$,[He.value?(u(),F(`p`,l$,s(He.value),1)):z(``,!0),Rt.value===`editGroup`?(u(),k(_n,{key:1,kind:`conversations`,"target-id":zt.value,onDirtyChange:r[51]||=e=>jr.value=e,onBusyChange:r[52]||=e=>Mr.value=e},null,8,[`target-id`])):z(``,!0),D(`label`,null,[r[75]||=w(`名称`,-1),d(D(`input`,{"onUpdate:modelValue":r[53]||=e=>$.name=e,readonly:Zt.value,required:``,maxlength:`100`},null,8,u$),[[Y,$.name]])]),Rt.value===`group`?(u(),F(`details`,d$,[r[76]||=D(`summary`,null,`从团队模板选择(可选)`,-1),U(FQ,{selected:Qt.value,available:c.value.filter(e=>!e.archived&&!e.temporaryGoalId).length,onSelect:tn},null,8,[`selected`,`available`])])):z(``,!0),Zt.value?(u(),F(`p`,f$,`引用的机器人配置由远端管理,请在远端修改名称、头像和角色规则。`)):z(``,!0),Yn.value&&!Zt.value?(u(),F(T,{key:4},[D(`button`,{class:`avatar-summary`,type:`button`,"aria-expanded":me.value,onClick:r[54]||=e=>me.value=!me.value},[U(Xe,{name:$.name||`新 Bot`,avatar:$.avatar,size:48,animated:!1},null,8,[`name`,`avatar`]),r[77]||=D(`span`,{class:`avatar-summary__copy`},[w(`Bot 头像`),D(`small`,null,`点击调整外形或上传图片`)],-1),U(Z,{name:`edit`,size:16})],8,p$),me.value?(u(),k(Kn,{key:`${Rt.value}:${zt.value}`,profile:Nt.value,embedded:``,"show-name":!1,"show-default-model":!1,"show-actions":!1,onAvatarChange:r[55]||=e=>$.avatar=e},null,8,[`profile`])):z(``,!0),D(`label`,null,[r[78]||=w(`一句话职责`,-1),d(D(`input`,{"onUpdate:modelValue":r[56]||=e=>$.job=e,maxlength:`120`,placeholder:`例如:检查代码正确性,给出有依据的修改建议`},null,512),[[Y,$.job]])])],64)):Rt.value===`editGroup`?(u(),F(`div`,m$,[U(Ke,{name:$.name,members:R(VI)($.memberIds,c.value,Rt.value===`editGroup`?Yt.value:void 0),size:64},null,8,[`name`,`members`]),r[79]||=D(`small`,null,`群聊头像由成员头像自动组合,随成员头像更新。`,-1)])):z(``,!0),Yn.value?(u(),F(`label`,h$,[r[80]||=w(`角色提示词与规则`,-1),d(D(`textarea`,{"onUpdate:modelValue":r[57]||=e=>$.instructions=e,readonly:Zt.value,rows:`6`,maxlength:`24000`,placeholder:Yn.value?`例如:你是代码审查员。重点检查正确性、边界情况和测试证据。`:`所有成员共同遵守的协作规则`},null,8,g$),[[Y,$.instructions]])])):z(``,!0),Yn.value&&!Zt.value?(u(),F(T,{key:7},[D(`p`,_$,[U(Z,{name:`brain`,size:16}),r[81]||=w(`模型:跟随服务器默认配置`,-1),r[82]||=D(`small`,null,`创建后可在 Bot 资料中调整模型与思考等级。`,-1)]),ve.value?(u(),F(`details`,v$,[r[84]||=D(`summary`,null,`高级设置`,-1),D(`label`,y$,[D(`span`,null,[d(D(`input`,{"onUpdate:modelValue":r[58]||=e=>$.memoryEnabled=e,type:`checkbox`},null,512),[[je,$.memoryEnabled]]),r[83]||=w(`自动记录长期事实`,-1)])]),D(`small`,null,s(P.value?`继承服务器已开放的协作与执行能力,可在 Bot 设置中收紧。`:`组队和同伴通信默认可用,使用服务器已有授权。`),1)])):z(``,!0)],64)):z(``,!0),$t.value?(u(),F(`fieldset`,b$,[r[85]||=D(`legend`,null,`角色分配`,-1),(u(!0),F(T,null,p($t.value.roles,(e,t)=>(u(),F(`label`,{key:e.name},[w(s(e.name)+s(e.host?` · 管理员`:``)+` `,1),D(`select`,{value:$.memberIds[t],"aria-label":`${e.name}对应的机器人`,onChange:e=>nn(t,e.target.value)},[(u(!0),F(T,null,p(c.value.filter(e=>!e.archived&&!e.temporaryGoalId),e=>(u(),F(`option`,{key:e.id,value:e.id},s(e.name),9,S$))),128))],40,x$),D(`small`,null,s(e.description),1)]))),128)),r[86]||=D(`small`,null,`角色分工仅在本群生效,聊天中保留机器人的名称和头像。`,-1)])):Yn.value?z(``,!0):(u(),F(`fieldset`,C$,[D(`legend`,null,`选择成员 · `+s($.memberIds.length)+`/8`,1),(u(!0),F(T,null,p(c.value.filter(e=>!e.temporaryGoalId&&(!e.archived||Rt.value===`editGroup`&&Yt.value?.memberIds.includes(e.id))),e=>(u(),F(`label`,{key:e.id,class:`member-choice`},[d(D(`input`,{"onUpdate:modelValue":r[59]||=e=>$.memberIds=e,type:`checkbox`,value:e.id,disabled:Ue.value||!$.memberIds.includes(e.id)&&$.memberIds.length>=8},null,8,w$),[[je,$.memberIds]]),U(Xe,{name:e.name,avatar:e.avatar,size:36,animated:!1},null,8,[`name`,`avatar`]),D(`span`,T$,[D(`strong`,null,s(e.name),1),D(`small`,null,s(e.job||e.description||e.instructions.slice(0,80)||`尚未填写职责`),1)])]))),128)),Rt.value===`group`&&c.value.filter(e=>!e.archived&&!e.temporaryGoalId).length<2?(u(),F(`small`,E$,`至少需要两个机器人才能创建群聊。`)):z(``,!0),Rt.value===`editGroup`?(u(),F(`small`,D$,`可增减成员,最多 8 位。目标进行时不能移除目标负责人;其他成员可按需调整。`)):z(``,!0),(u(!0),F(T,null,p(c.value.filter(e=>Yt.value?.activeAgentStates?.[e.id]),e=>(u(),F(`button`,{key:`stop:${e.id}`,type:`button`,onClick:t=>qr(e.id)},`停止 `+s(e.name),9,O$))),128))])),Rt.value===`editGroup`&&Object.keys($.memberRoles).length?(u(),F(`fieldset`,k$,[r[88]||=D(`legend`,null,`角色分工`,-1),(u(!0),F(T,null,p($.memberRoles,(e,t)=>(u(),F(`p`,{key:t},[w(s(c.value.find(e=>e.id===t)?.name)+` · `+s(e.name),1),r[87]||=D(`br`,null,null,-1),D(`small`,null,s(e.description),1)]))),128))])):z(``,!0),Yn.value?z(``,!0):(u(),F(T,{key:11},[D(`label`,null,[r[89]||=w(`交付负责人`,-1),d(D(`select`,{"onUpdate:modelValue":r[60]||=e=>$.administratorId=e,required:``},[(u(!0),F(T,null,p(c.value.filter(e=>$.memberIds.includes(e.id)),e=>(u(),F(`option`,{key:e.id,value:e.id},s(e.name),9,A$))),128))],512),[[Me,$.administratorId]])]),$.mode===`discussion`?(u(),F(`small`,j$,`讨论时成员平等;启动交付目标时由所选负责人协调。`)):z(``,!0),D(`label`,null,[r[90]||=w(`群规则(可选)`,-1),d(D(`textarea`,{"onUpdate:modelValue":r[61]||=e=>$.instructions=e,rows:`3`,maxlength:`24000`,placeholder:`例如:回答简洁,重要结论注明来源`},null,512),[[Y,$.instructions]])]),Rt.value===`group`?(u(),F(`p`,M$,`创建后即可聊天。需要交付具体结果时,再开启交付目标。`)):z(``,!0),D(`label`,null,[r[93]||=w(`协作方式`,-1),d(D(`select`,{"onUpdate:modelValue":r[62]||=e=>$.mode=e},[ve.value?(u(),F(`option`,N$,`平等讨论`)):z(``,!0),r[91]||=D(`option`,{value:`host`},`管理员协调`,-1),r[92]||=D(`option`,{value:`free`},`自由协作`,-1)],512),[[Me,$.mode]]),D(`small`,null,s($.mode===`discussion`?`成员平等参与,按本条消息要求讨论。`:$.mode===`host`?`由负责人安排成员回复,并汇总结果。`:`成员按提及与自动回复设置参与协作。`),1)]),D(`details`,P$,[r[97]||=D(`summary`,null,`高级协作设置`,-1),ve.value?(u(),F(`button`,{key:0,type:`button`,onClick:r[63]||=e=>he.value?.open(`projects`,$.memberIds[0],Yt.value?.projectId)},`关联项目与共享记忆`)):z(``,!0),$.mode===`free`?(u(),F(`fieldset`,F$,[r[94]||=D(`legend`,null,`未 @ 时自动回复`,-1),(u(!0),F(T,null,p(c.value.filter(e=>$.memberIds.includes(e.id)),e=>(u(),F(`label`,{key:e.id},[d(D(`input`,{"onUpdate:modelValue":r[64]||=e=>$.autoReplyIds=e,type:`checkbox`,value:e.id},null,8,I$),[[je,$.autoReplyIds]]),w(s(e.name),1)]))),128))])):z(``,!0),$.mode===`discussion`?z(``,!0):(u(),F(`label`,L$,[D(`input`,{type:`checkbox`,checked:$.maxReplyRounds===-1,onChange:r[65]||=e=>$.maxReplyRounds=e.target.checked?-1:3},null,40,R$),r[95]||=w(`不限制自动协作轮数`,-1)])),$.mode!==`discussion`&&$.maxReplyRounds!==-1?(u(),F(`label`,z$,[r[96]||=w(`自动协作轮数`,-1),d(D(`input`,{"onUpdate:modelValue":r[66]||=e=>$.maxReplyRounds=e,type:`number`,min:`1`,max:`100`,required:``},null,512),[[Y,$.maxReplyRounds,void 0,{number:!0}]])])):z(``,!0)])],64))]),D(`footer`,null,[D(`button`,{class:`quiet-button`,type:`button`,onClick:Nr},`取消`),Zt.value?z(``,!0):(u(),F(`button`,{key:0,class:`solid-button`,disabled:Ue.value||!Yn.value&&($.memberIds.length<(Rt.value===`group`?2:1)||$.memberIds.length>8)},s(Ue.value?`保存中…`:Rt.value===`agent`?`创建 Bot`:Rt.value===`group`?`创建团队`:`保存`),9,B$))])],32))],544)):z(``,!0)])),ve.value?(u(),k(pe,{key:4,ref_key:`knowledgePanel`,ref:he,agents:c.value,conversations:h.value,"conversation-id":v.value?.id,"task-id":J.value?.id,assignments:se.value,goal:J.value?.goal,revision:ge.value,onChanged:Re},null,8,[`agents`,`conversations`,`conversation-id`,`task-id`,`assignments`,`goal`,`revision`])):z(``,!0)]),_:1},8,[`server-name`,`user-name`,`user-avatar`,`is-admin`,`features`,`upstream-ready`,`upstream-error`,`theme`,`theme-preference`,`onLogout`,`onToggleTheme`,`onSetTheme`]))}}),K$=t({default:()=>q$}),q$=V(G$,[[`__scopeId`,`data-v-e2409469`]]);export{Ar as _,$d as a,_n as b,Hl as c,Rl as d,q$ as default,zl as f,ko as g,hl as h,Uf as i,Vl as l,Ml as m,Yh as n,jd as o,Ll as p,Yp as r,_d as s,K$ as t,Bl as u,tr as v,Xn as y};
|
|
278
|
-
//# sourceMappingURL=ConversationsView-
|
|
276
|
+
> `)}\n\n${e.text}`:e.text,qe.value=e.mentionIds,e.files.length)try{if(Ue.value=!0,e.files.length===Ft.length&&e.files.every((e,t)=>e===Ft[t]))Ge.value=It;else{let t=new FormData;for(let n of e.files)t.append(`files`,n);let n=await Q(`/api/app/uploads`,{method:`POST`,body:t});if(r!==Le.value||i!==Rr)return;Ge.value=n.files,Ft=[...e.files],It=[...Ge.value]}}catch(e){He.value=e instanceof Error?e.message:`上传失败`;return}finally{i===Rr&&(Ue.value=!1)}r===Le.value&&i===Rr&&(e.files.length||(Ge.value=[]),await Hr()&&t?.clearAfterSend(n)&<.value===t&&Le.value===r&&Rr===i&&(ht.value=null,Ft=[],It=[]))}let Rt=O(null),zt=O(``),Bt=O(``);O(),O();let Vt=O(),Ht=O(),Ut=O(!1),Wt=O(``);function Gt(e){let n=c.value.find(t=>t.id===e);!P.value||t.user?.role!==`admin`||!n||n.archived||n.temporaryGoalId||n.remoteAgentId||n.nodeId!==`local`||!Mn()||(Nr(),Wt.value=e)}async function Kt(e){let t=h.value.find(t=>t.kind===`direct`&&t.memberIds[0]===e.id&&!t.archived);t&&Mn()&&await Ar(`editAgent`,t,!0)}function qt(e){j.value=e,Zn()}let Jt=0,Yt=H(()=>h.value.find(e=>e.id===Bt.value)??(v.value?.id===Bt.value?v.value:void 0)),Xt=H(()=>c.value.find(e=>e.id===zt.value)),Zt=H(()=>Rt.value===`editAgent`&&!!c.value.find(e=>e.id===zt.value)?.remoteAgentId),$=g({name:``,avatar:``,instructions:``,description:``,job:``,antiJobs:[],voice:``,voiceCustom:``,actBias:``,execution:`profile`,canManageTeam:!0,canCollaborate:!0,memoryEnabled:!0,approvalPolicy:`ask`,memberIds:[],memberRoles:{},administratorId:``,mode:`discussion`,autoReplyIds:[],maxReplyRounds:3}),Qt=O(`custom`),$t=H(()=>Rt.value===`group`?AQ.find(e=>e.id===Qt.value):void 0);function en(e){$.memberRoles=Object.fromEntries(e.roles.flatMap((e,t)=>{let n=$.memberIds[t];return n?[[n,{name:e.name,description:e.description}]]:[]})),$.administratorId=$.memberIds[Math.max(0,e.roles.findIndex(e=>e.host))]??``}function tn(e){let t=c.value.filter(e=>!e.archived&&!e.temporaryGoalId);e&&t.length<e.roles.length||(Qt.value=e?.id??`custom`,Object.assign($,{name:e?.name??``,instructions:e?.instructions??``,job:``,antiJobs:[],voice:``,voiceCustom:``,actBias:``,memberIds:e?t.slice(0,e.roles.length).map(e=>e.id):[],memberRoles:{},administratorId:``,mode:ve.value?`discussion`:`host`,autoReplyIds:[],maxReplyRounds:3}),e&&en(e))}function nn(e,t){if(!$t.value)return;let n=[...$.memberIds],r=n[e],i=n.indexOf(t);n[e]=t,i>=0&&i!==e&&r&&(n[i]=r),$.memberIds=n,en($t.value)}g({});let rn=0,an=!1,on,sn=0,cn=H(()=>typeof r.params.id==`string`?r.params.id:void 0),ln=H(()=>typeof r.query.taskId==`string`?r.query.taskId:``),un=O(),dn=O(),fn=O(),pn=O(!0),mn=O(!1),hn=O(),gn=O(!1),vn=O(),yn=O(),bn=O(``),xn={default:380,min:280,max:480},Sn=O(),Cn=$A(V$,xn),wn=H(()=>Cn.width.value),Tn=H(()=>({flex:`0 0 ${wn.value}px`,width:`${wn.value}px`})),En=H(()=>!!(le.value||hn.value||Rt.value===`editAgent`&&Xt.value));function Dn(){let e=Sn.value?.clientWidth||0,t=e>0?e:Math.min(window.innerWidth,1200)-360;return Math.max(xn.min,t-H$-U$)}function On(){Cn.persist(Cn.width.value,Dn())}function kn(e){On(),Cn.beginDrag(e,{direction:-1,maxAvailable:Dn})}function An(){Cn.reset(Dn())}f(En,e=>{e&&o(()=>On())});let jn=O(!1);function Mn(){return Rt.value!==`editAgent`||(Ht.value?.beforeClose?.()??!0)}function Nn(e){Mn()&&(Rt.value===`editAgent`&&Nr(),le.value=void 0,hn.value=hn.value===e?void 0:e)}async function Pn(e,t,n,r=!0){if(r&&window.yaoviDesktop?.openComputer){try{await window.yaoviDesktop.openComputer(e.id,{backend:t,host:n})}catch(e){He.value=e instanceof Error?e.message:`无法打开电脑窗口`}return}if(mn.value&&fn.value){if(vn.value?.id===e.id&&yn.value===t&&bn.value===(n??``))return;try{await fn.value.releaseControl(),mn.value=!1,await o()}catch(e){He.value=e instanceof Error?e.message:`请先交还当前电脑`;return}}vn.value=e,yn.value=t,bn.value=n??``,pn.value=r,mn.value=!0}function Fn(e){_.value.some(t=>t.credentialDrafts?.some(t=>t.id===e.id))&&(yv.value=e.id,un.value?.openSettings(`credential-vault`))}async function In(e){if(!_.value.some(t=>t.browserCard?.id===e.id&&t.browserCard.agentId===e.agentId))return;let t=c.value.find(t=>t.id===e.agentId&&!t.archived);if(!t){He.value=`此浏览器所属机器人已不可用,或你已没有访问权限`;return}await Pn(t,`managed-browser`)}async function Ln(){if(gn.value&&dn.value&&!await dn.value.close())return!1;if(mn.value&&fn.value)try{await fn.value.releaseControl(),mn.value=!1}catch{return!1}return!0}rt(Ln),De(()=>Mn()?Ln():!1);let Rn=H(()=>c.value.filter(e=>v.value?.memberIds.includes(e.id))),zn=H(()=>v.value?.kind===`direct`?c.value.find(e=>e.id===v.value?.memberIds[0]):void 0),Bn=H(()=>zn.value?.name||v.value?.name||`Bot 模式`),Vn=H(()=>v.value?zn.value?.name||v.value.name:``),Hn=H(()=>zn.value?.avatar||v.value?.avatar||``),Un=H(()=>v.value?.kind===`group`?VI(v.value.memberIds,c.value,v.value):[]),Wn=H(()=>{let e=K.value;return pg({vmWait:e?.vmWait,runStatus:e?.status??(ne.value?`running`:void 0),stopRequested:e?.stopRequested,collaborationWaiting:!!v.value?.collaborationWaiting,backgroundPhase:e?.backgroundPhase,...mg(_.value)})??(ne.value?`正在输入…`:``)}),Gn=H(()=>yg({foregroundActive:ne.value,tasks:B.value?M.value:[],conversation:v.value})??``),qn=H(()=>ne.value?Wn.value:Gn.value),Jn=H(()=>{let e=[...Dt.value].reverse().find(e=>e.role===`assistant`&&e.status===`streaming`)?.profile,t=zn.value?.id||b.value?.activeAgentId||e||v.value?.activeAgentId||Object.entries(v.value?.activeAgentStates??{}).find(([,e])=>e===`running`)?.[0]||v.value?.memberIds[0],n=c.value.find(e=>e.id===t);return{name:n?.name||v.value?.name||`机器人`,avatar:n?.avatar||(v.value?.kind===`direct`?v.value.avatar:``)||``}}),Yn=H(()=>Rt.value===`agent`||Rt.value===`editAgent`),Xn=e=>e;async function Zn(){let e=++q,n=t.user?.id,r=()=>!an&&e===q&&t.user?.id===n,i=[];await Promise.all([P.value?Q(`/api/app/permissions/control`).then(e=>{r()&&(j.value=e)}).catch(e=>{i.push(e instanceof Error?e.message:`无法读取 Bot 权限`)}):Promise.resolve(),B.value?Q(`/api/app/background-tasks`).then(e=>{r()&&(M.value=vt(M.value,e.tasks))}).catch(e=>{i.push(e instanceof Error?e.message:`无法读取后台任务`)}):Promise.resolve()]),r()&&(N.value=i.join(`;`))}function Qn(){if(le.value=void 0,r.query.taskDetails===`goal`){let{taskDetails:e,...t}=r.query;a.replace({path:r.path,query:t})}}f(()=>[J.value?.id,We.value,r.query.taskDetails],async()=>{if(We.value||r.query.taskDetails!==`goal`||!J.value?.goal||J.value.id!==ln.value)return;let e=J.value.id;await o(),!an&&!We.value&&J.value?.id===e&&ln.value===e&&r.query.taskDetails===`goal`&&fe()});async function $n(){Mn()&&(Nr(),await a.push(`/conversations?view=bots`))}async function er(e,t=!1){let n=h.value.find(t=>t.kind===`direct`&&t.memberIds[0]===e.id&&!t.archived);if(!n){N.value=`此 Bot 的聊天尚不可用,请刷新后重试。`;return}if(t&&P.value){Mn()&&(Nr(),un.value?.openSettings(`my-bots`,void 0,e.id));return}t?(await Or(n.id),await Ar(`editAgent`,n)):await Or(n.id)}async function tr(){if(cn.value||r.query.view===`bots`||r.query.view===`chats`||!V.value)return;let e=h.value.find(e=>e.kind===`direct`&&e.memberIds[0]===V.value&&!e.archived);e&&await a.replace(`/conversations/${e.id}`)}async function nr(){let e=St.cursor,n=t.user?.id,[r,i]=await Promise.all([Q(`/api/app/agents`),Q(`/api/app/conversations`)]);if(an||t.user?.id!==n||St.cursor!==e)return;c.value=r.agents;let a=new Map(h.value.map(e=>[e.id,e]));St.conversations=i.conversations.map(e=>{let t=a.get(e.id);return t&&t.unreadVersion===e.unreadVersion&&[...sr].some(t=>t.startsWith(`${e.id}:`))?{...e,unread:t.unread,unreadCount:t.unreadCount}:e}),St.agents=c.value,h.value=St.conversations,rn||(rn=i.cursor,St.cursor=i.cursor)}async function rr(e=cn.value,n=!1,i){if(!e){sn++,v.value=void 0,_.value=[],b.value=null,C.value=[],E.value=null,J.value=null,oe.value=[],se.value=[],ae.value=[];return}let s=++sn,c=t.user?.id,l=Rr,u=()=>!an&&s===sn&&!i?.aborted&&t.user?.id===c&&Rr===l,d=Le.value,f=lt.value?.filesSnapshot()??[],p=ht.value,m=ln.value||(v.value?.id===e?J.value?.id:void 0),g=n?void 0:St.get(e,m),y=St.beginRead();n||(We.value=!g),v.value?.id!==e&&(v.value=h.value.find(t=>t.id===e),_.value=g?.messages??[],b.value=null,C.value=[],E.value=null,J.value=null,oe.value=[],se.value=[],ae.value=[],ht.value=null,Je.value=!1);try{let a=g??await Q(`/api/app/conversations/${e}?limit=50&toolDetails=lazy${m?`&taskId=${encodeURIComponent(m)}`:``}`,{signal:i});if(!u())return;let s=g??St.finishRead(y,a);g&&St.staleDetails.has(cZ(e,g.task?.id))&&queueMicrotask(()=>{u()&&v.value?.id===e&&rr(e,!0,i)});let c=mt.value?.isFollowingBottom()??!0;if(v.value=s.conversation,s.task&&St.selectedTasks.set(e,s.task.id),J.value=s.task??null,oe.value=s.tasks??[],se.value=s.assignments??[],ae.value=s.runtimeTasks??[],_.value=s.messages,b.value=s.run,x.value=s.approvalSummaries??[],C.value=s.interactions,E.value=s.context,d!==Le.value){if(Pe.set(d,f),Ie.set(d,p),J.value&&!m){let e=`yaovi:composer:group:${t.user?.id}:${v.value.id}`,n=`yaovi:composer:group:${Le.value}`;try{let t=localStorage.getItem(e);t&&!localStorage.getItem(n)&&(localStorage.setItem(n,t),localStorage.removeItem(e))}catch{}}if(await o(),!u())return;let e=Pe.get(Le.value);if(e?.length&&await lt.value?.attachFiles(e),!u())return;ht.value=Ie.get(Le.value)??null}if(n||(Je.value=s.hasOlder??s.messages.length===50),!n||c){if(await o(),!u())return;!n&&typeof r.query.unread!=`string`&&mt.value?.scrollToBottom(`auto`),typeof r.query.unread==`string`&&ar(r.query.unread)}}catch(t){if(u()&&m&&t instanceof _e&&t.status===404)try{let t=(await Q(`/api/app/conversations/${e}/tasks`,{signal:i})).tasks[0];if(u()&&t&&t.id!==m){await a.replace({query:{...r.query,taskId:t.id}});return}}catch{}u()&&(He.value=t instanceof Error?t.message:`加载失败`)}finally{St.cancelRead(y),s===sn&&(We.value=!1)}}let ir=0;async function ar(e){let t=++ir,n=cn.value,i=ln.value,s=r.path,c=()=>!an&&t===ir&&r.path===s&&v.value?.id===n&&cn.value===n&&ln.value===i&&r.query.unread===e;try{for(let t=0;t<100&&c();t++){if(await o(),!c()||mt.value?.scrollToMessage(e)||!Je.value||Ot.value)return;await Zr()}}finally{if(c()){let e={...r.query};delete e.unread,await a.replace({query:e})}}}f(()=>r.query.unread,e=>{typeof e==`string`&&!We.value&&v.value?.id===cn.value&&ar(e)},{flush:`post`});let or=et(),sr=new Set;async function cr(e){let t=v.value;if(!t||We.value||mn.value||typeof r.query.unread==`string`)return;let n=`${t.id}:${e.join(`,`)}`;if(sr.has(n))return;let i=new Set(_.value.filter(e=>e.role===`assistant`&&e.status===`complete`&&e.visible!==!1).map(e=>e.id));sr.add(n);try{await or.visible(`bot`,t.id,void 0,e.filter(e=>i.has(e)))}catch{}finally{sr.delete(n)}}async function lr(e){let t=e.currentTarget,n=t.value;if(n!==W$){await a.push({query:{...r.query,taskId:n}});return}if(t.value=J.value?.id??``,!v.value||v.value.kind!==`group`||jn.value)return;let i=v.value.id;jn.value=!0,He.value=``;try{let e=await Q(`/api/app/conversations/${i}/tasks`,{method:`POST`,body:{}});if(v.value?.id!==i)return;oe.value=[e.task,...oe.value.filter(t=>t.id!==e.task.id)],await a.push({query:{...r.query,taskId:e.task.id}})}catch(e){He.value=e instanceof Error?e.message:`新建话题失败`}finally{jn.value=!1}}async function ur(){if(!(!v.value||!J.value))try{await Q(`/api/app/conversations/${v.value.id}/tasks/${J.value.id}/stop`,{method:`POST`,body:{}}),await rr(void 0,!0)}catch(e){He.value=e instanceof Error?e.message:`停止任务失败`}}async function dr(){if(!(!v.value||!J.value))try{await Q(`/api/app/conversations/${v.value.id}/tasks/${J.value.id}/resume`,{method:`POST`,body:{requestId:pt()}}),await rr(void 0,!0)}catch(e){He.value=e instanceof Error?e.message:`恢复任务失败`}}async function fr(e,t,n){let r=v.value?.id;if(!r||J.value?.id!==e)throw Error(`话题已切换,请重新打开目标`);let i=await Q(`/api/app/conversations/${r}/tasks/${e}/plan`,{method:`PATCH`,body:{requestId:pt(),expectedRevision:t,acceptanceCriteria:n}});v.value?.id===r&&J.value?.id===e&&(J.value.goal=i.goal,await rr(r,!0))}function pr(e){if(e.button!==0||e.metaKey||e.ctrlKey||e.shiftKey||e.altKey)return;let t=e.target?.closest?.(`a[href]`);if(t)try{let n=new URL(t.getAttribute(`href`)||``,window.location.origin);if(n.origin!==window.location.origin||!/^\/conversations\/[^/]+$/.test(n.pathname)||!n.searchParams.get(`taskId`))return;e.preventDefault(),e.stopPropagation(),a.push(n.pathname+n.search)}catch{}}let mr=!1,hr=O(`connecting`),gr,_r,vr=[],yr;function br(){yr?.abort(),yr=void 0,on&&clearTimeout(on),on=void 0}function xr(e){mt.value?.isFollowingBottom(),v.value=e.conversation,_.value=e.messages,J.value=e.task??null,oe.value=e.tasks??[],b.value=e.run,C.value=e.interactions,x.value=e.approvalSummaries??[],E.value=e.context,se.value=e.assignments??[],ae.value=e.runtimeTasks??[],Je.value=e.hasOlder??!1}function Sr(){_r=void 0;try{for(let e of vr){let t=e.seq>St.cursor;if(St.apply(e),e.type===`message.changed`){let t=e.data;if(t.clientRequestId&&wt.value.some(e=>e.requestId===t.clientRequestId&&e.conversationId===t.conversationId&&(e.taskId??``)===(t.conversationTaskId??``)))try{Et(wt.value.filter(e=>e.requestId!==t.clientRequestId))}catch{}}if(e.type===`server.identity.changed`&&tt(e.data),t&&ft?.(e),String(e.type)===`background-task.changed`){let t=e.data;M.value=vt(M.value,[t])}if((String(e.type).startsWith(`bot.control.`)||String(e.type).startsWith(`bot.permission.`))&&Zn(),e.type===`project.changed`){let t=e.data;be.value=[...be.value.filter(e=>e.id!==t.id),t]}(/^(memory|project|collaboration)\./.test(e.type)||e.type===`message.changed`&&e.data.activity)&&ge.value++}}catch{vr=[],gr?.close(),Dr();return}if(vr=[],rn=St.cursor,c.value=St.agents,h.value=St.conversations,cn.value){let e=St.get(cn.value,ln.value||J.value?.id);e?xr(e):h.value.some(e=>e.id===cn.value)?J.value&&!St.details.has(cZ(cn.value,J.value.id))&&(a.replace(`/conversations/${cn.value}`),rr(cn.value,!0)):a.replace(`/conversations`)}ft&&dt.value++}async function Cr(e){let n=t.user?.id,r=Rr,i=await Q(`/api/app/capabilities`,{signal:e});if(e.aborted||an||Rr!==r||t.user?.id!==n)return;mr=i.features.includes(sg),ve.value=i.features.includes(`bot-file-memory-v1`),A.value=i.features,i.csrfToken&&ye(i.csrfToken);let a=St.beginRead();try{let i=new URLSearchParams({details:`selected`,toolDetails:`lazy`});cn.value&&i.set(`conversationId`,cn.value),ln.value&&i.set(`taskId`,ln.value);let a=await Q(`/api/app/workspace/snapshot?${i}`,{signal:e});if(e.aborted||an||Rr!==r||t.user?.id!==n||(St.hydrate(a),c.value=a.agents,h.value=St.conversations,rn=a.cursor,be.value=a.projects??[],tt(a.serverIdentity),await Zn(),e.aborted||an||Rr!==r||t.user?.id!==n))return;await tr()}finally{St.cancelRead(a)}}function wr(){if(gr?.close(),an)return;if(!navigator.onLine){Tr();return}let e=new EventSource(`/api/app/events/stream?after=${rn}&toolDetails=lazy${mr?`&format=patch-v1`:``}`);gr=e,e.addEventListener(`workspace`,t=>{if(!(an||gr!==e))try{vr.push(JSON.parse(t.data)),_r===void 0&&(_r=requestAnimationFrame(Sr))}catch{e.close(),He.value=`消息同步失败,正在恢复`,Dr()}}),e.addEventListener(`ready`,t=>{gr===e&&(Sr(),He.value=``,hr.value=`online`,tt(JSON.parse(t.data).serverIdentity))}),e.addEventListener(`reset`,()=>{!an&&gr===e&&(e.close(),Dr())}),e.onerror=()=>{an||gr!==e||(hr.value=`connecting`,He.value=`连接中断,正在重连`,Q(`/api/app/capabilities`).catch(t=>{t instanceof _e&&[401,403].includes(t.status)&&(e.close(),hr.value=`expired`,He.value=t.message)}))}}function Tr(){br(),gr?.close(),gr=void 0,hr.value=`offline`,He.value=`网络已断开,恢复连接后将自动同步`}function Er(){!an&&t.user?.id&&Dr()}async function Dr(e=!1){if(br(),an||!t.user?.id)return;if(!navigator.onLine){Tr();return}let n=new AbortController,r=t.user.id,i=Rr;yr=n;let a=()=>!an&&!n.signal.aborted&&yr===n&&Rr===i&&t.user?.id===r;gr?.close(),gr=void 0,vr=[],_r!==void 0&&cancelAnimationFrame(_r),_r=void 0;try{if(await Cr(n.signal),!a())return;let t=!e&&cn.value?St.get(cn.value,ln.value||J.value?.id):void 0;t?(xr(t),St.staleDetails.has(cZ(t.conversation.id,t.task?.id))&&await rr(t.conversation.id,!0,n.signal)):await rr(cn.value,!1,n.signal),a()&&wr()}catch(e){if(!a())return;if(!navigator.onLine){Tr();return}if(He.value=e instanceof Error?e.message:`连接中断`,e instanceof _e&&[401,403].includes(e.status))return;on=setTimeout(()=>void Dr(),1500)}finally{yr===n&&(yr=void 0)}}async function Or(e){let t=h.value.find(t=>t.id===e),n;if(Rt.value===`editAgent`&&(t?.kind===`direct`?t.memberIds[0]:void 0)!==zt.value){if(!Mn())return;let e=Ut.value;Nr(),t?.kind===`direct`&&(n=e)}He.value=``,Ge.value=[],qe.value=[],Ve.value=``,gt.value=null,bt.value=null,await a.push(`/conversations/${e}`),n!==void 0&&t?.kind===`direct`&&await Ar(`editAgent`,t,n)}function kr(e,t=!1){let n=h.value.find(t=>t.id===e);if(n?.kind===`direct`&&P.value&&(t||window.matchMedia?.(`(max-width: 900px)`).matches)){Mn()&&(Nr(),un.value?.openSettings(`my-bots`,void 0,n.memberIds[0]));return}n&&Ar(n.kind===`direct`?`editAgent`:`editGroup`,n)}async function Ar(e,t=v.value,n=!1){if(e===`editAgent`&&Rt.value===`editAgent`&&zt.value===t?.memberIds[0]){Ht.value?.focus?.();return}if(!Mn())return;let r=++Jt,i=Rr,a=()=>r===Jt&&i===Rr&&!an;e===`editAgent`&&(le.value=void 0,hn.value=void 0,Ut.value=n),He.value=``,Rt.value=e,me.value=!1,zt.value=``,Bt.value=e===`editAgent`||e===`editGroup`?t?.id??``:``,Qt.value=`custom`,Object.assign($,{name:``,avatar:e===`agent`?ze(Ne(`new-agent`,`机器人`)):``,job:``,antiJobs:[],voice:``,voiceCustom:``,actBias:``,instructions:``,description:``,execution:`profile`,canManageTeam:!0,canCollaborate:!0,memoryEnabled:!0,approvalPolicy:`ask`,memberIds:[],memberRoles:{},administratorId:``,mode:ve.value?`discussion`:`host`,autoReplyIds:[],maxReplyRounds:3});try{if(e===`editAgent`){let e=c.value.find(e=>e.id===t?.memberIds[0]);if(!e)throw Error(`机器人不存在,请刷新后重试`);if(Object.assign($,e),$.description??=``,$.job??=``,$.antiJobs??=[],$.voice??=``,$.voiceCustom??=``,$.actBias??=``,e.remoteAgentId){let t=(await Q(`/api/app/nodes/${e.nodeId}/agents`)).agents.find(t=>t.id===e.remoteAgentId);if(!a())return;t&&Object.assign($,t)}$.approvalPolicy=e.approvalPolicy??`ask`,zt.value=e.id}e===`editGroup`&&t&&(zt.value=t.id,Object.assign($,t,{mode:t.collaborationMode??t.mode,memberIds:[...t.memberIds],autoReplyIds:[...t.autoReplyIds],memberRoles:Object.fromEntries(Object.entries(t.memberRoles??{}).map(([e,t])=>[e,{...t}]))})),await o(),a()&&Vt.value?.showModal()}catch(e){if(!a())return;He.value=String(e),Rt.value=null}}let jr=O(!1),Mr=O(!1);function Nr(){Rt.value===`editGroup`&&(Mr.value||jr.value&&!window.confirm(`权限更改尚未保存,确定放弃?`))||(jr.value=!1,Jt++,zt.value=``,Vt.value?.close(),Rt.value=null,Bt.value=``)}function Pr(e){Object.assign($,e),$.description??=``,$.job??=``,$.antiJobs??=[],$.voice??=``,$.voiceCustom??=``,$.actBias??=``,Fr.value=e.modelSettings&&e.expectedRevision?{modelSettings:e.modelSettings,expectedRevision:e.expectedRevision}:void 0,Lr()}f(()=>$.memberIds.slice(),e=>{e.includes($.administratorId)||($.administratorId=e[0]??``),$.autoReplyIds=$.autoReplyIds.filter(t=>e.includes(t)),$.memberRoles=Object.fromEntries(Object.entries($.memberRoles).filter(([t])=>e.includes(t)))});let Fr=O();async function Ir(e){if(Ue.value||Rt.value!==`agent`)return;let t=Jt,n=Rr,r=()=>t===Jt&&n===Rr&&!an;Ue.value=!0,He.value=``;let i={...e,computer:`auto`,envs:{vm:!0,cloud:!0,desktop:!0},execution:`profile`};try{let e=await Q(`/api/app/agents`,{method:`POST`,body:Xn(i)});if(!r())return;if(e.confirmationRequired){if(!e.confirmationTarget)throw Error(`模型确认信息不完整,请重新选择模型。`);if(!window.confirm(e.confirmationMessage||`确认使用所选模型创建 Bot?`)||(e=await Q(`/api/app/agents`,{method:`POST`,body:Xn({...i,confirmedModel:e.confirmationTarget})}),!r()))return}if(!e.agent)throw Error(`创建尚未确认,请刷新 Bot 列表后检查。`);let t=e.agent.id;if(Nr(),await Promise.all([nr(),Zn()]),n!==Rr||an)return;let a=h.value.find(e=>e.kind===`direct`&&e.memberIds[0]===t);a&&await Or(a.id)}catch(e){n===Rr&&!an&&(He.value=e instanceof Error?e.message:`创建失败`)}finally{n===Rr&&!an&&(Ue.value=!1)}}async function Lr(){let e=Rt.value,t=Jt,n=Rr,r=Fr.value;Fr.value=void 0;let i,a=()=>t===Jt&&n===Rr&&!an;Ue.value=!0,He.value=``;try{let t={name:$.name,...Yn.value?{avatar:$.avatar,description:$.description.trim(),canManageTeam:$.canManageTeam,approvalPolicy:$.approvalPolicy,...ve.value?{canCollaborate:$.canCollaborate,memoryEnabled:$.memoryEnabled}:{}}:{},instructions:$.instructions},o={job:$.job.trim()?$.job.trim():null,antiJobs:$.antiJobs.length?$.antiJobs:null,voice:$.voice||null,voiceCustom:$.voice===`custom`&&$.voiceCustom.trim()?$.voiceCustom:null,actBias:$.actBias||null},s=Object.fromEntries(Object.entries(o).filter(([,e])=>e!=null));if(Zt.value)await Q(`/api/app/agents/${zt.value}`,{method:`PATCH`,body:{approvalPolicy:$.approvalPolicy}});else if(Rt.value===`agent`){let e=await Q(`/api/app/agents`,{method:`POST`,body:{...t,...s,computer:`auto`,envs:{vm:!0,cloud:!0,desktop:!0},execution:`profile`}});await nr();let n=h.value.find(t=>t.kind===`direct`&&t.memberIds[0]===e.agent.id);n&&await Or(n.id)}else if(Rt.value===`editAgent`){let e={...t,...o,...r},n=await Q(`/api/app/agents/${zt.value}`,{method:`PATCH`,body:Xn(e)});if(!a())return;if(n.confirmationRequired){if(!window.confirm(n.confirmationMessage||`确认使用此模型?`))return;if(!n.confirmationTarget)throw Error(`模型确认响应无效,请重新加载。`);n=await Q(`/api/app/agents/${zt.value}`,{method:`PATCH`,body:Xn({...e,confirmedModel:n.confirmationTarget})})}if(r&&!n.agent)throw Error(`模型设置尚未保存,请重新加载后重试。`);i=n.agent}else{let e={...t,administratorId:$.administratorId||$.memberIds[0],mode:$.mode===`discussion`?`free`:$.mode,...ve.value?{collaborationMode:$.mode}:{},autoReplyIds:$.autoReplyIds,maxReplyRounds:$.maxReplyRounds,...Rt.value===`editGroup`?{expectedRevision:Yt.value?.revision??0}:{},memberIds:$.memberIds,memberRoles:$.memberRoles};await Or((await Q(Rt.value===`group`?`/api/app/conversations`:`/api/app/conversations/${zt.value}`,{method:Rt.value===`group`?`POST`:`PATCH`,body:Xn(e)})).conversation.id)}if(!a())return;e===`editAgent`?Ht.value?.markSaved?.(i):Nr(),await nr(),P.value&&await Zn(),n===Rr&&!an&&await rr()}catch(e){a()&&(He.value=e instanceof Error?e.message:`保存失败`)}finally{n===Rr&&(Ue.value=!1)}}let Rr=0,zr=new Map;function Br(e,n,r,i){clearTimeout(zr.get(n)),zr.set(n,setTimeout(()=>{zr.delete(n),!(an||t.user?.id!==i||Le.value!==n)&&(e.cursor!==void 0&&St.cursor>=e.cursor&&gr?.readyState===EventSource.OPEN||rr(r,!0).catch(()=>{He.value=`消息已发送,正在恢复同步`}))},e.cursor===void 0?0:2e3))}async function Vr(){try{return(await window.yaoviDesktop?.deviceHost?.())?.deviceHost??void 0}catch{return}}async function Hr(){let e=v.value;if(!e||Ue.value||!Ve.value.trim()&&!Ge.value.length)return;Ue.value=!0,He.value=``;let t=J.value?.id,n=ce.value&&!J.value?.goal?`goal`:void 0;try{let r=await Vr();if(v.value!==e)return;let i=pt(),a={requestId:i,conversationId:e.id,taskId:t,content:Ve.value,attachments:Ge.value,createdAt:Date.now(),afterSeq:Math.max(0,..._.value.map(e=>e.seq)),state:`queued`,body:{requestId:i,...n?{mode:n}:{},...ve.value?{...e.kind===`direct`&&we.value?{projectId:we.value}:{},...Te.value&&e.collaborationMode===`discussion`?{rounds:Te.value}:{},...ce.value&&e.collaborationMode===`discussion`?{coordinatorId:Ee.value||ke.value?.id}:{}}:{},...J.value?{taskId:J.value.id}:{},content:Ve.value,mentionIds:qe.value,fileIds:Ge.value.map(e=>e.id),...r?{deviceHost:r}:{}}};return Et([...wt.value,a]),Ve.value=``,Ge.value=[],qe.value=[],ce.value=!1,Ur(a),!0}catch(e){He.value=e instanceof Error?e.message:`发送失败`}finally{Ue.value=!1}}async function Ur(e,n){if(Tt.has(e.requestId))return;let r=t.user?.id,i=Rr;Tt.add(e.requestId);try{Et(wt.value.map(t=>t.requestId===e.requestId?{...t,state:`sending`,error:void 0}:t));let a=await Q(`/api/app/conversations/${e.conversationId}/messages`,{method:`POST`,body:e.body,...n?{signal:n}:{}});if(an||Rr!==i||t.user?.id!==r)return;Sr(),St.acceptReceipt(a),h.value=St.conversations;let o=St.get(e.conversationId,e.taskId);return o&&v.value?.id===e.conversationId&&(J.value?.id??``)===(e.taskId??``)&&(xr(o),Br(a,Le.value,e.conversationId,r)),Et(wt.value.filter(t=>t.requestId!==e.requestId)),a}catch(n){if(!an&&Rr===i&&t.user?.id===r){if(!wt.value.some(t=>t.requestId===e.requestId))return;let t=n instanceof Error?n.message:`发送结果尚未确认`,r=n instanceof _e&&n.status>=400&&n.status<500&&n.status!==408,i=wt.value.map(n=>n.requestId===e.requestId?{...n,state:r?`failed`:`uncertain`,error:t}:n);try{Et(i)}catch{wt.value=i}He.value=t}}finally{Tt.delete(e.requestId)}}function Wr(e){let t=wt.value.find(t=>t.requestId===e);t&&Ur(t)}async function Gr(e,n){let r=v.value,i=t.user?.id,a=Rr,o=Le.value,s=J.value?.id;if(!r||r.archived||Ue.value||We.value||n.aborted)throw Error(`当前会话暂时无法发送语音,请稍后重试。`);let c=()=>!an&&!n.aborted&&t.user?.id===i&&Rr===a&&Le.value===o&&cn.value===r.id,l=new Map,u=e=>{if(e.type!==`run.changed`)return;let t=e.data;t.conversationId===r.id&&t.conversationTaskId===s&&l.set(t.id,t)};ft=u,Ue.value=!0;let d=!0;try{let a=await Vr();if(!c())throw iQ();let u=pt(),p={requestId:u,conversationId:r.id,taskId:s,content:e,attachments:[],createdAt:Date.now(),afterSeq:Math.max(0,..._.value.map(e=>e.seq)),state:`queued`,body:{requestId:u,content:e,mentionIds:[],fileIds:[],...s?{taskId:s}:{},...a?{deviceHost:a}:{},...ve.value&&r.kind===`direct`&&we.value?{projectId:we.value}:{},...ve.value&&Te.value&&r.collaborationMode===`discussion`?{rounds:Te.value}:{}}};Et([...wt.value,p]);let m=await Ur(p,n);if(!c())throw iQ();if(!m?.run?.id)throw Error(`发送结果尚未确认,请在聊天中查看。语音不会重复发送。`);let g=m.run.steeredInto??m.run.id;Sr(),l.has(m.run.id)||l.set(m.run.id,m.run),St.acceptReceipt(m),h.value=St.conversations;let v=St.get(r.id,s);return v&&xr(v),Br(m,o,r.id,i),Ue.value=!1,d=!1,await new Promise((e,i)=>{let a=!1,o=()=>{},u,d=(t,r=``)=>{a||(a=!0,o(),clearTimeout(u),n.removeEventListener(`abort`,p),t?i(t):e(r))},p=()=>d(iQ()),m=()=>{if(!c())return p();if(hr.value!==`online`)return d(Error(`连接中断,本次语音等待已结束,请在聊天中查看消息状态。`));let e=St.get(r.id,s),t=e?.run?.id===g?e.run:void 0,n=l.get(g),i=t&&(!n||t.updatedAt>n.updatedAt)?t:n,a=vQ(g,i,e?.messages??[]);a&&(`error`in a?d(Error(a.error)):d(void 0,a.text))};n.addEventListener(`abort`,p,{once:!0}),o=f([dt,_,b,Le,cn,()=>t.user?.id,hr],m),u=setTimeout(()=>d(Error(`本轮仍未收到完整回复,本次语音等待已结束。可在聊天中继续查看进展。`)),6e5),m()})}finally{ft===u&&(ft=void 0),d&&Rr===a&&(Ue.value=!1)}}async function Kr(e,t=v.value?.id){let n=h.value.find(e=>e.id===t);if(n){if(e===`archive`)return qr(n.archived?`restore`:`archive`,n.id);try{await Q(`/api/app/conversations/${n.id}`,{method:`PATCH`,body:{pinned:!n.pinned}}),await nr(),await rr()}catch(e){He.value=String(e)}}}async function qr(e,t,n=!1){let r=h.value.find(e=>e.id===t);if(!r||at.value)return;let i=n?ot:st;i.value=``,at.value=t,ct.value=e;try{let n=`/api/app/conversations/${t}/lifecycle`,i;if(e!==`restore`){let t=await Q(n),r=t.groups.filter(e=>e.administrator);if(r.length)throw Error(`此 Bot 是群聊${r.map(e=>`「${e.name}」`).join(`、`)}的管理者,请先转交管理权,再归档或删除。`);let a=e===`delete`?`永久删除`:`归档`,o=`${a} ${t.kind===`direct`?`Bot`:`群聊`}「${t.name}」${e===`delete`?`及其聊天记录`:``}?`;if(t.groups.length&&(o+=`\n此 Bot 已加入群聊:${t.groups.map(e=>`「${e.name}」`).join(`、`)}。确认后会先从这些群聊移除,再${a}。`),o+=e===`delete`?`\n此操作无法撤销,${t.kind===`group`?`成员 Bot 和`:``}文件库中的文件会保留。`:`
|
|
277
|
+
聊天记录会保留,可在搜索的“已归档”中取消归档。`,!confirm(o))return;i=t.confirmationToken}await Q(n,{method:`POST`,body:{action:e,...i?{confirmationToken:i}:{}}}),e===`delete`&&(h.value=h.value.filter(e=>e.id!==t),r.kind===`direct`&&(c.value=c.value.filter(e=>e.id!==r.memberIds[0])),cn.value===t&&await a.replace(`/conversations`)),await nr(),cn.value===t&&await rr()}catch(e){i.value=e instanceof Error?e.message:`操作失败,请重试`}finally{at.value=``,ct.value=void 0}}async function Jr(e){if(Yt.value)try{await Q(`/api/app/conversations/${Yt.value.id}/agents/${e}/stop`,{method:`POST`,body:{}}),await rr(),await nr()}catch(e){He.value=e instanceof Error?e.message:`停止失败`}}async function Yr(e){let t=K.value?.id??(v.value?.activeRunId&&!G.value.has(v.value.activeRunId)?v.value.activeRunId:void 0)??J.value?.activeRunId;if(t)try{await Q(`/api/app/runs/${t}/${e}`,{method:`POST`,body:{}}),await rr(void 0,!0)}catch(e){He.value=String(e)}}async function Xr(e,t){if(!Ye.value){Ye.value=e.id,Ze.value=``;try{let n=Xh(e.kind,t);await Q(`/api/app/interactions/${encodeURIComponent(e.id)}/${n.action}`,{method:`POST`,body:n.body}),await rr(void 0,!0)}catch(n){if(Ze.value=n instanceof Error?n.message:`审批答复失败,请重试`,e.kind===`approval`&&t===`full_access`)try{await rr(void 0,!0)}catch{}}finally{Ye.value=``}}}async function Zr(){let e=v.value;if(!e||Ot.value)return;Ot.value=!0;let t=St.beginRead(),n=J.value?.id,r=sn;try{let i=await Q(`/api/app/conversations/${e.id}/messages?limit=50&toolDetails=lazy&before=${_.value[0]?.seq??0}${J.value?`&taskId=${J.value.id}`:``}`);if(r!==sn||v.value?.id!==e.id||J.value?.id!==n)return;let a=St.get(e.id,n);if(!a)return;let o=St.finishRead(t,{...a,messages:i.messages,cursor:i.cursor});o.hasOlder=i.messages.length===50,_.value=o.messages,Je.value=o.hasOlder}catch(e){He.value=String(e)}finally{St.cancelRead(t),Ot.value=!1}}return f(()=>r.query.view,()=>{tr()}),f([cn,ln],()=>{Pe.set(Le.value,lt.value?.filesSnapshot()??[]),Ie.set(Le.value,ht.value),Ge.value=[],qe.value=[],Ve.value=``,Ft=[],It=[],rr(),tr()}),f(()=>t.user?.id,(e,t)=>{e!==t&&(he.value?.close(),ve.value=!1,be.value=[],ge.value++,Rr++,q++,A.value=[],j.value=void 0,M.value=[],N.value=``,Ue.value=!1,Nr(),sn++,br(),Ve.value=``,Ge.value=[],qe.value=[],ht.value=null,Ft=[],It=[],gr?.close(),gr=void 0,vr=[],_r!==void 0&&cancelAnimationFrame(_r),_r=void 0,rn=0,St.hydrate({agents:[],conversations:[],details:[],cursor:0}),St.selectedTasks.clear(),c.value=[],h.value=[],_.value=[],v.value=void 0,oe.value=[],J.value=null,b.value=null,C.value=[],E.value=null,Pe.clear(),Ie.clear(),e&&Dr())}),m(async()=>{window.addEventListener(`offline`,Tr),window.addEventListener(`online`,Er),await Dr(!0),ie=setInterval(()=>{document.visibilityState===`visible`&&navigator.onLine&&(P.value||B.value)&&Zn()},1e4)}),i(()=>{window.removeEventListener(`offline`,Tr),window.removeEventListener(`online`,Er);for(let e of zr.values())clearTimeout(e);zr.clear(),an=!0,q++,ie&&clearInterval(ie),gr?.close(),_r!==void 0&&cancelAnimationFrame(_r),sn++,br()}),(e,r)=>(u(),k(Rj,{ref_key:`shell`,ref:un,"server-name":R(t).serverIdentity?.displayName,"user-name":R(t).accountDisplayName,"user-avatar":R(t).user?.avatar,"is-admin":R(t).user?.role===`admin`,features:A.value,"upstream-ready":R(t).upstreamReady,"upstream-error":R(t).upstreamError,theme:R(n).resolvedTheme,"theme-preference":R(n).theme,"sidebar-title":`聊天`,"sidebar-context-title":`聊天列表`,onLogout:R(t).logout,onToggleTheme:R(n).toggle,onSetTheme:R(n).setTheme,onCreateAgent:r[68]||=e=>Ar(`agent`),onCreateGroup:r[69]||=e=>Ar(`group`),onBotSettingsChanged:Be},{sidebar:S(()=>[U(YI,{conversations:h.value,agents:c.value,selected:cn.value,"main-bot-id":V.value,"bot-control":P.value,"directory-selected":W.value,"is-admin":R(t).user?.role===`admin`,"background-count":B.value?te.value.active:void 0,onMainBot:Gt,onDirectory:$n,onSelect:Or,onSettings:kr,onPin:r[0]||=e=>Kr(`pin`,e),onArchive:r[1]||=e=>Kr(`archive`,e),onDelete:r[2]||=e=>qr(`delete`,e)},null,8,[`conversations`,`agents`,`selected`,`main-bot-id`,`bot-control`,`directory-selected`,`is-admin`,`background-count`])]),"mobile-sidebar":S(()=>[U(YI,{conversations:h.value,agents:c.value,selected:cn.value,"main-bot-id":V.value,"bot-control":P.value,"directory-selected":W.value,"is-admin":R(t).user?.role===`admin`,"background-count":B.value?te.value.active:void 0,onMainBot:Gt,onDirectory:$n,onSelect:Or,onSettings:r[3]||=e=>kr(e,!0),onPin:r[4]||=e=>Kr(`pin`,e),onArchive:r[5]||=e=>Kr(`archive`,e),onDelete:r[6]||=e=>qr(`delete`,e)},null,8,[`conversations`,`agents`,`selected`,`main-bot-id`,`bot-control`,`directory-selected`,`is-admin`,`background-count`])]),default:S(()=>[W.value?(u(),F(`div`,IQ,[N.value?(u(),F(`p`,LQ,s(N.value),1)):z(``,!0),U(aL,{"is-admin":R(t).user?.role===`admin`,agents:c.value,"main-bot-id":V.value,onProfile:Kt,onBack:r[7]||=e=>R(a).push(`/conversations?view=chats`),onSelect:r[8]||=e=>er(e),onEdit:r[9]||=e=>er(e,!0),onCreate:r[10]||=e=>Ar(`agent`),onManage:r[11]||=e=>un.value?.openSettings(`my-bots`)},null,8,[`is-admin`,`agents`,`main-bot-id`])])):z(``,!0),d(D(`div`,{ref_key:`dockRowEl`,ref:Sn,class:`conversation-with-computer`,style:l({"--workspace-dock-width":`${wn.value}px`})},[D(`section`,{class:y([`workspace-chat`,{"workspace-chat--main":ee.value&&B.value}]),"aria-label":`聊天`,onClickCapture:pr},[U(sZ,{onProfile:r[15]||=e=>v.value&&Ar(v.value.kind===`direct`?`editAgent`:`editGroup`,v.value,!0),"current-goal-id":J.value?.goal?.id,"activity-agents":c.value,onTaskDetails:r[16]||=e=>fe(),onRuntimeDetails:r[17]||=e=>fe(e),onVisibleMessages:cr,ref_key:`timeline`,ref:mt,identity:`${cn.value}:${J.value?.id??``}`,"loading-older":Ot.value,messages:Dt.value,title:Bn.value,subtitle:v.value?.kind===`group`?`${Rn.value.length} 位成员`:ee.value?(ne.value?`正在回复`:`可以继续对话`)+(B.value&&te.value.active?` · 工作流 ${te.value.active}`:``):``,"header-main-bot":ee.value,"header-avatar-name":Vn.value,"header-avatar":Hn.value,"header-avatar-kind":v.value?.kind===`group`?`team`:`agent`,"header-avatar-members":Un.value,"header-avatar-state":ee.value?ne.value?`working`:`idle`:zn.value?R(HI)(v.value,zn.value.id):`idle`,"header-avatar-activity-key":v.value?.lastSeq,"frosted-header":``,loading:We.value,"has-older":Je.value&&!!v.value,"show-tools":xt.value,"allow-branch":!1,thinking:ne.value||!!Gn.value,"thinking-label":qn.value,"thinking-identity":Jn.value,"agent-avatars":Object.fromEntries(c.value.map(e=>[e.id,e.avatar])),"show-assistant-identity":v.value?.kind===`group`,"agent-states":Object.fromEntries(Rn.value.map(e=>[e.id,R(HI)(v.value,e.id)])),"mention-names":Rn.value.map(e=>e.name),"empty-logo":!!v.value,"empty-title":v.value?`聊点什么`:`还没有聊天`,"empty-description":v.value?``:`创建机器人,或选择成员新建群聊。`,interaction:C.value[0]?{id:C.value[0].id,kind:C.value[0].kind,prompt:C.value[0].message,options:C.value[0].choices,reviewAvailable:C.value[0].reviewAvailable,approvalReview:C.value[0].approvalReview}:null,"interaction-busy":!!Ye.value,"interaction-error":Ze.value,"approval-agent-name":c.value.find(e=>e.id===C.value[0]?.agentId)?.name,"can-manage-permissions":R(t).user?.role===`admin`,onLoadOlder:Zr,onQuote:r[18]||=e=>ht.value=e,onPreview:Pt,onPreviewFile:Pt,onRetrySend:Wr,onBrowserControl:In,onCredentialDraft:Fn,onApprovalChoice:r[19]||=e=>C.value[0]&&Xr(C.value[0],e),onClarify:r[20]||=e=>C.value[0]&&Xr(C.value[0],e)},{"header-leading":S(()=>[v.value?(u(),F(`button`,{key:0,class:`workspace-list-back icon-button`,"aria-label":`返回 Bot 列表`,onClick:r[12]||=e=>R(a).push(P.value?`/conversations?view=chats`:`/conversations`)},[U(Z,{name:`chevron-left`})])):z(``,!0)]),"header-actions":S(()=>[v.value?(u(),F(`div`,RQ,[v.value.kind===`group`&&oe.value.length?(u(),F(`span`,zQ,[D(`select`,{class:`task-picker`,"aria-label":`当前话题`,"aria-busy":jn.value,disabled:jn.value,value:J.value?.id,onChange:lr},[(u(!0),F(T,null,p(oe.value,e=>(u(),F(`option`,{key:e.id,value:e.id},s(!e.messageCount&&e.titleSource===`automatic`?`新话题`:e.title),9,VQ))),128)),D(`option`,{value:W$},`新建话题`)],40,BQ),U(Z,{name:`chevron-down`,size:14})])):z(``,!0),v.value.kind===`group`?(u(),F(`button`,{key:1,class:`icon-button`,"aria-label":`群聊设置`,title:`群聊设置`,onClick:r[13]||=e=>Ar(`editGroup`)},[U(Z,{name:`settings`})])):z(``,!0),D(`button`,{type:`button`,class:`icon-button`,"aria-label":`Inspector`,title:`Inspector`,"aria-pressed":hn.value===`inspector`,onClick:r[14]||=e=>Nn(`inspector`)},[U(Z,{name:`bug`})],8,HQ)])):z(``,!0)]),_:1},8,`current-goal-id.activity-agents.identity.loading-older.messages.title.subtitle.header-main-bot.header-avatar-name.header-avatar.header-avatar-kind.header-avatar-members.header-avatar-state.header-avatar-activity-key.loading.has-older.show-tools.thinking.thinking-label.thinking-identity.agent-avatars.show-assistant-identity.agent-states.mention-names.empty-logo.empty-title.empty-description.interaction.interaction-busy.interaction-error.approval-agent-name.can-manage-permissions`.split(`.`)),He.value?(u(),F(`p`,UQ,[w(s(He.value),1),D(`button`,{class:`icon-button`,onClick:r[21]||=e=>He.value=``,"aria-label":`关闭错误`},[U(Z,{name:`close`})])])):z(``,!0),v.value?(u(),k(nQ,{key:Le.value,ref_key:`composer`,ref:lt,mode:`group`,"bot-layout":``,"draft-key":Le.value,"voice-bot-id":zn.value?.id,"voice-active":ut.value,"delivery-mode":ce.value,"onUpdate:deliveryMode":r[30]||=e=>ce.value=e,"delivery-available":v.value.kind===`group`&&!J.value?.goal,"delivery-disabled":!Ae.value||Ue.value||We.value||!!J.value?.activeRunId,"delivery-disabled-reason":Ae.value?``:`负责人需要是本机上未归档的 Bot`,disabled:v.value.archived||We.value||v.value.id!==cn.value,sending:Ue.value,"stop-while-running":``,streaming:re.value,"tool-trace-visible":xt.value,reference:jt.value,"mention-options":v.value.kind===`group`?Rn.value.map(e=>({id:e.id,label:e.name,insertText:`@${e.name} `})):[],onSend:Lt,onStop:r[31]||=e=>Yr(`stop`),onToolTraceToggle:r[32]||=e=>xt.value=!xt.value,onClearReference:r[33]||=e=>ht.value=null,onError:r[34]||=e=>He.value=e},{activity:S(()=>[K.value?.status===`queued`?(u(),F(`p`,WQ,`正在等待可用机器人`)):v.value.collaborationWaiting?(u(),F(`p`,GQ,[D(`button`,{onClick:r[22]||=e=>he.value?.open(`collaboration`,v.value.memberIds[0])},`等待同伴回复 · 查看协作`)])):z(``,!0)]),"model-controls":S(({contextTarget:e,optionsTarget:n})=>[zn.value?(u(),k(qG,{compact:``,"options-target":n,"context-target":e,key:`${R(t).user?.id}:${zn.value.id}`,agent:zn.value,context:E.value,running:ne.value,disabled:v.value.archived||We.value||Ue.value,onSaved:r[23]||=e=>{c.value=c.value.map(t=>t.id===e.id?e:t)}},null,8,[`options-target`,`context-target`,`agent`,`context`,`running`,`disabled`])):(u(),k(VW,{key:1,compact:``,snapshot:E.value},null,8,[`snapshot`]))]),"realtime-voice":S(({disabled:e})=>[U(_Q,{disabled:e,"draft-key":Le.value,"bot-id":zn.value?.id,submit:Gr,onActiveChange:r[24]||=e=>ut.value=e,onError:r[25]||=e=>He.value=e,onSettings:r[26]||=e=>un.value?.openSettings(`system-voice`)},null,8,[`disabled`,`draft-key`,`bot-id`])]),"before-input":S(()=>[v.value?.kind===`group`&&x.value.length?(u(),F(`aside`,KQ,[(u(!0),F(T,null,p(x.value,e=>(u(),F(`button`,{key:e.id,type:`button`,onClick:t=>Or(e.displayConversationId)},`等待你处理 · 前往执行 Bot 单聊`,8,qQ))),128))])):z(``,!0),ve.value?(u(),F(`div`,JQ,[v.value.kind===`direct`&&be.value.some(e=>e.memberIds.includes(v.value.memberIds[0]))?(u(),F(`label`,YQ,[r[71]||=w(`当前项目`,-1),d(D(`select`,{"onUpdate:modelValue":r[27]||=e=>we.value=e},[r[70]||=D(`option`,{value:``},`不关联项目`,-1),(u(!0),F(T,null,p(be.value.filter(e=>!e.archived&&e.memberIds.includes(v.value.memberIds[0])),e=>(u(),F(`option`,{key:e.id,value:e.id},s(e.name),9,XQ))),128))],512),[[Me,we.value]])])):z(``,!0),v.value.collaborationMode===`discussion`&&!ce.value?(u(),F(`label`,ZQ,[r[73]||=w(`讨论轮数`,-1),d(D(`select`,{"onUpdate:modelValue":r[28]||=e=>Te.value=e},[r[72]||=D(`option`,{value:void 0},`按消息要求`,-1),(u(),F(T,null,p(12,e=>D(`option`,{key:e,value:e},s(e)+` 轮`,9,QQ)),64))],512),[[Me,Te.value]])])):z(``,!0),ce.value&&v.value.collaborationMode===`discussion`?(u(),F(`label`,$Q,[r[74]||=w(`交付负责人`,-1),d(D(`select`,{"onUpdate:modelValue":r[29]||=e=>Ee.value=e},[D(`option`,e$,s(ke.value?.name??`请先授权负责人`),1),(u(!0),F(T,null,p(Oe.value,e=>(u(),F(`option`,{key:e.id,value:e.id},s(e.name),9,t$))),128))],512),[[Me,Ee.value]])])):z(``,!0)])):z(``,!0)]),_:1},8,[`draft-key`,`voice-bot-id`,`voice-active`,`delivery-mode`,`delivery-available`,`delivery-disabled`,`delivery-disabled-reason`,`disabled`,`sending`,`streaming`,`tool-trace-visible`,`reference`,`mention-options`])):z(``,!0)],34),En.value?(u(),F(T,{key:0},[U(YA,{class:`desktop-only-dock-resize`,label:`调整右侧栏宽度`,onDrag:kn,onReset:An}),D(`aside`,{class:`conversation-dock`,style:l(Tn.value)},[le.value?(u(),k(mq,{key:`${J.value?.id}:${le.value}`,goal:J.value?.goal,assignments:se.value,agents:c.value,"runtime-tasks":de.value,artifacts:Dt.value.find(e=>e.goalCard)?.goalCard?.artifacts,"runtime-only":le.value===`runtime`,"save-criteria":fr,onClose:Qn,onStop:ur,onResume:dr},null,8,[`goal`,`assignments`,`agents`,`runtime-tasks`,`artifacts`,`runtime-only`])):hn.value===`inspector`&&v.value?(u(),k(oK,{key:1,"conversation-id":v.value.id,"task-id":J.value?.id,onClose:r[35]||=e=>hn.value=void 0},null,8,[`conversation-id`,`task-id`])):Rt.value===`editAgent`&&Xt.value?(u(),k(gW,{active:!gn.value,onWorkspace:r[36]||=e=>{vn.value=e,gn.value=!0},"main-bot-id":V.value,onConfigure:r[37]||=e=>{Mn()&&(Nr(),un.value?.openSettings(`my-bots`,void 0,e))},"initial-edit":!Ut.value,connection:hr.value,onDesktop:r[38]||=(e,t,n)=>Pn(e,t,n,!1),onSettings:r[39]||=e=>un.value?.openLocalVm(),onOpenConversation:r[40]||=(e,t)=>{Mn()&&(Nr(),R(a).push({path:`/conversations/`+e,query:t?{taskId:t}:{}}))},ref_key:`botProfile`,ref:Ht,key:Xt.value.id,"permission-control":P.value,onManagePermissions:r[41]||=e=>un.value?.openSettings(`my-bots`),agent:Xt.value,draft:$,agents:c.value,conversations:h.value,"conversation-id":Bt.value,"is-admin":R(t).user?.role===`admin`,"knowledge-enabled":ve.value,busy:Ue.value,error:He.value,onClose:Nr,onSave:Pr,onChanged:Re,onManageModels:r[42]||=e=>un.value?.openSettings(`system-models`)},null,8,[`active`,`main-bot-id`,`initial-edit`,`connection`,`permission-control`,`agent`,`draft`,`agents`,`conversations`,`conversation-id`,`is-admin`,`knowledge-enabled`,`busy`,`error`])):z(``,!0)],4)],64)):z(``,!0),Wt.value?(u(),k(Ml,{key:1,"target-bot-id":Wt.value,onClose:r[43]||=e=>Wt.value=``,onChanged:qt},null,8,[`target-bot-id`])):z(``,!0)],4),[[Se,!gn.value&&!W.value]]),mn.value&&vn.value?(u(),k(_t,{key:1,ref_key:`desktopViewer`,ref:fn,agents:[vn.value],backend:yn.value,host:bn.value,"auto-take":pn.value,onChanged:r[44]||=e=>rr(),onClose:r[45]||=e=>mn.value=!1},null,8,[`agents`,`backend`,`host`,`auto-take`])):z(``,!0),gn.value&&vn.value?(u(),k(mK,{key:2,ref_key:`vmWorkspace`,ref:dn,agents:c.value.filter(e=>e.execution===`computer`&&!e.archived&&!e.computerEnvironmentId),primary:vn.value.id,onClose:r[46]||=e=>gn.value=!1},null,8,[`agents`,`primary`])):z(``,!0),U(Rq,{section:`groups`,label:`搜索聊天`,items:$e.value,tabbed:``,onOpen:r[47]||=e=>ot.value=``,onSelect:Or},{"item-actions":S(({item:e})=>[it.value.has(e.id)?(u(),F(`div`,n$,[D(`button`,{type:`button`,class:`search-restore`,"aria-label":`取消归档:${e.title}`,disabled:!!at.value,onClick:t=>qr(`restore`,e.id,!0)},s(at.value===e.id&&ct.value===`restore`?`恢复中…`:`取消归档`),9,r$),D(`button`,{type:`button`,class:`search-delete`,"aria-label":`删除聊天:${e.title}`,disabled:!!at.value,"aria-busy":at.value===e.id&&ct.value===`delete`,onClick:t=>qr(`delete`,e.id,!0)},[U(Z,{name:`trash`,size:15}),w(s(at.value===e.id&&ct.value===`delete`?`删除中…`:`删除`),1)],8,i$)])):z(``,!0)]),footer:S(()=>[ot.value?(u(),F(`p`,a$,s(ot.value),1)):z(``,!0)]),_:1},8,[`items`]),(u(),k(L,{to:`body`},[st.value?(u(),F(`div`,o$,[D(`span`,null,s(st.value),1),D(`button`,{type:`button`,"aria-label":`关闭聊天操作提示`,onClick:r[48]||=e=>st.value=``},[U(Z,{name:`close`,size:16})])])):z(``,!0)])),gt.value?(u(),k(rH,{key:3,item:gt.value,items:kt.value,onClose:r[49]||=e=>gt.value=null},null,8,[`item`,`items`])):z(``,!0),U(kQ,{modelValue:bt.value,"onUpdate:modelValue":r[50]||=e=>bt.value=e,images:At.value},null,8,[`modelValue`,`images`]),(u(),k(L,{to:`body`},[Rt.value&&Rt.value!==`editAgent`?(u(),F(`dialog`,{key:0,ref_key:`dialogElement`,ref:Vt,class:`editor`,"aria-labelledby":`conversation-editor-title`,onCancel:r[67]||=X(e=>!Ue.value&&Nr(),[`prevent`])},[Rt.value===`agent`&&P.value?(u(),k(NL,{key:0,busy:Ue.value,error:He.value,onClose:Nr,onSubmit:Ir},null,8,[`busy`,`error`])):(u(),F(`form`,{key:1,onSubmit:X(Lr,[`prevent`])},[D(`header`,null,[D(`h2`,s$,s(Rt.value===`agent`?`创建 Bot`:Rt.value===`group`?`创建团队`:`群聊设置`),1),D(`button`,{type:`button`,class:`icon-button`,"aria-label":`关闭`,onClick:Nr},[U(Z,{name:`close`,size:18})])]),D(`div`,c$,[He.value?(u(),F(`p`,l$,s(He.value),1)):z(``,!0),Rt.value===`editGroup`?(u(),k(_n,{key:1,kind:`conversations`,"target-id":zt.value,onDirtyChange:r[51]||=e=>jr.value=e,onBusyChange:r[52]||=e=>Mr.value=e},null,8,[`target-id`])):z(``,!0),D(`label`,null,[r[75]||=w(`名称`,-1),d(D(`input`,{"onUpdate:modelValue":r[53]||=e=>$.name=e,readonly:Zt.value,required:``,maxlength:`100`},null,8,u$),[[Y,$.name]])]),Rt.value===`group`?(u(),F(`details`,d$,[r[76]||=D(`summary`,null,`从团队模板选择(可选)`,-1),U(FQ,{selected:Qt.value,available:c.value.filter(e=>!e.archived&&!e.temporaryGoalId).length,onSelect:tn},null,8,[`selected`,`available`])])):z(``,!0),Zt.value?(u(),F(`p`,f$,`引用的机器人配置由远端管理,请在远端修改名称、头像和角色规则。`)):z(``,!0),Yn.value&&!Zt.value?(u(),F(T,{key:4},[D(`button`,{class:`avatar-summary`,type:`button`,"aria-expanded":me.value,onClick:r[54]||=e=>me.value=!me.value},[U(Xe,{name:$.name||`新 Bot`,avatar:$.avatar,size:48,animated:!1},null,8,[`name`,`avatar`]),r[77]||=D(`span`,{class:`avatar-summary__copy`},[w(`Bot 头像`),D(`small`,null,`点击调整外形或上传图片`)],-1),U(Z,{name:`edit`,size:16})],8,p$),me.value?(u(),k(Kn,{key:`${Rt.value}:${zt.value}`,profile:Nt.value,embedded:``,"show-name":!1,"show-default-model":!1,"show-actions":!1,onAvatarChange:r[55]||=e=>$.avatar=e},null,8,[`profile`])):z(``,!0),D(`label`,null,[r[78]||=w(`一句话职责`,-1),d(D(`input`,{"onUpdate:modelValue":r[56]||=e=>$.job=e,maxlength:`120`,placeholder:`例如:检查代码正确性,给出有依据的修改建议`},null,512),[[Y,$.job]])])],64)):Rt.value===`editGroup`?(u(),F(`div`,m$,[U(Ke,{name:$.name,members:R(VI)($.memberIds,c.value,Rt.value===`editGroup`?Yt.value:void 0),size:64},null,8,[`name`,`members`]),r[79]||=D(`small`,null,`群聊头像由成员头像自动组合,随成员头像更新。`,-1)])):z(``,!0),Yn.value?(u(),F(`label`,h$,[r[80]||=w(`角色提示词与规则`,-1),d(D(`textarea`,{"onUpdate:modelValue":r[57]||=e=>$.instructions=e,readonly:Zt.value,rows:`6`,maxlength:`24000`,placeholder:Yn.value?`例如:你是代码审查员。重点检查正确性、边界情况和测试证据。`:`所有成员共同遵守的协作规则`},null,8,g$),[[Y,$.instructions]])])):z(``,!0),Yn.value&&!Zt.value?(u(),F(T,{key:7},[D(`p`,_$,[U(Z,{name:`brain`,size:16}),r[81]||=w(`模型:跟随服务器默认配置`,-1),r[82]||=D(`small`,null,`创建后可在 Bot 资料中调整模型与思考等级。`,-1)]),ve.value?(u(),F(`details`,v$,[r[84]||=D(`summary`,null,`高级设置`,-1),D(`label`,y$,[D(`span`,null,[d(D(`input`,{"onUpdate:modelValue":r[58]||=e=>$.memoryEnabled=e,type:`checkbox`},null,512),[[je,$.memoryEnabled]]),r[83]||=w(`自动记录长期事实`,-1)])]),D(`small`,null,s(P.value?`继承服务器已开放的协作与执行能力,可在 Bot 设置中收紧。`:`组队和同伴通信默认可用,使用服务器已有授权。`),1)])):z(``,!0)],64)):z(``,!0),$t.value?(u(),F(`fieldset`,b$,[r[85]||=D(`legend`,null,`角色分配`,-1),(u(!0),F(T,null,p($t.value.roles,(e,t)=>(u(),F(`label`,{key:e.name},[w(s(e.name)+s(e.host?` · 管理员`:``)+` `,1),D(`select`,{value:$.memberIds[t],"aria-label":`${e.name}对应的机器人`,onChange:e=>nn(t,e.target.value)},[(u(!0),F(T,null,p(c.value.filter(e=>!e.archived&&!e.temporaryGoalId),e=>(u(),F(`option`,{key:e.id,value:e.id},s(e.name),9,S$))),128))],40,x$),D(`small`,null,s(e.description),1)]))),128)),r[86]||=D(`small`,null,`角色分工仅在本群生效,聊天中保留机器人的名称和头像。`,-1)])):Yn.value?z(``,!0):(u(),F(`fieldset`,C$,[D(`legend`,null,`选择成员 · `+s($.memberIds.length)+`/8`,1),(u(!0),F(T,null,p(c.value.filter(e=>!e.temporaryGoalId&&(!e.archived||Rt.value===`editGroup`&&Yt.value?.memberIds.includes(e.id))),e=>(u(),F(`label`,{key:e.id,class:`member-choice`},[d(D(`input`,{"onUpdate:modelValue":r[59]||=e=>$.memberIds=e,type:`checkbox`,value:e.id,disabled:Ue.value||!$.memberIds.includes(e.id)&&$.memberIds.length>=8},null,8,w$),[[je,$.memberIds]]),U(Xe,{name:e.name,avatar:e.avatar,size:36,animated:!1},null,8,[`name`,`avatar`]),D(`span`,T$,[D(`strong`,null,s(e.name),1),D(`small`,null,s(e.job||e.description||e.instructions.slice(0,80)||`尚未填写职责`),1)])]))),128)),Rt.value===`group`&&c.value.filter(e=>!e.archived&&!e.temporaryGoalId).length<2?(u(),F(`small`,E$,`至少需要两个机器人才能创建群聊。`)):z(``,!0),Rt.value===`editGroup`?(u(),F(`small`,D$,`可增减成员,最多 8 位。目标进行时不能移除目标负责人;其他成员可按需调整。`)):z(``,!0),(u(!0),F(T,null,p(c.value.filter(e=>Yt.value?.activeAgentStates?.[e.id]),e=>(u(),F(`button`,{key:`stop:${e.id}`,type:`button`,onClick:t=>Jr(e.id)},`停止 `+s(e.name),9,O$))),128))])),Rt.value===`editGroup`&&Object.keys($.memberRoles).length?(u(),F(`fieldset`,k$,[r[88]||=D(`legend`,null,`角色分工`,-1),(u(!0),F(T,null,p($.memberRoles,(e,t)=>(u(),F(`p`,{key:t},[w(s(c.value.find(e=>e.id===t)?.name)+` · `+s(e.name),1),r[87]||=D(`br`,null,null,-1),D(`small`,null,s(e.description),1)]))),128))])):z(``,!0),Yn.value?z(``,!0):(u(),F(T,{key:11},[D(`label`,null,[r[89]||=w(`交付负责人`,-1),d(D(`select`,{"onUpdate:modelValue":r[60]||=e=>$.administratorId=e,required:``},[(u(!0),F(T,null,p(c.value.filter(e=>$.memberIds.includes(e.id)),e=>(u(),F(`option`,{key:e.id,value:e.id},s(e.name),9,A$))),128))],512),[[Me,$.administratorId]])]),$.mode===`discussion`?(u(),F(`small`,j$,`讨论时成员平等;启动交付目标时由所选负责人协调。`)):z(``,!0),D(`label`,null,[r[90]||=w(`群规则(可选)`,-1),d(D(`textarea`,{"onUpdate:modelValue":r[61]||=e=>$.instructions=e,rows:`3`,maxlength:`24000`,placeholder:`例如:回答简洁,重要结论注明来源`},null,512),[[Y,$.instructions]])]),Rt.value===`group`?(u(),F(`p`,M$,`创建后即可聊天。需要交付具体结果时,再开启交付目标。`)):z(``,!0),D(`label`,null,[r[93]||=w(`协作方式`,-1),d(D(`select`,{"onUpdate:modelValue":r[62]||=e=>$.mode=e},[ve.value?(u(),F(`option`,N$,`平等讨论`)):z(``,!0),r[91]||=D(`option`,{value:`host`},`管理员协调`,-1),r[92]||=D(`option`,{value:`free`},`自由协作`,-1)],512),[[Me,$.mode]]),D(`small`,null,s($.mode===`discussion`?`成员平等参与,按本条消息要求讨论。`:$.mode===`host`?`由负责人安排成员回复,并汇总结果。`:`成员按提及与自动回复设置参与协作。`),1)]),D(`details`,P$,[r[97]||=D(`summary`,null,`高级协作设置`,-1),ve.value?(u(),F(`button`,{key:0,type:`button`,onClick:r[63]||=e=>he.value?.open(`projects`,$.memberIds[0],Yt.value?.projectId)},`关联项目与共享记忆`)):z(``,!0),$.mode===`free`?(u(),F(`fieldset`,F$,[r[94]||=D(`legend`,null,`未 @ 时自动回复`,-1),(u(!0),F(T,null,p(c.value.filter(e=>$.memberIds.includes(e.id)),e=>(u(),F(`label`,{key:e.id},[d(D(`input`,{"onUpdate:modelValue":r[64]||=e=>$.autoReplyIds=e,type:`checkbox`,value:e.id},null,8,I$),[[je,$.autoReplyIds]]),w(s(e.name),1)]))),128))])):z(``,!0),$.mode===`discussion`?z(``,!0):(u(),F(`label`,L$,[D(`input`,{type:`checkbox`,checked:$.maxReplyRounds===-1,onChange:r[65]||=e=>$.maxReplyRounds=e.target.checked?-1:3},null,40,R$),r[95]||=w(`不限制自动协作轮数`,-1)])),$.mode!==`discussion`&&$.maxReplyRounds!==-1?(u(),F(`label`,z$,[r[96]||=w(`自动协作轮数`,-1),d(D(`input`,{"onUpdate:modelValue":r[66]||=e=>$.maxReplyRounds=e,type:`number`,min:`1`,max:`100`,required:``},null,512),[[Y,$.maxReplyRounds,void 0,{number:!0}]])])):z(``,!0)])],64))]),D(`footer`,null,[D(`button`,{class:`quiet-button`,type:`button`,onClick:Nr},`取消`),Zt.value?z(``,!0):(u(),F(`button`,{key:0,class:`solid-button`,disabled:Ue.value||!Yn.value&&($.memberIds.length<(Rt.value===`group`?2:1)||$.memberIds.length>8)},s(Ue.value?`保存中…`:Rt.value===`agent`?`创建 Bot`:Rt.value===`group`?`创建团队`:`保存`),9,B$))])],32))],544)):z(``,!0)])),ve.value?(u(),k(pe,{key:4,ref_key:`knowledgePanel`,ref:he,agents:c.value,conversations:h.value,"conversation-id":v.value?.id,"task-id":J.value?.id,assignments:se.value,goal:J.value?.goal,revision:ge.value,onChanged:Re},null,8,[`agents`,`conversations`,`conversation-id`,`task-id`,`assignments`,`goal`,`revision`])):z(``,!0)]),_:1},8,[`server-name`,`user-name`,`user-avatar`,`is-admin`,`features`,`upstream-ready`,`upstream-error`,`theme`,`theme-preference`,`onLogout`,`onToggleTheme`,`onSetTheme`]))}}),K$=t({default:()=>q$}),q$=V(G$,[[`__scopeId`,`data-v-b34db19c`]]);export{Ar as _,$d as a,_n as b,Hl as c,Rl as d,q$ as default,zl as f,ko as g,hl as h,Uf as i,Vl as l,Ml as m,Yh as n,jd as o,Ll as p,Yp as r,_d as s,K$ as t,Bl as u,tr as v,Xn as y};
|
|
278
|
+
//# sourceMappingURL=ConversationsView-CzFWn-79.js.map
|