@lsamien/yaovi 0.1.4 → 0.1.5
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 +12 -4
- package/dist/assets/{AboutDialog-CDpS-zAu.js → AboutDialog-2Zq3b7ma.js} +2 -2
- package/dist/assets/{AboutDialog-CDpS-zAu.js.map → AboutDialog-2Zq3b7ma.js.map} +1 -1
- package/dist/assets/{BotAutomationsView-RXBQzdfc.js → BotAutomationsView-C4EwHtYy.js} +2 -2
- package/dist/assets/{BotAutomationsView-RXBQzdfc.js.map → BotAutomationsView-C4EwHtYy.js.map} +1 -1
- package/dist/assets/{BotControlSettingsPanel-GQEVHXbw.js → BotControlSettingsPanel-DJ71O3Kh.js} +2 -2
- package/dist/assets/{BotControlSettingsPanel-GQEVHXbw.js.map → BotControlSettingsPanel-DJ71O3Kh.js.map} +1 -1
- package/dist/assets/{BotPluginsDialog-HIhXqyGn.js → BotPluginsDialog-Cgqn4RlP.js} +2 -2
- package/dist/assets/{BotPluginsDialog-HIhXqyGn.js.map → BotPluginsDialog-Cgqn4RlP.js.map} +1 -1
- package/dist/assets/{BotSettingsPanel-Bkqal3lR.js → BotSettingsPanel-C_1zAGWJ.js} +3 -3
- package/dist/assets/{BotSettingsPanel-Bkqal3lR.js.map → BotSettingsPanel-C_1zAGWJ.js.map} +1 -1
- package/dist/assets/{ComputerPanel-Dt73pgTG.js → ComputerPanel-CuVl9oX7.js} +2 -2
- package/dist/assets/{ComputerPanel-Dt73pgTG.js.map → ComputerPanel-CuVl9oX7.js.map} +1 -1
- package/dist/assets/{ComputerViewerView-ChYgaS9q.js → ComputerViewerView-BoI_aqLr.js} +2 -2
- package/dist/assets/{ComputerViewerView-ChYgaS9q.js.map → ComputerViewerView-BoI_aqLr.js.map} +1 -1
- package/dist/assets/{ConversationsView-EdF5AM1T.css → ConversationsView-aPMgqa0O.css} +1 -1
- package/dist/assets/{ConversationsView-DzcDJZh3.js → ConversationsView-kztie5lF.js} +16 -16
- package/dist/assets/ConversationsView-kztie5lF.js.map +1 -0
- package/dist/assets/{LocalVmSettingsPanel-DLbDb5Tq.js → LocalVmSettingsPanel-BZ1Jeqqk.js} +2 -2
- package/dist/assets/{LocalVmSettingsPanel-DLbDb5Tq.js.map → LocalVmSettingsPanel-BZ1Jeqqk.js.map} +1 -1
- package/dist/assets/{ModelNetworkChoice-Cfyt4Unl.js → ModelNetworkChoice-BQ8m2N3V.js} +2 -2
- package/dist/assets/{ModelNetworkChoice-Cfyt4Unl.js.map → ModelNetworkChoice-BQ8m2N3V.js.map} +1 -1
- package/dist/assets/{StandaloneDialog-Cte829Ai.js → StandaloneDialog-hF3z7bfi.js} +2 -2
- package/dist/assets/{StandaloneDialog-Cte829Ai.js.map → StandaloneDialog-hF3z7bfi.js.map} +1 -1
- package/dist/assets/{UpdateCheckDialog-BaMo_M4n.js → UpdateCheckDialog-Bz8JhRh4.js} +2 -2
- package/dist/assets/{UpdateCheckDialog-BaMo_M4n.js.map → UpdateCheckDialog-Bz8JhRh4.js.map} +1 -1
- package/dist/assets/{UsageView-CklMPG4n.js → UsageView-ZsSbQzIY.js} +2 -2
- package/dist/assets/{UsageView-CklMPG4n.js.map → UsageView-ZsSbQzIY.js.map} +1 -1
- package/dist/assets/WorkspaceKnowledgePanel-E549Ct1E.js +3 -0
- package/dist/assets/{WorkspaceKnowledgePanel-BdbhD3rO.js.map → WorkspaceKnowledgePanel-E549Ct1E.js.map} +1 -1
- package/dist/assets/{WorkspaceRoutinesPanel-VpRoMe1x.js → WorkspaceRoutinesPanel-NFWzy1R-.js} +2 -2
- package/dist/assets/{WorkspaceRoutinesPanel-VpRoMe1x.js.map → WorkspaceRoutinesPanel-NFWzy1R-.js.map} +1 -1
- package/dist/assets/{WorkstreamsView-BwZpuuhs.js → WorkstreamsView-CxZ8YUvP.js} +2 -2
- package/dist/assets/{WorkstreamsView-BwZpuuhs.js.map → WorkstreamsView-CxZ8YUvP.js.map} +1 -1
- package/dist/assets/{index-Cx1SdzRY.js → index-P_kZCZ2-.js} +3 -3
- package/dist/assets/{index-Cx1SdzRY.js.map → index-P_kZCZ2-.js.map} +1 -1
- package/dist/assets/{pdf-CoNh_Rmj.js → pdf-CNS_Rszb.js} +2 -2
- package/dist/assets/{pdf-CoNh_Rmj.js.map → pdf-CNS_Rszb.js.map} +1 -1
- package/dist/index.html +1 -1
- package/dist-server/server/workspaceCollaboration.js +9 -12
- package/dist-server/server/workspaceStore.js +3 -1
- package/dist-server/shared/peerExchange.js +26 -0
- package/package.json +1 -1
- package/release.json +3 -3
- package/dist/assets/ConversationsView-DzcDJZh3.js.map +0 -1
- package/dist/assets/WorkspaceKnowledgePanel-BdbhD3rO.js +0 -3
|
@@ -1,11 +1,11 @@
|
|
|
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,Ot as h,P as g,Q as _,R as v,T 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,st as V,t as H,u as U,v as W,w as G,x as K,y as ee}from"./_plugin-vue_export-helper-CD0r-vVb.js";import{a as te,i as q,n as J,o as ne,r as re,s as ie,t as ae}from"./WorkspaceKnowledgePanel-
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/BotSettingsPanel-C_1zAGWJ.js","assets/_plugin-vue_export-helper-CD0r-vVb.js","assets/WorkspaceKnowledgePanel-E549Ct1E.js","assets/index-P_kZCZ2-.js","assets/rolldown-runtime-Dd_uD5pT.js","assets/index-C-5Gq82f.css","assets/WorkspaceKnowledgePanel-CBlUplay.css","assets/BotSettingsPanel-DoVgq5sG.css","assets/BotControlSettingsPanel-DJ71O3Kh.js","assets/BotControlSettingsPanel-UkxbeK6r.css","assets/AboutDialog-2Zq3b7ma.js","assets/StandaloneDialog-hF3z7bfi.js","assets/StandaloneDialog-BS6Ta2zL.css","assets/AboutDialog-UVDKIyOS.css","assets/UpdateCheckDialog-Bz8JhRh4.js","assets/UpdateCheckDialog-CRlyWnE7.css","assets/BotPluginsDialog-Cgqn4RlP.js","assets/BotPluginsDialog-CdVYgf_5.css","assets/pdf-CNS_Rszb.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,Ot as h,P as g,Q as _,R as v,T 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,st as V,t as H,u as U,v as W,w as G,x as K,y as ee}from"./_plugin-vue_export-helper-CD0r-vVb.js";import{a as te,i as q,n as J,o as ne,r as re,s as ie,t as ae}from"./WorkspaceKnowledgePanel-E549Ct1E.js";import{$ as oe,A as se,B as Y,C as ce,D as le,E as ue,F as de,G as fe,H as pe,I as me,J as he,K as ge,L as _e,M as ve,N as ye,O as be,P as xe,Q as Se,R as Ce,S as we,T as Te,V as Ee,W as De,X as Oe,Y as ke,Z as Ae,_ as je,a as Me,at as Ne,b as Pe,c as Fe,ct as Ie,d as Le,et as Re,f as ze,g as Be,h as Ve,i as He,it as Ue,j as X,k as We,l as Ge,lt as Z,m as Ke,n as qe,nt as Je,o as Ye,ot as Q,p as Xe,q as Ze,r as Qe,rt as $e,s as et,st as tt,t as nt,tt as rt,u as it,v as at,w as ot,x as st,y as ct,z as lt}from"./index-P_kZCZ2-.js";import{t as ut}from"./StandaloneDialog-hF3z7bfi.js";import{n as dt,r as ft,t as pt}from"./ModelNetworkChoice-BQ8m2N3V.js";import{t as mt}from"./WorkspaceRoutinesPanel-NFWzy1R-.js";import{n as ht,t as gt}from"./ComputerPanel-CuVl9oX7.js";import{o as _t,t as vt}from"./backgroundTaskPresentation-CJMcreMr.js";var yt={xmlns:`http://www.w3.org/2000/svg`,"xmlns:xlink":`http://www.w3.org/1999/xlink`,viewBox:`0 0 512 512`},bt=E({name:`AddOutline`,render:function(e,t){return u(),F(`svg`,yt,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)])}}),xt={xmlns:`http://www.w3.org/2000/svg`,"xmlns:xlink":`http://www.w3.org/1999/xlink`,viewBox:`0 0 512 512`},St=E({name:`CheckmarkCircle`,render:function(e,t){return u(),F(`svg`,xt,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)])}}),Ct={xmlns:`http://www.w3.org/2000/svg`,"xmlns:xlink":`http://www.w3.org/1999/xlink`,viewBox:`0 0 512 512`},wt=E({name:`ChevronBackOutline`,render:function(e,t){return u(),F(`svg`,Ct,t[0]||=[D(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`48`,d:`M328 112L184 256l144 144`},null,-1)])}}),Tt={xmlns:`http://www.w3.org/2000/svg`,"xmlns:xlink":`http://www.w3.org/1999/xlink`,viewBox:`0 0 512 512`},Et=E({name:`CloseOutline`,render:function(e,t){return u(),F(`svg`,Tt,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)])}}),Dt={xmlns:`http://www.w3.org/2000/svg`,"xmlns:xlink":`http://www.w3.org/1999/xlink`,viewBox:`0 0 512 512`},Ot=E({name:`DownloadOutline`,render:function(e,t){return u(),F(`svg`,Dt,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)])}}),kt={xmlns:`http://www.w3.org/2000/svg`,"xmlns:xlink":`http://www.w3.org/1999/xlink`,viewBox:`0 0 512 512`},At=E({name:`EllipseOutline`,render:function(e,t){return u(),F(`svg`,kt,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)])}}),jt=`bot-permissions-v2`,Mt=[`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`],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":`管理 Bot`,"tasks.delegate":`分派后台任务`,"automation.manage":`管理自动化`},Pt={allow:`允许`,ask:`执行前询问`,deny:`禁止`},Ft=[`aria-busy`],It={key:0,class:`full-access`},Lt=[`disabled`],Rt={key:1,class:`full-access`},zt=[`disabled`],Bt={value:null},Vt=[`disabled`],Ht={class:`toggle`},Ut=[`disabled`],Wt={class:`toggle`},Gt=[`disabled`],Kt=[`value`,`disabled`],qt=[`value`,`disabled`],Jt={key:1},Yt=[`disabled`,`onClick`],Xt={key:2,role:`status`},Zt=[`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`},$={key:2,class:`error`,role:`alert`},hn={key:3,role:`status`},gn=H(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(),s=O(``),c=O(!1),m=O(``),g=O(``),_=U(()=>!!n.kind),v=O(!1),y=U(()=>n.kind?`/api/app/${n.kind}/${encodeURIComponent(n.targetId??``)}/restrictions`:`/api/app/permissions`),b=U(()=>o.value),x=U(()=>o.value),C=U(()=>n.kind===`agents`?x.value?.fullAccess??v.value:!_.value&&!!b.value?.fullAccess),E=U(()=>!!o.value&&JSON.stringify(o.value)!==s.value);f(E,e=>r(`dirty-change`,e)),f(c,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([X(y.value),n.kind===`agents`?X(`/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},v.value=r?.fullAccess??!1,s.value=JSON.stringify(o.value))}catch(t){j&&e===A&&(m.value=t instanceof Error?t.message:`无法读取权限`)}}f(y,()=>{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||c.value)return;c.value=!0,m.value=``,g.value=``;let{revision:e,...t}=o.value;try{let i=await X(y.value,{method:`PUT`,body:JSON.parse(JSON.stringify(_.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,s.value=JSON.stringify(i),g.value=`权限设置已保存`,r(`changed`))}catch(e){j&&(m.value=e instanceof Error?e.message:`保存失败`)}finally{j&&(c.value=!1)}}async function R(e){if(!c.value){c.value=!0;try{await X(`/api/app/permissions/automatic-rules/${encodeURIComponent(e)}`,{method:`DELETE`}),await M(),r(`changed`)}catch(e){m.value=e instanceof Error?e.message:`撤销失败`}finally{c.value=!1}}}function B(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:l([`permission-settings`,{"permission-settings--embedded":e.embedded}]),"aria-busy":c.value,"aria-label":`权限与操作审查`},[(u(),k(a(e.embedded?`h4`:`h3`),null,{default:S(()=>[w(h(n.kind===`agents`?`Bot 授权方式`:_.value?`额外限制`:`服务器权限与操作审查`),1)]),_:1})),D(`p`,null,h(n.kind===`agents`?`独立选择优先于服务器默认,并适用于此 Bot 的单聊、群聊和后台任务。`:_.value?`按规则授权的 Bot 会应用这些额外限制;完全开放的 Bot 按自身授权方式执行。`:`设置 Bot 默认使用的授权方式。每个 Bot 都可以独立选择,不受默认方式覆盖。`),1),o.value?(u(),F(T,{key:0},[!_.value&&b.value?(u(),F(`div`,It,[D(`label`,null,[r[8]||=w(` 默认授权方式 `,-1),d(D(`select`,{"onUpdate:modelValue":r[0]||=e=>b.value.fullAccess=e,disabled:c.value,"aria-label":`默认授权方式`,"aria-describedby":`full-access-description`},[...r[7]||=[D(`option`,{value:!1},`按规则授权`,-1),D(`option`,{value:!0},`完全开放授权`,-1)]],8,Lt),[[Ne,b.value.fullAccess]])]),r[9]||=D(`p`,{id:`full-access-description`},` 仅影响选择“跟随默认”的 Bot。完全开放时直接执行、不再询问授权;按规则授权时使用下方规则和审查。设备连接与系统权限仍需可用。 `,-1)])):z(``,!0),n.kind===`agents`&&x.value?(u(),F(`div`,Rt,[D(`label`,null,[r[12]||=w(` 此 Bot 的授权方式 `,-1),d(D(`select`,{"onUpdate:modelValue":r[1]||=e=>x.value.fullAccess=e,disabled:c.value,"aria-label":`此 Bot 的授权方式`},[D(`option`,Bt,`跟随默认(`+h(v.value?`完全开放授权`:`按规则授权`)+`)`,1),r[10]||=D(`option`,{value:!0},`完全开放授权`,-1),r[11]||=D(`option`,{value:!1},`按规则授权`,-1)],8,zt),[[Ne,x.value.fullAccess]])]),D(`p`,null,h(C.value?`此 Bot 的所有操作直接执行,不再询问授权;原有细分规则暂停生效并保留。`:`此 Bot 使用服务器规则、额外限制和操作审查。`),1)])):z(``,!0),d(D(`fieldset`,{disabled:c.value||n.kind===`agents`&&C.value},[!_.value&&b.value?(u(),F(T,{key:0},[D(`label`,Ht,[d(D(`input`,{"onUpdate:modelValue":r[2]||=e=>b.value.reviewEnabled=e,type:`checkbox`,disabled:c.value},null,8,Ut),[[Je,b.value.reviewEnabled]]),r[13]||=w(`启用智能操作审查`,-1)]),D(`label`,Wt,[d(D(`input`,{"onUpdate:modelValue":r[3]||=e=>b.value.messaging=e,type:`checkbox`,disabled:c.value},null,8,Gt),[[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:c.value,rows:`3`,placeholder:`例如:操作生产数据库之前询问我`,onInput:r[4]||=e=>b.value.askInstructions=B(e)},null,40,Kt)]),D(`label`,null,[r[16]||=w(`允许自动处理规则`,-1),D(`textarea`,{value:b.value.allowInstructions.join(`
|
|
6
6
|
`),disabled:c.value,rows:`3`,placeholder:`每行一条,写清操作与范围`,onInput:r[5]||=e=>b.value.allowInstructions=B(e)},null,40,qt)])],64)):z(``,!0),!_.value&&b.value?.automaticRules?.length?(u(),F(`details`,Jt,[D(`summary`,null,` 已保存的自动允许规则 · `+h(b.value.automaticRules.length),1),(u(!0),F(T,null,p(b.value.automaticRules,e=>(u(),F(`article`,{key:e.id,class:`rule`},[D(`p`,null,h(e.summary),1),D(`button`,{type:`button`,disabled:c.value||E.value,onClick:t=>R(e.id)},` 撤销自动允许 `,8,Yt)]))),128))])):z(``,!0),_.value&&!o.value.rules.length&&!x.value?.scopes.length?(u(),F(`p`,Xt,` 使用服务器规则,未添加额外限制。 `)):z(``,!0),(u(!0),F(T,null,p(o.value.rules,(e,t)=>(u(),F(`article`,{key:t,class:`rule`},[D(`label`,null,[r[17]||=w(`能力`,-1),d(D(`select`,{"onUpdate:modelValue":t=>e.capability=t,disabled:c.value},[(u(!0),F(T,null,p(V(Mt),e=>(u(),F(`option`,{key:e,value:e},h(V(Nt)[e]),9,Qt))),128))],8,Zt),[[Ne,e.capability]])]),D(`label`,null,[r[20]||=w(`操作策略`,-1),d(D(`select`,{"onUpdate:modelValue":t=>e.effect=t,disabled:c.value},[_.value?z(``,!0):(u(),F(`option`,en,`交给智能审查`)),r[18]||=D(`option`,{value:`ask`},`始终询问`,-1),r[19]||=D(`option`,{value:`deny`},`禁止`,-1)],8,$t),[[Ne,e.effect]])]),D(`label`,null,[r[21]||=w(`资源范围`,-1),D(`textarea`,{value:e.resources.join(`
|
|
7
7
|
`),disabled:c.value,rows:`2`,placeholder:`* 表示全部资源;也可逐行填写具体资源`,onInput:e=>P(t,e)},null,40,tn)]),D(`button`,{type:`button`,disabled:c.value,onClick:e=>o.value.rules.splice(t,1)},` 移除此规则 `,8,nn)]))),128)),D(`button`,{type:`button`,disabled:c.value,onClick:N},` 添加操作规则 `,8,rn),_.value&&x.value?(u(),F(`details`,an,[r[24]||=D(`summary`,null,`限定可以使用的资源`,-1),r[25]||=D(`p`,null,` 同一能力的每项范围都必须满足。留空表示禁止使用这项能力的所有资源。 `,-1),(u(!0),F(T,null,p(x.value.scopes,(e,t)=>(u(),F(`article`,{key:t,class:`rule`},[D(`label`,null,[r[22]||=w(`能力`,-1),d(D(`select`,{"onUpdate:modelValue":t=>e.capability=t,disabled:c.value},[(u(!0),F(T,null,p(V(Mt),e=>(u(),F(`option`,{key:e,value:e},h(V(Nt)[e]),9,sn))),128))],8,on),[[Ne,e.capability]])]),D(`label`,null,[r[23]||=w(`允许的资源`,-1),D(`textarea`,{value:e.resources.join(`
|
|
8
|
-
`),disabled:c.value,rows:`2`,placeholder:`例如 path:/项目目录 或 device:设备编号`,onInput:t=>e.resources=B(t)},null,40,cn)]),D(`button`,{type:`button`,disabled:c.value,onClick:e=>x.value.scopes.splice(t,1)},` 移除此范围限制 `,8,ln)]))),128)),D(`button`,{type:`button`,disabled:c.value,onClick:r[6]||=e=>x.value.scopes.push({capability:`files.read`,resources:[]})},` 添加资源限制 `,8,un)])):z(``,!0)],8,Vt),[[tt,n.kind!==`agents`||!C.value]]),D(`div`,dn,[D(`button`,{type:`button`,disabled:c.value,onClick:M},`重新读取`,8,fn),D(`button`,{type:`button`,disabled:c.value||!E.value,onClick:L},h(c.value?`保存中…`:`保存权限`),9,pn)])],64)):m.value?z(``,!0):(u(),F(`p`,$,`正在读取权限…`)),m.value?(u(),F(`p`,mn,h(m.value),1)):z(``,!0),g.value?(u(),F(`p`,hn,h(g.value),1)):z(``,!0)],10,Ft))}}),[[`__scopeId`,`data-v-fc38edec`]]),_n=e(Ee(),1);function vn(e){return`?profile=${encodeURIComponent(e)}`}async function yn(e){let t=await X(`/api/app/models${vn(e)}`),n=typeof t.provider==`string`?t.provider.trim():``,r=typeof t.model==`string`?t.model.trim():``;return(t.providers||[]).flatMap(e=>{if(!e||typeof e!=`object`||Array.isArray(e))return[];let t=e,i=typeof t.slug==`string`?t.slug.trim():``;if(!i)return[];let a=t.is_current===!0||i.toLocaleLowerCase()===n.toLocaleLowerCase(),o=Array.isArray(t.models)?t.models.flatMap(e=>{if(typeof e==`string`)return e.trim()?[e.trim()]:[];if(!e||typeof e!=`object`||Array.isArray(e))return[];let t=e,n=typeof t.id==`string`?t.id.trim():typeof t.model==`string`?t.model.trim():``;return n?[n]:[]}):[];return[{slug:i,name:typeof t.name==`string`&&t.name.trim()?t.name.trim():i,models:o,isCurrent:a,...a&&r?{currentModel:r}:{}}]})}var bn={class:`identity-avatar`},xn=[`disabled`],Sn=[`disabled`],Cn=[`disabled`],wn=[`disabled`],Tn={key:0},En=[`disabled`],Dn={key:1,class:`mascot-controls`},On={class:`mascot-grid mascot-grid--shape`},kn=[`aria-pressed`,`onClick`],An={class:`mascot-grid mascot-grid--shape`},jn=[`aria-pressed`,`aria-label`,`onClick`],Mn={class:`mascot-grid mascot-grid--expression`},Nn=[`aria-pressed`,`onClick`],Pn={class:`color-grid`},Fn=[`aria-label`,`title`,`aria-pressed`,`onClick`],In={key:2,class:`mascot-controls`},Ln={class:`mascot-grid mascot-grid--shape`},Rn=[`aria-pressed`,`onClick`],zn={class:`avatar-actions`},Bn=[`disabled`],Vn=[`disabled`],Hn={key:3,class:`identity-default-model`},Un={key:4,class:`identity-error`,role:`alert`},Wn={key:5,class:`identity-actions`},Gn=[`disabled`],Kn=H(E({__name:`AgentIdentityPanel`,props:{profile:{},busy:{type:Boolean,default:!1},error:{default:``},formId:{default:void 0},showActions:{type:Boolean,default:!0},resetVersion:{default:0},defaultModelLabel:{default:``},embedded:{type:Boolean,default:!1},showName:{type:Boolean,default:!0},showDefaultModel:{type:Boolean,default:!0}},emits:[`save`,`dirty-change`,`avatarChange`],setup(e,{emit:t}){let n=e,r=t,i=O(``),o=O(null),c=O(`mascot`),m=O(`circle`),g=O(`#00c875`),_=O(null),y=O(`rounded`),b=O(`idle`),x=O(``),C=O(),E=O(``),A=O(``),j=0,M=0;function N(){return JSON.stringify({title:i.value,avatarMode:c.value,shape:m.value,color:g.value,expression:b.value,bodyId:_.value,imageCrop:y.value,avatarDataURL:o.value})}function P(){j+=1;let e=n.profile,t=e.agentName||e.displayName||e.name||``,r=je(e.agentAvatar),a=at(e.name,t);i.value=t,o.value=r?.imageDataURL??null,_.value=r?.bodyId??null,y.value=r?.imageCrop??`rounded`,c.value=r?.avatarMode??(o.value?`image`:`mascot`),m.value=r?.shape??a.shape,g.value=r?.color??a.color,b.value=r?.expression??a.expression,E.value=N(),x.value=``}f([()=>n.profile.name,()=>n.resetVersion],P,{immediate:!0}),f([()=>n.profile.name,()=>n.defaultModelLabel],async()=>{if(!n.showDefaultModel)return;let e=++M,t=n.defaultModelLabel||[n.profile.provider,n.profile.model].filter(Boolean).join(` / `);A.value=t;try{let t=(await yn(n.profile.name)).find(e=>e.isCurrent&&e.currentModel);e===M&&t?.currentModel&&(A.value=`${t.slug} / ${t.currentModel}`)}catch{}},{immediate:!0});let I=U(()=>ct({...Be({name:n.profile.name,display_name:i.value}),displayName:i.value,avatarMode:c.value,shape:m.value,color:g.value,expression:b.value,bodyId:_.value,imageCrop:y.value,...o.value?{imageDataURL:o.value}:{}}));f(I,e=>r(`avatarChange`,e),{immediate:!0});let L=U(N),R=U(()=>L.value!==E.value);f(R,e=>r(`dirty-change`,e),{immediate:!0});let B={circle:`圆形`,square:`圆角方形`,triangle:`小三角`,ellipse:`椭圆`,capsule:`胶囊`,hexagon:`六边形`,cloud:`云朵`,droplet:`水滴`},H=Xe;function G(e={}){return ct({...Be({name:n.profile.name,display_name:i.value}),displayName:i.value,avatarMode:`mascot`,shape:e.shape??m.value,color:e.color??g.value,expression:e.expression??b.value,bodyId:e.bodyId===void 0?_.value:e.bodyId})}function K(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 ee(e){return new Promise((t,n)=>{let r=new Image;r.onload=()=>{let e=Math.min(256,Math.max(r.width,r.height))/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 te(e){let t=e.target.files?.[0];if(!t)return;let n=j;try{if(![`image/png`,`image/jpeg`,`image/webp`].includes(t.type))throw Error(`请选择 PNG、JPEG 或 WebP 图片`);if(t.size>10485760)throw Error(`图片不能超过 10 MB`);let e=await ee(await K(t));if(n!==j)return;o.value=e,c.value=`image`,x.value=``}catch(e){x.value=e instanceof Error?e.message:`处理头像失败`}finally{C.value&&(C.value.value=``)}}function q(){c.value=`mascot`,_.value=null,m.value=Ke[Math.floor(Math.random()*Ke.length)],g.value=it[Math.floor(Math.random()*it.length)],b.value=ze[Math.floor(Math.random()*ze.length)]}function J(){let e=at(n.profile.name,i.value);c.value=`mascot`,_.value=null,y.value=`rounded`,m.value=e.shape,g.value=e.color,b.value=e.expression,o.value=null}function ne(){let e=i.value.trim().replace(/\s+/g,` `);if(!e){x.value=`请输入机器人名称`;return}r(`save`,{title:e,avatarMode:c.value,shape:m.value,color:g.value,expression:b.value,bodyId:_.value,imageCrop:y.value,avatarDataURL:o.value}),i.value=e}return(t,n)=>(u(),k(a(e.embedded?`div`:`form`),{id:e.formId,class:`identity-form`,onSubmit:Z(ne,[`prevent`])},{default:S(()=>[D(`div`,bn,[W(Ye,{name:i.value||e.profile.name,avatar:I.value,size:112,state:`idle`,animated:!0},null,8,[`name`,`avatar`]),D(`div`,null,[n[6]||=D(`strong`,null,`自定义角色`,-1),n[7]||=D(`small`,null,`头像设置保存后同步到 Web 与 iOS。`,-1),D(`p`,null,[D(`button`,{class:l([`quiet-button`,{active:c.value===`mascot`}]),type:`button`,disabled:e.busy,onClick:n[0]||=e=>c.value=`mascot`},`动态吉祥物`,10,xn),D(`button`,{class:l([`quiet-button`,{active:c.value===`image`}]),type:`button`,disabled:e.busy||!o.value,onClick:n[1]||=e=>c.value=`image`},`上传图片`,10,Sn)]),D(`p`,null,[D(`button`,{class:`quiet-button`,type:`button`,disabled:e.busy,onClick:n[2]||=e=>C.value?.click()},[W(Y,{name:`image`,size:14}),n[5]||=w(`选择图片`,-1)],8,Cn),o.value?(u(),F(`button`,{key:0,class:`quiet-button`,type:`button`,disabled:e.busy,onClick:n[3]||=e=>{o.value=null,c.value=`mascot`}},`移除图片`,8,wn)):z(``,!0)])]),D(`input`,{ref_key:`fileInput`,ref:C,class:`sr-only`,type:`file`,accept:`image/png,image/jpeg,image/webp`,onChange:te},null,544)]),e.showName?(u(),F(`label`,Tn,[n[8]||=w(`名称`,-1),d(D(`input`,{"onUpdate:modelValue":n[4]||=e=>i.value=e,disabled:e.busy,maxlength:`100`,autocomplete:`off`},null,8,En),[[Q,i.value]])])):z(``,!0),c.value===`mascot`?(u(),F(`section`,Dn,[D(`div`,null,[n[9]||=D(`strong`,null,`形状`,-1),D(`div`,On,[(u(!0),F(T,null,p(V(Ve),t=>(u(),F(`button`,{key:t,type:`button`,class:l({selected:!_.value&&m.value===t}),"aria-pressed":!_.value&&m.value===t,onClick:e=>{m.value=t,_.value=null}},[W(Ye,{name:i.value||e.profile.name,avatar:G({shape:t,bodyId:null}),size:44},null,8,[`name`,`avatar`]),D(`span`,null,h(B[t]),1)],10,kn))),128))])]),D(`div`,null,[n[10]||=D(`strong`,null,`造型`,-1),D(`div`,An,[(u(!0),F(T,null,p(V(Fe),e=>(u(),F(`button`,{key:e,type:`button`,class:l({selected:_.value===e}),"aria-pressed":_.value===e,"aria-label":`造型:${V(Ge)[e]}`,onClick:t=>_.value=e},[W(Ye,{name:V(Ge)[e],avatar:G({bodyId:e}),size:44,animated:!1},null,8,[`name`,`avatar`]),D(`span`,null,h(V(Ge)[e]),1)],10,jn))),128))])]),D(`div`,null,[n[11]||=D(`strong`,null,`基础表情`,-1),D(`div`,Mn,[(u(!0),F(T,null,p(V(ze),t=>(u(),F(`button`,{key:t,type:`button`,class:l({selected:b.value===t}),"aria-pressed":b.value===t,onClick:e=>b.value=t},[W(Ye,{name:i.value||e.profile.name,avatar:G({expression:t}),size:38},null,8,[`name`,`avatar`]),D(`span`,null,h(V(H)[t]),1)],10,Nn))),128))])]),D(`div`,null,[n[12]||=D(`strong`,null,`颜色`,-1),D(`div`,Pn,[(u(!0),F(T,null,p(V(it),e=>(u(),F(`button`,{key:e,type:`button`,class:l({selected:g.value===e}),style:s({backgroundColor:e}),"aria-label":`使用颜色 ${e}`,title:V(Le)[e],"aria-pressed":g.value===e,onClick:t=>g.value=e},null,14,Fn))),128))])])])):z(``,!0),c.value===`image`?(u(),F(`section`,In,[n[13]||=D(`strong`,null,`图片裁剪`,-1),D(`div`,Ln,[(u(!0),F(T,null,p(V(et),e=>(u(),F(`button`,{key:e,type:`button`,"aria-pressed":y.value===e,class:l({selected:y.value===e}),onClick:t=>y.value=e},h({circle:`圆形`,rounded:`圆角方形`,square:`方形`}[e]),11,Rn))),128))])])):z(``,!0),D(`div`,zn,[D(`button`,{class:`quiet-button`,type:`button`,disabled:e.busy,onClick:q},`随机外形`,8,Bn),D(`button`,{class:`quiet-button`,type:`button`,disabled:e.busy,onClick:J},`重置头像`,8,Vn)]),e.showDefaultModel?(u(),F(`div`,Hn,[n[14]||=D(`strong`,null,`默认全局模型`,-1),D(`span`,null,h(A.value||`服务器未返回默认模型`),1),n[15]||=D(`small`,null,`仅影响之后新建的会话;已有会话保留自己的模型。`,-1)])):z(``,!0),x.value||e.error?(u(),F(`p`,Un,h(x.value||e.error),1)):z(``,!0),e.showActions?(u(),F(`footer`,Wn,[v(t.$slots,`actions`,{},()=>[D(`button`,{class:`primary-button`,type:`submit`,disabled:e.busy},h(e.busy?`正在同步…`:`保存并同步`),9,Gn)])])):z(``,!0)]),_:3},40,[`id`]))}}),[[`__scopeId`,`data-v-f5776ae9`]]),qn={class:`connection-network`},Jn=[`disabled`],Yn={class:`connection-heading`},Xn={class:`hint`},Zn={key:0,role:`alert`},Qn={key:1,role:`status`},$n={key:3},er=[`disabled`],tr=[`disabled`],nr=H(E({__name:`ConnectionNetworkPanel`,props:{provider:{},name:{},bot:{},canLogin:{type:Boolean}},emits:[`back`,`login`,`changed`,`dirty-change`,`busy-change`],setup(e,{expose:t,emit:n}){let r=e,i=n,a=O(),o=O({mode:`inherit`}),s=O(!1),c=O(!1),l=O(``),d=O(``),p=U(()=>!!a.value&&JSON.stringify(o.value)!==JSON.stringify(a.value.connections[r.provider]??{mode:`inherit`}));f(p,e=>i(`dirty-change`,e)),f(s,e=>i(`busy-change`,e));async function g(){try{a.value=await dt.get(r.bot),o.value={...a.value.connections[r.provider]??{mode:`inherit`}}}catch(e){l.value=e instanceof Error?e.message:`读取失败`}}function _(){!s.value&&(!p.value||window.confirm(`放弃尚未保存的网络更改?`))&&i(`back`)}async function v(e=!1){s.value=!0,l.value=``;try{a.value=await dt.save(a.value.revision,o.value,r.provider,r.bot),d.value=`网络设置已保存,从下一轮任务或新登录生效。`,i(`changed`),e&&i(`login`)}catch(e){l.value=e instanceof Error?e.message:`保存失败`}finally{s.value=!1}}return m(g),t({reset:()=>{a.value&&(o.value={...a.value.connections[r.provider]??{mode:`inherit`}}),d.value=``}}),(t,n)=>(u(),F(`section`,qn,[D(`button`,{class:`back`,type:`button`,disabled:s.value,onClick:_},[W(Y,{name:`chevron-left`,size:16}),n[4]||=w(`返回模型连接`,-1)],8,Jn),D(`div`,Yn,[D(`h3`,null,h(e.name),1),D(`span`,null,h(e.canLogin?`尚未登录`:`模型连接`),1)]),D(`p`,Xn,`用于登录、自动续期、模型列表与模型请求。`+h(e.bot?`继承服务器凭据时沿用服务器连接的网络;此处配置用于本 Bot 独立保存的凭据。`:``),1),l.value?(u(),F(`p`,Zn,h(l.value),1)):z(``,!0),d.value?(u(),F(`p`,Qn,h(d.value),1)):z(``,!0),a.value?(u(),k(pt,{key:2,modelValue:o.value,"onUpdate:modelValue":n[0]||=e=>o.value=e,view:a.value,provider:e.provider,bot:e.bot,disabled:s.value,onBusy:n[1]||=e=>c.value=e},null,8,[`modelValue`,`view`,`provider`,`bot`,`disabled`])):z(``,!0),a.value?(u(),F(`footer`,$n,[D(`button`,{type:`button`,disabled:s.value||!p.value,onClick:n[2]||=t=>o.value={...a.value.connections[e.provider]??{mode:`inherit`}}},`取消更改`,8,er),D(`button`,{class:`primary`,type:`button`,disabled:s.value||c.value||!p.value&&!e.canLogin||o.value.mode===`proxy`&&!o.value.proxyId,onClick:n[3]||=t=>v(!!e.canLogin)},h(s.value?`正在保存…`:e.canLogin?`保存并登录`:`保存更改`),9,tr)])):z(``,!0)]))}}),[[`__scopeId`,`data-v-34276c52`]]),rr=`/api/app/admin/hermes`,ir=(e,t=``)=>{let n=new URLSearchParams(t);e&&n.set(`bot`,e);let r=n.toString();return r?`?${r}`:``},ar={providers:e=>X(`${rr}/providers${ir(e)}`),config:e=>X(`${rr}/config${ir(e)}`),patchConfig:(e,t)=>X(`${rr}/config${ir(t)}`,{method:`PATCH`,body:{config:e}}),models:(e=!1,t)=>X(`${rr}/models${ir(t,e?`refresh=1`:``)}`),jev:()=>X(`${rr}/jev`),botModels:()=>X(`${rr}/bot-models`),saveBotModels:e=>X(`${rr}/bot-models`,{method:`PUT`,body:e}),previewJev:e=>X(`${rr}/jev/preview`,{method:`POST`,body:e}),saveJev:e=>X(`${rr}/jev`,{method:`PUT`,body:e}),setModel:(e,t)=>X(`${rr}/model${ir(t)}`,{method:`POST`,body:e}),auxiliary:e=>X(`${rr}/auxiliary${ir(e)}`),oauth:e=>X(`${rr}/oauth${ir(e)}`),oauthStart:(e,t,n)=>X(`${rr}/oauth/${encodeURIComponent(e)}/start${ir(t)}`,{method:`POST`,body:n===void 0?{}:{networkRevision:n}}),oauthPoll:(e,t,n)=>X(`${rr}/oauth/${encodeURIComponent(e)}/poll/${encodeURIComponent(t)}${ir(n)}`),oauthCancel:(e,t)=>X(`${rr}/oauth/sessions/${encodeURIComponent(e)}${ir(t)}`,{method:`DELETE`}),oauthSubmit:(e,t,n)=>X(`${rr}/oauth/${encodeURIComponent(e)}/token${ir(n)}`,{method:`POST`,body:{token:t}}),oauthDisconnect:(e,t)=>X(`${rr}/oauth/${encodeURIComponent(e)}${ir(t)}`,{method:`DELETE`}),env:e=>X(`${rr}/env${ir(e)}`),setEnv:(e,t,n)=>X(`${rr}/env${ir(n)}`,{method:`PUT`,body:{key:e,value:t,provider_setup:!0}}),deleteEnv:(e,t)=>X(`${rr}/env${ir(t)}`,{method:`DELETE`,body:{key:e}}),validate:(e,t)=>X(`${rr}/validate`,{method:`POST`,body:{key:e,value:t}}),endpoints:e=>X(`${rr}/endpoints${ir(e)}`),saveEndpoint:(e,t)=>X(`${rr}/endpoints${ir(t)}`,{method:`POST`,body:e}),deleteEndpoint:(e,t)=>X(`${rr}/endpoints/${encodeURIComponent(e)}${ir(t)}`,{method:`DELETE`}),pool:(e,t)=>X(`${rr}/pool/${encodeURIComponent(e)}${ir(t)}`),addPool:(e,t,n,r)=>X(`${rr}/pool/${encodeURIComponent(e)}${ir(r)}`,{method:`POST`,body:{apiKey:t,...n?{label:n}:{}}}),removePool:(e,t,n)=>X(`${rr}/pool/${encodeURIComponent(e)}/${t}${ir(n)}`,{method:`DELETE`})},or=e=>`${rr}/media/${e}`,sr={config:e=>X(`${or(e)}/config`),models:(e,t)=>X(`${or(e)}/models${t?`?provider=${encodeURIComponent(t)}`:``}`),setProvider:(e,t)=>X(`${or(e)}/provider`,{method:`PUT`,body:{provider:t}}),setModel:(e,t,n)=>X(`${or(e)}/model`,{method:`PUT`,body:{model:t,provider:n}}),setEnv:(e,t)=>X(`${or(e)}/env`,{method:`PUT`,body:{env:t}})},cr={config:()=>X(`${rr}/web`),setProvider:(e,t)=>X(`${rr}/web/provider`,{method:`PUT`,body:{capability:e,provider:t}}),setEnv:e=>X(`${rr}/web/env`,{method:`PUT`,body:{env:e}}),test:(e,t)=>X(`${rr}/web/test`,{method:`POST`,body:{capability:e,...e===`search`?{query:t}:{url:t}}})},lr=`${rr}/mcp`,ur={list:e=>X(`${lr}${ir(e)}`),create:(e,t,n)=>X(`${lr}${ir(n)}`,{method:`POST`,body:{name:e,...t}}),update:(e,t,n)=>X(`${lr}/${encodeURIComponent(e)}${ir(n)}`,{method:`PUT`,body:t}),remove:(e,t)=>X(`${lr}/${encodeURIComponent(e)}${ir(t)}`,{method:`DELETE`}),setEnabled:(e,t,n)=>X(`${lr}/${encodeURIComponent(e)}/enabled${ir(n)}`,{method:`PATCH`,body:{enabled:t}}),test:(e,t)=>X(`${lr}/${encodeURIComponent(e)}/test${ir(t)}`,{method:`POST`}),oauthStart:(e,t)=>X(`${lr}/${encodeURIComponent(e)}/oauth/start${ir(t)}`,{method:`POST`}),oauthStatus:(e,t)=>X(`${lr}/oauth/${encodeURIComponent(e)}${ir(t)}`),oauthCancel:(e,t)=>X(`${lr}/oauth/${encodeURIComponent(e)}${ir(t)}`,{method:`DELETE`})},dr=`${rr}/channels`,fr=e=>`?bot=${encodeURIComponent(e)}`,pr={list:e=>X(`${dr}${fr(e)}`),save:(e,t,n)=>X(`${dr}/${t}${fr(e)}`,{method:`PUT`,body:n}),setEnabled:(e,t,n)=>X(`${dr}/${t}/enabled${fr(e)}`,{method:`POST`,body:{enabled:n}}),remove:(e,t)=>X(`${dr}/${t}${fr(e)}`,{method:`DELETE`}),test:(e,t)=>X(`${dr}/${t}/test${fr(e)}`,{method:`POST`}),approve:(e,t,n)=>X(`${dr}/${t}/pairing${fr(e)}`,{method:`POST`,body:{code:n}}),revoke:(e,t,n)=>X(`${dr}/${t}/pairing/${encodeURIComponent(n)}${fr(e)}`,{method:`DELETE`})};function mr(e){let t=document.createElement(`textarea`),n=document.activeElement instanceof HTMLElement?document.activeElement:null;t.value=e,t.setAttribute(`readonly`,``),t.setAttribute(`aria-hidden`,`true`),t.style.cssText=`position:fixed;left:-9999px;top:0;width:1px;height:1px;opacity:0`,document.body.appendChild(t),t.focus({preventScroll:!0}),t.select(),t.setSelectionRange(0,e.length);let r=!1;try{r=document.execCommand(`copy`)}catch{r=!1}finally{t.remove(),n?.focus({preventScroll:!0})}return r}async function hr(e){try{if(window.isSecureContext&&navigator.clipboard?.writeText)return await navigator.clipboard.writeText(e),!0}catch{}return mr(e)}var gr={class:`provider-login`},_r={class:`scope`},vr={class:`login-success`,role:`status`},yr={key:1,class:`network-summary`},br={class:`failure-heading`,role:`alert`},xr={key:0,role:`status`},Sr=[`disabled`],Cr={key:0,class:`device-code`},wr={key:0,role:`status`},Tr=[`href`],Er={class:`hint`},Dr=[`aria-label`,`disabled`],Or={key:0},kr=[`disabled`],Ar={key:6,class:`error`,role:`alert`},jr=[`disabled`],Mr={key:8,class:`hint`},Nr=[`disabled`],Pr=H(E({__name:`ProviderLoginDialog`,props:{provider:{},bot:{}},emits:[`close`,`success`],setup(e,{emit:t}){let n=e,r=t,a=n.provider,o=n.bot,s=a.flow===`device_code`||[`device_code`,`process`].includes(a.web_flow??``),c=a.web_flow===`paste_token`,l=O(`ready`),f=O(),p=O(``),g=O(``),_=O(!1),v=O(``),y=O(),b=O({mode:`inherit`}),x=O(!1),C=U(()=>!!y.value&&JSON.stringify(b.value)!==JSON.stringify(y.value.connections[a.id]??{mode:`inherit`})),E=U(()=>!!y.value&&!x.value&&(b.value.mode!==`proxy`||!!b.value.proxyId)),A=U(()=>y.value?ft(y.value,b.value):`正在读取网络…`);async function j(){try{let e=await dt.get(o);P&&(y.value=e,b.value={...e.connections[a.id]??{mode:`inherit`}},p.value=``)}catch(e){P&&(p.value=e instanceof Error?e.message:`无法读取网络配置,请重试。`)}}async function M(){C.value&&(y.value=await dt.save(y.value.revision,b.value,a.id,o))}async function N(){if(!(f.value&&!window.confirm(`更改网络将结束本次授权,需要重新获取验证码。继续?`))){I++,clearTimeout(L);try{await H(f.value),f.value=void 0,l.value=`ready`,p.value=``,await j()}catch(e){l.value=`failed`,p.value=e instanceof Error?e.message:`无法取消本次授权,请重试。`}}}let P=!0,I=0,L,R=U(()=>{try{let e=new URL(f.value?.verification_url??``);return[`https:`,`http:`].includes(e.protocol)&&!e.username&&!e.password?e.href:``}catch{return``}}),B=U(()=>l.value===`starting`?`正在准备登录…`:l.value===`approved`?`登录成功`:R.value?`等待你在浏览器中完成授权…`:`正在准备授权链接…`);async function H(e){e&&await ar.oauthCancel(e.session_id,o)}async function G(){if(l.value===`starting`||_.value||!E.value)return;let e=++I;clearTimeout(L),p.value=``,v.value=``,l.value=`starting`;try{if(await H(f.value),f.value=void 0,await M(),!P||e!==I)return;let t=await ar.oauthStart(a.id,o,y.value.revision);if(!P||e!==I){await H(t);return}f.value=t,l.value=`pending`,K(e)}catch(t){if(!P||e!==I)return;p.value=t instanceof Error?t.message:`无法开始登录,请重试。`,l.value=`failed`}}function K(e){let t=f.value;!t||!P||(L=setTimeout(async()=>{try{let n=await ar.oauthPoll(a.id,t.session_id,o);if(!P||e!==I)return;if(n.user_code&&(t.user_code=n.user_code),n.verification_url&&(t.verification_url=n.verification_url),n.status===`pending`){K(e);return}if(n.status===`approved`){f.value=void 0,l.value=`approved`,r(`success`);return}p.value=n.error_message||(n.status===`expired`?`授权已过期,请重新登录。`:n.status===`denied`?`账号已拒绝授权,可重新开始登录。`:`登录未完成,请重试。`),l.value=`failed`}catch(t){if(!P||e!==I)return;p.value=t instanceof Error?t.message:`无法获取授权结果,请重试。`,l.value=`failed`}},Math.max(1,t.poll_interval||2)*1e3))}async function ee(){if(!(_.value||!g.value.trim()||!E.value)){_.value=!0,p.value=``;try{if(await M(),await ar.oauthSubmit(a.id,g.value.trim(),o),!P)return;g.value=``,l.value=`approved`,r(`success`)}catch(e){P&&(p.value=e instanceof Error?e.message:`凭据保存失败,请重试。`)}finally{_.value=!1}}}function te(){return!_.value&&(!(g.value||C.value)||window.confirm(`还有未保存的输入,放弃本次更改?`))}function q(){te()&&r(`close`)}async function J(){v.value=await hr(f.value?.user_code??``)?`验证码已复制`:`无法自动复制,请选中验证码手动复制。`}return m(j),i(()=>{P=!1,I++,clearTimeout(L);let e=f.value;f.value=void 0,g.value=``,H(e).catch(()=>{})}),(e,t)=>(u(),k(ut,{title:`登录 ${V(a).name}`,compact:``,wide:``,"before-close":te,onClose:t[5]||=e=>r(`close`)},{default:S(()=>[D(`div`,gr,[D(`p`,_r,h(V(o)?`仅对此 Bot 生效`:`服务器模型连接`),1),l.value===`approved`?(u(),F(T,{key:0},[D(`div`,vr,[W(Y,{name:`check`,size:24}),t[6]||=D(`strong`,null,`登录成功`,-1)]),D(`p`,null,`已完成 `+h(V(a).name)+` 授权。`,1),D(`button`,{class:`primary`,type:`button`,onClick:q},`完成`)],64)):(u(),F(T,{key:1},[l.value===`ready`?(u(),F(T,{key:0},[y.value?(u(),k(pt,{key:0,modelValue:b.value,"onUpdate:modelValue":t[0]||=e=>b.value=e,view:y.value,provider:V(a).id,bot:V(o),compact:``,disabled:_.value,onBusy:t[1]||=e=>x.value=e},null,8,[`modelValue`,`view`,`provider`,`bot`,`disabled`])):(u(),F(`button`,{key:1,type:`button`,onClick:j},`重新读取网络配置`))],64)):(u(),F(`div`,yr,[D(`span`,null,`网络:`+h(A.value),1),l.value===`pending`||l.value===`failed`?(u(),F(`button`,{key:0,type:`button`,onClick:N},`更改`)):z(``,!0)])),l.value===`failed`?(u(),F(T,{key:2},[D(`div`,br,[W(Y,{name:`alert`,size:24}),D(`strong`,null,h(p.value),1)]),y.value?(u(),k(pt,{key:0,modelValue:b.value,"onUpdate:modelValue":t[2]||=e=>b.value=e,view:y.value,provider:V(a).id,bot:V(o),"summary-only":``,onBusy:t[3]||=e=>x.value=e},null,8,[`modelValue`,`view`,`provider`,`bot`])):z(``,!0),t[7]||=D(`p`,{class:`hint`},`不会自动切换为直接连接。`,-1),D(`button`,{type:`button`,class:`primary`,onClick:N},`检查网络设置`)],64)):z(``,!0),V(s)?(u(),F(T,{key:3},[l.value!==`failed`&&l.value!==`ready`?(u(),F(`p`,xr,h(B.value),1)):z(``,!0),l.value===`ready`?(u(),F(`button`,{key:1,type:`button`,class:`primary`,disabled:!E.value,onClick:G},h(C.value?`保存并开始登录`:`开始登录`),9,Sr)):z(``,!0),l.value===`pending`?(u(),F(T,{key:2},[f.value?.user_code?(u(),F(`div`,Cr,[t[8]||=D(`span`,null,`在授权页面输入验证码`,-1),D(`strong`,null,h(f.value.user_code),1),D(`button`,{type:`button`,onClick:J},`复制验证码`),v.value?(u(),F(`small`,wr,h(v.value),1)):z(``,!0)])):z(``,!0),R.value?(u(),F(`a`,{key:1,class:`primary`,href:R.value,target:`_blank`,rel:`noopener noreferrer`},[W(Y,{name:`external`,size:16}),t[9]||=w(`打开授权页面`,-1)],8,Tr)):z(``,!0),D(`p`,Er,h(R.value?`在浏览器完成授权后,回到这里查看结果。`:`登录服务准备好后,授权入口会自动显示。`),1)],64)):z(``,!0)],64)):c?(u(),F(`form`,{key:4,onSubmit:Z(ee,[`prevent`])},[t[13]||=D(`p`,null,`粘贴已有的 API Key 或登录令牌完成连接。`,-1),D(`label`,null,[t[10]||=w(`登录凭据`,-1),d(D(`input`,{"onUpdate:modelValue":t[4]||=e=>g.value=e,"aria-label":`${V(a).name} 凭据`,type:`password`,autocomplete:`new-password`,disabled:_.value,placeholder:`粘贴登录凭据`},null,8,Dr),[[Q,g.value]])]),V(a).cli_command?(u(),F(`details`,Or,[t[11]||=D(`summary`,null,`如何获取登录令牌`,-1),t[12]||=D(`p`,null,`在服务器上按该服务的登录指引运行:`,-1),D(`code`,null,h(V(a).cli_command),1)])):z(``,!0),D(`button`,{type:`submit`,class:`primary`,disabled:_.value||!g.value.trim()||!E.value},h(_.value?`正在保存…`:C.value?`保存网络与凭据`:`保存凭据`),9,kr)],32)):(u(),F(T,{key:5},[t[14]||=D(`p`,null,`此服务需要先在服务器上完成登录:`,-1),D(`code`,null,h(V(a).cli_command),1),t[15]||=D(`p`,{class:`hint`},`完成后关闭弹窗,并刷新连接状态。`,-1)],64)),p.value&&l.value!==`failed`?(u(),F(`p`,Ar,h(p.value),1)):z(``,!0),V(s)&&l.value===`failed`?(u(),F(`button`,{key:7,type:`button`,disabled:!E.value,onClick:G},h(C.value?`保存并重新登录`:`重新登录`),9,jr)):z(``,!0),V(s)?(u(),F(`p`,Mr,`授权网页使用当前设备的浏览器网络。此代理仅作用于服务器发起的连接。`)):z(``,!0),D(`button`,{type:`button`,disabled:_.value,onClick:q},h(l.value===`pending`||l.value===`starting`?`取消登录`:`关闭`),9,Nr)],64))])]),_:1},8,[`title`]))}}),[[`__scopeId`,`data-v-2a052730`]]),Fr=[`light`,`standard`,`complex`,`deep`],Ir={light:`轻量`,standard:`常规`,complex:`复杂`,deep:`深度`},Lr={light:`问候、短答、单步查询,以及目标清晰、范围有限的操作。`,standard:`常规多步任务、一般分析与内容整理。`,complex:`跨模块修改、复杂排查和有多项约束的工作。`,deep:`高难推理、系统性研究与架构设计。`},Rr=[`low`,`medium`,`high`,`xhigh`,`max`],zr=[`none`,`minimal`,...Rr,`ultra`],Br=e=>zr.indexOf(e),Vr={new:`新任务`,continue:`继续未完成任务`,correction:`纠正原任务`,unclear:`上下文不足`};function Hr(e){return e===`gpt-6-luna`?`light`:e===`gpt-6.1-sol`?`complex`:e===`gpt-6-astra`?`deep`:`standard`}function Ur(e){return e.tier??Hr(e.model)}function Wr(e){return{preserveTaskAbility:e.preserveTaskAbility!==!1,maxReasoningEffort:e.maxReasoningEffort??`high`,fallbackReasoningEffort:e.fallbackReasoningEffort??`medium`}}function Gr(e,t,n){if(!e.reasoningKnown)return`default`;if(!e.reasoningEfforts.length)return`none`;let r=e.reasoningEfforts.filter(e=>Br(e)>=0&&Br(e)<=Br(n)).sort((e,t)=>Br(e)-Br(t));if(!r.length)return null;if(t==="default"&&(t=e.defaultReasoningEffort??`medium`),t===`none`&&r.includes(`none`)||r.every(e=>e===`none`))return`none`;let i=Math.min(Math.max(Br(t),Br(`low`)),Br(n)),a=t===`none`?r:r.filter(e=>e!==`none`);return a.length?a.find(e=>Br(e)>=i)??null:null}var Kr=`typesafe`,qr=.55;function Jr(e){return e?.provider===`auto`&&e?.model===`auto`}var Yr=()=>({provider:null,model:null,reasoningEffort:null,fastMode:null,auxiliary:null,fallback:null,autoPool:null}),Xr={none:`关闭`,minimal:`最小`,low:`低`,medium:`中`,high:`高`,xhigh:`极高`,max:`最大`,ultra:`Ultra`},Zr={normal:`普通`,fast:`快速`,auto:`每轮开始加速`,cold:`首次回复加速`};function Qr(e){if(!e)return[];let t=!!e.auto?.enabled,n=e=>e.providerName?.trim()||(e.name.includes(` · `)?e.name.split(` · `)[0].trim():{"openai-codex":`OpenAI Codex`,openai:`OpenAI`,anthropic:`Anthropic`}[e.provider]||e.provider),r=e.models.filter(e=>e.provider!==`auto`).map(r=>({provider:r.provider,id:r.model,name:r.model,providerName:n(r),isDefault:!t&&r.provider===e.defaults.provider&&r.model===e.defaults.model,disabled:!1,hint:r.retained?`此 Bot 已选模型,系统可选清单外`:``}));!t&&!r.some(e=>e.isDefault)&&r.unshift({provider:`inherit`,id:`default`,name:e.defaults.model||`默认模型`,providerName:e.defaults.provider||`系统`,isDefault:!0,disabled:!1,hint:`跟随系统默认`});let i=e.auto?.backend===`jeff`?`Jeff`:`Jev`,a=[...r.filter(e=>e.isDefault),{provider:`auto`,id:`auto`,name:`Auto`,providerName:i,isDefault:t,disabled:!e.auto?.available,hint:e.auto?.unavailableReason||`使用系统 ${i} 候选池`},...r.filter(e=>!e.isDefault)],o=!!e.settings?.provider&&!!e.settings?.model,s=o?`${e.settings.provider}:${e.settings.model}`:t?`auto:auto`:`${e.defaults.provider}:${e.defaults.model}`;return a.map(e=>({...e,isCurrent:`${e.provider}:${e.id}`===s||!o&&e.provider===`inherit`}))}var $r=[`jev`,`jeff`],ei={jev:`Jev(云端 TypeSafe)`,jeff:`Jeff(本机)`};function ti(e){return e===`jeff`?`Jeff`:`Jev`}var ni=`http://127.0.0.1:8765`,ri=`jeff-latest`,ii={class:`auto-route`,"aria-label":`Auto 选模依据`},ai={key:0},oi={class:`auto-route__detail`},si={key:0},ci={key:1},li={key:2},ui=H(E({__name:`AutoRouteNotice`,props:{route:{}},setup(e){let t=e=>e==="default"?`提供方默认`:Xr[e]??e,n={jev:`Jev 自动判断`,jeff:`Jeff 自动判断`,fallback:`回退组合`,single:`仅剩一个候选`};return(r,i)=>(u(),F(`details`,ii,[D(`summary`,null,[w(`Auto · `+h(e.route.model)+` · `+h(t(e.route.reasoningEffort))+h([`none`,`default`].includes(e.route.reasoningEffort)?``:`思考`),1),e.route.reason!==`jev`&&e.route.reason!==`jeff`?(u(),F(`span`,ai,` · 回退`)):z(``,!0)]),D(`div`,oi,[D(`p`,null,h(e.route.explanation),1),D(`dl`,null,[D(`div`,null,[i[0]||=D(`dt`,null,`决策来源`,-1),D(`dd`,null,h(n[e.route.reason]),1)]),e.route.taskTier?(u(),F(`div`,si,[i[1]||=D(`dt`,null,`任务能力`,-1),D(`dd`,null,h(V(Ir)[e.route.taskTier])+h(e.route.requestedTier&&e.route.requestedTier!==e.route.taskTier?`(本轮判断 ${V(Ir)[e.route.requestedTier]},保留任务下限)`:``),1)])):z(``,!0),e.route.continuity?(u(),F(`div`,ci,[i[2]||=D(`dt`,null,`任务关系`,-1),D(`dd`,null,h(V(Vr)[e.route.continuity]),1)])):z(``,!0),D(`div`,null,[i[3]||=D(`dt`,null,`判断置信度`,-1),D(`dd`,null,h(Math.round(e.route.confidence*100))+`%`,1)]),e.route.requestedEffort&&e.route.requestedEffort!==e.route.reasoningEffort?(u(),F(`div`,li,[i[4]||=D(`dt`,null,`思考适配`,-1),D(`dd`,null,h(t(e.route.requestedEffort))+` → `+h(t(e.route.reasoningEffort)),1)])):z(``,!0),D(`div`,null,[i[5]||=D(`dt`,null,`模型服务`,-1),D(`dd`,null,h(e.route.provider),1)])])])]))}}),[[`__scopeId`,`data-v-6a520af2`]]),di=[`aria-busy`],fi={class:`jev-title`},pi={class:`jev-toggle`},mi=[`disabled`],hi={key:0,class:`error`,role:`alert`},gi={key:1,role:`status`},_i=[`disabled`],vi=[`value`],yi={class:`jev-fields`},bi=[`disabled`],xi=[`disabled`],Si={key:3},Ci=[`placeholder`,`disabled`],wi={class:`jev-roles`},Ti={class:`jev-model-name`},Ei={key:0,class:`error`},Di={class:`sr-only`},Oi=[`onUpdate:modelValue`,`aria-label`,`disabled`],ki=[`value`],Ai={key:0},ji=[`open`],Mi=[`disabled`],Ni={class:`jev-model-list`},Pi=[`checked`,`disabled`,`onChange`],Fi={key:0},Ii=[`disabled`,`onChange`],Li={class:`jev-continuity`},Ri=[`disabled`],zi=[`value`],Bi={class:`jev-advanced`},Vi={class:`jev-fields`},Hi=[`disabled`],Ui=[`value`],Wi=[`disabled`],Gi={key:0},Ki=[`disabled`],qi=[`value`],Ji=[`disabled`],Yi=[`value`],Xi=[`value`],Zi=[`onUpdate:modelValue`,`disabled`],Qi={class:`jev-preview`},$i=[`disabled`],ea=[`disabled`],ta={key:0,class:`error`,role:`alert`},na={"aria-live":`polite`},ra=[`disabled`],ia=[`disabled`],aa=H(E({__name:`JevAutoPanel`,props:{models:{},disabled:{type:Boolean}},emits:[`dirty-change`,`busy-change`],setup(e,{expose:t,emit:n}){let r=e,i=n,a=O(),o=O([]),s=O(!1),c=O([]),l=O(``),g=O(``),_=O(`jev`),v=O(ni),y=O(ri),b=O({}),x=O(!0),S=O(`high`),C=O(`medium`),E=O(qr),A=O(!1),j=O(``),M=O(``),N=O(``),P=O(``),I=O(`你好`),L=O(),R=O(!1),B=O(``),H=U(()=>r.disabled||A.value||R.value||!a.value),W=(e,t)=>JSON.stringify([e,t]),G=e=>{let[t,n]=JSON.parse(e);return{provider:t,model:n}},K=e=>G(e).model,ee=e=>{let t=G(e);return o.value.find(e=>e.provider===t.provider&&e.model===t.model)},te=U(()=>c.value.map(e=>({...G(e),tier:b.value[e]?.tier??Hr(K(e)),...b.value[e]?.blurb.trim()?{blurb:b.value[e].blurb.trim()}:{}}))),q=()=>({candidates:te.value,...l.value?{fallback:G(l.value)}:{},minConfidence:E.value,preserveTaskAbility:x.value,maxReasoningEffort:S.value,fallbackReasoningEffort:C.value}),J=()=>JSON.stringify([s.value,_.value,v.value.trim(),y.value.trim(),q()]),ne=U(()=>!!a.value&&(J()!==N.value||!!g.value.trim())),re=U(()=>Number.isFinite(E.value)&&E.value>=0&&E.value<=1&&(!s.value||c.value.length>=2)),ie=U(()=>_.value===`jeff`||!!g.value.trim()||!!a.value?.hasApiKey),ae=U(()=>H.value||!s.value||!re.value||!I.value.trim()||!ie.value);f(ne,e=>i(`dirty-change`,e)),f(()=>A.value||R.value,e=>i(`busy-change`,e)),f([J,I,g],()=>{L.value=void 0,B.value=``});let oe=U(()=>(r.models?.providers??[]).filter(e=>e.authenticated!==!1&&e.models.length)),se=U(()=>oe.value.map(e=>({...e,models:e.models.filter(t=>`${e.name} ${t}`.toLowerCase().includes(P.value.trim().toLowerCase()))})).filter(e=>e.models.length)),Y=U(()=>{let e=l.value?ee(l.value):void 0;return e?.reasoningKnown?Rr.filter(t=>e.reasoningEfforts.includes(t)&&Br(t)<=Br(S.value)):[]}),ce=U(()=>{let e=l.value?ee(l.value):void 0,t=e?Gr(e,C.value,S.value):`default`;return t===null?`当前模型无符合思考上限的档位`:t==="default"?`提供方默认`:Xr[t]??t}),le=U(()=>_.value===`jeff`?`自动(Jeff)`:`自动(Jev)`);function ue(e){a.value=e,e.modelOptions&&(o.value=e.modelOptions),s.value=e.enabled,_.value=e.backend??`jev`,v.value=e.jeffBaseUrl||`http://127.0.0.1:8765`,y.value=e.jeffModel||`jeff-latest`,c.value=e.candidates.map(e=>W(e.provider,e.model)),b.value=Object.fromEntries(e.candidates.map(e=>[W(e.provider,e.model),{tier:Ur(e),blurb:e.blurb??``}])),l.value=e.fallback?W(e.fallback.provider,e.fallback.model):c.value[0]??``;let t=Wr(e);x.value=t.preserveTaskAbility,S.value=t.maxReasoningEffort,C.value=t.fallbackReasoningEffort,E.value=e.minConfidence??.55,g.value=``,N.value=J()}function de(e){b.value[e]||(b.value[e]={tier:Hr(K(e)),blurb:``}),c.value=c.value.includes(e)?c.value.filter(t=>t!==e):[...c.value,e],c.value.includes(l.value)||(l.value=c.value[0]??``)}async function fe(){if(!a.value||A.value||R.value)return!1;if(!re.value)return j.value=`请选择至少两个候选模型,并将置信度设为 0 到 1。`,!1;A.value=!0,j.value=``,M.value=``;try{return ue(await ar.saveJev({revision:a.value.revision,enabled:s.value,backend:_.value,jeffBaseUrl:v.value.trim()||`http://127.0.0.1:8765`,jeffModel:y.value.trim()||`jeff-latest`,...q(),...g.value.trim()?{apiKey:g.value.trim()}:{}})),M.value=`自动选模已保存,新的 Bot 回合使用此配置。`,!0}catch(e){return j.value=e instanceof Error?e.message:`保存失败`,!1}finally{A.value=!1}}async function pe(){if(!(A.value||R.value)){A.value=!0,j.value=``,M.value=``;try{ue(await ar.jev())}catch(e){j.value=e instanceof Error?e.message:`无法读取自动选模设置`}finally{A.value=!1}}}async function me(){if(!ae.value){R.value=!0,B.value=``,L.value=void 0;try{L.value=await ar.previewJev({pool:q(),enabled:s.value,userText:I.value.trim(),backend:_.value,jeffBaseUrl:v.value.trim()||`http://127.0.0.1:8765`,jeffModel:y.value.trim()||`jeff-latest`,...g.value.trim()?{apiKey:g.value.trim()}:{}})}catch(e){B.value=e instanceof Error?e.message:`预览失败`}finally{R.value=!1}}}return m(pe),t({reset:pe,save:fe}),(e,t)=>(u(),F(`section`,{class:`jev-auto`,"aria-label":`自动选模`,"aria-busy":A.value||R.value},[D(`div`,fi,[t[13]||=D(`h4`,null,`自动选模`,-1),D(`label`,pi,[d(D(`input`,{"onUpdate:modelValue":t[0]||=e=>s.value=e,type:`checkbox`,disabled:H.value},null,8,mi),[[Je,s.value]]),t[12]||=w(` 启用自动选模`,-1)])]),t[31]||=D(`p`,null,`由决策模型结合任务和上下文,选择能胜任的最轻模型与思考强度。关闭后 Bot 不可选择 Auto。`,-1),j.value?(u(),F(`p`,hi,h(j.value),1)):z(``,!0),M.value?(u(),F(`p`,gi,h(M.value),1)):z(``,!0),D(`label`,null,[t[14]||=w(`决策服务`,-1),d(D(`select`,{"onUpdate:modelValue":t[1]||=e=>_.value=e,"aria-label":`决策服务`,disabled:H.value},[(u(!0),F(T,null,p(V($r),e=>(u(),F(`option`,{key:e,value:e},h(V(ei)[e]),9,vi))),128))],8,_i),[[Ne,_.value]])]),_.value===`jeff`?(u(),F(T,{key:2},[D(`div`,yi,[D(`label`,null,[t[15]||=w(`Jeff 地址`,-1),d(D(`input`,{"onUpdate:modelValue":t[2]||=e=>v.value=e,type:`url`,placeholder:`http://127.0.0.1:8765`,disabled:H.value},null,8,bi),[[Q,v.value]])]),D(`label`,null,[t[16]||=w(`Jeff 模型`,-1),d(D(`input`,{"onUpdate:modelValue":t[3]||=e=>y.value=e,type:`text`,placeholder:`jeff-latest`,disabled:H.value},null,8,xi),[[Q,y.value]])])]),t[17]||=D(`p`,null,[w(`本机 Jeff 默认无密钥。地址仅允许 127.0.0.1 / localhost。可用环境变量 `),D(`code`,null,`YAOVI_DECISION_BACKEND=jeff`),w(`、`),D(`code`,null,`JEFF_BASE_URL`),w(` 覆盖。`)],-1)],64)):(u(),F(`label`,Si,[t[18]||=w(`TypeSafe API 密钥`,-1),d(D(`input`,{"onUpdate:modelValue":t[4]||=e=>g.value=e,type:`password`,autocomplete:`new-password`,placeholder:a.value?.hasApiKey?`已保存,留空则不修改`:`sk-…`,disabled:H.value},null,8,Ci),[[Q,g.value]])])),t[32]||=D(`div`,{class:`jev-section-title`},[D(`h5`,null,`模型分工`),D(`small`,null,`建议分工,可按实际表现调整`)],-1),D(`div`,wi,[(u(!0),F(T,null,p(c.value,e=>(u(),F(`div`,{key:e,class:`jev-role`},[D(`div`,Ti,[D(`strong`,null,h(K(e)),1),D(`small`,null,h(V(Lr)[b.value[e].tier]),1),o.value.length&&!ee(e)?(u(),F(`small`,Ei,`当前不可用`)):z(``,!0)]),D(`label`,null,[D(`span`,Di,h(K(e))+` 的任务分工`,1),d(D(`select`,{"onUpdate:modelValue":t=>b.value[e].tier=t,"aria-label":`${K(e)} 的任务分工`,disabled:H.value},[(u(!0),F(T,null,p(V(Fr),e=>(u(),F(`option`,{key:e,value:e},h(V(Ir)[e])+`任务`,9,ki))),128))],8,Oi),[[Ne,b.value[e].tier]])])]))),128)),c.value.length?z(``,!0):(u(),F(`p`,Ai,`选择至少两个候选模型后配置分工。`))]),D(`details`,{class:`jev-picker`,open:!c.value.length},[D(`summary`,null,`选择候选模型 · 已选 `+h(c.value.length)+` 个`,1),D(`label`,null,[t[19]||=w(`筛选候选模型`,-1),d(D(`input`,{"onUpdate:modelValue":t[5]||=e=>P.value=e,type:`search`,placeholder:`搜索模型或供应商`,disabled:H.value},null,8,Mi),[[Q,P.value]])]),D(`div`,Ni,[(u(!0),F(T,null,p(se.value,e=>(u(),F(`div`,{key:e.slug,class:`jev-group`},[D(`strong`,null,h(e.name),1),(u(!0),F(T,null,p(e.models,t=>(u(),F(`label`,{key:e.slug+t},[D(`input`,{type:`checkbox`,checked:c.value.includes(W(e.slug,t)),disabled:H.value||c.value.length>=32&&!c.value.includes(W(e.slug,t)),onChange:n=>de(W(e.slug,t))},null,40,Pi),w(h(t),1)]))),128))]))),128)),se.value.length?z(``,!0):(u(),F(`p`,Fi,`没有匹配的已连接模型。`)),(u(!0),F(T,null,p(c.value.filter(e=>!oe.value.some(t=>t.slug===G(e).provider&&t.models.includes(K(e)))),e=>(u(),F(`label`,{key:e,class:`jev-toggle`},[D(`input`,{type:`checkbox`,checked:``,disabled:H.value,onChange:t=>de(e)},null,40,Ii),w(h(K(e))+`(目录外,可移除)`,1)]))),128))])],8,ji),D(`label`,Li,[d(D(`input`,{"onUpdate:modelValue":t[6]||=e=>x.value=e,type:`checkbox`,disabled:H.value},null,8,Ri),[[Je,x.value]]),t[20]||=D(`span`,null,[w(`保留未完成任务所需能力`),D(`small`,null,`继续复杂任务时保留能力与思考下限;新的简单任务允许降级。`)],-1)]),D(`label`,null,[t[21]||=w(`思考强度`,-1),D(`input`,{value:le.value,readonly:``,"aria-label":`Auto 思考强度`},null,8,zi)]),D(`details`,Bi,[t[27]||=D(`summary`,null,`高级设置与回退`,-1),D(`div`,Vi,[D(`label`,null,[t[22]||=w(`最高允许思考等级`,-1),d(D(`select`,{"onUpdate:modelValue":t[7]||=e=>S.value=e,disabled:H.value},[(u(!0),F(T,null,p(V(Rr),e=>(u(),F(`option`,{key:e,value:e},h(V(Xr)[e]),9,Ui))),128))],8,Hi),[[Ne,S.value]])]),D(`label`,null,[t[23]||=w(`最低置信度`,-1),d(D(`input`,{"onUpdate:modelValue":t[8]||=e=>E.value=e,type:`number`,min:`0`,max:`1`,step:`0.05`,disabled:H.value},null,8,Wi),[[Q,E.value,void 0,{number:!0}]])]),c.value.length?(u(),F(`label`,Gi,[t[24]||=w(`回退模型`,-1),d(D(`select`,{"onUpdate:modelValue":t[9]||=e=>l.value=e,disabled:H.value},[(u(!0),F(T,null,p(c.value,e=>(u(),F(`option`,{key:e,value:e},h(K(e)),9,qi))),128))],8,Ki),[[Ne,l.value]])])):z(``,!0),D(`label`,null,[t[26]||=w(`回退思考强度`,-1),d(D(`select`,{"onUpdate:modelValue":t[10]||=e=>C.value=e,disabled:H.value},[t[25]||=D(`option`,{value:`default`},`模型默认`,-1),C.value!=="default"&&!Y.value.includes(C.value)?(u(),F(`option`,{key:0,value:C.value},h(V(Xr)[C.value])+`(自动适配)`,9,Yi)):z(``,!0),(u(!0),F(T,null,p(Y.value,e=>(u(),F(`option`,{key:e,value:e},h(V(Xr)[e]),9,Xi))),128))],8,Ji),[[Ne,C.value]]),D(`small`,null,`实际档位:`+h(ce.value),1)])]),t[28]||=D(`p`,null,`回退不影响下一轮偏好。继续原任务时仍保留必要能力;思考档位未知时使用提供方默认。`,-1),(u(!0),F(T,null,p(c.value,e=>(u(),F(`label`,{key:e,class:`jev-hint`},[w(h(K(e))+` · 补充能力说明`,1),d(D(`input`,{"onUpdate:modelValue":t=>b.value[e].blurb=t,maxlength:`280`,placeholder:`可选,例如擅长代码排查或长文分析`,disabled:H.value},null,8,Zi),[[Q,b.value[e].blurb]])]))),128))]),D(`details`,Qi,[t[30]||=D(`summary`,null,`选模预览`,-1),D(`p`,null,`使用当前草稿调用 `+h(_.value===`jeff`?`Jeff`:`Jev`)+`,仅判断这个新任务,不执行任务,也不保存设置。`,1),D(`label`,null,[t[29]||=w(`任务内容`,-1),d(D(`textarea`,{"onUpdate:modelValue":t[11]||=e=>I.value=e,maxlength:`2000`,rows:`2`,disabled:H.value},null,8,$i),[[Q,I.value]])]),D(`button`,{type:`button`,disabled:ae.value,onClick:me},h(R.value?_.value===`jeff`?`Jeff 正在判断…`:`Jev 正在判断…`:`预览模型与思考强度`),9,ea),B.value?(u(),F(`p`,ta,h(B.value),1)):z(``,!0),D(`div`,na,[L.value?(u(),k(ui,{key:0,route:L.value},null,8,[`route`])):z(``,!0)])]),D(`button`,{type:`button`,disabled:H.value||!ne.value||!re.value,onClick:fe},h(A.value?`正在处理…`:`保存自动选模`),9,ra),j.value?(u(),F(`button`,{key:4,type:`button`,disabled:A.value||R.value,onClick:pe},`重新读取设置`,8,ia)):z(``,!0)],8,di))}}),[[`__scopeId`,`data-v-be01e084`]]),oa={class:`jev-network`,"aria-label":`Jev 独立网络`},sa={key:0,class:`error`,role:`alert`},ca={key:1,role:`status`},la={class:`actions`},ua=[`disabled`],da=[`disabled`],fa=[`disabled`],pa=H(E({__name:`JevNetworkPanel`,props:{disabled:{type:Boolean}},emits:[`dirty-change`,`busy-change`,`manage-network`],setup(e,{expose:t,emit:n}){let r=n,i=O(),a=O({mode:`inherit`}),o=O(!1),s=O(!1),c=O(``),l=O(``),d=U(()=>!!i.value&&JSON.stringify(a.value)!==JSON.stringify(i.value.connections.typesafe??{mode:`inherit`}));f(d,e=>r(`dirty-change`,e)),f(()=>o.value||s.value,e=>r(`busy-change`,e));async function p(){c.value=``,l.value=``;try{i.value=await dt.get(),a.value={...i.value.connections.typesafe??{mode:`inherit`}}}catch(e){c.value=e instanceof Error?e.message:`无法读取 Jev 网络设置`}}async function g(){if(!i.value||o.value||s.value)return!1;o.value=!0,c.value=``,l.value=``;try{return i.value=await dt.save(i.value.revision,a.value,Kr),l.value=`Jev 独立网络已保存,从下一次选模请求生效。`,!0}catch(e){return c.value=e instanceof Error?e.message:`保存失败,草稿已保留。`,!1}finally{o.value=!1}}return m(p),t({reset:p,save:g}),(t,n)=>(u(),F(`section`,oa,[n[3]||=D(`h4`,null,`Jev 独立网络`,-1),n[4]||=D(`p`,null,`仅用于云端 TypeSafe Jev 选模请求。选择本机 Jeff 时走回环,不经此代理。各模型供应商使用各自的连接网络。`,-1),c.value?(u(),F(`p`,sa,h(c.value),1)):z(``,!0),l.value?(u(),F(`p`,ca,h(l.value),1)):z(``,!0),i.value?(u(),k(pt,{key:2,modelValue:a.value,"onUpdate:modelValue":n[0]||=e=>a.value=e,view:i.value,provider:V(Kr),disabled:e.disabled||o.value,compact:``,onBusy:n[1]||=e=>s.value=e},null,8,[`modelValue`,`view`,`provider`,`disabled`])):z(``,!0),D(`div`,la,[D(`button`,{type:`button`,disabled:e.disabled||o.value||s.value||!d.value||a.value.mode===`proxy`&&!a.value.proxyId,onClick:g},h(o.value?`正在保存…`:`保存 Jev 网络`),9,ua),D(`button`,{type:`button`,disabled:e.disabled||o.value||s.value,onClick:n[2]||=e=>r(`manage-network`)},`管理代理`,8,da),c.value?(u(),F(`button`,{key:0,type:`button`,disabled:e.disabled||o.value||s.value,onClick:p},`重新读取`,8,fa)):z(``,!0)])]))}}),[[`__scopeId`,`data-v-28b34336`]]),ma={class:`bot-model-visibility`,"aria-label":`Bot 可选模型`},ha={key:0,class:`error`,role:`alert`},ga={key:1,role:`status`},_a={class:`toggle`},va=[`disabled`],ya={class:`filters`},ba=[`disabled`],xa=[`disabled`],Sa=[`value`],Ca={class:`actions`},wa=[`disabled`],Ta=[`disabled`],Ea={role:`status`},Da={class:`model-list`},Oa=[`checked`,`disabled`,`onChange`],ka={key:0},Aa={key:0},ja={key:3},Ma={class:`actions`},Na=[`disabled`],Pa=[`disabled`],Fa=H(E({__name:`BotModelVisibilityPanel`,props:{models:{},disabled:{type:Boolean}},emits:[`dirty-change`,`busy-change`],setup(e,{expose:t,emit:n}){let r=e,i=n,a=O(),o=O(!1),s=O([]),c=O(``),l=O(``),g=O(!1),_=O(``),v=O(``),y=O(``),b=(e,t)=>JSON.stringify([e,t]),x=U(()=>(r.models?.providers??[]).filter(e=>e.authenticated!==!1&&e.models.length)),S=U(()=>x.value.filter(e=>!l.value||e.slug===l.value).map(e=>({...e,models:e.models.filter(t=>`${e.name} ${t}`.toLowerCase().includes(c.value.trim().toLowerCase()))})).filter(e=>e.models.length)),C=()=>JSON.stringify(o.value?[...s.value].sort():null),E=U(()=>!!a.value&&C()!==y.value);f(E,e=>i(`dirty-change`,e)),f(g,e=>i(`busy-change`,e));function k(e){a.value=e,o.value=e.models!==null,s.value=e.models?.map(e=>b(e.provider,e.model))??[],y.value=C()}function A(e){s.value=s.value.includes(e)?s.value.filter(t=>t!==e):[...s.value,e]}function j(e){let t=S.value.flatMap(e=>e.models.map(t=>b(e.slug,t)));s.value=e?[...new Set([...s.value,...t])]:s.value.filter(e=>!t.includes(e))}async function M(){_.value=``,v.value=``;try{k(await ar.botModels())}catch(e){_.value=e instanceof Error?e.message:`无法读取 Bot 可选模型`}}async function N(){if(!a.value||g.value)return!1;g.value=!0,_.value=``,v.value=``;try{return k(await ar.saveBotModels({revision:a.value.revision,models:o.value?s.value.map(e=>{let[t,n]=JSON.parse(e);return{provider:t,model:n}}):null})),v.value=`Bot 可选模型已保存,重新打开模型选择即可读取。`,!0}catch(e){return _.value=e instanceof Error?e.message:`保存失败,草稿已保留。`,!1}finally{g.value=!1}}return m(M),t({reset:M,save:N}),(t,n)=>(u(),F(`section`,ma,[n[9]||=D(`h4`,null,`Bot 可选模型`,-1),n[10]||=D(`p`,null,`统一精简 Bot 的手动对话模型列表。已有选择会保留;Auto 使用上方自动选模的候选池。`,-1),_.value?(u(),F(`p`,ha,h(_.value),1)):z(``,!0),v.value?(u(),F(`p`,ga,h(v.value),1)):z(``,!0),D(`label`,_a,[d(D(`input`,{"onUpdate:modelValue":n[0]||=e=>o.value=e,type:`checkbox`,disabled:e.disabled||g.value||!a.value},null,8,va),[[Je,o.value]]),n[5]||=w(` 只显示勾选的模型`,-1)]),o.value?(u(),F(T,{key:2},[D(`div`,ya,[D(`label`,null,[n[6]||=w(`搜索模型`,-1),d(D(`input`,{"onUpdate:modelValue":n[1]||=e=>c.value=e,type:`search`,placeholder:`搜索模型或供应商`,disabled:e.disabled||g.value},null,8,ba),[[Q,c.value]])]),D(`label`,null,[n[8]||=w(`供应商`,-1),d(D(`select`,{"onUpdate:modelValue":n[2]||=e=>l.value=e,disabled:e.disabled||g.value},[n[7]||=D(`option`,{value:``},`全部已连接供应商`,-1),(u(!0),F(T,null,p(x.value,e=>(u(),F(`option`,{key:e.slug,value:e.slug},h(e.name),9,Sa))),128))],8,xa),[[Ne,l.value]])])]),D(`div`,Ca,[D(`button`,{type:`button`,disabled:e.disabled||g.value,onClick:n[3]||=e=>j(!0)},`全选搜索结果`,8,wa),D(`button`,{type:`button`,disabled:e.disabled||g.value,onClick:n[4]||=e=>j(!1)},`取消搜索结果`,8,Ta),D(`small`,Ea,`已勾选 `+h(s.value.length)+` 个模型`,1)]),D(`div`,Da,[(u(!0),F(T,null,p(S.value,t=>(u(),F(`div`,{key:t.slug,class:`model-group`},[D(`strong`,null,h(t.name),1),(u(!0),F(T,null,p(t.models,n=>(u(),F(`label`,{key:n,class:`toggle`},[D(`input`,{type:`checkbox`,checked:s.value.includes(b(t.slug,n)),disabled:e.disabled||g.value,onChange:e=>A(b(t.slug,n))},null,40,Oa),w(h(n),1)]))),128))]))),128)),S.value.length?z(``,!0):(u(),F(`p`,ka,`没有匹配的模型,请调整搜索或供应商筛选。`))]),s.value.length?z(``,!0):(u(),F(`small`,Aa,`未勾选时只显示跟随系统默认、Auto 和此 Bot 已有选择。`))],64)):(u(),F(`p`,ja,`当前显示所有已连接模型。`)),D(`div`,Ma,[D(`button`,{type:`button`,disabled:e.disabled||g.value||!E.value||!e.models,onClick:N},h(g.value?`正在保存…`:`保存 Bot 可选模型`),9,Na),_.value?(u(),F(`button`,{key:0,type:`button`,disabled:e.disabled||g.value,onClick:M},`重新读取`,8,Pa)):z(``,!0)])]))}}),[[`__scopeId`,`data-v-7025970d`]]),Ia=[`aria-busy`],La={key:0,class:`note`},Ra={key:1,class:`error`,role:`alert`},za={key:2,role:`status`},Ba=[`id`],Va={class:`setting-row`},Ha=[`required`,`disabled`],Ua=[`value`],Wa=[`value`],Ga={class:`setting-row`},Ka=[`required`,`disabled`],qa={id:`hermes-main-models`},Ja=[`value`],Ya={class:`defaults-status`},Xa=[`disabled`],Za=[`disabled`],Qa={class:`fallback-section`},$a=[`disabled`],eo=[`disabled`],to={key:0,class:`block`},no={class:`providers`},ro={class:`head`},io={class:`badge ok`},ao={class:`hint`},oo=[`onClick`],so={key:1,class:`block`},co={class:`providers`},lo={class:`head`},uo=[`onClick`],fo={key:0},po=[`disabled`,`onClick`],mo={key:1},ho=[`disabled`,`onClick`],go={class:`block`},_o={class:`connection-heading`},vo=[`disabled`],yo={class:`providers`},bo={class:`head`},xo=[`onClick`],So={key:0},Co=[`disabled`,`onClick`],wo={key:1},To=[`disabled`,`onClick`],Eo=[`onSubmit`],Do=[`onUpdate:modelValue`,`placeholder`,`aria-label`],Oo=[`disabled`],ko=[`disabled`,`onClick`],Ao=[`onClick`],jo={key:2,class:`pool`},Mo={key:0},No=[`disabled`,`onClick`],Po=[`disabled`],Fo={class:`row`},Io=[`disabled`],Lo={key:2,class:`block`},Ro={class:`providers`},zo={class:`head`},Bo={class:`hint`},Vo=[`onSubmit`],Ho=[`onUpdate:modelValue`,`placeholder`,`aria-label`],Uo=[`disabled`],Wo=[`disabled`,`onClick`],Go={key:3,class:`hint`},Ko={class:`endpoint-section`},qo=[`disabled`],Jo=H(E({__name:`HermesProvidersPanel`,props:{bot:{},section:{default:`all`},embedded:{type:Boolean,default:!1},formId:{}},emits:[`changed`,`dirty-change`,`can-save-change`,`busy-change`,`manage-network`],setup(e,{expose:t,emit:n}){let r=O(),i=O(),a=O(!1),s=O();async function c(){try{r.value=await dt.get(y.bot)}catch{r.value=void 0}}function g(e){return r.value?(y.bot?`独立凭据网络:`:`网络:`)+ft(r.value,r.value.connections[e]??{mode:`inherit`}):`设置连接网络`}function _(e,t){i.value={id:e,name:t}}function v(){a.value=!1,i.value=void 0,c()}m(c);let y=e,b=n,x=O(),S=O(),C=O(),E=O(!1),A=O(!1),j=O(!1),M=O(!1),N=O(!1),P=O(!1),I=U(()=>E.value||A.value||j.value),L=U(()=>M.value||N.value||P.value),R=O([]),B=O([]),V=O({}),H=O(),G=O(``),K=O(``),ee=O(``),te=O(``),q=O(!1),J=O(``),ne=O(``),re=O(),ie,ae=O({}),oe=O(``),se=O([]),ce=O(``),le=O(``),ue=O(`fill_first`),de=O({name:``,base_url:``,model:``,api_key:``,api_mode:``}),fe=O([]),pe=O({}),me=O(!1),he=O(!1),ge=O(y.section===`all`),_e=O(``),ve=O({provider:``,model:``}),ye=O(``),be=O(),xe=U(()=>{let e=te.value.trim().toLowerCase();return R.value.filter(t=>(ge.value||!!e||Te(t))&&(!e||t.id.includes(e)||t.label.toLowerCase().includes(e)||t.aliases.some(t=>t.includes(e))))}),Se=e=>B.value.find(t=>t.id===e),Ce=U(()=>B.value.filter(e=>!R.value.some(t=>t.id===e.id))),we=e=>e.envVars[0],Te=e=>!!Se(e.id)?.status.logged_in||e.envVars.some(e=>V.value[e]?.is_set),Ee=U(()=>H.value?.providers.find(e=>e.slug===G.value)?.models??[]),De=U(()=>H.value?.providers.filter(e=>e.authenticated===!0)??[]),Oe=U(()=>De.value.some(e=>e.slug===G.value)),ke=U(()=>H.value?.providers.filter(e=>(e.authenticated===!0||e.is_current)&&!R.value.some(t=>t.id===e.slug))??[]),Ae=U(()=>he.value&&(G.value!==ve.value.provider||K.value!==ve.value.model)),je=U(()=>he.value&&ee.value!==ye.value),Me=U(()=>Object.values(ae.value).some(Boolean)||Object.values(de.value).some(Boolean)||!!ce.value||!!le.value||Object.values(pe.value).some(e=>e.trim())),Pe=U(()=>a.value||I.value||(y.section===`defaults`?Ae.value||je.value:y.section===`connections`?Me.value:Ae.value||je.value||Me.value));f(Pe,e=>{e&&(ne.value=``),b(`dirty-change`,e)}),f(()=>he.value&&!q.value&&!L.value&&(!Ae.value||Oe.value&&!!K.value.trim())&&(Ae.value||je.value||I.value),e=>b(`can-save-change`,e),{immediate:!0}),f(()=>me.value||L.value,e=>b(`busy-change`,e),{immediate:!0});async function Fe(){await Ie(async()=>{H.value=await ar.models(!0),_e.value=``},`模型列表已刷新`,!1)}async function Ie(e,t,n=!0){if(!(q.value||L.value)){q.value=!0,me.value=n,J.value=``,ne.value=``;try{let n=await e();t&&n!==!1&&(ne.value=t)}catch(e){J.value=e instanceof Error?e.message:`操作失败`}finally{q.value=!1,me.value=!1}}}async function Le(){await Ie(async()=>{let[e,t,n,r]=await Promise.all([y.section===`defaults`?Promise.resolve({providers:[]}):ar.providers(y.bot),y.section===`defaults`?Promise.resolve({providers:[]}):ar.oauth(y.bot),y.section===`defaults`?Promise.resolve({}):ar.env(y.bot),ar.config(y.bot)]);R.value=e.providers,B.value=t.providers,V.value=n,G.value=r.config.model?.provider??``,K.value=r.config.model?.default??``;let i=r.config.fallback_model;ee.value=(Array.isArray(i)?i:i?[i]:[]).map(e=>`${e.provider} ${e.model}`).join(`
|
|
8
|
+
`),disabled:c.value,rows:`2`,placeholder:`例如 path:/项目目录 或 device:设备编号`,onInput:t=>e.resources=B(t)},null,40,cn)]),D(`button`,{type:`button`,disabled:c.value,onClick:e=>x.value.scopes.splice(t,1)},` 移除此范围限制 `,8,ln)]))),128)),D(`button`,{type:`button`,disabled:c.value,onClick:r[6]||=e=>x.value.scopes.push({capability:`files.read`,resources:[]})},` 添加资源限制 `,8,un)])):z(``,!0)],8,Vt),[[tt,n.kind!==`agents`||!C.value]]),D(`div`,dn,[D(`button`,{type:`button`,disabled:c.value,onClick:M},`重新读取`,8,fn),D(`button`,{type:`button`,disabled:c.value||!E.value,onClick:L},h(c.value?`保存中…`:`保存权限`),9,pn)])],64)):m.value?z(``,!0):(u(),F(`p`,mn,`正在读取权限…`)),m.value?(u(),F(`p`,$,h(m.value),1)):z(``,!0),g.value?(u(),F(`p`,hn,h(g.value),1)):z(``,!0)],10,Ft))}}),[[`__scopeId`,`data-v-fc38edec`]]),_n=e(Ee(),1);function vn(e){return`?profile=${encodeURIComponent(e)}`}async function yn(e){let t=await X(`/api/app/models${vn(e)}`),n=typeof t.provider==`string`?t.provider.trim():``,r=typeof t.model==`string`?t.model.trim():``;return(t.providers||[]).flatMap(e=>{if(!e||typeof e!=`object`||Array.isArray(e))return[];let t=e,i=typeof t.slug==`string`?t.slug.trim():``;if(!i)return[];let a=t.is_current===!0||i.toLocaleLowerCase()===n.toLocaleLowerCase(),o=Array.isArray(t.models)?t.models.flatMap(e=>{if(typeof e==`string`)return e.trim()?[e.trim()]:[];if(!e||typeof e!=`object`||Array.isArray(e))return[];let t=e,n=typeof t.id==`string`?t.id.trim():typeof t.model==`string`?t.model.trim():``;return n?[n]:[]}):[];return[{slug:i,name:typeof t.name==`string`&&t.name.trim()?t.name.trim():i,models:o,isCurrent:a,...a&&r?{currentModel:r}:{}}]})}var bn={class:`identity-avatar`},xn=[`disabled`],Sn=[`disabled`],Cn=[`disabled`],wn=[`disabled`],Tn={key:0},En=[`disabled`],Dn={key:1,class:`mascot-controls`},On={class:`mascot-grid mascot-grid--shape`},kn=[`aria-pressed`,`onClick`],An={class:`mascot-grid mascot-grid--shape`},jn=[`aria-pressed`,`aria-label`,`onClick`],Mn={class:`mascot-grid mascot-grid--expression`},Nn=[`aria-pressed`,`onClick`],Pn={class:`color-grid`},Fn=[`aria-label`,`title`,`aria-pressed`,`onClick`],In={key:2,class:`mascot-controls`},Ln={class:`mascot-grid mascot-grid--shape`},Rn=[`aria-pressed`,`onClick`],zn={class:`avatar-actions`},Bn=[`disabled`],Vn=[`disabled`],Hn={key:3,class:`identity-default-model`},Un={key:4,class:`identity-error`,role:`alert`},Wn={key:5,class:`identity-actions`},Gn=[`disabled`],Kn=H(E({__name:`AgentIdentityPanel`,props:{profile:{},busy:{type:Boolean,default:!1},error:{default:``},formId:{default:void 0},showActions:{type:Boolean,default:!0},resetVersion:{default:0},defaultModelLabel:{default:``},embedded:{type:Boolean,default:!1},showName:{type:Boolean,default:!0},showDefaultModel:{type:Boolean,default:!0}},emits:[`save`,`dirty-change`,`avatarChange`],setup(e,{emit:t}){let n=e,r=t,i=O(``),o=O(null),c=O(`mascot`),m=O(`circle`),g=O(`#00c875`),_=O(null),y=O(`rounded`),b=O(`idle`),x=O(``),C=O(),E=O(``),A=O(``),j=0,M=0;function N(){return JSON.stringify({title:i.value,avatarMode:c.value,shape:m.value,color:g.value,expression:b.value,bodyId:_.value,imageCrop:y.value,avatarDataURL:o.value})}function P(){j+=1;let e=n.profile,t=e.agentName||e.displayName||e.name||``,r=je(e.agentAvatar),a=at(e.name,t);i.value=t,o.value=r?.imageDataURL??null,_.value=r?.bodyId??null,y.value=r?.imageCrop??`rounded`,c.value=r?.avatarMode??(o.value?`image`:`mascot`),m.value=r?.shape??a.shape,g.value=r?.color??a.color,b.value=r?.expression??a.expression,E.value=N(),x.value=``}f([()=>n.profile.name,()=>n.resetVersion],P,{immediate:!0}),f([()=>n.profile.name,()=>n.defaultModelLabel],async()=>{if(!n.showDefaultModel)return;let e=++M,t=n.defaultModelLabel||[n.profile.provider,n.profile.model].filter(Boolean).join(` / `);A.value=t;try{let t=(await yn(n.profile.name)).find(e=>e.isCurrent&&e.currentModel);e===M&&t?.currentModel&&(A.value=`${t.slug} / ${t.currentModel}`)}catch{}},{immediate:!0});let I=U(()=>ct({...Be({name:n.profile.name,display_name:i.value}),displayName:i.value,avatarMode:c.value,shape:m.value,color:g.value,expression:b.value,bodyId:_.value,imageCrop:y.value,...o.value?{imageDataURL:o.value}:{}}));f(I,e=>r(`avatarChange`,e),{immediate:!0});let L=U(N),R=U(()=>L.value!==E.value);f(R,e=>r(`dirty-change`,e),{immediate:!0});let B={circle:`圆形`,square:`圆角方形`,triangle:`小三角`,ellipse:`椭圆`,capsule:`胶囊`,hexagon:`六边形`,cloud:`云朵`,droplet:`水滴`},H=Xe;function G(e={}){return ct({...Be({name:n.profile.name,display_name:i.value}),displayName:i.value,avatarMode:`mascot`,shape:e.shape??m.value,color:e.color??g.value,expression:e.expression??b.value,bodyId:e.bodyId===void 0?_.value:e.bodyId})}function K(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 ee(e){return new Promise((t,n)=>{let r=new Image;r.onload=()=>{let e=Math.min(256,Math.max(r.width,r.height))/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 te(e){let t=e.target.files?.[0];if(!t)return;let n=j;try{if(![`image/png`,`image/jpeg`,`image/webp`].includes(t.type))throw Error(`请选择 PNG、JPEG 或 WebP 图片`);if(t.size>10485760)throw Error(`图片不能超过 10 MB`);let e=await ee(await K(t));if(n!==j)return;o.value=e,c.value=`image`,x.value=``}catch(e){x.value=e instanceof Error?e.message:`处理头像失败`}finally{C.value&&(C.value.value=``)}}function q(){c.value=`mascot`,_.value=null,m.value=Ke[Math.floor(Math.random()*Ke.length)],g.value=it[Math.floor(Math.random()*it.length)],b.value=ze[Math.floor(Math.random()*ze.length)]}function J(){let e=at(n.profile.name,i.value);c.value=`mascot`,_.value=null,y.value=`rounded`,m.value=e.shape,g.value=e.color,b.value=e.expression,o.value=null}function ne(){let e=i.value.trim().replace(/\s+/g,` `);if(!e){x.value=`请输入机器人名称`;return}r(`save`,{title:e,avatarMode:c.value,shape:m.value,color:g.value,expression:b.value,bodyId:_.value,imageCrop:y.value,avatarDataURL:o.value}),i.value=e}return(t,n)=>(u(),k(a(e.embedded?`div`:`form`),{id:e.formId,class:`identity-form`,onSubmit:Z(ne,[`prevent`])},{default:S(()=>[D(`div`,bn,[W(Ye,{name:i.value||e.profile.name,avatar:I.value,size:112,state:`idle`,animated:!0},null,8,[`name`,`avatar`]),D(`div`,null,[n[6]||=D(`strong`,null,`自定义角色`,-1),n[7]||=D(`small`,null,`头像设置保存后同步到 Web 与 iOS。`,-1),D(`p`,null,[D(`button`,{class:l([`quiet-button`,{active:c.value===`mascot`}]),type:`button`,disabled:e.busy,onClick:n[0]||=e=>c.value=`mascot`},`动态吉祥物`,10,xn),D(`button`,{class:l([`quiet-button`,{active:c.value===`image`}]),type:`button`,disabled:e.busy||!o.value,onClick:n[1]||=e=>c.value=`image`},`上传图片`,10,Sn)]),D(`p`,null,[D(`button`,{class:`quiet-button`,type:`button`,disabled:e.busy,onClick:n[2]||=e=>C.value?.click()},[W(Y,{name:`image`,size:14}),n[5]||=w(`选择图片`,-1)],8,Cn),o.value?(u(),F(`button`,{key:0,class:`quiet-button`,type:`button`,disabled:e.busy,onClick:n[3]||=e=>{o.value=null,c.value=`mascot`}},`移除图片`,8,wn)):z(``,!0)])]),D(`input`,{ref_key:`fileInput`,ref:C,class:`sr-only`,type:`file`,accept:`image/png,image/jpeg,image/webp`,onChange:te},null,544)]),e.showName?(u(),F(`label`,Tn,[n[8]||=w(`名称`,-1),d(D(`input`,{"onUpdate:modelValue":n[4]||=e=>i.value=e,disabled:e.busy,maxlength:`100`,autocomplete:`off`},null,8,En),[[Q,i.value]])])):z(``,!0),c.value===`mascot`?(u(),F(`section`,Dn,[D(`div`,null,[n[9]||=D(`strong`,null,`形状`,-1),D(`div`,On,[(u(!0),F(T,null,p(V(Ve),t=>(u(),F(`button`,{key:t,type:`button`,class:l({selected:!_.value&&m.value===t}),"aria-pressed":!_.value&&m.value===t,onClick:e=>{m.value=t,_.value=null}},[W(Ye,{name:i.value||e.profile.name,avatar:G({shape:t,bodyId:null}),size:44},null,8,[`name`,`avatar`]),D(`span`,null,h(B[t]),1)],10,kn))),128))])]),D(`div`,null,[n[10]||=D(`strong`,null,`造型`,-1),D(`div`,An,[(u(!0),F(T,null,p(V(Fe),e=>(u(),F(`button`,{key:e,type:`button`,class:l({selected:_.value===e}),"aria-pressed":_.value===e,"aria-label":`造型:${V(Ge)[e]}`,onClick:t=>_.value=e},[W(Ye,{name:V(Ge)[e],avatar:G({bodyId:e}),size:44,animated:!1},null,8,[`name`,`avatar`]),D(`span`,null,h(V(Ge)[e]),1)],10,jn))),128))])]),D(`div`,null,[n[11]||=D(`strong`,null,`基础表情`,-1),D(`div`,Mn,[(u(!0),F(T,null,p(V(ze),t=>(u(),F(`button`,{key:t,type:`button`,class:l({selected:b.value===t}),"aria-pressed":b.value===t,onClick:e=>b.value=t},[W(Ye,{name:i.value||e.profile.name,avatar:G({expression:t}),size:38},null,8,[`name`,`avatar`]),D(`span`,null,h(V(H)[t]),1)],10,Nn))),128))])]),D(`div`,null,[n[12]||=D(`strong`,null,`颜色`,-1),D(`div`,Pn,[(u(!0),F(T,null,p(V(it),e=>(u(),F(`button`,{key:e,type:`button`,class:l({selected:g.value===e}),style:s({backgroundColor:e}),"aria-label":`使用颜色 ${e}`,title:V(Le)[e],"aria-pressed":g.value===e,onClick:t=>g.value=e},null,14,Fn))),128))])])])):z(``,!0),c.value===`image`?(u(),F(`section`,In,[n[13]||=D(`strong`,null,`图片裁剪`,-1),D(`div`,Ln,[(u(!0),F(T,null,p(V(et),e=>(u(),F(`button`,{key:e,type:`button`,"aria-pressed":y.value===e,class:l({selected:y.value===e}),onClick:t=>y.value=e},h({circle:`圆形`,rounded:`圆角方形`,square:`方形`}[e]),11,Rn))),128))])])):z(``,!0),D(`div`,zn,[D(`button`,{class:`quiet-button`,type:`button`,disabled:e.busy,onClick:q},`随机外形`,8,Bn),D(`button`,{class:`quiet-button`,type:`button`,disabled:e.busy,onClick:J},`重置头像`,8,Vn)]),e.showDefaultModel?(u(),F(`div`,Hn,[n[14]||=D(`strong`,null,`默认全局模型`,-1),D(`span`,null,h(A.value||`服务器未返回默认模型`),1),n[15]||=D(`small`,null,`仅影响之后新建的会话;已有会话保留自己的模型。`,-1)])):z(``,!0),x.value||e.error?(u(),F(`p`,Un,h(x.value||e.error),1)):z(``,!0),e.showActions?(u(),F(`footer`,Wn,[v(t.$slots,`actions`,{},()=>[D(`button`,{class:`primary-button`,type:`submit`,disabled:e.busy},h(e.busy?`正在同步…`:`保存并同步`),9,Gn)])])):z(``,!0)]),_:3},40,[`id`]))}}),[[`__scopeId`,`data-v-f5776ae9`]]),qn={class:`connection-network`},Jn=[`disabled`],Yn={class:`connection-heading`},Xn={class:`hint`},Zn={key:0,role:`alert`},Qn={key:1,role:`status`},$n={key:3},er=[`disabled`],tr=[`disabled`],nr=H(E({__name:`ConnectionNetworkPanel`,props:{provider:{},name:{},bot:{},canLogin:{type:Boolean}},emits:[`back`,`login`,`changed`,`dirty-change`,`busy-change`],setup(e,{expose:t,emit:n}){let r=e,i=n,a=O(),o=O({mode:`inherit`}),s=O(!1),c=O(!1),l=O(``),d=O(``),p=U(()=>!!a.value&&JSON.stringify(o.value)!==JSON.stringify(a.value.connections[r.provider]??{mode:`inherit`}));f(p,e=>i(`dirty-change`,e)),f(s,e=>i(`busy-change`,e));async function g(){try{a.value=await dt.get(r.bot),o.value={...a.value.connections[r.provider]??{mode:`inherit`}}}catch(e){l.value=e instanceof Error?e.message:`读取失败`}}function _(){!s.value&&(!p.value||window.confirm(`放弃尚未保存的网络更改?`))&&i(`back`)}async function v(e=!1){s.value=!0,l.value=``;try{a.value=await dt.save(a.value.revision,o.value,r.provider,r.bot),d.value=`网络设置已保存,从下一轮任务或新登录生效。`,i(`changed`),e&&i(`login`)}catch(e){l.value=e instanceof Error?e.message:`保存失败`}finally{s.value=!1}}return m(g),t({reset:()=>{a.value&&(o.value={...a.value.connections[r.provider]??{mode:`inherit`}}),d.value=``}}),(t,n)=>(u(),F(`section`,qn,[D(`button`,{class:`back`,type:`button`,disabled:s.value,onClick:_},[W(Y,{name:`chevron-left`,size:16}),n[4]||=w(`返回模型连接`,-1)],8,Jn),D(`div`,Yn,[D(`h3`,null,h(e.name),1),D(`span`,null,h(e.canLogin?`尚未登录`:`模型连接`),1)]),D(`p`,Xn,`用于登录、自动续期、模型列表与模型请求。`+h(e.bot?`继承服务器凭据时沿用服务器连接的网络;此处配置用于本 Bot 独立保存的凭据。`:``),1),l.value?(u(),F(`p`,Zn,h(l.value),1)):z(``,!0),d.value?(u(),F(`p`,Qn,h(d.value),1)):z(``,!0),a.value?(u(),k(pt,{key:2,modelValue:o.value,"onUpdate:modelValue":n[0]||=e=>o.value=e,view:a.value,provider:e.provider,bot:e.bot,disabled:s.value,onBusy:n[1]||=e=>c.value=e},null,8,[`modelValue`,`view`,`provider`,`bot`,`disabled`])):z(``,!0),a.value?(u(),F(`footer`,$n,[D(`button`,{type:`button`,disabled:s.value||!p.value,onClick:n[2]||=t=>o.value={...a.value.connections[e.provider]??{mode:`inherit`}}},`取消更改`,8,er),D(`button`,{class:`primary`,type:`button`,disabled:s.value||c.value||!p.value&&!e.canLogin||o.value.mode===`proxy`&&!o.value.proxyId,onClick:n[3]||=t=>v(!!e.canLogin)},h(s.value?`正在保存…`:e.canLogin?`保存并登录`:`保存更改`),9,tr)])):z(``,!0)]))}}),[[`__scopeId`,`data-v-34276c52`]]),rr=`/api/app/admin/hermes`,ir=(e,t=``)=>{let n=new URLSearchParams(t);e&&n.set(`bot`,e);let r=n.toString();return r?`?${r}`:``},ar={providers:e=>X(`${rr}/providers${ir(e)}`),config:e=>X(`${rr}/config${ir(e)}`),patchConfig:(e,t)=>X(`${rr}/config${ir(t)}`,{method:`PATCH`,body:{config:e}}),models:(e=!1,t)=>X(`${rr}/models${ir(t,e?`refresh=1`:``)}`),jev:()=>X(`${rr}/jev`),botModels:()=>X(`${rr}/bot-models`),saveBotModels:e=>X(`${rr}/bot-models`,{method:`PUT`,body:e}),previewJev:e=>X(`${rr}/jev/preview`,{method:`POST`,body:e}),saveJev:e=>X(`${rr}/jev`,{method:`PUT`,body:e}),setModel:(e,t)=>X(`${rr}/model${ir(t)}`,{method:`POST`,body:e}),auxiliary:e=>X(`${rr}/auxiliary${ir(e)}`),oauth:e=>X(`${rr}/oauth${ir(e)}`),oauthStart:(e,t,n)=>X(`${rr}/oauth/${encodeURIComponent(e)}/start${ir(t)}`,{method:`POST`,body:n===void 0?{}:{networkRevision:n}}),oauthPoll:(e,t,n)=>X(`${rr}/oauth/${encodeURIComponent(e)}/poll/${encodeURIComponent(t)}${ir(n)}`),oauthCancel:(e,t)=>X(`${rr}/oauth/sessions/${encodeURIComponent(e)}${ir(t)}`,{method:`DELETE`}),oauthSubmit:(e,t,n)=>X(`${rr}/oauth/${encodeURIComponent(e)}/token${ir(n)}`,{method:`POST`,body:{token:t}}),oauthDisconnect:(e,t)=>X(`${rr}/oauth/${encodeURIComponent(e)}${ir(t)}`,{method:`DELETE`}),env:e=>X(`${rr}/env${ir(e)}`),setEnv:(e,t,n)=>X(`${rr}/env${ir(n)}`,{method:`PUT`,body:{key:e,value:t,provider_setup:!0}}),deleteEnv:(e,t)=>X(`${rr}/env${ir(t)}`,{method:`DELETE`,body:{key:e}}),validate:(e,t)=>X(`${rr}/validate`,{method:`POST`,body:{key:e,value:t}}),endpoints:e=>X(`${rr}/endpoints${ir(e)}`),saveEndpoint:(e,t)=>X(`${rr}/endpoints${ir(t)}`,{method:`POST`,body:e}),deleteEndpoint:(e,t)=>X(`${rr}/endpoints/${encodeURIComponent(e)}${ir(t)}`,{method:`DELETE`}),pool:(e,t)=>X(`${rr}/pool/${encodeURIComponent(e)}${ir(t)}`),addPool:(e,t,n,r)=>X(`${rr}/pool/${encodeURIComponent(e)}${ir(r)}`,{method:`POST`,body:{apiKey:t,...n?{label:n}:{}}}),removePool:(e,t,n)=>X(`${rr}/pool/${encodeURIComponent(e)}/${t}${ir(n)}`,{method:`DELETE`})},or=e=>`${rr}/media/${e}`,sr={config:e=>X(`${or(e)}/config`),models:(e,t)=>X(`${or(e)}/models${t?`?provider=${encodeURIComponent(t)}`:``}`),setProvider:(e,t)=>X(`${or(e)}/provider`,{method:`PUT`,body:{provider:t}}),setModel:(e,t,n)=>X(`${or(e)}/model`,{method:`PUT`,body:{model:t,provider:n}}),setEnv:(e,t)=>X(`${or(e)}/env`,{method:`PUT`,body:{env:t}})},cr={config:()=>X(`${rr}/web`),setProvider:(e,t)=>X(`${rr}/web/provider`,{method:`PUT`,body:{capability:e,provider:t}}),setEnv:e=>X(`${rr}/web/env`,{method:`PUT`,body:{env:e}}),test:(e,t)=>X(`${rr}/web/test`,{method:`POST`,body:{capability:e,...e===`search`?{query:t}:{url:t}}})},lr=`${rr}/mcp`,ur={list:e=>X(`${lr}${ir(e)}`),create:(e,t,n)=>X(`${lr}${ir(n)}`,{method:`POST`,body:{name:e,...t}}),update:(e,t,n)=>X(`${lr}/${encodeURIComponent(e)}${ir(n)}`,{method:`PUT`,body:t}),remove:(e,t)=>X(`${lr}/${encodeURIComponent(e)}${ir(t)}`,{method:`DELETE`}),setEnabled:(e,t,n)=>X(`${lr}/${encodeURIComponent(e)}/enabled${ir(n)}`,{method:`PATCH`,body:{enabled:t}}),test:(e,t)=>X(`${lr}/${encodeURIComponent(e)}/test${ir(t)}`,{method:`POST`}),oauthStart:(e,t)=>X(`${lr}/${encodeURIComponent(e)}/oauth/start${ir(t)}`,{method:`POST`}),oauthStatus:(e,t)=>X(`${lr}/oauth/${encodeURIComponent(e)}${ir(t)}`),oauthCancel:(e,t)=>X(`${lr}/oauth/${encodeURIComponent(e)}${ir(t)}`,{method:`DELETE`})},dr=`${rr}/channels`,fr=e=>`?bot=${encodeURIComponent(e)}`,pr={list:e=>X(`${dr}${fr(e)}`),save:(e,t,n)=>X(`${dr}/${t}${fr(e)}`,{method:`PUT`,body:n}),setEnabled:(e,t,n)=>X(`${dr}/${t}/enabled${fr(e)}`,{method:`POST`,body:{enabled:n}}),remove:(e,t)=>X(`${dr}/${t}${fr(e)}`,{method:`DELETE`}),test:(e,t)=>X(`${dr}/${t}/test${fr(e)}`,{method:`POST`}),approve:(e,t,n)=>X(`${dr}/${t}/pairing${fr(e)}`,{method:`POST`,body:{code:n}}),revoke:(e,t,n)=>X(`${dr}/${t}/pairing/${encodeURIComponent(n)}${fr(e)}`,{method:`DELETE`})};function mr(e){let t=document.createElement(`textarea`),n=document.activeElement instanceof HTMLElement?document.activeElement:null;t.value=e,t.setAttribute(`readonly`,``),t.setAttribute(`aria-hidden`,`true`),t.style.cssText=`position:fixed;left:-9999px;top:0;width:1px;height:1px;opacity:0`,document.body.appendChild(t),t.focus({preventScroll:!0}),t.select(),t.setSelectionRange(0,e.length);let r=!1;try{r=document.execCommand(`copy`)}catch{r=!1}finally{t.remove(),n?.focus({preventScroll:!0})}return r}async function hr(e){try{if(window.isSecureContext&&navigator.clipboard?.writeText)return await navigator.clipboard.writeText(e),!0}catch{}return mr(e)}var gr={class:`provider-login`},_r={class:`scope`},vr={class:`login-success`,role:`status`},yr={key:1,class:`network-summary`},br={class:`failure-heading`,role:`alert`},xr={key:0,role:`status`},Sr=[`disabled`],Cr={key:0,class:`device-code`},wr={key:0,role:`status`},Tr=[`href`],Er={class:`hint`},Dr=[`aria-label`,`disabled`],Or={key:0},kr=[`disabled`],Ar={key:6,class:`error`,role:`alert`},jr=[`disabled`],Mr={key:8,class:`hint`},Nr=[`disabled`],Pr=H(E({__name:`ProviderLoginDialog`,props:{provider:{},bot:{}},emits:[`close`,`success`],setup(e,{emit:t}){let n=e,r=t,a=n.provider,o=n.bot,s=a.flow===`device_code`||[`device_code`,`process`].includes(a.web_flow??``),c=a.web_flow===`paste_token`,l=O(`ready`),f=O(),p=O(``),g=O(``),_=O(!1),v=O(``),y=O(),b=O({mode:`inherit`}),x=O(!1),C=U(()=>!!y.value&&JSON.stringify(b.value)!==JSON.stringify(y.value.connections[a.id]??{mode:`inherit`})),E=U(()=>!!y.value&&!x.value&&(b.value.mode!==`proxy`||!!b.value.proxyId)),A=U(()=>y.value?ft(y.value,b.value):`正在读取网络…`);async function j(){try{let e=await dt.get(o);P&&(y.value=e,b.value={...e.connections[a.id]??{mode:`inherit`}},p.value=``)}catch(e){P&&(p.value=e instanceof Error?e.message:`无法读取网络配置,请重试。`)}}async function M(){C.value&&(y.value=await dt.save(y.value.revision,b.value,a.id,o))}async function N(){if(!(f.value&&!window.confirm(`更改网络将结束本次授权,需要重新获取验证码。继续?`))){I++,clearTimeout(L);try{await H(f.value),f.value=void 0,l.value=`ready`,p.value=``,await j()}catch(e){l.value=`failed`,p.value=e instanceof Error?e.message:`无法取消本次授权,请重试。`}}}let P=!0,I=0,L,R=U(()=>{try{let e=new URL(f.value?.verification_url??``);return[`https:`,`http:`].includes(e.protocol)&&!e.username&&!e.password?e.href:``}catch{return``}}),B=U(()=>l.value===`starting`?`正在准备登录…`:l.value===`approved`?`登录成功`:R.value?`等待你在浏览器中完成授权…`:`正在准备授权链接…`);async function H(e){e&&await ar.oauthCancel(e.session_id,o)}async function G(){if(l.value===`starting`||_.value||!E.value)return;let e=++I;clearTimeout(L),p.value=``,v.value=``,l.value=`starting`;try{if(await H(f.value),f.value=void 0,await M(),!P||e!==I)return;let t=await ar.oauthStart(a.id,o,y.value.revision);if(!P||e!==I){await H(t);return}f.value=t,l.value=`pending`,K(e)}catch(t){if(!P||e!==I)return;p.value=t instanceof Error?t.message:`无法开始登录,请重试。`,l.value=`failed`}}function K(e){let t=f.value;!t||!P||(L=setTimeout(async()=>{try{let n=await ar.oauthPoll(a.id,t.session_id,o);if(!P||e!==I)return;if(n.user_code&&(t.user_code=n.user_code),n.verification_url&&(t.verification_url=n.verification_url),n.status===`pending`){K(e);return}if(n.status===`approved`){f.value=void 0,l.value=`approved`,r(`success`);return}p.value=n.error_message||(n.status===`expired`?`授权已过期,请重新登录。`:n.status===`denied`?`账号已拒绝授权,可重新开始登录。`:`登录未完成,请重试。`),l.value=`failed`}catch(t){if(!P||e!==I)return;p.value=t instanceof Error?t.message:`无法获取授权结果,请重试。`,l.value=`failed`}},Math.max(1,t.poll_interval||2)*1e3))}async function ee(){if(!(_.value||!g.value.trim()||!E.value)){_.value=!0,p.value=``;try{if(await M(),await ar.oauthSubmit(a.id,g.value.trim(),o),!P)return;g.value=``,l.value=`approved`,r(`success`)}catch(e){P&&(p.value=e instanceof Error?e.message:`凭据保存失败,请重试。`)}finally{_.value=!1}}}function te(){return!_.value&&(!(g.value||C.value)||window.confirm(`还有未保存的输入,放弃本次更改?`))}function q(){te()&&r(`close`)}async function J(){v.value=await hr(f.value?.user_code??``)?`验证码已复制`:`无法自动复制,请选中验证码手动复制。`}return m(j),i(()=>{P=!1,I++,clearTimeout(L);let e=f.value;f.value=void 0,g.value=``,H(e).catch(()=>{})}),(e,t)=>(u(),k(ut,{title:`登录 ${V(a).name}`,compact:``,wide:``,"before-close":te,onClose:t[5]||=e=>r(`close`)},{default:S(()=>[D(`div`,gr,[D(`p`,_r,h(V(o)?`仅对此 Bot 生效`:`服务器模型连接`),1),l.value===`approved`?(u(),F(T,{key:0},[D(`div`,vr,[W(Y,{name:`check`,size:24}),t[6]||=D(`strong`,null,`登录成功`,-1)]),D(`p`,null,`已完成 `+h(V(a).name)+` 授权。`,1),D(`button`,{class:`primary`,type:`button`,onClick:q},`完成`)],64)):(u(),F(T,{key:1},[l.value===`ready`?(u(),F(T,{key:0},[y.value?(u(),k(pt,{key:0,modelValue:b.value,"onUpdate:modelValue":t[0]||=e=>b.value=e,view:y.value,provider:V(a).id,bot:V(o),compact:``,disabled:_.value,onBusy:t[1]||=e=>x.value=e},null,8,[`modelValue`,`view`,`provider`,`bot`,`disabled`])):(u(),F(`button`,{key:1,type:`button`,onClick:j},`重新读取网络配置`))],64)):(u(),F(`div`,yr,[D(`span`,null,`网络:`+h(A.value),1),l.value===`pending`||l.value===`failed`?(u(),F(`button`,{key:0,type:`button`,onClick:N},`更改`)):z(``,!0)])),l.value===`failed`?(u(),F(T,{key:2},[D(`div`,br,[W(Y,{name:`alert`,size:24}),D(`strong`,null,h(p.value),1)]),y.value?(u(),k(pt,{key:0,modelValue:b.value,"onUpdate:modelValue":t[2]||=e=>b.value=e,view:y.value,provider:V(a).id,bot:V(o),"summary-only":``,onBusy:t[3]||=e=>x.value=e},null,8,[`modelValue`,`view`,`provider`,`bot`])):z(``,!0),t[7]||=D(`p`,{class:`hint`},`不会自动切换为直接连接。`,-1),D(`button`,{type:`button`,class:`primary`,onClick:N},`检查网络设置`)],64)):z(``,!0),V(s)?(u(),F(T,{key:3},[l.value!==`failed`&&l.value!==`ready`?(u(),F(`p`,xr,h(B.value),1)):z(``,!0),l.value===`ready`?(u(),F(`button`,{key:1,type:`button`,class:`primary`,disabled:!E.value,onClick:G},h(C.value?`保存并开始登录`:`开始登录`),9,Sr)):z(``,!0),l.value===`pending`?(u(),F(T,{key:2},[f.value?.user_code?(u(),F(`div`,Cr,[t[8]||=D(`span`,null,`在授权页面输入验证码`,-1),D(`strong`,null,h(f.value.user_code),1),D(`button`,{type:`button`,onClick:J},`复制验证码`),v.value?(u(),F(`small`,wr,h(v.value),1)):z(``,!0)])):z(``,!0),R.value?(u(),F(`a`,{key:1,class:`primary`,href:R.value,target:`_blank`,rel:`noopener noreferrer`},[W(Y,{name:`external`,size:16}),t[9]||=w(`打开授权页面`,-1)],8,Tr)):z(``,!0),D(`p`,Er,h(R.value?`在浏览器完成授权后,回到这里查看结果。`:`登录服务准备好后,授权入口会自动显示。`),1)],64)):z(``,!0)],64)):c?(u(),F(`form`,{key:4,onSubmit:Z(ee,[`prevent`])},[t[13]||=D(`p`,null,`粘贴已有的 API Key 或登录令牌完成连接。`,-1),D(`label`,null,[t[10]||=w(`登录凭据`,-1),d(D(`input`,{"onUpdate:modelValue":t[4]||=e=>g.value=e,"aria-label":`${V(a).name} 凭据`,type:`password`,autocomplete:`new-password`,disabled:_.value,placeholder:`粘贴登录凭据`},null,8,Dr),[[Q,g.value]])]),V(a).cli_command?(u(),F(`details`,Or,[t[11]||=D(`summary`,null,`如何获取登录令牌`,-1),t[12]||=D(`p`,null,`在服务器上按该服务的登录指引运行:`,-1),D(`code`,null,h(V(a).cli_command),1)])):z(``,!0),D(`button`,{type:`submit`,class:`primary`,disabled:_.value||!g.value.trim()||!E.value},h(_.value?`正在保存…`:C.value?`保存网络与凭据`:`保存凭据`),9,kr)],32)):(u(),F(T,{key:5},[t[14]||=D(`p`,null,`此服务需要先在服务器上完成登录:`,-1),D(`code`,null,h(V(a).cli_command),1),t[15]||=D(`p`,{class:`hint`},`完成后关闭弹窗,并刷新连接状态。`,-1)],64)),p.value&&l.value!==`failed`?(u(),F(`p`,Ar,h(p.value),1)):z(``,!0),V(s)&&l.value===`failed`?(u(),F(`button`,{key:7,type:`button`,disabled:!E.value,onClick:G},h(C.value?`保存并重新登录`:`重新登录`),9,jr)):z(``,!0),V(s)?(u(),F(`p`,Mr,`授权网页使用当前设备的浏览器网络。此代理仅作用于服务器发起的连接。`)):z(``,!0),D(`button`,{type:`button`,disabled:_.value,onClick:q},h(l.value===`pending`||l.value===`starting`?`取消登录`:`关闭`),9,Nr)],64))])]),_:1},8,[`title`]))}}),[[`__scopeId`,`data-v-2a052730`]]),Fr=[`light`,`standard`,`complex`,`deep`],Ir={light:`轻量`,standard:`常规`,complex:`复杂`,deep:`深度`},Lr={light:`问候、短答、单步查询,以及目标清晰、范围有限的操作。`,standard:`常规多步任务、一般分析与内容整理。`,complex:`跨模块修改、复杂排查和有多项约束的工作。`,deep:`高难推理、系统性研究与架构设计。`},Rr=[`low`,`medium`,`high`,`xhigh`,`max`],zr=[`none`,`minimal`,...Rr,`ultra`],Br=e=>zr.indexOf(e),Vr={new:`新任务`,continue:`继续未完成任务`,correction:`纠正原任务`,unclear:`上下文不足`};function Hr(e){return e===`gpt-6-luna`?`light`:e===`gpt-6.1-sol`?`complex`:e===`gpt-6-astra`?`deep`:`standard`}function Ur(e){return e.tier??Hr(e.model)}function Wr(e){return{preserveTaskAbility:e.preserveTaskAbility!==!1,maxReasoningEffort:e.maxReasoningEffort??`high`,fallbackReasoningEffort:e.fallbackReasoningEffort??`medium`}}function Gr(e,t,n){if(!e.reasoningKnown)return`default`;if(!e.reasoningEfforts.length)return`none`;let r=e.reasoningEfforts.filter(e=>Br(e)>=0&&Br(e)<=Br(n)).sort((e,t)=>Br(e)-Br(t));if(!r.length)return null;if(t==="default"&&(t=e.defaultReasoningEffort??`medium`),t===`none`&&r.includes(`none`)||r.every(e=>e===`none`))return`none`;let i=Math.min(Math.max(Br(t),Br(`low`)),Br(n)),a=t===`none`?r:r.filter(e=>e!==`none`);return a.length?a.find(e=>Br(e)>=i)??null:null}var Kr=`typesafe`,qr=.55;function Jr(e){return e?.provider===`auto`&&e?.model===`auto`}var Yr=()=>({provider:null,model:null,reasoningEffort:null,fastMode:null,auxiliary:null,fallback:null,autoPool:null}),Xr={none:`关闭`,minimal:`最小`,low:`低`,medium:`中`,high:`高`,xhigh:`极高`,max:`最大`,ultra:`Ultra`},Zr={normal:`普通`,fast:`快速`,auto:`每轮开始加速`,cold:`首次回复加速`};function Qr(e){if(!e)return[];let t=!!e.auto?.enabled,n=e=>e.providerName?.trim()||(e.name.includes(` · `)?e.name.split(` · `)[0].trim():{"openai-codex":`OpenAI Codex`,openai:`OpenAI`,anthropic:`Anthropic`}[e.provider]||e.provider),r=e.models.filter(e=>e.provider!==`auto`).map(r=>({provider:r.provider,id:r.model,name:r.model,providerName:n(r),isDefault:!t&&r.provider===e.defaults.provider&&r.model===e.defaults.model,disabled:!1,hint:r.retained?`此 Bot 已选模型,系统可选清单外`:``}));!t&&!r.some(e=>e.isDefault)&&r.unshift({provider:`inherit`,id:`default`,name:e.defaults.model||`默认模型`,providerName:e.defaults.provider||`系统`,isDefault:!0,disabled:!1,hint:`跟随系统默认`});let i=e.auto?.backend===`jeff`?`Jeff`:`Jev`,a=[...r.filter(e=>e.isDefault),{provider:`auto`,id:`auto`,name:`Auto`,providerName:i,isDefault:t,disabled:!e.auto?.available,hint:e.auto?.unavailableReason||`使用系统 ${i} 候选池`},...r.filter(e=>!e.isDefault)],o=!!e.settings?.provider&&!!e.settings?.model,s=o?`${e.settings.provider}:${e.settings.model}`:t?`auto:auto`:`${e.defaults.provider}:${e.defaults.model}`;return a.map(e=>({...e,isCurrent:`${e.provider}:${e.id}`===s||!o&&e.provider===`inherit`}))}var $r=[`jev`,`jeff`],ei={jev:`Jev(云端 TypeSafe)`,jeff:`Jeff(本机)`};function ti(e){return e===`jeff`?`Jeff`:`Jev`}var ni=`http://127.0.0.1:8765`,ri=`jeff-latest`,ii={class:`auto-route`,"aria-label":`Auto 选模依据`},ai={key:0},oi={class:`auto-route__detail`},si={key:0},ci={key:1},li={key:2},ui=H(E({__name:`AutoRouteNotice`,props:{route:{}},setup(e){let t=e=>e==="default"?`提供方默认`:Xr[e]??e,n={jev:`Jev 自动判断`,jeff:`Jeff 自动判断`,fallback:`回退组合`,single:`仅剩一个候选`};return(r,i)=>(u(),F(`details`,ii,[D(`summary`,null,[w(`Auto · `+h(e.route.model)+` · `+h(t(e.route.reasoningEffort))+h([`none`,`default`].includes(e.route.reasoningEffort)?``:`思考`),1),e.route.reason!==`jev`&&e.route.reason!==`jeff`?(u(),F(`span`,ai,` · 回退`)):z(``,!0)]),D(`div`,oi,[D(`p`,null,h(e.route.explanation),1),D(`dl`,null,[D(`div`,null,[i[0]||=D(`dt`,null,`决策来源`,-1),D(`dd`,null,h(n[e.route.reason]),1)]),e.route.taskTier?(u(),F(`div`,si,[i[1]||=D(`dt`,null,`任务能力`,-1),D(`dd`,null,h(V(Ir)[e.route.taskTier])+h(e.route.requestedTier&&e.route.requestedTier!==e.route.taskTier?`(本轮判断 ${V(Ir)[e.route.requestedTier]},保留任务下限)`:``),1)])):z(``,!0),e.route.continuity?(u(),F(`div`,ci,[i[2]||=D(`dt`,null,`任务关系`,-1),D(`dd`,null,h(V(Vr)[e.route.continuity]),1)])):z(``,!0),D(`div`,null,[i[3]||=D(`dt`,null,`判断置信度`,-1),D(`dd`,null,h(Math.round(e.route.confidence*100))+`%`,1)]),e.route.requestedEffort&&e.route.requestedEffort!==e.route.reasoningEffort?(u(),F(`div`,li,[i[4]||=D(`dt`,null,`思考适配`,-1),D(`dd`,null,h(t(e.route.requestedEffort))+` → `+h(t(e.route.reasoningEffort)),1)])):z(``,!0),D(`div`,null,[i[5]||=D(`dt`,null,`模型服务`,-1),D(`dd`,null,h(e.route.provider),1)])])])]))}}),[[`__scopeId`,`data-v-6a520af2`]]),di=[`aria-busy`],fi={class:`jev-title`},pi={class:`jev-toggle`},mi=[`disabled`],hi={key:0,class:`error`,role:`alert`},gi={key:1,role:`status`},_i=[`disabled`],vi=[`value`],yi={class:`jev-fields`},bi=[`disabled`],xi=[`disabled`],Si={key:3},Ci=[`placeholder`,`disabled`],wi={class:`jev-roles`},Ti={class:`jev-model-name`},Ei={key:0,class:`error`},Di={class:`sr-only`},Oi=[`onUpdate:modelValue`,`aria-label`,`disabled`],ki=[`value`],Ai={key:0},ji=[`open`],Mi=[`disabled`],Ni={class:`jev-model-list`},Pi=[`checked`,`disabled`,`onChange`],Fi={key:0},Ii=[`disabled`,`onChange`],Li={class:`jev-continuity`},Ri=[`disabled`],zi=[`value`],Bi={class:`jev-advanced`},Vi={class:`jev-fields`},Hi=[`disabled`],Ui=[`value`],Wi=[`disabled`],Gi={key:0},Ki=[`disabled`],qi=[`value`],Ji=[`disabled`],Yi=[`value`],Xi=[`value`],Zi=[`onUpdate:modelValue`,`disabled`],Qi={class:`jev-preview`},$i=[`disabled`],ea=[`disabled`],ta={key:0,class:`error`,role:`alert`},na={"aria-live":`polite`},ra=[`disabled`],ia=[`disabled`],aa=H(E({__name:`JevAutoPanel`,props:{models:{},disabled:{type:Boolean}},emits:[`dirty-change`,`busy-change`],setup(e,{expose:t,emit:n}){let r=e,i=n,a=O(),o=O([]),s=O(!1),c=O([]),l=O(``),g=O(``),_=O(`jev`),v=O(ni),y=O(ri),b=O({}),x=O(!0),S=O(`high`),C=O(`medium`),E=O(qr),A=O(!1),j=O(``),M=O(``),N=O(``),P=O(``),I=O(`你好`),L=O(),R=O(!1),B=O(``),H=U(()=>r.disabled||A.value||R.value||!a.value),W=(e,t)=>JSON.stringify([e,t]),G=e=>{let[t,n]=JSON.parse(e);return{provider:t,model:n}},K=e=>G(e).model,ee=e=>{let t=G(e);return o.value.find(e=>e.provider===t.provider&&e.model===t.model)},te=U(()=>c.value.map(e=>({...G(e),tier:b.value[e]?.tier??Hr(K(e)),...b.value[e]?.blurb.trim()?{blurb:b.value[e].blurb.trim()}:{}}))),q=()=>({candidates:te.value,...l.value?{fallback:G(l.value)}:{},minConfidence:E.value,preserveTaskAbility:x.value,maxReasoningEffort:S.value,fallbackReasoningEffort:C.value}),J=()=>JSON.stringify([s.value,_.value,v.value.trim(),y.value.trim(),q()]),ne=U(()=>!!a.value&&(J()!==N.value||!!g.value.trim())),re=U(()=>Number.isFinite(E.value)&&E.value>=0&&E.value<=1&&(!s.value||c.value.length>=2)),ie=U(()=>_.value===`jeff`||!!g.value.trim()||!!a.value?.hasApiKey),ae=U(()=>H.value||!s.value||!re.value||!I.value.trim()||!ie.value);f(ne,e=>i(`dirty-change`,e)),f(()=>A.value||R.value,e=>i(`busy-change`,e)),f([J,I,g],()=>{L.value=void 0,B.value=``});let oe=U(()=>(r.models?.providers??[]).filter(e=>e.authenticated!==!1&&e.models.length)),se=U(()=>oe.value.map(e=>({...e,models:e.models.filter(t=>`${e.name} ${t}`.toLowerCase().includes(P.value.trim().toLowerCase()))})).filter(e=>e.models.length)),Y=U(()=>{let e=l.value?ee(l.value):void 0;return e?.reasoningKnown?Rr.filter(t=>e.reasoningEfforts.includes(t)&&Br(t)<=Br(S.value)):[]}),ce=U(()=>{let e=l.value?ee(l.value):void 0,t=e?Gr(e,C.value,S.value):`default`;return t===null?`当前模型无符合思考上限的档位`:t==="default"?`提供方默认`:Xr[t]??t}),le=U(()=>_.value===`jeff`?`自动(Jeff)`:`自动(Jev)`);function ue(e){a.value=e,e.modelOptions&&(o.value=e.modelOptions),s.value=e.enabled,_.value=e.backend??`jev`,v.value=e.jeffBaseUrl||`http://127.0.0.1:8765`,y.value=e.jeffModel||`jeff-latest`,c.value=e.candidates.map(e=>W(e.provider,e.model)),b.value=Object.fromEntries(e.candidates.map(e=>[W(e.provider,e.model),{tier:Ur(e),blurb:e.blurb??``}])),l.value=e.fallback?W(e.fallback.provider,e.fallback.model):c.value[0]??``;let t=Wr(e);x.value=t.preserveTaskAbility,S.value=t.maxReasoningEffort,C.value=t.fallbackReasoningEffort,E.value=e.minConfidence??.55,g.value=``,N.value=J()}function de(e){b.value[e]||(b.value[e]={tier:Hr(K(e)),blurb:``}),c.value=c.value.includes(e)?c.value.filter(t=>t!==e):[...c.value,e],c.value.includes(l.value)||(l.value=c.value[0]??``)}async function fe(){if(!a.value||A.value||R.value)return!1;if(!re.value)return j.value=`请选择至少两个候选模型,并将置信度设为 0 到 1。`,!1;A.value=!0,j.value=``,M.value=``;try{return ue(await ar.saveJev({revision:a.value.revision,enabled:s.value,backend:_.value,jeffBaseUrl:v.value.trim()||`http://127.0.0.1:8765`,jeffModel:y.value.trim()||`jeff-latest`,...q(),...g.value.trim()?{apiKey:g.value.trim()}:{}})),M.value=`自动选模已保存,新的 Bot 回合使用此配置。`,!0}catch(e){return j.value=e instanceof Error?e.message:`保存失败`,!1}finally{A.value=!1}}async function pe(){if(!(A.value||R.value)){A.value=!0,j.value=``,M.value=``;try{ue(await ar.jev())}catch(e){j.value=e instanceof Error?e.message:`无法读取自动选模设置`}finally{A.value=!1}}}async function me(){if(!ae.value){R.value=!0,B.value=``,L.value=void 0;try{L.value=await ar.previewJev({pool:q(),enabled:s.value,userText:I.value.trim(),backend:_.value,jeffBaseUrl:v.value.trim()||`http://127.0.0.1:8765`,jeffModel:y.value.trim()||`jeff-latest`,...g.value.trim()?{apiKey:g.value.trim()}:{}})}catch(e){B.value=e instanceof Error?e.message:`预览失败`}finally{R.value=!1}}}return m(pe),t({reset:pe,save:fe}),(e,t)=>(u(),F(`section`,{class:`jev-auto`,"aria-label":`自动选模`,"aria-busy":A.value||R.value},[D(`div`,fi,[t[13]||=D(`h4`,null,`自动选模`,-1),D(`label`,pi,[d(D(`input`,{"onUpdate:modelValue":t[0]||=e=>s.value=e,type:`checkbox`,disabled:H.value},null,8,mi),[[Je,s.value]]),t[12]||=w(` 启用自动选模`,-1)])]),t[31]||=D(`p`,null,`由决策模型结合任务和上下文,选择能胜任的最轻模型与思考强度。关闭后 Bot 不可选择 Auto。`,-1),j.value?(u(),F(`p`,hi,h(j.value),1)):z(``,!0),M.value?(u(),F(`p`,gi,h(M.value),1)):z(``,!0),D(`label`,null,[t[14]||=w(`决策服务`,-1),d(D(`select`,{"onUpdate:modelValue":t[1]||=e=>_.value=e,"aria-label":`决策服务`,disabled:H.value},[(u(!0),F(T,null,p(V($r),e=>(u(),F(`option`,{key:e,value:e},h(V(ei)[e]),9,vi))),128))],8,_i),[[Ne,_.value]])]),_.value===`jeff`?(u(),F(T,{key:2},[D(`div`,yi,[D(`label`,null,[t[15]||=w(`Jeff 地址`,-1),d(D(`input`,{"onUpdate:modelValue":t[2]||=e=>v.value=e,type:`url`,placeholder:`http://127.0.0.1:8765`,disabled:H.value},null,8,bi),[[Q,v.value]])]),D(`label`,null,[t[16]||=w(`Jeff 模型`,-1),d(D(`input`,{"onUpdate:modelValue":t[3]||=e=>y.value=e,type:`text`,placeholder:`jeff-latest`,disabled:H.value},null,8,xi),[[Q,y.value]])])]),t[17]||=D(`p`,null,[w(`本机 Jeff 默认无密钥。地址仅允许 127.0.0.1 / localhost。可用环境变量 `),D(`code`,null,`YAOVI_DECISION_BACKEND=jeff`),w(`、`),D(`code`,null,`JEFF_BASE_URL`),w(` 覆盖。`)],-1)],64)):(u(),F(`label`,Si,[t[18]||=w(`TypeSafe API 密钥`,-1),d(D(`input`,{"onUpdate:modelValue":t[4]||=e=>g.value=e,type:`password`,autocomplete:`new-password`,placeholder:a.value?.hasApiKey?`已保存,留空则不修改`:`sk-…`,disabled:H.value},null,8,Ci),[[Q,g.value]])])),t[32]||=D(`div`,{class:`jev-section-title`},[D(`h5`,null,`模型分工`),D(`small`,null,`建议分工,可按实际表现调整`)],-1),D(`div`,wi,[(u(!0),F(T,null,p(c.value,e=>(u(),F(`div`,{key:e,class:`jev-role`},[D(`div`,Ti,[D(`strong`,null,h(K(e)),1),D(`small`,null,h(V(Lr)[b.value[e].tier]),1),o.value.length&&!ee(e)?(u(),F(`small`,Ei,`当前不可用`)):z(``,!0)]),D(`label`,null,[D(`span`,Di,h(K(e))+` 的任务分工`,1),d(D(`select`,{"onUpdate:modelValue":t=>b.value[e].tier=t,"aria-label":`${K(e)} 的任务分工`,disabled:H.value},[(u(!0),F(T,null,p(V(Fr),e=>(u(),F(`option`,{key:e,value:e},h(V(Ir)[e])+`任务`,9,ki))),128))],8,Oi),[[Ne,b.value[e].tier]])])]))),128)),c.value.length?z(``,!0):(u(),F(`p`,Ai,`选择至少两个候选模型后配置分工。`))]),D(`details`,{class:`jev-picker`,open:!c.value.length},[D(`summary`,null,`选择候选模型 · 已选 `+h(c.value.length)+` 个`,1),D(`label`,null,[t[19]||=w(`筛选候选模型`,-1),d(D(`input`,{"onUpdate:modelValue":t[5]||=e=>P.value=e,type:`search`,placeholder:`搜索模型或供应商`,disabled:H.value},null,8,Mi),[[Q,P.value]])]),D(`div`,Ni,[(u(!0),F(T,null,p(se.value,e=>(u(),F(`div`,{key:e.slug,class:`jev-group`},[D(`strong`,null,h(e.name),1),(u(!0),F(T,null,p(e.models,t=>(u(),F(`label`,{key:e.slug+t},[D(`input`,{type:`checkbox`,checked:c.value.includes(W(e.slug,t)),disabled:H.value||c.value.length>=32&&!c.value.includes(W(e.slug,t)),onChange:n=>de(W(e.slug,t))},null,40,Pi),w(h(t),1)]))),128))]))),128)),se.value.length?z(``,!0):(u(),F(`p`,Fi,`没有匹配的已连接模型。`)),(u(!0),F(T,null,p(c.value.filter(e=>!oe.value.some(t=>t.slug===G(e).provider&&t.models.includes(K(e)))),e=>(u(),F(`label`,{key:e,class:`jev-toggle`},[D(`input`,{type:`checkbox`,checked:``,disabled:H.value,onChange:t=>de(e)},null,40,Ii),w(h(K(e))+`(目录外,可移除)`,1)]))),128))])],8,ji),D(`label`,Li,[d(D(`input`,{"onUpdate:modelValue":t[6]||=e=>x.value=e,type:`checkbox`,disabled:H.value},null,8,Ri),[[Je,x.value]]),t[20]||=D(`span`,null,[w(`保留未完成任务所需能力`),D(`small`,null,`继续复杂任务时保留能力与思考下限;新的简单任务允许降级。`)],-1)]),D(`label`,null,[t[21]||=w(`思考强度`,-1),D(`input`,{value:le.value,readonly:``,"aria-label":`Auto 思考强度`},null,8,zi)]),D(`details`,Bi,[t[27]||=D(`summary`,null,`高级设置与回退`,-1),D(`div`,Vi,[D(`label`,null,[t[22]||=w(`最高允许思考等级`,-1),d(D(`select`,{"onUpdate:modelValue":t[7]||=e=>S.value=e,disabled:H.value},[(u(!0),F(T,null,p(V(Rr),e=>(u(),F(`option`,{key:e,value:e},h(V(Xr)[e]),9,Ui))),128))],8,Hi),[[Ne,S.value]])]),D(`label`,null,[t[23]||=w(`最低置信度`,-1),d(D(`input`,{"onUpdate:modelValue":t[8]||=e=>E.value=e,type:`number`,min:`0`,max:`1`,step:`0.05`,disabled:H.value},null,8,Wi),[[Q,E.value,void 0,{number:!0}]])]),c.value.length?(u(),F(`label`,Gi,[t[24]||=w(`回退模型`,-1),d(D(`select`,{"onUpdate:modelValue":t[9]||=e=>l.value=e,disabled:H.value},[(u(!0),F(T,null,p(c.value,e=>(u(),F(`option`,{key:e,value:e},h(K(e)),9,qi))),128))],8,Ki),[[Ne,l.value]])])):z(``,!0),D(`label`,null,[t[26]||=w(`回退思考强度`,-1),d(D(`select`,{"onUpdate:modelValue":t[10]||=e=>C.value=e,disabled:H.value},[t[25]||=D(`option`,{value:`default`},`模型默认`,-1),C.value!=="default"&&!Y.value.includes(C.value)?(u(),F(`option`,{key:0,value:C.value},h(V(Xr)[C.value])+`(自动适配)`,9,Yi)):z(``,!0),(u(!0),F(T,null,p(Y.value,e=>(u(),F(`option`,{key:e,value:e},h(V(Xr)[e]),9,Xi))),128))],8,Ji),[[Ne,C.value]]),D(`small`,null,`实际档位:`+h(ce.value),1)])]),t[28]||=D(`p`,null,`回退不影响下一轮偏好。继续原任务时仍保留必要能力;思考档位未知时使用提供方默认。`,-1),(u(!0),F(T,null,p(c.value,e=>(u(),F(`label`,{key:e,class:`jev-hint`},[w(h(K(e))+` · 补充能力说明`,1),d(D(`input`,{"onUpdate:modelValue":t=>b.value[e].blurb=t,maxlength:`280`,placeholder:`可选,例如擅长代码排查或长文分析`,disabled:H.value},null,8,Zi),[[Q,b.value[e].blurb]])]))),128))]),D(`details`,Qi,[t[30]||=D(`summary`,null,`选模预览`,-1),D(`p`,null,`使用当前草稿调用 `+h(_.value===`jeff`?`Jeff`:`Jev`)+`,仅判断这个新任务,不执行任务,也不保存设置。`,1),D(`label`,null,[t[29]||=w(`任务内容`,-1),d(D(`textarea`,{"onUpdate:modelValue":t[11]||=e=>I.value=e,maxlength:`2000`,rows:`2`,disabled:H.value},null,8,$i),[[Q,I.value]])]),D(`button`,{type:`button`,disabled:ae.value,onClick:me},h(R.value?_.value===`jeff`?`Jeff 正在判断…`:`Jev 正在判断…`:`预览模型与思考强度`),9,ea),B.value?(u(),F(`p`,ta,h(B.value),1)):z(``,!0),D(`div`,na,[L.value?(u(),k(ui,{key:0,route:L.value},null,8,[`route`])):z(``,!0)])]),D(`button`,{type:`button`,disabled:H.value||!ne.value||!re.value,onClick:fe},h(A.value?`正在处理…`:`保存自动选模`),9,ra),j.value?(u(),F(`button`,{key:4,type:`button`,disabled:A.value||R.value,onClick:pe},`重新读取设置`,8,ia)):z(``,!0)],8,di))}}),[[`__scopeId`,`data-v-be01e084`]]),oa={class:`jev-network`,"aria-label":`Jev 独立网络`},sa={key:0,class:`error`,role:`alert`},ca={key:1,role:`status`},la={class:`actions`},ua=[`disabled`],da=[`disabled`],fa=[`disabled`],pa=H(E({__name:`JevNetworkPanel`,props:{disabled:{type:Boolean}},emits:[`dirty-change`,`busy-change`,`manage-network`],setup(e,{expose:t,emit:n}){let r=n,i=O(),a=O({mode:`inherit`}),o=O(!1),s=O(!1),c=O(``),l=O(``),d=U(()=>!!i.value&&JSON.stringify(a.value)!==JSON.stringify(i.value.connections.typesafe??{mode:`inherit`}));f(d,e=>r(`dirty-change`,e)),f(()=>o.value||s.value,e=>r(`busy-change`,e));async function p(){c.value=``,l.value=``;try{i.value=await dt.get(),a.value={...i.value.connections.typesafe??{mode:`inherit`}}}catch(e){c.value=e instanceof Error?e.message:`无法读取 Jev 网络设置`}}async function g(){if(!i.value||o.value||s.value)return!1;o.value=!0,c.value=``,l.value=``;try{return i.value=await dt.save(i.value.revision,a.value,Kr),l.value=`Jev 独立网络已保存,从下一次选模请求生效。`,!0}catch(e){return c.value=e instanceof Error?e.message:`保存失败,草稿已保留。`,!1}finally{o.value=!1}}return m(p),t({reset:p,save:g}),(t,n)=>(u(),F(`section`,oa,[n[3]||=D(`h4`,null,`Jev 独立网络`,-1),n[4]||=D(`p`,null,`仅用于云端 TypeSafe Jev 选模请求。选择本机 Jeff 时走回环,不经此代理。各模型供应商使用各自的连接网络。`,-1),c.value?(u(),F(`p`,sa,h(c.value),1)):z(``,!0),l.value?(u(),F(`p`,ca,h(l.value),1)):z(``,!0),i.value?(u(),k(pt,{key:2,modelValue:a.value,"onUpdate:modelValue":n[0]||=e=>a.value=e,view:i.value,provider:V(Kr),disabled:e.disabled||o.value,compact:``,onBusy:n[1]||=e=>s.value=e},null,8,[`modelValue`,`view`,`provider`,`disabled`])):z(``,!0),D(`div`,la,[D(`button`,{type:`button`,disabled:e.disabled||o.value||s.value||!d.value||a.value.mode===`proxy`&&!a.value.proxyId,onClick:g},h(o.value?`正在保存…`:`保存 Jev 网络`),9,ua),D(`button`,{type:`button`,disabled:e.disabled||o.value||s.value,onClick:n[2]||=e=>r(`manage-network`)},`管理代理`,8,da),c.value?(u(),F(`button`,{key:0,type:`button`,disabled:e.disabled||o.value||s.value,onClick:p},`重新读取`,8,fa)):z(``,!0)])]))}}),[[`__scopeId`,`data-v-28b34336`]]),ma={class:`bot-model-visibility`,"aria-label":`Bot 可选模型`},ha={key:0,class:`error`,role:`alert`},ga={key:1,role:`status`},_a={class:`toggle`},va=[`disabled`],ya={class:`filters`},ba=[`disabled`],xa=[`disabled`],Sa=[`value`],Ca={class:`actions`},wa=[`disabled`],Ta=[`disabled`],Ea={role:`status`},Da={class:`model-list`},Oa=[`checked`,`disabled`,`onChange`],ka={key:0},Aa={key:0},ja={key:3},Ma={class:`actions`},Na=[`disabled`],Pa=[`disabled`],Fa=H(E({__name:`BotModelVisibilityPanel`,props:{models:{},disabled:{type:Boolean}},emits:[`dirty-change`,`busy-change`],setup(e,{expose:t,emit:n}){let r=e,i=n,a=O(),o=O(!1),s=O([]),c=O(``),l=O(``),g=O(!1),_=O(``),v=O(``),y=O(``),b=(e,t)=>JSON.stringify([e,t]),x=U(()=>(r.models?.providers??[]).filter(e=>e.authenticated!==!1&&e.models.length)),S=U(()=>x.value.filter(e=>!l.value||e.slug===l.value).map(e=>({...e,models:e.models.filter(t=>`${e.name} ${t}`.toLowerCase().includes(c.value.trim().toLowerCase()))})).filter(e=>e.models.length)),C=()=>JSON.stringify(o.value?[...s.value].sort():null),E=U(()=>!!a.value&&C()!==y.value);f(E,e=>i(`dirty-change`,e)),f(g,e=>i(`busy-change`,e));function k(e){a.value=e,o.value=e.models!==null,s.value=e.models?.map(e=>b(e.provider,e.model))??[],y.value=C()}function A(e){s.value=s.value.includes(e)?s.value.filter(t=>t!==e):[...s.value,e]}function j(e){let t=S.value.flatMap(e=>e.models.map(t=>b(e.slug,t)));s.value=e?[...new Set([...s.value,...t])]:s.value.filter(e=>!t.includes(e))}async function M(){_.value=``,v.value=``;try{k(await ar.botModels())}catch(e){_.value=e instanceof Error?e.message:`无法读取 Bot 可选模型`}}async function N(){if(!a.value||g.value)return!1;g.value=!0,_.value=``,v.value=``;try{return k(await ar.saveBotModels({revision:a.value.revision,models:o.value?s.value.map(e=>{let[t,n]=JSON.parse(e);return{provider:t,model:n}}):null})),v.value=`Bot 可选模型已保存,重新打开模型选择即可读取。`,!0}catch(e){return _.value=e instanceof Error?e.message:`保存失败,草稿已保留。`,!1}finally{g.value=!1}}return m(M),t({reset:M,save:N}),(t,n)=>(u(),F(`section`,ma,[n[9]||=D(`h4`,null,`Bot 可选模型`,-1),n[10]||=D(`p`,null,`统一精简 Bot 的手动对话模型列表。已有选择会保留;Auto 使用上方自动选模的候选池。`,-1),_.value?(u(),F(`p`,ha,h(_.value),1)):z(``,!0),v.value?(u(),F(`p`,ga,h(v.value),1)):z(``,!0),D(`label`,_a,[d(D(`input`,{"onUpdate:modelValue":n[0]||=e=>o.value=e,type:`checkbox`,disabled:e.disabled||g.value||!a.value},null,8,va),[[Je,o.value]]),n[5]||=w(` 只显示勾选的模型`,-1)]),o.value?(u(),F(T,{key:2},[D(`div`,ya,[D(`label`,null,[n[6]||=w(`搜索模型`,-1),d(D(`input`,{"onUpdate:modelValue":n[1]||=e=>c.value=e,type:`search`,placeholder:`搜索模型或供应商`,disabled:e.disabled||g.value},null,8,ba),[[Q,c.value]])]),D(`label`,null,[n[8]||=w(`供应商`,-1),d(D(`select`,{"onUpdate:modelValue":n[2]||=e=>l.value=e,disabled:e.disabled||g.value},[n[7]||=D(`option`,{value:``},`全部已连接供应商`,-1),(u(!0),F(T,null,p(x.value,e=>(u(),F(`option`,{key:e.slug,value:e.slug},h(e.name),9,Sa))),128))],8,xa),[[Ne,l.value]])])]),D(`div`,Ca,[D(`button`,{type:`button`,disabled:e.disabled||g.value,onClick:n[3]||=e=>j(!0)},`全选搜索结果`,8,wa),D(`button`,{type:`button`,disabled:e.disabled||g.value,onClick:n[4]||=e=>j(!1)},`取消搜索结果`,8,Ta),D(`small`,Ea,`已勾选 `+h(s.value.length)+` 个模型`,1)]),D(`div`,Da,[(u(!0),F(T,null,p(S.value,t=>(u(),F(`div`,{key:t.slug,class:`model-group`},[D(`strong`,null,h(t.name),1),(u(!0),F(T,null,p(t.models,n=>(u(),F(`label`,{key:n,class:`toggle`},[D(`input`,{type:`checkbox`,checked:s.value.includes(b(t.slug,n)),disabled:e.disabled||g.value,onChange:e=>A(b(t.slug,n))},null,40,Oa),w(h(n),1)]))),128))]))),128)),S.value.length?z(``,!0):(u(),F(`p`,ka,`没有匹配的模型,请调整搜索或供应商筛选。`))]),s.value.length?z(``,!0):(u(),F(`small`,Aa,`未勾选时只显示跟随系统默认、Auto 和此 Bot 已有选择。`))],64)):(u(),F(`p`,ja,`当前显示所有已连接模型。`)),D(`div`,Ma,[D(`button`,{type:`button`,disabled:e.disabled||g.value||!E.value||!e.models,onClick:N},h(g.value?`正在保存…`:`保存 Bot 可选模型`),9,Na),_.value?(u(),F(`button`,{key:0,type:`button`,disabled:e.disabled||g.value,onClick:M},`重新读取`,8,Pa)):z(``,!0)])]))}}),[[`__scopeId`,`data-v-7025970d`]]),Ia=[`aria-busy`],La={key:0,class:`note`},Ra={key:1,class:`error`,role:`alert`},za={key:2,role:`status`},Ba=[`id`],Va={class:`setting-row`},Ha=[`required`,`disabled`],Ua=[`value`],Wa=[`value`],Ga={class:`setting-row`},Ka=[`required`,`disabled`],qa={id:`hermes-main-models`},Ja=[`value`],Ya={class:`defaults-status`},Xa=[`disabled`],Za=[`disabled`],Qa={class:`fallback-section`},$a=[`disabled`],eo=[`disabled`],to={key:0,class:`block`},no={class:`providers`},ro={class:`head`},io={class:`badge ok`},ao={class:`hint`},oo=[`onClick`],so={key:1,class:`block`},co={class:`providers`},lo={class:`head`},uo=[`onClick`],fo={key:0},po=[`disabled`,`onClick`],mo={key:1},ho=[`disabled`,`onClick`],go={class:`block`},_o={class:`connection-heading`},vo=[`disabled`],yo={class:`providers`},bo={class:`head`},xo=[`onClick`],So={key:0},Co=[`disabled`,`onClick`],wo={key:1},To=[`disabled`,`onClick`],Eo=[`onSubmit`],Do=[`onUpdate:modelValue`,`placeholder`,`aria-label`],Oo=[`disabled`],ko=[`disabled`,`onClick`],Ao=[`onClick`],jo={key:2,class:`pool`},Mo={key:0},No=[`disabled`,`onClick`],Po=[`disabled`],Fo={class:`row`},Io=[`disabled`],Lo={key:2,class:`block`},Ro={class:`providers`},zo={class:`head`},Bo={class:`hint`},Vo=[`onSubmit`],Ho=[`onUpdate:modelValue`,`placeholder`,`aria-label`],Uo=[`disabled`],Wo=[`disabled`,`onClick`],Go={key:3,class:`hint`},Ko={class:`endpoint-section`},qo=[`disabled`],Jo=H(E({__name:`HermesProvidersPanel`,props:{bot:{},section:{default:`all`},embedded:{type:Boolean,default:!1},formId:{}},emits:[`changed`,`dirty-change`,`can-save-change`,`busy-change`,`manage-network`],setup(e,{expose:t,emit:n}){let r=O(),i=O(),a=O(!1),s=O();async function c(){try{r.value=await dt.get(y.bot)}catch{r.value=void 0}}function g(e){return r.value?(y.bot?`独立凭据网络:`:`网络:`)+ft(r.value,r.value.connections[e]??{mode:`inherit`}):`设置连接网络`}function _(e,t){i.value={id:e,name:t}}function v(){a.value=!1,i.value=void 0,c()}m(c);let y=e,b=n,x=O(),S=O(),C=O(),E=O(!1),A=O(!1),j=O(!1),M=O(!1),N=O(!1),P=O(!1),I=U(()=>E.value||A.value||j.value),L=U(()=>M.value||N.value||P.value),R=O([]),B=O([]),V=O({}),H=O(),G=O(``),K=O(``),ee=O(``),te=O(``),q=O(!1),J=O(``),ne=O(``),re=O(),ie,ae=O({}),oe=O(``),se=O([]),ce=O(``),le=O(``),ue=O(`fill_first`),de=O({name:``,base_url:``,model:``,api_key:``,api_mode:``}),fe=O([]),pe=O({}),me=O(!1),he=O(!1),ge=O(y.section===`all`),_e=O(``),ve=O({provider:``,model:``}),ye=O(``),be=O(),xe=U(()=>{let e=te.value.trim().toLowerCase();return R.value.filter(t=>(ge.value||!!e||Te(t))&&(!e||t.id.includes(e)||t.label.toLowerCase().includes(e)||t.aliases.some(t=>t.includes(e))))}),Se=e=>B.value.find(t=>t.id===e),Ce=U(()=>B.value.filter(e=>!R.value.some(t=>t.id===e.id))),we=e=>e.envVars[0],Te=e=>!!Se(e.id)?.status.logged_in||e.envVars.some(e=>V.value[e]?.is_set),Ee=U(()=>H.value?.providers.find(e=>e.slug===G.value)?.models??[]),De=U(()=>H.value?.providers.filter(e=>e.authenticated===!0)??[]),Oe=U(()=>De.value.some(e=>e.slug===G.value)),ke=U(()=>H.value?.providers.filter(e=>(e.authenticated===!0||e.is_current)&&!R.value.some(t=>t.id===e.slug))??[]),Ae=U(()=>he.value&&(G.value!==ve.value.provider||K.value!==ve.value.model)),je=U(()=>he.value&&ee.value!==ye.value),Me=U(()=>Object.values(ae.value).some(Boolean)||Object.values(de.value).some(Boolean)||!!ce.value||!!le.value||Object.values(pe.value).some(e=>e.trim())),Pe=U(()=>a.value||I.value||(y.section===`defaults`?Ae.value||je.value:y.section===`connections`?Me.value:Ae.value||je.value||Me.value));f(Pe,e=>{e&&(ne.value=``),b(`dirty-change`,e)}),f(()=>he.value&&!q.value&&!L.value&&(!Ae.value||Oe.value&&!!K.value.trim())&&(Ae.value||je.value||I.value),e=>b(`can-save-change`,e),{immediate:!0}),f(()=>me.value||L.value,e=>b(`busy-change`,e),{immediate:!0});async function Fe(){await Ie(async()=>{H.value=await ar.models(!0),_e.value=``},`模型列表已刷新`,!1)}async function Ie(e,t,n=!0){if(!(q.value||L.value)){q.value=!0,me.value=n,J.value=``,ne.value=``;try{let n=await e();t&&n!==!1&&(ne.value=t)}catch(e){J.value=e instanceof Error?e.message:`操作失败`}finally{q.value=!1,me.value=!1}}}async function Le(){await Ie(async()=>{let[e,t,n,r]=await Promise.all([y.section===`defaults`?Promise.resolve({providers:[]}):ar.providers(y.bot),y.section===`defaults`?Promise.resolve({providers:[]}):ar.oauth(y.bot),y.section===`defaults`?Promise.resolve({}):ar.env(y.bot),ar.config(y.bot)]);R.value=e.providers,B.value=t.providers,V.value=n,G.value=r.config.model?.provider??``,K.value=r.config.model?.default??``;let i=r.config.fallback_model;ee.value=(Array.isArray(i)?i:i?[i]:[]).map(e=>`${e.provider} ${e.model}`).join(`
|
|
9
9
|
`),ve.value={provider:G.value,model:K.value},ye.value=ee.value,he.value=!0,y.bot||(H.value=await ar.models(!1).catch(()=>{_e.value=`暂时无法读取模型列表,可重试刷新。`})),await Re()},void 0,!1)}async function Re(){if(y.bot||y.section!==`all`&&y.section!==`connections`){fe.value=[];return}try{let[e,t]=await Promise.all([sr.config(`image_gen`),sr.config(`video_gen`)]),n=new Set(R.value.flatMap(e=>e.envVars)),r=new Map;for(let[i,a]of[[`图片`,e],[`视频`,t]])for(let e of a?.providers??[])for(let t of e.env_vars??[]){if(!t.key||n.has(t.key))continue;let a=r.get(t.key)??{key:t.key,prompt:t.prompt||t.key,isSet:!1,uses:[]};a.isSet=a.isSet||!!t.is_set||!!V.value[t.key]?.is_set;let o=`${i} · ${e.name}`;a.uses.includes(o)||a.uses.push(o),r.set(t.key,a)}fe.value=[...r.values()]}catch{fe.value=[]}}t({reset:()=>i.value?s.value?.reset():Promise.all([Le(),x.value?.reset(),S.value?.reset(),C.value?.reset()])}),m(Le);async function ze(e){let t=pe.value[e]?.trim();t&&await Ie(async()=>{await ar.setEnv(e,t,y.bot),pe.value[e]=``,V.value=await ar.env(y.bot),await Re(),b(`changed`)},`媒体密钥已保存`)}async function Be(e){let t=we(e),n=ae.value[e.id]?.trim();!t||!n||await Ie(async()=>{await ar.setEnv(t,n,y.bot),ae.value[e.id]=``,V.value=await ar.env(y.bot),b(`changed`)},`${e.label} 密钥已保存`)}async function Ve(e){await Ie(async()=>{await ar.deleteEnv(e,y.bot),V.value=await ar.env(y.bot),await Re(),b(`changed`)},`密钥已移除`)}function He(e){q.value||re.value||(ie=document.activeElement instanceof HTMLElement?document.activeElement:void 0,re.value=Se(e))}function Ue(){re.value=void 0,o(()=>{ie?.isConnected&&ie.focus({preventScroll:!0})})}async function X(){ne.value=`登录成功`,b(`changed`);try{let[e,t]=await Promise.all([ar.oauth(y.bot),ar.env(y.bot)]);B.value=e.providers,V.value=t}catch{J.value=`登录已完成,连接状态刷新失败,请刷新页面。`}}async function We(e){await Ie(async()=>{await ar.oauthDisconnect(e,y.bot),B.value=(await ar.oauth(y.bot)).providers,b(`changed`)},`已退出登录`)}async function Ge(e){if(oe.value===e){oe.value=``;return}await Ie(async()=>{let t=await ar.pool(e,y.bot);se.value=t.entries,ue.value=t.strategy,oe.value=e},void 0,!1)}async function Ke(){let e=oe.value;!e||!ce.value.trim()||await Ie(async()=>{await ar.addPool(e,ce.value.trim(),le.value.trim(),y.bot),ce.value=``,le.value=``,se.value=(await ar.pool(e,y.bot)).entries,b(`changed`)},`已加入凭据池`)}async function qe(e){let t=oe.value;await Ie(async()=>{await ar.removePool(t,e,y.bot),se.value=(await ar.pool(t,y.bot)).entries,b(`changed`)},`已移除`)}async function Je(){let e=oe.value;await Ie(async()=>{let t=(await ar.config(y.bot)).config.credential_pool_strategies??{};await ar.patchConfig({credential_pool_strategies:{...t,[e]:ue.value}},y.bot)},`轮换策略已保存`)}async function Ye(e=!1){let t=await ar.setModel({scope:`main`,provider:G.value,model:K.value.trim(),...e?{confirm_expensive_model:!0}:{}});return t.confirm_required?!e&&window.confirm(t.confirm_message||`该模型费用较高,确认使用?`)?Ye(!0):!1:(ve.value={provider:G.value,model:K.value},b(`changed`),!0)}function Xe(){return ee.value.split(`
|
|
10
10
|
`).map(e=>e.trim()).filter(Boolean).map((e,t)=>{let n=e.split(/\s+/);if(n.length!==2)throw Error(`回退模型第 `+(t+1)+` 行需要填写供应商和模型,以空格分隔。`);return{provider:n[0],model:n[1]}})}async function Ze(e=Xe()){await ar.patchConfig({fallback_model:e.length?e:null},y.bot),ye.value=ee.value,b(`changed`)}async function Qe(){!Oe.value||!K.value.trim()||await Ie(()=>Ye(),`默认模型已保存,新一轮对话生效`)}async function $e(){await Ie(()=>Ze(),`故障回退已保存`)}async function et(){!be.value?.reportValidity()||!he.value||Ae.value&&!Oe.value||await Ie(async()=>{let e=Xe(),t=!1;if(Ae.value){if(!await Ye())return!1;t=!0}try{je.value&&await Ze(e)}catch(e){throw t?Error(`默认模型已保存,故障回退尚未保存。`+(e instanceof Error?e.message:`请重试。`)):e}return!(E.value&&await x.value?.save()===!1||A.value&&await S.value?.save()===!1||j.value&&await C.value?.save()===!1)},`设置已保存,新一轮对话生效`)}async function tt(){let e=de.value;!e.name.trim()||!e.base_url.trim()||await Ie(async()=>{await ar.saveEndpoint({name:e.name.trim(),base_url:e.base_url.trim(),model:e.model.trim(),...e.api_key.trim()?{api_key:e.api_key.trim()}:{},api_mode:e.api_mode},y.bot),de.value={name:``,base_url:``,model:``,api_key:``,api_mode:``};let t=await Promise.all([ar.providers(y.bot),ar.oauth(y.bot),ar.env(y.bot)]);R.value=t[0].providers,B.value=t[1].providers,V.value=t[2],y.bot||(H.value=await ar.models()),b(`changed`)},`自定义端点已保存`)}return(t,n)=>(u(),F(`section`,{class:`hermes-providers`,"aria-busy":q.value,"aria-label":`Hermes 供应商`},[e.section!==`defaults`&&!i.value?(u(),F(`p`,La,h(e.bot?`这里的登录和密钥只对此 Bot 生效,并覆盖系统默认连接。`:`连接供服务器中的 Bot 使用;登录与密钥安全保存,凭据不会完整回显。`),1)):z(``,!0),J.value?(u(),F(`p`,Ra,h(J.value),1)):z(``,!0),ne.value?(u(),F(`p`,za,h(ne.value),1)):z(``,!0),re.value?(u(),k(Pr,{key:re.value.id,provider:re.value,bot:e.bot,onClose:n[0]||=e=>{Ue(),c()},onSuccess:X},null,8,[`provider`,`bot`])):z(``,!0),i.value?(u(),k(nr,{key:4,ref_key:`networkEditor`,ref:s,provider:i.value.id,name:i.value.name,bot:e.bot,"can-login":!!Se(i.value.id)&&!Se(i.value.id).status.logged_in,onBack:v,onLogin:n[1]||=e=>He(i.value.id),onChanged:c,onDirtyChange:n[2]||=e=>a.value=e,onBusyChange:n[3]||=e=>me.value=e},null,8,[`provider`,`name`,`bot`,`can-login`])):z(``,!0),i.value?z(``,!0):(u(),F(T,{key:5},[!e.bot&&e.section!==`connections`?(u(),F(`form`,{key:0,id:e.formId,ref_key:`defaultsForm`,ref:be,class:`defaults-form`,onSubmit:Z(et,[`prevent`])},[e.section===`all`||e.section===`defaults`?(u(),F(T,{key:0},[n[33]||=D(`div`,{class:`defaults-heading`},[D(`h4`,null,`默认对话模型`),D(`p`,null,`Bot 未单独指定模型时使用此配置。`)],-1),D(`label`,Va,[n[25]||=D(`span`,null,[D(`strong`,null,`供应商`),D(`small`,null,`只列出模型连接中已授权的供应商。`)],-1),d(D(`select`,{"onUpdate:modelValue":n[4]||=e=>G.value=e,required:Ae.value,"aria-label":`默认模型供应商`,disabled:q.value||!he.value},[n[24]||=D(`option`,{value:``},`请选择`,-1),(u(!0),F(T,null,p(De.value,e=>(u(),F(`option`,{key:e.slug,value:e.slug},h(e.name),9,Ua))),128)),G.value&&!Oe.value?(u(),F(`option`,{key:0,value:G.value},h(H.value?.providers.find(e=>e.slug===G.value)?.name||G.value)+`(未授权)`,9,Wa)):z(``,!0)],8,Ha),[[Ne,G.value]])]),D(`label`,Ga,[n[26]||=D(`span`,null,[D(`strong`,null,`模型`),D(`small`,null,`选择默认的对话模型。`)],-1),d(D(`input`,{"onUpdate:modelValue":n[5]||=e=>K.value=e,required:Ae.value,"aria-label":`默认对话模型`,list:`hermes-main-models`,disabled:q.value||!he.value,placeholder:`选择或输入模型 ID`},null,8,Ka),[[Q,K.value]])]),D(`datalist`,qa,[(u(!0),F(T,null,p(Ee.value,e=>(u(),F(`option`,{key:e,value:e},null,8,Ja))),128))]),D(`div`,Ya,[D(`span`,{class:l({configured:Oe.value})},h(he.value?_e.value||(Oe.value?`服务已授权`:G.value?`该供应商尚未授权,请先到模型连接完成授权。`:`请选择已授权的模型服务`):`正在读取配置…`),3),D(`button`,{type:`button`,class:`refresh-models`,disabled:q.value,onClick:Fe},[W(Y,{name:`refresh`,size:16}),n[27]||=w(`刷新模型列表`,-1)],8,Xa)]),e.embedded?z(``,!0):(u(),F(`button`,{key:0,type:`button`,disabled:q.value||!Oe.value||!K.value.trim(),onClick:Qe},`保存默认模型`,8,Za)),D(`div`,Qa,[n[31]||=D(`h4`,null,`故障回退`,-1),n[32]||=D(`p`,null,`默认模型不可用时,按顺序尝试备用模型。`,-1),D(`details`,null,[D(`summary`,null,[n[28]||=D(`span`,null,`回退模型`,-1),D(`span`,null,h(ee.value.trim()?ee.value.trim().split(`
|
|
11
11
|
`).length+` 个备用模型`:`尚未设置`),1),W(Y,{name:`chevron-left`,size:18})]),D(`label`,null,[n[29]||=w(`备用模型顺序`,-1),d(D(`textarea`,{"onUpdate:modelValue":n[6]||=e=>ee.value=e,rows:`4`,placeholder:`每行:供应商 模型,以空格分隔`,disabled:q.value},null,8,$a),[[Q,ee.value]])]),n[30]||=D(`small`,null,`按从上到下的顺序尝试;留空可关闭回退。`,-1),e.embedded?z(``,!0):(u(),F(`button`,{key:0,type:`button`,disabled:q.value,onClick:$e},`保存回退链`,8,eo))])])],64)):z(``,!0),e.section===`all`||e.section===`auto`?(u(),k(aa,{key:1,ref_key:`jevEditor`,ref:x,models:H.value,disabled:q.value||L.value,onDirtyChange:n[7]||=e=>E.value=e,onBusyChange:n[8]||=e=>M.value=e},null,8,[`models`,`disabled`])):z(``,!0),e.section===`all`||e.section===`auto`?(u(),k(pa,{key:2,ref_key:`jevNetworkEditor`,ref:S,disabled:q.value||L.value,onDirtyChange:n[9]||=e=>A.value=e,onBusyChange:n[10]||=e=>N.value=e,onManageNetwork:n[11]||=e=>b(`manage-network`)},null,8,[`disabled`])):z(``,!0),e.section===`all`||e.section===`visibility`?(u(),k(Fa,{key:3,ref_key:`botModelsEditor`,ref:C,models:H.value,disabled:q.value||L.value,onDirtyChange:n[12]||=e=>j.value=e,onBusyChange:n[13]||=e=>P.value=e},null,8,[`models`,`disabled`])):z(``,!0)],40,Ba)):z(``,!0),e.section===`all`||e.section===`connections`?(u(),F(T,{key:1},[ke.value.length?(u(),F(`div`,to,[n[34]||=D(`h4`,null,`已连接服务`,-1),D(`ul`,no,[(u(!0),F(T,null,p(ke.value,e=>(u(),F(`li`,{key:e.slug},[D(`div`,ro,[D(`strong`,null,h(e.name),1),D(`span`,io,h(e.authenticated===!0?`已授权`:`当前服务`),1)]),D(`p`,ao,h(e.models.length)+` 个可选模型`,1),D(`button`,{type:`button`,class:`link`,onClick:t=>_(e.slug,e.name)},h(g(e.slug)),9,oo)]))),128))])])):z(``,!0),Ce.value.length&&(ge.value||Ce.value.some(e=>e.status.logged_in))?(u(),F(`div`,so,[n[36]||=D(`h4`,null,`其他登录方式`,-1),D(`ul`,co,[(u(!0),F(T,null,p(Ce.value.filter(e=>ge.value||e.status.logged_in),e=>(u(),F(`li`,{key:e.id},[D(`div`,lo,[D(`strong`,null,h(e.name),1),n[35]||=w(),D(`code`,null,h(e.id),1),D(`span`,{class:l([`badge`,e.status.logged_in?`ok`:``])},h(e.status.logged_in?`已登录`:`未登录`),3)]),D(`button`,{type:`button`,class:`link`,onClick:t=>_(e.id,e.name)},h(g(e.id)),9,uo),e.status.logged_in&&e.disconnectable?(u(),F(`p`,fo,[D(`button`,{type:`button`,disabled:q.value,onClick:t=>We(e.id)},`退出登录`,8,po)])):e.status.logged_in?z(``,!0):(u(),F(`p`,mo,[D(`button`,{type:`button`,disabled:q.value,"aria-haspopup":`dialog`,onClick:t=>He(e.id)},`登录 `+h(e.name),9,ho)]))]))),128))])])):z(``,!0),D(`div`,go,[D(`div`,_o,[D(`h4`,null,h(ge.value?`添加模型连接`:`已配置供应商`),1),e.section===`connections`?(u(),F(`button`,{key:0,type:`button`,disabled:q.value,onClick:n[14]||=e=>ge.value=!ge.value},h(ge.value?`查看已配置`:`添加连接`),9,vo)):z(``,!0)]),d(D(`input`,{"onUpdate:modelValue":n[15]||=e=>te.value=e,type:`search`,placeholder:`搜索供应商或别名`,"aria-label":`搜索供应商`},null,512),[[Q,te.value]]),D(`ul`,yo,[(u(!0),F(T,null,p(xe.value,e=>(u(),F(`li`,{key:e.id},[D(`div`,bo,[D(`strong`,null,h(e.label),1),n[37]||=w(),D(`code`,null,h(e.id),1),D(`span`,{class:l([`badge`,Te(e)?`ok`:``])},h(Te(e)?`已配置`:`未配置`),3)]),D(`button`,{type:`button`,class:`link`,onClick:t=>_(e.id,e.label)},h(g(e.id)),9,xo),Se(e.id)?(u(),F(T,{key:0},[Se(e.id).status.logged_in?(u(),F(`p`,So,[w(`已登录 `+h(Se(e.id).status.token_preview?`· …`+Se(e.id).status.token_preview:``)+` `,1),Se(e.id).disconnectable?(u(),F(`button`,{key:0,type:`button`,disabled:q.value,onClick:t=>We(e.id)},`退出登录`,8,Co)):z(``,!0)])):(u(),F(`p`,wo,[D(`button`,{type:`button`,disabled:q.value,"aria-haspopup":`dialog`,onClick:t=>He(e.id)},`登录 `+h(Se(e.id).name),9,To)]))],64)):z(``,!0),we(e)?(u(),F(`form`,{key:1,class:`row`,onSubmit:Z(t=>Be(e),[`prevent`])},[d(D(`input`,{"onUpdate:modelValue":t=>ae.value[e.id]=t,type:`password`,autocomplete:`new-password`,placeholder:V.value[we(e)]?.is_set?`${we(e)} 已设置(${V.value[we(e)]?.redacted_value??`***`})`:we(e),"aria-label":`${e.label} API Key`},null,8,Do),[[Q,ae.value[e.id]]]),D(`button`,{type:`submit`,disabled:q.value||!ae.value[e.id]?.trim()},`保存`,8,Oo),V.value[we(e)]?.is_set?(u(),F(`button`,{key:0,type:`button`,disabled:q.value,onClick:t=>Ve(we(e))},`移除`,8,ko)):z(``,!0)],40,Eo)):z(``,!0),D(`button`,{type:`button`,class:`link`,onClick:t=>Ge(e.id)},h(oe.value===e.id?`收起凭据池`:`凭据池`),9,Ao),oe.value===e.id?(u(),F(`div`,jo,[D(`ol`,null,[(u(!0),F(T,null,p(se.value,e=>(u(),F(`li`,{key:e.id},[w(h(e.label)+` · `+h(e.authType)+` · `+h(e.source)+` `+h(e.tokenPreview)+` `,1),e.lastStatus?(u(),F(`em`,Mo,h(e.lastStatus),1)):z(``,!0),D(`button`,{type:`button`,disabled:q.value,onClick:t=>qe(e.index)},`删除`,8,No)]))),128))]),D(`form`,{class:`row`,onSubmit:Z(Ke,[`prevent`])},[d(D(`input`,{"onUpdate:modelValue":n[16]||=e=>ce.value=e,type:`password`,autocomplete:`new-password`,placeholder:`追加 API Key`},null,512),[[Q,ce.value]]),d(D(`input`,{"onUpdate:modelValue":n[17]||=e=>le.value=e,placeholder:`标签(可选)`},null,512),[[Q,le.value]]),D(`button`,{type:`submit`,disabled:q.value||!ce.value.trim()},`加入`,8,Po)],32),D(`label`,Fo,[n[39]||=w(`轮换策略`,-1),d(D(`select`,{"onUpdate:modelValue":n[18]||=e=>ue.value=e},[...n[38]||=[D(`option`,{value:`fill_first`},`fill_first`,-1),D(`option`,{value:`round_robin`},`round_robin`,-1),D(`option`,{value:`least_used`},`least_used`,-1),D(`option`,{value:`random`},`random`,-1)]],512),[[Ne,ue.value]]),D(`button`,{type:`button`,disabled:q.value,onClick:Je},`保存`,8,Io)])])):z(``,!0)]))),128))])]),fe.value.length?(u(),F(`div`,Lo,[n[41]||=D(`h4`,null,`媒体专用凭据`,-1),n[42]||=D(`p`,{class:`hint`},`这些密钥只供图片或视频使用。保存后,对应页面可以直接选用已授权的供应商。`,-1),D(`ul`,Ro,[(u(!0),F(T,null,p(fe.value,e=>(u(),F(`li`,{key:e.key},[D(`div`,zo,[D(`strong`,null,h(e.prompt),1),n[40]||=w(),D(`code`,null,h(e.key),1),D(`span`,{class:l([`badge`,e.isSet?`ok`:``])},h(e.isSet?`已配置`:`未配置`),3)]),D(`p`,Bo,h(e.uses.join(`、`)),1),D(`form`,{class:`row`,onSubmit:Z(t=>ze(e.key),[`prevent`])},[d(D(`input`,{"onUpdate:modelValue":t=>pe.value[e.key]=t,type:`password`,autocomplete:`new-password`,placeholder:e.isSet?`${e.key} 已设置,留空则不修改`:e.key,"aria-label":e.prompt},null,8,Ho),[[Q,pe.value[e.key]]]),D(`button`,{type:`submit`,disabled:q.value||!pe.value[e.key]?.trim()},`保存`,8,Uo),e.isSet?(u(),F(`button`,{key:0,type:`button`,disabled:q.value,onClick:t=>Ve(e.key)},`移除`,8,Wo)):z(``,!0)],40,Vo)]))),128))])])):z(``,!0),!xe.value.length&&!ke.value.length&&!fe.value.length?(u(),F(`p`,Go,`暂无匹配的连接。可添加供应商或自定义服务。`)):z(``,!0),D(`details`,Ko,[n[50]||=D(`summary`,null,`添加自定义模型服务`,-1),D(`form`,{class:`block`,onSubmit:Z(tt,[`prevent`])},[n[49]||=D(`h4`,null,`自定义 OpenAI 兼容服务`,-1),D(`label`,null,[n[43]||=w(`服务名称`,-1),d(D(`input`,{"onUpdate:modelValue":n[19]||=e=>de.value.name=e,placeholder:`名称`},null,512),[[Q,de.value.name]])]),D(`label`,null,[n[44]||=w(`服务地址`,-1),d(D(`input`,{"onUpdate:modelValue":n[20]||=e=>de.value.base_url=e,type:`url`,placeholder:`https://host/v1`},null,512),[[Q,de.value.base_url]])]),D(`label`,null,[n[45]||=w(`默认模型`,-1),d(D(`input`,{"onUpdate:modelValue":n[21]||=e=>de.value.model=e,placeholder:`默认模型`},null,512),[[Q,de.value.model]])]),D(`label`,null,[n[46]||=w(`API Key(可选)`,-1),d(D(`input`,{"onUpdate:modelValue":n[22]||=e=>de.value.api_key=e,type:`password`,autocomplete:`new-password`,placeholder:`API Key`},null,512),[[Q,de.value.api_key]])]),D(`label`,null,[n[48]||=w(`接口协议`,-1),d(D(`select`,{"onUpdate:modelValue":n[23]||=e=>de.value.api_mode=e},[...n[47]||=[D(`option`,{value:``},`自动识别`,-1),D(`option`,{value:`chat_completions`},`chat_completions`,-1),D(`option`,{value:`codex_responses`},`codex_responses`,-1),D(`option`,{value:`anthropic_messages`},`anthropic_messages`,-1)]],512),[[Ne,de.value.api_mode]])]),D(`button`,{type:`submit`,disabled:q.value||!de.value.name.trim()||!de.value.base_url.trim()},`保存端点`,8,qo)],32)])],64)):z(``,!0)],64))],8,Ia))}}),[[`__scopeId`,`data-v-69d4d48a`]]),Yo={gmail:{hosts:[`gmail.com`]},googledrive:{hosts:[`drive.google.com`]},googlecalendar:{hosts:[`calendar.google.com`]},github:{hosts:[`github.com`,`githubcopilot.com`]},notion:{hosts:[`notion.so`,`notion.com`]},slack:{hosts:[`slack.com`]},linear:{hosts:[`linear.app`]},discord:{hosts:[`discord.com`]},outlook:{hosts:[`outlook.com`,`outlook.office.com`]},trello:{hosts:[`trello.com`]},airtable:{hosts:[`airtable.com`]},twitter:{hosts:[`twitter.com`,`x.com`]}},Xo={gdrive:`googledrive`,x:`twitter`,microsoftoutlook:`outlook`},Zo=[`https://logos.composio.dev`,`https://assets.composio.dev`];function Qo(e){let t=e.toLowerCase().replace(/[\s_-]/g,``),n=Xo[t]??t;return Object.hasOwn(Yo,n)?`/provider-logos/${n}.svg`:void 0}function $o(e){if(!(typeof e!=`string`||e.length>2048)){if(Object.keys(Yo).some(t=>e===Qo(t)))return e;try{let t=new URL(e);return t.username||t.password||!Zo.some(e=>t.origin===e)?void 0:t.href}catch{return}}}function es(e){if(e.transport===`http`&&e.url)try{let t=new URL(e.url).hostname.toLowerCase(),n=Object.entries(Yo).find(([,{hosts:e}])=>e.some(e=>t===e||t.endsWith(`.${e}`)));if(n)return Qo(n[0])}catch{}if(e.transport===`stdio`)for(let t of[e.command??``,...e.args??[]]){let e=t.toLowerCase().replace(/^--package=/,``).replace(/@[^/@]+$/,``);if(e===`@notionhq/notion-mcp-server`)return Qo(`notion`);let n=/^@modelcontextprotocol\/server-([a-z-]+)$/.exec(e)?.[1],r=n&&Qo(n);if(r)return r}return Qo(e.name.replace(/\s*(?:mcp(?:\s*(?:server|服务))?|server|服务)$/i,``).trim())}var ts=[`src`],ns={key:1},rs=H(E({__name:`ProviderLogo`,props:{name:{},logo:{},bundledLogo:{}},setup(e){let t=e,n=O([]),r=U(()=>[t.bundledLogo,t.logo].map($o).find(e=>!!e&&!n.value.includes(e))),i=U(()=>Array.from(t.name.trim())[0]?.toLocaleUpperCase()||`?`);f(()=>[t.logo,t.bundledLogo],()=>{n.value=[]});function a(e){let t=e.target.getAttribute(`src`);t&&!n.value.includes(t)&&n.value.push(t)}return(e,t)=>(u(),F(`span`,{class:l([`provider-logo`,{"provider-logo--fallback":!r.value}]),"aria-hidden":`true`},[r.value?(u(),F(`img`,{key:r.value,src:r.value,alt:``,width:`28`,height:`28`,loading:`lazy`,decoding:`async`,referrerpolicy:`no-referrer`,draggable:!1,onError:a},null,40,ts)):(u(),F(`span`,ns,h(i.value),1))],2))}}),[[`__scopeId`,`data-v-7dad553e`]]),is=[`aria-label`],as={class:`hint`},os={key:0,class:`mcp-error`,role:`alert`},ss={key:1,class:`mcp-notice`,role:`status`},cs={key:2,class:`hint`},ls={class:`card-heading`},us={class:`hint`},ds={class:`card-actions`},fs=[`disabled`,`onClick`],ps={class:`mcp-toolbar`},ms=[`disabled`],hs=[`disabled`],gs={class:`check-row`},_s={class:`card-actions`},vs=[`disabled`],ys=[`disabled`],bs={key:5,class:`hint`},xs={class:`card-heading`},Ss={class:`hint`},Cs={key:0,class:`hint`},ws={class:`card-actions`},Ts=[`disabled`,`onClick`],Es=[`disabled`,`onClick`],Ds=[`disabled`,`onClick`],Os=[`disabled`,`onClick`],ks=[`disabled`,`onClick`],As={key:6,class:`mcp-notice`,role:`status`},js=[`href`],Ms=H(E({__name:`HermesMcpPanel`,props:{bot:{},canManage:{type:Boolean,default:!0}},emits:[`dirty-change`],setup(e,{emit:t}){let n=e,r=t,a=O([]),o=O([]),s=O(!1),c=O(``),f=O(``),g=O(null),v=O(!1),y=O(),b=O(),x=U(()=>n.canManage),S=_({name:``,transport:`stdio`,location:`server`,command:``,args:`[]`,env:`{}`,url:``,headers:`{}`,oauth:!1,include:``}),C,E=e=>a.value.find(t=>t.name===e),k=U(()=>o.value.map(e=>({...e,override:E(e.name)}))),A=U(()=>a.value.filter(e=>!n.bot||e.command||e.url));async function j(e,t){s.value=!0,c.value=``,f.value=``;try{await e(),t&&(f.value=t)}catch(e){c.value=e instanceof Error?e.message:`操作失败`}finally{s.value=!1}}async function M(){await j(async()=>{a.value=(await ur.list(n.bot)).servers,n.bot&&(o.value=(await ur.list()).servers)})}m(M),i(()=>clearTimeout(C));function N(e){return JSON.stringify(Object.fromEntries(e.map(e=>[e,!0])))}function P(e){g.value=e?.name??null,v.value=!0,y.value=void 0,Object.assign(S,{name:e?.name??``,transport:e?.transport===`http`?`http`:`stdio`,location:e?.yaovi_location??`server`,command:e?.command??``,args:JSON.stringify(e?.args??[]),env:N(e?.env_keys??[]),url:e?.url??``,headers:N(e?.header_keys??[]),oauth:e?.auth===`oauth`,include:(e?.include??[]).join(`
|
|
@@ -19,7 +19,7 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho
|
|
|
19
19
|
`),set:e=>i({cidrs:e.split(/[,\n]+/).map(e=>e.trim()).filter(Boolean)})}),o=U({get:()=>n.modelValue.domains.join(`
|
|
20
20
|
`),set:e=>i({domains:e.split(/[,\n]+/).map(e=>e.trim()).filter(Boolean)})}),s=O(``),c=O(443),l=O(`lan-tcp`);return(t,n)=>(u(),F(`fieldset`,{class:`vm-lan`,disabled:e.disabled},[n[18]||=D(`legend`,null,`内网访问`,-1),D(`label`,m_,[D(`input`,{type:`checkbox`,checked:e.modelValue.enabled,onChange:n[0]||=e=>i({enabled:e.target.checked})},null,40,h_),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),[[Q,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),[[Q,o.value]])]),D(`label`,g_,[D(`input`,{type:`checkbox`,checked:e.modelValue.icmpEcho,onChange:n[3]||=e=>i({icmpEcho:e.target.checked})},null,40,__),n[11]||=w(`允许真实 IPv4 ping`,-1)]),n[17]||=D(`p`,null,`ping 使用真实目标回复,首期支持数字 IPv4 地址。旧网络镜像需要重新准备。`,-1),e.environments?.length?(u(),F(`p`,v_,`此名单也供本机托管浏览器使用。以下共享虚拟环境的全部成员使用相同范围:`+h(e.environments.map(e=>`${e.name}(${e.memberCount} 个成员)`).join(`、`)),1)):(u(),F(`p`,y_,`作用于本机托管虚拟机和支持内网能力的托管浏览器;外部节点与 Compose 不自动继承。`)),D(`div`,b_,[D(`label`,null,[n[12]||=w(`测试目标`,-1),d(D(`input`,{"onUpdate:modelValue":n[4]||=e=>s.value=e,placeholder:`已保存范围内的 IPv4 地址或域名`},null,512),[[Q,s.value]])]),D(`label`,null,[n[14]||=w(`检测方式`,-1),d(D(`select`,{"onUpdate:modelValue":n[5]||=e=>l.value=e},[n[13]||=D(`option`,{value:`lan-tcp`},`TCP 服务响应`,-1),D(`option`,{value:`lan-icmp`,disabled:!e.modelValue.icmpEcho},`真实 ping`,8,x_)],512),[[Ne,l.value]])]),l.value===`lan-tcp`?(u(),F(`label`,S_,[n[15]||=w(`服务端口`,-1),d(D(`input`,{"onUpdate:modelValue":n[6]||=e=>c.value=e,type:`number`,min:`1`,max:`65535`},null,512),[[Q,c.value,void 0,{number:!0}]])])):z(``,!0),D(`button`,{type:`button`,disabled:e.dirty||!s.value.trim(),onClick:n[7]||=e=>r(`test`,{kind:l.value,target:s.value.trim(),...l.value===`lan-tcp`?{port:c.value}:{}})},`测试已保存的内网设置`,8,C_)])],64)):z(``,!0)],8,p_))}}),[[`__scopeId`,`data-v-dc7dbc71`]]),T_=[`aria-busy`],E_={key:1,role:`status`},D_={key:2},O_=[`disabled`],k_={key:0},A_={key:1},j_={key:2},M_=[`disabled`],N_={key:1},P_=[`disabled`,`onClick`],F_=[`disabled`,`onClick`],I_=[`disabled`],L_={key:0,role:`alert`},R_={class:`actions`},z_=[`disabled`],B_=[`disabled`],V_=[`disabled`],H_={key:0},U_={key:0},W_={class:`check`},G_=[`disabled`],K_=[`disabled`],q_=[`disabled`],J_=[`disabled`],Y_=[`disabled`],X_={key:0,class:`check`},Z_=[`disabled`],Q_=[`placeholder`,`disabled`],$_={class:`actions`},ev=[`disabled`],tv=[`disabled`],nv=[`disabled`],rv=`/api/app/admin/execution`,iv=H(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(``),s=O(!1),c=()=>g.value?.network?JSON.stringify({policy:g.value.network.policy,lan:g.value.network.lan}):JSON.stringify(g.value?.proxy),l=O(),g=O(),_=O(!1),v=O(``),y=O(``),b=O(`none`),x=O(``),S=O(!1),C=O(),E=O(!1),A=U(()=>!!g.value&&([`all`,`environment`].includes(n.section)&&b.value!==i.value||[`all`,`proxy`].includes(n.section)&&(c()!==a.value||!!x.value||S.value)||[`all`,`resources`].includes(n.section)&&E.value));f(A,e=>r(`dirty-change`,e)),f(s,e=>r(`busy-change`,e),{immediate:!0});async function j(){g.value=await X(rv),b.value=g.value.execution.mode,i.value=b.value,a.value=c()}async function M(e,t,n=!0){if(!_.value){_.value=!0,s.value=n,v.value=``,y.value=``;try{await e(),t&&(y.value=t)}catch(e){v.value=e instanceof Error?e.message:`保存失败`,await o(),l.value?.focus()}finally{_.value=!1,s.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 X(`/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 X(`/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 X(`/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 R(e){await M(async()=>{let t=await X(`/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 B(){await M(async()=>{let e=await X(`/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:l,role:`alert`,tabindex:`-1`},h(v.value),513)):z(``,!0),y.value?(u(),F(`p`,E_,h(y.value),1)):z(``,!0),g.value?(u(),F(T,{key:3},[e.section===`all`||e.section===`environment`?(u(),F(`form`,{key:0,onSubmit:Z(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,O_),[[Ne,b.value]])]),b.value===`none`?(u(),F(`p`,k_,`不预设执行位置,按任务选择已允许的环境;目标不明确时再询问。`)):b.value===`server`?(u(),F(`p`,A_,`未指定目标时优先在 Yaovi 所在节点执行,使用节点的环境变量和本机登录。已开启的虚拟机、电脑及浏览器仍可使用。`)):(u(),F(`p`,j_,`未指定目标的脚本优先在 Bot 虚拟环境中运行,使用下方授予该 Bot 的系统变量;其他已允许的环境仍可使用。`)),n[18]||=D(`p`,null,`开启托管浏览器后,未指定浏览器或设备的网页任务默认在托管浏览器中打开。`,-1),D(`button`,{disabled:_.value||b.value===g.value.execution.mode},`保存默认环境`,8,M_),(u(!0),F(T,null,p(g.value.activeTurns.filter(e=>e.revision!==g.value.execution.revision),e=>(u(),F(`p`,{key:e.agentId},h(e.agentId)+` 的当前任务仍以 `+h(e.mode)+` 为默认环境,结束后更新。`,1))),128))],32)):z(``,!0),e.section===`all`||e.section===`resources`?(u(),F(`section`,N_,[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,h(e.name),1),D(`p`,null,h(e.kind===`api`?`API 工具服务`:`环境变量`)+` · `+h(e.agentIds.length)+` 个 Bot · `+h(e.envKeys.join(`、`)||`通过服务工具调用`),1)]),D(`button`,{type:`button`,disabled:_.value,onClick:t=>N(e)},`编辑 `+h(e.name),9,P_),D(`button`,{type:`button`,disabled:_.value,onClick:t=>{M(async()=>{await V(X)(`/api/app/admin/execution/resources/`+e.id,{method:`DELETE`}),await j()},`授权已撤销`)}},`撤销`,8,F_)]))),128))]),D(`button`,{type:`button`,disabled:_.value,onClick:n[1]||=e=>N()},`添加授权或变量`,8,I_),E.value?(u(),k(f_,{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:Z(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`,L_,h(g.value.network.problem),1)):z(``,!0),W(pt,{"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(w_,{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:R},null,8,[`modelValue`,`disabled`,`dirty`,`environments`])):z(``,!0),D(`div`,R_,[D(`button`,{disabled:_.value},`保存网络选择`,8,z_),D(`button`,{type:`button`,disabled:_.value||A.value,onClick:B},`测试虚拟机网络`,8,B_),D(`button`,{type:`button`,disabled:_.value,onClick:n[5]||=e=>M(j,`状态已刷新`)},`刷新状态`,8,V_)]),(u(!0),F(T,null,p(g.value.nodes,e=>(u(),F(`div`,{key:e.id},[D(`p`,null,h(e.name)+`:`+h(e.status),1),e.lan?(u(),F(`p`,H_,`内网范围:`+h(e.lan.policy===`unsupported`?`此节点不支持本机内网`:e.lan.policy===`ready`?`已应用,目标尚需单独检测`:`已关闭`)+` · 真实 ping:`+h(e.lan.echo?`已启用`:`未启用`)+` · 公网:`+h(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`,U_,`默认运行环境是「服务器本机」,已开启的虚拟机仍可使用。此处代理仅用于虚拟机;本机命令、Yaovi 模型请求和托管浏览器仍使用各自的网络配置。`)):z(``,!0),n[32]||=D(`p`,null,`所有受管虚拟环境的程序共用出口。保留公网 HTTP/HTTPS 限制,其他协议阻断;代理故障时不直连。保存会断开旧网络任务。`,-1),D(`label`,W_,[d(D(`input`,{"onUpdate:modelValue":n[6]||=e=>g.value.proxy.enabled=e,type:`checkbox`,disabled:_.value},null,8,G_),[[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,K_),[[Ne,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,q_),[[Q,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,J_),[[Q,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,Y_),[[Q,g.value.proxy.username]])]),g.value.proxy.hasPassword?(u(),F(`label`,X_,[d(D(`input`,{"onUpdate:modelValue":n[11]||=e=>S.value=e,type:`checkbox`,disabled:_.value},null,8,Z_),[[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,Q_),[[Q,x.value]])])],64)):z(``,!0),D(`div`,$_,[D(`button`,{disabled:_.value},`保存代理`,8,ev),D(`button`,{type:`button`,disabled:_.value||!g.value.proxy.enabled,onClick:B},`测试已保存的代理`,8,tv),D(`button`,{type:`button`,disabled:_.value,onClick:n[13]||=e=>M(j,`状态已刷新`)},`刷新状态`,8,nv)]),(u(!0),F(T,null,p(g.value.nodes,e=>(u(),F(`p`,{key:e.id},h(e.name)+`:`+h(e.status),1))),128)),n[33]||=D(`p`,null,`Yaovi 后端代发的服务请求使用后端网络配置。Compose 部署需要更新网络网关;旧环境不会假报代理已生效。`,-1)],64))],32)):z(``,!0)],64)):(u(),F(`p`,D_,`正在加载运行环境…`))],8,T_))}}),[[`__scopeId`,`data-v-d981bb50`]]);function av(e){return e===`development`||e===`production`?e:void 0}function ov(e){let t=_e(e),n=Ce(t.source??t.configurationSource??t.configuration_source),r=n===`file`||n===`environment`?n:`none`,i=n===`none`||n===`file`||n===`environment`||de(t.managementAvailable??t.management_available,!1),a=lt(t.environments??t.environment).map(av).filter(e=>!!e),o=lt(t.warnings).flatMap(e=>{if(typeof e==`string`&&e.trim())return[{code:`warning`,message:e.trim()}];let t=_e(e),n=Ce(t.message).trim();return n?[{code:Ce(t.code,`warning`),message:n,actualMode:Ce(t.actualMode??t.actual_mode)||void 0,recommendedMode:Ce(t.recommendedMode??t.recommended_mode)||void 0}]:[]}),s=_e(t.providers),c=_e(s.fcm),l=Ce(c.source??c.configurationSource??c.configuration_source),u=l===`file`||l===`environment`?l:`none`,d=[`none`,`file`,`environment`].includes(l)?!0:de(c.managementAvailable??c.management_available,!1),f=lt(c.warnings).flatMap(e=>{if(typeof e==`string`&&e.trim())return[{code:`warning`,message:e.trim()}];let t=_e(e),n=Ce(t.message).trim();return n?[{code:Ce(t.code,`warning`),message:n,actualMode:Ce(t.actualMode??t.actual_mode)||void 0,recommendedMode:Ce(t.recommendedMode??t.recommended_mode)||void 0}]:[]});return{configured:de(t.configured),healthy:de(t.healthy),topic:Ce(t.topic)||void 0,registrationCount:me(t.registrationCount??t.registration_count),pendingCount:me(t.pendingCount??t.pending_count),lastSuccessAt:me(t.lastSuccessAt??t.last_success_at)||void 0,lastError:Ce(t.lastError??t.last_error??t.configurationError??t.configuration_error)||void 0,source:r,editable:i&&de(t.editable),managementAvailable:i,keyFile:Ce(t.keyFile??t.key_file)||void 0,keyId:Ce(t.keyId??t.key_id)||void 0,teamId:Ce(t.teamId??t.team_id)||void 0,environments:a,warnings:o,...Object.keys(c).length?{providers:{fcm:{configured:de(c.configured),healthy:de(c.healthy),registrationCount:me(c.registrationCount??c.registration_count),pendingCount:me(c.pendingCount??c.pending_count),lastSuccessAt:me(c.lastSuccessAt??c.last_success_at)||void 0,lastError:Ce(c.lastError??c.last_error??c.configurationError??c.configuration_error)||void 0,source:u,editable:d&&de(c.editable),managementAvailable:d,serviceAccountFile:Ce(c.serviceAccountFile??c.service_account_file)||void 0,projectId:Ce(c.projectId??c.project_id)||void 0,packageName:Ce(c.packageName??c.package_name,`cn.samien.yaovi`),warnings:f}}}:{}}}async function sv(){return ov(await X(`/api/app/system/push-status`))}async function cv(e){return ov(await X(`/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 lv(e){return ov(await X(`/api/app/system/push-config/fcm`,{method:`PUT`,body:{serviceAccountFile:e.serviceAccountFile,projectId:e.projectId,packageName:e.packageName},timeoutMs:45e3}))}var uv=[`data-section`],dv={key:0,class:`error`,role:`alert`},fv={key:1,class:`block`},pv={class:`block push-block`},mv={key:0,class:`push-status`},hv={key:0,class:`push-managed-note`},gv={key:1,class:`push-managed-note`},_v={class:`wide`},vv=[`readonly`],yv=[`readonly`],bv=[`readonly`],xv={class:`wide`},Sv=[`readonly`],Cv=[`disabled`],wv={key:0,class:`wide push-warnings`,"aria-live":`polite`},Tv={key:1,class:`wide push-error`,role:`alert`},Ev={key:2,class:`wide push-notice`,role:`status`},Dv={key:3,class:`wide`},Ov=[`disabled`],kv={key:2,class:`push-managed-note`},Av={class:`block push-block`},jv={key:0,class:`push-status`},Mv={key:0,class:`push-managed-note`},Nv={key:1,class:`push-managed-note`},Pv={class:`wide`},Fv=[`readonly`],Iv=[`readonly`],Lv=[`readonly`],Rv={key:0,class:`wide push-warnings`,"aria-live":`polite`},zv={key:1,class:`wide push-error`,role:`alert`},Bv={key:2,class:`wide push-notice`,role:`status`},Vv={key:3,class:`wide`},Hv=[`disabled`],Uv={key:2,class:`push-managed-note`},Wv=H(E({__name:`SystemManagementPanel`,props:{section:{},active:{type:Boolean,default:!0}},emits:[`dirty-change`],setup(e,{expose:t,emit:n}){let r=e,i=n,a=O(``),o=O(),s=O(``),c=O(!1),m=O(``),g=O(``),_=O(``),v=O(``),y=O(``),b=O(`cn.samien.yaovi.agent`),x=O([`development`,`production`]),S=O(``),C=O(``),E=O(`cn.samien.yaovi`),k=O(!1),A=O(``),j=O(``),M=O(),N=O(),P=U(()=>o.value?.source===`environment`),I=U(()=>o.value?.providers?.fcm),L=U(()=>I.value?.source===`environment`),R=U(()=>!!(I.value?.managementAvailable&&I.value.editable&&!k.value&&!c.value)),B=U(()=>I.value?!I.value.configured&&I.value.lastError?`FCM 配置无效:${I.value.lastError}`:I.value.configured?I.value.healthy?`FCM 推送服务正常`:I.value.lastError||`FCM 推送服务异常`:`尚未配置 FCM 服务账号文件`:`当前版本未提供 Android 推送状态`),V=U(()=>!!(o.value?.managementAvailable&&o.value.editable&&!c.value&&!k.value)),H=U(()=>o.value?!o.value.configured&&o.value.lastError?`APNs 配置无效:${o.value.lastError}`:o.value.configured?o.value.healthy?`APNs 推送服务正常`:o.value.lastError||`APNs 推送服务异常`:`尚未配置 APNs 密钥文件`:s.value||`当前版本未提供推送状态`);function G(){return{keyFile:_.value,keyId:v.value,teamId:y.value,topic:b.value,environments:[...x.value].sort().join(`,`)}}function K(){return{serviceAccountFile:S.value,projectId:C.value,packageName:E.value}}let ee=U(()=>{if(r.section!==`push`)return!1;let e=!!M.value&&Object.keys(G()).some(e=>G()[e]!==M.value?.[e]),t=!!N.value&&Object.keys(K()).some(e=>K()[e]!==N.value?.[e]);return e||t});f(ee,e=>i(`dirty-change`,e),{immediate:!0});function te(e){_.value=e.keyFile??``,v.value=e.keyId??``,y.value=e.teamId??``,b.value=e.topic||`cn.samien.yaovi.agent`,x.value=e.environments.length?[...e.environments]:[`development`,`production`],M.value=G()}function q(e){let t=e.providers?.fcm;S.value=t?.serviceAccountFile??``,C.value=t?.projectId??``,E.value=t?.packageName||`cn.samien.yaovi`,N.value=K()}function J(e){te(e),q(e)}async function ne(){if(a.value=``,r.section!==`push`)return;s.value=``;let e=await sv().catch(e=>{e?.status!==404&&(s.value=`无法读取 APNs 状态:${e instanceof Error?e.message:`请求失败`}`)});o.value=e,e?J(e):(M.value=void 0,N.value=void 0)}t({refresh:ne});async function re(){if(!o.value?.editable||P.value||c.value||k.value)return;let e=_.value.trim(),t=v.value.trim(),n=y.value.trim(),r=b.value.trim(),i=[`development`,`production`].filter(e=>x.value.includes(e));if(m.value=``,g.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}c.value=!0;try{let a=await cv({keyFile:e,keyId:t,teamId:n,topic:r,environments:i});o.value=a,te(a);let s=i.length===2?`Sandbox 与 Production`:i[0]===`development`?`Sandbox`:`Production`;g.value=`${s} 验证通过,APNs 已启用`}catch(e){m.value=e instanceof Error?e.message:`无法验证并启用 APNs`}finally{c.value=!1}}async function ie(){if(!I.value?.editable||L.value||k.value||c.value)return;let e=S.value.trim(),t=C.value.trim(),n=E.value.trim();if(A.value=``,j.value=``,!e.startsWith(`/`)){A.value=`请输入 Yaovi 所在机器上的服务账号 JSON 文件绝对路径`;return}if(!/^[a-z][a-z0-9-]{4,61}[a-z0-9]$/.test(t)){A.value=`请输入有效的 Firebase Project ID`;return}if(n!==`cn.samien.yaovi`){A.value=`Android 包名必须是 cn.samien.yaovi`;return}k.value=!0;try{let r=await lv({serviceAccountFile:e,projectId:t,packageName:n});o.value=r,q(r),j.value=`Firebase 权限与项目验证通过,FCM 已启用`}catch(e){A.value=e instanceof Error?e.message:`无法验证并启用 FCM`}finally{k.value=!1}}return f(()=>[r.active,r.section],([e,t])=>{e&&(t===`push`&&(m.value=``,g.value=``,A.value=``,j.value=``),ne().catch(e=>{a.value=e instanceof Error?e.message:`读取系统设置失败`}))},{immediate:!0}),(t,n)=>(u(),F(`section`,{class:`system-management-panel`,"data-section":e.section},[a.value?(u(),F(`p`,dv,h(a.value),1)):z(``,!0),e.section===`memory`?(u(),F(`div`,fv,[...n[9]||=[D(`h3`,null,`Markdown 文件记忆`,-1),D(`p`,null,`每个 Bot 使用自己的 MEMORY.md、主题笔记和日记。用户记忆与项目记忆按贡献 Bot 分开保存。`,-1),D(`p`,null,`在对话的“记忆与协作”中编辑文件、查看修改历史或撤销修改。长期事实会在下一轮加载,主题和日记按需读取。`,-1)]])):(u(),F(T,{key:2},[D(`div`,pv,[n[21]||=D(`h3`,null,`iOS 消息推送`,-1),D(`p`,{class:l([`push-health`,{ok:o.value?.configured&&o.value?.healthy}])},h(H.value),3),o.value?(u(),F(`div`,mv,[D(`span`,null,[n[10]||=D(`small`,null,`Topic`,-1),D(`b`,null,h(o.value.topic||`—`),1)]),D(`span`,null,[n[11]||=D(`small`,null,`注册设备`,-1),D(`b`,null,h(o.value.registrationCount),1)]),D(`span`,null,[n[12]||=D(`small`,null,`待发送`,-1),D(`b`,null,h(o.value.pendingCount),1)])])):z(``,!0),o.value?.managementAvailable?(u(),F(T,{key:1},[P.value?(u(),F(`p`,hv,`当前 APNs 配置由服务环境变量管理,Web 仅可查看。请修改 LaunchAgent、Docker 或进程环境后重启服务。`)):o.value.editable?z(``,!0):(u(),F(`p`,gv,`当前 APNs 配置为只读,请在 Yaovi 服务端修改后重启服务。`)),D(`form`,{class:`push-config-form`,onSubmit:Z(re,[`prevent`])},[D(`label`,_v,[n[13]||=D(`span`,null,`.p8 本地路径`,-1),d(D(`input`,{"onUpdate:modelValue":n[0]||=e=>_.value=e,name:`push-key-file`,readonly:!o.value.editable||c.value||k.value,autocomplete:`off`,spellcheck:`false`,placeholder:`/Users/…/AuthKey_XXXXXXXXXX.p8`},null,8,vv),[[Q,_.value]]),n[14]||=D(`small`,null,`填写 Yaovi 所在机器上的绝对路径,私钥内容不会经过浏览器。`,-1)]),D(`label`,null,[n[15]||=D(`span`,null,`Key ID`,-1),d(D(`input`,{"onUpdate:modelValue":n[1]||=e=>v.value=e,name:`push-key-id`,readonly:!o.value.editable||c.value||k.value,autocomplete:`off`,spellcheck:`false`},null,8,yv),[[Q,v.value]])]),D(`label`,null,[n[16]||=D(`span`,null,`Team ID`,-1),d(D(`input`,{"onUpdate:modelValue":n[2]||=e=>y.value=e,name:`push-team-id`,readonly:!o.value.editable||c.value||k.value,autocomplete:`off`,spellcheck:`false`},null,8,bv),[[Q,y.value]])]),D(`label`,xv,[n[17]||=D(`span`,null,`Topic(Bundle ID)`,-1),d(D(`input`,{"onUpdate:modelValue":n[3]||=e=>b.value=e,name:`push-topic`,readonly:!o.value.editable||c.value||k.value,autocomplete:`off`,spellcheck:`false`},null,8,Sv),[[Q,b.value]])]),D(`fieldset`,{class:`wide`,disabled:!o.value.editable||c.value||k.value},[n[20]||=D(`legend`,null,`推送环境`,-1),D(`label`,null,[d(D(`input`,{"onUpdate:modelValue":n[4]||=e=>x.value=e,type:`checkbox`,value:`development`},null,512),[[Je,x.value]]),n[18]||=w(`Sandbox(开发)`,-1)]),D(`label`,null,[d(D(`input`,{"onUpdate:modelValue":n[5]||=e=>x.value=e,type:`checkbox`,value:`production`},null,512),[[Je,x.value]]),n[19]||=w(`Production(TestFlight / App Store)`,-1)])],8,Cv),o.value.warnings.length?(u(),F(`div`,wv,[(u(!0),F(T,null,p(o.value.warnings,e=>(u(),F(`p`,{key:`${e.code}:${e.message}`,class:`push-warning`,role:`status`},[W(Y,{name:`alert`,size:14}),w(h(e.message),1)]))),128))])):z(``,!0),m.value?(u(),F(`p`,Tv,h(m.value),1)):g.value?(u(),F(`p`,Ev,h(g.value),1)):z(``,!0),o.value.editable?(u(),F(`footer`,Dv,[D(`button`,{class:`solid-button`,disabled:!V.value},h(c.value?`验证中…`:`验证并启用`),9,Ov)])):z(``,!0)],32)],64)):o.value?(u(),F(`p`,kv,`当前服务版本只提供推送状态,不能在 Web 中修改配置。`)):z(``,!0)]),D(`div`,Av,[n[29]||=D(`h3`,null,`Android 消息推送`,-1),D(`p`,{class:l([`push-health`,{ok:I.value?.configured&&I.value?.healthy}])},h(B.value),3),I.value?(u(),F(`div`,jv,[D(`span`,null,[n[22]||=D(`small`,null,`Firebase Project`,-1),D(`b`,null,h(I.value.projectId||`—`),1)]),D(`span`,null,[n[23]||=D(`small`,null,`注册设备`,-1),D(`b`,null,h(I.value.registrationCount),1)]),D(`span`,null,[n[24]||=D(`small`,null,`待发送`,-1),D(`b`,null,h(I.value.pendingCount),1)])])):z(``,!0),I.value?.managementAvailable?(u(),F(T,{key:1},[L.value?(u(),F(`p`,Mv,`当前 FCM 配置由服务环境变量管理,Web 仅可查看。请修改 LaunchAgent、Docker 或进程环境后重启服务。`)):I.value.editable?z(``,!0):(u(),F(`p`,Nv,`当前 FCM 配置为只读,请在 Yaovi 服务端修改后重启服务。`)),D(`form`,{class:`push-config-form`,onSubmit:Z(ie,[`prevent`])},[D(`label`,Pv,[n[25]||=D(`span`,null,`服务账号 JSON 本地路径`,-1),d(D(`input`,{"onUpdate:modelValue":n[6]||=e=>S.value=e,name:`fcm-service-account-file`,readonly:!I.value.editable||k.value||c.value,autocomplete:`off`,spellcheck:`false`,placeholder:`/Users/…/firebase-service-account.json`},null,8,Fv),[[Q,S.value]]),n[26]||=D(`small`,null,`只填写 Yaovi 所在机器上的绝对路径;JSON 内容和私钥不会经过浏览器,也不会写入Yaovi配置。`,-1)]),D(`label`,null,[n[27]||=D(`span`,null,`Firebase Project ID`,-1),d(D(`input`,{"onUpdate:modelValue":n[7]||=e=>C.value=e,name:`fcm-project-id`,readonly:!I.value.editable||k.value||c.value,autocomplete:`off`,spellcheck:`false`},null,8,Iv),[[Q,C.value]])]),D(`label`,null,[n[28]||=D(`span`,null,`Android 包名`,-1),d(D(`input`,{"onUpdate:modelValue":n[8]||=e=>E.value=e,name:`fcm-package-name`,readonly:!I.value.editable||k.value||c.value,autocomplete:`off`,spellcheck:`false`},null,8,Lv),[[Q,E.value]])]),I.value.warnings.length?(u(),F(`div`,Rv,[(u(!0),F(T,null,p(I.value.warnings,e=>(u(),F(`p`,{key:`${e.code}:${e.message}`,class:`push-warning`,role:`status`},[W(Y,{name:`alert`,size:14}),w(h(e.message),1)]))),128))])):z(``,!0),A.value?(u(),F(`p`,zv,h(A.value),1)):j.value?(u(),F(`p`,Bv,h(j.value),1)):z(``,!0),I.value.editable?(u(),F(`footer`,Vv,[D(`button`,{class:`solid-button`,disabled:!R.value},h(k.value?`验证中…`:`验证并启用`),9,Hv)])):z(``,!0)],32)],64)):I.value?(u(),F(`p`,Uv,`当前服务版本只提供 FCM 状态,不能在 Web 中修改配置。`)):z(``,!0)])],64))],8,uv))}}),[[`__scopeId`,`data-v-b7d4cede`]]);function Gv(e,t,n){if(e){if(!t)return e;if(n)return JSON.stringify([`cloud`,n,t,e])}}function Kv(e,t){return e===`approval`&&t===`review`?{action:`review`,body:{}}:{action:`respond`,body:{answer:t}}}var qv=[`本机`,`这台设备`,`这台电脑`];async function Jv(e,t=window.yaoviDesktop){if(!t)return{};let n;try{if(!t.deviceHost)throw Error(`当前客户端不支持读取设备身份,请更新当前电脑客户端后重试。`);let e=(await Promise.race([t.deviceHost(),new Promise((e,t)=>{n=setTimeout(()=>t(Error(`读取设备身份超时,请重新打开当前客户端后重试。`)),5e3)})]))?.deviceHost;if(!e)throw Error(`当前客户端未提供设备编号,可能尚未登记到当前服务器。请重新登录;仍失败时请更新客户端。`);if(typeof e!=`string`||e!==`local`&&!/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(e))throw Error(`当前客户端返回的设备编号无效,请重新登录当前服务器或更新客户端。`);return{deviceHost:e}}catch(t){let n=`无法识别当前客户端所在的电脑:${(t instanceof Error?t.message.replace(/^Error invoking remote method '[^']+':\s*(?:Error:\s*)?/,``):``)||`设备身份读取失败,请重新打开当前客户端后重试。`}`;if(qv.some(t=>e.includes(t)))throw Error(`${n} 本条消息尚未发送;修复连接后可重试,无需另选设备。`);return{warning:`${n} 涉及当前电脑的操作暂不可用。`}}finally{clearTimeout(n)}}function Yv(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 Xv(e){return e.lastMessageAt??e.createdAt}function Zv(e,t){return Number(t.pinned)-Number(e.pinned)||Xv(t)-Xv(e)||(e.id<t.id?-1:+(e.id>t.id))}function Qv(e){return e.unread??(e.unreadCount===void 0?e.lastSeq>e.readSeq:e.unreadCount>0)}function $v(e){return e.some(e=>e.visible!==!1&&e.role===`assistant`&&[`queued`,`streaming`,`uncertain`].includes(e.status))}function ey(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 ty=e=>`workspace-outbox-v1:${e}`;function ny(e){let t=JSON.parse(localStorage.getItem(ty(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 ry(e,t){if(t.length>100)throw Error(`待发送消息已满,请先处理已有消息。`);localStorage.setItem(ty(e),JSON.stringify(t))}function iy(e,t){return ey(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 ay=`workspace-message-patch-v1`,oy=class extends Error{constructor(){super(`消息版本不连续,需要重新同步`)}},sy=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 oy;if((n.revision??0)>=t.revision)return{...e,type:`message.changed`,data:n};if(n.revision!==t.baseRevision)throw new oy;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}}},cy={vm_wait:`等待电脑`,auth_wait:`等待授权`,input_wait:`等待补充`,peer_wait:`等待同伴`,resource_wait:`等待资源`,queued:`排队中`,review:`复核中`,tool:`调用工具`,thinking:`思考中`,writing:`正在输入…`,completing:`正在完成`,stopping:`正在停止`,retry:`出错重试`},ly={authorization:`auth_wait`,input:`input_wait`,peer:`peer_wait`,resource:`resource_wait`};function uy(e){if(e.vmWait)return`vm_wait`;if(e.waitingReason&&ly[e.waitingReason])return ly[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 dy(e){let t=uy(e);return t?cy[t]:void 0}function fy(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 py=`在处理`,my=new Set([`queued`,`running`,`waiting`,`review`,`stopping`]);function hy(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 gy(e,t){return!t||!e?.length?[]:e.filter(e=>my.has(e.status)&&(!e.kind||e.kind===`manual`||e.kind===`workstream`)&&e.visibility!==`private`&&hy(e,t))}function _y(e){if(e.foregroundActive)return;let t=gy(e.tasks,e.conversation);if(t.length){if(t.some(e=>e.status!==`waiting`))return py;for(let[e,n]of[[`authorization`,`等待授权`],[`input`,`等待输入`],[`peer`,`等待协作`],[`resource`,`等待资源`]])if(t.some(t=>t.waitingReason===e))return n;return`等待中`}}var vy={class:`unread-header`},yy={class:`unread-controls`},by=[`disabled`,`aria-busy`],xy={key:0,class:`unread-error`,role:`alert`},Sy={class:`unread-rows`},Cy=[`disabled`,`onClick`],wy={class:`unread-row__icon`},Ty={class:`unread-row__copy`},Ey=[`title`],Dy={class:`unread-row__meta`},Oy={class:`unread-row__preview`},ky=[`aria-label`],Ay={key:0,class:`unread-empty`},jy={class:`unread-empty__icon`},My=H(E({__name:`UnreadPanel`,props:{anchor:{}},emits:[`close`],setup(e,{emit:t}){let n=e,r=t,i=st(),a=Se(),o=O(!1),c=O(``),l=O(),d=U(()=>i.snapshot.conversations),f=U(()=>d.value.reduce((e,t)=>e+t.count,0)),g=U(()=>({"--unread-left":`${n.anchor.left}px`,"--unread-top":`${n.anchor.top}px`}));m(()=>{l.value?.focus(),i.refresh()});function _(e){if(e.key!==`Tab`||!l.value)return;let t=[...l.value.querySelectorAll(`button:not(:disabled)`)],n=t[0],r=t.at(-1);e.shiftKey&&(document.activeElement===n||document.activeElement===l.value)?(e.preventDefault(),r?.focus()):!e.shiftKey&&document.activeElement===r&&(e.preventDefault(),n?.focus())}async function v(){if(o.value||!d.value.length)return;let e=JSON.parse(JSON.stringify(d.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:s(g.value),onClick:t[1]||=Z(e=>r(`close`),[`self`]),onKeydown:t[2]||=Ie(Z(e=>r(`close`),[`prevent`,`stop`]),[`esc`])},[D(`section`,{id:`unread-center`,ref_key:`panel`,ref:l,class:`unread-panel`,role:`dialog`,"aria-modal":`true`,"aria-labelledby":`unread-center-title`,tabindex:`-1`,onKeydown:_},[D(`header`,vy,[D(`div`,null,[t[3]||=D(`h2`,{id:`unread-center-title`},`未读消息`,-1),D(`p`,null,h(f.value)+` 条未读 · `+h(d.value.length)+` 个会话`,1)]),D(`button`,{class:`unread-close`,type:`button`,"aria-label":`关闭未读消息`,onClick:t[0]||=e=>r(`close`)},[W(Y,{name:`close`,size:20})])]),D(`div`,yy,[D(`button`,{class:`unread-clear`,type:`button`,disabled:o.value||!d.value.length,"aria-busy":o.value,"aria-label":`将当前筛选的消息全部标为已读`,onClick:v},[W(Y,{name:`check`,size:16}),w(h(o.value?`正在同步…`:`全部标已读`),1)],8,by)]),c.value||V(i).error?(u(),F(`p`,xy,h(c.value||V(i).error),1)):z(``,!0),D(`div`,Sy,[(u(!0),F(T,null,p(d.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`,wy,[W(Y,{name:`users`,size:20})]),D(`span`,Ty,[D(`strong`,{title:e.name},h(e.name),9,Ey),D(`span`,Dy,[w(h(e.mode===`bot`?`Bot`:`聊天`),1),e.profile?(u(),F(T,{key:0},[w(` · `+h(e.profile),1)],64)):z(``,!0)]),D(`span`,Oy,h(e.preview),1)]),D(`b`,{class:`unread-row__count`,"aria-label":`${e.count} 条未读`},h(e.count>99?`99+`:e.count),9,ky)],8,Cy))),128)),d.value.length?z(``,!0):(u(),F(`div`,Ay,[D(`span`,jy,[W(Y,{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`]]),Ny={connecting:`连接中`,syncing:`同步中`,online:`已连接`,reconnecting:`正在重连`,offline:`已离线`,expired:`登录已过期`,unavailable:`连接不可用`};function Py(e){return Ny[e]}var Fy={class:`account-connection`,"aria-label":`服务器连接`},Iy=[`data-state`],Ly={key:0,class:`remote-route`},Ry={key:1,class:`remote-path`},zy=[`value`],By=[`value`],Vy={key:2,class:`connection-message`,role:`status`},Hy=H(E({__name:`RemoteConnectionStatus`,setup(e){let t=ke.status,n=O(fe()),r=O(ue()),a=O(``),o=O(``),s={p2p:`P2P 直连`,turn:`TURN 加密转发`,wss:`加密中继`,lan:`局域网直连`,unverified:`正在确认路径`},c;async function l(){n.value=fe(),r.value=ue();let e=await Ze().catch(()=>void 0);a.value=e?s[e.selected]+(e.selected===`lan`&&ot.offline?` · 云端暂不可达`:``)+(r.value===`auto`?e.fallbacks?.length?` · 直连不可用后已切换`:``:` · 手动指定`):``}function d(e){let t=e.target.value;r.value=t,Te(t),o.value=t===`auto`?`已恢复自动选择线路,正在重新连接…`:`正在按所选线路重新连接;该线路不可用时不会自动切换,可改回自动。`}return m(()=>{l(),window.addEventListener(`yaovi-remote-operations`,l),window.addEventListener(`yaovi-remote-disconnected`,l),c=setInterval(l,5e3)}),i(()=>{clearInterval(c),window.removeEventListener(`yaovi-remote-operations`,l),window.removeEventListener(`yaovi-remote-disconnected`,l)}),(e,i)=>(u(),F(`section`,Fy,[D(`p`,{class:`connection-status`,role:`status`,"aria-label":`服务器连接状态`,"data-state":V(t)},[i[0]||=D(`span`,{class:`connection-status__dot`,"aria-hidden":`true`},null,-1),w(h(V(Py)(V(t))),1)],8,Iy),a.value?(u(),F(`p`,Ly,h(a.value),1)):z(``,!0),n.value?(u(),F(`label`,Ry,[i[1]||=w(`线路 `,-1),D(`select`,{value:r.value,"aria-label":`远程连接线路`,onChange:d},[(u(!0),F(T,null,p(V(le),e=>(u(),F(`option`,{key:e.value,value:e.value},h(e.label),9,By))),128))],40,zy)])):z(``,!0),o.value?(u(),F(`p`,Vy,h(o.value),1)):z(``,!0)]))}}),[[`__scopeId`,`data-v-3a40f7b7`]]),Uy=[`aria-label`],Wy=[`src`],Gy={key:1,"aria-hidden":`true`},Ky=H(E({__name:`AccountInitialAvatar`,props:{name:{},imageUrl:{default:``},size:{default:30}},setup(e){let t=e,n=U(()=>Array.from(t.name.trim())[0]?.toLocaleUpperCase()||`?`),r=[`#1488ff`,`#00a17a`,`#9655f7`,`#e05d2f`,`#b7791f`,`#5166d6`],i=U(()=>{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:s({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,Wy)):(u(),F(`span`,Gy,h(n.value),1))],12,Uy))}}),[[`__scopeId`,`data-v-db26fdc7`]]),qy={xmlns:`http://www.w3.org/2000/svg`,"xmlns:xlink":`http://www.w3.org/1999/xlink`,viewBox:`0 0 24 24`},Jy=E({name:`At`,render:function(e,t){return u(),F(`svg`,qy,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)])}}),Yy={xmlns:`http://www.w3.org/2000/svg`,"xmlns:xlink":`http://www.w3.org/1999/xlink`,viewBox:`0 0 24 24`},Xy=E({name:`ChevronRight`,render:function(e,t){return u(),F(`svg`,Yy,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)])}}),Zy={xmlns:`http://www.w3.org/2000/svg`,"xmlns:xlink":`http://www.w3.org/1999/xlink`,viewBox:`0 0 24 24`},Qy=E({name:`Loader`,render:function(e,t){return u(),F(`svg`,Zy,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)])}}),$y={xmlns:`http://www.w3.org/2000/svg`,"xmlns:xlink":`http://www.w3.org/1999/xlink`,viewBox:`0 0 24 24`},eb=E({name:`Microphone`,render:function(e,t){return u(),F(`svg`,$y,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)])}}),tb={xmlns:`http://www.w3.org/2000/svg`,"xmlns:xlink":`http://www.w3.org/1999/xlink`,viewBox:`0 0 24 24`},nb=E({name:`PhoneOff`,render:function(e,t){return u(),F(`svg`,tb,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)])}}),rb={xmlns:`http://www.w3.org/2000/svg`,"xmlns:xlink":`http://www.w3.org/1999/xlink`,viewBox:`0 0 24 24`},ib=E({name:`PlayerStop`,render:function(e,t){return u(),F(`svg`,rb,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)])}}),ab={xmlns:`http://www.w3.org/2000/svg`,"xmlns:xlink":`http://www.w3.org/1999/xlink`,viewBox:`0 0 24 24`},ob=E({name:`Plug`,render:function(e,t){return u(),F(`svg`,ab,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)])}}),sb={xmlns:`http://www.w3.org/2000/svg`,"xmlns:xlink":`http://www.w3.org/1999/xlink`,viewBox:`0 0 24 24`},cb=E({name:`ShieldCheck`,render:function(e,t){return u(),F(`svg`,sb,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)])}}),lb={xmlns:`http://www.w3.org/2000/svg`,"xmlns:xlink":`http://www.w3.org/1999/xlink`,viewBox:`0 0 24 24`},ub=E({name:`Stars`,render:function(e,t){return u(),F(`svg`,lb,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)])}}),db={xmlns:`http://www.w3.org/2000/svg`,"xmlns:xlink":`http://www.w3.org/1999/xlink`,viewBox:`0 0 24 24`},fb=E({name:`Target`,render:function(e,t){return u(),F(`svg`,db,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)])}}),pb={xmlns:`http://www.w3.org/2000/svg`,"xmlns:xlink":`http://www.w3.org/1999/xlink`,viewBox:`0 0 24 24`},mb=E({name:`X`,render:function(e,t){return u(),F(`svg`,pb,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)])}}),hb=[{id:`current`,name:`当前样式`,detail:`经典蓝灰`},{id:`grok`,name:`Grok Bot`,detail:`黑白灰`},{id:`codex`,name:`Codex`,detail:`浅蓝双气泡`}],gb=[`#090909`,`#2868D7`,`#26BFAE`,`#9370DB`,`#E56A92`,`#F59742`,`#A2A5AF`];function _b(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 vb(e){let t=_b(`#F1F1F1`,`#262626`,`#202124`,`#F4F4F5`,16,e===`current`);return{version:1,preset:e,user:e===`grok`?_b(`#090909`,`#5A5A5A`,`#FFFFFF`,`#FFFFFF`,16):e===`codex`?_b(`#E4F3FC`,`#203C50`,`#1E69A5`,`#C1E5FF`):_b(`#2868D7`,`#2868D7`,`#FFFFFF`,`#FFFFFF`,16,!0),assistant:t}}function yb(e){return typeof e==`string`&&/^#[0-9a-f]{6}$/i.test(e)}function bb(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 xb(e,t){let n=bb(e),r=bb(t);return(Math.max(n,r)+.05)/(Math.min(n,r)+.05)}function Sb(e,t=e){return Math.min(xb(e,`#FFFFFF`),xb(t,`#FFFFFF`))>Math.min(xb(e,`#141414`),xb(t,`#141414`))?`#FFFFFF`:`#141414`}function Cb(e){let t=vb(`current`);if(!e||typeof e!=`object`||Array.isArray(e))return t;let n=e;if(n.version!==1)return t;let r=hb.find(e=>e.id===n.preset);if(r)return vb(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=>yb(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:yb(r.lightText)?r.lightText:Sb(r.light,r.gradient?r.lightEnd:r.light),darkText:yb(r.darkText)?r.darkText:Sb(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 wb(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(xb(n,i),xb(r,i))>=4.5?i:Sb(n,r),o=Math.min(xb(n,a),xb(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 Tb(e,t){let n=wb(e,!1),r=wb(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 Eb=`yaovi:chat-appearance:v1`;function Db(){try{return Cb(JSON.parse(window.localStorage.getItem(`yaovi:chat-appearance:v1`)||`null`))}catch{return vb(`current`)}}var Ob=O(Db()),kb=O(null),Ab=O(``);function jb(e,t=!0){let n=Cb(e);if(JSON.stringify(n)!==JSON.stringify(Ob.value))try{window.localStorage.setItem(Eb,JSON.stringify(n)),t&&(kb.value=JSON.parse(JSON.stringify(Ob.value))),Ob.value=n,Ab.value=``}catch{Ab.value=`无法保存外观设置,请检查浏览器存储空间。`}}typeof window<`u`&&window.addEventListener(`storage`,e=>{(e.key===`yaovi:chat-appearance:v1`||e.key===null)&&(Ob.value=Db(),kb.value=null)});function Mb(){return{appearance:r(Ob),previous:r(kb),saveError:r(Ab),update:jb,selectPreset:e=>jb(vb(e)),undo:()=>{if(kb.value){let e=kb.value;jb(e,!1),Ab.value||(kb.value=null)}}}}var Nb={class:`bubble-settings`,"aria-label":`聊天气泡设置`},Pb={class:`bubble-controls`},Fb={"aria-label":`预设样式`},Ib={class:`bubble-presets`,role:`group`,"aria-label":`气泡预设`},Lb=[`aria-pressed`,`data-testid`,`onClick`],Rb=[`data-bubble-theme`],zb={class:`bubble-custom`,"aria-label":`自定义微调`},Bb={class:`bubble-segment`,role:`group`,"aria-label":`调整哪一方`},Vb=[`aria-pressed`],Hb=[`aria-pressed`],Ub={class:`bubble-field`},Wb={class:`bubble-segment fill-segment`,role:`group`,"aria-label":`背景类型`},Gb=[`aria-pressed`],Kb=[`aria-pressed`],qb={class:`bubble-swatches`,role:`group`,"aria-label":`快捷颜色`},Jb=[`aria-label`,`aria-pressed`,`onClick`],Yb={class:`bubble-field`},Xb={class:`bubble-color-input`},Zb=[`value`],Qb=[`aria-invalid`],$b={key:0,class:`bubble-field`},ex={class:`bubble-color-input`},tx=[`value`],nx=[`aria-invalid`],rx={key:1,class:`bubble-error`,role:`alert`},ix={class:`bubble-field`},ax={class:`auto-text`},ox=[`open`],sx={class:`bubble-shape-fields`},cx={class:`bubble-field`},lx=[`value`],ux={class:`bubble-field`},dx=[`checked`],fx={class:`bubble-field`},px=[`checked`],mx=[`data-bubble-theme`],hx={class:`preview-modes`,role:`group`,"aria-label":`预览主题`},gx=[`aria-pressed`],_x=[`aria-pressed`],vx={class:`preview-conversation`},yx={class:`preview-row is-user`},bx={class:`preview-row`},xx={class:`preview-row preview-extra`},Sx={class:`preview-row is-user preview-extra`},Cx={class:`preview-composer`,"aria-hidden":`true`},wx={class:`bubble-footer`},Tx={role:`status`},Ex=H(E({__name:`ChatAppearancePanel`,props:{theme:{default:`light`}},setup(e){let t=e,{appearance:n,previous:r,saveError:i,update:a,selectPreset:o,undo:c}=Mb(),m=O(`user`),g=O(window.innerWidth>=1e3),_=O(t.theme),v=O(``),y=O(``),b=O(!1),x=U(()=>n.value[m.value]),S=U(()=>_.value===`dark`?`dark`:`light`),C=U(()=>_.value===`dark`?`darkEnd`:`lightEnd`),E=U(()=>hb.find(e=>e.id===n.value.preset)?.name||`自定义`);f([x,_],()=>{v.value=x.value[S.value],y.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=Sb(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=Sb(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=!yb(n),b.value||A({[t?C.value:S.value]:n.toUpperCase()})}let M=U(()=>wb(x.value,_.value===`dark`).text);return(e,t)=>(u(),F(`section`,Nb,[D(`div`,Pb,[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`,Fb,[t[18]||=D(`h4`,null,`预设样式`,-1),t[19]||=D(`p`,{class:`bubble-hint`},`点击即可应用`,-1),D(`div`,Ib,[(u(!0),F(T,null,p(V(hb),e=>(u(),F(`button`,{key:e.id,type:`button`,"aria-pressed":V(n).preset===e.id,"data-testid":`bubble-preset-${e.id}`,onClick:t=>V(o)(e.id)},[D(`span`,{class:`preset-sample`,"data-bubble-theme":_.value,"aria-hidden":`true`},[D(`span`,{class:`chat-bubble sample-user`,style:s(V(Tb)(V(vb)(e.id).user,`user`))},`你好`,4),D(`span`,{class:`chat-bubble sample-assistant`,style:s(V(Tb)(V(vb)(e.id).assistant,`assistant`))},`我在`,4)],8,Rb),V(n).preset===e.id?(u(),k(Y,{key:0,class:`preset-check`,name:`check`,size:15})):z(``,!0),D(`strong`,null,h(e.name),1),D(`small`,null,h(e.detail),1)],8,Lb))),128))])]),D(`section`,zb,[t[28]||=D(`h4`,null,`自定义微调`,-1),D(`div`,Bb,[D(`button`,{type:`button`,"aria-pressed":m.value===`user`,onClick:t[0]||=e=>m.value=`user`},`我的气泡`,8,Vb),D(`button`,{type:`button`,"aria-pressed":m.value===`assistant`,onClick:t[1]||=e=>m.value=`assistant`},`助手气泡`,8,Hb)]),D(`div`,Ub,[t[20]||=D(`strong`,null,`背景`,-1),D(`div`,Wb,[D(`button`,{type:`button`,"aria-pressed":!x.value.gradient,onClick:t[2]||=e=>A({gradient:!1})},`纯色`,8,Gb),D(`button`,{type:`button`,"aria-pressed":x.value.gradient,onClick:t[3]||=e=>A({gradient:!0})},`渐变`,8,Kb)])]),D(`div`,qb,[(u(!0),F(T,null,p(V(gb),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:s({background:e,color:V(Sb)(e)})},[x.value[S.value]===e?(u(),k(Y,{key:0,name:`check`,size:18})):z(``,!0)],4)],8,Jb))),128))]),D(`label`,Yb,[D(`span`,null,h(x.value.gradient?`起始颜色`:`自定义颜色`),1),D(`div`,Xb,[D(`input`,{type:`color`,value:x.value[S.value],"aria-label":`选择自定义颜色`,onChange:t[4]||=e=>j(e.target.value)},null,40,Zb),d(D(`input`,{"onUpdate:modelValue":t[5]||=e=>v.value=e,"aria-label":`颜色十六进制值`,maxlength:`7`,spellcheck:`false`,"aria-invalid":b.value,onChange:t[6]||=e=>j(v.value),onKeydown:t[7]||=Ie(e=>j(v.value),[`enter`])},null,40,Qb),[[Q,v.value]])])]),x.value.gradient?(u(),F(`label`,$b,[t[21]||=D(`span`,null,`结束颜色`,-1),D(`div`,ex,[D(`input`,{type:`color`,value:x.value[C.value],"aria-label":`选择渐变结束颜色`,onChange:t[8]||=e=>j(e.target.value,!0)},null,40,tx),d(D(`input`,{"onUpdate:modelValue":t[9]||=e=>y.value=e,"aria-label":`渐变结束颜色值`,maxlength:`7`,"aria-invalid":b.value,onChange:t[10]||=e=>j(y.value,!0)},null,40,nx),[[Q,y.value]])])])):z(``,!0),b.value?(u(),F(`p`,rx,`请输入有效的六位颜色,例如 #E4F3FC。`)):z(``,!0),D(`div`,ix,[t[23]||=D(`span`,null,`文字颜色`,-1),D(`span`,ax,[D(`i`,{style:s({background:M.value})},null,4),t[22]||=w(`自动适配`,-1)])]),D(`details`,{class:`bubble-shape`,open:g.value},[D(`summary`,null,[t[24]||=w(`圆角、边框与尾巴`,-1),W(Y,{name:`chevron-down`,size:16})]),D(`div`,sx,[D(`label`,cx,[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,lx),D(`output`,null,h(x.value.radius),1)]),D(`label`,ux,[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,dx)]),D(`label`,fx,[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,px)])])],8,ox)])]),D(`aside`,{class:l([`bubble-preview`,{"preview-dark":_.value===`dark`}]),"data-bubble-theme":_.value,"aria-label":`实时预览`},[D(`header`,null,[t[31]||=D(`h4`,null,`实时预览`,-1),D(`div`,hx,[D(`button`,{type:`button`,"aria-label":`预览浅色气泡`,"aria-pressed":_.value===`light`,onClick:t[14]||=e=>_.value=`light`},[W(Y,{name:`sun`,size:18})],8,gx),D(`button`,{type:`button`,"aria-label":`预览深色气泡`,"aria-pressed":_.value===`dark`,onClick:t[15]||=e=>_.value=`dark`},[W(Y,{name:`moon`,size:18})],8,_x)])]),D(`div`,vx,[D(`div`,yx,[D(`div`,{class:`chat-bubble`,style:s(V(Tb)(V(n).user,`user`))},`帮我整理今天的工作重点。`,4)]),D(`div`,bx,[W(Ye,{name:`Yaovi助手`,size:30,animated:!1}),D(`div`,null,[t[32]||=D(`small`,null,`Yaovi助手`,-1),D(`div`,{class:`chat-bubble`,style:s(V(Tb)(V(n).assistant,`assistant`))},`当然,我们先聚焦三件事。`,4)])]),D(`div`,xx,[W(Ye,{name:`Yaovi助手`,size:30,animated:!1}),D(`div`,null,[t[34]||=D(`small`,null,`Yaovi助手`,-1),D(`div`,{class:`chat-bubble`,style:s(V(Tb)(V(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`,Sx,[D(`div`,{class:`chat-bubble`,style:s(V(Tb)(V(n).user,`user`))},`这样看起来更清楚了。`,4)])]),D(`div`,Cx,[W(Y,{name:`paperclip`,size:19}),t[35]||=D(`span`,null,`畅所欲言`,-1),W(Y,{name:`arrow-up`,size:18})])],10,mx),D(`footer`,wx,[D(`button`,{type:`button`,onClick:t[16]||=e=>V(o)(`current`)},`恢复默认`),D(`span`,Tx,h(V(i)||`已应用 ${E.value}`),1),V(r)?(u(),F(`button`,{key:0,type:`button`,class:`bubble-undo`,onClick:t[17]||=(...e)=>V(c)&&V(c)(...e)},`撤销`)):z(``,!0)])]))}}),[[`__scopeId`,`data-v-83914b72`]]),Dx=O(),Ox=[`aria-busy`],kx={key:0,role:`status`},Ax={key:1,role:`status`},jx={key:2,role:`alert`},Mx={key:3,role:`status`},Nx=[`disabled`],Px={key:4},Fx={key:0},Ix={key:0,class:`bot-approvals`},Lx={key:0},Rx={key:1},zx={key:0},Bx={key:1},Vx={key:2},Hx=[`disabled`,`onClick`],Ux={key:1,class:`credential-drafts`},Wx={key:0},Gx={class:`actions`},Kx=[`disabled`,`title`,`onClick`],qx=[`disabled`,`onClick`],Jx=[`disabled`],Yx=[`disabled`],Xx=[`disabled`],Zx=[`disabled`],Qx=[`disabled`],$x=[`disabled`],eS={class:`actions`},tS=[`disabled`],nS=[`disabled`],rS=[`disabled`],iS={key:0},aS={key:1},oS={key:0},sS={class:`actions`},cS=[`disabled`,`onClick`],lS=[`disabled`,`onClick`],uS=[`disabled`],dS={key:0,role:`status`},fS={key:1},pS=[`disabled`],mS=[`disabled`],hS={key:0,value:`api`},gS={key:1,value:`env`},_S=[`disabled`],vS=[`required`,`disabled`],yS={key:3},bS=[`disabled`],xS={key:4},SS=[`disabled`],CS={key:5},wS=[`disabled`],TS=[`required`,`disabled`],ES={key:7},DS=[`required`,`disabled`],OS=[`required`,`disabled`],kS={key:2},AS={key:3},jS={key:8},MS=[`disabled`],NS={key:9,class:`checkbox-field`},PS=[`disabled`],FS={key:10},IS={key:11,class:`advanced-connection`},LS=[`disabled`],RS=[`disabled`],zS={key:12,class:`checkbox-field`},BS=[`disabled`],VS=[`disabled`],HS=[`disabled`],US=[`disabled`],WS=[`disabled`],GS=[`disabled`],KS=[`disabled`],qS=[`disabled`],JS=[`disabled`],YS=[`disabled`],XS={key:0},ZS=[`disabled`],QS={key:1},$S=[`disabled`],eC={key:2},tC=[`disabled`],nC={key:3},rC=[`disabled`],iC={key:0},aC={key:0},oC=[`disabled`],sC={value:``},cC=[`value`],lC={class:`actions`},uC=[`disabled`],dC=[`disabled`],fC=[`disabled`],pC=[`value`],mC=[`disabled`],hC=[`value`],gC={key:0},_C=[`disabled`],vC=[`disabled`,`onClick`],yC=[`disabled`],bC=[`value`],xC=[`disabled`],SC=[`value`],CC=[`disabled`],wC={key:0},TC=[`disabled`],EC=[`disabled`,`onClick`],DC=[`disabled`],OC=[`disabled`],kC={key:5},AC=H(E({__name:`CredentialVaultPanel`,setup(e){let t=O(),n=O(!1),r=O(``),a=O(``),o=O(``),s=O(``),c=O(``),l=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 H=U(()=>A.value?.target.kind===`ssh`&&y.value===`ssh`&&I.value!==(A.value.target.auth??`privateKey`)),W=U(()=>!A.value||H.value),G=U(()=>t.value?.entries.find(e=>e.id===N.value)),K=U(()=>G.value?.target.kind===`ssh`&&!G.value.target.hostKey),ee=O(!1),te=O(`ssh.exec`),q=O(`/usr/bin/uptime`),J=O(``),ne=O(``),re=O(65536),ie=O(!1),ae=O(`/login`),oe=O(`/login`),se=O(`/account`),Y=O(``),ce=O(`login`),le=O(`username`),ue=O(`password`),de=O(`#login-success`),fe,pe=!0,me=new Set;function he(){o.value=``,s.value=``,c.value=``,l.value=``,g.value=``,ne.value=``,ie.value=!1}function ge(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 _e(e,t=`GET`,n){let r=new AbortController;me.add(r);try{return await X(`/api/app/vault`+e,{method:t,...n?{body:n}:{},signal:r.signal,timeoutMs:2e4,notifyUnauthorized:!1})}finally{me.delete(r)}}async function ve(){let e=await _e(``);if(!pe)return;let n=t.value?.unlocked;t.value=e,(!e.online||n&&!e.unlocked)&&(he(),j.value=!1,x.value=``),ye()}function ye(){let e=Dx.value;if(!e||!t.value)return;let n=t.value.drafts?.find(t=>t.id===e);if(!n){Dx.value=void 0;return}if(!t.value.unlocked){a.value=`请先解锁密码库,随后自动打开草稿「`+n.name+`」补全。`;return}Dx.value=void 0,xe(n)}f(Dx,()=>ye());let be=e=>({website:`网站`,ssh:`SSH`,"api-token":`API Token`,env:`环境变量`})[e];function xe(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 Se(e){await Ce(async()=>{await _e(`/drafts/`+e.id+`/dismiss`,`POST`,{})},`草稿已驳回,不会进入密码库`)}async function Ce(e,t){if(!n.value){n.value=!0,r.value=``,a.value=``;try{await e(),pe&&(a.value=t,await ve())}catch(e){pe&&(a.value=``,r.value=ge(e))}finally{he(),n.value=!1}}}async function we(){if(o.value!==s.value){r.value=`两次主密码不一致`;return}await Ce(async()=>{await _e(`/initialize`,`POST`,{password:o.value})},`密码库已创建,仍保持锁定`)}async function Te(){await Ce(async()=>{await _e(`/unlock`,`POST`,{password:o.value,seconds:300})},t.value?.storageMode===`local`?`已解锁管理 5 分钟;已授权 Bot 的使用不受此期限影响。`:`已手动解锁 5 分钟;Bot 使用凭据仍需要逐任务授权。`)}async function Ee(){he(),j.value=!1,await Ce(async()=>{await _e(`/lock`,`POST`,{})},t.value?.storageMode===`local`?`管理界面已锁定;已授权 Bot 仍可使用。`:`密码库已锁定,任务授权已撤销`)}function De(e){B.value=``,x.value=``,b.value=e?.target.kind===`env`?e.target.name:``,he(),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`,ee.value=!!e?.usage,te.value=e?.usage&&[`ssh.exec`,`sftp.read`,`sftp.write`].includes(e.usage.kind)?e.usage.kind:`ssh.exec`,q.value=e?.usage?.kind===`ssh.exec`?e.usage.command:`/usr/bin/uptime`,J.value=e?.usage&&(e.usage.kind===`sftp.read`||e.usage.kind===`sftp.write`)?e.usage.remotePath:``,re.value=e?.usage?.kind===`sftp.read`?e.usage.maxBytes:65536;let t=e?.usage?.kind===`website.form`?e.usage:void 0;ae.value=t?.loginPath??`/login`,oe.value=t?.submitPath??`/login`,se.value=t?.successPath??`/account`,Y.value=t?.logoutPath??``,ce.value=t?.formId??`login`,le.value=t?.usernameName??`username`,ue.value=t?.passwordName??`password`,de.value=t?.successSelector??`#login-success`,j.value=!0}function Oe(){l.value=``,g.value=``,ie.value=!1}async function ke(){if(W.value&&!l.value){r.value=H.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`}:ee.value?y.value===`website`?{kind:`website.form`,loginPath:ae.value,submitPath:oe.value,successPath:se.value,...Y.value?{logoutPath:Y.value}:{},formId:ce.value,usernameName:le.value,passwordName:ue.value,successSelector:de.value}:te.value===`ssh.exec`?{kind:`ssh.exec`,command:q.value}:te.value===`sftp.read`?{kind:`sftp.read`,remotePath:J.value,maxBytes:re.value}:{kind:`sftp.write`,remotePath:J.value,...ne.value||!A.value||A.value.usage?.kind!==`sftp.write`?{contents:ne.value}:{}}:void 0,i={name:_.value,...y.value===`api`||y.value===`env`?{}:{username:v.value},target:e,...n?{usage:n}:{},...l.value?{secret:l.value}:{},...y.value===`ssh`&&I.value===`privateKey`?ie.value?{passphrase:``}:g.value?{passphrase:g.value}:{}:{},...A.value?{revision:A.value.revision}:{}},a=t.value?.storageMode===`local`&&(ee.value||y.value===`ssh`||y.value===`api`||y.value===`env`)?B.value:``,o=A.value?``:x.value;await Ce(async()=>{let e=await _e(A.value?`/entries/`+A.value.id:`/entries`,A.value?`PUT`:`POST`,i);if(j.value=!1,o&&(x.value=``,await _e(`/drafts/`+o+`/confirm`,`POST`,{credentialRef:e.id})),a)try{await _e(`/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 Ce(async()=>{await _e(`/entries/`+e.id,`DELETE`)},`凭据已删除,相关任务授权已撤销`)}async function je(){let e=t.value?.tasks.find(e=>e.workId===M.value);e&&await Ce(async()=>{await _e(`/leases`,`POST`,{credentialRef:N.value,agentId:e.agentId,workId:e.workId,operation:P.value,seconds:60})},`已授予此任务 60 秒;只执行已配置的操作,密码与执行正文不回显。`)}async function Me(){await Ce(async()=>{await _e(`/bot-grant`,`POST`,{credentialRef:N.value,agentId:R.value})},`此 Bot 已获持续授权;返回聊天即可使用,直到你撤销。`)}function Pe(){let e=G.value?.usage;e&&(P.value=e.kind===`website.form`?`website.login`:e.kind)}function Fe(e){M.value=e.workId,N.value=e.credentialRef,P.value=e.operation}function Ie(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 Le(){await Ce(async()=>{let e=await _e(`/backup`,`POST`,{});if(!pe)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 Re(e){let t=e.target,n=t.files?.[0];if(n){if(n.size>2097152){r.value=`备份文件超过大小限制`,t.value=``;return}try{await Ce(async()=>{let e=await n.text();pe&&await _e(`/restore`,`POST`,{archive:e,password:o.value})},`备份已验证并恢复,仍保持锁定`)}finally{t.value=``}}}async function ze(){await Ce(async()=>{await _e(`/rotate`,`POST`,{password:c.value})},`主密码与加密密钥已轮换,密码库已锁定;旧备份仍使用旧主密码`)}function Be(){he(),j.value=!1;for(let e of me)e.abort();me.clear(),(t.value?.unlocked||n.value)&&X(`/api/app/vault/lock`,{method:`POST`,body:{},timeoutMs:5e3}).catch(()=>{})}function Ve(){document.hidden&&Be()}return m(async()=>{try{await ve()}catch{r.value=`无法读取执行节点密码库状态`}fe=setInterval(()=>{pe&&!n.value&&ve().catch(()=>{t.value=void 0,he()})},3e3),document.addEventListener(`visibilitychange`,Ve)}),i(()=>{pe=!1,clearInterval(fe),document.removeEventListener(`visibilitychange`,Ve),Be(),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`,kx,`选择凭据和 Bot,授权一次即可使用,直到你撤销。关闭管理页、到期或重启服务不会撤销 Bot 授权;操作在Yaovi服务器执行,密码不交给模型。`)):(u(),F(`p`,Ax,h(t.value?.execution===`protected-adapters`?`受控执行器已取得人工部署批准:仅支持配置的标准表单、固定 SSH 命令和指定 SFTP 文件;仍须逐任务授权。`:`受控网站与 SSH/SFTP 执行尚未启用。隔离部署批准前,由你人工接管。`),1)),r.value?(u(),F(`p`,jx,h(r.value),1)):z(``,!0),a.value?(u(),F(`p`,Mx,h(a.value),1)):z(``,!0),D(`button`,{type:`button`,disabled:n.value,onClick:i[0]||=e=>Ce(ve,`状态已刷新`)},`刷新状态`,8,Nx),t.value?.online?(u(),F(T,{key:5},[D(`p`,null,[w(h(t.value.unlocked?`已解锁`:`已锁定`),1),t.value.unlockExpiresAt?(u(),F(`span`,Fx,` · `+h(new Date(t.value.unlockExpiresAt).toLocaleTimeString())+` 到期`,1)):z(``,!0)]),t.value.storageMode===`local`?(u(),F(`div`,Ix,[t.value.botGrants?.length?(u(),F(`ul`,Rx,[(u(!0),F(T,null,p(t.value.botGrants,e=>(u(),F(`li`,{key:e.credentialRef+e.agentId},[w(h(e.name)+` → `+h(t.value.bots?.find(t=>t.id===e.agentId)?.name??`Bot`)+` · 已持续授权`,1),e.operation===`ssh.exec`?(u(),F(`span`,zx,` · SSH 全部命令`)):z(``,!0),e.operation===`env.inject`?(u(),F(`span`,Bx,` · 环境变量`)):z(``,!0),e.grantedBy?(u(),F(`span`,Vx,` · 由`+h(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=>Ce(async()=>{await _e(`/bot-revoke`,`POST`,{credentialRef:e.credentialRef,agentId:e.agentId})},`Bot 授权已撤销`)},`撤销 Bot 授权`,8,Hx)]))),128))])):(u(),F(`p`,Lx,`尚未授权任何 Bot。解锁后编辑凭据,选择允许使用的 Bot 并保存。`))])):z(``,!0),t.value.drafts?.length?(u(),F(`div`,Ux,[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,h(e.name),1),D(`p`,null,[w(h(be(e.kind))+` · `+h(e.origin||(e.host?e.host+`:`+(e.port??22):``)||e.envName),1),e.username?(u(),F(`span`,Wx,` · `+h(e.username),1)):z(``,!0),w(` · 来自 `+h(e.agentName||`Bot`),1)]),D(`p`,null,h(e.purpose),1),D(`div`,Gx,[D(`button`,{type:`button`,disabled:n.value||!t.value.unlocked,title:t.value.unlocked?``:`请先解锁`,onClick:t=>xe(e)},`去补全`,8,Kx),D(`button`,{type:`button`,disabled:n.value,onClick:t=>Se(e)},`驳回`,8,qx)])]))),128))])])):z(``,!0),t.value.initialized?t.value.unlocked?(u(),F(T,{key:4},[D(`div`,eS,[D(`button`,{type:`button`,disabled:n.value,onClick:Ee},h(t.value.storageMode===`local`?`锁定管理界面`:`立即锁定并撤销授权`),9,tS),D(`button`,{type:`button`,disabled:n.value,onClick:i[4]||=e=>De()},`添加凭据`,8,nS),D(`button`,{type:`button`,disabled:n.value,onClick:Le},`导出加密备份`,8,rS)]),D(`ul`,null,[(u(!0),F(T,null,p(t.value.entries,e=>(u(),F(`li`,{key:e.id},[D(`strong`,null,h(e.name),1),D(`p`,null,[w(h(e.username)+` · `+h(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`,iS,` · `+h(e.target.auth===`password`?`密码登录`:`私钥登录`),1)):z(``,!0),e.target.kind===`api`?(u(),F(`span`,aS,` · `+h(e.accountLabel||`API Token`)+` · `+h(L(e)),1)):z(``,!0)]),t.value.storageMode===`local`?(u(),F(`p`,oS,h(V(e.id)?`已持续授权:`+V(e.id):`未授权给 Bot`),1)):z(``,!0),D(`code`,null,h(e.id),1),D(`div`,sS,[D(`button`,{type:`button`,disabled:n.value,onClick:t=>De(e)},`编辑`,8,cS),D(`button`,{type:`button`,disabled:n.value,onClick:t=>Ae(e)},`删除并撤权`,8,lS)])]))),128))]),j.value?(u(),F(`form`,{key:0,onSubmit:Z(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,uS),[[Q,_.value]])]),x.value?(u(),F(`p`,dS,`正在补全 Bot 起草的凭据:填写秘密后保存,草稿才会进入密码库。`)):z(``,!0),y.value!==`api`&&y.value!==`env`?(u(),F(`label`,fS,[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,pS),[[Q,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`,hS,`API Token`)):z(``,!0),t.value.storageMode===`local`?(u(),F(`option`,gS,`环境变量`)):z(``,!0)],40,mS),[[Ne,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,_S),[[Q,b.value]])]),D(`label`,null,[i[56]||=w(`变量值`,-1),d(D(`input`,{"onUpdate:modelValue":i[9]||=e=>l.value=e,type:`password`,autocomplete:`new-password`,required:W.value,maxlength:`32768`,disabled:n.value},null,8,vS),[[Q,l.value]]),i[57]||=D(`small`,null,`加密保存;授权 Bot 运行时注入其进程环境(所有子进程可读取),不写入 .env,输出中出现原值会被替换。编辑留空保留原值。`,-1)])],64)):z(``,!0),y.value===`website`?(u(),F(`label`,yS,[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,bS),[[Q,S.value]])])):y.value===`ssh`?(u(),F(`label`,xS,[i[59]||=w(`SSH 主机`,-1),d(D(`input`,{"onUpdate:modelValue":i[11]||=e=>C.value=e,placeholder:`IP 地址或域名`,required:``,disabled:n.value},null,8,SS),[[Q,C.value]])])):z(``,!0),y.value===`ssh`?(u(),F(`label`,CS,[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,wS),[[Ne,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=>l.value=e,type:`password`,autocomplete:`new-password`,required:W.value,maxlength:`8192`,disabled:n.value},null,8,TS),[[Q,l.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`,ES,[w(h(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=>l.value=e,type:`password`,autocomplete:`new-password`,required:W.value,maxlength:`32768`,disabled:n.value},null,8,DS)),[[Q,l.value]]):d((u(),F(`textarea`,{key:1,"onUpdate:modelValue":i[15]||=e=>l.value=e,autocomplete:`off`,required:W.value,maxlength:`32768`,disabled:n.value},null,8,OS)),[[Q,l.value]]),H.value?(u(),F(`small`,kS,`认证方式已更换,需要填写新的`+h(I.value===`password`?`登录密码`:`私钥`)+`。`,1)):A.value?(u(),F(`small`,AS,`留空保留原值;没有秘密读取或回显接口。`)):z(``,!0)])):z(``,!0),y.value===`ssh`&&I.value===`privateKey`?(u(),F(`label`,jS,[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,MS),[[Q,g.value]])])):z(``,!0),y.value===`ssh`&&I.value===`privateKey`&&A.value?(u(),F(`label`,NS,[d(D(`input`,{"onUpdate:modelValue":i[17]||=e=>ie.value=e,type:`checkbox`,disabled:n.value},null,8,PS),[[Je,ie.value]]),i[66]||=w(`清除原私钥口令(留空输入默认保留)`,-1)])):z(``,!0),y.value===`ssh`&&t.value.storageMode===`local`?(u(),F(`p`,FS,`授权 Bot 后,允许全部远程 SSH 命令并读取输出,不需要预先填写命令。权限由 SSH 账号决定。`)):z(``,!0),y.value===`ssh`?(u(),F(`details`,IS,[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,LS),[[Q,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,RS),[[Q,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`,zS,[d(D(`input`,{"onUpdate:modelValue":i[20]||=e=>ee.value=e,type:`checkbox`,disabled:n.value||!!A.value?.usage},null,8,BS),[[Je,ee.value]]),i[71]||=w(`配置允许 Bot 执行的固定操作`,-1)])):z(``,!0),ee.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=>ae.value=e,required:``,disabled:n.value},null,8,VS),[[Q,ae.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,HS),[[Q,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,US),[[Q,se.value]])]),D(`label`,null,[i[75]||=w(`退出页路径(可选、仅批准的 GET)`,-1),d(D(`input`,{"onUpdate:modelValue":i[24]||=e=>Y.value=e,disabled:n.value},null,8,WS),[[Q,Y.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=>ce.value=e,required:``,disabled:n.value},null,8,GS),[[Q,ce.value]])]),D(`label`,null,[i[77]||=w(`用户名 input name`,-1),d(D(`input`,{"onUpdate:modelValue":i[26]||=e=>le.value=e,required:``,disabled:n.value},null,8,KS),[[Q,le.value]])]),D(`label`,null,[i[78]||=w(`密码 input name`,-1),d(D(`input`,{"onUpdate:modelValue":i[27]||=e=>ue.value=e,required:``,disabled:n.value},null,8,qS),[[Q,ue.value]])]),D(`label`,null,[i[79]||=w(`成功标记(#id 或 [data-…])`,-1),d(D(`input`,{"onUpdate:modelValue":i[28]||=e=>de.value=e,required:``,disabled:n.value},null,8,JS),[[Q,de.value]])])],64)):z(``,!0),ee.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=>te.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,YS),[[Ne,te.value]])]),te.value===`ssh.exec`?(u(),F(`label`,XS,[i[84]||=w(`批准的绝对可执行路径(无参数、无 shell 拼接)`,-1),d(D(`input`,{"onUpdate:modelValue":i[30]||=e=>q.value=e,required:``,disabled:n.value},null,8,ZS),[[Q,q.value]])])):(u(),F(`label`,QS,[i[85]||=w(`批准的远端绝对路径`,-1),d(D(`input`,{"onUpdate:modelValue":i[31]||=e=>J.value=e,required:``,disabled:n.value},null,8,$S),[[Q,J.value]])])),te.value===`sftp.read`?(u(),F(`label`,eC,[i[86]||=w(`最大读取字节数`,-1),d(D(`input`,{"onUpdate:modelValue":i[32]||=e=>re.value=e,type:`number`,min:`1`,max:`1048576`,required:``,disabled:n.value},null,8,tC),[[Q,re.value,void 0,{number:!0}]])])):z(``,!0),te.value===`sftp.write`?(u(),F(`label`,nC,[i[87]||=w(`固定写入正文(加密保存;最多 64 KiB)`,-1),d(D(`textarea`,{"onUpdate:modelValue":i[33]||=e=>ne.value=e,maxlength:`65536`,autocomplete:`off`,disabled:n.value},null,8,rC),[[Q,ne.value]]),A.value?.usage?.kind===`sftp.write`?(u(),F(`small`,iC,`留空保留原正文,不回显。写入仅创建新文件,不覆盖;中断需人工核对。`)):z(``,!0)])):z(``,!0),i[88]||=D(`p`,null,`首次使用会记住服务器,以后身份改变就停止连接。Bot 只收到退出码或字节数和校验,收不到密码、密钥、输出正文或文件正文。`,-1)],64)):z(``,!0),t.value.storageMode===`local`&&(ee.value||y.value===`ssh`||y.value===`api`||y.value===`env`)?(u(),F(T,{key:15},[A.value&&V(A.value.id)?(u(),F(`p`,aC,`已持续授权:`+h(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`,sC,h(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},h(e.name),9,cC))),128))],8,oC),[[Ne,B.value]]),i[90]||=D(`small`,null,`选择 Bot 后保存即授权,直到你撤销。`,-1)])],64)):z(``,!0),D(`div`,lC,[D(`button`,{disabled:n.value},h(B.value&&(ee.value||y.value===`ssh`||y.value===`api`||y.value===`env`)?`保存并授权 Bot`:`加密保存`),9,uC),D(`button`,{type:`button`,disabled:n.value,onClick:i[35]||=e=>{j.value=!1,x.value=``,he()}},`取消`,8,dC)])],32)):z(``,!0),t.value.storageMode===`local`?(u(),F(`form`,{key:1,onSubmit:Z(Me,[`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:Pe},[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},h(e.name),9,pC))),128))],40,fC),[[Ne,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},h(e.name),9,hC))),128))],8,mC),[[Ne,R.value]])]),D(`p`,null,h(G.value?.target.kind===`ssh`?`允许全部 SSH 命令并返回输出,Bot 可根据运维任务自行操作;权限由 SSH 账号决定。`:`允许操作:`+Ie(G.value)),1),K.value?(u(),F(`p`,gC,`首次使用会自动记住服务器指纹,授权时无需服务器在线。`)):z(``,!0),D(`button`,{disabled:n.value||!R.value||!G.value?.usage&&G.value?.target.kind!==`ssh`&&G.value?.target.kind!==`env`},`授权此 Bot 使用`,8,_C)],32)):(u(),F(`form`,{key:2,onSubmit:Z(je,[`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(h(t.value.tasks.find(t=>t.workId===e.workId)?.name??`任务`)+` · `+h(e.operation)+` · `+h(e.credentialRef)+` `,1),D(`button`,{type:`button`,disabled:n.value||!t.value.entries.some(t=>t.id===e.credentialRef),onClick:t=>Fe(e)},`选择此请求,核对后授权`,8,vC)]))),128))]),D(`label`,null,[i[98]||=w(`凭据`,-1),d(D(`select`,{"onUpdate:modelValue":i[38]||=e=>N.value=e,required:``,disabled:n.value,onChange:Pe},[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},h(e.name),9,bC))),128))],40,yC),[[Ne,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},h(e.name)+` · `+h(e.workId.slice(0,8)),9,SC))),128))],8,xC),[[Ne,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,CC),[[Ne,P.value]])]),D(`p`,null,`批准的使用计划:`+h(Ie(G.value)),1),K.value?(u(),F(`p`,wC,`首次连接将自动记住这台服务器,之后身份变化会停止连接;无需手填指纹。`)):z(``,!0),D(`button`,{disabled:n.value||!t.value.tasks.length||!G.value?.usage},h(K.value?`确认服务器并授权本任务 60 秒`:`授予本任务 60 秒引用权限`),9,TC)],32)),D(`ul`,null,[(u(!0),F(T,null,p(t.value.leases,e=>(u(),F(`li`,{key:e.id},[w(h(e.workId.slice(0,8))+` · `+h(e.operation)+` · `+h(new Date(e.expiresAt).toLocaleTimeString()),1),D(`button`,{type:`button`,disabled:n.value,onClick:t=>Ce(async()=>{await _e(`/leases/`+e.id,`DELETE`)},`任务授权已撤销`)},`撤销`,8,EC)]))),128))]),D(`form`,{onSubmit:Z(ze,[`prevent`])},[D(`label`,null,[i[105]||=w(`新的主密码`,-1),d(D(`input`,{"onUpdate:modelValue":i[41]||=e=>c.value=e,type:`password`,autocomplete:`new-password`,minlength:`12`,maxlength:`1024`,required:``,disabled:n.value},null,8,DC),[[Q,c.value]])]),D(`button`,{disabled:n.value},`轮换主密码与加密密钥并锁定`,8,OC)],32)],64)):(u(),F(`form`,{key:3,onSubmit:Z(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,Qx),[[Q,o.value]])]),i[49]||=D(`p`,null,`先输入主密码解锁,即可添加和编辑凭据。`,-1),D(`button`,{disabled:n.value},`手动解锁 5 分钟`,8,$x)],32)):(u(),F(`form`,{key:2,onSubmit:Z(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,Jx),[[Q,o.value]])]),D(`label`,null,[i[45]||=w(`确认主密码`,-1),d(D(`input`,{"onUpdate:modelValue":i[2]||=e=>s.value=e,type:`password`,autocomplete:`new-password`,minlength:`12`,required:``,disabled:n.value},null,8,Yx),[[Q,s.value]])]),i[47]||=D(`p`,null,`请妥善保存主密码;没有主密码找回功能。备份只能恢复到身份相同、尚未初始化的密码库。`,-1),D(`button`,{disabled:n.value},`创建密码库`,8,Xx),D(`label`,null,[i[46]||=w(`或恢复加密备份`,-1),D(`input`,{type:`file`,accept:`.json,application/json`,disabled:n.value||o.value.length<12,onChange:Re},null,40,Zx)])],32)),t.value.requests.length?(u(),F(`p`,kC,`有 `+h(t.value.requests.length)+` 个任务等待`+h(t.value.storageMode===`local`?`你授权 Bot`:`人工解锁或授权`)+`。`,1)):z(``,!0)],64)):(u(),F(`p`,Px,`密码保险箱暂时不可用,请检查Yaovi数据目录权限;已配置独立密码库时,请检查该服务的私有连接。此处不会自动安装或启动服务。`))],8,Ox))}}),[[`__scopeId`,`data-v-1af2debd`]]),jC={key:0,class:`server-identity`,"aria-label":`服务器名称`},MC=[`disabled`],NC={key:0,role:`alert`},PC={key:1,role:`status`},FC=[`disabled`],IC=[`disabled`],LC=H(E({__name:`ServerIdentityPanel`,emits:[`dirty-change`],setup(e,{emit:t}){let n=ce(),r=O(``),i=O(``),a=O(0),o=O(``),s=O(!1),c=O(``),l=O(``),p=U(()=>n.user?.role===`admin`),m=U(()=>i.value!==o.value),g=t;f(m,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,()=>{m.value||_()},{immediate:!0});async function v(){await n.refreshServerIdentity(),_(),c.value=``}async function y(){s.value=!0,c.value=``,l.value=``;try{let e=await We(i.value,a.value,r.value);n.acceptServerIdentity(e),_(),l.value=`服务器名称已保存,三端同步显示。`}catch(e){c.value=e instanceof Error?e.message:`保存失败`}finally{s.value=!1}}return n.refreshServerIdentity(),(e,t)=>V(n).serverIdentity?(u(),F(`section`,jC,[t[4]||=D(`h3`,null,`服务器名称`,-1),p.value?(u(),F(`form`,{key:0,onSubmit:Z(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:s.value},null,8,MC),[[Q,i.value]])]),t[2]||=D(`p`,null,`该服务器上的机器人共用此名称,Web、iOS 和安卓同步。留空恢复服务器主机名。`,-1),c.value?(u(),F(`p`,NC,h(c.value),1)):z(``,!0),l.value?(u(),F(`p`,PC,h(l.value),1)):z(``,!0),D(`button`,{type:`submit`,disabled:s.value||!m.value},h(s.value?`保存中…`:`保存服务器名称`),9,FC),c.value?(u(),F(`button`,{key:2,type:`button`,disabled:s.value,onClick:v},`重新载入`,8,IC)):z(``,!0)],32)):(u(),F(T,{key:1},[D(`strong`,null,h(V(n).serverIdentity.displayName),1),t[3]||=D(`p`,null,`由服务器管理员设置,三端同步显示。`,-1)],64))])):z(``,!0)}}),[[`__scopeId`,`data-v-e1579b33`]]),RC={class:`account-security-panel`,"aria-label":`服务器资料`},zC={class:`account-avatar-card`,"aria-label":`账号头像`},BC=[`disabled`],VC=[`disabled`],HC=[`role`],UC=H(E({__name:`AccountSecurityPanel`,props:{active:{type:Boolean,default:!0}},emits:[`dirty-change`],setup(e,{emit:t}){let n=e,r=t,i=ce(),a=O(``),o=O(``),s=O(),c=O(!1),d=O(!1),p=U(()=>i.accountDisplayName||i.user?.displayName||i.user?.username||`服务器`);function m(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 g(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 _(e){let t=e.target,n=t.files?.[0];if(n){c.value=!0,a.value=``,o.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 g(await m(n))),o.value=`账号头像已更新,iOS 下次打开 Bot 模式时会同步显示`}catch(e){a.value=e instanceof Error?e.message:`保存头像失败`}finally{c.value=!1,t.value=``}}}async function v(){c.value=!0,a.value=``,o.value=``;try{await i.updateAccountAvatar(null),o.value=`已恢复首字母头像`}catch(e){a.value=e instanceof Error?e.message:`恢复头像失败`}finally{c.value=!1}}return f(()=>n.active,e=>{e&&(a.value=``,o.value=``)},{immediate:!0}),f(d,e=>r(`dirty-change`,e),{immediate:!0,flush:`sync`}),(e,t)=>(u(),F(`section`,RC,[D(`section`,zC,[W(Ky,{name:p.value,"image-url":V(i).user?.avatar,size:64},null,8,[`name`,`image-url`]),D(`div`,null,[D(`strong`,null,h(p.value),1),t[2]||=D(`small`,null,`头像会同步到你的其他设备。`,-1)]),D(`button`,{type:`button`,disabled:c.value,onClick:t[0]||=e=>s.value?.click()},h(c.value?`正在保存…`:`更换头像`),9,BC),V(i).user?.avatar?(u(),F(`button`,{key:0,type:`button`,disabled:c.value,onClick:v},`使用首字母`,8,VC)):z(``,!0),D(`input`,{ref_key:`avatarInput`,ref:s,class:`sr-only`,type:`file`,tabindex:`-1`,"aria-hidden":`true`,accept:`image/png,image/jpeg,image/webp`,onChange:_},null,544)]),V(i).serverIdentity?(u(),k(LC,{key:0,onDirtyChange:t[1]||=e=>d.value=e})):z(``,!0),a.value||o.value?(u(),F(`p`,{key:1,class:l([`form-message`,a.value?`form-message--error`:`form-message--success`]),role:a.value?`alert`:`status`},h(a.value||o.value),11,HC)):z(``,!0)]))}}),[[`__scopeId`,`data-v-9d940006`]]),WC=[{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 长期了解的信息`}],GC=[`aria-busy`],KC={key:0,role:`status`},qC={key:1,role:`alert`,class:`error`},JC={key:2,role:`status`,class:`notice`},YC={key:3,role:`status`,class:`conflict`},XC=[`disabled`],ZC=[`id`],QC=[`disabled`],$C={class:`check`},ew={class:`check`},tw=[`disabled`],nw=[`disabled`],rw=[`for`],iw=[`id`,`onUpdate:modelValue`,`name`,`maxlength`,`placeholder`],aw=[`id`,`onUpdate:modelValue`,`name`,`maxlength`,`placeholder`,`rows`],ow={class:`check field-lock`},sw=[`value`,`aria-label`],cw={key:6,class:`history`},lw={class:`updated`},uw=[`disabled`,`aria-expanded`],dw={key:0},fw={key:0},pw={class:`previous`},mw={key:1},hw={key:2,class:`source`},gw=[`disabled`,`onClick`],_w=[`disabled`],vw=`/api/app/user-profile`,yw=H(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(),s=O(),c=O(null),l=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=U(()=>!!o.value&&!!s.value&&j(o.value)!==j(s.value));f(M,e=>{a(`dirty-change`,e),a(`can-save-change`,e&&!l.value)},{immediate:!0}),f(l,e=>{a(`busy-change`,e),a(`can-save-change`,M.value&&!e)});function N(e){o.value=A(e.profile),s.value=A(e.profile),c.value=e.mainBot,y.value=!1}async function P(e=!1){let t=++k;try{let n=await X(vw);if(E||t!==k)return;if(c.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 X(`${vw}/history?offset=${e}`);E||(x.value=e?[...x.value,...t.revisions]:t.revisions,S.value=t.nextOffset)}async function L(e){if(!l.value){k++,l.value=!0,_.value=``,v.value=``;try{await e()}catch(e){_.value=e instanceof Error?e.message:`用户资料操作失败`}finally{l.value=!1}}}async function R(){if(!s.value||!o.value||!M.value)return;let e=s.value;await L(async()=>{let t=await X(vw,{method:`PUT`,body:{requestId:He(),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 B(){M.value&&!window.confirm(`重新载入会替换当前未保存的草稿,是否继续?`)||await L(()=>P())}async function H(){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 X(`${vw}/restore`,{method:`POST`,body:{requestId:He(),expectedRevision:o.value.revision,id:e.id}});E||(N(t),await I(),v.value=`资料内容已恢复,下一轮对话生效。`)})}function G(){o.value&&(s.value=A(o.value)),_.value=``,v.value=``}let K=e=>WC.filter(t=>e.before.fields[t.key]!==e.after.fields[t.key]);return m(async()=>{await P(),E||(C=setInterval(()=>{l.value||P(!0)},5e3))}),i(()=>{E=!0,clearInterval(C)}),t({reset:G}),(e,t)=>(u(),F(`section`,{class:`user-profile-panel`,"aria-label":`全局用户资料`,"aria-busy":l.value||g.value},[t[9]||=D(`p`,{class:`intro`},`填写一次,让已授权的 Bot 了解你的背景和偏好。资料独立于各个 Bot 保存,没有 Bot 时也可以先填写。`,-1),g.value?(u(),F(`p`,KC,`正在读取用户资料…`)):z(``,!0),_.value?(u(),F(`p`,qC,h(_.value),1)):z(``,!0),v.value?(u(),F(`p`,JC,h(v.value),1)):z(``,!0),y.value?(u(),F(`p`,YC,`其他设备或主 Bot 已更新资料,当前草稿仍保留。请核对后重新载入。`)):z(``,!0),_.value||y.value?(u(),F(`button`,{key:4,type:`button`,disabled:l.value,onClick:B},`重新载入`,8,XC)):z(``,!0),s.value?(u(),F(`form`,{key:5,id:r.formId,onSubmit:Z(R,[`prevent`])},[D(`fieldset`,{disabled:l.value},[t[6]||=D(`legend`,null,`共享与维护`,-1),D(`label`,$C,[d(D(`input`,{"onUpdate:modelValue":t[0]||=e=>s.value.shared=e,type:`checkbox`},null,512),[[Je,s.value.shared]]),t[4]||=w(`向 Bot 提供用户资料`,-1)]),t[7]||=D(`small`,null,`持久 Bot 在每轮对话开始时加载,遵循共享资料读取权限;临时子任务不自动获得资料。`,-1),D(`label`,ew,[d(D(`input`,{"onUpdate:modelValue":t[1]||=e=>s.value.mainBotEditable=e,type:`checkbox`,disabled:!s.value.shared},null,8,tw),[[Je,s.value.mainBotEditable]]),t[5]||=w(`允许当前主 Bot 维护未锁定的字段`,-1)]),D(`small`,null,h(c.value?`当前主 Bot:${c.value.name}。更换主 Bot 后,维护资格随之转移。`:`尚未指定主 Bot。可在“执行与技能 → 我的 Bot”中设置;你仍可直接编辑资料。`),1)],8,QC),D(`fieldset`,{disabled:l.value},[t[8]||=D(`legend`,null,`关于你`,-1),(u(!0),F(T,null,p(V(WC),e=>(u(),F(`div`,{key:e.key,class:`profile-field`},[D(`label`,{for:`user-profile-${e.key}`},h(e.label),9,rw),e.maxLength<=100?d((u(),F(`input`,{key:0,id:`user-profile-${e.key}`,"onUpdate:modelValue":t=>s.value.fields[e.key]=t,name:e.key,maxlength:e.maxLength,placeholder:e.placeholder},null,8,iw)),[[Q,s.value.fields[e.key]]]):d((u(),F(`textarea`,{key:1,id:`user-profile-${e.key}`,"onUpdate:modelValue":t=>s.value.fields[e.key]=t,name:e.key,maxlength:e.maxLength,placeholder:e.placeholder,rows:e.key===`notes`?4:3},null,8,aw)),[[Q,s.value.fields[e.key]]]),D(`label`,ow,[d(D(`input`,{"onUpdate:modelValue":t[2]||=e=>s.value.lockedFields=e,type:`checkbox`,value:e.key,"aria-label":`锁定${e.label},仅我可修改`},null,8,sw),[[Je,s.value.lockedFields]]),w(`仅我可修改`+h(s.value.lockedFields.includes(e.key)?` · 已锁定`:``),1)])]))),128))],8,nw)],40,ZC)):z(``,!0),o.value?(u(),F(`div`,cw,[D(`p`,lw,h(o.value.updatedAt?`版本 ${o.value.revision} · ${o.value.updatedBy?.name??`用户`}更新于 ${new Date(o.value.updatedAt).toLocaleString()}`:`尚未填写资料`),1),D(`button`,{type:`button`,disabled:l.value,"aria-expanded":b.value,onClick:H},h(b.value?`收起修订记录`:`查看修订记录`),9,uw),b.value?(u(),F(T,{key:0},[x.value.length?z(``,!0):(u(),F(`p`,dw,`暂无修订记录。`)),(u(!0),F(T,null,p(x.value,e=>(u(),F(`article`,{key:e.id},[D(`strong`,null,`版本 `+h(e.revision)+` · `+h(e.after.updatedBy?.name)+` · `+h(e.operation===`restore`?`恢复`:`更新`),1),D(`small`,null,h(new Date(e.after.updatedAt).toLocaleString()),1),K(e).length?(u(),F(`dl`,fw,[(u(!0),F(T,null,p(K(e),t=>(u(),F(T,{key:t.key},[D(`dt`,null,h(t.label),1),D(`dd`,null,[D(`span`,pw,`原内容:`+h(e.before.fields[t.key]||`未填写`),1),D(`span`,null,`新内容:`+h(e.after.fields[t.key]||`未填写`),1)])],64))),128))])):(u(),F(`p`,mw,`共享、主 Bot 维护开关或字段锁定已更新。`)),e.source?(u(),F(`p`,hw,`依据:`+h(e.source.quote),1)):z(``,!0),D(`button`,{type:`button`,disabled:l.value||M.value||e.revision===o.value.revision,onClick:t=>W(e)},`恢复此版本资料`,8,gw)]))),128)),S.value===void 0?z(``,!0):(u(),F(`button`,{key:1,type:`button`,disabled:l.value,onClick:t[3]||=e=>L(()=>I(S.value))},`加载更多修订`,8,_w))],64)):z(``,!0)])):z(``,!0)],8,GC))}}),[[`__scopeId`,`data-v-369c417c`]]),bw=[`aria-busy`],xw={key:0,class:`mode-status`},Sw={key:0},Cw={key:1,role:`status`},ww=[`disabled`],Tw=[`value`],Ew={class:`mode-note`},Dw={key:3,class:`mode-error`,role:`alert`},Ow={key:4,role:`status`},kw={class:`mode-actions`},Aw=[`disabled`],jw=[`disabled`],Mw=[`disabled`],Nw=H(E({__name:`DesktopModePanel`,setup(e){let t=window.yaoviDesktop,n=O(),r=O(`client`),i=O(!1),a=O(``),o=O(``),s=U(()=>[{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))),c=fe(),f=U(()=>!!n.value&&s.value.length>1);async function g(){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 _(){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 g()}catch(e){a.value=e instanceof Error?e.message:`切换运行模式未完成,请重试。`}finally{i.value=!1}}}async function v(){if(i.value=!0,a.value=``,o.value=``,fe()){ce().switchHost(),i.value=!1;return}try{await t.openRemoteLogin()}catch(e){a.value=e instanceof Error?e.message:`无法打开服务器登录页面。`}finally{i.value=!1}}return m(g),(e,m)=>(u(),F(`section`,{class:`desktop-mode-panel`,"aria-label":`服务器与客户端模式`,"aria-busy":i.value},[n.value?(u(),F(`div`,xw,[D(`strong`,null,`当前:`+h(n.value.mode===`client`?`客户端模式`:`服务器模式`),1),n.value.serverURL?(u(),F(`span`,Sw,h(n.value.serverURL),1)):z(``,!0)])):i.value?(u(),F(`p`,Cw,`正在读取运行模式…`)):z(``,!0),f.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(s.value,e=>(u(),F(`label`,{key:e.mode,class:l([`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,Tw),[[Ue,r.value]]),W(Y,{name:e.icon,size:22},null,8,[`name`]),D(`span`,null,[D(`strong`,null,h(e.title),1),D(`small`,null,h(e.description),1)])],2))),128))],8,ww)):z(``,!0),D(`p`,Ew,h(f.value?`切换后会打开对应服务的页面,并记住选择。`:`此客户端连接已有服务器。`)+`数据保留在原服务器;在“我的 Yaovi”中可切换到同账号的其他服务器。`,1),a.value?(u(),F(`p`,Dw,h(a.value),1)):z(``,!0),o.value?(u(),F(`p`,Ow,h(o.value),1)):z(``,!0),D(`div`,kw,[n.value?f.value?(u(),F(`button`,{key:1,class:`mode-primary`,type:`button`,disabled:i.value||n.value.switching||r.value===n.value.mode,onClick:_},h(i.value?`正在切换…`:r.value===n.value.mode?`正在使用此模式`:r.value===`client`?`切换为客户端`:`切换为服务器`),9,jw)):z(``,!0):(u(),F(`button`,{key:0,type:`button`,disabled:i.value,onClick:g},`重新读取`,8,Aw)),V(t)?.openRemoteLogin?(u(),F(`button`,{key:2,type:`button`,disabled:i.value||n.value?.switching,onClick:v},h(V(c)?`切换 Yaovi…`:`登录 Yaovi 账号…`),9,Mw)):z(``,!0)])],8,bw))}}),[[`__scopeId`,`data-v-3510fc25`]]),Pw=[`open`],Fw=[`disabled`],Iw=[`onUpdate:modelValue`],Lw=[`value`],Rw=[`onUpdate:modelValue`],zw={key:0,role:`alert`},Bw=[`disabled`],Vw={key:2,role:`alert`},Hw=[`disabled`],Uw={key:4,role:`status`},Ww=[`disabled`],Gw=H(E({__name:`HarnessMediaPanel`,props:{refreshVersion:{},initialExpanded:{type:Boolean}},emits:[`dirty-change`],setup(e,{emit:t}){let n=e,r=t,i=_({transcription:{connectionId:``,model:`gpt-4o-mini-transcribe`},speech:{connectionId:``,model:`gpt-4o-mini-tts`}}),a={transcription:`音频转录`,speech:`语音生成`},o=O([]),s=O(``),c=O(!1),l=O(``),g=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};s.value=JSON.stringify(i)}f(i,()=>r(`dirty-change`,!!s.value&&JSON.stringify(i)!==s.value),{deep:!0});async function E(){let e=++S;b.value=!0,y.value=!1,x.value=``;try{let t=await ar.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(!c.value){c.value=!0,l.value=``,g.value=``;try{C(await X(`/api/app/admin/openai/media`))}catch(e){l.value=e instanceof Error?e.message:`加载失败`,v.value=!0}finally{c.value=!1}}}m(()=>{k(),E()}),f(()=>n.refreshVersion,E);async function A(){if(!(c.value||!s.value||!y.value)){c.value=!0,l.value=``,g.value=``;try{C(await X(`/api/app/admin/openai/media`,{method:`PUT`,body:i})),r(`dirty-change`,!1),g.value=`已保存,下一次工具调用生效。`}catch(e){l.value=e instanceof Error?e.message:`保存失败`}finally{c.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:Z(A,[`prevent`])},[t[5]||=D(`p`,null,` 音频转录和语音生成可独立选择已配置的 API 连接。 `,-1),(u(),F(T,null,p(a,(e,n)=>D(`fieldset`,{key:n,disabled:c.value||!s.value||!y.value},[D(`legend`,null,h(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},h(e.name),9,Lw))),128))],8,Iw),[[Ne,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,Rw),[[Q,i[n].model]])]),t[4]||=D(`p`,null,` Codex 登录不提供这里的语音 API。使用语音前请选择已配置的 OpenAI API 连接。 `,-1)],8,Fw)),64)),l.value?(u(),F(`p`,zw,h(l.value),1)):z(``,!0),l.value?(u(),F(`button`,{key:1,type:`button`,disabled:c.value,onClick:k},h(s.value?`放弃修改并重新加载设置`:`重新加载设置`),9,Bw)):z(``,!0),x.value?(u(),F(`p`,Vw,h(x.value),1)):z(``,!0),x.value?(u(),F(`button`,{key:3,type:`button`,disabled:b.value,onClick:E},`重新加载连接`,8,Hw)):z(``,!0),g.value?(u(),F(`p`,Uw,h(g.value),1)):z(``,!0),D(`button`,{disabled:c.value||!s.value||!y.value,type:`submit`},h(c.value?`处理中…`:`保存语音设置`),9,Ww)],32)],40,Pw))}}),[[`__scopeId`,`data-v-a8a43ba7`]]),Kw=[`aria-busy`],qw={class:`note`},Jw={key:0,class:`error`,role:`alert`},Yw={key:1,role:`status`},Xw=[`onSubmit`],Zw={class:`name`},Qw=[`value`,`aria-label`,`disabled`,`onChange`],$w=[`value`],eT=[`value`],tT=[`onUpdate:modelValue`,`aria-label`,`disabled`],nT=[`value`],rT=[`value`],iT={key:1,class:`inherit`},aT=[`disabled`],oT=[`disabled`],sT=H(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(),s=O(!1),c=O(``),l=O(``),g=O({}),_=U(()=>JSON.stringify(g.value)!==JSON.stringify(r.value));f(_,e=>n(`dirty-change`,e)),f(s,e=>n(`busy-change`,e),{immediate:!0});let v=(e,t)=>t.label||jc[e]||e,y=U(()=>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(){s.value=!0,c.value=``;try{let[e,t]=await Promise.all([ar.auxiliary(),ar.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){c.value=e instanceof Error?e.message:`读取失败`}finally{s.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)){s.value=!0,c.value=``,l.value=``;try{let n=t.provider.trim();await ar.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]},l.value=`辅助模型已保存`}catch(e){c.value=e instanceof Error?e.message:`保存失败`}finally{s.value=!1}}}async function E(){if(window.confirm(`把所有辅助模型重置为跟随默认模型,并放弃未保存的修改?`)){s.value=!0;try{await ar.setModel({scope:`auxiliary`,task:`__reset__`,provider:`auto`,model:``}),await S()}catch(e){c.value=e instanceof Error?e.message:`重置失败`}finally{s.value=!1}}}return(e,t)=>(u(),F(`section`,{class:`hermes-aux`,"aria-busy":s.value,"aria-label":`辅助模型`},[t[2]||=D(`h4`,null,`辅助模型`,-1),D(`p`,qw,`选择已授权的供应商,或跟随默认模型 `+h(a.value.provider)+` / `+h(a.value.model)+`。Bot 可在资料中逐槽覆盖。`,1),c.value?(u(),F(`p`,Jw,h(c.value),1)):z(``,!0),l.value?(u(),F(`p`,Yw,h(l.value),1)):z(``,!0),(u(!0),F(T,null,p(i.value,e=>(u(),F(`form`,{key:e.task,class:`row`,onSubmit:Z(t=>w(e.task),[`prevent`])},[D(`span`,Zw,h(v(e.task,e)),1),D(`select`,{value:g.value[e.task].provider,"aria-label":`${e.task} 供应商`,disabled:s.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},h(e.name),9,$w))),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},h(g.value[e.task].provider)+`(未授权)`,9,eT)):z(``,!0)],40,Qw),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:s.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},h(e),9,nT))),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},h(g.value[e.task].model)+`(未授权)`,9,rT)):z(``,!0)],8,tT)),[[Ne,g.value[e.task].model]]):(u(),F(`span`,iT,`跟随默认模型`)),D(`button`,{type:`submit`,disabled:s.value||!x(e.task)},`保存`,8,aT)],40,Xw))),128)),D(`button`,{type:`button`,disabled:s.value,onClick:E},`全部跟随默认模型`,8,oT)],8,Kw))}}),[[`__scopeId`,`data-v-1c3d5e55`]]),cT=[`aria-label`,`aria-busy`],lT={class:`note`},uT={key:0,role:`status`},dT={key:1,class:`error`,role:`alert`},fT=[`disabled`],pT={key:0,class:`note`},mT={key:1},hT=[`aria-label`,`disabled`],gT=[`value`],_T={key:2,class:`note`},vT={key:3,class:`note`},yT={key:4,role:`status`},bT={key:5,class:`error`,role:`alert`},xT=[`disabled`],ST={key:7},CT=[`aria-label`,`disabled`],wT=[`value`],TT={key:8,class:`note`},ET={key:9,class:`note`},DT={key:10,class:`note`},OT={key:11,role:`status`},kT=[`disabled`],AT=H(E({__name:`HermesMediaPanel`,props:{toolset:{},refreshVersion:{}},emits:[`dirty-change`],setup(e,{emit:t}){let n=e,r=t,a=U(()=>n.toolset===`image_gen`?`图片模型`:`视频模型`),o=O(),s=O(),c=O(``),l=O(``),g=O(``),_=O(!1),v=O(!1),y=O(``),b=O(``),x=O(``),S=0,C=U(()=>o.value?.providers.filter(e=>e.status===`ready`)??[]),E=U(()=>C.value.find(e=>e.name===c.value)),k=U(()=>s.value?.models.find(e=>e.id===l.value)),A=U(()=>!!g.value&&JSON.stringify([c.value,l.value])!==g.value);f(A,e=>r(`dirty-change`,e));async function j(e,t=!1){let r=++S;v.value=!0,b.value=``,s.value=void 0;try{let i=await sr.models(n.toolset,e||void 0);if(r!==S)return;if(!i||!Array.isArray(i.models))throw Error(`模型列表返回不完整,请重新加载。`);s.value=i,(!t||!l.value)&&(l.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 sr.config(n.toolset);if(!e||!Array.isArray(e.providers))throw Error(`供应商列表返回不完整,请重新加载。`);o.value=e,t||(c.value=C.value.some(t=>t.name===e.active_provider)&&e.active_provider||``),await j(c.value,t),t||(g.value=JSON.stringify([c.value,l.value]))}catch(e){y.value=e instanceof Error?e.message:`设置加载失败`}finally{_.value=!1}}function N(){l.value=``,x.value=``,j(c.value)}async function P(){if(!(_.value||v.value||!o.value||!E.value||!s.value||b.value)){_.value=!0,y.value=``,x.value=``;try{let e=await sr.setProvider(n.toolset,c.value);x.value=`供应商已保存。`,s.value.has_models&&l.value&&await sr.setModel(n.toolset,l.value,c.value),g.value=JSON.stringify([c.value,l.value]),x.value=e.needs_nous_auth?`设置已保存,该供应商还需要在模型连接中完成账号授权。`:`${a.value}设置已保存,下一次生成生效。`,r(`dirty-change`,!1);let t=await sr.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,h(a.value),1),D(`p`,lT,`从模型连接里已授权的供应商中选择,用于`+h(e.toolset===`image_gen`?`生成或编辑图片`:`生成视频`)+`。`,1),_.value?(u(),F(`p`,uT,`正在加载或保存…`)):z(``,!0),y.value?(u(),F(`p`,dT,h(y.value),1)):z(``,!0),y.value?(u(),F(`button`,{key:2,type:`button`,disabled:_.value,onClick:n[0]||=e=>M(!0)},`重新加载设置`,8,fT)):z(``,!0),o.value?(u(),F(`form`,{key:3,onSubmit:Z(P,[`prevent`])},[C.value.length?(u(),F(`label`,mT,[n[5]||=w(`供应商 `,-1),d(D(`select`,{"onUpdate:modelValue":n[1]||=e=>c.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},h(e.name),9,gT))),128))],40,hT),[[Ne,c.value]])])):(u(),F(`p`,pT,`还没有可用的供应商。请先在模型连接中完成授权。`)),o.value.active_provider&&!C.value.some(e=>e.name===o.value?.active_provider)?(u(),F(`p`,_T,`当前供应商尚未授权,请先在模型连接中完成授权。`)):z(``,!0),E.value&&!E.value.is_active?(u(),F(`p`,vT,`保存后使用所选供应商。`)):z(``,!0),v.value?(u(),F(`p`,yT,`正在加载模型…`)):z(``,!0),b.value?(u(),F(`p`,bT,h(b.value),1)):z(``,!0),b.value?(u(),F(`button`,{key:6,type:`button`,disabled:_.value||v.value,onClick:n[2]||=e=>j(c.value,!0)},`重新加载模型`,8,xT)):z(``,!0),s.value?.has_models?(u(),F(`label`,ST,[n[6]||=w(`模型 `,-1),d(D(`select`,{"onUpdate:modelValue":n[3]||=e=>l.value=e,"aria-label":a.value,disabled:_.value||v.value},[(u(!0),F(T,null,p(s.value.models,e=>(u(),F(`option`,{key:e.id,value:e.id},h(e.display||e.id),9,wT))),128))],8,CT),[[Ne,l.value]])])):s.value&&c.value?(u(),F(`p`,TT,`该供应商当前未提供可选模型。`)):z(``,!0),k.value?.strengths?(u(),F(`p`,ET,h(k.value.strengths),1)):z(``,!0),k.value?.price?(u(),F(`p`,DT,h(k.value.price),1)):z(``,!0),x.value?(u(),F(`p`,OT,h(x.value),1)):z(``,!0),D(`button`,{type:`submit`,disabled:_.value||v.value||!E.value||!s.value||!!b.value||s.value.has_models&&!l.value},`保存`+h(a.value)+`设置`,9,kT)],32)):z(``,!0)],8,cT))}}),[[`__scopeId`,`data-v-9f624c1c`]]),jT={class:`provider-settings`},MT=H(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=U(()=>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=_({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`,jT,[[`all`,`connections`,`defaults`,`auto`,`visibility`].includes(r.page)?(u(),k(Jo,{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(sT,{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(AT,{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(AT,{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(Gw,{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`]]),NT={class:`hermes-settings`,"aria-label":`搜索与网页配置`},PT={key:0,role:`alert`},FT={key:1,role:`status`},IT={key:3,role:`status`},LT=[`id`],RT=[`disabled`],zT=[`onUpdate:modelValue`,`aria-label`],BT=[`value`],VT=[`value`],HT=[`onUpdate:modelValue`,`type`,`aria-label`,`placeholder`],UT=[`disabled`,`onClick`],WT=[`onUpdate:modelValue`,`type`,`aria-label`],GT=[`disabled`,`onClick`],KT={key:0},qT=H(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),s=O(``),c=O(``),l=_({search:``,extract:``}),g=_({search:``,extract:``}),v=_({}),y=_({search:`Hermes web search`,extract:`https://example.com`}),b={search:`联网搜索`,extract:`网页提取`},x=[`search`,`extract`],S=U(()=>l.search!==g.search||l.extract!==g.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===l[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);g[n]=r?(i.find(e=>e.status===`ready`)??i[0])?.name??r:``,t&&(l[n]=g[n])}i(`can-save-change`,S.value)}async function j(e){if(!o.value){o.value=!0,s.value=``,c.value=``;try{await e()}catch(e){s.value=e instanceof Error?e.message:`操作失败`}finally{o.value=!1}}}async function M(){await j(async()=>{A(await cr.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 cr.setEnv(e),!1);for(let t of Object.keys(e))delete v[t]}for(let e of x)if(l[e]!==g[e]){let t=l[e];A(await cr.setProvider(e,t||null),!1),l[e]=g[e]}c.value=`已保存,下一次工具调用生效。`})}async function P(e){await j(async()=>{let t=await cr.test(e,y[e]);if(!t.ok)throw Error(String(t.result.error??t.result.results?.find(e=>e.error)?.error??`未获得可用结果,请检查凭据和网络。`));c.value=`${b[e]}测试成功 · ${t.provider||`自动选择`}`})}async function I(e){window.confirm(`删除 ${e} 的系统凭据?使用此变量的其他服务也会受到影响。`)&&await j(async()=>{await ar.deleteEnv(e),A(await cr.config()),c.value=`凭据已删除。`})}return t({reset:M}),m(M),(e,t)=>(u(),F(`section`,NT,[t[2]||=D(`p`,null,`所有 Bot 共用此配置,包括手机上的 Bot。自动选择会使用 Hermes 当前可用的后端。`,-1),s.value?(u(),F(`p`,PT,h(s.value),1)):z(``,!0),c.value?(u(),F(`p`,FT,h(c.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`,IT,`正在读取搜索配置…`)):z(``,!0),D(`form`,{id:r.formId,onSubmit:Z(N,[`prevent`])},[(u(),F(T,null,p(x,e=>D(`fieldset`,{key:e,disabled:o.value||!a.value},[D(`legend`,null,h(b[e]),1),D(`label`,null,[t[1]||=w(`供应商`,-1),d(D(`select`,{"onUpdate:modelValue":t=>l[e]=t,"aria-label":b[e]+`供应商`},[t[0]||=D(`option`,{value:``},`自动选择可用后端`,-1),l[e]&&!E(e)?(u(),F(`option`,{key:0,value:l[e]},h(l[e])+` · 当前配置不可用`,9,BT)):z(``,!0),(u(!0),F(T,null,p(C(e),e=>(u(),F(`option`,{key:e.name,value:e.name},h(e.name)+` · `+h(k(e.status)),9,VT))),128))],8,zT),[[Ne,l[e]]])]),D(`p`,null,`当前后端:`+h((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(h(e.prompt||e.key),1),D(`small`,null,h(e.key)+` · `+h(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,HT),[[$e,v[e.key]]])]),e.is_set?(u(),F(`button`,{key:0,type:`button`,disabled:S.value,onClick:t=>I(e.key)},`删除 `+h(e.key),9,UT)):z(``,!0)]))),128)),D(`label`,null,[w(h(e===`search`?`测试关键词`:`测试网页地址`),1),d(D(`input`,{"onUpdate:modelValue":t=>y[e]=t,type:e===`search`?`text`:`url`,"aria-label":b[e]+`测试内容`},null,8,WT),[[$e,y[e]]])]),D(`button`,{type:`button`,disabled:S.value||!y[e].trim(),onClick:t=>P(e)},`测试`+h(b[e]),9,GT)],8,RT)),64)),S.value?(u(),F(`p`,KT,`请先保存更改,再测试当前配置。`)):z(``,!0)],40,LT)]))}}),[[`__scopeId`,`data-v-e49590c2`]]),JT={class:`hermes-settings`,"aria-label":`Hermes 环境变量管理`},YT={key:0,role:`alert`},XT={key:1,role:`status`},ZT={key:2,role:`status`},QT={class:`env-filters`},$T=[`value`],eE={class:`check`},tE=[`disabled`],nE=[`id`],rE=[`disabled`],iE=[`value`,`disabled`],aE=[`placeholder`],oE={key:5},sE={class:`env-list`},cE={class:`env-actions`},lE=[`disabled`,`onClick`],uE=[`disabled`,`onClick`],dE=H(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),s=O(``),c=O(``),l=O(``),g=O(``),_=O(!0),v=O(null),y=O(``),b=O(``),x=U(()=>v.value!==null&&(b.value.length>0||v.value===``&&y.value.length>0)),S=U(()=>!!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=U(()=>[...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=U(()=>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(l.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,s.value=``,c.value=``;try{await e()}catch(e){s.value=e instanceof Error?e.message:`操作失败`}finally{o.value=!1}}}async function N(){await M(async()=>{a.value=await ar.env(),j()})}function P(e){v.value=e,y.value=``,b.value=``,s.value=``,c.value=``}async function I(){!x.value||!S.value||await M(async()=>{await ar.setEnv(v.value||y.value,b.value),a.value=await ar.env(),j(),c.value=`变量已保存;搜索立即使用新配置,Bot 内核在下一轮加载。`})}async function L(e){window.confirm(`删除系统变量 ${e}?依赖此变量的模型和工具可能暂时不可用。`)&&await M(async()=>{await ar.deleteEnv(e),a.value=await ar.env(),c.value=`变量已删除。`})}return t({reset:async()=>{j(),await N()}}),m(N),(e,t)=>(u(),F(`section`,JT,[t[13]||=D(`p`,null,`系统 Hermes 的模型和工具共用这些变量。值只显示脱敏预览;虚拟机脚本变量仍在“工具与服务授权”中按 Bot 授权。`,-1),s.value?(u(),F(`p`,YT,h(s.value),1)):z(``,!0),c.value?(u(),F(`p`,XT,h(c.value),1)):z(``,!0),o.value&&!a.value?(u(),F(`p`,ZT,`正在读取环境变量…`)):z(``,!0),!a.value&&!o.value?(u(),F(`button`,{key:3,type:`button`,onClick:N},`重新加载`)):z(``,!0),D(`div`,QT,[D(`label`,null,[t[6]||=w(`搜索变量`,-1),d(D(`input`,{"onUpdate:modelValue":t[0]||=e=>l.value=e,type:`search`,placeholder:`变量名或说明`},null,512),[[Q,l.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},h(k(e)),9,$T))),128))],512),[[Ne,g.value]])]),D(`label`,eE,[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,tE),v.value===null?z(``,!0):(u(),F(`form`,{key:4,id:r.formId,onSubmit:Z(I,[`prevent`])},[D(`fieldset`,{disabled:o.value},[D(`legend`,null,h(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,iE)]),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,aE),[[Q,b.value]])]),D(`button`,{type:`button`,onClick:j},`取消编辑`)],8,rE)],40,nE)),a.value&&!A.value.length?(u(),F(`p`,oE,`没有匹配的变量。`)):z(``,!0),D(`ul`,sE,[(u(!0),F(T,null,p(A.value,([e,t])=>(u(),F(`li`,{key:e},[D(`div`,null,[D(`strong`,null,h(e),1),D(`small`,null,h(t.description||`自定义环境变量`),1),D(`small`,null,h(k(t.category||`other`))+` · `+h(t.is_set?t.redacted_value||`已配置`:`未配置`),1)]),D(`div`,cE,[D(`button`,{type:`button`,disabled:o.value||v.value!==null||t.readonly,onClick:t=>P(e)},`修改 `+h(e),9,lE),t.is_set?(u(),F(`button`,{key:0,type:`button`,disabled:o.value||v.value!==null||t.readonly,onClick:t=>L(e)},`删除 `+h(e),9,uE)):z(``,!0)])]))),128))])]))}}),[[`__scopeId`,`data-v-47a82c67`]]);function fE(){return X(`/api/app/system/allowed-hosts`)}function pE(e){return X(`/api/app/system/allowed-hosts`,{method:`PUT`,body:{hosts:e}})}var mE={class:`allowed-hosts-panel`,"aria-label":`外网访问地址`},hE={key:0},gE={key:1,role:`alert`},_E=[`aria-busy`],vE=[`disabled`],yE={key:0,role:`alert`},bE={key:1,role:`status`},xE={class:`actions`},SE=[`disabled`],CE=[`disabled`],wE=H(E({__name:`AllowedHostsPanel`,emits:[`dirty-change`],setup(e,{emit:t}){let n=t,r=O(),i=O(``),a=O(``),o=O(!1),s=O(``),c=O(``),l=U(()=>!!r.value&&i.value!==a.value);f(l,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(`
|
|
21
21
|
`),a.value=i.value}async function _(e,t=``){if(!o.value){o.value=!0,s.value=``,c.value=``;try{g(await e()),c.value=t}catch(e){s.value=e instanceof Error?e.message:`访问地址操作失败,请重试。`}finally{o.value=!1}}}let v=()=>_(fE);function y(){if(!r.value)return;let e=[...new Set(i.value.split(/[\s,]+/).filter(Boolean))];_(()=>pE(e),`允许的访问地址已保存并立即生效`)}return m(v),(e,t)=>(u(),F(`section`,mE,[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`,hE,[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,h(e),1)]))),128))])])):z(``,!0),r.value?.configurationError?(u(),F(`p`,gE,h(r.value.configurationError),1)):z(``,!0),D(`form`,{onSubmit:Z(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,vE),[[Q,i.value]])]),s.value?(u(),F(`p`,yE,h(s.value),1)):z(``,!0),c.value?(u(),F(`p`,bE,h(c.value),1)):z(``,!0),D(`div`,xE,[D(`button`,{type:`submit`,disabled:o.value||!r.value||!l.value},h(o.value?`处理中…`:`保存访问地址`),9,SE),s.value?(u(),F(`button`,{key:0,type:`button`,disabled:o.value,onClick:v},h(l.value?`放弃修改并重新加载`:`重新加载`),9,CE)):z(``,!0)])],40,_E)]))}}),[[`__scopeId`,`data-v-46ccb682`]]),TE={class:`system-overview-panel`,"aria-label":`系统概览`},EE={class:`overview-toolbar`},DE=[`disabled`],OE={key:0,class:`overview-warning`,role:`status`},kE={class:`overview-list`},AE=H(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(),s=O(!1),c=O(``),l=fe(),d=U(()=>{if(!i.value)return`尚未读取推送状态`;let e=i.value.configured&&i.value.healthy?`APNs 已启用`:`APNs 未就绪`,t=i.value.providers?.fcm;return`${e} · ${t?.configured&&t.healthy?`FCM 已启用`:`FCM 未配置`}`});async function p(){if(s.value)return;s.value=!0,c.value=``;let e=await Promise.allSettled([sv().then(e=>{i.value=e}),...l?[]:[Jp().then(e=>{a.value=e})],Promise.all([ar.config(),ar.models()]).then(([e,t])=>{let n=e.config.model,r=t.providers.find(e=>e.slug===n?.provider);o.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&&(c.value=t===e.length?`无法读取系统状态`:`${t} 项状态暂时无法读取,可进入对应页面重试。`),s.value=!1}return f(()=>n.active,e=>{e&&p()},{immediate:!0}),(e,t)=>(u(),F(`section`,TE,[D(`div`,EE,[t[4]||=D(`p`,null,`影响整个Yaovi安装及所有机器人,仅管理员可见。`,-1),D(`button`,{type:`button`,disabled:s.value,onClick:p},[W(Y,{name:`refresh`,size:16}),w(h(s.value?`检查中…`:`检查系统状态`),1)],8,DE)]),c.value?(u(),F(`p`,OE,h(c.value),1)):z(``,!0),D(`div`,kE,[D(`button`,{type:`button`,onClick:t[0]||=e=>r(`navigate`,`system-models`)},[W(Y,{name:`link`,size:22}),D(`span`,null,[t[5]||=D(`strong`,null,`默认模型`,-1),D(`small`,null,h(o.value?.configured?o.value.model:`等待供应商授权`),1)]),W(Y,{class:`chevron`,name:`chevron-left`,size:18})]),D(`button`,{type:`button`,onClick:t[1]||=e=>r(`navigate`,`system-push`)},[W(Y,{name:`bell`,size:22}),D(`span`,null,[t[6]||=D(`strong`,null,`推送服务`,-1),D(`small`,null,h(d.value),1)]),W(Y,{class:`chevron`,name:`chevron-left`,size:18})]),V(l)?z(``,!0):(u(),F(`button`,{key:0,type:`button`,onClick:t[2]||=e=>r(`navigate`,`system-hosts`)},[W(Y,{name:`link`,size:22}),t[7]||=D(`span`,null,[D(`strong`,null,`访问地址`),D(`small`,null,`管理允许访问 Yaovi 的域名与 IP`)],-1),W(Y,{class:`chevron`,name:`chevron-left`,size:18})])),V(l)?z(``,!0):(u(),F(`button`,{key:1,type:`button`,onClick:t[3]||=e=>r(`navigate`,`system-update`)},[W(Y,{name:`refresh`,size:22}),D(`span`,null,[t[8]||=D(`strong`,null,`升级`,-1),D(`small`,null,h(a.value?`Web ${a.value.current.webVersion} · 可独立升级与回滚`:`查看服务器版本与更新状态`),1)]),W(Y,{class:`chevron`,name:`chevron-left`,size:18})]))]),t[9]||=D(`p`,{class:`ownership-note`},`模型凭据由服务端管理,设置页面只显示脱敏信息。`,-1)]))}}),[[`__scopeId`,`data-v-25f581e9`]]),jE=[`aria-label`],ME={key:0,role:`alert`},NE={key:0},PE=H(E({__name:`AgentHostUpdatePanel`,props:{section:{default:`upgrade`}},setup(e){let t=O(``),n=O(``);return m(async()=>{try{t.value=(await Jp()).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`,ME,h(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
|
|
22
|
-
./node bin/yaovi-agent.mjs backup /备份位置/yaovi-agent.tar.gz`,-1)],64)):(u(),F(T,{key:1},[t.value?(u(),F(`p`,NE,`当前主机:Yaovi `+h(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,jE))}}),[[`__scopeId`,`data-v-dc62bb5b`]]),FE=[`aria-busy`],IE={key:0,role:`alert`},LE={key:1,role:`status`},RE={key:0,class:`actions`},zE=[`disabled`],BE=[`disabled`],VE={class:`proxies`},HE={class:`list-heading`},UE=[`disabled`],WE={key:0,class:`empty`},GE={key:0,role:`status`},KE={class:`proxy-actions`},qE=[`disabled`,`onClick`],JE=[`disabled`,`onClick`],YE=[`disabled`,`aria-label`,`onClick`],XE=[`disabled`],ZE=[`disabled`],QE={class:`address-fields`},$E=[`disabled`],eD=[`disabled`],tD=[`disabled`],nD=[`placeholder`,`disabled`],rD={key:0,class:`check`},iD=[`disabled`],aD={key:0,role:`alert`},oD={key:1,role:`status`},sD={class:`actions`},cD=[`disabled`],lD=[`disabled`],uD=H(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(``),s=O(``),c=O(),l=O(``),g=O(``),_=O(),v=O(``),y=O({}),b=U(()=>!!r.value&&JSON.stringify(i.value)!==JSON.stringify(r.value.default)),x=U(()=>!!c.value&&JSON.stringify(c.value)!==l.value);f(()=>b.value||x.value,e=>n(`dirty-change`,e)),f(a,e=>n(`busy-change`,e)),f(c,()=>{_.value=void 0},{deep:!0});async function C(e,t=!1){if(!a.value){a.value=!0,o.value=``,g.value=``,s.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 dt.get(),i.value={...r.value.default}}async function A(){await C(async()=>{r.value=await dt.save(r.value.revision,i.value),s.value=`默认网络已保存,从下一轮任务或新登录生效。`})}function j(e){c.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},l.value=JSON.stringify(c.value),g.value=``,_.value=void 0}function M(){return!a.value&&(!x.value||window.confirm(`放弃尚未保存的代理配置?`))}async function N(){await C(async()=>{r.value=await dt.proxy(r.value.revision,c.value),c.value=void 0,s.value=`代理已保存。`},!0)}async function P(){await C(async()=>{_.value=await dt.test({draft:c.value})},!0)}async function I(e){v.value=e.id,await C(async()=>{let t=await dt.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 dt.remove(r.value.revision,e.id),s.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`,IE,h(o.value),1)):z(``,!0),s.value?(u(),F(`p`,LE,h(s.value),1)):z(``,!0),r.value?(u(),F(T,{key:2},[W(pt,{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`,RE,[D(`button`,{type:`button`,disabled:a.value,onClick:t[1]||=e=>i.value={...r.value.default}},`取消更改`,8,zE),D(`button`,{class:`primary`,type:`button`,disabled:a.value||i.value.mode===`proxy`&&!i.value.proxyId,onClick:A},`保存默认设置`,8,BE)])):z(``,!0),D(`section`,VE,[D(`div`,HE,[t[12]||=D(`h3`,null,`已保存的代理`,-1),D(`button`,{type:`button`,disabled:a.value,onClick:t[2]||=e=>j()},[W(Y,{name:`plus`,size:16}),t[11]||=w(`添加代理`,-1)],8,UE)]),r.value.proxies.length?z(``,!0):(u(),F(`p`,WE,`尚未添加代理。需要代理的模型连接可在这里统一配置。`)),(u(!0),F(T,null,p(r.value.proxies,e=>(u(),F(`article`,{key:e.id,class:`proxy-row`},[W(Y,{name:`globe`,size:22}),D(`div`,null,[D(`strong`,null,h(e.name),1),D(`small`,null,h(e.protocol.toUpperCase())+` · `+h(e.host)+`:`+h(e.port),1),y.value[e.id]?(u(),F(`small`,GE,h(y.value[e.id]),1)):z(``,!0)]),D(`div`,KE,[D(`button`,{type:`button`,disabled:a.value,onClick:t=>I(e)},h(v.value===e.id?`测试中…`:`测试`),9,qE),D(`button`,{type:`button`,disabled:a.value,onClick:t=>j(e)},`编辑`,8,JE),D(`button`,{type:`button`,disabled:a.value,"aria-label":`删除代理 ${e.name}`,onClick:t=>L(e)},[W(Y,{name:`trash`,size:16})],8,YE)])]))),128))])],64)):z(``,!0),c.value?(u(),k(ut,{key:3,title:c.value.id?`编辑代理`:`添加代理`,compact:``,wide:``,"before-close":M,onClose:t[10]||=e=>c.value=void 0},{default:S(()=>[D(`form`,{class:`proxy-editor`,onSubmit:Z(N,[`prevent`])},[D(`label`,null,[t[14]||=w(`名称`,-1),d(D(`input`,{"onUpdate:modelValue":t[3]||=e=>c.value.name=e,required:``,maxlength:`80`,placeholder:`例如:家庭代理`,disabled:a.value},null,8,XE),[[Q,c.value.name]])]),D(`label`,null,[t[16]||=w(`协议`,-1),d(D(`select`,{"onUpdate:modelValue":t[4]||=e=>c.value.protocol=e,disabled:a.value},[...t[15]||=[D(`option`,{value:`http`},`HTTP CONNECT`,-1),D(`option`,{value:`socks5`},`SOCKS5`,-1)]],8,ZE),[[Ne,c.value.protocol]])]),D(`div`,QE,[D(`label`,null,[t[17]||=w(`服务器地址`,-1),d(D(`input`,{"onUpdate:modelValue":t[5]||=e=>c.value.host=e,required:``,maxlength:`253`,placeholder:`127.0.0.1`,disabled:a.value},null,8,$E),[[Q,c.value.host]])]),D(`label`,null,[t[18]||=w(`端口`,-1),d(D(`input`,{"onUpdate:modelValue":t[6]||=e=>c.value.port=e,type:`number`,min:`1`,max:`65535`,required:``,disabled:a.value},null,8,eD),[[Q,c.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=>c.value.username=e,autocomplete:`off`,disabled:a.value},null,8,tD),[[Q,c.value.username]])]),D(`label`,null,[t[20]||=w(`密码`,-1),d(D(`input`,{"onUpdate:modelValue":t[8]||=e=>c.value.password=e,type:`password`,autocomplete:`new-password`,placeholder:c.value.id?`留空保留已保存密码`:`可选`,disabled:a.value||c.value.clearPassword},null,8,nD),[[Q,c.value.password]])]),c.value.id?(u(),F(`label`,rD,[d(D(`input`,{"onUpdate:modelValue":t[9]||=e=>c.value.clearPassword=e,type:`checkbox`,disabled:a.value},null,8,iD),[[Je,c.value.clearPassword]]),t[21]||=w(`清除已保存密码`,-1)])):z(``,!0)]),g.value?(u(),F(`p`,aD,h(g.value),1)):z(``,!0),_.value?(u(),F(`p`,oD,h(_.value.message),1)):z(``,!0),D(`div`,sD,[D(`button`,{type:`button`,disabled:a.value||!c.value.host||!c.value.port||!c.value.name,onClick:P},`测试此配置`,8,cD),D(`button`,{class:`primary`,type:`submit`,disabled:a.value},h(a.value?`处理中…`:`保存代理`),9,lD)])],32)]),_:1},8,[`title`])):z(``,!0)],8,FE))}}),[[`__scopeId`,`data-v-7033bcfb`]]),dD={class:`remote-access-panel`},fD={key:0},pD={key:0},mD=[`disabled`],hD=[`disabled`],gD={class:`binding-code`},_D=[`src`],vD=[`disabled`],yD=[`disabled`],bD={key:4},xD=[`disabled`],SD=[`disabled`],CD={key:7,class:`remote-devices`},wD={key:0},TD=[`disabled`,`onClick`],ED=[`disabled`,`onClick`],DD={key:2,role:`alert`},OD=H(E({__name:`RemoteAccessPanel`,setup(e){let t=ce(),n=O(),r=O(``),a=O(``),o=O(!1),s=()=>window.confirm(`请先在管理平台解绑。清除本机远程记录后需重新生成绑定码;机器身份、工作区数据保留。`),c=e=>window.confirm(`撤销「${e.name||`未命名设备`}」?它会立即断开,不能再连接这台服务器,直到你允许它重新登录。`),l;async function d(e,t){return xe(await X(`/api/app/remote-access`+e,t===void 0?{}:{method:`POST`,body:t}))}async function f(){if(t.user?.localDesktop)try{n.value=await d(``),r.value=n.value.pending?.qr?await _n.toDataURL(n.value.pending.qr):``}catch(e){a.value=e instanceof Error?e.message:`暂时无法连接远程服务`}}async function g(e){o.value=!0,a.value=``;try{await e(),await f()}catch(e){a.value=e instanceof Error?e.message:`操作失败`}finally{o.value=!1}}return m(()=>{f(),l=setInterval(()=>{o.value||f()},5e3)}),i(()=>clearInterval(l)),(e,i)=>(u(),F(`section`,dD,[i[9]||=D(`h4`,null,`远程访问`,-1),i[10]||=D(`p`,null,` 本机始终自动进入,无需登录。绑定到你的 Yaovi 账号后,在其他电脑或手机上用同一账号(密码或扫码)登录,选择这台服务器即可完整使用。 `,-1),V(t).user?.localDesktop?(u(),F(T,{key:1},[n.value?.bound&&!n.value.upgradeRequired&&!n.value.activating?(u(),F(`p`,pD,h(n.value.enabled?n.value.connected?`远程连接已启用`:`正在连接云端`:`远程连接已暂停`),1)):z(``,!0),n.value&&!n.value.bound&&!n.value.pending?(u(),F(`button`,{key:1,disabled:o.value,onClick:i[0]||=e=>{g(async()=>{n.value.pending=await d(`/binding-code`,{})})}},` 生成绑定码 `,8,mD)):z(``,!0),n.value?.upgradeRequired&&!n.value.pending?(u(),F(T,{key:2},[i[6]||=D(`p`,null,` 这台服务器还在使用旧的“逐台设备批准”方式,其他设备暂时无法连接。升级为账号授权后,同一账号登录的设备即可直接使用;账号归属、机器身份和数据都保留。 `,-1),D(`button`,{disabled:o.value,onClick:i[1]||=e=>{g(async()=>{await d(`/enable-account-access`,{})})}},` 升级为账号授权,生成绑定码 `,8,hD)],64)):z(``,!0),n.value?.pending?.code?(u(),F(T,{key:3},[i[7]||=D(`p`,null,` 登录 auth.samien.cn,选择“绑定 Host”并输入此码或扫描绑定二维码。平台确认后自动完成。 `,-1),D(`strong`,gD,h(n.value.pending.code),1),D(`img`,{src:r.value,width:`200`,height:`200`,alt:`Host 绑定二维码(不是登录二维码)`},null,8,_D),D(`p`,null,`有效期至 `+h(new Date(n.value.pending.expiresAt).toLocaleString()),1),D(`button`,{disabled:o.value,onClick:i[2]||=e=>{g(async()=>{await d(`/cancel-binding`,{})})}},` 取消绑定码 `,8,vD),D(`button`,{disabled:o.value,onClick:i[3]||=e=>{g(async()=>{await d(n.value.bound?`/enable-account-access`:`/binding-code`,{})})}},` 重新生成 `,8,yD)],64)):z(``,!0),n.value?.activating?(u(),F(`p`,bD,`绑定中,正在保存并确认激活…`)):z(``,!0),n.value?.bound&&!n.value.upgradeRequired&&!n.value.activating?(u(),F(`button`,{key:5,disabled:o.value,onClick:i[4]||=e=>{g(async()=>{await d(`/enabled`,{enabled:!n.value.enabled})})}},h(n.value.enabled?`暂停远程访问`:`恢复远程访问`),9,xD)):z(``,!0),n.value?.bound?(u(),F(`button`,{key:6,disabled:o.value,onClick:i[5]||=e=>{g(async()=>{s()&&await d(`/clear-binding`,{})})}},` 平台解绑后,清除本机绑定记录 `,8,SD)):z(``,!0),n.value?.bound&&!n.value.upgradeRequired?(u(),F(`section`,CD,[i[8]||=D(`h5`,null,`已授权设备`,-1),D(`p`,null,h(n.value.lan?.listening?`同一局域网内,这些设备断网也能直接连接(端口 ${n.value.lan.port})。`:`这些设备可通过账号远程连接。`)+`在这里撤销立即生效,断网时也有效。 `,1),n.value.devices?.length?z(``,!0):(u(),F(`p`,wD,`还没有设备通过账号连接过这台服务器。`)),(u(!0),F(T,null,p(n.value.devices,e=>(u(),F(`div`,{key:e.clientDeviceId,class:`remote-device`},[D(`span`,null,[D(`strong`,null,h(e.name||`未命名设备`),1),D(`small`,null,h(e.blocked?`已撤销`:e.connected?`连接中`:e.lastSeen?`最近连接 `+new Date(e.lastSeen).toLocaleString():`已授权`),1)]),e.blocked?(u(),F(`button`,{key:1,disabled:o.value,onClick:t=>{g(async()=>{await d(`/restore-device`,{clientDeviceId:e.clientDeviceId})})}},` 允许重新登录 `,8,ED)):(u(),F(`button`,{key:0,disabled:o.value,onClick:t=>{g(async()=>{c(e)&&await d(`/revoke-device`,{clientDeviceId:e.clientDeviceId})})}},` 撤销 `,8,TD))]))),128))])):z(``,!0)],64)):(u(),F(`p`,fD,`请在服务器本机打开此页进行绑定。`)),a.value?(u(),F(`p`,DD,h(a.value),1)):z(``,!0)]))}}),[[`__scopeId`,`data-v-32241564`]]),kD=[{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:`查看服务器状态并管理推送、升级与备份。`}],AD=[{key:`remote-access`,category:`environment`,label:`远程访问`,keywords:`云账号 登录 扫码 P2P TURN 中继 设备 绑定`,summary:`在服务器本机生成绑定码,绑定到你的 Yaovi 账号;本机免登录保持可用。`,admin:!0,localOnly:!0},{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,localOnly:!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,localOnly:!0},{key:`system-backup`,category:`system`,label:`备份`,keywords:`备份 恢复`,summary:`备份包里有凭据和浏览器资料。`,admin:!0,localOnly:!0},{key:`desktop-mode`,category:`system`,label:`运行模式`,keywords:`客户端 服务器 运行模式`,desktop:!0}];function jD(e){return AD.filter(t=>(!t.admin||e.isAdmin)&&(!t.desktop||e.desktop)&&(!t.feature||e.features?.includes(t.feature))&&(!t.localOnly||!e.remote))}var MD=[`onKeydownCapture`],ND={class:`settings-center__body`},PD={class:`settings-sidebar`,"aria-label":`设置分类`},FD={class:`settings-sidebar__mobilebar`},ID=[`disabled`],LD={class:`settings-search`},RD={key:0,class:`settings-category-nav`},zD={class:`settings-category`},BD=[`aria-current`,`disabled`,`onClick`],VD={key:1,class:`settings-search-results`,"aria-label":`设置搜索结果`},HD=[`disabled`,`onClick`],UD={key:0,class:`settings-search-empty`},WD={class:`settings-content__header`},GD=[`aria-label`,`disabled`],KD={class:`settings-content__heading`},qD={class:`settings-scope`},JD=[`disabled`],YD=[`aria-label`],XD={key:0,class:`settings-subpage-title`},ZD=[`disabled`],QD={key:8,class:`settings-section-stack`},$D={key:10,class:`settings-section-stack`},eO={class:`settings-inline-nav`},tO=[`disabled`],nO={key:18,class:`settings-section-stack`},rO={key:20,class:`appearance-panel`,"aria-label":`外观`},iO={class:`theme-options`,role:`radiogroup`,"aria-label":`界面主题`},aO=[`aria-checked`,`onClick`],oO=[`src`],sO={class:`appearance-note`},cO={key:0,class:`settings-content__footer`},lO={role:`status`},uO=[`disabled`],dO=[`disabled`],fO=H(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=ee(()=>nt(()=>import(`./BotSettingsPanel-Bkqal3lR.js`),__vite__mapDeps([0,1,2,3,4,5,6,7]))),r=ee(()=>nt(()=>import(`./BotControlSettingsPanel-GQEVHXbw.js`),__vite__mapDeps([8,1,2,3,4,5,6,9]))),i=e,s=t,c=O(),m=O(),g=O(),v=O(`account-profile`),y=O(`account-profile`),b=O(!1),x=O(!1),C=O(!1),E=O(!1),A=_({}),j=_({}),M=_({}),N=O(``),P=O(0),I=!!(window.yaoviDesktop?.modeState&&window.yaoviDesktop?.switchMode),R=U(()=>jD({isAdmin:i.isAdmin,desktop:I,features:i.features,remote:fe()})),B=U(()=>R.value.find(e=>e.key===v.value)??R.value[0]);U(()=>B.value.parent??B.value.key);let H=U(()=>kD.filter(e=>R.value.some(t=>t.category===e.key))),G=U(()=>kD.find(e=>e.key===B.value.category)),K=U(()=>{let e=N.value.trim().toLocaleLowerCase();return e?R.value.filter(t=>(t.label+` `+t.keywords).toLocaleLowerCase().includes(e)):[]}),te=U(()=>!!A[v.value]),q=U(()=>x.value||C.value),J=U(()=>[`user-profile`,`system-models`,`system-auto`,`system-visibility`,`system-web`,`system-hermes-env`,`bot-memory`,`agent-runtime`,`agent-skills`,`bot-files`].includes(v.value)),ne=U(()=>v.value===`system-models`?`defaults`:v.value===`system-auto`?`auto`:v.value===`system-visibility`?`visibility`:v.value===`system-auxiliary`?`auxiliary`:v.value===`system-image`?`image`:v.value===`system-video`?`video`:v.value===`system-voice`?`voice`:`connections`),re=U(()=>v.value+`:`+P.value),ie=U(()=>i.pairingUserName||i.userName||`当前账号`),ae=U(()=>v.value===`user-profile`?`全局用户资料`:v.value===`appearance`||v.value===`chat-appearance`?`当前设备 · 自动保存`:v.value===`credential-vault`?`当前账号:`+ie.value:v.value===`bot-projects`?`项目范围`:v.value===`bot-user-memory`?`用户共享`:[`bot-memory`,`agent-runtime`,`agent-skills`].includes(v.value)?`系统默认 / 指定 Bot`:[`system-models`,`system-auto`,`system-visibility`,`system-auxiliary`,`system-image`,`system-video`,`system-voice`].includes(v.value)?`系统默认 · 仅管理员`:B.value.admin?`服务器设置 · 仅管理员`:`当前服务器`);function oe(e){A[v.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!te.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(!(!R.value.some(t=>t.key===e)||q.value)){if(e!==v.value){if(!le())return;A[v.value]=!1,v.value=e,P.value=0,ue()}y.value=e,b.value=!0,N.value=``,o(()=>m.value?.focus())}}function pe(){if(!(q.value||!te.value)){if(g.value?.reset){g.value.reset();return}A[v.value]=!1,P.value++,ue()}}function me(){q.value||!le()||(A[v.value]=!1,s(`close`))}function he(){if(B.value.parent){de(B.value.parent);return}q.value||!le()||(te.value&&pe(),b.value=!1,o(()=>c.value?.querySelector(`.settings-nav-item[aria-current="page"]`)?.focus()))}function ge(){window.innerWidth<960&&b.value?he():me()}function _e(e){let t=[...c.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===c.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:y.value;v.value=R.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(()=>c.value?.focus())},{immediate:!0}),(t,i)=>(u(),k(L,{to:`body`},[W(rt,{name:`settings-center-fade`},{default:S(()=>[e.open?(u(),F(`div`,{key:0,class:`settings-center-layer`,role:`presentation`,onMousedown:Z(me,[`self`])},[D(`section`,{ref_key:`dialog`,ref:c,class:l([`settings-center`,{"settings-center--mobile-detail":b.value}]),role:`dialog`,"aria-modal":`true`,"aria-label":`设置`,tabindex:`-1`,onKeydownCapture:Ie(Z(ge,[`prevent`,`stop`]),[`esc`]),onKeydown:Ie(_e,[`tab`])},[D(`div`,ND,[D(`aside`,PD,[D(`div`,FD,[i[33]||=D(`h2`,null,`设置`,-1),D(`button`,{class:`settings-mobile-close`,type:`button`,"aria-label":`关闭设置`,disabled:q.value,onClick:me},[W(Y,{name:`close`,size:20})],8,ID)]),D(`label`,LD,[W(Y,{name:`search`,size:16}),d(D(`input`,{"onUpdate:modelValue":i[0]||=e=>N.value=e,type:`search`,"aria-label":`搜索设置`,placeholder:`搜索设置`},null,512),[[Q,N.value]])]),N.value.trim()?(u(),F(`nav`,VD,[(u(!0),F(T,null,p(K.value,e=>(u(),F(`button`,{key:e.key,type:`button`,disabled:q.value,onClick:t=>de(e.key)},[D(`strong`,null,h(e.label),1),D(`small`,null,h(V(kD).find(t=>t.key===e.category)?.label)+` → `+h(e.label),1)],8,HD))),128)),K.value.length?z(``,!0):(u(),F(`p`,UD,`没有匹配的设置`))])):(u(),F(`nav`,RD,[(u(!0),F(T,null,p(H.value,e=>(u(),F(`section`,{key:e.key},[D(`div`,zD,h(e.label),1),(u(!0),F(T,null,p(R.value.filter(t=>t.category===e.key),e=>(u(),F(`button`,{key:e.key,type:`button`,class:`settings-nav-item`,"aria-current":v.value===e.key?`page`:void 0,disabled:q.value,onClick:t=>de(e.key)},h(e.label),9,BD))),128))]))),128))])),i[34]||=D(`footer`,{class:`settings-sidebar__footer`},`Yaovi`,-1)]),D(`main`,{class:l([`settings-content`,{"settings-content--with-footer":J.value}])},[D(`header`,WD,[D(`button`,{class:`mobile-back`,type:`button`,"aria-label":B.value.parent?`返回`+R.value.find(e=>e.key===B.value.parent)?.label:`返回设置分类`,disabled:q.value,onClick:he},[W(Y,{name:`chevron-left`,size:20})],8,GD),D(`div`,KD,[D(`h3`,{ref_key:`contentTitle`,ref:m,tabindex:`-1`},h(B.value.label),513),D(`p`,null,h(B.value.summary||G.value.description),1)]),D(`span`,qD,h(ae.value),1),D(`button`,{class:`settings-center__close`,type:`button`,"aria-label":`关闭设置`,disabled:q.value,onClick:me},[W(Y,{name:`close`,size:20})],8,JD)]),(u(),F(`div`,{key:re.value,id:`settings-current-panel`,class:`settings-content__scroll`,role:`tabpanel`,"aria-label":B.value.label},[B.value.parent?(u(),F(`div`,XD,[D(`button`,{type:`button`,disabled:q.value,onClick:i[1]||=e=>de(B.value.parent)},[W(Y,{name:`chevron-left`,size:16}),w(`返回`+h(R.value.find(e=>e.key===B.value.parent)?.label),1)],8,ZD),D(`h4`,null,h(B.value.label),1)])):z(``,!0),[`my-bots`,`workspace-permissions`,`bot-permission-requests`].includes(v.value)&&e.isAdmin&&e.features?.includes(`bot-permissions-v2`)?(u(),k(V(r),{key:1,"target-bot-id":e.targetBotId,onNavigate:de,page:v.value===`my-bots`?`bots`:v.value===`workspace-permissions`?`permissions`:`requests`,onChanged:i[2]||=e=>s(`bot-settings-changed`),onDirtyChange:oe,onBusyChange:i[3]||=e=>C.value=e},null,8,[`target-bot-id`,`page`])):v.value===`user-profile`&&e.isAdmin?(u(),k(yw,{key:2,ref_key:`activeEditor`,ref:g,"form-id":`settings-active-form`,onDirtyChange:oe,onCanSaveChange:i[4]||=e=>E.value=e,onBusyChange:i[5]||=e=>C.value=e},null,512)):v.value===`system-web`&&e.isAdmin?(u(),k(qT,{key:3,ref_key:`activeEditor`,ref:g,"form-id":`settings-active-form`,onDirtyChange:oe,onCanSaveChange:i[6]||=e=>E.value=e,onBusyChange:i[7]||=e=>C.value=e},null,512)):v.value===`system-hermes-env`&&e.isAdmin?(u(),k(dE,{key:4,ref_key:`activeEditor`,ref:g,"form-id":`settings-active-form`,onDirtyChange:oe,onCanSaveChange:i[8]||=e=>E.value=e,onBusyChange:i[9]||=e=>C.value=e},null,512)):G.value.key===`models`&&e.isAdmin?(u(),k(MT,{key:5,ref_key:`activeEditor`,ref:g,page:ne.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(v.value)&&e.isAdmin?(u(),k(Sp,{key:6,ref_key:`activeEditor`,ref:g,section:v.value===`bot-memory`?`memory`:v.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`])):v.value===`bot-retrieval`&&e.isAdmin?(u(),k($d,{key:7,open:``,onDirtyChange:oe,onBusyChange:i[15]||=e=>C.value=e})):v.value===`bot-vm`?(u(),F(`section`,QD,[W(V(n),{page:`vm`,"is-admin":e.isAdmin,onChanged:i[16]||=e=>s(`bot-settings-changed`),onDirtyChange:oe},null,8,[`is-admin`]),e.isAdmin?(u(),k(iv,{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(v.value)?(u(),k(V(n),{key:9,page:v.value===`bot-projects`?`projects`:`user`,"is-admin":e.isAdmin,onChanged:i[19]||=e=>s(`bot-settings-changed`),onDirtyChange:oe},null,8,[`page`,`is-admin`])):v.value===`bot-computers`&&e.isAdmin?(u(),F(`section`,$D,[D(`div`,eO,[D(`button`,{type:`button`,disabled:q.value,onClick:i[20]||=e=>de(`bot-vm`)},[W(Y,{name:`monitor`,size:18}),i[35]||=w(`管理本地虚拟机`,-1),W(Y,{name:`chevron-left`,size:16})],8,tO)]),W(iv,{section:`environment`,onDirtyChange:i[21]||=e=>se(`environment`,e),onBusyChange:i[22]||=e=>ce(`environment`,e)}),W(Qg,{section:`environment`,onDirtyChange:i[23]||=e=>se(`host-tools`,e),onBusyChange:i[24]||=e=>ce(`host-tools`,e)})])):v.value===`execution-resources`&&e.isAdmin?(u(),k(iv,{key:11,section:`resources`,onDirtyChange:oe,onBusyChange:i[25]||=e=>C.value=e})):v.value===`bot-files`&&e.isAdmin?(u(),k(Rh,{key:12,ref_key:`activeEditor`,ref:g,embedded:``,"form-id":`settings-active-form`,onDirtyChange:oe,onCanSaveChange:i[26]||=e=>E.value=e,onBusyChange:i[27]||=e=>C.value=e},null,512)):v.value===`system-network`&&e.isAdmin?(u(),k(uD,{key:13,onDirtyChange:i[28]||=e=>se(`model-network`,e),onBusyChange:i[29]||=e=>ce(`model-network`,e)})):v.value===`system-hosts`&&e.isAdmin?(u(),k(wE,{key:14,onDirtyChange:oe})):v.value===`remote-access`&&e.isAdmin?(u(),k(OD,{key:15})):v.value===`credential-vault`?(u(),k(AC,{key:16})):v.value===`account-profile`?(u(),k(UC,{key:17,active:!0,onDirtyChange:oe})):v.value===`account-permissions`&&e.isAdmin?(u(),F(`section`,nO,[W(lg),W(Qg,{section:`devices`,onDirtyChange:oe,onBusyChange:i[30]||=e=>C.value=e})])):v.value===`desktop-mode`&&V(I)?(u(),k(Nw,{key:19})):v.value===`appearance`?(u(),F(`section`,rO,[i[38]||=D(`h4`,null,`界面主题`,-1),D(`div`,iO,[(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:l({active:e.themePreference===t[0]}),onClick:e=>s(`set-theme`,t[0])},[D(`img`,{src:`/setting-previews/${t[0]}.png`,alt:``,width:`480`,height:`300`},null,8,oO),D(`strong`,null,h(t[1]),1),(u(),k(a(e.themePreference===t[0]?V(St):V(At)),{class:`theme-choice-mark`,"aria-hidden":`true`}))],10,aO)),64))]),D(`button`,{type:`button`,class:`bubble-settings-entry`,onClick:i[31]||=e=>de(`chat-appearance`)},[W(Y,{name:`chat`,size:20}),i[36]||=D(`span`,null,[D(`strong`,null,`聊天气泡`),D(`small`,null,`预设、背景颜色与样式`)],-1),W(Y,{name:`chevron-left`,size:18})]),D(`p`,sO,[W(Y,{name:`info`,size:16}),i[37]||=w(`更改自动保存到当前设备。`,-1)])])):v.value===`chat-appearance`?(u(),k(Ex,{key:21,theme:e.theme},null,8,[`theme`])):v.value===`system-overview`&&e.isAdmin?(u(),k(AE,{key:22,active:!0,"upstream-ready":e.upstreamReady,"upstream-error":e.upstreamError,onNavigate:de},null,8,[`upstream-ready`,`upstream-error`])):v.value===`system-push`&&e.isAdmin?(u(),k(Wv,{key:23,section:`push`,active:!0,onDirtyChange:oe})):v.value===`system-update`&&e.isAdmin?(u(),k(PE,{key:24,section:`upgrade`,onLockChange:i[32]||=e=>x.value=e})):v.value===`system-backup`&&e.isAdmin?(u(),k(PE,{key:25,section:`backup`})):z(``,!0)],8,YD)),J.value?(u(),F(`footer`,cO,[D(`p`,lO,h(C.value?`正在处理…`:te.value?`有未保存的更改`:`仅保存当前页面的更改`),1),D(`div`,null,[D(`button`,{type:`button`,class:`settings-footer__cancel`,disabled:q.value||!te.value,onClick:pe},`取消更改`,8,uO),D(`button`,{type:`submit`,class:`settings-footer__save`,form:`settings-active-form`,disabled:q.value||!E.value},h(C.value?`正在保存…`:`保存更改`),9,dO)])])):z(``,!0)],2)])],42,MD)],32)):z(``,!0)]),_:1})]))}}),[[`__scopeId`,`data-v-d2fb8fb8`]]);function pO(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 mO(e){let t=0;for(let n=0;n<e.length;++n)e[n]===`&`&&++t;return t}var hO=/\s*,(?![^(]*\))\s*/g,gO=/\s+/g;function _O(e,t){let n=[];return t.split(hO).forEach(t=>{let r=mO(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 vO(e,t){let n=[];return t.split(hO).forEach(t=>{e.forEach(e=>{n.push((e&&e+` `)+t)})}),n}function yO(e){let t=[``];return e.forEach(e=>{e&&=e.trim(),e&&(t=e.includes(`&`)?_O(t,e):vO(t,e))}),t.join(`, `).replace(gO,` `)}function bO(e){if(!e)return;let t=e.parentElement;t&&t.removeChild(e)}function xO(e,t){return(t??document.head).querySelector(`style[cssr-id="${e}"]`)}function SO(e){let t=document.createElement(`style`);return t.setAttribute(`cssr-id`,e),t}function CO(e){return e?/^\s*@(s|m)/.test(e):!1}var wO=/[A-Z]/g;function TO(e){return e.replace(wO,e=>`-`+e.toLowerCase())}function EO(e,t=` `){return typeof e==`object`&&e?` {
|
|
22
|
+
./node bin/yaovi-agent.mjs backup /备份位置/yaovi-agent.tar.gz`,-1)],64)):(u(),F(T,{key:1},[t.value?(u(),F(`p`,NE,`当前主机:Yaovi `+h(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,jE))}}),[[`__scopeId`,`data-v-dc62bb5b`]]),FE=[`aria-busy`],IE={key:0,role:`alert`},LE={key:1,role:`status`},RE={key:0,class:`actions`},zE=[`disabled`],BE=[`disabled`],VE={class:`proxies`},HE={class:`list-heading`},UE=[`disabled`],WE={key:0,class:`empty`},GE={key:0,role:`status`},KE={class:`proxy-actions`},qE=[`disabled`,`onClick`],JE=[`disabled`,`onClick`],YE=[`disabled`,`aria-label`,`onClick`],XE=[`disabled`],ZE=[`disabled`],QE={class:`address-fields`},$E=[`disabled`],eD=[`disabled`],tD=[`disabled`],nD=[`placeholder`,`disabled`],rD={key:0,class:`check`},iD=[`disabled`],aD={key:0,role:`alert`},oD={key:1,role:`status`},sD={class:`actions`},cD=[`disabled`],lD=[`disabled`],uD=H(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(``),s=O(``),c=O(),l=O(``),g=O(``),_=O(),v=O(``),y=O({}),b=U(()=>!!r.value&&JSON.stringify(i.value)!==JSON.stringify(r.value.default)),x=U(()=>!!c.value&&JSON.stringify(c.value)!==l.value);f(()=>b.value||x.value,e=>n(`dirty-change`,e)),f(a,e=>n(`busy-change`,e)),f(c,()=>{_.value=void 0},{deep:!0});async function C(e,t=!1){if(!a.value){a.value=!0,o.value=``,g.value=``,s.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 dt.get(),i.value={...r.value.default}}async function A(){await C(async()=>{r.value=await dt.save(r.value.revision,i.value),s.value=`默认网络已保存,从下一轮任务或新登录生效。`})}function j(e){c.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},l.value=JSON.stringify(c.value),g.value=``,_.value=void 0}function M(){return!a.value&&(!x.value||window.confirm(`放弃尚未保存的代理配置?`))}async function N(){await C(async()=>{r.value=await dt.proxy(r.value.revision,c.value),c.value=void 0,s.value=`代理已保存。`},!0)}async function P(){await C(async()=>{_.value=await dt.test({draft:c.value})},!0)}async function I(e){v.value=e.id,await C(async()=>{let t=await dt.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 dt.remove(r.value.revision,e.id),s.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`,IE,h(o.value),1)):z(``,!0),s.value?(u(),F(`p`,LE,h(s.value),1)):z(``,!0),r.value?(u(),F(T,{key:2},[W(pt,{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`,RE,[D(`button`,{type:`button`,disabled:a.value,onClick:t[1]||=e=>i.value={...r.value.default}},`取消更改`,8,zE),D(`button`,{class:`primary`,type:`button`,disabled:a.value||i.value.mode===`proxy`&&!i.value.proxyId,onClick:A},`保存默认设置`,8,BE)])):z(``,!0),D(`section`,VE,[D(`div`,HE,[t[12]||=D(`h3`,null,`已保存的代理`,-1),D(`button`,{type:`button`,disabled:a.value,onClick:t[2]||=e=>j()},[W(Y,{name:`plus`,size:16}),t[11]||=w(`添加代理`,-1)],8,UE)]),r.value.proxies.length?z(``,!0):(u(),F(`p`,WE,`尚未添加代理。需要代理的模型连接可在这里统一配置。`)),(u(!0),F(T,null,p(r.value.proxies,e=>(u(),F(`article`,{key:e.id,class:`proxy-row`},[W(Y,{name:`globe`,size:22}),D(`div`,null,[D(`strong`,null,h(e.name),1),D(`small`,null,h(e.protocol.toUpperCase())+` · `+h(e.host)+`:`+h(e.port),1),y.value[e.id]?(u(),F(`small`,GE,h(y.value[e.id]),1)):z(``,!0)]),D(`div`,KE,[D(`button`,{type:`button`,disabled:a.value,onClick:t=>I(e)},h(v.value===e.id?`测试中…`:`测试`),9,qE),D(`button`,{type:`button`,disabled:a.value,onClick:t=>j(e)},`编辑`,8,JE),D(`button`,{type:`button`,disabled:a.value,"aria-label":`删除代理 ${e.name}`,onClick:t=>L(e)},[W(Y,{name:`trash`,size:16})],8,YE)])]))),128))])],64)):z(``,!0),c.value?(u(),k(ut,{key:3,title:c.value.id?`编辑代理`:`添加代理`,compact:``,wide:``,"before-close":M,onClose:t[10]||=e=>c.value=void 0},{default:S(()=>[D(`form`,{class:`proxy-editor`,onSubmit:Z(N,[`prevent`])},[D(`label`,null,[t[14]||=w(`名称`,-1),d(D(`input`,{"onUpdate:modelValue":t[3]||=e=>c.value.name=e,required:``,maxlength:`80`,placeholder:`例如:家庭代理`,disabled:a.value},null,8,XE),[[Q,c.value.name]])]),D(`label`,null,[t[16]||=w(`协议`,-1),d(D(`select`,{"onUpdate:modelValue":t[4]||=e=>c.value.protocol=e,disabled:a.value},[...t[15]||=[D(`option`,{value:`http`},`HTTP CONNECT`,-1),D(`option`,{value:`socks5`},`SOCKS5`,-1)]],8,ZE),[[Ne,c.value.protocol]])]),D(`div`,QE,[D(`label`,null,[t[17]||=w(`服务器地址`,-1),d(D(`input`,{"onUpdate:modelValue":t[5]||=e=>c.value.host=e,required:``,maxlength:`253`,placeholder:`127.0.0.1`,disabled:a.value},null,8,$E),[[Q,c.value.host]])]),D(`label`,null,[t[18]||=w(`端口`,-1),d(D(`input`,{"onUpdate:modelValue":t[6]||=e=>c.value.port=e,type:`number`,min:`1`,max:`65535`,required:``,disabled:a.value},null,8,eD),[[Q,c.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=>c.value.username=e,autocomplete:`off`,disabled:a.value},null,8,tD),[[Q,c.value.username]])]),D(`label`,null,[t[20]||=w(`密码`,-1),d(D(`input`,{"onUpdate:modelValue":t[8]||=e=>c.value.password=e,type:`password`,autocomplete:`new-password`,placeholder:c.value.id?`留空保留已保存密码`:`可选`,disabled:a.value||c.value.clearPassword},null,8,nD),[[Q,c.value.password]])]),c.value.id?(u(),F(`label`,rD,[d(D(`input`,{"onUpdate:modelValue":t[9]||=e=>c.value.clearPassword=e,type:`checkbox`,disabled:a.value},null,8,iD),[[Je,c.value.clearPassword]]),t[21]||=w(`清除已保存密码`,-1)])):z(``,!0)]),g.value?(u(),F(`p`,aD,h(g.value),1)):z(``,!0),_.value?(u(),F(`p`,oD,h(_.value.message),1)):z(``,!0),D(`div`,sD,[D(`button`,{type:`button`,disabled:a.value||!c.value.host||!c.value.port||!c.value.name,onClick:P},`测试此配置`,8,cD),D(`button`,{class:`primary`,type:`submit`,disabled:a.value},h(a.value?`处理中…`:`保存代理`),9,lD)])],32)]),_:1},8,[`title`])):z(``,!0)],8,FE))}}),[[`__scopeId`,`data-v-7033bcfb`]]),dD={class:`remote-access-panel`},fD={key:0},pD={key:0},mD=[`disabled`],hD=[`disabled`],gD={class:`binding-code`},_D=[`src`],vD=[`disabled`],yD=[`disabled`],bD={key:4},xD=[`disabled`],SD=[`disabled`],CD={key:7,class:`remote-devices`},wD={key:0},TD=[`disabled`,`onClick`],ED=[`disabled`,`onClick`],DD={key:2,role:`alert`},OD=H(E({__name:`RemoteAccessPanel`,setup(e){let t=ce(),n=O(),r=O(``),a=O(``),o=O(!1),s=()=>window.confirm(`请先在管理平台解绑。清除本机远程记录后需重新生成绑定码;机器身份、工作区数据保留。`),c=e=>window.confirm(`撤销「${e.name||`未命名设备`}」?它会立即断开,不能再连接这台服务器,直到你允许它重新登录。`),l;async function d(e,t){return xe(await X(`/api/app/remote-access`+e,t===void 0?{}:{method:`POST`,body:t}))}async function f(){if(t.user?.localDesktop)try{n.value=await d(``),r.value=n.value.pending?.qr?await _n.toDataURL(n.value.pending.qr):``}catch(e){a.value=e instanceof Error?e.message:`暂时无法连接远程服务`}}async function g(e){o.value=!0,a.value=``;try{await e(),await f()}catch(e){a.value=e instanceof Error?e.message:`操作失败`}finally{o.value=!1}}return m(()=>{f(),l=setInterval(()=>{o.value||f()},5e3)}),i(()=>clearInterval(l)),(e,i)=>(u(),F(`section`,dD,[i[9]||=D(`h4`,null,`远程访问`,-1),i[10]||=D(`p`,null,` 本机始终自动进入,无需登录。绑定到你的 Yaovi 账号后,在其他电脑或手机上用同一账号(密码或扫码)登录,选择这台服务器即可完整使用。 `,-1),V(t).user?.localDesktop?(u(),F(T,{key:1},[n.value?.bound&&!n.value.upgradeRequired&&!n.value.activating?(u(),F(`p`,pD,h(n.value.enabled?n.value.connected?`远程连接已启用`:`正在连接云端`:`远程连接已暂停`),1)):z(``,!0),n.value&&!n.value.bound&&!n.value.pending?(u(),F(`button`,{key:1,disabled:o.value,onClick:i[0]||=e=>{g(async()=>{n.value.pending=await d(`/binding-code`,{})})}},` 生成绑定码 `,8,mD)):z(``,!0),n.value?.upgradeRequired&&!n.value.pending?(u(),F(T,{key:2},[i[6]||=D(`p`,null,` 这台服务器还在使用旧的“逐台设备批准”方式,其他设备暂时无法连接。升级为账号授权后,同一账号登录的设备即可直接使用;账号归属、机器身份和数据都保留。 `,-1),D(`button`,{disabled:o.value,onClick:i[1]||=e=>{g(async()=>{await d(`/enable-account-access`,{})})}},` 升级为账号授权,生成绑定码 `,8,hD)],64)):z(``,!0),n.value?.pending?.code?(u(),F(T,{key:3},[i[7]||=D(`p`,null,` 登录 auth.samien.cn,选择“绑定 Host”并输入此码或扫描绑定二维码。平台确认后自动完成。 `,-1),D(`strong`,gD,h(n.value.pending.code),1),D(`img`,{src:r.value,width:`200`,height:`200`,alt:`Host 绑定二维码(不是登录二维码)`},null,8,_D),D(`p`,null,`有效期至 `+h(new Date(n.value.pending.expiresAt).toLocaleString()),1),D(`button`,{disabled:o.value,onClick:i[2]||=e=>{g(async()=>{await d(`/cancel-binding`,{})})}},` 取消绑定码 `,8,vD),D(`button`,{disabled:o.value,onClick:i[3]||=e=>{g(async()=>{await d(n.value.bound?`/enable-account-access`:`/binding-code`,{})})}},` 重新生成 `,8,yD)],64)):z(``,!0),n.value?.activating?(u(),F(`p`,bD,`绑定中,正在保存并确认激活…`)):z(``,!0),n.value?.bound&&!n.value.upgradeRequired&&!n.value.activating?(u(),F(`button`,{key:5,disabled:o.value,onClick:i[4]||=e=>{g(async()=>{await d(`/enabled`,{enabled:!n.value.enabled})})}},h(n.value.enabled?`暂停远程访问`:`恢复远程访问`),9,xD)):z(``,!0),n.value?.bound?(u(),F(`button`,{key:6,disabled:o.value,onClick:i[5]||=e=>{g(async()=>{s()&&await d(`/clear-binding`,{})})}},` 平台解绑后,清除本机绑定记录 `,8,SD)):z(``,!0),n.value?.bound&&!n.value.upgradeRequired?(u(),F(`section`,CD,[i[8]||=D(`h5`,null,`已授权设备`,-1),D(`p`,null,h(n.value.lan?.listening?`同一局域网内,这些设备断网也能直接连接(端口 ${n.value.lan.port})。`:`这些设备可通过账号远程连接。`)+`在这里撤销立即生效,断网时也有效。 `,1),n.value.devices?.length?z(``,!0):(u(),F(`p`,wD,`还没有设备通过账号连接过这台服务器。`)),(u(!0),F(T,null,p(n.value.devices,e=>(u(),F(`div`,{key:e.clientDeviceId,class:`remote-device`},[D(`span`,null,[D(`strong`,null,h(e.name||`未命名设备`),1),D(`small`,null,h(e.blocked?`已撤销`:e.connected?`连接中`:e.lastSeen?`最近连接 `+new Date(e.lastSeen).toLocaleString():`已授权`),1)]),e.blocked?(u(),F(`button`,{key:1,disabled:o.value,onClick:t=>{g(async()=>{await d(`/restore-device`,{clientDeviceId:e.clientDeviceId})})}},` 允许重新登录 `,8,ED)):(u(),F(`button`,{key:0,disabled:o.value,onClick:t=>{g(async()=>{c(e)&&await d(`/revoke-device`,{clientDeviceId:e.clientDeviceId})})}},` 撤销 `,8,TD))]))),128))])):z(``,!0)],64)):(u(),F(`p`,fD,`请在服务器本机打开此页进行绑定。`)),a.value?(u(),F(`p`,DD,h(a.value),1)):z(``,!0)]))}}),[[`__scopeId`,`data-v-32241564`]]),kD=[{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:`查看服务器状态并管理推送、升级与备份。`}],AD=[{key:`remote-access`,category:`environment`,label:`远程访问`,keywords:`云账号 登录 扫码 P2P TURN 中继 设备 绑定`,summary:`在服务器本机生成绑定码,绑定到你的 Yaovi 账号;本机免登录保持可用。`,admin:!0,localOnly:!0},{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,localOnly:!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,localOnly:!0},{key:`system-backup`,category:`system`,label:`备份`,keywords:`备份 恢复`,summary:`备份包里有凭据和浏览器资料。`,admin:!0,localOnly:!0},{key:`desktop-mode`,category:`system`,label:`运行模式`,keywords:`客户端 服务器 运行模式`,desktop:!0}];function jD(e){return AD.filter(t=>(!t.admin||e.isAdmin)&&(!t.desktop||e.desktop)&&(!t.feature||e.features?.includes(t.feature))&&(!t.localOnly||!e.remote))}var MD=[`onKeydownCapture`],ND={class:`settings-center__body`},PD={class:`settings-sidebar`,"aria-label":`设置分类`},FD={class:`settings-sidebar__mobilebar`},ID=[`disabled`],LD={class:`settings-search`},RD={key:0,class:`settings-category-nav`},zD={class:`settings-category`},BD=[`aria-current`,`disabled`,`onClick`],VD={key:1,class:`settings-search-results`,"aria-label":`设置搜索结果`},HD=[`disabled`,`onClick`],UD={key:0,class:`settings-search-empty`},WD={class:`settings-content__header`},GD=[`aria-label`,`disabled`],KD={class:`settings-content__heading`},qD={class:`settings-scope`},JD=[`disabled`],YD=[`aria-label`],XD={key:0,class:`settings-subpage-title`},ZD=[`disabled`],QD={key:8,class:`settings-section-stack`},$D={key:10,class:`settings-section-stack`},eO={class:`settings-inline-nav`},tO=[`disabled`],nO={key:18,class:`settings-section-stack`},rO={key:20,class:`appearance-panel`,"aria-label":`外观`},iO={class:`theme-options`,role:`radiogroup`,"aria-label":`界面主题`},aO=[`aria-checked`,`onClick`],oO=[`src`],sO={class:`appearance-note`},cO={key:0,class:`settings-content__footer`},lO={role:`status`},uO=[`disabled`],dO=[`disabled`],fO=H(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=ee(()=>nt(()=>import(`./BotSettingsPanel-C_1zAGWJ.js`),__vite__mapDeps([0,1,2,3,4,5,6,7]))),r=ee(()=>nt(()=>import(`./BotControlSettingsPanel-DJ71O3Kh.js`),__vite__mapDeps([8,1,2,3,4,5,6,9]))),i=e,s=t,c=O(),m=O(),g=O(),v=O(`account-profile`),y=O(`account-profile`),b=O(!1),x=O(!1),C=O(!1),E=O(!1),A=_({}),j=_({}),M=_({}),N=O(``),P=O(0),I=!!(window.yaoviDesktop?.modeState&&window.yaoviDesktop?.switchMode),R=U(()=>jD({isAdmin:i.isAdmin,desktop:I,features:i.features,remote:fe()})),B=U(()=>R.value.find(e=>e.key===v.value)??R.value[0]);U(()=>B.value.parent??B.value.key);let H=U(()=>kD.filter(e=>R.value.some(t=>t.category===e.key))),G=U(()=>kD.find(e=>e.key===B.value.category)),K=U(()=>{let e=N.value.trim().toLocaleLowerCase();return e?R.value.filter(t=>(t.label+` `+t.keywords).toLocaleLowerCase().includes(e)):[]}),te=U(()=>!!A[v.value]),q=U(()=>x.value||C.value),J=U(()=>[`user-profile`,`system-models`,`system-auto`,`system-visibility`,`system-web`,`system-hermes-env`,`bot-memory`,`agent-runtime`,`agent-skills`,`bot-files`].includes(v.value)),ne=U(()=>v.value===`system-models`?`defaults`:v.value===`system-auto`?`auto`:v.value===`system-visibility`?`visibility`:v.value===`system-auxiliary`?`auxiliary`:v.value===`system-image`?`image`:v.value===`system-video`?`video`:v.value===`system-voice`?`voice`:`connections`),re=U(()=>v.value+`:`+P.value),ie=U(()=>i.pairingUserName||i.userName||`当前账号`),ae=U(()=>v.value===`user-profile`?`全局用户资料`:v.value===`appearance`||v.value===`chat-appearance`?`当前设备 · 自动保存`:v.value===`credential-vault`?`当前账号:`+ie.value:v.value===`bot-projects`?`项目范围`:v.value===`bot-user-memory`?`用户共享`:[`bot-memory`,`agent-runtime`,`agent-skills`].includes(v.value)?`系统默认 / 指定 Bot`:[`system-models`,`system-auto`,`system-visibility`,`system-auxiliary`,`system-image`,`system-video`,`system-voice`].includes(v.value)?`系统默认 · 仅管理员`:B.value.admin?`服务器设置 · 仅管理员`:`当前服务器`);function oe(e){A[v.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!te.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(!(!R.value.some(t=>t.key===e)||q.value)){if(e!==v.value){if(!le())return;A[v.value]=!1,v.value=e,P.value=0,ue()}y.value=e,b.value=!0,N.value=``,o(()=>m.value?.focus())}}function pe(){if(!(q.value||!te.value)){if(g.value?.reset){g.value.reset();return}A[v.value]=!1,P.value++,ue()}}function me(){q.value||!le()||(A[v.value]=!1,s(`close`))}function he(){if(B.value.parent){de(B.value.parent);return}q.value||!le()||(te.value&&pe(),b.value=!1,o(()=>c.value?.querySelector(`.settings-nav-item[aria-current="page"]`)?.focus()))}function ge(){window.innerWidth<960&&b.value?he():me()}function _e(e){let t=[...c.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===c.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:y.value;v.value=R.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(()=>c.value?.focus())},{immediate:!0}),(t,i)=>(u(),k(L,{to:`body`},[W(rt,{name:`settings-center-fade`},{default:S(()=>[e.open?(u(),F(`div`,{key:0,class:`settings-center-layer`,role:`presentation`,onMousedown:Z(me,[`self`])},[D(`section`,{ref_key:`dialog`,ref:c,class:l([`settings-center`,{"settings-center--mobile-detail":b.value}]),role:`dialog`,"aria-modal":`true`,"aria-label":`设置`,tabindex:`-1`,onKeydownCapture:Ie(Z(ge,[`prevent`,`stop`]),[`esc`]),onKeydown:Ie(_e,[`tab`])},[D(`div`,ND,[D(`aside`,PD,[D(`div`,FD,[i[33]||=D(`h2`,null,`设置`,-1),D(`button`,{class:`settings-mobile-close`,type:`button`,"aria-label":`关闭设置`,disabled:q.value,onClick:me},[W(Y,{name:`close`,size:20})],8,ID)]),D(`label`,LD,[W(Y,{name:`search`,size:16}),d(D(`input`,{"onUpdate:modelValue":i[0]||=e=>N.value=e,type:`search`,"aria-label":`搜索设置`,placeholder:`搜索设置`},null,512),[[Q,N.value]])]),N.value.trim()?(u(),F(`nav`,VD,[(u(!0),F(T,null,p(K.value,e=>(u(),F(`button`,{key:e.key,type:`button`,disabled:q.value,onClick:t=>de(e.key)},[D(`strong`,null,h(e.label),1),D(`small`,null,h(V(kD).find(t=>t.key===e.category)?.label)+` → `+h(e.label),1)],8,HD))),128)),K.value.length?z(``,!0):(u(),F(`p`,UD,`没有匹配的设置`))])):(u(),F(`nav`,RD,[(u(!0),F(T,null,p(H.value,e=>(u(),F(`section`,{key:e.key},[D(`div`,zD,h(e.label),1),(u(!0),F(T,null,p(R.value.filter(t=>t.category===e.key),e=>(u(),F(`button`,{key:e.key,type:`button`,class:`settings-nav-item`,"aria-current":v.value===e.key?`page`:void 0,disabled:q.value,onClick:t=>de(e.key)},h(e.label),9,BD))),128))]))),128))])),i[34]||=D(`footer`,{class:`settings-sidebar__footer`},`Yaovi`,-1)]),D(`main`,{class:l([`settings-content`,{"settings-content--with-footer":J.value}])},[D(`header`,WD,[D(`button`,{class:`mobile-back`,type:`button`,"aria-label":B.value.parent?`返回`+R.value.find(e=>e.key===B.value.parent)?.label:`返回设置分类`,disabled:q.value,onClick:he},[W(Y,{name:`chevron-left`,size:20})],8,GD),D(`div`,KD,[D(`h3`,{ref_key:`contentTitle`,ref:m,tabindex:`-1`},h(B.value.label),513),D(`p`,null,h(B.value.summary||G.value.description),1)]),D(`span`,qD,h(ae.value),1),D(`button`,{class:`settings-center__close`,type:`button`,"aria-label":`关闭设置`,disabled:q.value,onClick:me},[W(Y,{name:`close`,size:20})],8,JD)]),(u(),F(`div`,{key:re.value,id:`settings-current-panel`,class:`settings-content__scroll`,role:`tabpanel`,"aria-label":B.value.label},[B.value.parent?(u(),F(`div`,XD,[D(`button`,{type:`button`,disabled:q.value,onClick:i[1]||=e=>de(B.value.parent)},[W(Y,{name:`chevron-left`,size:16}),w(`返回`+h(R.value.find(e=>e.key===B.value.parent)?.label),1)],8,ZD),D(`h4`,null,h(B.value.label),1)])):z(``,!0),[`my-bots`,`workspace-permissions`,`bot-permission-requests`].includes(v.value)&&e.isAdmin&&e.features?.includes(`bot-permissions-v2`)?(u(),k(V(r),{key:1,"target-bot-id":e.targetBotId,onNavigate:de,page:v.value===`my-bots`?`bots`:v.value===`workspace-permissions`?`permissions`:`requests`,onChanged:i[2]||=e=>s(`bot-settings-changed`),onDirtyChange:oe,onBusyChange:i[3]||=e=>C.value=e},null,8,[`target-bot-id`,`page`])):v.value===`user-profile`&&e.isAdmin?(u(),k(yw,{key:2,ref_key:`activeEditor`,ref:g,"form-id":`settings-active-form`,onDirtyChange:oe,onCanSaveChange:i[4]||=e=>E.value=e,onBusyChange:i[5]||=e=>C.value=e},null,512)):v.value===`system-web`&&e.isAdmin?(u(),k(qT,{key:3,ref_key:`activeEditor`,ref:g,"form-id":`settings-active-form`,onDirtyChange:oe,onCanSaveChange:i[6]||=e=>E.value=e,onBusyChange:i[7]||=e=>C.value=e},null,512)):v.value===`system-hermes-env`&&e.isAdmin?(u(),k(dE,{key:4,ref_key:`activeEditor`,ref:g,"form-id":`settings-active-form`,onDirtyChange:oe,onCanSaveChange:i[8]||=e=>E.value=e,onBusyChange:i[9]||=e=>C.value=e},null,512)):G.value.key===`models`&&e.isAdmin?(u(),k(MT,{key:5,ref_key:`activeEditor`,ref:g,page:ne.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(v.value)&&e.isAdmin?(u(),k(Sp,{key:6,ref_key:`activeEditor`,ref:g,section:v.value===`bot-memory`?`memory`:v.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`])):v.value===`bot-retrieval`&&e.isAdmin?(u(),k($d,{key:7,open:``,onDirtyChange:oe,onBusyChange:i[15]||=e=>C.value=e})):v.value===`bot-vm`?(u(),F(`section`,QD,[W(V(n),{page:`vm`,"is-admin":e.isAdmin,onChanged:i[16]||=e=>s(`bot-settings-changed`),onDirtyChange:oe},null,8,[`is-admin`]),e.isAdmin?(u(),k(iv,{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(v.value)?(u(),k(V(n),{key:9,page:v.value===`bot-projects`?`projects`:`user`,"is-admin":e.isAdmin,onChanged:i[19]||=e=>s(`bot-settings-changed`),onDirtyChange:oe},null,8,[`page`,`is-admin`])):v.value===`bot-computers`&&e.isAdmin?(u(),F(`section`,$D,[D(`div`,eO,[D(`button`,{type:`button`,disabled:q.value,onClick:i[20]||=e=>de(`bot-vm`)},[W(Y,{name:`monitor`,size:18}),i[35]||=w(`管理本地虚拟机`,-1),W(Y,{name:`chevron-left`,size:16})],8,tO)]),W(iv,{section:`environment`,onDirtyChange:i[21]||=e=>se(`environment`,e),onBusyChange:i[22]||=e=>ce(`environment`,e)}),W(Qg,{section:`environment`,onDirtyChange:i[23]||=e=>se(`host-tools`,e),onBusyChange:i[24]||=e=>ce(`host-tools`,e)})])):v.value===`execution-resources`&&e.isAdmin?(u(),k(iv,{key:11,section:`resources`,onDirtyChange:oe,onBusyChange:i[25]||=e=>C.value=e})):v.value===`bot-files`&&e.isAdmin?(u(),k(Rh,{key:12,ref_key:`activeEditor`,ref:g,embedded:``,"form-id":`settings-active-form`,onDirtyChange:oe,onCanSaveChange:i[26]||=e=>E.value=e,onBusyChange:i[27]||=e=>C.value=e},null,512)):v.value===`system-network`&&e.isAdmin?(u(),k(uD,{key:13,onDirtyChange:i[28]||=e=>se(`model-network`,e),onBusyChange:i[29]||=e=>ce(`model-network`,e)})):v.value===`system-hosts`&&e.isAdmin?(u(),k(wE,{key:14,onDirtyChange:oe})):v.value===`remote-access`&&e.isAdmin?(u(),k(OD,{key:15})):v.value===`credential-vault`?(u(),k(AC,{key:16})):v.value===`account-profile`?(u(),k(UC,{key:17,active:!0,onDirtyChange:oe})):v.value===`account-permissions`&&e.isAdmin?(u(),F(`section`,nO,[W(lg),W(Qg,{section:`devices`,onDirtyChange:oe,onBusyChange:i[30]||=e=>C.value=e})])):v.value===`desktop-mode`&&V(I)?(u(),k(Nw,{key:19})):v.value===`appearance`?(u(),F(`section`,rO,[i[38]||=D(`h4`,null,`界面主题`,-1),D(`div`,iO,[(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:l({active:e.themePreference===t[0]}),onClick:e=>s(`set-theme`,t[0])},[D(`img`,{src:`/setting-previews/${t[0]}.png`,alt:``,width:`480`,height:`300`},null,8,oO),D(`strong`,null,h(t[1]),1),(u(),k(a(e.themePreference===t[0]?V(St):V(At)),{class:`theme-choice-mark`,"aria-hidden":`true`}))],10,aO)),64))]),D(`button`,{type:`button`,class:`bubble-settings-entry`,onClick:i[31]||=e=>de(`chat-appearance`)},[W(Y,{name:`chat`,size:20}),i[36]||=D(`span`,null,[D(`strong`,null,`聊天气泡`),D(`small`,null,`预设、背景颜色与样式`)],-1),W(Y,{name:`chevron-left`,size:18})]),D(`p`,sO,[W(Y,{name:`info`,size:16}),i[37]||=w(`更改自动保存到当前设备。`,-1)])])):v.value===`chat-appearance`?(u(),k(Ex,{key:21,theme:e.theme},null,8,[`theme`])):v.value===`system-overview`&&e.isAdmin?(u(),k(AE,{key:22,active:!0,"upstream-ready":e.upstreamReady,"upstream-error":e.upstreamError,onNavigate:de},null,8,[`upstream-ready`,`upstream-error`])):v.value===`system-push`&&e.isAdmin?(u(),k(Wv,{key:23,section:`push`,active:!0,onDirtyChange:oe})):v.value===`system-update`&&e.isAdmin?(u(),k(PE,{key:24,section:`upgrade`,onLockChange:i[32]||=e=>x.value=e})):v.value===`system-backup`&&e.isAdmin?(u(),k(PE,{key:25,section:`backup`})):z(``,!0)],8,YD)),J.value?(u(),F(`footer`,cO,[D(`p`,lO,h(C.value?`正在处理…`:te.value?`有未保存的更改`:`仅保存当前页面的更改`),1),D(`div`,null,[D(`button`,{type:`button`,class:`settings-footer__cancel`,disabled:q.value||!te.value,onClick:pe},`取消更改`,8,uO),D(`button`,{type:`submit`,class:`settings-footer__save`,form:`settings-active-form`,disabled:q.value||!E.value},h(C.value?`正在保存…`:`保存更改`),9,dO)])])):z(``,!0)],2)])],42,MD)],32)):z(``,!0)]),_:1})]))}}),[[`__scopeId`,`data-v-d2fb8fb8`]]);function pO(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 mO(e){let t=0;for(let n=0;n<e.length;++n)e[n]===`&`&&++t;return t}var hO=/\s*,(?![^(]*\))\s*/g,gO=/\s+/g;function _O(e,t){let n=[];return t.split(hO).forEach(t=>{let r=mO(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 vO(e,t){let n=[];return t.split(hO).forEach(t=>{e.forEach(e=>{n.push((e&&e+` `)+t)})}),n}function yO(e){let t=[``];return e.forEach(e=>{e&&=e.trim(),e&&(t=e.includes(`&`)?_O(t,e):vO(t,e))}),t.join(`, `).replace(gO,` `)}function bO(e){if(!e)return;let t=e.parentElement;t&&t.removeChild(e)}function xO(e,t){return(t??document.head).querySelector(`style[cssr-id="${e}"]`)}function SO(e){let t=document.createElement(`style`);return t.setAttribute(`cssr-id`,e),t}function CO(e){return e?/^\s*@(s|m)/.test(e):!1}var wO=/[A-Z]/g;function TO(e){return e.replace(wO,e=>`-`+e.toLowerCase())}function EO(e,t=` `){return typeof e==`object`&&e?` {
|
|
23
23
|
`+Object.entries(e).map(e=>t+` ${TO(e[0])}: ${e[1]};`).join(`
|
|
24
24
|
`)+`
|
|
25
25
|
`+t+`}`:`: ${e};`}function DO(e,t,n){return typeof e==`function`?e({context:t.context,props:n}):e}function OO(e,t,n,r){if(!t)return``;let i=DO(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+` {
|
|
@@ -214,7 +214,7 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho
|
|
|
214
214
|
right: 0;
|
|
215
215
|
opacity: 0;
|
|
216
216
|
}
|
|
217
|
-
`)]),VP=[`aria-valuenow`,`role`],HP={...cP.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},UP=E({name:`Progress`,props:HP,setup(e){let t=U(()=>e.indicatorPlacement||e.indicatorPosition),n=U(()=>{if(e.gapDegree||e.gapDegree===0)return e.gapDegree;if(e.type===`dashboard`)return 75}),{mergedClsPrefixRef:r,inlineThemeDisabled:i}=nN(e),a=cP(`Progress`,`-progress`,BP,xP,e,r),o=U(()=>{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,[$O(`iconColor`,t)]:h,[$O(`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?sP(`progress`,U(()=>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:c,percentage:l,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:bN([C,`${b}-progress`,`${b}-progress--${e}`,`${b}-progress--${i}`]),style:s(t),"aria-valuemax":100,"aria-valuemin":0,"aria-valuenow":l,role:e===`circle`||e===`line`||e===`dashboard`?`progressbar`:`none`},[e===`circle`||e===`dashboard`?(u(),k(kP,{key:0,clsPrefix:b,status:i,showIndicator:r,indicatorTextColor:n,railColor:a,fillColor:c,railStyle:o,offsetDegree:this.offsetDegree,percentage:l,viewBoxWidth:d,strokeWidth:f,gapDegree:x===void 0?e===`dashboard`?75:0:x,gapOffsetDegree:S,unit:m},yN(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(jP,{key:0,clsPrefix:b,status:i,showIndicator:r,indicatorTextColor:n,railColor:a,fillColor:c,railStyle:o,percentage:l,processing:v,indicatorPlacement:p,unit:m,fillBorderRadius:g,railBorderRadius:h,height:_},yN(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(zP,{key:0,clsPrefix:b,strokeWidth:f,railColor:a,fillColor:c,railStyle:o,viewBoxWidth:d,percentage:l,showIndicator:r,circleGap:y},yN(w),1032,[`clsPrefix`,`strokeWidth`,`railColor`,`fillColor`,`railStyle`,`viewBoxWidth`,`percentage`,`showIndicator`,`circleGap`])):_N(()=>null)],64))],64))],14,VP)}}),WP=[`title`],GP=[`title`,`aria-label`,`aria-busy`,`disabled`],KP=[`aria-label`,`aria-valuenow`],qP={viewBox:`0 0 24 24`,"aria-hidden":`true`},JP=[`stroke-dasharray`],YP={class:`desktop-update-entry__label`,"aria-live":`polite`},XP={key:2,class:`desktop-update-dot`,"aria-hidden":`true`},ZP={key:0,class:`desktop-update-error`,role:`alert`},QP=H(E({__name:`DesktopUpdateEntry`,props:{state:{},pending:{type:Boolean},error:{}},emits:[`activate`],setup(e,{emit:t}){let n=e,r=t,i=U(()=>!!(n.pending||[`checking`,`downloading`,`verifying`,`preparing`,`installing`].includes(n.state?.phase??``))),a=U(()=>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=U(()=>{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`?`已是最新版本`:`检测更新`}),s=U(()=>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:l([`desktop-update-entry`,{"desktop-update-entry--ready":e.state?.phase===`ready`}]),title:s.value},[D(`button`,{type:`button`,title:s.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:l([`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`,qP,[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,JP)]))],10,KP)):(u(),k(Y,{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`,YP,h(o.value),1),(e.state?.available||e.state?.phase===`ready`)&&!i.value?(u(),F(`span`,XP)):z(``,!0)],8,GP),e.error||e.state?.error?(u(),F(`p`,ZP,h(e.error||e.state?.error),1)):z(``,!0)],10,WP))}}),[[`__scopeId`,`data-v-4ba891bf`]]),$P=[`aria-label`,`title`],eF=H(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]||=Z(e=>n(`reset`),[`prevent`])},null,40,$P))}}),[[`__scopeId`,`data-v-2dca694d`]]);function tF(){let e=window.yaoviDesktop,t=!!(e?.updateState&&e?.updateAction),n=O(),r=O(``),a=O(!1),o=U(()=>!!(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 nF(e,t,n){return n<t?t:Math.min(n,Math.max(t,Math.round(e)))}function rF(e,t){try{let n=localStorage.getItem(e);if(n==null)return t.default;let r=Number(n);return Number.isFinite(r)?nF(r,t.min,t.max):t.default}catch{return t.default}}function iF(e,t){let n=O(rF(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 nF(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 aF=[`data-desktop-update-inline`,`inert`],oF=[`inert`],sF=[`aria-label`],cF=[`inert`],lF={class:`bot-list-header`},uF=[`aria-label`,`aria-expanded`],dF={key:0,class:`unread-entry__count`,"aria-hidden":`true`},fF=[`aria-expanded`],pF=[`aria-expanded`],mF={class:`sidebar-context__body`},hF={class:`sidebar-footer sidebar-footer--apps`},gF={class:`sidebar-account-switcher`},_F=[`aria-label`,`aria-expanded`],vF={class:`sidebar-account-avatar`},yF=[`data-state`,`title`],bF={class:`server-connection-dot__label`},xF=[`aria-hidden`,`inert`],SF={class:`mobile-drawer__header`},CF={class:`mobile-drawer__actions`},wF=[`aria-expanded`],TF={class:`sidebar-context__body`},EF={class:`sidebar-footer mobile-drawer__footer sidebar-footer--apps`},DF={class:`sidebar-account-switcher`},OF=[`aria-label`,`aria-expanded`],kF={class:`sidebar-account-avatar`},AF=[`data-state`,`title`],jF={class:`server-connection-dot__label`},MF=[`inert`],NF={class:`workspace-inspector`},PF={class:`workspace-inspector__close`},FF=[`aria-label`,`title`],IF=[`onKeydown`],LF=[`disabled`,`aria-busy`],RF={key:1,class:`update-menu-error`,role:`alert`},zF=[`disabled`,`aria-busy`],BF=[`disabled`,`aria-busy`],VF={key:5,class:`update-menu-error`,role:`alert`},HF={key:6,class:`update-menu-error`,role:`alert`},UF=[`onKeydown`],WF=`yaovi:workspace-sidebar-width-conversations-v2`,GF=`yaovi:workspace-inspector-width`,KF=320,qF=6,JF=`yaovi:sidebar-search`,YF=`yaovi:sidebar-search-close`,XF=H(E({__name:`WorkspaceShell`,props:{remoteHost:{type:Boolean},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:``},connection:{}},emits:[`switchHost`,`logout`,`toggleTheme`,`setTheme`,`closeInspector`,`createAgent`,`createGroup`,`createSection`,`botSettingsChanged`],setup(e,{expose:t,emit:n}){let r=ee(()=>nt(()=>import(`./AboutDialog-CDpS-zAu.js`),__vite__mapDeps([10,1,3,4,5,11,12,13]))),a=ee(()=>nt(()=>import(`./UpdateCheckDialog-BaMo_M4n.js`),__vite__mapDeps([14,1,3,4,5,11,12,15]))),c=ee(()=>nt(()=>import(`./BotPluginsDialog-HIhXqyGn.js`),__vite__mapDeps([16,1,3,4,5,11,12,17]))),d={default:268,min:200,max:480},p={default:390,min:310,max:560},g=e,_=n,y=U(()=>g.serverName||g.userName||`服务器`),b=st(),x=O(!1),C=O({left:0,top:0}),E;function A(e){E=e.currentTarget;let t=E.getBoundingClientRect(),n=E.closest(`aside`).getBoundingClientRect();C.value={left:n.right+12,top:t.top},ne.value=!1,oe.value=!1,x.value=!0}function j(){x.value=!1,o(()=>{E?.isConnected&&E.focus()})}let M=Ae(),N=Se(),P=O(!1),I=O(!1),R=O(null),B=O(),H=O(),G=O(`account-profile`),K=O(),te=O(),q=O(),J=O(!1),ne=O(!1),re=O(null),ie=null,ae=O({left:`8px`,top:`58px`}),oe=O(!1),se=U(()=>g.remoteHost||!!window.yaoviDesktop?.openRemoteLogin),ce=O(!1),le=O(``),ue=tF(),{state:de,error:fe,pending:me,visible:he}=ue,ge=U(()=>ue.supported||!!window.yaoviDesktop?.openUpdates||g.isAdmin),_e=U(()=>me.value||[`checking`,`downloading`,`verifying`,`preparing`,`installing`].includes(de.value?.phase??``)),ve=U(()=>de.value?.phase===`checking`?`正在检测…`:de.value?.phase===`checked`&&!de.value.available?`已是最新版本`:`检测更新`),ye=O(!1),be=O(``),xe=O(null),Ce=null,we=O({left:`8px`,bottom:`8px`,maxHeight:`calc(100dvh - 16px)`}),Te=O(null),Ee=O(null),De=O(),Oe=iF(WF,d),ke=iF(GF,p),je=U(()=>Oe),Me=U(()=>je.value.width.value),Ne=U(()=>({"--workspace-sidebar-width":`${Me.value}px`,"--workspace-inspector-width":`${ke.width.value}px`}));function Pe(){return De.value?.clientWidth??window.innerWidth}function Fe(){let e=g.inspectorOpen?ke.width.value+qF:0;return Pe()-KF-qF-e}function Le(){return Pe()-KF-qF-Me.value-qF}function Re(e){je.value.beginDrag(e,{direction:1,maxAvailable:Fe})}function ze(){je.value.reset(Fe())}function Be(e){ke.beginDrag(e,{direction:-1,maxAvailable:Le})}function Ve(){ke.reset(Le())}async function He(e){P.value=!1,await N.push(e)}function Ue(){P.value=!0,o(()=>q.value?.focus())}function X(){P.value=!1,o(()=>te.value?.focus())}function We(e){let t=e.target;t.closest(`.workspace-create-menu, .sidebar-create-trigger`)||(ne.value=!1),t.closest(`.workspace-settings-menu, .sidebar-account-switcher__main`)||(oe.value=!1)}function Ge(){ne.value=!1,o(()=>{ie?.isConnected&&ie.focus()})}async function Ke(e){if(ne.value){Ge();return}ie=e.currentTarget;let t=ie.getBoundingClientRect();ae.value={left:`${Math.max(8,Math.min(t.left,window.innerWidth-192))}px`,top:`${Math.max(8,Math.min(t.bottom+6,window.innerHeight-(g.features?.includes(`conversation-sections-v1`)?150:96)))}px`},ne.value=!0,await o(),re.value?.querySelector(`[role="menuitem"]`)?.focus()}function qe(e){if(Ge(),e===`section`){_(`createSection`);return}P.value=!1,_(e===`agent`?`createAgent`:`createGroup`)}function Je(e){if(e.target.closest(`select, input, textarea`)||![`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 Ye(){oe.value=!1,o(()=>{Ce?.isConnected&&Ce.focus()})}async function Q(e){if(oe.value){Ye();return}Ce=e.currentTarget;let t=Ce.getBoundingClientRect(),n=Math.max(8,window.innerHeight-t.top+6);we.value={left:`${Math.max(8,Math.min(t.left,window.innerWidth-268))}px`,bottom:`${n}px`,maxHeight:`${Math.max(100,window.innerHeight-n-8)}px`},ne.value=!1,be.value=``,le.value=``,ue.refresh(),oe.value=!0,await o(),xe.value?.querySelector(`[role="menuitem"]`)?.focus()}async function Xe(){if(ce.value)return;if(g.remoteHost){Ye(),_(`switchHost`);return}let e=window.yaoviDesktop;if(e?.openRemoteLogin){ce.value=!0,le.value=``;try{await e.openRemoteLogin(),Ye()}catch(e){le.value=e instanceof Error?e.message:`无法打开服务器列表,请重试。`}finally{ce.value=!1}}}async function Ze(){if(!(ye.value||!ge.value)){if(be.value=``,ue.supported){await ue.run(`check`);return}if(window.yaoviDesktop?.openUpdates){ye.value=!0;try{await window.yaoviDesktop.openUpdates(),Ye()}catch(e){be.value=e instanceof Error?e.message:`无法打开更新窗口,请重试`}finally{ye.value=!1}return}B.value=Ce?.closest(`.mobile-drawer`)?te.value:Ce??void 0,oe.value=!1,P.value=!1,R.value=`update`}}function Qe(){K.value=B.value,R.value=null,ut(`system-update`)}function $e(e){if(!(e===`remote-access`&&!g.isAdmin)){if(oe.value=!1,e===`bots`){ct();return}if(e===`remote-access`){ut(`remote-access`);return}if(K.value=Ce?.closest(`.mobile-drawer`)?te.value:Ce??void 0,e===`about`){B.value=K.value,P.value=!1,R.value=e;return}ut(`account-profile`)}}function et(){R.value=null,o(()=>B.value?.isConnected&&B.value.focus())}function tt(e){let t=e.currentTarget;B.value=t.closest(`.mobile-drawer`)?te.value:t,oe.value=!1,ne.value=!1,P.value=!1,R.value=`plugins`}function it(){oe.value=!1,He(`/conversations/automations?from=`+encodeURIComponent(M.fullPath))}function at(){oe.value=!1,He(`/conversations/workstreams?from=`+encodeURIComponent(M.fullPath))}function ot(){oe.value=!1,He(`/conversations/usage?from=`+encodeURIComponent(M.fullPath))}function ct(){g.isAdmin&&(I.value=!1,He(`/conversations`))}function lt(e){!(e.metaKey||e.ctrlKey)||e.key.toLowerCase()!==`k`||I.value||document.querySelector(`dialog[open]`)||(e.preventDefault(),J.value?document.dispatchEvent(new CustomEvent(YF)):ft(null))}function ut(e=`account-profile`,t,n){H.value=n;let r=t?.currentTarget;r instanceof HTMLButtonElement&&(K.value=r.closest(`.mobile-drawer`)?te.value:r),oe.value=!1,P.value=!1,G.value=e,I.value=!0}function dt(){I.value=!1,o(()=>K.value?.focus())}async function ft(e){ne.value=!1,J.value=!0,document.dispatchEvent(new CustomEvent(JF,{detail:{section:`groups`}}))}async function pt(e,t=!1,n=!1){let r=e?.querySelector(`input[type="search"]`);t&&r?.value&&(r.value=``,r.dispatchEvent(new Event(`input`,{bubbles:!0}))),J.value=!1,document.dispatchEvent(new CustomEvent(YF)),r?.blur(),n&&(await o(),e?.closest(`aside`)?.querySelector(`.sidebar-search-trigger`)?.focus())}function mt(e){let t=e.target;t.matches(`input[type="search"]`)&&!t.value&&pt(t.closest(`.sidebar-context`))}function ht(e){let t=e.target;t.matches(`input[type="search"]`)&&!t.value&&pt(t.closest(`.sidebar-context`))}function gt(){J.value=!1}f(()=>M.fullPath,()=>{P.value=!1,ne.value=!1,oe.value=!1,R.value=null});function _t(){g.isAdmin&&(K.value=document.activeElement instanceof HTMLButtonElement?document.activeElement:void 0,R.value=null,ut(`bot-vm`))}return m(()=>{window.addEventListener(`yaovi:local-vm-settings`,_t),document.addEventListener(`mousedown`,We),document.addEventListener(YF,gt),document.addEventListener(`keydown`,lt)}),i(()=>{window.removeEventListener(`yaovi:local-vm-settings`,_t),document.removeEventListener(`mousedown`,We),document.removeEventListener(YF,gt),document.removeEventListener(`keydown`,lt)}),t({openLocalVm:_t,openSettings:ut}),(t,n)=>(u(),F(`div`,{ref_key:`shellEl`,ref:De,class:l([`workspace-shell`,{"workspace-shell--sidebar-focused":e.sidebarFocusMode,"workspace-shell--conversations":!0,"workspace-shell--conversation-open":!!V(M).params.id||V(M).query.view===`bots`}]),"data-desktop-update-inline":V(ue).supported?``:void 0,style:s(Ne.value),inert:x.value||I.value||R.value||J.value?!0:void 0},[D(`header`,{class:`mobile-header`,inert:P.value},[D(`button`,{ref_key:`mobileNavigationTrigger`,ref:te,class:`icon-button`,type:`button`,"aria-label":`打开导航`,onClick:Ue},[W(Y,{name:`menu`,size:20})],512),D(`button`,{class:`mobile-brand`,type:`button`,"aria-label":`返回聊天`,onClick:n[0]||=e=>He(`/conversations`)},[W(pe,{size:28,compact:``})]),D(`button`,{class:`icon-button`,type:`button`,"aria-label":e.theme===`dark`?`切换浅色主题`:`切换深色主题`,onClick:n[1]||=e=>_(`toggleTheme`)},[W(Y,{name:e.theme===`dark`?`sun`:`moon`},null,8,[`name`])],8,sF)],8,oF),D(`aside`,{class:`desktop-sidebar rail`,"aria-label":`主导航`,inert:P.value},[D(`div`,lF,[n[20]||=D(`span`,{class:`bot-list-header__spacer`},null,-1),D(`button`,{class:`bot-list-toolbar-button unread-entry`,type:`button`,"aria-label":`未读消息,${V(b).total} 条`,"aria-haspopup":`dialog`,"aria-controls":`unread-center`,"aria-expanded":x.value,title:`未读消息`,onClick:A},[W(Y,{name:`bell`,size:20}),V(b).total?(u(),F(`b`,dF,h(V(b).total>99?`99+`:V(b).total),1)):z(``,!0)],8,uF),V(ue).supported&&V(he)?(u(),k(QP,{key:0,state:V(de),pending:V(me),error:V(fe),onActivate:n[2]||=e=>V(ue).run()},null,8,[`state`,`pending`,`error`])):z(``,!0),D(`button`,{class:`bot-list-toolbar-button sidebar-search-trigger`,type:`button`,"aria-label":`搜索`,"aria-expanded":J.value,onClick:n[3]||=e=>ft(Te.value)},[W(Y,{name:`search`,size:21})],8,fF),D(`button`,{class:`bot-list-toolbar-button sidebar-create-trigger`,type:`button`,"aria-label":`新建`,"aria-haspopup":`menu`,"aria-expanded":ne.value,onClick:Ke},[W(Y,{name:`plus`,size:23})],8,pF)]),D(`section`,{ref_key:`desktopSidebarContext`,ref:Te,class:l([`sidebar-context`,{"sidebar-context--searching":J.value}]),onKeydownCapture:n[4]||=Ie(e=>pt(Te.value,!0,!0),[`esc`]),onInputCapture:mt,onFocusoutCapture:ht},[v(t.$slots,`sidebar-before-heading`,{},void 0,!0),D(`div`,mF,[v(t.$slots,`sidebar`,{},void 0,!0)])],34),D(`div`,hF,[D(`div`,gF,[D(`button`,{class:`sidebar-account-switcher__main`,type:`button`,title:`当前账号`,"aria-label":`${y.value},账号菜单`,"aria-haspopup":`menu`,"aria-expanded":oe.value,onClick:n[5]||=e=>Q(e)},[D(`span`,vF,[W(Ky,{name:y.value,"image-url":e.userAvatar,size:28},null,8,[`name`,`image-url`]),e.connection?(u(),F(`span`,{key:0,class:`server-connection-dot`,"data-state":e.connection,role:`status`,"aria-label":`服务器连接状态`,title:V(Py)(e.connection)},[D(`span`,bF,h(V(Py)(e.connection)),1)],8,yF)):z(``,!0)])],8,_F)]),D(`button`,{class:`sidebar-apps-trigger`,type:`button`,"aria-haspopup":`dialog`,onClick:tt},[W(V(ob),{"aria-hidden":`true`}),n[21]||=D(`span`,null,`连接应用`,-1)])])],8,cF),W(eF,{class:`column-resize--shell desktop-only-resize`,label:`调整侧栏宽度`,onDrag:Re,onReset:ze}),W(rt,{name:`drawer-fade`},{default:S(()=>[P.value?(u(),F(`button`,{key:0,class:`drawer-scrim`,type:`button`,"aria-label":`关闭导航`,onClick:X})):z(``,!0)]),_:1}),D(`aside`,{class:l([`mobile-drawer`,{"mobile-drawer--open":P.value,"mobile-drawer--focused":e.sidebarFocusMode}]),"aria-label":`移动导航`,"aria-hidden":!P.value,inert:!P.value},[D(`div`,SF,[D(`button`,{class:`sidebar-brand`,type:`button`,"aria-label":`返回聊天`,onClick:n[6]||=e=>He(`/conversations`)},[W(pe,{size:32,compact:``})]),D(`div`,CF,[V(ue).supported&&V(he)?(u(),k(QP,{key:0,state:V(de),pending:V(me),error:V(fe),onActivate:n[7]||=e=>V(ue).run()},null,8,[`state`,`pending`,`error`])):z(``,!0),D(`button`,{ref_key:`mobileDrawerClose`,ref:q,class:`icon-button`,type:`button`,"aria-label":`关闭导航`,onClick:X},[W(Y,{name:`close`})],512),D(`button`,{class:`sidebar-create-trigger`,type:`button`,"aria-label":`新建`,title:`新建`,"aria-haspopup":`menu`,"aria-expanded":ne.value,onClick:Ke},[W(Y,{name:`plus`,size:19})],8,wF)])]),D(`section`,{ref_key:`mobileSidebarContext`,ref:Ee,class:l([`sidebar-context mobile-drawer__context`,{"sidebar-context--searching":J.value}]),onKeydownCapture:n[8]||=Ie(e=>pt(Ee.value,!0,!0),[`esc`]),onInputCapture:mt,onFocusoutCapture:ht},[v(t.$slots,`sidebar-before-heading`,{},void 0,!0),D(`div`,TF,[v(t.$slots,`mobile-sidebar`,{},void 0,!0)])],34),D(`div`,EF,[D(`div`,DF,[D(`button`,{class:`sidebar-account-switcher__main`,type:`button`,title:`当前账号`,"aria-label":`${y.value},账号菜单`,"aria-haspopup":`menu`,"aria-expanded":oe.value,onClick:n[9]||=e=>Q(e)},[D(`span`,kF,[W(Ky,{name:y.value,"image-url":e.userAvatar,size:40},null,8,[`name`,`image-url`]),e.connection?(u(),F(`span`,{key:0,class:`server-connection-dot`,"data-state":e.connection,role:`status`,"aria-label":`服务器连接状态`,title:V(Py)(e.connection)},[D(`span`,jF,h(V(Py)(e.connection)),1)],8,AF)):z(``,!0)])],8,OF)]),D(`button`,{class:`sidebar-apps-trigger`,type:`button`,"aria-haspopup":`dialog`,onClick:tt},[W(V(ob),{"aria-hidden":`true`}),n[22]||=D(`span`,null,`连接应用`,-1)])])],10,xF),D(`main`,{class:`workspace-main`,inert:P.value},[v(t.$slots,`default`,{},void 0,!0)],8,MF),e.inspectorOpen?(u(),F(T,{key:0},[W(eF,{class:`column-resize--shell desktop-only-resize`,label:`调整预览栏宽度`,onDrag:Be,onReset:Ve}),D(`aside`,NF,[D(`div`,PF,[D(`button`,{class:`icon-button`,type:`button`,"aria-label":e.inspectorCloseLabel,title:e.inspectorCloseLabel,onClick:n[10]||=e=>_(`closeInspector`)},[W(Y,{name:`close`})],8,FF)]),v(t.$slots,`inspector`,{},void 0,!0)])],64)):z(``,!0),R.value===`about`?(u(),k(V(r),{key:1,onClose:et})):z(``,!0),R.value===`update`&&e.isAdmin?(u(),k(V(a),{key:2,onClose:et,onManage:Qe})):z(``,!0),R.value===`plugins`?(u(),k(V(c),{key:3,onClose:et})):z(``,!0),W(fO,{open:I.value,features:e.features,"initial-page":G.value,"target-bot-id":H.value,"user-name":y.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:dt,onLogout:n[11]||=e=>_(`logout`),onSetTheme:n[12]||=e=>_(`setTheme`,e),onBotSettingsChanged:n[13]||=e=>_(`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`},[oe.value?(u(),F(`div`,{key:0,class:`workspace-create-dismiss`,onPointerdown:Z(Ye,[`self`]),onKeydown:Ie(Z(Ye,[`prevent`,`stop`]),[`esc`])},[D(`div`,{ref_key:`settingsMenu`,ref:xe,class:`workspace-create-menu workspace-settings-menu`,style:s(we.value),role:`menu`,"aria-label":`账号菜单`,onKeydown:Je},[W(Hy),se.value?(u(),F(`button`,{key:0,type:`button`,role:`menuitem`,disabled:ce.value,"aria-busy":ce.value,onClick:Xe},h(ce.value?`正在打开…`:`切换 Yaovi`),9,LF)):z(``,!0),le.value?(u(),F(`p`,RF,h(le.value),1)):z(``,!0),D(`button`,{type:`button`,role:`menuitem`,onClick:n[14]||=e=>$e(`settings`)},[W(Y,{name:`settings`,size:17}),n[23]||=w(`设置`,-1)]),e.isAdmin&&!e.remoteHost?(u(),F(`button`,{key:2,type:`button`,role:`menuitem`,onClick:n[15]||=e=>$e(`remote-access`)},[W(Y,{name:`monitor`,size:17}),n[24]||=w(`远程访问`,-1)])):z(``,!0),D(`button`,{type:`button`,role:`menuitem`,onClick:it},[W(Y,{name:`clock`,size:17}),n[25]||=w(`自动化`,-1)]),D(`button`,{type:`button`,role:`menuitem`,onClick:at},[W(Y,{name:`board`,size:17}),n[26]||=w(`工作流`,-1)]),D(`button`,{type:`button`,role:`menuitem`,onClick:ot},[W(Y,{name:`history`,size:17}),n[27]||=w(`Token 用量`,-1)]),D(`button`,{type:`button`,role:`menuitem`,onClick:n[16]||=e=>$e(`about`)},[W(Y,{name:`info`,size:17}),n[28]||=w(`关于`,-1)]),V(ue).supported?(u(),F(`button`,{key:3,class:`desktop-update-check`,type:`button`,role:`menuitem`,disabled:_e.value||V(de)?.phase===`ready`,"aria-busy":_e.value,onClick:Ze},[W(Y,{name:`refresh`,size:17}),w(h(ve.value),1)],8,zF)):ge.value?(u(),F(`button`,{key:4,type:`button`,role:`menuitem`,disabled:ye.value,"aria-busy":ye.value,onClick:Ze},[W(Y,{name:`refresh`,size:17}),w(h(ye.value?`正在打开…`:`检测更新`),1)],8,BF)):z(``,!0),be.value?(u(),F(`p`,VF,h(be.value),1)):z(``,!0),V(ue).supported&&(V(fe)||V(de)?.error)?(u(),F(`p`,HF,h(V(fe)||V(de)?.error),1)):z(``,!0)],36)],40,IF)):z(``,!0),ne.value?(u(),F(`div`,{key:1,class:`workspace-create-dismiss`,onPointerdown:Z(Ge,[`self`]),onKeydown:Ie(Z(Ge,[`prevent`,`stop`]),[`esc`])},[D(`div`,{ref_key:`createMenu`,ref:re,class:`workspace-create-menu`,style:s(ae.value),role:`menu`,"aria-label":`新建聊天`,onKeydown:Je},[D(`button`,{type:`button`,role:`menuitem`,onClick:n[17]||=e=>qe(`agent`)},[W(Y,{name:`users`,size:17}),n[29]||=w(`新建 Bot`,-1)]),D(`button`,{type:`button`,role:`menuitem`,onClick:n[18]||=e=>qe(`group`)},[W(Y,{name:`groups`,size:17}),n[30]||=w(`新建群聊`,-1)]),e.features?.includes(`conversation-sections-v1`)?(u(),F(T,{key:0},[n[32]||=D(`div`,{class:`workspace-create-divider`,role:`separator`},null,-1),D(`button`,{type:`button`,role:`menuitem`,onClick:n[19]||=e=>qe(`section`)},[W(Y,{name:`folder-plus`,size:17}),n[31]||=w(`新建分组`,-1)])],64)):z(``,!0)],36)],40,UF)):z(``,!0)])),x.value?(u(),k(My,{key:4,anchor:C.value,onClose:j},null,8,[`anchor`])):z(``,!0)],14,aF))}}),[[`__scopeId`,`data-v-99ac97e9`]]),ZF={class:`resource-sidebar`},QF={key:0,class:`sidebar-search`},$F=[`value`,`placeholder`],eI=[`aria-label`],tI={key:0,class:`sidebar-loading`,"aria-label":`正在加载`},nI=[`aria-selected`,`draggable`,`data-sidebar-id`,`onClick`,`onContextmenu`,`onKeydown`],rI=[`aria-label`,`aria-expanded`,`onClick`],iI=[`aria-label`,`onClick`],aI={class:`sidebar-item__copy`},oI=[`title`],sI={key:1},cI={key:0,class:`sidebar-item__row sidebar-item__row--secondary`},lI={key:0,class:`sidebar-item__attention`},uI={key:1},dI=[`onClick`],fI=[`disabled`],pI={key:3,class:`sidebar-empty`},mI=`yaovi:sidebar-search`,hI=`yaovi:sidebar-search-close`,gI=H(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},listLabel:{default:`资源列表`},draggableItems:{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),g=U(()=>r.items.reduce((e,t)=>(t.section&&!t.nested&&(e[t.section]=(e[t.section]??0)+1),e),{})),_=U(()=>r.items.map((e,t)=>({item:e,section:e.section&&e.section!==r.items[t-1]?.section?e.section:``,sectionLabel:e.section===`已置顶`?`已置顶 ${g.value[e.section]??0}`:e.section||``})));async function v(){if(!r.searchable)return;d.value=!0,await o();let e=c.value;!e||e.offsetParent===null||(e.focus(),e.select())}function y(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(hI))}function x(){r.externalSearch||v()}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(mI,x),document.addEventListener(hI,C)}),i(()=>{document.removeEventListener(mI,x),document.removeEventListener(hI,C)}),t({focusSearch:v}),(t,n)=>(u(),F(`div`,ZF,[W(rt,{name:`search-reveal`},{default:S(()=>[e.searchable&&!e.externalSearch&&d.value?(u(),F(`label`,QF,[W(Y,{name:`search`,size:15}),D(`input`,{ref_key:`searchInput`,ref:c,value:e.search,type:`search`,placeholder:e.searchPlaceholder,onInput:y,onKeydown:n[0]||=Ie(Z(e=>b(!0),[`prevent`]),[`esc`]),onBlur:n[1]||=t=>!e.search&&b()},null,40,$F)])):z(``,!0)]),_:1}),D(`div`,{class:`sidebar-list`,role:`listbox`,"aria-label":e.listLabel,onScrollPassive:A},[e.loading&&!e.items.length?(u(),F(`div`,tI,[(u(),F(T,null,p(7,e=>D(`span`,{key:e,class:`sidebar-skeleton`,style:s({opacity:1-e*.08})},null,4)),64))])):(u(!0),F(T,{key:1},p(_.value,t=>(u(),F(T,{key:t.item.id},[t.section?(u(),F(`div`,{key:0,class:l([`sidebar-section-label`,{"sidebar-section-label--pinned":t.section===`已置顶`}]),role:`presentation`},[D(`span`,null,h(t.sectionLabel),1)],2)):z(``,!0),D(`div`,{class:l([`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,draggable:e.draggableItems?`true`:void 0,"data-sidebar-id":t.item.id,onClick:e=>a(`select`,t.item.id),onContextmenu:Z(e=>a(`contextMenu`,t.item.id,e),[`prevent`,`stop`]),onKeydown:[Ie(Z(e=>E(t.item.id,e),[`shift`,`prevent`,`stop`]),[`f10`]),Ie(Z(e=>E(t.item.id,e),[`prevent`,`stop`]),[`context-menu`]),Ie(Z(e=>a(`select`,t.item.id),[`prevent`]),[`enter`]),Ie(Z(e=>a(`select`,t.item.id),[`prevent`]),[`space`])]},[t.item.expandable?(u(),F(`button`,{key:0,class:l([`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:Z(e=>a(`toggle`,t.item.id),[`stop`])},[W(Y,{name:`chevron-down`,size:13})],10,rI)):z(``,!0),e.singleLine?z(``,!0):(u(),F(`span`,{key:1,class:l([`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:Z(e=>a(`avatar`,t.item.id,e),[`stop`]),onKeydown:n[2]||=Z(()=>{},[`stop`])},[W(Ye,{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,iI)):t.item.avatarKind===`agent`?(u(),k(Ye,{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(Me,{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(Y,{key:3,name:t.item.icon,size:t.item.topic?14:15},null,8,[`name`,`size`])):(u(),F(T,{key:4},[w(h(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:l([`presence`,`presence--${t.item.status}`])},null,2)):z(``,!0)],2)),D(`span`,aI,[D(`span`,{class:l([`sidebar-item__row`,{"sidebar-item__row--badged":t.item.badge}])},[D(`strong`,null,[t.item.pinned?(u(),k(Y,{key:0,name:`pin-filled`,size:12})):z(``,!0),D(`span`,null,h(t.item.title),1)]),t.item.badge?(u(),F(`span`,{key:0,class:`sidebar-item__badge`,title:t.item.badge},h(t.item.badge),9,oI)):z(``,!0),t.item.meta?(u(),F(`small`,sI,h(t.item.meta),1)):z(``,!0)],2),!e.singleLine&&(t.item.subtitle||t.item.attention)?(u(),F(`span`,cI,[D(`span`,null,h(t.item.subtitle),1),t.item.attention?(u(),F(`em`,lI,`需要你处理`)):z(``,!0),t.item.unread?(u(),F(`b`,uI,h(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:Z(e=>a(`more`,t.item.id,e),[`stop`])},[W(Y,{name:`dots`,size:16})],8,dI))],42,nI)],64))),128)),e.hasMore?(u(),F(`button`,{key:2,class:`sidebar-load-more`,type:`button`,disabled:e.loadingMore,onClick:n[3]||=e=>a(`loadMore`)},h(e.loadingMore?`正在加载更多…`:`继续加载会话`),9,fI)):z(``,!0),!e.loading&&!e.items.length?(u(),F(`div`,pI,[D(`span`,null,[W(Y,{name:`chat`,size:20})]),D(`strong`,null,h(e.emptyTitle),1),D(`p`,null,h(e.emptyDescription),1)])):z(``,!0)],40,eI)]))}}),[[`__scopeId`,`data-v-24e7599b`]]),_I=`新分组`,vI=`unassigned`,yI=`未分组`,bI=/[\u0000-\u001f\u007f\u2028\u2029]/;function xI(e){let t=typeof e==`string`?e.trim():``;return t?bI.test(t)?{ok:!1,code:`control`,message:`分组名称不能包含换行等控制字符`}:[...t].length>20?{ok:!1,code:`too_long`,message:`分组名称最多 20 个字`}:{ok:!0,name:t}:{ok:!1,code:`empty`,message:`分组名称不能为空`}}function SI(e,t){return e.order-t.order||e.createdAt-t.createdAt||(e.id<t.id?-1:+(e.id>t.id))}var CI=e=>e.trim().toLowerCase();function wI(e,t,n){let r=CI(e);return t.some(e=>e.id!==n&&CI(e.name)===r)}function TI(e){for(let t=1;;t++){let n=t===1?_I:`${_I} ${t}`;if(!wI(n,e))return n}}var EI=e=>!!(e.unread??e.lastSeq>e.readSeq);function DI(e,t,n){let r=e.filter(e=>!e.archived),i=r.filter(e=>e.pinned),a=r.filter(e=>!e.pinned);if(!t.length)return{pinned:i,groups:[],rows:a};let o=[...t].sort(SI),s=new Set(o.map(e=>e.id)),c=(e,t,r,i,a=-1)=>({key:e,section:i,title:t,rows:r,collapsed:n.has(e),unread:r.some(EI),attention:r.some(e=>(e.attention??0)>0),first:a===0,last:a===o.length-1}),l=o.map((e,t)=>c(e.id,e.name,a.filter(t=>t.sectionId===e.id),e,t)),u=a.filter(e=>!e.sectionId||!s.has(e.sectionId));return u.length&&l.push(c(vI,yI,u)),{pinned:i,groups:l,rows:a}}function OI(e){return`${e.title}分组,${e.rows.length} 个聊天${e.collapsed?`,已折叠`:``}${e.collapsed&&e.attention?`,有需要你处理的事`:``}${e.collapsed&&e.unread?`,有未读`:``}`}var kI=[`data-section-header`],AI=[`aria-invalid`,`aria-describedby`,`onKeydown`],jI=[`id`],MI=[`id`,`aria-expanded`,`aria-label`,`onKeydown`],NI={class:`section-header__title`},PI={key:0,class:`section-header__attention`,"aria-hidden":`true`},FI={key:1,class:`section-header__unread`,"aria-hidden":`true`},II={class:`section-header__count`,"aria-hidden":`true`},LI=[`aria-label`],RI={key:3,class:`section-header__spacer`,"aria-hidden":`true`},zI=H(E({__name:`ConversationSectionHeader`,props:{headerId:{},title:{},count:{},label:{},collapsed:{type:Boolean},unread:{type:Boolean},attention:{type:Boolean},custom:{type:Boolean},editing:{type:Boolean},error:{},dropTarget:{type:Boolean},dragging:{type:Boolean}},emits:[`toggle`,`menu`,`rename`,`cancel`],setup(e,{emit:t}){let n=e,r=t,i=O(),a=O(n.title),s=O(``),c=U(()=>s.value||n.error||``),p=!1;f(()=>n.editing,async e=>{e&&(a.value=n.title,s.value=``,p=!1,await o(),i.value?.focus(),i.value?.select())},{immediate:!0}),f(()=>n.error,async e=>{e&&n.editing&&(p=!1,await o(),i.value?.focus())});function m(e=!1){if(p)return;let t=xI(a.value);if(!t.ok||t.name===n.title){e||t.ok?(p=!0,r(`cancel`)):s.value=t.message;return}p=!0,s.value=``,r(`rename`,t.name)}function g(){p=!0,r(`cancel`)}function _(e){n.custom&&r(`menu`,e)}return(t,n)=>(u(),F(`div`,{class:l([`section-header`,{"section-header--drop":e.dropTarget,"section-header--dragging":e.dragging,"section-header--editing":e.editing}]),"data-section-header":e.headerId},[e.editing?(u(),F(T,{key:0},[D(`label`,{class:l([`section-header__edit`,{"section-header__edit--invalid":c.value}])},[n[7]||=D(`span`,{class:`visually-hidden`},`分组名称`,-1),d(D(`input`,{ref_key:`input`,ref:i,"onUpdate:modelValue":n[0]||=e=>a.value=e,type:`text`,"aria-invalid":!!c.value,"aria-describedby":c.value?`${e.headerId}-error`:void 0,onInput:n[1]||=e=>{s.value=``,C(p)?p.value=!1:p=!1},onKeydown:[n[2]||=Ie(Z(e=>m(),[`prevent`]),[`enter`]),Ie(Z(g,[`prevent`,`stop`]),[`esc`])],onBlur:n[3]||=e=>m(!0)},null,40,AI),[[Q,a.value]]),n[8]||=D(`small`,{"aria-hidden":`true`},`回车保存 · Esc 取消`,-1)],2),c.value?(u(),F(`p`,{key:0,id:`${e.headerId}-error`,class:`section-header__error`,role:`alert`},h(c.value),9,jI)):z(``,!0)],64)):(u(),F(T,{key:1},[D(`button`,{id:e.headerId,class:`section-header__toggle`,type:`button`,"aria-expanded":!e.collapsed,"aria-label":e.label,onClick:n[4]||=e=>r(`toggle`),onContextmenu:n[5]||=Z(t=>e.custom&&r(`menu`,t),[`prevent`,`stop`]),onKeydown:[Ie(Z(_,[`shift`,`prevent`,`stop`]),[`f10`]),Ie(Z(_,[`prevent`,`stop`]),[`context-menu`])]},[D(`span`,NI,h(e.title),1),W(Y,{name:e.collapsed?`chevron-right`:`chevron-down`,size:13},null,8,[`name`])],40,MI),e.collapsed&&e.attention?(u(),F(`span`,PI,`!`)):z(``,!0),e.collapsed&&e.unread?(u(),F(`span`,FI)):z(``,!0),D(`span`,II,h(e.count),1),e.custom?(u(),F(`button`,{key:2,class:`section-header__more`,type:`button`,"aria-label":`${e.title}分组菜单`,"aria-haspopup":`menu`,onClick:n[6]||=Z(e=>r(`menu`,e),[`stop`])},[W(Y,{name:`dots`,size:15})],8,LI)):(u(),F(`span`,RI))],64))],10,kI))}}),[[`__scopeId`,`data-v-89b2d869`]]),BI={class:`section-delete__body`},VI={class:`section-delete__actions`},HI=[`disabled`],UI=[`disabled`,`aria-busy`],WI=H(E({__name:`SectionDeleteDialog`,props:{name:{},count:{},busy:{type:Boolean}},emits:[`confirm`,`close`],setup(e,{emit:t}){let n=t;return(t,r)=>(u(),k(ut,{title:`删除分组“${e.name}”?`,compact:``,"before-close":()=>!e.busy,onClose:r[2]||=e=>n(`close`)},{default:S(()=>[D(`p`,BI,`其中的 `+h(e.count)+` 个聊天会移到未分组,聊天记录不受影响。`,1),D(`div`,VI,[D(`button`,{type:`button`,disabled:e.busy,onClick:r[0]||=e=>n(`close`)},`取消`,8,HI),D(`button`,{type:`button`,class:`danger`,disabled:e.busy,"aria-busy":e.busy,onClick:r[1]||=e=>n(`confirm`)},`删除分组`,8,UI)])]),_:1},8,[`title`,`before-close`]))}}),[[`__scopeId`,`data-v-484c0933`]]),GI={};function KI(e){let t=GI[e];if(t)return t;t=GI[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 qI(e,t){typeof t!=`string`&&(t=qI.defaultChars);let n=KI(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})}qI.defaultChars=`;/?:@&=+$,#`,qI.componentChars=``;var JI={};function YI(e){let t=JI[e];if(t)return t;t=JI[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 XI(e,t,n){typeof t!=`string`&&(n=t,t=XI.defaultChars),n===void 0&&(n=!0);let r=YI(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}XI.defaultChars=`;/?:@&=+$,-_.!~*'()#`,XI.componentChars=`-_.!~*'()`;function ZI(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 QI(){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 $I=/^([a-z0-9.+-]+:)/i,eL=/:[0-9]*$/,tL=/^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,nL=[`%`,`/`,`?`,`;`,`#`,`'`,`{`,`}`,`|`,`\\`,`^`,"`",`<`,`>`,`"`,"`",` `,`\r`,`
|
|
217
|
+
`)]),VP=[`aria-valuenow`,`role`],HP={...cP.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},UP=E({name:`Progress`,props:HP,setup(e){let t=U(()=>e.indicatorPlacement||e.indicatorPosition),n=U(()=>{if(e.gapDegree||e.gapDegree===0)return e.gapDegree;if(e.type===`dashboard`)return 75}),{mergedClsPrefixRef:r,inlineThemeDisabled:i}=nN(e),a=cP(`Progress`,`-progress`,BP,xP,e,r),o=U(()=>{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,[$O(`iconColor`,t)]:h,[$O(`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?sP(`progress`,U(()=>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:c,percentage:l,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:bN([C,`${b}-progress`,`${b}-progress--${e}`,`${b}-progress--${i}`]),style:s(t),"aria-valuemax":100,"aria-valuemin":0,"aria-valuenow":l,role:e===`circle`||e===`line`||e===`dashboard`?`progressbar`:`none`},[e===`circle`||e===`dashboard`?(u(),k(kP,{key:0,clsPrefix:b,status:i,showIndicator:r,indicatorTextColor:n,railColor:a,fillColor:c,railStyle:o,offsetDegree:this.offsetDegree,percentage:l,viewBoxWidth:d,strokeWidth:f,gapDegree:x===void 0?e===`dashboard`?75:0:x,gapOffsetDegree:S,unit:m},yN(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(jP,{key:0,clsPrefix:b,status:i,showIndicator:r,indicatorTextColor:n,railColor:a,fillColor:c,railStyle:o,percentage:l,processing:v,indicatorPlacement:p,unit:m,fillBorderRadius:g,railBorderRadius:h,height:_},yN(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(zP,{key:0,clsPrefix:b,strokeWidth:f,railColor:a,fillColor:c,railStyle:o,viewBoxWidth:d,percentage:l,showIndicator:r,circleGap:y},yN(w),1032,[`clsPrefix`,`strokeWidth`,`railColor`,`fillColor`,`railStyle`,`viewBoxWidth`,`percentage`,`showIndicator`,`circleGap`])):_N(()=>null)],64))],64))],14,VP)}}),WP=[`title`],GP=[`title`,`aria-label`,`aria-busy`,`disabled`],KP=[`aria-label`,`aria-valuenow`],qP={viewBox:`0 0 24 24`,"aria-hidden":`true`},JP=[`stroke-dasharray`],YP={class:`desktop-update-entry__label`,"aria-live":`polite`},XP={key:2,class:`desktop-update-dot`,"aria-hidden":`true`},ZP={key:0,class:`desktop-update-error`,role:`alert`},QP=H(E({__name:`DesktopUpdateEntry`,props:{state:{},pending:{type:Boolean},error:{}},emits:[`activate`],setup(e,{emit:t}){let n=e,r=t,i=U(()=>!!(n.pending||[`checking`,`downloading`,`verifying`,`preparing`,`installing`].includes(n.state?.phase??``))),a=U(()=>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=U(()=>{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`?`已是最新版本`:`检测更新`}),s=U(()=>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:l([`desktop-update-entry`,{"desktop-update-entry--ready":e.state?.phase===`ready`}]),title:s.value},[D(`button`,{type:`button`,title:s.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:l([`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`,qP,[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,JP)]))],10,KP)):(u(),k(Y,{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`,YP,h(o.value),1),(e.state?.available||e.state?.phase===`ready`)&&!i.value?(u(),F(`span`,XP)):z(``,!0)],8,GP),e.error||e.state?.error?(u(),F(`p`,ZP,h(e.error||e.state?.error),1)):z(``,!0)],10,WP))}}),[[`__scopeId`,`data-v-4ba891bf`]]),$P=[`aria-label`,`title`],eF=H(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]||=Z(e=>n(`reset`),[`prevent`])},null,40,$P))}}),[[`__scopeId`,`data-v-2dca694d`]]);function tF(){let e=window.yaoviDesktop,t=!!(e?.updateState&&e?.updateAction),n=O(),r=O(``),a=O(!1),o=U(()=>!!(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 nF(e,t,n){return n<t?t:Math.min(n,Math.max(t,Math.round(e)))}function rF(e,t){try{let n=localStorage.getItem(e);if(n==null)return t.default;let r=Number(n);return Number.isFinite(r)?nF(r,t.min,t.max):t.default}catch{return t.default}}function iF(e,t){let n=O(rF(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 nF(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 aF=[`data-desktop-update-inline`,`inert`],oF=[`inert`],sF=[`aria-label`],cF=[`inert`],lF={class:`bot-list-header`},uF=[`aria-label`,`aria-expanded`],dF={key:0,class:`unread-entry__count`,"aria-hidden":`true`},fF=[`aria-expanded`],pF=[`aria-expanded`],mF={class:`sidebar-context__body`},hF={class:`sidebar-footer sidebar-footer--apps`},gF={class:`sidebar-account-switcher`},_F=[`aria-label`,`aria-expanded`],vF={class:`sidebar-account-avatar`},yF=[`data-state`,`title`],bF={class:`server-connection-dot__label`},xF=[`aria-hidden`,`inert`],SF={class:`mobile-drawer__header`},CF={class:`mobile-drawer__actions`},wF=[`aria-expanded`],TF={class:`sidebar-context__body`},EF={class:`sidebar-footer mobile-drawer__footer sidebar-footer--apps`},DF={class:`sidebar-account-switcher`},OF=[`aria-label`,`aria-expanded`],kF={class:`sidebar-account-avatar`},AF=[`data-state`,`title`],jF={class:`server-connection-dot__label`},MF=[`inert`],NF={class:`workspace-inspector`},PF={class:`workspace-inspector__close`},FF=[`aria-label`,`title`],IF=[`onKeydown`],LF=[`disabled`,`aria-busy`],RF={key:1,class:`update-menu-error`,role:`alert`},zF=[`disabled`,`aria-busy`],BF=[`disabled`,`aria-busy`],VF={key:5,class:`update-menu-error`,role:`alert`},HF={key:6,class:`update-menu-error`,role:`alert`},UF=[`onKeydown`],WF=`yaovi:workspace-sidebar-width-conversations-v2`,GF=`yaovi:workspace-inspector-width`,KF=320,qF=6,JF=`yaovi:sidebar-search`,YF=`yaovi:sidebar-search-close`,XF=H(E({__name:`WorkspaceShell`,props:{remoteHost:{type:Boolean},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:``},connection:{}},emits:[`switchHost`,`logout`,`toggleTheme`,`setTheme`,`closeInspector`,`createAgent`,`createGroup`,`createSection`,`botSettingsChanged`],setup(e,{expose:t,emit:n}){let r=ee(()=>nt(()=>import(`./AboutDialog-2Zq3b7ma.js`),__vite__mapDeps([10,1,3,4,5,11,12,13]))),a=ee(()=>nt(()=>import(`./UpdateCheckDialog-Bz8JhRh4.js`),__vite__mapDeps([14,1,3,4,5,11,12,15]))),c=ee(()=>nt(()=>import(`./BotPluginsDialog-Cgqn4RlP.js`),__vite__mapDeps([16,1,3,4,5,11,12,17]))),d={default:268,min:200,max:480},p={default:390,min:310,max:560},g=e,_=n,y=U(()=>g.serverName||g.userName||`服务器`),b=st(),x=O(!1),C=O({left:0,top:0}),E;function A(e){E=e.currentTarget;let t=E.getBoundingClientRect(),n=E.closest(`aside`).getBoundingClientRect();C.value={left:n.right+12,top:t.top},ne.value=!1,oe.value=!1,x.value=!0}function j(){x.value=!1,o(()=>{E?.isConnected&&E.focus()})}let M=Ae(),N=Se(),P=O(!1),I=O(!1),R=O(null),B=O(),H=O(),G=O(`account-profile`),K=O(),te=O(),q=O(),J=O(!1),ne=O(!1),re=O(null),ie=null,ae=O({left:`8px`,top:`58px`}),oe=O(!1),se=U(()=>g.remoteHost||!!window.yaoviDesktop?.openRemoteLogin),ce=O(!1),le=O(``),ue=tF(),{state:de,error:fe,pending:me,visible:he}=ue,ge=U(()=>ue.supported||!!window.yaoviDesktop?.openUpdates||g.isAdmin),_e=U(()=>me.value||[`checking`,`downloading`,`verifying`,`preparing`,`installing`].includes(de.value?.phase??``)),ve=U(()=>de.value?.phase===`checking`?`正在检测…`:de.value?.phase===`checked`&&!de.value.available?`已是最新版本`:`检测更新`),ye=O(!1),be=O(``),xe=O(null),Ce=null,we=O({left:`8px`,bottom:`8px`,maxHeight:`calc(100dvh - 16px)`}),Te=O(null),Ee=O(null),De=O(),Oe=iF(WF,d),ke=iF(GF,p),je=U(()=>Oe),Me=U(()=>je.value.width.value),Ne=U(()=>({"--workspace-sidebar-width":`${Me.value}px`,"--workspace-inspector-width":`${ke.width.value}px`}));function Pe(){return De.value?.clientWidth??window.innerWidth}function Fe(){let e=g.inspectorOpen?ke.width.value+qF:0;return Pe()-KF-qF-e}function Le(){return Pe()-KF-qF-Me.value-qF}function Re(e){je.value.beginDrag(e,{direction:1,maxAvailable:Fe})}function ze(){je.value.reset(Fe())}function Be(e){ke.beginDrag(e,{direction:-1,maxAvailable:Le})}function Ve(){ke.reset(Le())}async function He(e){P.value=!1,await N.push(e)}function Ue(){P.value=!0,o(()=>q.value?.focus())}function X(){P.value=!1,o(()=>te.value?.focus())}function We(e){let t=e.target;t.closest(`.workspace-create-menu, .sidebar-create-trigger`)||(ne.value=!1),t.closest(`.workspace-settings-menu, .sidebar-account-switcher__main`)||(oe.value=!1)}function Ge(){ne.value=!1,o(()=>{ie?.isConnected&&ie.focus()})}async function Ke(e){if(ne.value){Ge();return}ie=e.currentTarget;let t=ie.getBoundingClientRect();ae.value={left:`${Math.max(8,Math.min(t.left,window.innerWidth-192))}px`,top:`${Math.max(8,Math.min(t.bottom+6,window.innerHeight-(g.features?.includes(`conversation-sections-v1`)?150:96)))}px`},ne.value=!0,await o(),re.value?.querySelector(`[role="menuitem"]`)?.focus()}function qe(e){if(Ge(),e===`section`){_(`createSection`);return}P.value=!1,_(e===`agent`?`createAgent`:`createGroup`)}function Je(e){if(e.target.closest(`select, input, textarea`)||![`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 Ye(){oe.value=!1,o(()=>{Ce?.isConnected&&Ce.focus()})}async function Q(e){if(oe.value){Ye();return}Ce=e.currentTarget;let t=Ce.getBoundingClientRect(),n=Math.max(8,window.innerHeight-t.top+6);we.value={left:`${Math.max(8,Math.min(t.left,window.innerWidth-268))}px`,bottom:`${n}px`,maxHeight:`${Math.max(100,window.innerHeight-n-8)}px`},ne.value=!1,be.value=``,le.value=``,ue.refresh(),oe.value=!0,await o(),xe.value?.querySelector(`[role="menuitem"]`)?.focus()}async function Xe(){if(ce.value)return;if(g.remoteHost){Ye(),_(`switchHost`);return}let e=window.yaoviDesktop;if(e?.openRemoteLogin){ce.value=!0,le.value=``;try{await e.openRemoteLogin(),Ye()}catch(e){le.value=e instanceof Error?e.message:`无法打开服务器列表,请重试。`}finally{ce.value=!1}}}async function Ze(){if(!(ye.value||!ge.value)){if(be.value=``,ue.supported){await ue.run(`check`);return}if(window.yaoviDesktop?.openUpdates){ye.value=!0;try{await window.yaoviDesktop.openUpdates(),Ye()}catch(e){be.value=e instanceof Error?e.message:`无法打开更新窗口,请重试`}finally{ye.value=!1}return}B.value=Ce?.closest(`.mobile-drawer`)?te.value:Ce??void 0,oe.value=!1,P.value=!1,R.value=`update`}}function Qe(){K.value=B.value,R.value=null,ut(`system-update`)}function $e(e){if(!(e===`remote-access`&&!g.isAdmin)){if(oe.value=!1,e===`bots`){ct();return}if(e===`remote-access`){ut(`remote-access`);return}if(K.value=Ce?.closest(`.mobile-drawer`)?te.value:Ce??void 0,e===`about`){B.value=K.value,P.value=!1,R.value=e;return}ut(`account-profile`)}}function et(){R.value=null,o(()=>B.value?.isConnected&&B.value.focus())}function tt(e){let t=e.currentTarget;B.value=t.closest(`.mobile-drawer`)?te.value:t,oe.value=!1,ne.value=!1,P.value=!1,R.value=`plugins`}function it(){oe.value=!1,He(`/conversations/automations?from=`+encodeURIComponent(M.fullPath))}function at(){oe.value=!1,He(`/conversations/workstreams?from=`+encodeURIComponent(M.fullPath))}function ot(){oe.value=!1,He(`/conversations/usage?from=`+encodeURIComponent(M.fullPath))}function ct(){g.isAdmin&&(I.value=!1,He(`/conversations`))}function lt(e){!(e.metaKey||e.ctrlKey)||e.key.toLowerCase()!==`k`||I.value||document.querySelector(`dialog[open]`)||(e.preventDefault(),J.value?document.dispatchEvent(new CustomEvent(YF)):ft(null))}function ut(e=`account-profile`,t,n){H.value=n;let r=t?.currentTarget;r instanceof HTMLButtonElement&&(K.value=r.closest(`.mobile-drawer`)?te.value:r),oe.value=!1,P.value=!1,G.value=e,I.value=!0}function dt(){I.value=!1,o(()=>K.value?.focus())}async function ft(e){ne.value=!1,J.value=!0,document.dispatchEvent(new CustomEvent(JF,{detail:{section:`groups`}}))}async function pt(e,t=!1,n=!1){let r=e?.querySelector(`input[type="search"]`);t&&r?.value&&(r.value=``,r.dispatchEvent(new Event(`input`,{bubbles:!0}))),J.value=!1,document.dispatchEvent(new CustomEvent(YF)),r?.blur(),n&&(await o(),e?.closest(`aside`)?.querySelector(`.sidebar-search-trigger`)?.focus())}function mt(e){let t=e.target;t.matches(`input[type="search"]`)&&!t.value&&pt(t.closest(`.sidebar-context`))}function ht(e){let t=e.target;t.matches(`input[type="search"]`)&&!t.value&&pt(t.closest(`.sidebar-context`))}function gt(){J.value=!1}f(()=>M.fullPath,()=>{P.value=!1,ne.value=!1,oe.value=!1,R.value=null});function _t(){g.isAdmin&&(K.value=document.activeElement instanceof HTMLButtonElement?document.activeElement:void 0,R.value=null,ut(`bot-vm`))}return m(()=>{window.addEventListener(`yaovi:local-vm-settings`,_t),document.addEventListener(`mousedown`,We),document.addEventListener(YF,gt),document.addEventListener(`keydown`,lt)}),i(()=>{window.removeEventListener(`yaovi:local-vm-settings`,_t),document.removeEventListener(`mousedown`,We),document.removeEventListener(YF,gt),document.removeEventListener(`keydown`,lt)}),t({openLocalVm:_t,openSettings:ut}),(t,n)=>(u(),F(`div`,{ref_key:`shellEl`,ref:De,class:l([`workspace-shell`,{"workspace-shell--sidebar-focused":e.sidebarFocusMode,"workspace-shell--conversations":!0,"workspace-shell--conversation-open":!!V(M).params.id||V(M).query.view===`bots`}]),"data-desktop-update-inline":V(ue).supported?``:void 0,style:s(Ne.value),inert:x.value||I.value||R.value||J.value?!0:void 0},[D(`header`,{class:`mobile-header`,inert:P.value},[D(`button`,{ref_key:`mobileNavigationTrigger`,ref:te,class:`icon-button`,type:`button`,"aria-label":`打开导航`,onClick:Ue},[W(Y,{name:`menu`,size:20})],512),D(`button`,{class:`mobile-brand`,type:`button`,"aria-label":`返回聊天`,onClick:n[0]||=e=>He(`/conversations`)},[W(pe,{size:28,compact:``})]),D(`button`,{class:`icon-button`,type:`button`,"aria-label":e.theme===`dark`?`切换浅色主题`:`切换深色主题`,onClick:n[1]||=e=>_(`toggleTheme`)},[W(Y,{name:e.theme===`dark`?`sun`:`moon`},null,8,[`name`])],8,sF)],8,oF),D(`aside`,{class:`desktop-sidebar rail`,"aria-label":`主导航`,inert:P.value},[D(`div`,lF,[n[20]||=D(`span`,{class:`bot-list-header__spacer`},null,-1),D(`button`,{class:`bot-list-toolbar-button unread-entry`,type:`button`,"aria-label":`未读消息,${V(b).total} 条`,"aria-haspopup":`dialog`,"aria-controls":`unread-center`,"aria-expanded":x.value,title:`未读消息`,onClick:A},[W(Y,{name:`bell`,size:20}),V(b).total?(u(),F(`b`,dF,h(V(b).total>99?`99+`:V(b).total),1)):z(``,!0)],8,uF),V(ue).supported&&V(he)?(u(),k(QP,{key:0,state:V(de),pending:V(me),error:V(fe),onActivate:n[2]||=e=>V(ue).run()},null,8,[`state`,`pending`,`error`])):z(``,!0),D(`button`,{class:`bot-list-toolbar-button sidebar-search-trigger`,type:`button`,"aria-label":`搜索`,"aria-expanded":J.value,onClick:n[3]||=e=>ft(Te.value)},[W(Y,{name:`search`,size:21})],8,fF),D(`button`,{class:`bot-list-toolbar-button sidebar-create-trigger`,type:`button`,"aria-label":`新建`,"aria-haspopup":`menu`,"aria-expanded":ne.value,onClick:Ke},[W(Y,{name:`plus`,size:23})],8,pF)]),D(`section`,{ref_key:`desktopSidebarContext`,ref:Te,class:l([`sidebar-context`,{"sidebar-context--searching":J.value}]),onKeydownCapture:n[4]||=Ie(e=>pt(Te.value,!0,!0),[`esc`]),onInputCapture:mt,onFocusoutCapture:ht},[v(t.$slots,`sidebar-before-heading`,{},void 0,!0),D(`div`,mF,[v(t.$slots,`sidebar`,{},void 0,!0)])],34),D(`div`,hF,[D(`div`,gF,[D(`button`,{class:`sidebar-account-switcher__main`,type:`button`,title:`当前账号`,"aria-label":`${y.value},账号菜单`,"aria-haspopup":`menu`,"aria-expanded":oe.value,onClick:n[5]||=e=>Q(e)},[D(`span`,vF,[W(Ky,{name:y.value,"image-url":e.userAvatar,size:28},null,8,[`name`,`image-url`]),e.connection?(u(),F(`span`,{key:0,class:`server-connection-dot`,"data-state":e.connection,role:`status`,"aria-label":`服务器连接状态`,title:V(Py)(e.connection)},[D(`span`,bF,h(V(Py)(e.connection)),1)],8,yF)):z(``,!0)])],8,_F)]),D(`button`,{class:`sidebar-apps-trigger`,type:`button`,"aria-haspopup":`dialog`,onClick:tt},[W(V(ob),{"aria-hidden":`true`}),n[21]||=D(`span`,null,`连接应用`,-1)])])],8,cF),W(eF,{class:`column-resize--shell desktop-only-resize`,label:`调整侧栏宽度`,onDrag:Re,onReset:ze}),W(rt,{name:`drawer-fade`},{default:S(()=>[P.value?(u(),F(`button`,{key:0,class:`drawer-scrim`,type:`button`,"aria-label":`关闭导航`,onClick:X})):z(``,!0)]),_:1}),D(`aside`,{class:l([`mobile-drawer`,{"mobile-drawer--open":P.value,"mobile-drawer--focused":e.sidebarFocusMode}]),"aria-label":`移动导航`,"aria-hidden":!P.value,inert:!P.value},[D(`div`,SF,[D(`button`,{class:`sidebar-brand`,type:`button`,"aria-label":`返回聊天`,onClick:n[6]||=e=>He(`/conversations`)},[W(pe,{size:32,compact:``})]),D(`div`,CF,[V(ue).supported&&V(he)?(u(),k(QP,{key:0,state:V(de),pending:V(me),error:V(fe),onActivate:n[7]||=e=>V(ue).run()},null,8,[`state`,`pending`,`error`])):z(``,!0),D(`button`,{ref_key:`mobileDrawerClose`,ref:q,class:`icon-button`,type:`button`,"aria-label":`关闭导航`,onClick:X},[W(Y,{name:`close`})],512),D(`button`,{class:`sidebar-create-trigger`,type:`button`,"aria-label":`新建`,title:`新建`,"aria-haspopup":`menu`,"aria-expanded":ne.value,onClick:Ke},[W(Y,{name:`plus`,size:19})],8,wF)])]),D(`section`,{ref_key:`mobileSidebarContext`,ref:Ee,class:l([`sidebar-context mobile-drawer__context`,{"sidebar-context--searching":J.value}]),onKeydownCapture:n[8]||=Ie(e=>pt(Ee.value,!0,!0),[`esc`]),onInputCapture:mt,onFocusoutCapture:ht},[v(t.$slots,`sidebar-before-heading`,{},void 0,!0),D(`div`,TF,[v(t.$slots,`mobile-sidebar`,{},void 0,!0)])],34),D(`div`,EF,[D(`div`,DF,[D(`button`,{class:`sidebar-account-switcher__main`,type:`button`,title:`当前账号`,"aria-label":`${y.value},账号菜单`,"aria-haspopup":`menu`,"aria-expanded":oe.value,onClick:n[9]||=e=>Q(e)},[D(`span`,kF,[W(Ky,{name:y.value,"image-url":e.userAvatar,size:40},null,8,[`name`,`image-url`]),e.connection?(u(),F(`span`,{key:0,class:`server-connection-dot`,"data-state":e.connection,role:`status`,"aria-label":`服务器连接状态`,title:V(Py)(e.connection)},[D(`span`,jF,h(V(Py)(e.connection)),1)],8,AF)):z(``,!0)])],8,OF)]),D(`button`,{class:`sidebar-apps-trigger`,type:`button`,"aria-haspopup":`dialog`,onClick:tt},[W(V(ob),{"aria-hidden":`true`}),n[22]||=D(`span`,null,`连接应用`,-1)])])],10,xF),D(`main`,{class:`workspace-main`,inert:P.value},[v(t.$slots,`default`,{},void 0,!0)],8,MF),e.inspectorOpen?(u(),F(T,{key:0},[W(eF,{class:`column-resize--shell desktop-only-resize`,label:`调整预览栏宽度`,onDrag:Be,onReset:Ve}),D(`aside`,NF,[D(`div`,PF,[D(`button`,{class:`icon-button`,type:`button`,"aria-label":e.inspectorCloseLabel,title:e.inspectorCloseLabel,onClick:n[10]||=e=>_(`closeInspector`)},[W(Y,{name:`close`})],8,FF)]),v(t.$slots,`inspector`,{},void 0,!0)])],64)):z(``,!0),R.value===`about`?(u(),k(V(r),{key:1,onClose:et})):z(``,!0),R.value===`update`&&e.isAdmin?(u(),k(V(a),{key:2,onClose:et,onManage:Qe})):z(``,!0),R.value===`plugins`?(u(),k(V(c),{key:3,onClose:et})):z(``,!0),W(fO,{open:I.value,features:e.features,"initial-page":G.value,"target-bot-id":H.value,"user-name":y.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:dt,onLogout:n[11]||=e=>_(`logout`),onSetTheme:n[12]||=e=>_(`setTheme`,e),onBotSettingsChanged:n[13]||=e=>_(`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`},[oe.value?(u(),F(`div`,{key:0,class:`workspace-create-dismiss`,onPointerdown:Z(Ye,[`self`]),onKeydown:Ie(Z(Ye,[`prevent`,`stop`]),[`esc`])},[D(`div`,{ref_key:`settingsMenu`,ref:xe,class:`workspace-create-menu workspace-settings-menu`,style:s(we.value),role:`menu`,"aria-label":`账号菜单`,onKeydown:Je},[W(Hy),se.value?(u(),F(`button`,{key:0,type:`button`,role:`menuitem`,disabled:ce.value,"aria-busy":ce.value,onClick:Xe},h(ce.value?`正在打开…`:`切换 Yaovi`),9,LF)):z(``,!0),le.value?(u(),F(`p`,RF,h(le.value),1)):z(``,!0),D(`button`,{type:`button`,role:`menuitem`,onClick:n[14]||=e=>$e(`settings`)},[W(Y,{name:`settings`,size:17}),n[23]||=w(`设置`,-1)]),e.isAdmin&&!e.remoteHost?(u(),F(`button`,{key:2,type:`button`,role:`menuitem`,onClick:n[15]||=e=>$e(`remote-access`)},[W(Y,{name:`monitor`,size:17}),n[24]||=w(`远程访问`,-1)])):z(``,!0),D(`button`,{type:`button`,role:`menuitem`,onClick:it},[W(Y,{name:`clock`,size:17}),n[25]||=w(`自动化`,-1)]),D(`button`,{type:`button`,role:`menuitem`,onClick:at},[W(Y,{name:`board`,size:17}),n[26]||=w(`工作流`,-1)]),D(`button`,{type:`button`,role:`menuitem`,onClick:ot},[W(Y,{name:`history`,size:17}),n[27]||=w(`Token 用量`,-1)]),D(`button`,{type:`button`,role:`menuitem`,onClick:n[16]||=e=>$e(`about`)},[W(Y,{name:`info`,size:17}),n[28]||=w(`关于`,-1)]),V(ue).supported?(u(),F(`button`,{key:3,class:`desktop-update-check`,type:`button`,role:`menuitem`,disabled:_e.value||V(de)?.phase===`ready`,"aria-busy":_e.value,onClick:Ze},[W(Y,{name:`refresh`,size:17}),w(h(ve.value),1)],8,zF)):ge.value?(u(),F(`button`,{key:4,type:`button`,role:`menuitem`,disabled:ye.value,"aria-busy":ye.value,onClick:Ze},[W(Y,{name:`refresh`,size:17}),w(h(ye.value?`正在打开…`:`检测更新`),1)],8,BF)):z(``,!0),be.value?(u(),F(`p`,VF,h(be.value),1)):z(``,!0),V(ue).supported&&(V(fe)||V(de)?.error)?(u(),F(`p`,HF,h(V(fe)||V(de)?.error),1)):z(``,!0)],36)],40,IF)):z(``,!0),ne.value?(u(),F(`div`,{key:1,class:`workspace-create-dismiss`,onPointerdown:Z(Ge,[`self`]),onKeydown:Ie(Z(Ge,[`prevent`,`stop`]),[`esc`])},[D(`div`,{ref_key:`createMenu`,ref:re,class:`workspace-create-menu`,style:s(ae.value),role:`menu`,"aria-label":`新建聊天`,onKeydown:Je},[D(`button`,{type:`button`,role:`menuitem`,onClick:n[17]||=e=>qe(`agent`)},[W(Y,{name:`users`,size:17}),n[29]||=w(`新建 Bot`,-1)]),D(`button`,{type:`button`,role:`menuitem`,onClick:n[18]||=e=>qe(`group`)},[W(Y,{name:`groups`,size:17}),n[30]||=w(`新建群聊`,-1)]),e.features?.includes(`conversation-sections-v1`)?(u(),F(T,{key:0},[n[32]||=D(`div`,{class:`workspace-create-divider`,role:`separator`},null,-1),D(`button`,{type:`button`,role:`menuitem`,onClick:n[19]||=e=>qe(`section`)},[W(Y,{name:`folder-plus`,size:17}),n[31]||=w(`新建分组`,-1)])],64)):z(``,!0)],36)],40,UF)):z(``,!0)])),x.value?(u(),k(My,{key:4,anchor:C.value,onClose:j},null,8,[`anchor`])):z(``,!0)],14,aF))}}),[[`__scopeId`,`data-v-99ac97e9`]]),ZF={class:`resource-sidebar`},QF={key:0,class:`sidebar-search`},$F=[`value`,`placeholder`],eI=[`aria-label`],tI={key:0,class:`sidebar-loading`,"aria-label":`正在加载`},nI=[`aria-selected`,`draggable`,`data-sidebar-id`,`onClick`,`onContextmenu`,`onKeydown`],rI=[`aria-label`,`aria-expanded`,`onClick`],iI=[`aria-label`,`onClick`],aI={class:`sidebar-item__copy`},oI=[`title`],sI={key:1},cI={key:0,class:`sidebar-item__row sidebar-item__row--secondary`},lI={key:0,class:`sidebar-item__attention`},uI={key:1},dI=[`onClick`],fI=[`disabled`],pI={key:3,class:`sidebar-empty`},mI=`yaovi:sidebar-search`,hI=`yaovi:sidebar-search-close`,gI=H(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},listLabel:{default:`资源列表`},draggableItems:{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),g=U(()=>r.items.reduce((e,t)=>(t.section&&!t.nested&&(e[t.section]=(e[t.section]??0)+1),e),{})),_=U(()=>r.items.map((e,t)=>({item:e,section:e.section&&e.section!==r.items[t-1]?.section?e.section:``,sectionLabel:e.section===`已置顶`?`已置顶 ${g.value[e.section]??0}`:e.section||``})));async function v(){if(!r.searchable)return;d.value=!0,await o();let e=c.value;!e||e.offsetParent===null||(e.focus(),e.select())}function y(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(hI))}function x(){r.externalSearch||v()}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(mI,x),document.addEventListener(hI,C)}),i(()=>{document.removeEventListener(mI,x),document.removeEventListener(hI,C)}),t({focusSearch:v}),(t,n)=>(u(),F(`div`,ZF,[W(rt,{name:`search-reveal`},{default:S(()=>[e.searchable&&!e.externalSearch&&d.value?(u(),F(`label`,QF,[W(Y,{name:`search`,size:15}),D(`input`,{ref_key:`searchInput`,ref:c,value:e.search,type:`search`,placeholder:e.searchPlaceholder,onInput:y,onKeydown:n[0]||=Ie(Z(e=>b(!0),[`prevent`]),[`esc`]),onBlur:n[1]||=t=>!e.search&&b()},null,40,$F)])):z(``,!0)]),_:1}),D(`div`,{class:`sidebar-list`,role:`listbox`,"aria-label":e.listLabel,onScrollPassive:A},[e.loading&&!e.items.length?(u(),F(`div`,tI,[(u(),F(T,null,p(7,e=>D(`span`,{key:e,class:`sidebar-skeleton`,style:s({opacity:1-e*.08})},null,4)),64))])):(u(!0),F(T,{key:1},p(_.value,t=>(u(),F(T,{key:t.item.id},[t.section?(u(),F(`div`,{key:0,class:l([`sidebar-section-label`,{"sidebar-section-label--pinned":t.section===`已置顶`}]),role:`presentation`},[D(`span`,null,h(t.sectionLabel),1)],2)):z(``,!0),D(`div`,{class:l([`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,draggable:e.draggableItems?`true`:void 0,"data-sidebar-id":t.item.id,onClick:e=>a(`select`,t.item.id),onContextmenu:Z(e=>a(`contextMenu`,t.item.id,e),[`prevent`,`stop`]),onKeydown:[Ie(Z(e=>E(t.item.id,e),[`shift`,`prevent`,`stop`]),[`f10`]),Ie(Z(e=>E(t.item.id,e),[`prevent`,`stop`]),[`context-menu`]),Ie(Z(e=>a(`select`,t.item.id),[`prevent`]),[`enter`]),Ie(Z(e=>a(`select`,t.item.id),[`prevent`]),[`space`])]},[t.item.expandable?(u(),F(`button`,{key:0,class:l([`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:Z(e=>a(`toggle`,t.item.id),[`stop`])},[W(Y,{name:`chevron-down`,size:13})],10,rI)):z(``,!0),e.singleLine?z(``,!0):(u(),F(`span`,{key:1,class:l([`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:Z(e=>a(`avatar`,t.item.id,e),[`stop`]),onKeydown:n[2]||=Z(()=>{},[`stop`])},[W(Ye,{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,iI)):t.item.avatarKind===`agent`?(u(),k(Ye,{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(Me,{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(Y,{key:3,name:t.item.icon,size:t.item.topic?14:15},null,8,[`name`,`size`])):(u(),F(T,{key:4},[w(h(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:l([`presence`,`presence--${t.item.status}`])},null,2)):z(``,!0)],2)),D(`span`,aI,[D(`span`,{class:l([`sidebar-item__row`,{"sidebar-item__row--badged":t.item.badge}])},[D(`strong`,null,[t.item.pinned?(u(),k(Y,{key:0,name:`pin-filled`,size:12})):z(``,!0),D(`span`,null,h(t.item.title),1)]),t.item.badge?(u(),F(`span`,{key:0,class:`sidebar-item__badge`,title:t.item.badge},h(t.item.badge),9,oI)):z(``,!0),t.item.meta?(u(),F(`small`,sI,h(t.item.meta),1)):z(``,!0)],2),!e.singleLine&&(t.item.subtitle||t.item.attention)?(u(),F(`span`,cI,[D(`span`,null,h(t.item.subtitle),1),t.item.attention?(u(),F(`em`,lI,`需要你处理`)):z(``,!0),t.item.unread?(u(),F(`b`,uI,h(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:Z(e=>a(`more`,t.item.id,e),[`stop`])},[W(Y,{name:`dots`,size:16})],8,dI))],42,nI)],64))),128)),e.hasMore?(u(),F(`button`,{key:2,class:`sidebar-load-more`,type:`button`,disabled:e.loadingMore,onClick:n[3]||=e=>a(`loadMore`)},h(e.loadingMore?`正在加载更多…`:`继续加载会话`),9,fI)):z(``,!0),!e.loading&&!e.items.length?(u(),F(`div`,pI,[D(`span`,null,[W(Y,{name:`chat`,size:20})]),D(`strong`,null,h(e.emptyTitle),1),D(`p`,null,h(e.emptyDescription),1)])):z(``,!0)],40,eI)]))}}),[[`__scopeId`,`data-v-24e7599b`]]),_I=`新分组`,vI=`unassigned`,yI=`未分组`,bI=/[\u0000-\u001f\u007f\u2028\u2029]/;function xI(e){let t=typeof e==`string`?e.trim():``;return t?bI.test(t)?{ok:!1,code:`control`,message:`分组名称不能包含换行等控制字符`}:[...t].length>20?{ok:!1,code:`too_long`,message:`分组名称最多 20 个字`}:{ok:!0,name:t}:{ok:!1,code:`empty`,message:`分组名称不能为空`}}function SI(e,t){return e.order-t.order||e.createdAt-t.createdAt||(e.id<t.id?-1:+(e.id>t.id))}var CI=e=>e.trim().toLowerCase();function wI(e,t,n){let r=CI(e);return t.some(e=>e.id!==n&&CI(e.name)===r)}function TI(e){for(let t=1;;t++){let n=t===1?_I:`${_I} ${t}`;if(!wI(n,e))return n}}var EI=e=>!!(e.unread??e.lastSeq>e.readSeq);function DI(e,t,n){let r=e.filter(e=>!e.archived),i=r.filter(e=>e.pinned),a=r.filter(e=>!e.pinned);if(!t.length)return{pinned:i,groups:[],rows:a};let o=[...t].sort(SI),s=new Set(o.map(e=>e.id)),c=(e,t,r,i,a=-1)=>({key:e,section:i,title:t,rows:r,collapsed:n.has(e),unread:r.some(EI),attention:r.some(e=>(e.attention??0)>0),first:a===0,last:a===o.length-1}),l=o.map((e,t)=>c(e.id,e.name,a.filter(t=>t.sectionId===e.id),e,t)),u=a.filter(e=>!e.sectionId||!s.has(e.sectionId));return u.length&&l.push(c(vI,yI,u)),{pinned:i,groups:l,rows:a}}function OI(e){return`${e.title}分组,${e.rows.length} 个聊天${e.collapsed?`,已折叠`:``}${e.collapsed&&e.attention?`,有需要你处理的事`:``}${e.collapsed&&e.unread?`,有未读`:``}`}var kI=[`data-section-header`],AI=[`aria-invalid`,`aria-describedby`,`onKeydown`],jI=[`id`],MI=[`id`,`aria-expanded`,`aria-label`,`onKeydown`],NI={class:`section-header__title`},PI={key:0,class:`section-header__attention`,"aria-hidden":`true`},FI={key:1,class:`section-header__unread`,"aria-hidden":`true`},II={class:`section-header__count`,"aria-hidden":`true`},LI=[`aria-label`],RI={key:3,class:`section-header__spacer`,"aria-hidden":`true`},zI=H(E({__name:`ConversationSectionHeader`,props:{headerId:{},title:{},count:{},label:{},collapsed:{type:Boolean},unread:{type:Boolean},attention:{type:Boolean},custom:{type:Boolean},editing:{type:Boolean},error:{},dropTarget:{type:Boolean},dragging:{type:Boolean}},emits:[`toggle`,`menu`,`rename`,`cancel`],setup(e,{emit:t}){let n=e,r=t,i=O(),a=O(n.title),s=O(``),c=U(()=>s.value||n.error||``),p=!1;f(()=>n.editing,async e=>{e&&(a.value=n.title,s.value=``,p=!1,await o(),i.value?.focus(),i.value?.select())},{immediate:!0}),f(()=>n.error,async e=>{e&&n.editing&&(p=!1,await o(),i.value?.focus())});function m(e=!1){if(p)return;let t=xI(a.value);if(!t.ok||t.name===n.title){e||t.ok?(p=!0,r(`cancel`)):s.value=t.message;return}p=!0,s.value=``,r(`rename`,t.name)}function g(){p=!0,r(`cancel`)}function _(e){n.custom&&r(`menu`,e)}return(t,n)=>(u(),F(`div`,{class:l([`section-header`,{"section-header--drop":e.dropTarget,"section-header--dragging":e.dragging,"section-header--editing":e.editing}]),"data-section-header":e.headerId},[e.editing?(u(),F(T,{key:0},[D(`label`,{class:l([`section-header__edit`,{"section-header__edit--invalid":c.value}])},[n[7]||=D(`span`,{class:`visually-hidden`},`分组名称`,-1),d(D(`input`,{ref_key:`input`,ref:i,"onUpdate:modelValue":n[0]||=e=>a.value=e,type:`text`,"aria-invalid":!!c.value,"aria-describedby":c.value?`${e.headerId}-error`:void 0,onInput:n[1]||=e=>{s.value=``,C(p)?p.value=!1:p=!1},onKeydown:[n[2]||=Ie(Z(e=>m(),[`prevent`]),[`enter`]),Ie(Z(g,[`prevent`,`stop`]),[`esc`])],onBlur:n[3]||=e=>m(!0)},null,40,AI),[[Q,a.value]]),n[8]||=D(`small`,{"aria-hidden":`true`},`回车保存 · Esc 取消`,-1)],2),c.value?(u(),F(`p`,{key:0,id:`${e.headerId}-error`,class:`section-header__error`,role:`alert`},h(c.value),9,jI)):z(``,!0)],64)):(u(),F(T,{key:1},[D(`button`,{id:e.headerId,class:`section-header__toggle`,type:`button`,"aria-expanded":!e.collapsed,"aria-label":e.label,onClick:n[4]||=e=>r(`toggle`),onContextmenu:n[5]||=Z(t=>e.custom&&r(`menu`,t),[`prevent`,`stop`]),onKeydown:[Ie(Z(_,[`shift`,`prevent`,`stop`]),[`f10`]),Ie(Z(_,[`prevent`,`stop`]),[`context-menu`])]},[D(`span`,NI,h(e.title),1),W(Y,{name:e.collapsed?`chevron-right`:`chevron-down`,size:13},null,8,[`name`])],40,MI),e.collapsed&&e.attention?(u(),F(`span`,PI,`!`)):z(``,!0),e.collapsed&&e.unread?(u(),F(`span`,FI)):z(``,!0),D(`span`,II,h(e.count),1),e.custom?(u(),F(`button`,{key:2,class:`section-header__more`,type:`button`,"aria-label":`${e.title}分组菜单`,"aria-haspopup":`menu`,onClick:n[6]||=Z(e=>r(`menu`,e),[`stop`])},[W(Y,{name:`dots`,size:15})],8,LI)):(u(),F(`span`,RI))],64))],10,kI))}}),[[`__scopeId`,`data-v-89b2d869`]]),BI={class:`section-delete__body`},VI={class:`section-delete__actions`},HI=[`disabled`],UI=[`disabled`,`aria-busy`],WI=H(E({__name:`SectionDeleteDialog`,props:{name:{},count:{},busy:{type:Boolean}},emits:[`confirm`,`close`],setup(e,{emit:t}){let n=t;return(t,r)=>(u(),k(ut,{title:`删除分组“${e.name}”?`,compact:``,"before-close":()=>!e.busy,onClose:r[2]||=e=>n(`close`)},{default:S(()=>[D(`p`,BI,`其中的 `+h(e.count)+` 个聊天会移到未分组,聊天记录不受影响。`,1),D(`div`,VI,[D(`button`,{type:`button`,disabled:e.busy,onClick:r[0]||=e=>n(`close`)},`取消`,8,HI),D(`button`,{type:`button`,class:`danger`,disabled:e.busy,"aria-busy":e.busy,onClick:r[1]||=e=>n(`confirm`)},`删除分组`,8,UI)])]),_:1},8,[`title`,`before-close`]))}}),[[`__scopeId`,`data-v-484c0933`]]),GI={};function KI(e){let t=GI[e];if(t)return t;t=GI[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 qI(e,t){typeof t!=`string`&&(t=qI.defaultChars);let n=KI(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})}qI.defaultChars=`;/?:@&=+$,#`,qI.componentChars=``;var JI={};function YI(e){let t=JI[e];if(t)return t;t=JI[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 XI(e,t,n){typeof t!=`string`&&(n=t,t=XI.defaultChars),n===void 0&&(n=!0);let r=YI(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}XI.defaultChars=`;/?:@&=+$,-_.!~*'()#`,XI.componentChars=`-_.!~*'()`;function ZI(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 QI(){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 $I=/^([a-z0-9.+-]+:)/i,eL=/:[0-9]*$/,tL=/^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,nL=[`%`,`/`,`?`,`;`,`#`,`'`,`{`,`}`,`|`,`\\`,`^`,"`",`<`,`>`,`"`,"`",` `,`\r`,`
|
|
218
218
|
`,` `],rL=[`/`,`?`,`#`],iL=255,aL=/^[+a-z0-9A-Z_-]{0,63}$/,oL=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,sL={javascript:!0,"javascript:":!0},cL={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0};function lL(e,t){if(e&&e instanceof QI)return e;let n=new QI;return n.parse(e,t),n}QI.prototype.parse=function(e,t){let n,r,i,a=e;if(a=a.trim(),!t&&e.split(`#`).length===1){let e=tL.exec(a);if(e)return this.pathname=e[1],e[2]&&(this.search=e[2]),this}let o=$I.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&&sL[o])&&(a=a.substr(2),this.slashes=!0)),!sL[o]&&(i||o&&!cL[o])){let e=-1;for(let t=0;t<rL.length;t++)r=a.indexOf(rL[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<nL.length;t++)r=a.indexOf(nL[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(aL)){let r=``;for(let e=0,t=n.length;e<t;e++)n.charCodeAt(e)>127?r+=`x`:r+=n[e];if(!r.match(aL)){let r=e.slice(0,t),i=e.slice(t+1),o=n.match(oL);o&&(r.push(o[1]),i.unshift(o[2])),i.length&&(a=i.join(`.`)+a),this.hostname=r.join(`.`);break}}}}this.hostname.length>iL&&(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),cL[n]&&this.hostname&&!this.pathname&&(this.pathname=``),this},QI.prototype.parseHost=function(e){let t=eL.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 uL=t({decode:()=>qI,encode:()=>XI,format:()=>ZI,parse:()=>lL}),dL=/[\0-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,fL=/[\0-\x1F\x7F-\x9F]/,pL=/[\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]/,mL=/[!-#%-\*,-\/:;\?@\[-\]_\{\}\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]/,hL=/[\$\+<->\^`\|~\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]/,gL=/[ \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000]/,_L=t({Any:()=>dL,Cc:()=>fL,Cf:()=>pL,P:()=>mL,S:()=>hL,Z:()=>gL}),vL=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))),yL=new Uint16Array(`Ȁaglq \x1Bɭ\0\0p;䀦os;䀧t;䀾t;䀼uot;䀢`.split(``).map(e=>e.charCodeAt(0))),bL=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]]),xL=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 SL(e){return e>=55296&&e<=57343||e>1114111?65533:bL.get(e)??e}var CL;(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`})(CL||={});var wL=32,TL;(function(e){e[e.VALUE_LENGTH=49152]=`VALUE_LENGTH`,e[e.BRANCH_LENGTH=16256]=`BRANCH_LENGTH`,e[e.JUMP_TABLE=127]=`JUMP_TABLE`})(TL||={});function EL(e){return e>=CL.ZERO&&e<=CL.NINE}function DL(e){return e>=CL.UPPER_A&&e<=CL.UPPER_F||e>=CL.LOWER_A&&e<=CL.LOWER_F}function OL(e){return e>=CL.UPPER_A&&e<=CL.UPPER_Z||e>=CL.LOWER_A&&e<=CL.LOWER_Z||EL(e)}function kL(e){return e===CL.EQUALS||OL(e)}var AL;(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`})(AL||={});var jL;(function(e){e[e.Legacy=0]=`Legacy`,e[e.Strict=1]=`Strict`,e[e.Attribute=2]=`Attribute`})(jL||={});var ML=class{constructor(e,t,n){this.decodeTree=e,this.emitCodePoint=t,this.errors=n,this.state=AL.EntityStart,this.consumed=1,this.result=0,this.treeIndex=0,this.excess=1,this.decodeMode=jL.Strict}startEntity(e){this.decodeMode=e,this.state=AL.EntityStart,this.result=0,this.treeIndex=0,this.excess=1,this.consumed=1}write(e,t){switch(this.state){case AL.EntityStart:return e.charCodeAt(t)===CL.NUM?(this.state=AL.NumericStart,this.consumed+=1,this.stateNumericStart(e,t+1)):(this.state=AL.NamedEntity,this.stateNamedEntity(e,t));case AL.NumericStart:return this.stateNumericStart(e,t);case AL.NumericDecimal:return this.stateNumericDecimal(e,t);case AL.NumericHex:return this.stateNumericHex(e,t);case AL.NamedEntity:return this.stateNamedEntity(e,t)}}stateNumericStart(e,t){return t>=e.length?-1:(e.charCodeAt(t)|wL)===CL.LOWER_X?(this.state=AL.NumericHex,this.consumed+=1,this.stateNumericHex(e,t+1)):(this.state=AL.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(EL(r)||DL(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(EL(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===CL.SEMI)this.consumed+=1;else if(this.decodeMode===jL.Strict)return 0;return this.emitCodePoint(SL(this.result),this.consumed),this.errors&&(e!==CL.SEMI&&this.errors.missingSemicolonAfterCharacterReference(),this.errors.validateNumericCharacterReference(this.result)),this.consumed}stateNamedEntity(e,t){let{decodeTree:n}=this,r=n[this.treeIndex],i=(r&TL.VALUE_LENGTH)>>14;for(;t<e.length;t++,this.excess++){let a=e.charCodeAt(t);if(this.treeIndex=PL(n,r,this.treeIndex+Math.max(1,i),a),this.treeIndex<0)return this.result===0||this.decodeMode===jL.Attribute&&(i===0||kL(a))?0:this.emitNotTerminatedNamedEntity();if(r=n[this.treeIndex],i=(r&TL.VALUE_LENGTH)>>14,i!==0){if(a===CL.SEMI)return this.emitNamedEntityData(this.treeIndex,i,this.consumed+this.excess);this.decodeMode!==jL.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]&TL.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]&~TL.VALUE_LENGTH:r[e+1],n),t===3&&this.emitCodePoint(r[e+2],n),n}end(){var e;switch(this.state){case AL.NamedEntity:return this.result!==0&&(this.decodeMode!==jL.Attribute||this.result===this.treeIndex)?this.emitNotTerminatedNamedEntity():0;case AL.NumericDecimal:return this.emitNumericEntity(0,2);case AL.NumericHex:return this.emitNumericEntity(0,3);case AL.NumericStart:return(e=this.errors)==null||e.absenceOfDigitsInNumericCharacterReference(this.consumed),0;case AL.EntityStart:return 0}}};function NL(e){let t=``,n=new ML(e,e=>t+=xL(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 PL(e,t,n,r){let i=(t&TL.BRANCH_LENGTH)>>7,a=t&TL.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 FL=NL(vL);NL(yL);function IL(e,t=jL.Legacy){return FL(e,t)}function LL(e){return FL(e,jL.Strict)}var RL=t({arrayReplaceAt:()=>WL,asciiTrim:()=>pR,assign:()=>UL,escapeHtml:()=>rR,escapeRE:()=>aR,fromCodePoint:()=>KL,has:()=>HL,isMdAsciiPunct:()=>uR,isPunctChar:()=>cR,isPunctCharCode:()=>lR,isSpace:()=>oR,isString:()=>BL,isValidEntityCode:()=>GL,isWhiteSpace:()=>sR,lib:()=>mR,normalizeReference:()=>dR,unescapeAll:()=>QL,unescapeMd:()=>ZL});function zL(e){return Object.prototype.toString.call(e)}function BL(e){return zL(e)===`[object String]`}var VL=Object.prototype.hasOwnProperty;function HL(e,t){return VL.call(e,t)}function UL(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 WL(e,t,n){return[].concat(e.slice(0,t),n,e.slice(t+1))}function GL(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 KL(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 qL=/\\([!"#$%&'()*+,\-./:;<=>?@[\\\]^_`{|}~])/g,JL=RegExp(qL.source+`|&([a-z#][a-z0-9]{1,31});`,`gi`),YL=/^#((?:x[a-f0-9]{1,8}|[0-9]{1,8}))$/i;function XL(e,t){if(t.charCodeAt(0)===35&&YL.test(t)){let n=t[1].toLowerCase()===`x`?parseInt(t.slice(2),16):parseInt(t.slice(1),10);return GL(n)?KL(n):e}let n=IL(e);return n===e?e:n}function ZL(e){return e.indexOf(`\\`)<0?e:e.replace(qL,`$1`)}function QL(e){return e.indexOf(`\\`)<0&&e.indexOf(`&`)<0?e:e.replace(JL,function(e,t,n){return t||XL(e,n)})}var $L=/[&<>"]/,eR=/[&<>"]/g,tR={"&":`&`,"<":`<`,">":`>`,'"':`"`};function nR(e){return tR[e]}function rR(e){return $L.test(e)?e.replace(eR,nR):e}var iR=/[.?*+^$[\]\\(){}|-]/g;function aR(e){return e.replace(iR,`\\$&`)}function oR(e){switch(e){case 9:case 32:return!0}return!1}function sR(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 cR(e){return mL.test(e)||hL.test(e)}function lR(e){return cR(KL(e))}function uR(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 dR(e){return e=e.trim().replace(/\s+/g,` `),e.toLowerCase().toUpperCase()}function fR(e){return e===32||e===9||e===10||e===13}function pR(e){let t=0;for(;t<e.length&&fR(e.charCodeAt(t));t++);let n=e.length-1;for(;n>=t&&fR(e.charCodeAt(n));n--);return e.slice(t,n+1)}var mR={mdurl:uL,ucmicro:_L};function hR(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 gR(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=QL(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=QL(e.slice(t,i)),a.pos=i,a.ok=!0,a)}function _R(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+=QL(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+=QL(e.slice(t,a)),o}var vR=t({parseLinkDestination:()=>gR,parseLinkLabel:()=>hR,parseLinkTitle:()=>_R}),yR={};yR.code_inline=function(e,t,n,r,i){let a=e[t];return`<code`+i.renderAttrs(a)+`>`+rR(a.content)+`</code>`},yR.code_block=function(e,t,n,r,i){let a=e[t];return`<pre`+i.renderAttrs(a)+`><code>`+rR(e[t].content)+`</code></pre>
|
|
219
219
|
`},yR.fence=function(e,t,n,r,i){let a=e[t],o=a.info?QL(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)||rR(a.content),l.indexOf(`<pre`)===0)return l+`
|
|
220
220
|
`;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`},yR.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)},yR.hardbreak=function(e,t,n){return n.xhtmlOut?`<br />
|
|
@@ -245,17 +245,17 @@ https://github.com/highlightjs/highlight.js/issues/2277`),i=e,r=t),n===void 0&&(
|
|
|
245
245
|
`},{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})),$G=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]},G={match:i(/`/,x,/`/)},K=[G,{className:`variable`,match:/\$\d+/},{className:`variable`,match:`\\$${b}+`}],ee=[{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)}],te={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}]},q={begin:/</,end:/>/,keywords:D,contains:[...a,...O,...ee,A,te]};te.contains.push(q);let J={begin:/\(/,end:/\)/,relevance:0,keywords:D,contains:[`self`,{match:i(x,/\s*:/),keywords:`_|0`,relevance:0},...a,W,...O,...k,...j,P,B,...K,...ee,te]},ne={begin:/</,end:/>/,keywords:`repeat each`,contains:[...a,te]},re={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,...ee,te,J],endsParent:!0,illegal:/["']/},ie={match:[/(func|macro)/,/\s+/,o(G.match,x,v)],className:{1:`keyword`,3:`title.function`},contains:[ne,re,t],illegal:[/\[/,/%/]},ae={match:[/\b(?:subscript|init[?!]?)/,/\s*(?=[<(])/],className:{1:`keyword`},contains:[ne,re,t],illegal:/\[|%/},oe={match:[/operator/,/\s+/,v],className:{1:`keyword`,3:`title`}},se={begin:[/precedencegroup/,/\s+/,S],className:{1:`keyword`,3:`title`},contains:[te],keywords:[...p,...f],end:/}/},Y={match:[/class\b/,/\s+/,/func\b/,/\s+/,/\b[A-Za-z_][A-Za-z0-9_]*\b/],scope:{1:`keyword`,3:`keyword`,5:`title.function`}},ce={match:[/class\b/,/\s+/,/var\b/],scope:{1:`keyword`,3:`keyword`}},le={begin:[/(struct|protocol|class|extension|enum|actor)/,/\s+/,x,/\s*/],beginScope:{1:`keyword`,3:`title.class`},keywords:D,contains:[ne,...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,...K];t.contains=[...n,{begin:/\(/,end:/\)/,contains:[`self`,...n]}]}return{name:`Swift`,keywords:D,contains:[...a,ie,ae,Y,ce,le,oe,se,{beginKeywords:`import`,end:/$/,contains:[...a],relevance:0},W,...O,...k,...j,P,B,...K,...ee,te,J]}}t.exports=T})),eK=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})),tK=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})),nK=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})),rK=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})),iK=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})),aK=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})),oK=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})),sK=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})),cK=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})),lK=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})),uK=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})),dK=n(((e,t)=>{function n(e){return{name:`VBScript in HTML`,subLanguage:`xml`,contains:[{begin:`<%`,end:`%>`,subLanguage:`vbscript`}]}}t.exports=n})),fK=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})),pK=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})),mK=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})),hK=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})),gK=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})),_K=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})),vK=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})),yK=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})),bK=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})),xK=e(n(((e,t)=>{var n=UH();n.registerLanguage(`1c`,WH()),n.registerLanguage(`abnf`,GH()),n.registerLanguage(`accesslog`,KH()),n.registerLanguage(`actionscript`,qH()),n.registerLanguage(`ada`,JH()),n.registerLanguage(`angelscript`,YH()),n.registerLanguage(`apache`,XH()),n.registerLanguage(`applescript`,ZH()),n.registerLanguage(`arcade`,QH()),n.registerLanguage(`arduino`,$H()),n.registerLanguage(`armasm`,eU()),n.registerLanguage(`xml`,tU()),n.registerLanguage(`asciidoc`,nU()),n.registerLanguage(`aspectj`,rU()),n.registerLanguage(`autohotkey`,iU()),n.registerLanguage(`autoit`,aU()),n.registerLanguage(`avrasm`,oU()),n.registerLanguage(`awk`,sU()),n.registerLanguage(`axapta`,cU()),n.registerLanguage(`bash`,lU()),n.registerLanguage(`basic`,uU()),n.registerLanguage(`bnf`,dU()),n.registerLanguage(`brainfuck`,fU()),n.registerLanguage(`c`,pU()),n.registerLanguage(`cal`,mU()),n.registerLanguage(`capnproto`,hU()),n.registerLanguage(`ceylon`,gU()),n.registerLanguage(`clean`,_U()),n.registerLanguage(`clojure`,vU()),n.registerLanguage(`clojure-repl`,yU()),n.registerLanguage(`cmake`,bU()),n.registerLanguage(`coffeescript`,xU()),n.registerLanguage(`coq`,SU()),n.registerLanguage(`cos`,CU()),n.registerLanguage(`cpp`,wU()),n.registerLanguage(`crmsh`,TU()),n.registerLanguage(`crystal`,EU()),n.registerLanguage(`csharp`,DU()),n.registerLanguage(`csp`,OU()),n.registerLanguage(`css`,kU()),n.registerLanguage(`d`,AU()),n.registerLanguage(`markdown`,jU()),n.registerLanguage(`dart`,MU()),n.registerLanguage(`delphi`,NU()),n.registerLanguage(`diff`,PU()),n.registerLanguage(`django`,FU()),n.registerLanguage(`dns`,IU()),n.registerLanguage(`dockerfile`,LU()),n.registerLanguage(`dos`,RU()),n.registerLanguage(`dsconfig`,zU()),n.registerLanguage(`dts`,BU()),n.registerLanguage(`dust`,VU()),n.registerLanguage(`ebnf`,HU()),n.registerLanguage(`elixir`,UU()),n.registerLanguage(`elm`,WU()),n.registerLanguage(`ruby`,GU()),n.registerLanguage(`erb`,KU()),n.registerLanguage(`erlang-repl`,qU()),n.registerLanguage(`erlang`,JU()),n.registerLanguage(`excel`,YU()),n.registerLanguage(`fix`,XU()),n.registerLanguage(`flix`,ZU()),n.registerLanguage(`fortran`,QU()),n.registerLanguage(`freedesktop`,$U()),n.registerLanguage(`fsharp`,eW()),n.registerLanguage(`gams`,tW()),n.registerLanguage(`gauss`,nW()),n.registerLanguage(`gcode`,rW()),n.registerLanguage(`gherkin`,iW()),n.registerLanguage(`glsl`,aW()),n.registerLanguage(`gml`,oW()),n.registerLanguage(`go`,sW()),n.registerLanguage(`golo`,cW()),n.registerLanguage(`gradle`,lW()),n.registerLanguage(`graphql`,uW()),n.registerLanguage(`groovy`,dW()),n.registerLanguage(`haml`,fW()),n.registerLanguage(`handlebars`,pW()),n.registerLanguage(`haskell`,mW()),n.registerLanguage(`haxe`,hW()),n.registerLanguage(`hsp`,gW()),n.registerLanguage(`http`,_W()),n.registerLanguage(`hy`,vW()),n.registerLanguage(`inform7`,yW()),n.registerLanguage(`ini`,bW()),n.registerLanguage(`irpf90`,xW()),n.registerLanguage(`isbl`,SW()),n.registerLanguage(`java`,CW()),n.registerLanguage(`javascript`,wW()),n.registerLanguage(`jboss-cli`,TW()),n.registerLanguage(`json`,EW()),n.registerLanguage(`julia`,DW()),n.registerLanguage(`julia-repl`,OW()),n.registerLanguage(`kotlin`,kW()),n.registerLanguage(`lasso`,AW()),n.registerLanguage(`latex`,jW()),n.registerLanguage(`ldif`,MW()),n.registerLanguage(`leaf`,NW()),n.registerLanguage(`less`,PW()),n.registerLanguage(`lisp`,FW()),n.registerLanguage(`livecodeserver`,IW()),n.registerLanguage(`livescript`,LW()),n.registerLanguage(`llvm`,RW()),n.registerLanguage(`lsl`,zW()),n.registerLanguage(`lua`,BW()),n.registerLanguage(`makefile`,VW()),n.registerLanguage(`mathematica`,HW()),n.registerLanguage(`matlab`,UW()),n.registerLanguage(`maxima`,WW()),n.registerLanguage(`mel`,GW()),n.registerLanguage(`mercury`,KW()),n.registerLanguage(`mipsasm`,qW()),n.registerLanguage(`mizar`,JW()),n.registerLanguage(`perl`,YW()),n.registerLanguage(`mojolicious`,XW()),n.registerLanguage(`monkey`,ZW()),n.registerLanguage(`moonscript`,QW()),n.registerLanguage(`n1ql`,$W()),n.registerLanguage(`nestedtext`,eG()),n.registerLanguage(`nginx`,tG()),n.registerLanguage(`nim`,nG()),n.registerLanguage(`nix`,rG()),n.registerLanguage(`node-repl`,iG()),n.registerLanguage(`nsis`,aG()),n.registerLanguage(`objectivec`,oG()),n.registerLanguage(`ocaml`,sG()),n.registerLanguage(`openscad`,cG()),n.registerLanguage(`oxygene`,lG()),n.registerLanguage(`parser3`,uG()),n.registerLanguage(`pf`,dG()),n.registerLanguage(`pgsql`,fG()),n.registerLanguage(`php`,pG()),n.registerLanguage(`php-template`,mG()),n.registerLanguage(`plaintext`,hG()),n.registerLanguage(`pony`,gG()),n.registerLanguage(`powershell`,_G()),n.registerLanguage(`processing`,vG()),n.registerLanguage(`profile`,yG()),n.registerLanguage(`prolog`,bG()),n.registerLanguage(`properties`,xG()),n.registerLanguage(`protobuf`,SG()),n.registerLanguage(`puppet`,CG()),n.registerLanguage(`purebasic`,wG()),n.registerLanguage(`python`,TG()),n.registerLanguage(`python-repl`,EG()),n.registerLanguage(`q`,DG()),n.registerLanguage(`qml`,OG()),n.registerLanguage(`r`,kG()),n.registerLanguage(`reasonml`,AG()),n.registerLanguage(`rib`,jG()),n.registerLanguage(`roboconf`,MG()),n.registerLanguage(`routeros`,NG()),n.registerLanguage(`rsl`,PG()),n.registerLanguage(`ruleslanguage`,FG()),n.registerLanguage(`rust`,IG()),n.registerLanguage(`sas`,LG()),n.registerLanguage(`scala`,RG()),n.registerLanguage(`scheme`,zG()),n.registerLanguage(`scilab`,BG()),n.registerLanguage(`scss`,VG()),n.registerLanguage(`shell`,HG()),n.registerLanguage(`smali`,UG()),n.registerLanguage(`smalltalk`,WG()),n.registerLanguage(`sml`,GG()),n.registerLanguage(`sqf`,KG()),n.registerLanguage(`sql`,qG()),n.registerLanguage(`stan`,JG()),n.registerLanguage(`stata`,YG()),n.registerLanguage(`step21`,XG()),n.registerLanguage(`stylus`,ZG()),n.registerLanguage(`subunit`,QG()),n.registerLanguage(`swift`,$G()),n.registerLanguage(`taggerscript`,eK()),n.registerLanguage(`yaml`,tK()),n.registerLanguage(`tap`,nK()),n.registerLanguage(`tcl`,rK()),n.registerLanguage(`thrift`,iK()),n.registerLanguage(`tp`,aK()),n.registerLanguage(`twig`,oK()),n.registerLanguage(`typescript`,sK()),n.registerLanguage(`vala`,cK()),n.registerLanguage(`vbnet`,lK()),n.registerLanguage(`vbscript`,uK()),n.registerLanguage(`vbscript-html`,dK()),n.registerLanguage(`verilog`,fK()),n.registerLanguage(`vhdl`,pK()),n.registerLanguage(`vim`,mK()),n.registerLanguage(`wasm`,hK()),n.registerLanguage(`wren`,gK()),n.registerLanguage(`x86asm`,_K()),n.registerLanguage(`xl`,vK()),n.registerLanguage(`xquery`,yK()),n.registerLanguage(`zephir`,bK()),n.HighlightJS=n,n.default=n,t.exports=n}))()).default,SK={key:0,class:`message-media`},CK=[`aria-label`],wK=[`src`,`alt`],TK=[`aria-label`],EK={class:`message-file__icon`},DK={class:`message-file__info`},OK={class:`message-file__name`},kK={class:`message-file__basename`},AK={class:`message-file__extension`},jK={key:0,class:`message-file__size`},MK=H(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=VH(U(()=>{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})),s=U(()=>{let e=n.attachment.name,t=e.lastIndexOf(`.`);return t>0?[e.slice(0,t),e.slice(t)]:[e,``]}),c=U(()=>{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`,SK,[i.value?(u(),F(`button`,{key:1,class:`message-file`,type:`button`,onClick:n[3]||=e=>{i.value=!1,a.value=Date.now()}},[W(Y,{name:`image`,size:22}),D(`span`,null,h(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:V(o).url.value,alt:e.attachment.name,onLoad:n[0]||=e=>r(`rendered`),onError:n[1]||=e=>{i.value=!0,r(`rendered`)}},null,40,wK)],8,CK))])):(u(),F(`button`,{key:1,class:`message-file`,type:`button`,"aria-label":`预览文件 ${e.attachment.name}${c.value?`,${c.value}`:``}`,onClick:n[4]||=t=>r(`open`,e.attachment)},[D(`span`,EK,[W(Y,{name:e.attachment.kind||`file`,size:20},null,8,[`name`])]),D(`span`,DK,[D(`span`,OK,[D(`span`,kK,h(s.value[0]),1),D(`span`,AK,h(s.value[1]),1)]),c.value?(u(),F(`span`,jK,h(c.value),1)):z(``,!0)])],8,TK))}}),[[`__scopeId`,`data-v-0ebf5bb9`]]),NK=new Set([`md`,`markdown`,`mdown`,`mkd`]);function PK(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 FK(e,t=e.length,n=e.info){return`${e.indent}${e.marker.repeat(t)}${n?` ${n}`:``}`}function IK(e){let t=e.info.split(/\s+/)[0]?.toLowerCase();return NK.has(t)}function LK(e,t){let n=PK(e);return!!(n&&n.marker===t.marker&&n.length>=t.length&&n.info===``)}function RK(e,t=e.length-1){let n=t;for(;n>=0&&e[n].trim()===``;)--n;return n}function zK(e,t,n){for(let r=RK(e);r>n;--r)if(LK(e[r],t))return r;return-1}function BK(e,t){let n=[],r=!1;for(let i of e){let e=PK(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 VK(e,t,n){let r=[];for(let i=n;i<e.length;i+=1){let n=PK(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(BK(e.slice(n,a),t.marker))return a}return r[0]??-1}function HK(e,t){let n=0;for(let r of e){let e=PK(r);e?.marker===t&&(n=Math.max(n,e.length))}return n}function UK(e){let t=[];for(let n=0;n<e.length;n+=1){let r=PK(e[n]);if(!r||!IK(r)){t.push(e[n]);continue}let i=VK(e,r,n+1);if(i===-1){t.push(e[n]);continue}let a=e.slice(n+1,i),o=HK(a,r.marker);if(o>=r.length){let e=o+1;t.push(FK(r,e)),t.push(...a),t.push(FK(r,e,``))}else t.push(e[n]),t.push(...a),t.push(e[i]);n=i}return t}function WK(e){if(!e.includes("```")&&!e.includes(`~~~`))return e;let t=e.split(`
|
|
246
246
|
`),n=[],r=!1;for(let e=0;e<t.length;e+=1){let i=PK(t[e]);if(!i||!IK(i)){n.push(t[e]);continue}let a=zK(t,i,e+1);if(a===-1){n.push(t[e]);continue}if(a!==RK(t)){n.push(t[e]);continue}n.push(...UK(t.slice(e+1,a))),n.push(...t.slice(a+1)),r=!0;break}return r?n.join(`
|
|
247
247
|
`):e}function GK(e){let t=``,n=0;for(let r of e.split(`
|
|
248
|
-
`)){let e=PK(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 KK(e,t=!1){let n=WK(e);return t?n:GK(n)}var qK={key:0,class:`plain-text`},JK=[`innerHTML`],YK={key:1,class:`plain-text`},XK=[`innerHTML`],ZK=H(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),s=O(``),c=O(n.content),d;function _(){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(c.value)||!c.value?(_(),c.value=e):d===void 0&&(d=setTimeout(()=>{d=void 0,c.value=n.content},n.streamIntervalMs))}),i(_);let v=new Map,y=0;function b(e,t){let n=`${t}\0${e}`,r=v.get(n);if(r!==void 0)return r;let i=t&&xK.getLanguage(t)?xK.highlight(e,{language:t,ignoreIllegals:!0}).value:x(e);if(n.length+i.length<=256e3)for(v.set(n,i),y+=n.length+i.length;v.size>32||y>512e3;){let e=v.keys().next().value;y-=e.length+v.get(e).length,v.delete(e)}return i}function x(e){return e.replace(/&/g,`&`).replace(/</g,`<`).replace(/>/g,`>`).replace(/"/g,`"`)}let S=new nV({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=>!!uV(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=uV(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?uV(s,n.fileProfile):void 0;return c&&/\.[^/]+$/.test(sV(s)??``)&&o.attrSet(`href`,c),o.attrSet(`target`,`_blank`),o.attrSet(`rel`,`noopener noreferrer`),E(e,t,r,i,a)};let D=U(()=>{let e=n.legacyMedia?wV(c.value||``,n.streaming):c.value||``;return e=KK(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=wh(window);M.setConfig(j);function N(e){let t=M.sanitize(A(e));if(!fe())return t;let n=document.createElement(`template`);n.innerHTML=t;for(let e of n.content.querySelectorAll(`img`)){let t=e.getAttribute(`src`)||``;zH(t)&&(e.dataset.remoteSrc=t,e.removeAttribute(`src`))}return n.innerHTML}let P=U(()=>{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=U(()=>{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(`data-remote-src`)||o?.getAttribute(`src`)||s.getAttribute(`href`),n=r.find(t=>t.url&&I(t.url)===I(e)),l=n?.name||(o?o.alt||`图片`:H(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?wV(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}`;s.value=r;let i=await hr(n);e.textContent=i?`已复制`:`复制失败`,e.setAttribute(`aria-label`,i?`代码已复制`:`复制代码失败`),window.setTimeout(()=>{s.value!==r||!e.isConnected||(s.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=sV(e.searchParams.get(`path`)||``);if(!(!t||!lV(t)))return{path:t,remote:!1}}function H(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=H(e,n);e.textContent=i,e.setAttribute(`aria-label`,`预览文件 ${i}`),e.addEventListener(`click`,e=>{e.preventDefault(),r(`fileLink`,i,`${t.pathname}${t.search}`)})})}let G=new Map;function K(){for(let e of G.values())e.controller.abort(),e.url&&URL.revokeObjectURL(e.url);G.clear()}m(()=>window.addEventListener(`yaovi-remote-disconnected`,K)),i(()=>{window.removeEventListener(`yaovi-remote-disconnected`,K),K()});function ee(){for(let[e,t]of G)e.isConnected||(t.controller.abort(),t.url&&URL.revokeObjectURL(t.url),G.delete(e));for(let e of a.value?.querySelectorAll(`img[data-remote-src]`)??[]){if(G.has(e))continue;let t={controller:new AbortController};G.set(e,t);let n=e.dataset.remoteSrc;e.setAttribute(`role`,`button`),e.tabIndex=0;let i=()=>r(`fileLink`,e.alt||`图片`,n);e.addEventListener(`click`,i),e.addEventListener(`keydown`,e=>{(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),i())}),BH(n,{signal:t.controller.signal}).then(async n=>{if(!n.ok)throw Error(`图片加载失败`);let r=await n.blob();t.controller.signal.aborted||(t.url=URL.createObjectURL(r),e.src=t.url)}).catch(()=>{t.controller.signal.aborted||(e.alt=(e.alt||`图片`)+`(加载失败)`)})}}function te(){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 BH(t.href,{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 q(){!n.outlinePrefix||!a.value||a.value.querySelectorAll(`h1, h2, h3`).forEach((e,t)=>{e.id=`${n.outlinePrefix}-heading-${t+1}`})}function J(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(),te(),ee(),q()}),g(()=>{R(),W(),te(),ee(),q()}),(t,n)=>(u(),F(T,null,[e.separateMedia?(u(),F(`div`,{key:0,ref_key:`root`,ref:a,class:l([`markdown message-parts`,{"message-parts--streaming":e.streaming}]),onClick:J},[(u(!0),F(T,null,p(L.value,(t,i)=>(u(),F(T,{key:i},[`attachment`in t?(u(),k(MK,{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:l([`message-prose`,{"chat-bubble":e.bubble}])},[t.text===void 0?(u(),F(`div`,{key:1,class:`markdown-block`,innerHTML:t.html},null,8,JK)):(u(),F(`div`,qK,h(t.text),1))],2))],64))),128))],2)):e.plain?(u(),F(`div`,YK,h(e.content),1)):(u(),F(`div`,{key:2,ref_key:`root`,ref:a,class:l([`markdown`,{"markdown--streaming":e.streaming}]),onClick:J},[(u(!0),F(T,null,p(P.value,(e,t)=>(u(),F(`div`,{key:t,class:`markdown-block`,innerHTML:e},null,8,XK))),128))],2)),e.streaming?(u(),k(Y,{key:3,class:`stream-caret`,name:`arrow-up`,size:0})):z(``,!0)],64))}}),[[`__scopeId`,`data-v-2e8d437d`]]),QK={class:`preview-inspector`},$K=[`title`],eq={class:`preview-header-actions`},tq=[`href`],nq=[`src`,`alt`],rq=[`src`],iq=[`src`],aq={key:5,class:`preview-sheet`},oq={key:6,class:`preview-text`},sq={key:0},cq=[`href`],lq={key:8,class:`preview-unavailable`},uq=H(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=U(()=>!!n.item.previewUrl),s=U(()=>[`text`,`code`].includes(n.item.kind)),c=U(()=>n.item.previewUrl||n.item.downloadUrl||``),d=VH(c),m=e=>HH(e,c.value,n.item.name).catch(e=>{S.value=e.message}),g=O(null),_=O(null),v=O([]),y=O(``),b=O(!1),x=O(!1),S=O(``),C=U(()=>n.item.name.split(`.`).at(-1)?.toLocaleLowerCase()||``),w=U(()=>C.value===`docx`||/wordprocessingml/.test(n.item.mimeType||``)),E=U(()=>[`xlsx`,`xls`].includes(C.value)||/spreadsheetml|excel/.test(n.item.mimeType||``)),A=U(()=>n.item.kind===`pdf`||C.value===`pdf`||n.item.mimeType===`application/pdf`),j=0,M,N=new URL(`/assets/pdf.worker.min-CHFwMXne.mjs`,``+import.meta.url).href;function P(){let e=g.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 I(){M?.disconnect(),!(!g.value||typeof ResizeObserver>`u`)&&(M=new ResizeObserver(P),M.observe(g.value))}async function L(){let e=++j;if(M?.disconnect(),M=void 0,g.value?.style.removeProperty(`--docx-preview-scale`),v.value=[],y.value=n.item.textContent||``,b.value=n.item.textContent!==void 0,S.value=``,c.value&&!(!w.value&&!E.value&&!s.value&&!A.value)){x.value=!0;try{let t=await BH(c.value,{credentials:`same-origin`});if(!t.ok)throw Error(`预览读取失败(${t.status})`);let n=await t.blob();if(e!==j)return;if(A.value){let t=await nt(()=>import(`./pdf-CoNh_Rmj.js`),__vite__mapDeps([18,3,4,1,5]));if(t.GlobalWorkerOptions.workerSrc=N,await o(),!_.value)return;_.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!==j||!_.value)return;let n=await r.getPage(t),i=n.getViewport({scale:1}),a=Math.min(1.45,Math.max(.55,(_.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),_.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(w.value){let{renderAsync:e}=await nt(async()=>{let{renderAsync:e}=await import(`./docx-preview-DZusoPTe.js`);return{renderAsync:e}},__vite__mapDeps([19,4]));if(await o(),!g.value)return;g.value.replaceChildren(),await e(n,g.value,void 0,{inWrapper:!0,breakPages:!0,ignoreWidth:!1,ignoreHeight:!1}),P(),I()}else if(E.value){let{default:e}=await nt(async()=>{let{default:e}=await import(`./browser-B97PQaMt.js`);return{default:e}},[]);v.value=await e(n)}else s.value&&(b.value||(y.value=await n.text()),b.value=!0)}catch(e){S.value=e instanceof Error?e.message:`无法生成预览`}finally{x.value=!1}}}return f(()=>n.item.id,L,{immediate:!0,flush:`post`}),i(()=>M?.disconnect()),(t,n)=>(u(),F(`div`,QK,[D(`header`,null,[D(`strong`,{title:e.item.name},h(e.item.title||e.item.name),9,$K),D(`div`,eq,[e.item.sourceSessionId?(u(),F(`button`,{key:0,class:`icon-button`,type:`button`,"aria-label":`跳转到来源消息`,title:`跳转到来源消息`,onClick:n[0]||=t=>r(`source`,e.item)},[W(Y,{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:``,onClick:m,"aria-label":`下载`,title:`下载`},[W(Y,{name:`download`,size:16})],8,tq)):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)},[W(Y,{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`)},[W(Y,{name:`close`,size:17})])):z(``,!0)])]),D(`div`,{class:l([`preview-stage`,`preview-stage--${e.item.kind}`])},[e.item.kind===`image`&&a.value?(u(),F(`img`,{key:0,src:V(d).url.value,alt:e.item.name},null,8,nq)):e.item.kind===`video`&&a.value?(u(),F(`video`,{key:1,src:V(d).url.value,controls:``,playsinline:``},null,8,rq)):e.item.kind===`audio`&&a.value?(u(),F(`audio`,{key:2,src:V(d).url.value,controls:``},null,8,iq)):A.value&&a.value?(u(),F(`div`,{key:3,ref_key:`pdfRoot`,ref:_,class:`preview-pdf`},null,512)):w.value?(u(),F(`div`,{key:4,ref_key:`officeRoot`,ref:g,class:`preview-office`},null,512)):E.value&&v.value.length?(u(),F(`div`,aq,[D(`table`,null,[D(`tbody`,null,[(u(!0),F(T,null,p(v.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},h(e),1))),128))]))),128))])])])):s.value&&b.value?(u(),F(`div`,oq,[e.item.kind===`code`?(u(),F(`pre`,sq,h(y.value),1)):(u(),k(ZK,{key:1,content:y.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,[W(Y,{name:`link`,size:27})]),D(`strong`,null,h(e.item.title||e.item.name),1),n[3]||=D(`small`,null,`在新窗口中打开`,-1)],8,cq)):(u(),F(`div`,lq,[D(`span`,null,[W(Y,{name:S.value?`alert`:`file`,size:28},null,8,[`name`])]),D(`strong`,null,h(x.value?`正在生成预览…`:S.value||`此格式暂不支持内嵌预览`),1),D(`p`,null,h(S.value?`仍可下载文件后使用系统应用查看。`:`可下载文件,使用系统应用查看。`),1)]))],2)]))}}),[[`__scopeId`,`data-v-3345fd60`]]),dq=[`aria-label`],fq=H(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=U(()=>{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=U(()=>a.value[o.value]??n.item),c=U(()=>o.value>0),l=U(()=>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`},[W(rt,{name:`preview-modal`},{default:S(()=>[D(`div`,{class:`preview-modal-layer`,onMousedown:n[4]||=Z(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},[W(uq,{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},[W(Y,{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},[W(Y,{class:`media-nav__next-icon`,name:`chevron-left`,size:22})])):z(``,!0)],40,dq)],32)]),_:1})]))}}),[[`__scopeId`,`data-v-b797b8fc`]]),pq=new Set([`apng`,`avif`,`bmp`,`gif`,`heic`,`heif`,`ico`,`jfif`,`jpeg`,`jpg`,`jxl`,`png`,`svg`,`tif`,`tiff`,`webp`]),mq=new Set([`avi`,`m4v`,`mkv`,`mov`,`mp4`,`mpeg`,`mpg`,`webm`]);function hq(e,t,n=`local:${t}`,r){let i=e.split(`.`).at(-1)?.toLocaleLowerCase()||``,a=pq.has(i)?`image`:mq.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 gq(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 _q(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 vq(e){let t=[],n=new Set,r=e=>{if(!e.previewUrl||![`image`,`video`].includes(e.kind))return;let r=gq(e.previewUrl);n.has(r)||(n.add(r),t.push(e))},i=new nV({html:!1}),a=i.validateLink;i.validateLink=e=>!!uV(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(hq(n.name,n.url,`${t.id}:${n.id}`,n.kind))},n=e=>{if(t.role===`user`)return;let n=wV(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=uV(e,t.profile)||e,a=t.attachments?.find(e=>e.url&&gq(e.url)===gq(i));r(hq(a?.name||_q(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 yq={class:`chat-files`,"aria-label":`聊天文件`},bq={class:`files-search`},xq=[`aria-busy`],Sq=[`aria-label`,`onClick`],Cq={class:`attachment-copy`},wq=[`title`],Tq=[`datetime`],Eq={key:0,class:`files-status`,role:`status`},Dq={key:1,class:`files-status`,role:`alert`},Oq={key:2,class:`files-status`},kq=H(E({__name:`BotFilesPanel`,props:{conversationId:{},active:{type:Boolean,default:!0},revision:{}},setup(e){let t=e,n=O(``),r=O([]),a=O(null),s=O(!1),c=O(``),m=O(null),g=0,_,v,y=null;async function b(e=!1){if(!t.conversationId||!t.active)return;_?.abort();let i=++g;_=new AbortController,s.value=!0,c.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 X(`/api/app/conversations/${encodeURIComponent(t.conversationId)}/files?${o}`,{signal:_.signal});if(i!==g)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===g&&(c.value=e instanceof Error?e.message:`暂时无法读取文件`)}finally{i===g&&(s.value=!1)}}f([()=>t.conversationId,()=>t.active,()=>t.revision,()=>n.value.trim()],(e,n)=>{g++,_?.abort(),clearTimeout(v),r.value=[],a.value=null,m.value=null,c.value=``,s.value=!!(t.conversationId&&t.active),s.value&&(n&&e[0]===n[0]&&e[3]!==n[3]?v=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){y=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={...hq(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(),y?.isConnected&&y.focus({preventScroll:!0})}return i(()=>{g++,_?.abort(),clearTimeout(v)}),(e,t)=>(u(),F(`section`,yq,[D(`label`,bq,[W(Y,{name:`search`,size:18}),d(D(`input`,{"onUpdate:modelValue":t[0]||=e=>n.value=e,"aria-label":`搜索文件`,placeholder:`搜索文件`},null,512),[[Q,n.value]]),n.value?(u(),F(`button`,{key:0,type:`button`,"aria-label":`清空搜索`,onClick:t[1]||=e=>n.value=``},[W(Y,{name:`close`,size:16})])):z(``,!0)]),D(`div`,{class:`files-scroll`,"aria-label":`文件列表,按日期从新到旧`,"aria-busy":s.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:l([`attachment-icon`,{spreadsheet:C(e)===`board`,image:C(e)===`image`}])},[W(Y,{name:C(e),size:22},null,8,[`name`])],2),D(`span`,Cq,[D(`strong`,{title:e.name},h(e.name),9,wq),D(`small`,null,[D(`time`,{datetime:new Date(e.sentAt).toISOString()},h(x(e.sentAt)),9,Tq),t[4]||=D(`span`,null,`·`,-1),w(h(S(e.size)),1)])])],8,Sq))),128)),s.value?(u(),F(`p`,Eq,`正在读取文件…`)):c.value?(u(),F(`p`,Dq,[w(h(c.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`,Oq,h(n.value.trim()?`没有找到相关文件`:`暂无文件`),1))],8,xq),m.value?(u(),k(fq,{key:0,item:m.value,"can-add-to-composer":!1,onClose:A},null,8,[`item`])):z(``,!0)]))}}),[[`__scopeId`,`data-v-cde52027`]]),Aq={class:`grok-auth`,"aria-label":`Grok Bot 登录授权`},jq={class:`account-icon`},Mq={"aria-live":`polite`},Nq={key:0,class:`connected`},Pq={key:0,class:`account`},Fq={key:0},Iq={key:1,class:`hint`},Lq={key:2,class:`pending`,role:`status`},Rq={key:3,class:`error`,role:`alert`},zq=[`href`],Bq={class:`actions`},Vq=[`disabled`],Hq=[`disabled`],Uq=[`disabled`],Wq={key:1,class:`hint`},Gq={key:2,class:`hint`},Kq={key:0},qq=[`disabled`],Jq=[`open`],Yq=[`disabled`],Xq=H(E({__name:`GrokAuthPanel`,props:{isAdmin:{type:Boolean}},emits:[`changed`],setup(e,{emit:t}){let n=t,r=O(),a=O(``),o=O(``),s=O(!1),c=O(!0),l=O(!1),d=U(()=>r.value?.attempt?.status===`pending`),f=U(()=>d.value?`等待浏览器授权`:r.value?.status===`reauthorization-required`?`需要重新授权`:r.value?.status===`refreshing`?`正在续期`:r.value?.status===`connected`?`已授权`:`尚未登录`),p=U(()=>{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||s.value)return;v?.abort();let e=new AbortController;v=e;try{let t=await X(`/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||(c.value=!1)}}async function C(e){if(!s.value){v?.abort(),s.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{s.value=!1,c.value=!1}}}async function E(){y??=He(),await C(()=>X(`/api/app/grok-cloud/auth/start`,{method:`POST`,body:{requestId:y}})),d.value&&p.value&&window.open(p.value,`_blank`,`noopener,noreferrer`),d.value||(y=void 0),a.value&&await S()}async function k(){let e=r.value?.attempt?.id;e&&(await C(()=>X(`/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(()=>X(`/api/app/grok-cloud/auth/${e}/poll`,{method:`POST`,body:{}}))}async function j(){await C(()=>X(`/api/app/grok-cloud/auth`,{method:`DELETE`})),y=void 0}async function M(){await C(()=>X(`/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,d.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`,Aq,[D(`header`,null,[D(`span`,jq,[W(Y,{name:`globe`,size:20})]),D(`div`,null,[n[1]||=D(`strong`,null,`Grok Bot`,-1),D(`small`,Mq,h(c.value?`正在检查授权…`:f.value),1)]),r.value?.status===`connected`&&!d.value?(u(),F(`span`,Nq,[W(Y,{name:`check`,size:14}),n[2]||=w(`已连接`,-1)])):z(``,!0)]),r.value?.account?.email||r.value?.account?.name?(u(),F(`p`,Pq,[w(h(r.value.account.name),1),r.value.account.email?(u(),F(`span`,Fq,h(r.value.account.email),1)):z(``,!0)])):z(``,!0),!r.value?.configured&&!d.value?(u(),F(`p`,Iq,`使用 Grok Bot 所属的 Cursor 账号,在浏览器完成登录授权。`)):z(``,!0),d.value?(u(),F(`div`,Lq,[...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`,Rq,h(a.value||o.value||r.value?.attempt?.error||r.value?.error),1)):z(``,!0),d.value?(u(),F(T,{key:4},[p.value?(u(),F(`a`,{key:0,class:`primary`,href:p.value,target:`_blank`,rel:`noopener noreferrer`},[W(Y,{name:`external`,size:14}),n[4]||=w(`在浏览器继续授权`,-1)],8,zq)):z(``,!0),D(`div`,Bq,[D(`button`,{disabled:s.value,onClick:A},`我已完成授权`,8,Vq),D(`button`,{disabled:s.value,onClick:k},`取消授权`,8,Hq)])],64)):(u(),F(T,{key:5},[e.isAdmin?(u(),F(`button`,{key:0,class:`primary`,disabled:s.value||c.value,onClick:E},[W(Y,{name:`external`,size:15}),w(h(r.value?.status===`connected`?`重新授权`:`使用 Cursor 账号登录`),1)],8,Uq)):r.value?.configured?z(``,!0):(u(),F(`p`,Wq,`请由管理员为当前账号完成云端授权。`)),r.value?.configured?(u(),F(`p`,Gq,[w(h(r.value.automaticRefresh?`登录会自动续期,无需重复登录。`:`此连接尚未取得自动续期授权,建议重新登录。`),1),r.value.expiresAt&&r.value.status!==`reauthorization-required`?(u(),F(`span`,Kq,`当前凭据有效期至 `+h(new Date(r.value.expiresAt).toLocaleString(`zh-CN`))+`。`,1)):z(``,!0)])):z(``,!0),r.value?.configured?(u(),F(`button`,{key:3,class:`disconnect`,disabled:s.value,onClick:j},`断开连接`,8,qq)):z(``,!0)],64)),n[7]||=D(`p`,{class:`privacy`},`登录凭据加密保存在当前服务器,供当前账号的机器人使用。`,-1),e.isAdmin&&!d.value?(u(),F(`details`,{key:6,open:l.value,onToggle:n[0]||=e=>l.value=e.target.open},[n[5]||=D(`summary`,null,`兼容旧连接`,-1),n[6]||=D(`p`,{class:`hint`},`仅用于迁移服务器上已有的 Grok Bot 登录;推荐使用上方浏览器授权。`,-1),D(`button`,{disabled:s.value,onClick:M},`导入服务器上的已有登录`,8,Yq)],40,Jq)):z(``,!0)]))}}),[[`__scopeId`,`data-v-65a30394`]]),Zq={class:`panel-body`},Qq={key:0,class:`agent-select`},$q=[`disabled`],eJ=[`value`],tJ={key:1},nJ={class:`screen-caption`},rJ=[`disabled`],iJ={value:``},aJ=[`value`],oJ=[`value`],sJ={key:1},cJ=[`disabled`,`aria-label`],lJ=[`src`,`alt`],uJ={key:1,class:`empty`},dJ={key:2,class:`open-badge`},fJ={key:0,class:`problem`,role:`alert`},pJ={class:`computer-options`},mJ={key:0,class:`managed-browser-option`,"aria-label":`托管浏览器`},hJ={key:0,class:`hint`,role:`status`},gJ=[`value`],_J=[`disabled`,`aria-busy`],vJ=[`disabled`],yJ=[`disabled`],bJ={key:1,class:`hint`},xJ={key:1,class:`problem`,role:`alert`,"aria-label":`本地虚拟机状态`},SJ=[`disabled`],CJ=[`value`,`disabled`],wJ=[`disabled`],TJ={key:0,class:`hint`},EJ=[`value`,`disabled`],DJ={key:0,value:``,disabled:``},OJ=[`value`,`disabled`],kJ={class:`hint`},AJ=[`disabled`],jJ=[`disabled`],MJ=[`disabled`],NJ=[`disabled`],PJ=[`disabled`],FJ={class:`control-state`},IJ={key:8,class:`vm-actions`},LJ=[`disabled`],RJ=[`disabled`],zJ=[`disabled`],BJ={class:`hint`},VJ=H(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(),s=O(),c=O(``),m=O(!1),g=O(!0),_=U(()=>n.agents.find(e=>e.id===a.value)),v=O({vm:!0,cloud:!0,managedBrowser:!1}),y=O(),b=O(!1),x=O(``),S=O(),C=O(!1),E=U(()=>v.value.cloud),A=U(()=>v.value.vm&&!!o.value),j=O(``),M=U(()=>o.value?.desktops?.find(e=>e.id===j.value)),N=U(()=>!!o.value?.enabled&&o.value.desktopId===j.value),P=U(()=>o.value?.fixedCapacity&&!m.value&&!o.value.inUse&&!_.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=U(()=>[v.value.cloud?`云虚拟机`:``,v.value.vm?`本地虚拟机`:``,v.value.managedBrowser?`托管浏览器`:``].filter(Boolean).join(` · `)),L=U(()=>{let e=[];return v.value.cloud&&S.value?.configured&&e.push({key:`cloud`,label:`云虚拟机`,backend:`cloud`}),v.value.vm&&e.push({key:`vm`,label:`本地虚拟机`,backend:`vm`}),v.value.managedBrowser&&e.push({key:`managed-browser`,label:`托管浏览器`,backend:`managed-browser`}),e}),R=O(``),B=U(()=>{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]}),H=U(()=>R.value?L.value.find(e=>e.key===R.value):B.value),G=O(!1),K=U(()=>{let e=H.value;return e?e.backend===`cloud`?S.value?.configured?S.value?.running?`正在连接桌面…`:`打开云端电脑后可查看桌面`:`尚未连接 Grok Bot 账号`:e.backend===`managed-browser`?y.value?.available?y.value.open?`正在读取浏览器画面…`:`浏览器尚未打开,接管后可打开网页`:y.value?.installation?.message||y.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?`请先连接下方的共享桌面`:`未使用电脑`:R.value?`所选电脑已不可用,请重新选择`:`暂无已开放的电脑`}),ee,te=!1,q=0,J=0,ne=0,re=()=>`/api/app/agents/${encodeURIComponent(a.value)}/local-vm`;async function ie(){let e=a.value,t=++ne;try{let n=await X(`/api/app/agents/${encodeURIComponent(e)}/managed-browser`);!te&&e===a.value&&t===ne&&(y.value=n,x.value=``)}catch(n){!te&&e===a.value&&t===ne&&(y.value=void 0,x.value=n instanceof Error?n.message:`无法读取托管浏览器状态`)}}async function ae(){if(!(m.value||b.value)){b.value=!0;try{await ie(),await oe()}finally{b.value=!1}}}async function oe(){if(te||n.active===!1||!a.value||document.hidden||m.value)return;let e=++J,t=a.value,r=H.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`&&!!y.value?.available&&!!y.value?.open;if(!r||!i){s.value=void 0,G.value=!1;return}G.value=!0;try{let n=new URLSearchParams({backend:r.backend});r.host&&n.set(`host`,r.host);let i=await X(`/api/app/agents/${encodeURIComponent(t)}/computer/frame?${n}`);e===J&&!te&&t===a.value&&(s.value=i)}catch{e===J&&!te&&(s.value=void 0)}finally{e===J&&!te&&(G.value=!1)}}f(()=>H.value?.key,()=>{J++,s.value=void 0,oe()},{flush:`sync`});async function se(){if(te||n.active===!1||!a.value||document.hidden||m.value)return;let e=q;try{try{let t=await X(`/api/app/settings/host-tools`);e===q&&!te&&(v.value={vm:t.vm!==!1,cloud:t.cloud!==!1,managedBrowser:t.managedBrowser===!0})}catch{}let t=a.value,[n,r]=await Promise.all([X(`/api/app/agents/${t}/cloud-computer`),v.value.vm?X(re()):Promise.resolve(void 0),v.value.managedBrowser?ie():Promise.resolve(void 0)]);if(e!==q||te||(S.value=n,o.value=r,await oe(),e!==q||te))return;c.value=``}catch(t){e===q&&(c.value=t instanceof Error?t.message:`无法读取电脑画面`)}finally{e===q&&(g.value=!1)}}async function ce(e){let t=``;if(m.value)return!1;m.value=!0,c.value=``;try{await e(),r(`changed`)}catch(e){t=e instanceof Error&&e.message?e.message:`电脑操作未完成`}finally{m.value=!1,await se(),t&&(c.value=t)}return!t}async function le(){if(!P.value)return;let e=a.value,t=j.value;await ce(()=>X(`/api/app/agents/${encodeURIComponent(e)}/local-vm`,{method:`PUT`,body:{enabled:!0,desktopId:t}}))&&a.value===e&&(R.value=`vm`)}async function ue(e,t){let n=_.value;!n||m.value||![`vm`,`cloud`,`managed-browser`].includes(e)||e===`cloud`&&!await ce(()=>X(`/api/app/agents/${encodeURIComponent(n.id)}/cloud-computer/open`,{method:`POST`,body:{}}))||!te&&_.value?.id===n.id&&r(`desktop`,n,e,t)}async function de(){let e=H.value;e&&s.value&&await ue(e.backend,e.host)}function fe(e){e===`recreate`&&!confirm(`重建这台虚拟机?当前桌面程序将关闭,工作文件、软件配置和登录资料会保留。`)||e===`remove`&&!confirm(`移除这台虚拟机实例以切换镜像?工作文件、软件配置和登录资料会保留。`)||ce(()=>X(re()+`/`+e,{method:`POST`,body:{}}))}async function pe(){let e=q;await se(),!te&&e===q&&(ee=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,()=>{q++,J++,ne++,o.value=void 0,j.value=``,S.value=void 0,y.value=void 0,x.value=``,s.value=void 0,c.value=``,g.value=!0,R.value=``,clearTimeout(ee),pe()},{immediate:!0}),f(()=>n.active,e=>{e&&se()}),i(()=>{te=!0,q++,J++,clearTimeout(ee)}),(t,n)=>(u(),F(`aside`,{class:l([`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`)},[W(Y,{name:`close`})])]),D(`div`,Zq,[e.agents.length>1?(u(),F(`label`,Qq,[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},h(e.name),9,eJ))),128))],8,$q),[[Ne,a.value]])])):z(``,!0),_.value?(u(),F(T,{key:2},[D(`div`,nJ,[D(`span`,null,h(_.value.name)+`的电脑`,1),L.value.length>1||R.value?d((u(),F(`select`,{key:0,"onUpdate:modelValue":n[2]||=e=>R.value=e,disabled:m.value,class:`screen-select`,"aria-label":`显示的桌面`},[D(`option`,iJ,`自动`+h(H.value&&!R.value?` · `+H.value.label:``),1),R.value&&!H.value?(u(),F(`option`,{key:0,value:R.value,disabled:``},`所选电脑不可用`,8,aJ)):z(``,!0),(u(!0),F(T,null,p(L.value,e=>(u(),F(`option`,{key:e.key,value:e.key},h(e.label),9,oJ))),128))],8,rJ)),[[Ne,R.value]]):I.value?(u(),F(`small`,sJ,h(H.value?.label||I.value),1)):z(``,!0)]),D(`button`,{class:`preview`,disabled:!s.value||m.value,"aria-label":`打开${H.value?.label||_.value.name}的桌面`,onClick:n[3]||=e=>de()},[s.value?(u(),F(`img`,{key:0,src:`data:image/png;base64,${s.value.data}`,alt:`${H.value?.label||_.value.name}的电脑画面`},null,8,lJ)):(u(),F(`span`,uJ,[W(Y,{name:`monitor`,size:26}),D(`span`,null,h(g.value?`正在检查电脑…`:G.value?`正在读取所选电脑画面…`:K.value),1)])),s.value?(u(),F(`span`,dJ,[W(Y,{name:`external`,size:12}),n[22]||=w(`打开桌面`,-1)])):z(``,!0)],8,cJ),c.value?(u(),F(`p`,fJ,h(c.value),1)):z(``,!0),n[34]||=D(`p`,{class:`hint`},`可查看和接管本地虚拟机、云虚拟机和托管浏览器。设备授权状态在「设置 → 环境与权限 → 本机权限」中查看。`,-1),D(`div`,pJ,[v.value.managedBrowser?(u(),F(`section`,mJ,[n[23]||=D(`strong`,null,`托管浏览器`,-1),n[24]||=D(`p`,null,`网页操作使用独立浏览器。虚拟机的运行和维护状态在下方显示;查看状态不会打开网页。`,-1),y.value?.available?z(``,!0):(u(),F(`p`,hJ,h(x.value||y.value?.installation?.message||y.value?.reason||`执行节点尚未提供浏览器能力,请检查节点配置与连接。`),1)),y.value?.installation?.status===`installing`?(u(),F(`progress`,{key:1,value:y.value.installation.progress,max:`100`,"aria-label":`浏览器准备进度`},null,8,gJ)):z(``,!0),y.value?.available?z(``,!0):(u(),F(`button`,{key:2,type:`button`,disabled:m.value||b.value,"aria-busy":b.value,onClick:ae},h(b.value?`正在检测…`:`重新检测`),9,_J)),D(`button`,{class:`primary`,disabled:m.value||b.value||!V(ht)(y.value),onClick:n[4]||=e=>ue(`managed-browser`)},h(y.value?.installation?.status===`failed`?`重试并接管浏览器`:y.value?.open?`接管浏览器`:`打开并接管浏览器`),9,vJ)])):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`)},h(S.value?.mode===`human`?`打开控制中的桌面`:`接管云虚拟机`),9,yJ)):z(``,!0),D(`button`,{onClick:n[6]||=e=>C.value=!C.value},h(S.value?.configured?`云端连接设置`:`连接 Grok Bot`),1),!e.isAdmin&&!S.value?.configured?(u(),F(`p`,bJ,`请由管理员为当前账号配置 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,h(_.value.temporaryGoalId?`临时助手的电脑由当前任务管理`:o.value.fixedCapacity||o.value.mode===`shared`?`共享虚拟机 · 与其他成员共用桌面和工作文件`:`此机器人的独立虚拟机`),1),o.value.maintenance?(u(),k(Wp,{key:0,state:o.value.maintenance},null,8,[`state`])):z(``,!0),o.value.problem?(u(),F(`p`,xJ,h(o.value.problem),1)):z(``,!0),o.value.fixedCapacity&&!_.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},h(e.name)+h(e.available===!1?` · 不可用`:e.online?e.ready?``:` · 正在启动`:` · 离线`),9,CJ))),128))],8,SJ),[[Ne,j.value]])]),D(`button`,{class:`primary`,"data-testid":`connect-compose-desktop`,disabled:!P.value,onClick:le},h(N.value?`已连接`:`连接所选桌面`),9,wJ),o.value.desktops?.length?z(``,!0):(u(),F(`p`,TJ,`暂无可连接的共享桌面,请检查本地虚拟机设置。`))],64)):z(``,!0),!o.value.fixedCapacity&&o.value.images?.length&&!_.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(()=>V(X)(re()+`/image`,{method:`PUT`,body:{imageKey:e.target.value}}))},[o.value.imageKey?z(``,!0):(u(),F(`option`,DJ,h(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},h(e.name)+h(e.ready?``:` · 未准备`),9,OJ))),128))],40,EJ)]),D(`p`,kJ,h(o.value.mode===`shared`?`同一共享桌面只能使用一个镜像,选择会对所有共享成员生效。`:`此桌面的镜像、文件和浏览器资料与其他独立桌面分开。`)+h(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,AJ)):!o.value.fixedCapacity&&o.value.container===`missing`&&!_.value.temporaryGoalId?(u(),F(`button`,{key:5,class:`primary`,disabled:m.value,onClick:n[10]||=e=>fe(`create`)},`创建 `+h(_.value.name)+` 的虚拟机`,9,jJ)):!o.value.fixedCapacity&&o.value.container===`stopped`&&!_.value.temporaryGoalId?(u(),F(`button`,{key:6,class:`primary`,disabled:m.value,onClick:n[11]||=e=>fe(`start`)},`启动虚拟机`,8,MJ)):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,NJ),o.value.mode===`per-bot`?(u(),F(`button`,{key:0,disabled:m.value,onClick:n[13]||=e=>r(`workspace`,_.value)},[W(Y,{name:`panel`}),n[30]||=w(`打开双桌面`,-1)],8,PJ)):z(``,!0),D(`p`,FJ,h(o.value.controlMode===`human`?`你或其他操作者正在控制电脑`:o.value.inUse?`机器人正在操作`:`仅查看 · 虚拟机空闲`),1)],64)):z(``,!0),!o.value.fixedCapacity&&o.value.container!==`missing`&&!_.value.temporaryGoalId?(u(),F(`div`,IJ,[D(`button`,{disabled:m.value||o.value.inUse,onClick:n[14]||=e=>fe(`stop`)},`停止虚拟机`,8,LJ),D(`button`,{disabled:m.value||o.value.inUse,onClick:n[15]||=e=>fe(`recreate`)},`重建虚拟机`,8,RJ),D(`button`,{disabled:m.value||o.value.inUse,onClick:n[16]||=e=>fe(`remove`)},`移除实例`,8,zJ)])):z(``,!0),D(`p`,BJ,h(o.value.fixedCapacity?`桌面由 Compose 创建,数量固定。这里只连接已有共享桌面;工作目录为 /home/cua/workspace。`:`重建会保留工作文件、软件配置和登录资料。${V(Kp)(o.value.idleStopMinutes)},可在设置中修改。`),1),e.isAdmin?(u(),F(`button`,{key:9,class:`settings-link`,onClick:n[17]||=e=>r(`settings`)},[W(Y,{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},[W(Y,{name:`globe`,size:14}),n[33]||=w(`Grok Bot 云端连接`,-1)])),C.value?(u(),k(Xq,{key:2,"is-admin":e.isAdmin,onChanged:n[19]||=e=>{r(`changed`),se()}},null,8,[`is-admin`])):z(``,!0)],64)):(u(),F(`p`,tJ,`当前聊天没有可用的机器人。`))])],2))}}),[[`__scopeId`,`data-v-ac3d303c`]]);function HJ(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 UJ=[`onKeydown`],WJ={class:`detail-heading`},GJ=[`disabled`],KJ={key:0,class:`home-header`},qJ={role:`status`},JJ={key:1,class:`home-tabs`,"aria-label":`Bot 功能`},YJ=[`aria-pressed`,`onClick`],XJ={key:2,class:`home-content`},ZJ={class:`record-status`},QJ={key:0},$J={key:1,class:`home-task`,"aria-label":`任务详情`},eY={class:`home-task-owner`},tY={class:`home-task-person`},nY={key:0},rY={key:1},iY={key:2},aY={key:0,class:`home-task-criteria`},oY={key:0},sY={key:1,class:`detail-text`},cY={key:2,class:`home-task-artifacts`},lY=[`href`],uY={key:2,class:`detail-text`},dY={key:3,class:`note`},fY={key:4,class:`actions`},pY=[`disabled`],mY=[`disabled`],hY={key:5,class:`note`},gY={key:3,class:`home-content`},_Y={key:4,class:`home-content`},vY={key:0,class:`note`,role:`status`},yY=[`onClick`],bY={class:`record-copy`},xY={key:0,class:`record-task-owner`},SY={key:1},CY={key:1,class:`home-empty`},wY={key:8,class:`home-error`,role:`alert`},TY=H(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`}],s=O(!1),c=O(`activity`),d=O(),g=O(!!r.initialEdit),_=O(r.initialEdit?`overview`:`identity`),v=O(!1),y=O(!1),b=O(),x=O(),S=O(),C=O(!1),E=O(``),A=O(!1),j=!0,M=0,N,P=null,I=U(()=>jV(r.conversations).get(r.agent.id)??`idle`),L=U(()=>({working:`工作中`,waiting:`等待处理`,loading:`同步中`,idle:`空闲`})[I.value]??`状态待确认`),R=U(()=>r.connection===`online`?`${Py(`online`)} · ${L.value}`:Py(r.connection??`syncing`)),B=U(()=>{let e=c.value===`review`?S.value?.reviews??[]:S.value?.activities??[],t=new Map;for(let n of e){let e=c.value===`review`?n.pending?`待处理请求`:`历史记录`:HJ(n.at);t.set(e,[...t.get(e)??[],n])}return[...t].map(([e,t])=>({title:e,rows:t}))});async function H(){let e=++M;C.value=!S.value;try{let t=await X(`/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 G(){await H(),j&&(N=setTimeout(()=>{document.hidden?N=setTimeout(()=>void G(),5e3):G()},5e3))}function K(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 ee(){return(!g.value||b.value?.beforeClose()!==!1)&&(!y.value||window.confirm(`放弃当前记忆未保存的更改?`))&&!A.value}function te(){ee()&&a(`close`)}function J(e){y.value&&!window.confirm(`放弃当前记忆未保存的更改?`)||(y.value=!1,c.value=e,d.value=void 0,v.value=!1)}function ne(e=`identity`){_.value=e,g.value=!0}async function re(e){if(!(!d.value?.pending||A.value||r.connection!==`online`)){A.value=!0,E.value=``;try{await X(`/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 H()}}}function ie(){x.value?.focus()}return f(()=>r.agent.id,()=>{M++,S.value=void 0,d.value=void 0,c.value=`activity`,H()}),m(()=>{P=document.activeElement,ie(),G()}),i(()=>{j=!1,M++,clearTimeout(N),x.value?.contains(document.activeElement)&&P?.isConnected&&P.focus()}),t({beforeClose:ee,markSaved:e=>b.value?.markSaved(e),focus:ie}),(t,n)=>(u(),F(`aside`,{ref_key:`panel`,ref:x,class:`bot-home`,"aria-label":`Bot 主页`,tabindex:`-1`,onKeydown:Ie(Z(te,[`stop`,`prevent`]),[`esc`])},[g.value?(u(),F(T,{key:0},[D(`header`,WJ,[D(`button`,{"aria-label":`返回 Bot 主页`,disabled:e.busy,onClick:n[0]||=e=>b.value?.beforeClose()!==!1&&(g.value=!1)},[W(Y,{name:`chevron-left`}),n[20]||=w(`返回 `,-1)],8,GJ)]),W(Pu,{ref_key:`editor`,ref:b,embedded:``,"initial-page":_.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=>g.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},[s.value?z(``,!0):(u(),F(`header`,KJ,[D(`button`,{class:`home-close`,"aria-label":`关闭 Bot 主页`,onClick:te},[W(Y,{name:`close`,size:21})]),D(`div`,{class:l([`avatar-wrap`,{"has-main-badge":e.agent.id===e.mainBotId}])},[W(Ye,{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=>ne()},[W(Y,{name:`edit`,size:17})])],2),D(`h2`,null,h(e.agent.name),1),D(`p`,qJ,[D(`i`,{class:l({online:e.connection===`online`})},null,2),w(h(R.value),1)])])),s.value?z(``,!0):(u(),F(`nav`,JJ,[(u(),F(T,null,p(o,e=>D(`button`,{key:e.id,"aria-pressed":c.value===e.id,onClick:t=>J(e.id)},[W(Y,{name:e.icon,size:21},null,8,[`name`]),D(`span`,null,h(e.label),1)],8,YJ)),64))])),d.value?(u(),F(`div`,XJ,[D(`button`,{class:`back`,onClick:n[7]||=e=>d.value=void 0},[W(Y,{name:`chevron-left`}),w(`返回`+h(c.value===`review`?`审核`:`活动`),1)]),D(`h3`,null,h(d.value.title),1),D(`p`,ZJ,h(d.value.status),1),d.value.at?(u(),F(`small`,QJ,h(new Date(d.value.at).toLocaleString(`zh-CN`)),1)):z(``,!0),d.value.task?(u(),F(`section`,$J,[D(`p`,eY,[w(`负责人 `+h(d.value.task.coordinatorName),1),d.value.task.assignmentCount?(u(),F(T,{key:0},[w(` · `+h(d.value.task.reviewedCount)+`/`+h(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,[W(Ye,{name:t.agentName,avatar:e.agents.find(e=>e.id===t.agentId)?.avatar,size:24,animated:!1},null,8,[`name`,`avatar`]),D(`strong`,null,h(t.title),1),D(`small`,{class:l(t.status)},h(t.status===`complete`?`已复核`:V(q)(t.status)),3)]),D(`p`,tY,h(t.agentName),1),t.brief?(u(),F(`p`,nY,h(t.brief),1)):z(``,!0),t.result?(u(),F(`p`,rY,[n[21]||=D(`span`,null,`执行结果`,-1),w(h(t.result),1)])):z(``,!0),t.review?(u(),F(`p`,iY,[n[22]||=D(`span`,null,`复核意见`,-1),w(h(t.review),1)])):z(``,!0)]))),128)),d.value.task.acceptanceCriteria.length?(u(),F(`div`,aY,[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,h(d.value.task.checks?.some(e=>e.criterion===t&&e.passed)?`已验收`:`待验收`),1),w(h(e),1),d.value.task.checks?.find(e=>e.criterion===t)?.evidence?(u(),F(`span`,oY,h(d.value.task.checks.find(e=>e.criterion===t)?.evidence),1)):z(``,!0)]))),128))])):z(``,!0),d.value.task.result?(u(),F(`p`,sY,h(d.value.task.result),1)):z(``,!0),d.value.task.artifacts?.length?(u(),F(`div`,cY,[(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`},[W(Y,{name:`file`,size:15}),w(h(e.name),1)],8,lY))),128))])):z(``,!0)])):(u(),F(`p`,uY,h(d.value.content||`这条记录没有附加内容。`),1)),d.value.responseState===`uncertain`||d.value.responseState===`sending`?(u(),F(`p`,dY,` 答复尚未确认,请核对原请求;这里不会重复投递。 `)):z(``,!0),d.value.pending?(u(),F(`div`,fY,[D(`button`,{disabled:A.value||e.connection!==`online`,onClick:n[8]||=e=>re(`deny`)},` 拒绝`,8,pY),D(`button`,{disabled:A.value||e.connection!==`online`,onClick:n[9]||=e=>re(`once`)},` 仅允许本次 `,8,mY)])):z(``,!0),d.value.pending&&e.connection!==`online`?(u(),F(`p`,hY,` 恢复连接后才能答复。 `)):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,c.value=`activity`,v.value=!0}},` 查看 Bot 记忆 `)):z(``,!0)])):v.value?(u(),F(`div`,gY,[D(`button`,{class:`back`,onClick:n[12]||=e=>J(`activity`)},[W(Y,{name:`chevron-left`}),n[24]||=w(`返回活动 `,-1)]),W(ae,{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=>y.value=e},null,8,[`selected-agent-id`,`agents`,`conversations`])])):c.value===`activity`||c.value===`review`?(u(),F(`div`,_Y,[C.value?(u(),F(`p`,vY,`正在读取记录…`)):z(``,!0),(u(!0),F(T,null,p(B.value,e=>(u(),F(`section`,{key:e.title},[D(`h3`,null,h(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:l([`record-icon`,e.kind])},[W(Y,{name:K(e),size:22},null,8,[`name`])],2),D(`span`,bY,[D(`strong`,null,h(e.title),1),D(`span`,null,h(e.summary),1),e.task?(u(),F(`span`,xY,`负责人 `+h(e.task.coordinatorName),1)):z(``,!0),e.at?(u(),F(`small`,SY,h(new Date(e.at).toLocaleTimeString(`zh-CN`,{hour:`2-digit`,minute:`2-digit`})),1)):z(``,!0)]),W(Y,{name:`chevron-down`,class:`record-arrow`,size:16})],8,yY))),128))]))),128)),!C.value&&!E.value&&!B.value.length?(u(),F(`div`,CY,[W(Y,{name:c.value===`review`?`shield`:`history`,size:28},null,8,[`name`]),D(`h3`,null,h(c.value===`review`?`暂无审核请求`:`还没有活动记录`),1),D(`p`,null,h(c.value===`review`?`这个 Bot 的权限请求和处理记录会显示在这里。`:`回复、交付、协作与记忆更新会显示在这里。`),1)])):z(``,!0)])):c.value===`computer`?(u(),k(VJ,{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`])):c.value===`routines`?(u(),k(mt,{key:6,"agent-id":e.agent.id,onEditingChange:n[19]||=e=>s.value=e,home:``,inline:``},null,8,[`agent-id`])):c.value===`files`?(u(),k(kq,{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`,wY,[w(h(E.value)+` `,1),D(`button`,{onClick:H},`重试`)])):z(``,!0)],64))],40,UJ))}}),[[`__scopeId`,`data-v-fe14fe69`]]);function EY(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 DY=[`data-request-id`],OY=[`aria-label`,`aria-expanded`],kY={key:0},AY={key:1},jY={key:0,class:`context-details__usage`},MY={key:1,class:`context-details__usage`},NY={class:`context-bar`,"aria-hidden":`true`},PY={class:`muted`},FY={key:2,class:`context-composition`},IY={class:`context-row`},LY={class:`muted`},RY={class:`context-bar context-bar--small`,"aria-hidden":`true`},zY={key:3,class:`muted`},BY={class:`muted`},VY={class:`muted`},HY={class:`muted`},UY={key:4,class:`muted`},WY={key:5},GY={class:`context-extra`},KY={key:0,class:`muted`},qY={key:1,class:`muted`},JY={key:2,class:`warning`},YY={class:`context-details__footnote`},XY=H(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=U(()=>{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=U(()=>{if(t.snapshot?.kind===`reported-context`&&(!t.agentId||t.snapshot.agentId===t.agentId))return EY(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=U(()=>r.value?.usedTokens??a.value?.usedTokens),d=U(()=>r.value?.limitTokens??a.value?.limitTokens),g=U(()=>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),_=U(()=>r.value?.usedSource===`server-estimate`),v=U(()=>g.value===void 0?c.value===void 0?`待报告`:`已报告`:`${_.value?`约 `:``}${g.value.toFixed(1)}%`),y=U(()=>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=U(()=>Object.entries(b).flatMap(([e,t])=>{let i=r.value?.components?.[e];return n(i)?[{key:e,label:t,tokens:i}]:[]})),C=U(()=>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 R(){M.value=!!A.value?.open,M.value&&L()}function B(e){A.value?.contains(e.target)||I()}function H(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`,B),document.addEventListener(`keydown`,H),window.addEventListener(`resize`,L),window.addEventListener(`scroll`,L,!0),window.visualViewport?.addEventListener(`resize`,L)}),i(()=>{document.removeEventListener(`pointerdown`,B),document.removeEventListener(`keydown`,H),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:l([`context-meter`,{"context-meter--compact":e.compact}]),"aria-label":`上下文详情`,"data-request-id":r.value?.requestId,onToggle:R},[D(`summary`,{"aria-label":`上下文:${v.value}`,title:`最近一次模型请求的上下文用量;点击查看详情`,"aria-expanded":M.value},[W(V(UP),{"aria-hidden":`true`,type:`circle`,percentage:Math.min(100,Math.max(0,g.value??0)),"show-indicator":!1,"stroke-width":12,color:(g.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`,kY,`上下文`)),e.compact?z(``,!0):(u(),F(`strong`,AY,h(v.value),1))],8,OY),M.value?(u(),F(`div`,{key:0,class:`context-pointer`,style:s(P.value),"aria-hidden":`true`},null,4)):z(``,!0),D(`div`,{ref_key:`card`,ref:j,class:l([`context-details`,{"context-details--below":N.value.top!==`auto`&&N.value.top}]),style:s(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)},[W(Y,{name:`close`,size:12})])]),c.value===void 0?(u(),F(`p`,MY,[n[3]||=w(`用量待报告`,-1),e.limitTokens?(u(),F(T,{key:0},[w(` · 配置窗口 `+h(E(e.limitTokens)),1)],64)):z(``,!0)])):(u(),F(`p`,jY,[w(`已用 `+h(_.value?`约 `:``)+h(E(c.value)),1),d.value?(u(),F(T,{key:0},[w(` / `+h(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`,NY,[D(`i`,{style:s({width:k(c.value??0)})},null,4)]),D(`p`,PY,h(g.value===void 0?`上限未知`:`${_.value?`约 `:``}占用 ${g.value.toFixed(1)}%`)+` · 最近一次模型请求`,1),n[7]||=D(`p`,{class:`muted`},`占用构成 · 粗估`,-1),C.value?(u(),F(`div`,FY,[(u(!0),F(T,null,p(S.value,(e,t)=>(u(),F(`div`,{key:e.key},[D(`div`,IY,[D(`span`,null,h(e.label),1),D(`span`,LY,h(E(e.tokens)),1)]),D(`div`,RY,[D(`i`,{style:s({width:k(e.tokens),background:x[t%x.length]})},null,4)])]))),128))])):(u(),F(`p`,zY,`本次未报告分项构成`)),D(`p`,BY,h(y.value)+` · 分项粗估`,1),D(`p`,VY,[w(`有效上限 `+h(d.value?E(d.value):`未报告`),1),r.value?(u(),F(T,{key:0},[w(`(`+h(r.value.limitSource===`provider-model`?`模型窗口`:`本地预算`)+`)`,1)],64)):z(``,!0)]),D(`p`,HY,`模型窗口 `+h(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`,UY,[w(h(r.value?.model??a.value?.model),1),r.value?.provider||a.value?.provider?(u(),F(T,{key:0},[w(` · `+h(r.value?.provider??a.value?.provider),1)],64)):z(``,!0)])):z(``,!0),r.value?.reasoningEffort?(u(),F(`p`,WY,`推理强度 · `+h(V(Xr)[r.value.reasoningEffort]??r.value.reasoningEffort),1)):z(``,!0),D(`details`,GY,[n[5]||=D(`summary`,null,`来源与压缩详情`,-1),n[6]||=D(`p`,{class:`muted`},`组成均为服务端粗估,不能当作提供方实际分项用量。`,-1),r.value||!a.value&&e.nextBudget?(u(),F(`p`,KY,[w(`本地预算 `+h(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`,qY,`已裁剪 `+h(r.value.omittedTurns)+` 个较早回合,压缩摘要涵盖前 `+h(r.value.checkpointThrough)+` 条记录。`,1)):z(``,!0),(g.value??0)>100?(u(),F(`p`,JY,`已报告输入超过有效预算。`)):z(``,!0),D(`p`,YY,[n[4]||=w(`单次输入,非累计用量`,-1),r.value?.observedAt?(u(),F(T,{key:0},[w(` · `+h(new Date(r.value.observedAt).toLocaleTimeString()),1)],64)):z(``,!0)])])],6)],42,DY))}}),[[`__scopeId`,`data-v-147b85a1`]]),ZY=[`disabled`,`title`],QY={key:1,class:`model-control__effort`},$Y={key:0,class:`model-controls__reasoning`},eX=[`disabled`,`title`,`aria-label`,`aria-expanded`],tX={key:0,class:`reasoning-menu`,role:`dialog`,"aria-label":`推理强度`},nX={class:`reasoning-menu__options`,role:`group`,"aria-label":`推理档位`},rX=[`aria-pressed`,`disabled`,`onClick`],iX={key:0},aX=[`aria-checked`,`aria-label`,`disabled`],oX=H(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(),s=O(!1),c=U(()=>d.value.replace(/^继承 · /,``).replace(/^提供方默认.*$/,`默认`)),d=U(()=>n.reasoningOptions.find(e=>e.id===n.reasoningValue)?.label||n.reasoningLabel);function g(e=!1){s.value=!1,e&&o.value?.focus()}function _(e){a.value?.contains(e.target)||g()}function v(e){r(`reasoningChange`,e),g(!0)}return f(()=>n.disabled,e=>{e&&g()}),m(()=>document.addEventListener(`pointerdown`,_)),i(()=>document.removeEventListener(`pointerdown`,_)),(t,n)=>(u(),F(`div`,{ref_key:`root`,ref:a,class:l([`model-controls`,{"model-controls--compact":e.compact,"model-controls--combined":e.combined}]),onKeydown:n[4]||=Ie(Z(e=>g(!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=>{g(),r(`modelClick`,e.currentTarget)}},[e.combined&&e.fastMode&&!e.fastDisabled?(u(),k(Y,{key:0,name:`bolt`,size:13})):z(``,!0),D(`span`,null,h(e.modelLabel),1),e.combined&&!e.compact&&!e.reasoningDisabled?(u(),F(`small`,QY,h(c.value),1)):z(``,!0),W(Y,{name:`chevron-down`,size:12})],8,ZY),e.combined?z(``,!0):(u(),F(`div`,$Y,[D(`button`,{ref_key:`reasoningTrigger`,ref:o,class:l([`model-control`,{active:s.value}]),type:`button`,disabled:e.disabled||e.reasoningDisabled||!e.reasoningOptions.length,title:`推理强度:${d.value}`,"aria-label":`推理强度:${d.value}`,"aria-expanded":s.value,"aria-haspopup":`dialog`,onClick:n[1]||=e=>s.value=!s.value},[W(Y,{name:`brain`,size:17}),D(`span`,null,`推理 · `+h(c.value),1),W(Y,{name:`chevron-down`,size:14})],10,eX),s.value?(u(),F(`section`,tX,[D(`header`,null,[n[5]||=D(`strong`,null,`推理强度`,-1),D(`button`,{type:`button`,"aria-label":`关闭推理强度`,onClick:n[2]||=e=>g(!0)},[W(Y,{name:`close`,size:16})])]),D(`div`,nX,[(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=>v(t.id)},[D(`span`,null,h(t.label),1),t.id===e.reasoningValue?(u(),k(Y,{key:0,name:`check`,size:16})):z(``,!0)],8,rX))),128))]),n[6]||=D(`p`,null,`更高的强度用于深入分析复杂问题。`,-1),e.scope?(u(),F(`p`,iX,h(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)},[W(Y,{name:`bolt`,size:17}),D(`span`,null,h(e.fastLabel),1),D(`span`,{class:l([`model-control__switch`,{on:e.fastMode}]),"aria-hidden":`true`},[...n[7]||=[D(`span`,null,null,-1)]],2)],8,aX)):z(``,!0)],8,[`to`,`disabled`]))],34))}}),[[`__scopeId`,`data-v-7f4990ce`]]),sX=[`aria-label`,`aria-labelledby`,`aria-busy`],cX={class:`model-dialog__header`},lX=[`disabled`],uX={class:`model-dialog__search`},dX=[`placeholder`,`disabled`],fX={class:`model-dialog__columns`},pX={class:`model-dialog__body`},mX={class:`model-dialog__list`},hX=[`disabled`,`aria-label`,`aria-pressed`,`onClick`],gX={class:`model-dialog__item-label`},_X={class:`model-dialog__flat-name`},vX={class:`model-dialog__provider`},yX={class:`model-dialog__states`},bX={key:0},xX={key:1,class:`sr-only`},SX=[`disabled`,`aria-label`,`onClick`],CX=[`aria-expanded`,`disabled`,`onClick`],wX={class:`model-dialog__items`},TX=[`disabled`,`onClick`],EX={class:`model-dialog__item-label`},DX=[`title`],OX={key:0,class:`model-dialog__badge`},kX={key:1,class:`model-dialog__badge model-dialog__badge--quiet`},AX={key:2,class:`model-dialog__empty`},jX={key:0,class:`model-dialog__tuning`},MX={key:0,class:`model-dialog__status`,role:`status`},NX=H(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),g=O({});function _(){if(!n.open)return;if(!n.anchor){g.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;g.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 y(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=U(()=>{let e=a.value.trim().toLocaleLowerCase();return n.options.filter(t=>`${t.name} ${t.id} ${t.providerName||t.provider}`.toLocaleLowerCase().includes(e))}),j=U(()=>{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(),_(),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(),_(),b.value?.focus()}),m(()=>{window.addEventListener(`keydown`,P),window.addEventListener(`resize`,_),window.addEventListener(`scroll`,_,!0),document.addEventListener(`pointerdown`,y),n.open&&(_(),b.value?.focus())}),i(()=>{window.removeEventListener(`keydown`,P),window.removeEventListener(`resize`,_),window.removeEventListener(`scroll`,_,!0),document.removeEventListener(`pointerdown`,y)}),(t,n)=>(u(),k(L,{to:`body`},[W(rt,{name:`model-dialog-fade`},{default:S(()=>[e.open?(u(),F(`div`,{key:0,class:l([`model-dialog-layer`,{"model-dialog-layer--anchored":e.anchor}]),role:`presentation`,onMousedown:n[2]||=Z(e=>M(),[`self`])},[D(`section`,{ref_key:`dialog`,ref:c,class:l([`model-dialog`,{"model-dialog--tuning":e.tuning,"model-dialog--editing":e.editing}]),style:s(g.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`,cX,[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()},[W(Y,{name:`close`,size:15})],8,lX)]),D(`label`,uX,[W(Y,{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,dX),[[Q,a.value]])]),D(`div`,fX,[D(`div`,pX,[D(`div`,mX,[e.tuning?(u(!0),F(T,{key:0},p(A.value,t=>(u(),F(`div`,{key:w(t),class:l([`model-dialog__row`,{"model-dialog__row--active":w(t)===e.selectedId}])},[D(`button`,{class:l([`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`,gX,[D(`span`,_X,h(t.name),1),D(`small`,vX,h(t.providerName||E(t.provider)),1)]),D(`span`,yX,[t.isDefault?(u(),F(`span`,bX,`默认`)):z(``,!0),w(t)===e.selectedId?(u(),F(`span`,xX,`当前`)):z(``,!0),w(t)===e.selectedId?(u(),k(Y,{key:2,name:`check`,size:16})):z(``,!0)])],10,hX),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)},[W(Y,{name:`dots`,size:18})],8,SX)],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)},[W(Y,{class:l([`model-dialog__chevron`,{collapsed:x.value[t.provider]}]),name:`chevron-down`,size:13},null,8,[`class`]),D(`strong`,null,h(t.label),1),D(`span`,null,h(t.models.length),1)],8,CX),d(D(`div`,wX,[(u(!0),F(T,null,p(t.models,t=>(u(),F(`button`,{key:w(t),class:l([`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`,EX,[D(`strong`,null,h(t.name||t.id),1),t.hint||t.name&&t.name!==t.id?(u(),F(`small`,{key:0,title:t.hint},h(t.hint||t.id),9,DX)):z(``,!0)]),t.isDefault?(u(),F(`span`,OX,`默认`)):z(``,!0),t.supportsReasoning?(u(),F(`span`,kX,`推理`)):z(``,!0),w(t)===e.selectedId?(u(),k(Y,{key:2,class:`model-dialog__check`,name:`check`,size:15})):z(``,!0)],10,TX))),128))],512),[[tt,!x.value[t.provider]]])]))),128)),e.tuning?v(t.$slots,`footer`,{},void 0,!0,1):z(``,!0),(e.tuning?!A.value.length:!j.value.length)?(u(),F(`p`,AX,`没有匹配的模型`)):z(``,!0)])]),e.tuning&&e.editing?(u(),F(`aside`,jX,[v(t.$slots,`tuning`,{},void 0,!0)])):z(``,!0)]),e.busy?(u(),F(`p`,MX,`正在保存…`)):z(``,!0)],14,sX)],34)):z(``,!0)]),_:3})]))}}),[[`__scopeId`,`data-v-654f5e6c`]]);function PX(e,t,n){let r=t===`auto`,i=e.models.find(e=>e.provider===t&&e.model===n),a=e.settings??Yr(),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 FX(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??Yr(),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 IX(e,t,n){let r=e.settings??Yr();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 LX=[`aria-busy`,`title`],RX=[`role`],zX=[`disabled`],BX=[`disabled`],VX={key:0,class:`bot-model-tuning`,"aria-label":`模型参数`},HX=[`disabled`],UX=[`disabled`],WX={class:`bot-model-tuning__row`},GX=[`aria-checked`,`disabled`],KX={key:0},qX={class:`bot-model-tuning__row`},JX=[`aria-expanded`,`disabled`],YX={key:1,class:`bot-model-tuning__efforts`,role:`group`,"aria-label":`推理强度选项`},XX=[`aria-pressed`,`onClick`],ZX={class:`bot-model-tuning__check`},QX={key:2},$X={class:`bot-model-tuning__scope`},eZ={key:3,role:`alert`,class:`error`},tZ={class:`sr-only`},nZ=H(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(),s=O(Yr()),c=O(!1),d=O(!1),g=O(``),_=O(``),v=0,y;function b(e=``){y!==void 0&&clearTimeout(y),_.value=e,y=e?setTimeout(()=>{_.value=``,y=void 0},3e3):void 0}let x=O(!1),C=O(null),E=(e,t)=>JSON.stringify([e,t]);U(()=>s.value.provider&&s.value.model?E(s.value.provider,s.value.model):``);let A=U(()=>Jr(s.value)),j=U(()=>A.value||!s.value.provider&&!!a.value?.auto?.enabled),M=U(()=>ti(a.value?.auto?.backend)),N=U(()=>A.value?void 0:a.value?.models.find(e=>e.provider===(s.value.provider??a.value?.defaults.provider)&&e.model===(s.value.model??a.value?.defaults.model))),P=U(()=>{if(j.value)return`Auto · ${M.value}`;let e=(N.value?.name??(A.value||!s.value.model?c.value?`正在读取…`:a.value?.defaults.model:s.value.model))?.trim()||`选择模型`;return n.compact?e.split(` · `).at(-1)?.trim()||`选择模型`:e}),I=U(()=>N.value?.defaultReasoningEffort??a.value?.defaults.reasoningEffort??`default`),R=e=>e==="default"?`提供方默认(未声明实际强度)`:Xr[e]??e,B=U(()=>!j.value&&!!N.value?.reasoningKnown&&!!N.value.reasoningEfforts.length),H=U(()=>c.value||d.value||n.disabled||!a.value);async function G(){let e=++v,t=n.agent.id;c.value=!0,d.value=!1,g.value=``,b(),a.value=void 0;try{let n=await X(`/api/app/agents/${t}/model-options`);if(e!==v)return;if(n.version!==1)throw Error(`模型目录版本不兼容。`);a.value=n,s.value={...Yr(),...n.settings}}catch(t){e===v&&(g.value=t instanceof Error?t.message:`模型配置读取失败`)}finally{e===v&&(c.value=!1)}}async function K(e){if(H.value||!a.value)return;let t=v,i=n.agent.id,o={...s.value},c=JSON.parse(JSON.stringify({modelSettings:{...e},expectedRevision:a.value.revision}));d.value=!0,g.value=``,b();try{let e=await X(`/api/app/agents/${i}`,{method:`PATCH`,body:c});if(t!==v)return;if(e.confirmationRequired){if(!window.confirm(e.confirmationMessage||`确认切换模型?`)){b(`已取消,保留原设置。`);return}if(!e.confirmationTarget)throw Error(`模型确认无效,请重新读取。`);if(e=await X(`/api/app/agents/${i}`,{method:`PATCH`,body:{...c,confirmedModel:e.confirmationTarget}}),t!==v)return}if(!e.agent)throw Error(`设置尚未保存,请重新读取。`);if(n.agent.revision>e.agent.revision){b(`其他端已更新,正在重新读取。`);return}return s.value={...Yr(),...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===v&&(s.value=o,g.value=e instanceof Error?e.message:`保存失败,保留原设置。`)}finally{t===v&&(d.value=!1)}}let ee=U(()=>`下一轮生效;仅此 Bot,适用于它的所有会话。${n.running?`当前运行保持原设置。`:``}`),te=U(()=>Qr(a.value)),q=U(()=>{let e=te.value.find(e=>e.isCurrent);return e?`${e.provider}:${e.id}`:``}),J=O(!1),ne=O(null);f(J,async e=>{!e&&se.value&&(await o(),ne.value?.focus())});let re=U(()=>j.value?[]:[{id:``,label:`继承 · ${R(I.value)}`},...(N.value?.reasoningEfforts??[]).map(e=>({id:e,label:R(e)}))]),ie=U(()=>j.value?`normal`:s.value.fastMode??a.value?.defaults.fastMode??`normal`),ae=U(()=>!j.value&&!!N.value?.fastModes.includes(`fast`)&&!!N.value?.fastModes.includes(`normal`));async function oe(e){if(!a.value)return;let t=e===`inherit:default`?{provider:`inherit`,id:`default`}:te.value.find(t=>`${t.provider}:${t.id}`===e);if(t)try{await K(IX(a.value,t.provider===`inherit`?void 0:t.provider,t.provider===`inherit`?void 0:t.id))&&(x.value=!1,se.value=void 0)}catch(e){g.value=e instanceof Error?e.message:String(e)}}let se=O(),ce=U(()=>te.value.find(e=>e.provider===se.value?.provider&&e.id===se.value?.model)),le=U(()=>a.value?.models.find(e=>e.provider===se.value?.provider&&e.model===se.value?.model)),ue=U(()=>!!le.value?.fastModes.includes(`normal`)&&!!le.value?.fastModes.includes(`fast`)),de=U(()=>se.value?.fastMode??a.value?.defaults.fastMode??`normal`),fe=U(()=>!!le.value?.reasoningKnown&&!!le.value.reasoningEfforts.length),pe=U(()=>[{id:``,label:`跟随默认`},...(le.value?.reasoningEfforts??[]).map(e=>({id:e,label:R(e)}))]);function me(e){let t=te.value.find(t=>`${t.provider}:${t.id}`===e);!t||!a.value||H.value||(J.value=!1,se.value=PX(a.value,t.provider===`inherit`?a.value.defaults.provider:t.provider,t.provider===`inherit`?a.value.defaults.model:t.id))}function he(){se.value=void 0,J.value=!1}async function ge(){if(!(!se.value||!a.value)){if(se.value.provider===`auto`){he();return}try{await K(FX(a.value,se.value))&&he()}catch(e){g.value=e instanceof Error?e.message:String(e)}}}function _e(e){if(e!==`escape`){he(),x.value=!1;return}if(J.value){J.value=!1;return}if(se.value){he();return}x.value=!1}function ve(e){K({...s.value,reasoningEffort:e||null})}function ye(e){ae.value&&K({...s.value,fastMode:e?`fast`:`normal`})}function be(e){C.value=e,he(),x.value=!0,G()}return f(()=>[n.agent.revision,d.value],([e])=>{!d.value&&a.value&&e>a.value.revision&&G()}),f(()=>n.agent.id,()=>{x.value=!1,he(),G()}),m(G),i(()=>{v++,b()}),(t,n)=>(u(),F(`section`,{class:`bot-chat-controls`,"aria-label":`Bot 聊天模型快捷设置`,"aria-busy":c.value||d.value,title:ee.value},[W(oX,{"model-label":P.value,combined:e.compact,compact:e.compact,"fast-target":e.optionsTarget,"reasoning-value":s.value.reasoningEffort??``,"reasoning-label":j.value?`自动 · ${M.value}`:R(s.value.reasoningEffort??I.value),"reasoning-options":re.value,"reasoning-disabled":!B.value,disabled:H.value,"fast-mode":ie.value!==`normal`,"fast-disabled":!ae.value,"fast-label":ie.value===`normal`||ie.value===`fast`?`快速`:V(Zr)[ie.value],scope:ee.value,onModelClick:be,onReasoningChange:ve,onFastModeToggle:ye},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},[W(XY,{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||_.value||g.value?(u(),F(`div`,{key:0,class:l([`bot-control-status`,{error:g.value}]),role:g.value?`alert`:`status`},[D(`span`,null,h(g.value||(d.value?`正在保存…`:_.value)),1),g.value?(u(),F(`button`,{key:0,type:`button`,disabled:c.value||d.value,onClick:G},`重新读取`,8,zX)):z(``,!0)],10,RX)):z(``,!0),W(NX,{open:x.value,anchor:C.value,options:te.value,"selected-id":q.value,busy:d.value,tuning:!0,editing:!!se.value,onClose:_e,onSelect:oe,onEdit:me},{footer:S(()=>[s.value.provider||s.value.model?(u(),F(`button`,{key:0,class:`bot-model-inherit`,type:`button`,disabled:H.value,onClick:n[0]||=e=>oe(`inherit:default`)},`跟随系统默认`,8,BX)):z(``,!0)]),tuning:S(()=>[se.value?(u(),F(`section`,VX,[D(`header`,null,[D(`button`,{type:`button`,"aria-label":`取消模型参数修改`,disabled:d.value,onClick:he},[W(Y,{name:`close`,size:15})],8,HX),D(`div`,null,[D(`strong`,null,h(se.value.model===`auto`?`Auto`:se.value.model),1),D(`small`,null,h(ce.value?.providerName||le.value?.providerName||se.value.provider),1)]),D(`button`,{class:`bot-model-tuning__done`,disabled:H.value,type:`button`,onClick:ge},`完成`,8,UX)]),D(`div`,WX,[n[4]||=D(`span`,null,`快速`,-1),D(`button`,{type:`button`,role:`switch`,"aria-label":`快速`,"aria-checked":de.value===`fast`,disabled:H.value||!ue.value,onClick:n[1]||=e=>se.value.fastMode=de.value===`fast`?`normal`:`fast`},[D(`span`,{class:l([`bot-model-switch`,{on:de.value===`fast`}])},[...n[3]||=[D(`i`,null,null,-1)]],2)],8,GX)]),ue.value?z(``,!0):(u(),F(`p`,KX,h(se.value.provider===`auto`?`由实际模型决定`:`当前连接暂未开放`),1)),D(`div`,qX,[n[5]||=D(`span`,null,`推理强度`,-1),D(`button`,{ref_key:`effortTrigger`,ref:ne,type:`button`,"aria-label":`选择推理强度`,"aria-expanded":J.value,disabled:H.value||!fe.value,onClick:n[2]||=e=>J.value=!J.value},[w(h(se.value.provider===`auto`?`自动`:se.value.reasoningEffort?R(se.value.reasoningEffort):`跟随默认`),1),W(Y,{name:`chevron-down`,size:12})],8,JX)]),J.value?(u(),F(`div`,YX,[(u(!0),F(T,null,p(pe.value,e=>(u(),F(`button`,{key:e.id,type:`button`,"aria-pressed":e.id===(se.value.reasoningEffort??``),onClick:t=>{se.value.reasoningEffort=e.id||null,J.value=!1}},[D(`span`,ZX,[e.id===(se.value.reasoningEffort??``)?(u(),k(Y,{key:0,name:`check`,size:14})):z(``,!0)]),w(h(e.label),1)],8,XX))),128))])):z(``,!0),fe.value?z(``,!0):(u(),F(`p`,QX,h(se.value.provider===`auto`?`${M.value} 自动选择模型和推理强度。`:le.value?.reasoningKnown?`此模型不提供推理强度选择。`:`模型目录未声明推理能力,采用提供方默认。`),1)),D(`p`,$X,h(ee.value)+h(q.value===`${se.value.provider}:${se.value.model}`?``:`选择此模型后使用这些参数。`),1),g.value?(u(),F(`p`,eZ,h(g.value),1)):z(``,!0)])):z(``,!0)]),_:1},8,[`open`,`anchor`,`options`,`selected-id`,`busy`,`editing`]),D(`span`,tZ,h(ee.value)+` `+h(N.value&&!B.value?N.value.reasoningKnown?`此模型不提供推理强度选择。`:`模型目录未声明推理能力,将采用提供方默认。`:``),1)],8,LX))}}),[[`__scopeId`,`data-v-4e1a0ae6`]]),rZ={class:`inspector`,"aria-label":`Inspector 请求查看器`},iZ={class:`inspector-toolbar`},aZ={class:`lenses`,role:`group`,"aria-label":`Inspector 视图`},oZ=[`aria-pressed`],sZ=[`aria-pressed`],cZ=[`disabled`],lZ={key:0,role:`alert`,class:`error`},uZ={key:1,class:`empty`},dZ={class:`summary`},fZ={key:0},pZ=H(E({__name:`WorkspaceInspectorPanel`,props:{conversationId:{},taskId:{},showClose:{type:Boolean}},emits:[`close`],setup(e,{emit:t}){let n=e,r=t,a=O([]),s=O(``),c=O(!1),d=O(`events`),m=O(),g,_=!1,v=0,y=O(!0),b=U(()=>a.value.filter(e=>d.value===`events`?e.direction===`event`:e.direction!==`event`)),x=U(()=>{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=v;c.value=!0;try{let t=await X(`/api/app/conversations/${n.conversationId}/inspector${n.taskId?`?taskId=`+encodeURIComponent(n.taskId):``}`);e===v&&!_&&(a.value=t.entries,s.value=``)}catch(t){e===v&&!_&&(s.value=t instanceof Error?t.message:`无法读取请求记录`)}finally{e===v&&(c.value=!1)}}async function E(){let e=v;document.hidden||await C(),!_&&e===v&&(g=setTimeout(E,3e3))}return f(()=>[n.conversationId,n.taskId],()=>{v++,a.value=[],y.value=!0,clearTimeout(g),E()},{immediate:!0}),f(d,async()=>{y.value=!0,await o(),m.value&&(m.value.scrollTop=0)}),f(x,async()=>{let e=y.value;await o(),e&&m.value&&(m.value.scrollTop=0)}),i(()=>{_=!0,v++,clearTimeout(g)}),(t,n)=>(u(),F(`section`,rZ,[D(`header`,null,[W(Y,{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`)},[W(Y,{name:`close`,size:16})])):z(``,!0)]),D(`div`,iZ,[D(`div`,aZ,[D(`button`,{"aria-pressed":d.value===`events`,onClick:n[1]||=e=>d.value=`events`},`Events`,8,oZ),D(`button`,{"aria-pressed":d.value===`raw`,onClick:n[2]||=e=>d.value=`raw`},`Raw`,8,sZ)]),D(`span`,null,h(c.value&&!a.value.length?`读取中…`:b.value.length+` 条记录`),1),D(`button`,{class:`reload`,"aria-label":`刷新请求记录`,title:`重新读取记录`,disabled:c.value,onClick:C},[W(Y,{name:`refresh`,size:14})],8,cZ)]),D(`div`,{ref_key:`list`,ref:m,class:`inspector-list`,onScroll:n[3]||=e=>y.value=!!m.value&&m.value.scrollTop<40},[s.value?(u(),F(`p`,lZ,h(s.value),1)):!x.value.length&&!c.value?(u(),F(`p`,uZ,h(d.value===`raw`?`此聊天尚未记录网关请求与响应。`:`此聊天尚未产生运行事件。`),1)):z(``,!0),(u(!0),F(T,null,p(x.value,e=>(u(),F(`details`,{key:e.id,class:l([`inspector-row`,e.tone])},[D(`summary`,null,[W(Y,{class:`chevron`,name:`chevron-left`,size:12}),D(`time`,null,h(S(e.at)),1),D(`span`,{class:l([`tag`,{native:d.value===`raw`}])},[w(h(e.tag),1),e.count>1?(u(),F(T,{key:0},[w(` ×`+h(e.count),1)],64)):z(``,!0)],2),D(`span`,dZ,h(e.summary),1),e.duration===void 0?z(``,!0):(u(),F(`small`,fZ,h(e.duration)+`ms`,1))]),D(`pre`,null,h(JSON.stringify(e.count===1?e.data[0]:e.data,null,2)),1)],2))),128))],544)]))}}),[[`__scopeId`,`data-v-8c8ae801`]]),mZ={class:`bot-panel`,"aria-label":`Inspector 侧栏`},hZ=H(E({__name:`WorkspaceBotPanel`,props:{conversationId:{},taskId:{}},emits:[`close`],setup(e,{emit:t}){let n=t;return(t,r)=>(u(),F(`aside`,mZ,[W(pZ,{"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`]]),gZ={class:`local-vm-workspace`,"aria-label":`双桌面工作区`},_Z=[`disabled`],vZ={key:0,role:`alert`},yZ={class:`panes`},bZ=[`value`,`disabled`,`aria-label`,`onChange`],xZ=[`value`,`disabled`],SZ={key:1,class:`empty`},CZ=H(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=[],s=O(!1),c=O(``),d=O(),f=U(()=>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 g(e){if(!s.value){s.value=!0,c.value=``;try{await m(),await o[e]?.take(),o[e]?.hasControl()&&(d.value=e)}catch(e){c.value=e instanceof Error?e.message:`切换控制失败`}finally{s.value=!1}}}async function _(e,t){if(!s.value){s.value=!0,c.value=``;try{await m(),a.value[e]=t}catch(e){c.value=String(e)}finally{s.value=!1}}}async function v(){if(s.value)return!1;s.value=!0;try{return await m(),i(`close`),!0}catch(e){return c.value=String(e),!1}finally{s.value=!1}}return t({close:v}),(e,t)=>(u(),F(`main`,gZ,[D(`header`,null,[t[0]||=D(`div`,null,[D(`strong`,null,`本地虚拟机 · 双桌面`),D(`p`,null,`同时查看两个机器人的桌面,每次只控制其中一台。`)],-1),D(`button`,{disabled:s.value,onClick:v},`交还并关闭`,8,_Z)]),c.value?(u(),F(`p`,vZ,h(c.value),1)):z(``,!0),D(`div`,yZ,[(u(!0),F(T,null,p(a.value,(e,n)=>(u(),F(`section`,{key:n,class:l([`pane`,{controlled:d.value===n}])},[D(`label`,null,[w(`桌面 `+h(n+1),1),D(`select`,{value:a.value[n],disabled:s.value,"aria-label":`选择桌面 ${n+1}`,onChange:e=>_(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},h(e.name),9,xZ))),128))],40,bZ)]),a.value[n]&&f.value.some(e=>e.id===a.value[n])?(u(),k(gt,{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=>g(n)},null,8,[`agents`,`onControlRequest`])):(u(),F(`p`,SZ,`选择另一位机器人。打开工作区不会创建或启动虚拟机。`))],2))),128))])]))}}),[[`__scopeId`,`data-v-3c7b5891`]]),wZ={class:`task-plan__header`},TZ=[`aria-expanded`,`aria-controls`],EZ={class:`task-plan__icon`},DZ={class:`task-plan__heading`},OZ={key:0,class:`task-plan__count`},kZ={class:`task-plan__actions`},AZ=[`id`,`onKeydown`],jZ=[`aria-valuenow`],MZ={key:1,class:`task-plan__steps`,"aria-label":`任务步骤`},NZ={key:2,class:`task-plan__result`},PZ={class:`result result--summary`},FZ=[`open`],IZ={class:`plan-details`},LZ={key:0,class:`objective`},RZ={key:1,class:`result`},zZ={key:2},BZ={key:0,class:`result`},VZ={key:1},HZ=[`disabled`],UZ={key:0,class:`criteria-error`,role:`alert`},WZ={class:`criteria-actions`},GZ=[`disabled`],KZ=[`disabled`],qZ={key:0,class:`criteria`},JZ={key:0},YZ=H(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=U(()=>n.assignments.filter(e=>e.status===`complete`).length),a=U(()=>n.assignments.length?Math.round(i.value/n.assignments.length*100):n.goal?.status===`complete`?100:0),s=U(()=>!!n.saveCriteria&&!!n.goal&&[`running`,`review`,`waiting`].includes(n.goal.status)),c=O(!!n.embedded),m=x(),g=O(!1),_=O(!1),v=O(``),y=O(``),b=O(),S=O(),C=O();async function E(){c.value=!0,await o(),C.value?.scrollIntoView?.({block:`nearest`})}async function A(){_.value||(c.value=!1,await o(),C.value?.focus())}t({open:E});let j=1;f(()=>n.goal?.id??n.assignments[0]?.goalId??``,()=>{c.value=!!n.embedded,g.value=!1,y.value=``});async function M(){n.goal&&(v.value=n.goal.acceptanceCriteria.join(`
|
|
248
|
+
`)){let e=PK(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 KK(e,t=!1){let n=WK(e);return t?n:GK(n)}var qK={key:0,class:`plain-text`},JK=[`innerHTML`],YK={key:1,class:`plain-text`},XK=[`innerHTML`],ZK=H(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),s=O(``),c=O(n.content),d;function _(){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(c.value)||!c.value?(_(),c.value=e):d===void 0&&(d=setTimeout(()=>{d=void 0,c.value=n.content},n.streamIntervalMs))}),i(_);let v=new Map,y=0;function b(e,t){let n=`${t}\0${e}`,r=v.get(n);if(r!==void 0)return r;let i=t&&xK.getLanguage(t)?xK.highlight(e,{language:t,ignoreIllegals:!0}).value:x(e);if(n.length+i.length<=256e3)for(v.set(n,i),y+=n.length+i.length;v.size>32||y>512e3;){let e=v.keys().next().value;y-=e.length+v.get(e).length,v.delete(e)}return i}function x(e){return e.replace(/&/g,`&`).replace(/</g,`<`).replace(/>/g,`>`).replace(/"/g,`"`)}let S=new nV({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=>!!uV(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=uV(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?uV(s,n.fileProfile):void 0;return c&&/\.[^/]+$/.test(sV(s)??``)&&o.attrSet(`href`,c),o.attrSet(`target`,`_blank`),o.attrSet(`rel`,`noopener noreferrer`),E(e,t,r,i,a)};let D=U(()=>{let e=n.legacyMedia?wV(c.value||``,n.streaming):c.value||``;return e=KK(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=wh(window);M.setConfig(j);function N(e){let t=M.sanitize(A(e));if(!fe())return t;let n=document.createElement(`template`);n.innerHTML=t;for(let e of n.content.querySelectorAll(`img`)){let t=e.getAttribute(`src`)||``;zH(t)&&(e.dataset.remoteSrc=t,e.removeAttribute(`src`))}return n.innerHTML}let P=U(()=>{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=U(()=>{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(`data-remote-src`)||o?.getAttribute(`src`)||s.getAttribute(`href`),n=r.find(t=>t.url&&I(t.url)===I(e)),l=n?.name||(o?o.alt||`图片`:H(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?wV(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}`;s.value=r;let i=await hr(n);e.textContent=i?`已复制`:`复制失败`,e.setAttribute(`aria-label`,i?`代码已复制`:`复制代码失败`),window.setTimeout(()=>{s.value!==r||!e.isConnected||(s.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=sV(e.searchParams.get(`path`)||``);if(!(!t||!lV(t)))return{path:t,remote:!1}}function H(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=H(e,n);e.textContent=i,e.setAttribute(`aria-label`,`预览文件 ${i}`),e.addEventListener(`click`,e=>{e.preventDefault(),r(`fileLink`,i,`${t.pathname}${t.search}`)})})}let G=new Map;function K(){for(let e of G.values())e.controller.abort(),e.url&&URL.revokeObjectURL(e.url);G.clear()}m(()=>window.addEventListener(`yaovi-remote-disconnected`,K)),i(()=>{window.removeEventListener(`yaovi-remote-disconnected`,K),K()});function ee(){for(let[e,t]of G)e.isConnected||(t.controller.abort(),t.url&&URL.revokeObjectURL(t.url),G.delete(e));for(let e of a.value?.querySelectorAll(`img[data-remote-src]`)??[]){if(G.has(e))continue;let t={controller:new AbortController};G.set(e,t);let n=e.dataset.remoteSrc;e.setAttribute(`role`,`button`),e.tabIndex=0;let i=()=>r(`fileLink`,e.alt||`图片`,n);e.addEventListener(`click`,i),e.addEventListener(`keydown`,e=>{(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),i())}),BH(n,{signal:t.controller.signal}).then(async n=>{if(!n.ok)throw Error(`图片加载失败`);let r=await n.blob();t.controller.signal.aborted||(t.url=URL.createObjectURL(r),e.src=t.url)}).catch(()=>{t.controller.signal.aborted||(e.alt=(e.alt||`图片`)+`(加载失败)`)})}}function te(){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 BH(t.href,{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 q(){!n.outlinePrefix||!a.value||a.value.querySelectorAll(`h1, h2, h3`).forEach((e,t)=>{e.id=`${n.outlinePrefix}-heading-${t+1}`})}function J(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(),te(),ee(),q()}),g(()=>{R(),W(),te(),ee(),q()}),(t,n)=>(u(),F(T,null,[e.separateMedia?(u(),F(`div`,{key:0,ref_key:`root`,ref:a,class:l([`markdown message-parts`,{"message-parts--streaming":e.streaming}]),onClick:J},[(u(!0),F(T,null,p(L.value,(t,i)=>(u(),F(T,{key:i},[`attachment`in t?(u(),k(MK,{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:l([`message-prose`,{"chat-bubble":e.bubble}])},[t.text===void 0?(u(),F(`div`,{key:1,class:`markdown-block`,innerHTML:t.html},null,8,JK)):(u(),F(`div`,qK,h(t.text),1))],2))],64))),128))],2)):e.plain?(u(),F(`div`,YK,h(e.content),1)):(u(),F(`div`,{key:2,ref_key:`root`,ref:a,class:l([`markdown`,{"markdown--streaming":e.streaming}]),onClick:J},[(u(!0),F(T,null,p(P.value,(e,t)=>(u(),F(`div`,{key:t,class:`markdown-block`,innerHTML:e},null,8,XK))),128))],2)),e.streaming?(u(),k(Y,{key:3,class:`stream-caret`,name:`arrow-up`,size:0})):z(``,!0)],64))}}),[[`__scopeId`,`data-v-2e8d437d`]]),QK={class:`preview-inspector`},$K=[`title`],eq={class:`preview-header-actions`},tq=[`href`],nq=[`src`,`alt`],rq=[`src`],iq=[`src`],aq={key:5,class:`preview-sheet`},oq={key:6,class:`preview-text`},sq={key:0},cq=[`href`],lq={key:8,class:`preview-unavailable`},uq=H(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=U(()=>!!n.item.previewUrl),s=U(()=>[`text`,`code`].includes(n.item.kind)),c=U(()=>n.item.previewUrl||n.item.downloadUrl||``),d=VH(c),m=e=>HH(e,c.value,n.item.name).catch(e=>{S.value=e.message}),g=O(null),_=O(null),v=O([]),y=O(``),b=O(!1),x=O(!1),S=O(``),C=U(()=>n.item.name.split(`.`).at(-1)?.toLocaleLowerCase()||``),w=U(()=>C.value===`docx`||/wordprocessingml/.test(n.item.mimeType||``)),E=U(()=>[`xlsx`,`xls`].includes(C.value)||/spreadsheetml|excel/.test(n.item.mimeType||``)),A=U(()=>n.item.kind===`pdf`||C.value===`pdf`||n.item.mimeType===`application/pdf`),j=0,M,N=new URL(`/assets/pdf.worker.min-CHFwMXne.mjs`,``+import.meta.url).href;function P(){let e=g.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 I(){M?.disconnect(),!(!g.value||typeof ResizeObserver>`u`)&&(M=new ResizeObserver(P),M.observe(g.value))}async function L(){let e=++j;if(M?.disconnect(),M=void 0,g.value?.style.removeProperty(`--docx-preview-scale`),v.value=[],y.value=n.item.textContent||``,b.value=n.item.textContent!==void 0,S.value=``,c.value&&!(!w.value&&!E.value&&!s.value&&!A.value)){x.value=!0;try{let t=await BH(c.value,{credentials:`same-origin`});if(!t.ok)throw Error(`预览读取失败(${t.status})`);let n=await t.blob();if(e!==j)return;if(A.value){let t=await nt(()=>import(`./pdf-CNS_Rszb.js`),__vite__mapDeps([18,3,4,1,5]));if(t.GlobalWorkerOptions.workerSrc=N,await o(),!_.value)return;_.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!==j||!_.value)return;let n=await r.getPage(t),i=n.getViewport({scale:1}),a=Math.min(1.45,Math.max(.55,(_.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),_.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(w.value){let{renderAsync:e}=await nt(async()=>{let{renderAsync:e}=await import(`./docx-preview-DZusoPTe.js`);return{renderAsync:e}},__vite__mapDeps([19,4]));if(await o(),!g.value)return;g.value.replaceChildren(),await e(n,g.value,void 0,{inWrapper:!0,breakPages:!0,ignoreWidth:!1,ignoreHeight:!1}),P(),I()}else if(E.value){let{default:e}=await nt(async()=>{let{default:e}=await import(`./browser-B97PQaMt.js`);return{default:e}},[]);v.value=await e(n)}else s.value&&(b.value||(y.value=await n.text()),b.value=!0)}catch(e){S.value=e instanceof Error?e.message:`无法生成预览`}finally{x.value=!1}}}return f(()=>n.item.id,L,{immediate:!0,flush:`post`}),i(()=>M?.disconnect()),(t,n)=>(u(),F(`div`,QK,[D(`header`,null,[D(`strong`,{title:e.item.name},h(e.item.title||e.item.name),9,$K),D(`div`,eq,[e.item.sourceSessionId?(u(),F(`button`,{key:0,class:`icon-button`,type:`button`,"aria-label":`跳转到来源消息`,title:`跳转到来源消息`,onClick:n[0]||=t=>r(`source`,e.item)},[W(Y,{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:``,onClick:m,"aria-label":`下载`,title:`下载`},[W(Y,{name:`download`,size:16})],8,tq)):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)},[W(Y,{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`)},[W(Y,{name:`close`,size:17})])):z(``,!0)])]),D(`div`,{class:l([`preview-stage`,`preview-stage--${e.item.kind}`])},[e.item.kind===`image`&&a.value?(u(),F(`img`,{key:0,src:V(d).url.value,alt:e.item.name},null,8,nq)):e.item.kind===`video`&&a.value?(u(),F(`video`,{key:1,src:V(d).url.value,controls:``,playsinline:``},null,8,rq)):e.item.kind===`audio`&&a.value?(u(),F(`audio`,{key:2,src:V(d).url.value,controls:``},null,8,iq)):A.value&&a.value?(u(),F(`div`,{key:3,ref_key:`pdfRoot`,ref:_,class:`preview-pdf`},null,512)):w.value?(u(),F(`div`,{key:4,ref_key:`officeRoot`,ref:g,class:`preview-office`},null,512)):E.value&&v.value.length?(u(),F(`div`,aq,[D(`table`,null,[D(`tbody`,null,[(u(!0),F(T,null,p(v.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},h(e),1))),128))]))),128))])])])):s.value&&b.value?(u(),F(`div`,oq,[e.item.kind===`code`?(u(),F(`pre`,sq,h(y.value),1)):(u(),k(ZK,{key:1,content:y.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,[W(Y,{name:`link`,size:27})]),D(`strong`,null,h(e.item.title||e.item.name),1),n[3]||=D(`small`,null,`在新窗口中打开`,-1)],8,cq)):(u(),F(`div`,lq,[D(`span`,null,[W(Y,{name:S.value?`alert`:`file`,size:28},null,8,[`name`])]),D(`strong`,null,h(x.value?`正在生成预览…`:S.value||`此格式暂不支持内嵌预览`),1),D(`p`,null,h(S.value?`仍可下载文件后使用系统应用查看。`:`可下载文件,使用系统应用查看。`),1)]))],2)]))}}),[[`__scopeId`,`data-v-3345fd60`]]),dq=[`aria-label`],fq=H(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=U(()=>{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=U(()=>a.value[o.value]??n.item),c=U(()=>o.value>0),l=U(()=>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`},[W(rt,{name:`preview-modal`},{default:S(()=>[D(`div`,{class:`preview-modal-layer`,onMousedown:n[4]||=Z(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},[W(uq,{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},[W(Y,{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},[W(Y,{class:`media-nav__next-icon`,name:`chevron-left`,size:22})])):z(``,!0)],40,dq)],32)]),_:1})]))}}),[[`__scopeId`,`data-v-b797b8fc`]]),pq=new Set([`apng`,`avif`,`bmp`,`gif`,`heic`,`heif`,`ico`,`jfif`,`jpeg`,`jpg`,`jxl`,`png`,`svg`,`tif`,`tiff`,`webp`]),mq=new Set([`avi`,`m4v`,`mkv`,`mov`,`mp4`,`mpeg`,`mpg`,`webm`]);function hq(e,t,n=`local:${t}`,r){let i=e.split(`.`).at(-1)?.toLocaleLowerCase()||``,a=pq.has(i)?`image`:mq.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 gq(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 _q(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 vq(e){let t=[],n=new Set,r=e=>{if(!e.previewUrl||![`image`,`video`].includes(e.kind))return;let r=gq(e.previewUrl);n.has(r)||(n.add(r),t.push(e))},i=new nV({html:!1}),a=i.validateLink;i.validateLink=e=>!!uV(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(hq(n.name,n.url,`${t.id}:${n.id}`,n.kind))},n=e=>{if(t.role===`user`)return;let n=wV(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=uV(e,t.profile)||e,a=t.attachments?.find(e=>e.url&&gq(e.url)===gq(i));r(hq(a?.name||_q(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 yq={class:`chat-files`,"aria-label":`聊天文件`},bq={class:`files-search`},xq=[`aria-busy`],Sq=[`aria-label`,`onClick`],Cq={class:`attachment-copy`},wq=[`title`],Tq=[`datetime`],Eq={key:0,class:`files-status`,role:`status`},Dq={key:1,class:`files-status`,role:`alert`},Oq={key:2,class:`files-status`},kq=H(E({__name:`BotFilesPanel`,props:{conversationId:{},active:{type:Boolean,default:!0},revision:{}},setup(e){let t=e,n=O(``),r=O([]),a=O(null),s=O(!1),c=O(``),m=O(null),g=0,_,v,y=null;async function b(e=!1){if(!t.conversationId||!t.active)return;_?.abort();let i=++g;_=new AbortController,s.value=!0,c.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 X(`/api/app/conversations/${encodeURIComponent(t.conversationId)}/files?${o}`,{signal:_.signal});if(i!==g)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===g&&(c.value=e instanceof Error?e.message:`暂时无法读取文件`)}finally{i===g&&(s.value=!1)}}f([()=>t.conversationId,()=>t.active,()=>t.revision,()=>n.value.trim()],(e,n)=>{g++,_?.abort(),clearTimeout(v),r.value=[],a.value=null,m.value=null,c.value=``,s.value=!!(t.conversationId&&t.active),s.value&&(n&&e[0]===n[0]&&e[3]!==n[3]?v=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){y=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={...hq(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(),y?.isConnected&&y.focus({preventScroll:!0})}return i(()=>{g++,_?.abort(),clearTimeout(v)}),(e,t)=>(u(),F(`section`,yq,[D(`label`,bq,[W(Y,{name:`search`,size:18}),d(D(`input`,{"onUpdate:modelValue":t[0]||=e=>n.value=e,"aria-label":`搜索文件`,placeholder:`搜索文件`},null,512),[[Q,n.value]]),n.value?(u(),F(`button`,{key:0,type:`button`,"aria-label":`清空搜索`,onClick:t[1]||=e=>n.value=``},[W(Y,{name:`close`,size:16})])):z(``,!0)]),D(`div`,{class:`files-scroll`,"aria-label":`文件列表,按日期从新到旧`,"aria-busy":s.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:l([`attachment-icon`,{spreadsheet:C(e)===`board`,image:C(e)===`image`}])},[W(Y,{name:C(e),size:22},null,8,[`name`])],2),D(`span`,Cq,[D(`strong`,{title:e.name},h(e.name),9,wq),D(`small`,null,[D(`time`,{datetime:new Date(e.sentAt).toISOString()},h(x(e.sentAt)),9,Tq),t[4]||=D(`span`,null,`·`,-1),w(h(S(e.size)),1)])])],8,Sq))),128)),s.value?(u(),F(`p`,Eq,`正在读取文件…`)):c.value?(u(),F(`p`,Dq,[w(h(c.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`,Oq,h(n.value.trim()?`没有找到相关文件`:`暂无文件`),1))],8,xq),m.value?(u(),k(fq,{key:0,item:m.value,"can-add-to-composer":!1,onClose:A},null,8,[`item`])):z(``,!0)]))}}),[[`__scopeId`,`data-v-cde52027`]]),Aq={class:`grok-auth`,"aria-label":`Grok Bot 登录授权`},jq={class:`account-icon`},Mq={"aria-live":`polite`},Nq={key:0,class:`connected`},Pq={key:0,class:`account`},Fq={key:0},Iq={key:1,class:`hint`},Lq={key:2,class:`pending`,role:`status`},Rq={key:3,class:`error`,role:`alert`},zq=[`href`],Bq={class:`actions`},Vq=[`disabled`],Hq=[`disabled`],Uq=[`disabled`],Wq={key:1,class:`hint`},Gq={key:2,class:`hint`},Kq={key:0},qq=[`disabled`],Jq=[`open`],Yq=[`disabled`],Xq=H(E({__name:`GrokAuthPanel`,props:{isAdmin:{type:Boolean}},emits:[`changed`],setup(e,{emit:t}){let n=t,r=O(),a=O(``),o=O(``),s=O(!1),c=O(!0),l=O(!1),d=U(()=>r.value?.attempt?.status===`pending`),f=U(()=>d.value?`等待浏览器授权`:r.value?.status===`reauthorization-required`?`需要重新授权`:r.value?.status===`refreshing`?`正在续期`:r.value?.status===`connected`?`已授权`:`尚未登录`),p=U(()=>{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||s.value)return;v?.abort();let e=new AbortController;v=e;try{let t=await X(`/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||(c.value=!1)}}async function C(e){if(!s.value){v?.abort(),s.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{s.value=!1,c.value=!1}}}async function E(){y??=He(),await C(()=>X(`/api/app/grok-cloud/auth/start`,{method:`POST`,body:{requestId:y}})),d.value&&p.value&&window.open(p.value,`_blank`,`noopener,noreferrer`),d.value||(y=void 0),a.value&&await S()}async function k(){let e=r.value?.attempt?.id;e&&(await C(()=>X(`/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(()=>X(`/api/app/grok-cloud/auth/${e}/poll`,{method:`POST`,body:{}}))}async function j(){await C(()=>X(`/api/app/grok-cloud/auth`,{method:`DELETE`})),y=void 0}async function M(){await C(()=>X(`/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,d.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`,Aq,[D(`header`,null,[D(`span`,jq,[W(Y,{name:`globe`,size:20})]),D(`div`,null,[n[1]||=D(`strong`,null,`Grok Bot`,-1),D(`small`,Mq,h(c.value?`正在检查授权…`:f.value),1)]),r.value?.status===`connected`&&!d.value?(u(),F(`span`,Nq,[W(Y,{name:`check`,size:14}),n[2]||=w(`已连接`,-1)])):z(``,!0)]),r.value?.account?.email||r.value?.account?.name?(u(),F(`p`,Pq,[w(h(r.value.account.name),1),r.value.account.email?(u(),F(`span`,Fq,h(r.value.account.email),1)):z(``,!0)])):z(``,!0),!r.value?.configured&&!d.value?(u(),F(`p`,Iq,`使用 Grok Bot 所属的 Cursor 账号,在浏览器完成登录授权。`)):z(``,!0),d.value?(u(),F(`div`,Lq,[...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`,Rq,h(a.value||o.value||r.value?.attempt?.error||r.value?.error),1)):z(``,!0),d.value?(u(),F(T,{key:4},[p.value?(u(),F(`a`,{key:0,class:`primary`,href:p.value,target:`_blank`,rel:`noopener noreferrer`},[W(Y,{name:`external`,size:14}),n[4]||=w(`在浏览器继续授权`,-1)],8,zq)):z(``,!0),D(`div`,Bq,[D(`button`,{disabled:s.value,onClick:A},`我已完成授权`,8,Vq),D(`button`,{disabled:s.value,onClick:k},`取消授权`,8,Hq)])],64)):(u(),F(T,{key:5},[e.isAdmin?(u(),F(`button`,{key:0,class:`primary`,disabled:s.value||c.value,onClick:E},[W(Y,{name:`external`,size:15}),w(h(r.value?.status===`connected`?`重新授权`:`使用 Cursor 账号登录`),1)],8,Uq)):r.value?.configured?z(``,!0):(u(),F(`p`,Wq,`请由管理员为当前账号完成云端授权。`)),r.value?.configured?(u(),F(`p`,Gq,[w(h(r.value.automaticRefresh?`登录会自动续期,无需重复登录。`:`此连接尚未取得自动续期授权,建议重新登录。`),1),r.value.expiresAt&&r.value.status!==`reauthorization-required`?(u(),F(`span`,Kq,`当前凭据有效期至 `+h(new Date(r.value.expiresAt).toLocaleString(`zh-CN`))+`。`,1)):z(``,!0)])):z(``,!0),r.value?.configured?(u(),F(`button`,{key:3,class:`disconnect`,disabled:s.value,onClick:j},`断开连接`,8,qq)):z(``,!0)],64)),n[7]||=D(`p`,{class:`privacy`},`登录凭据加密保存在当前服务器,供当前账号的机器人使用。`,-1),e.isAdmin&&!d.value?(u(),F(`details`,{key:6,open:l.value,onToggle:n[0]||=e=>l.value=e.target.open},[n[5]||=D(`summary`,null,`兼容旧连接`,-1),n[6]||=D(`p`,{class:`hint`},`仅用于迁移服务器上已有的 Grok Bot 登录;推荐使用上方浏览器授权。`,-1),D(`button`,{disabled:s.value,onClick:M},`导入服务器上的已有登录`,8,Yq)],40,Jq)):z(``,!0)]))}}),[[`__scopeId`,`data-v-65a30394`]]),Zq={class:`panel-body`},Qq={key:0,class:`agent-select`},$q=[`disabled`],eJ=[`value`],tJ={key:1},nJ={class:`screen-caption`},rJ=[`disabled`],iJ={value:``},aJ=[`value`],oJ=[`value`],sJ={key:1},cJ=[`disabled`,`aria-label`],lJ=[`src`,`alt`],uJ={key:1,class:`empty`},dJ={key:2,class:`open-badge`},fJ={key:0,class:`problem`,role:`alert`},pJ={class:`computer-options`},mJ={key:0,class:`managed-browser-option`,"aria-label":`托管浏览器`},hJ={key:0,class:`hint`,role:`status`},gJ=[`value`],_J=[`disabled`,`aria-busy`],vJ=[`disabled`],yJ=[`disabled`],bJ={key:1,class:`hint`},xJ={key:1,class:`problem`,role:`alert`,"aria-label":`本地虚拟机状态`},SJ=[`disabled`],CJ=[`value`,`disabled`],wJ=[`disabled`],TJ={key:0,class:`hint`},EJ=[`value`,`disabled`],DJ={key:0,value:``,disabled:``},OJ=[`value`,`disabled`],kJ={class:`hint`},AJ=[`disabled`],jJ=[`disabled`],MJ=[`disabled`],NJ=[`disabled`],PJ=[`disabled`],FJ={class:`control-state`},IJ={key:8,class:`vm-actions`},LJ=[`disabled`],RJ=[`disabled`],zJ=[`disabled`],BJ={class:`hint`},VJ=H(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(),s=O(),c=O(``),m=O(!1),g=O(!0),_=U(()=>n.agents.find(e=>e.id===a.value)),v=O({vm:!0,cloud:!0,managedBrowser:!1}),y=O(),b=O(!1),x=O(``),S=O(),C=O(!1),E=U(()=>v.value.cloud),A=U(()=>v.value.vm&&!!o.value),j=O(``),M=U(()=>o.value?.desktops?.find(e=>e.id===j.value)),N=U(()=>!!o.value?.enabled&&o.value.desktopId===j.value),P=U(()=>o.value?.fixedCapacity&&!m.value&&!o.value.inUse&&!_.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=U(()=>[v.value.cloud?`云虚拟机`:``,v.value.vm?`本地虚拟机`:``,v.value.managedBrowser?`托管浏览器`:``].filter(Boolean).join(` · `)),L=U(()=>{let e=[];return v.value.cloud&&S.value?.configured&&e.push({key:`cloud`,label:`云虚拟机`,backend:`cloud`}),v.value.vm&&e.push({key:`vm`,label:`本地虚拟机`,backend:`vm`}),v.value.managedBrowser&&e.push({key:`managed-browser`,label:`托管浏览器`,backend:`managed-browser`}),e}),R=O(``),B=U(()=>{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]}),H=U(()=>R.value?L.value.find(e=>e.key===R.value):B.value),G=O(!1),K=U(()=>{let e=H.value;return e?e.backend===`cloud`?S.value?.configured?S.value?.running?`正在连接桌面…`:`打开云端电脑后可查看桌面`:`尚未连接 Grok Bot 账号`:e.backend===`managed-browser`?y.value?.available?y.value.open?`正在读取浏览器画面…`:`浏览器尚未打开,接管后可打开网页`:y.value?.installation?.message||y.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?`请先连接下方的共享桌面`:`未使用电脑`:R.value?`所选电脑已不可用,请重新选择`:`暂无已开放的电脑`}),ee,te=!1,q=0,J=0,ne=0,re=()=>`/api/app/agents/${encodeURIComponent(a.value)}/local-vm`;async function ie(){let e=a.value,t=++ne;try{let n=await X(`/api/app/agents/${encodeURIComponent(e)}/managed-browser`);!te&&e===a.value&&t===ne&&(y.value=n,x.value=``)}catch(n){!te&&e===a.value&&t===ne&&(y.value=void 0,x.value=n instanceof Error?n.message:`无法读取托管浏览器状态`)}}async function ae(){if(!(m.value||b.value)){b.value=!0;try{await ie(),await oe()}finally{b.value=!1}}}async function oe(){if(te||n.active===!1||!a.value||document.hidden||m.value)return;let e=++J,t=a.value,r=H.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`&&!!y.value?.available&&!!y.value?.open;if(!r||!i){s.value=void 0,G.value=!1;return}G.value=!0;try{let n=new URLSearchParams({backend:r.backend});r.host&&n.set(`host`,r.host);let i=await X(`/api/app/agents/${encodeURIComponent(t)}/computer/frame?${n}`);e===J&&!te&&t===a.value&&(s.value=i)}catch{e===J&&!te&&(s.value=void 0)}finally{e===J&&!te&&(G.value=!1)}}f(()=>H.value?.key,()=>{J++,s.value=void 0,oe()},{flush:`sync`});async function se(){if(te||n.active===!1||!a.value||document.hidden||m.value)return;let e=q;try{try{let t=await X(`/api/app/settings/host-tools`);e===q&&!te&&(v.value={vm:t.vm!==!1,cloud:t.cloud!==!1,managedBrowser:t.managedBrowser===!0})}catch{}let t=a.value,[n,r]=await Promise.all([X(`/api/app/agents/${t}/cloud-computer`),v.value.vm?X(re()):Promise.resolve(void 0),v.value.managedBrowser?ie():Promise.resolve(void 0)]);if(e!==q||te||(S.value=n,o.value=r,await oe(),e!==q||te))return;c.value=``}catch(t){e===q&&(c.value=t instanceof Error?t.message:`无法读取电脑画面`)}finally{e===q&&(g.value=!1)}}async function ce(e){let t=``;if(m.value)return!1;m.value=!0,c.value=``;try{await e(),r(`changed`)}catch(e){t=e instanceof Error&&e.message?e.message:`电脑操作未完成`}finally{m.value=!1,await se(),t&&(c.value=t)}return!t}async function le(){if(!P.value)return;let e=a.value,t=j.value;await ce(()=>X(`/api/app/agents/${encodeURIComponent(e)}/local-vm`,{method:`PUT`,body:{enabled:!0,desktopId:t}}))&&a.value===e&&(R.value=`vm`)}async function ue(e,t){let n=_.value;!n||m.value||![`vm`,`cloud`,`managed-browser`].includes(e)||e===`cloud`&&!await ce(()=>X(`/api/app/agents/${encodeURIComponent(n.id)}/cloud-computer/open`,{method:`POST`,body:{}}))||!te&&_.value?.id===n.id&&r(`desktop`,n,e,t)}async function de(){let e=H.value;e&&s.value&&await ue(e.backend,e.host)}function fe(e){e===`recreate`&&!confirm(`重建这台虚拟机?当前桌面程序将关闭,工作文件、软件配置和登录资料会保留。`)||e===`remove`&&!confirm(`移除这台虚拟机实例以切换镜像?工作文件、软件配置和登录资料会保留。`)||ce(()=>X(re()+`/`+e,{method:`POST`,body:{}}))}async function pe(){let e=q;await se(),!te&&e===q&&(ee=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,()=>{q++,J++,ne++,o.value=void 0,j.value=``,S.value=void 0,y.value=void 0,x.value=``,s.value=void 0,c.value=``,g.value=!0,R.value=``,clearTimeout(ee),pe()},{immediate:!0}),f(()=>n.active,e=>{e&&se()}),i(()=>{te=!0,q++,J++,clearTimeout(ee)}),(t,n)=>(u(),F(`aside`,{class:l([`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`)},[W(Y,{name:`close`})])]),D(`div`,Zq,[e.agents.length>1?(u(),F(`label`,Qq,[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},h(e.name),9,eJ))),128))],8,$q),[[Ne,a.value]])])):z(``,!0),_.value?(u(),F(T,{key:2},[D(`div`,nJ,[D(`span`,null,h(_.value.name)+`的电脑`,1),L.value.length>1||R.value?d((u(),F(`select`,{key:0,"onUpdate:modelValue":n[2]||=e=>R.value=e,disabled:m.value,class:`screen-select`,"aria-label":`显示的桌面`},[D(`option`,iJ,`自动`+h(H.value&&!R.value?` · `+H.value.label:``),1),R.value&&!H.value?(u(),F(`option`,{key:0,value:R.value,disabled:``},`所选电脑不可用`,8,aJ)):z(``,!0),(u(!0),F(T,null,p(L.value,e=>(u(),F(`option`,{key:e.key,value:e.key},h(e.label),9,oJ))),128))],8,rJ)),[[Ne,R.value]]):I.value?(u(),F(`small`,sJ,h(H.value?.label||I.value),1)):z(``,!0)]),D(`button`,{class:`preview`,disabled:!s.value||m.value,"aria-label":`打开${H.value?.label||_.value.name}的桌面`,onClick:n[3]||=e=>de()},[s.value?(u(),F(`img`,{key:0,src:`data:image/png;base64,${s.value.data}`,alt:`${H.value?.label||_.value.name}的电脑画面`},null,8,lJ)):(u(),F(`span`,uJ,[W(Y,{name:`monitor`,size:26}),D(`span`,null,h(g.value?`正在检查电脑…`:G.value?`正在读取所选电脑画面…`:K.value),1)])),s.value?(u(),F(`span`,dJ,[W(Y,{name:`external`,size:12}),n[22]||=w(`打开桌面`,-1)])):z(``,!0)],8,cJ),c.value?(u(),F(`p`,fJ,h(c.value),1)):z(``,!0),n[34]||=D(`p`,{class:`hint`},`可查看和接管本地虚拟机、云虚拟机和托管浏览器。设备授权状态在「设置 → 环境与权限 → 本机权限」中查看。`,-1),D(`div`,pJ,[v.value.managedBrowser?(u(),F(`section`,mJ,[n[23]||=D(`strong`,null,`托管浏览器`,-1),n[24]||=D(`p`,null,`网页操作使用独立浏览器。虚拟机的运行和维护状态在下方显示;查看状态不会打开网页。`,-1),y.value?.available?z(``,!0):(u(),F(`p`,hJ,h(x.value||y.value?.installation?.message||y.value?.reason||`执行节点尚未提供浏览器能力,请检查节点配置与连接。`),1)),y.value?.installation?.status===`installing`?(u(),F(`progress`,{key:1,value:y.value.installation.progress,max:`100`,"aria-label":`浏览器准备进度`},null,8,gJ)):z(``,!0),y.value?.available?z(``,!0):(u(),F(`button`,{key:2,type:`button`,disabled:m.value||b.value,"aria-busy":b.value,onClick:ae},h(b.value?`正在检测…`:`重新检测`),9,_J)),D(`button`,{class:`primary`,disabled:m.value||b.value||!V(ht)(y.value),onClick:n[4]||=e=>ue(`managed-browser`)},h(y.value?.installation?.status===`failed`?`重试并接管浏览器`:y.value?.open?`接管浏览器`:`打开并接管浏览器`),9,vJ)])):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`)},h(S.value?.mode===`human`?`打开控制中的桌面`:`接管云虚拟机`),9,yJ)):z(``,!0),D(`button`,{onClick:n[6]||=e=>C.value=!C.value},h(S.value?.configured?`云端连接设置`:`连接 Grok Bot`),1),!e.isAdmin&&!S.value?.configured?(u(),F(`p`,bJ,`请由管理员为当前账号配置 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,h(_.value.temporaryGoalId?`临时助手的电脑由当前任务管理`:o.value.fixedCapacity||o.value.mode===`shared`?`共享虚拟机 · 与其他成员共用桌面和工作文件`:`此机器人的独立虚拟机`),1),o.value.maintenance?(u(),k(Wp,{key:0,state:o.value.maintenance},null,8,[`state`])):z(``,!0),o.value.problem?(u(),F(`p`,xJ,h(o.value.problem),1)):z(``,!0),o.value.fixedCapacity&&!_.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},h(e.name)+h(e.available===!1?` · 不可用`:e.online?e.ready?``:` · 正在启动`:` · 离线`),9,CJ))),128))],8,SJ),[[Ne,j.value]])]),D(`button`,{class:`primary`,"data-testid":`connect-compose-desktop`,disabled:!P.value,onClick:le},h(N.value?`已连接`:`连接所选桌面`),9,wJ),o.value.desktops?.length?z(``,!0):(u(),F(`p`,TJ,`暂无可连接的共享桌面,请检查本地虚拟机设置。`))],64)):z(``,!0),!o.value.fixedCapacity&&o.value.images?.length&&!_.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(()=>V(X)(re()+`/image`,{method:`PUT`,body:{imageKey:e.target.value}}))},[o.value.imageKey?z(``,!0):(u(),F(`option`,DJ,h(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},h(e.name)+h(e.ready?``:` · 未准备`),9,OJ))),128))],40,EJ)]),D(`p`,kJ,h(o.value.mode===`shared`?`同一共享桌面只能使用一个镜像,选择会对所有共享成员生效。`:`此桌面的镜像、文件和浏览器资料与其他独立桌面分开。`)+h(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,AJ)):!o.value.fixedCapacity&&o.value.container===`missing`&&!_.value.temporaryGoalId?(u(),F(`button`,{key:5,class:`primary`,disabled:m.value,onClick:n[10]||=e=>fe(`create`)},`创建 `+h(_.value.name)+` 的虚拟机`,9,jJ)):!o.value.fixedCapacity&&o.value.container===`stopped`&&!_.value.temporaryGoalId?(u(),F(`button`,{key:6,class:`primary`,disabled:m.value,onClick:n[11]||=e=>fe(`start`)},`启动虚拟机`,8,MJ)):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,NJ),o.value.mode===`per-bot`?(u(),F(`button`,{key:0,disabled:m.value,onClick:n[13]||=e=>r(`workspace`,_.value)},[W(Y,{name:`panel`}),n[30]||=w(`打开双桌面`,-1)],8,PJ)):z(``,!0),D(`p`,FJ,h(o.value.controlMode===`human`?`你或其他操作者正在控制电脑`:o.value.inUse?`机器人正在操作`:`仅查看 · 虚拟机空闲`),1)],64)):z(``,!0),!o.value.fixedCapacity&&o.value.container!==`missing`&&!_.value.temporaryGoalId?(u(),F(`div`,IJ,[D(`button`,{disabled:m.value||o.value.inUse,onClick:n[14]||=e=>fe(`stop`)},`停止虚拟机`,8,LJ),D(`button`,{disabled:m.value||o.value.inUse,onClick:n[15]||=e=>fe(`recreate`)},`重建虚拟机`,8,RJ),D(`button`,{disabled:m.value||o.value.inUse,onClick:n[16]||=e=>fe(`remove`)},`移除实例`,8,zJ)])):z(``,!0),D(`p`,BJ,h(o.value.fixedCapacity?`桌面由 Compose 创建,数量固定。这里只连接已有共享桌面;工作目录为 /home/cua/workspace。`:`重建会保留工作文件、软件配置和登录资料。${V(Kp)(o.value.idleStopMinutes)},可在设置中修改。`),1),e.isAdmin?(u(),F(`button`,{key:9,class:`settings-link`,onClick:n[17]||=e=>r(`settings`)},[W(Y,{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},[W(Y,{name:`globe`,size:14}),n[33]||=w(`Grok Bot 云端连接`,-1)])),C.value?(u(),k(Xq,{key:2,"is-admin":e.isAdmin,onChanged:n[19]||=e=>{r(`changed`),se()}},null,8,[`is-admin`])):z(``,!0)],64)):(u(),F(`p`,tJ,`当前聊天没有可用的机器人。`))])],2))}}),[[`__scopeId`,`data-v-ac3d303c`]]);function HJ(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 UJ=[`onKeydown`],WJ={class:`detail-heading`},GJ=[`disabled`],KJ={key:0,class:`home-header`},qJ={role:`status`},JJ={key:1,class:`home-tabs`,"aria-label":`Bot 功能`},YJ=[`aria-pressed`,`onClick`],XJ={key:2,class:`home-content`},ZJ={class:`record-status`},QJ={key:0},$J={key:1,class:`home-task`,"aria-label":`任务详情`},eY={class:`home-task-owner`},tY={class:`home-task-person`},nY={key:0},rY={key:1},iY={key:2},aY={key:0,class:`home-task-criteria`},oY={key:0},sY={key:1,class:`detail-text`},cY={key:2,class:`home-task-artifacts`},lY=[`href`],uY={key:2,class:`detail-text`},dY={key:3,class:`note`},fY={key:4,class:`actions`},pY=[`disabled`],mY=[`disabled`],hY={key:5,class:`note`},gY={key:3,class:`home-content`},_Y={key:4,class:`home-content`},vY={key:0,class:`note`,role:`status`},yY=[`onClick`],bY={class:`record-copy`},xY={key:0,class:`record-task-owner`},SY={key:1},CY={key:1,class:`home-empty`},wY={key:8,class:`home-error`,role:`alert`},TY=H(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`}],s=O(!1),c=O(`activity`),d=O(),g=O(!!r.initialEdit),_=O(r.initialEdit?`overview`:`identity`),v=O(!1),y=O(!1),b=O(),x=O(),S=O(),C=O(!1),E=O(``),A=O(!1),j=!0,M=0,N,P=null,I=U(()=>jV(r.conversations).get(r.agent.id)??`idle`),L=U(()=>({working:`工作中`,waiting:`等待处理`,loading:`同步中`,idle:`空闲`})[I.value]??`状态待确认`),R=U(()=>r.connection===`online`?`${Py(`online`)} · ${L.value}`:Py(r.connection??`syncing`)),B=U(()=>{let e=c.value===`review`?S.value?.reviews??[]:S.value?.activities??[],t=new Map;for(let n of e){let e=c.value===`review`?n.pending?`待处理请求`:`历史记录`:HJ(n.at);t.set(e,[...t.get(e)??[],n])}return[...t].map(([e,t])=>({title:e,rows:t}))});async function H(){let e=++M;C.value=!S.value;try{let t=await X(`/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 G(){await H(),j&&(N=setTimeout(()=>{document.hidden?N=setTimeout(()=>void G(),5e3):G()},5e3))}function K(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 ee(){return(!g.value||b.value?.beforeClose()!==!1)&&(!y.value||window.confirm(`放弃当前记忆未保存的更改?`))&&!A.value}function q(){ee()&&a(`close`)}function J(e){y.value&&!window.confirm(`放弃当前记忆未保存的更改?`)||(y.value=!1,c.value=e,d.value=void 0,v.value=!1)}function ne(e=`identity`){_.value=e,g.value=!0}async function re(e){if(!(!d.value?.pending||A.value||r.connection!==`online`)){A.value=!0,E.value=``;try{await X(`/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 H()}}}function ie(){x.value?.focus()}return f(()=>r.agent.id,()=>{M++,S.value=void 0,d.value=void 0,c.value=`activity`,H()}),m(()=>{P=document.activeElement,ie(),G()}),i(()=>{j=!1,M++,clearTimeout(N),x.value?.contains(document.activeElement)&&P?.isConnected&&P.focus()}),t({beforeClose:ee,markSaved:e=>b.value?.markSaved(e),focus:ie}),(t,n)=>(u(),F(`aside`,{ref_key:`panel`,ref:x,class:`bot-home`,"aria-label":`Bot 主页`,tabindex:`-1`,onKeydown:Ie(Z(q,[`stop`,`prevent`]),[`esc`])},[g.value?(u(),F(T,{key:0},[D(`header`,WJ,[D(`button`,{"aria-label":`返回 Bot 主页`,disabled:e.busy,onClick:n[0]||=e=>b.value?.beforeClose()!==!1&&(g.value=!1)},[W(Y,{name:`chevron-left`}),n[20]||=w(`返回 `,-1)],8,GJ)]),W(Pu,{ref_key:`editor`,ref:b,embedded:``,"initial-page":_.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=>g.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},[s.value?z(``,!0):(u(),F(`header`,KJ,[D(`button`,{class:`home-close`,"aria-label":`关闭 Bot 主页`,onClick:q},[W(Y,{name:`close`,size:21})]),D(`div`,{class:l([`avatar-wrap`,{"has-main-badge":e.agent.id===e.mainBotId}])},[W(Ye,{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=>ne()},[W(Y,{name:`edit`,size:17})])],2),D(`h2`,null,h(e.agent.name),1),D(`p`,qJ,[D(`i`,{class:l({online:e.connection===`online`})},null,2),w(h(R.value),1)])])),s.value?z(``,!0):(u(),F(`nav`,JJ,[(u(),F(T,null,p(o,e=>D(`button`,{key:e.id,"aria-pressed":c.value===e.id,onClick:t=>J(e.id)},[W(Y,{name:e.icon,size:21},null,8,[`name`]),D(`span`,null,h(e.label),1)],8,YJ)),64))])),d.value?(u(),F(`div`,XJ,[D(`button`,{class:`back`,onClick:n[7]||=e=>d.value=void 0},[W(Y,{name:`chevron-left`}),w(`返回`+h(c.value===`review`?`审核`:`活动`),1)]),D(`h3`,null,h(d.value.title),1),D(`p`,ZJ,h(d.value.status),1),d.value.at?(u(),F(`small`,QJ,h(new Date(d.value.at).toLocaleString(`zh-CN`)),1)):z(``,!0),d.value.task?(u(),F(`section`,$J,[D(`p`,eY,[w(`负责人 `+h(d.value.task.coordinatorName),1),d.value.task.assignmentCount?(u(),F(T,{key:0},[w(` · `+h(d.value.task.reviewedCount)+`/`+h(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,[W(Ye,{name:t.agentName,avatar:e.agents.find(e=>e.id===t.agentId)?.avatar,size:24,animated:!1},null,8,[`name`,`avatar`]),D(`strong`,null,h(t.title),1),D(`small`,{class:l(t.status)},h(t.status===`complete`?`已复核`:V(te)(t.status)),3)]),D(`p`,tY,h(t.agentName),1),t.brief?(u(),F(`p`,nY,h(t.brief),1)):z(``,!0),t.result?(u(),F(`p`,rY,[n[21]||=D(`span`,null,`执行结果`,-1),w(h(t.result),1)])):z(``,!0),t.review?(u(),F(`p`,iY,[n[22]||=D(`span`,null,`复核意见`,-1),w(h(t.review),1)])):z(``,!0)]))),128)),d.value.task.acceptanceCriteria.length?(u(),F(`div`,aY,[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,h(d.value.task.checks?.some(e=>e.criterion===t&&e.passed)?`已验收`:`待验收`),1),w(h(e),1),d.value.task.checks?.find(e=>e.criterion===t)?.evidence?(u(),F(`span`,oY,h(d.value.task.checks.find(e=>e.criterion===t)?.evidence),1)):z(``,!0)]))),128))])):z(``,!0),d.value.task.result?(u(),F(`p`,sY,h(d.value.task.result),1)):z(``,!0),d.value.task.artifacts?.length?(u(),F(`div`,cY,[(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`},[W(Y,{name:`file`,size:15}),w(h(e.name),1)],8,lY))),128))])):z(``,!0)])):(u(),F(`p`,uY,h(d.value.content||`这条记录没有附加内容。`),1)),d.value.responseState===`uncertain`||d.value.responseState===`sending`?(u(),F(`p`,dY,` 答复尚未确认,请核对原请求;这里不会重复投递。 `)):z(``,!0),d.value.pending?(u(),F(`div`,fY,[D(`button`,{disabled:A.value||e.connection!==`online`,onClick:n[8]||=e=>re(`deny`)},` 拒绝`,8,pY),D(`button`,{disabled:A.value||e.connection!==`online`,onClick:n[9]||=e=>re(`once`)},` 仅允许本次 `,8,mY)])):z(``,!0),d.value.pending&&e.connection!==`online`?(u(),F(`p`,hY,` 恢复连接后才能答复。 `)):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,c.value=`activity`,v.value=!0}},` 查看 Bot 记忆 `)):z(``,!0)])):v.value?(u(),F(`div`,gY,[D(`button`,{class:`back`,onClick:n[12]||=e=>J(`activity`)},[W(Y,{name:`chevron-left`}),n[24]||=w(`返回活动 `,-1)]),W(ae,{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=>y.value=e},null,8,[`selected-agent-id`,`agents`,`conversations`])])):c.value===`activity`||c.value===`review`?(u(),F(`div`,_Y,[C.value?(u(),F(`p`,vY,`正在读取记录…`)):z(``,!0),(u(!0),F(T,null,p(B.value,e=>(u(),F(`section`,{key:e.title},[D(`h3`,null,h(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:l([`record-icon`,e.kind])},[W(Y,{name:K(e),size:22},null,8,[`name`])],2),D(`span`,bY,[D(`strong`,null,h(e.title),1),D(`span`,null,h(e.summary),1),e.task?(u(),F(`span`,xY,`负责人 `+h(e.task.coordinatorName),1)):z(``,!0),e.at?(u(),F(`small`,SY,h(new Date(e.at).toLocaleTimeString(`zh-CN`,{hour:`2-digit`,minute:`2-digit`})),1)):z(``,!0)]),W(Y,{name:`chevron-down`,class:`record-arrow`,size:16})],8,yY))),128))]))),128)),!C.value&&!E.value&&!B.value.length?(u(),F(`div`,CY,[W(Y,{name:c.value===`review`?`shield`:`history`,size:28},null,8,[`name`]),D(`h3`,null,h(c.value===`review`?`暂无审核请求`:`还没有活动记录`),1),D(`p`,null,h(c.value===`review`?`这个 Bot 的权限请求和处理记录会显示在这里。`:`回复、交付、协作与记忆更新会显示在这里。`),1)])):z(``,!0)])):c.value===`computer`?(u(),k(VJ,{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`])):c.value===`routines`?(u(),k(mt,{key:6,"agent-id":e.agent.id,onEditingChange:n[19]||=e=>s.value=e,home:``,inline:``},null,8,[`agent-id`])):c.value===`files`?(u(),k(kq,{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`,wY,[w(h(E.value)+` `,1),D(`button`,{onClick:H},`重试`)])):z(``,!0)],64))],40,UJ))}}),[[`__scopeId`,`data-v-fe14fe69`]]);function EY(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 DY=[`data-request-id`],OY=[`aria-label`,`aria-expanded`],kY={key:0},AY={key:1},jY={key:0,class:`context-details__usage`},MY={key:1,class:`context-details__usage`},NY={class:`context-bar`,"aria-hidden":`true`},PY={class:`muted`},FY={key:2,class:`context-composition`},IY={class:`context-row`},LY={class:`muted`},RY={class:`context-bar context-bar--small`,"aria-hidden":`true`},zY={key:3,class:`muted`},BY={class:`muted`},VY={class:`muted`},HY={class:`muted`},UY={key:4,class:`muted`},WY={key:5},GY={class:`context-extra`},KY={key:0,class:`muted`},qY={key:1,class:`muted`},JY={key:2,class:`warning`},YY={class:`context-details__footnote`},XY=H(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=U(()=>{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=U(()=>{if(t.snapshot?.kind===`reported-context`&&(!t.agentId||t.snapshot.agentId===t.agentId))return EY(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=U(()=>r.value?.usedTokens??a.value?.usedTokens),d=U(()=>r.value?.limitTokens??a.value?.limitTokens),g=U(()=>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),_=U(()=>r.value?.usedSource===`server-estimate`),v=U(()=>g.value===void 0?c.value===void 0?`待报告`:`已报告`:`${_.value?`约 `:``}${g.value.toFixed(1)}%`),y=U(()=>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=U(()=>Object.entries(b).flatMap(([e,t])=>{let i=r.value?.components?.[e];return n(i)?[{key:e,label:t,tokens:i}]:[]})),C=U(()=>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 R(){M.value=!!A.value?.open,M.value&&L()}function B(e){A.value?.contains(e.target)||I()}function H(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`,B),document.addEventListener(`keydown`,H),window.addEventListener(`resize`,L),window.addEventListener(`scroll`,L,!0),window.visualViewport?.addEventListener(`resize`,L)}),i(()=>{document.removeEventListener(`pointerdown`,B),document.removeEventListener(`keydown`,H),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:l([`context-meter`,{"context-meter--compact":e.compact}]),"aria-label":`上下文详情`,"data-request-id":r.value?.requestId,onToggle:R},[D(`summary`,{"aria-label":`上下文:${v.value}`,title:`最近一次模型请求的上下文用量;点击查看详情`,"aria-expanded":M.value},[W(V(UP),{"aria-hidden":`true`,type:`circle`,percentage:Math.min(100,Math.max(0,g.value??0)),"show-indicator":!1,"stroke-width":12,color:(g.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`,kY,`上下文`)),e.compact?z(``,!0):(u(),F(`strong`,AY,h(v.value),1))],8,OY),M.value?(u(),F(`div`,{key:0,class:`context-pointer`,style:s(P.value),"aria-hidden":`true`},null,4)):z(``,!0),D(`div`,{ref_key:`card`,ref:j,class:l([`context-details`,{"context-details--below":N.value.top!==`auto`&&N.value.top}]),style:s(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)},[W(Y,{name:`close`,size:12})])]),c.value===void 0?(u(),F(`p`,MY,[n[3]||=w(`用量待报告`,-1),e.limitTokens?(u(),F(T,{key:0},[w(` · 配置窗口 `+h(E(e.limitTokens)),1)],64)):z(``,!0)])):(u(),F(`p`,jY,[w(`已用 `+h(_.value?`约 `:``)+h(E(c.value)),1),d.value?(u(),F(T,{key:0},[w(` / `+h(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`,NY,[D(`i`,{style:s({width:k(c.value??0)})},null,4)]),D(`p`,PY,h(g.value===void 0?`上限未知`:`${_.value?`约 `:``}占用 ${g.value.toFixed(1)}%`)+` · 最近一次模型请求`,1),n[7]||=D(`p`,{class:`muted`},`占用构成 · 粗估`,-1),C.value?(u(),F(`div`,FY,[(u(!0),F(T,null,p(S.value,(e,t)=>(u(),F(`div`,{key:e.key},[D(`div`,IY,[D(`span`,null,h(e.label),1),D(`span`,LY,h(E(e.tokens)),1)]),D(`div`,RY,[D(`i`,{style:s({width:k(e.tokens),background:x[t%x.length]})},null,4)])]))),128))])):(u(),F(`p`,zY,`本次未报告分项构成`)),D(`p`,BY,h(y.value)+` · 分项粗估`,1),D(`p`,VY,[w(`有效上限 `+h(d.value?E(d.value):`未报告`),1),r.value?(u(),F(T,{key:0},[w(`(`+h(r.value.limitSource===`provider-model`?`模型窗口`:`本地预算`)+`)`,1)],64)):z(``,!0)]),D(`p`,HY,`模型窗口 `+h(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`,UY,[w(h(r.value?.model??a.value?.model),1),r.value?.provider||a.value?.provider?(u(),F(T,{key:0},[w(` · `+h(r.value?.provider??a.value?.provider),1)],64)):z(``,!0)])):z(``,!0),r.value?.reasoningEffort?(u(),F(`p`,WY,`推理强度 · `+h(V(Xr)[r.value.reasoningEffort]??r.value.reasoningEffort),1)):z(``,!0),D(`details`,GY,[n[5]||=D(`summary`,null,`来源与压缩详情`,-1),n[6]||=D(`p`,{class:`muted`},`组成均为服务端粗估,不能当作提供方实际分项用量。`,-1),r.value||!a.value&&e.nextBudget?(u(),F(`p`,KY,[w(`本地预算 `+h(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`,qY,`已裁剪 `+h(r.value.omittedTurns)+` 个较早回合,压缩摘要涵盖前 `+h(r.value.checkpointThrough)+` 条记录。`,1)):z(``,!0),(g.value??0)>100?(u(),F(`p`,JY,`已报告输入超过有效预算。`)):z(``,!0),D(`p`,YY,[n[4]||=w(`单次输入,非累计用量`,-1),r.value?.observedAt?(u(),F(T,{key:0},[w(` · `+h(new Date(r.value.observedAt).toLocaleTimeString()),1)],64)):z(``,!0)])])],6)],42,DY))}}),[[`__scopeId`,`data-v-147b85a1`]]),ZY=[`disabled`,`title`],QY={key:1,class:`model-control__effort`},$Y={key:0,class:`model-controls__reasoning`},eX=[`disabled`,`title`,`aria-label`,`aria-expanded`],tX={key:0,class:`reasoning-menu`,role:`dialog`,"aria-label":`推理强度`},nX={class:`reasoning-menu__options`,role:`group`,"aria-label":`推理档位`},rX=[`aria-pressed`,`disabled`,`onClick`],iX={key:0},aX=[`aria-checked`,`aria-label`,`disabled`],oX=H(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(),s=O(!1),c=U(()=>d.value.replace(/^继承 · /,``).replace(/^提供方默认.*$/,`默认`)),d=U(()=>n.reasoningOptions.find(e=>e.id===n.reasoningValue)?.label||n.reasoningLabel);function g(e=!1){s.value=!1,e&&o.value?.focus()}function _(e){a.value?.contains(e.target)||g()}function v(e){r(`reasoningChange`,e),g(!0)}return f(()=>n.disabled,e=>{e&&g()}),m(()=>document.addEventListener(`pointerdown`,_)),i(()=>document.removeEventListener(`pointerdown`,_)),(t,n)=>(u(),F(`div`,{ref_key:`root`,ref:a,class:l([`model-controls`,{"model-controls--compact":e.compact,"model-controls--combined":e.combined}]),onKeydown:n[4]||=Ie(Z(e=>g(!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=>{g(),r(`modelClick`,e.currentTarget)}},[e.combined&&e.fastMode&&!e.fastDisabled?(u(),k(Y,{key:0,name:`bolt`,size:13})):z(``,!0),D(`span`,null,h(e.modelLabel),1),e.combined&&!e.compact&&!e.reasoningDisabled?(u(),F(`small`,QY,h(c.value),1)):z(``,!0),W(Y,{name:`chevron-down`,size:12})],8,ZY),e.combined?z(``,!0):(u(),F(`div`,$Y,[D(`button`,{ref_key:`reasoningTrigger`,ref:o,class:l([`model-control`,{active:s.value}]),type:`button`,disabled:e.disabled||e.reasoningDisabled||!e.reasoningOptions.length,title:`推理强度:${d.value}`,"aria-label":`推理强度:${d.value}`,"aria-expanded":s.value,"aria-haspopup":`dialog`,onClick:n[1]||=e=>s.value=!s.value},[W(Y,{name:`brain`,size:17}),D(`span`,null,`推理 · `+h(c.value),1),W(Y,{name:`chevron-down`,size:14})],10,eX),s.value?(u(),F(`section`,tX,[D(`header`,null,[n[5]||=D(`strong`,null,`推理强度`,-1),D(`button`,{type:`button`,"aria-label":`关闭推理强度`,onClick:n[2]||=e=>g(!0)},[W(Y,{name:`close`,size:16})])]),D(`div`,nX,[(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=>v(t.id)},[D(`span`,null,h(t.label),1),t.id===e.reasoningValue?(u(),k(Y,{key:0,name:`check`,size:16})):z(``,!0)],8,rX))),128))]),n[6]||=D(`p`,null,`更高的强度用于深入分析复杂问题。`,-1),e.scope?(u(),F(`p`,iX,h(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)},[W(Y,{name:`bolt`,size:17}),D(`span`,null,h(e.fastLabel),1),D(`span`,{class:l([`model-control__switch`,{on:e.fastMode}]),"aria-hidden":`true`},[...n[7]||=[D(`span`,null,null,-1)]],2)],8,aX)):z(``,!0)],8,[`to`,`disabled`]))],34))}}),[[`__scopeId`,`data-v-7f4990ce`]]),sX=[`aria-label`,`aria-labelledby`,`aria-busy`],cX={class:`model-dialog__header`},lX=[`disabled`],uX={class:`model-dialog__search`},dX=[`placeholder`,`disabled`],fX={class:`model-dialog__columns`},pX={class:`model-dialog__body`},mX={class:`model-dialog__list`},hX=[`disabled`,`aria-label`,`aria-pressed`,`onClick`],gX={class:`model-dialog__item-label`},_X={class:`model-dialog__flat-name`},vX={class:`model-dialog__provider`},yX={class:`model-dialog__states`},bX={key:0},xX={key:1,class:`sr-only`},SX=[`disabled`,`aria-label`,`onClick`],CX=[`aria-expanded`,`disabled`,`onClick`],wX={class:`model-dialog__items`},TX=[`disabled`,`onClick`],EX={class:`model-dialog__item-label`},DX=[`title`],OX={key:0,class:`model-dialog__badge`},kX={key:1,class:`model-dialog__badge model-dialog__badge--quiet`},AX={key:2,class:`model-dialog__empty`},jX={key:0,class:`model-dialog__tuning`},MX={key:0,class:`model-dialog__status`,role:`status`},NX=H(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),g=O({});function _(){if(!n.open)return;if(!n.anchor){g.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;g.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 y(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=U(()=>{let e=a.value.trim().toLocaleLowerCase();return n.options.filter(t=>`${t.name} ${t.id} ${t.providerName||t.provider}`.toLocaleLowerCase().includes(e))}),j=U(()=>{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(),_(),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(),_(),b.value?.focus()}),m(()=>{window.addEventListener(`keydown`,P),window.addEventListener(`resize`,_),window.addEventListener(`scroll`,_,!0),document.addEventListener(`pointerdown`,y),n.open&&(_(),b.value?.focus())}),i(()=>{window.removeEventListener(`keydown`,P),window.removeEventListener(`resize`,_),window.removeEventListener(`scroll`,_,!0),document.removeEventListener(`pointerdown`,y)}),(t,n)=>(u(),k(L,{to:`body`},[W(rt,{name:`model-dialog-fade`},{default:S(()=>[e.open?(u(),F(`div`,{key:0,class:l([`model-dialog-layer`,{"model-dialog-layer--anchored":e.anchor}]),role:`presentation`,onMousedown:n[2]||=Z(e=>M(),[`self`])},[D(`section`,{ref_key:`dialog`,ref:c,class:l([`model-dialog`,{"model-dialog--tuning":e.tuning,"model-dialog--editing":e.editing}]),style:s(g.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`,cX,[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()},[W(Y,{name:`close`,size:15})],8,lX)]),D(`label`,uX,[W(Y,{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,dX),[[Q,a.value]])]),D(`div`,fX,[D(`div`,pX,[D(`div`,mX,[e.tuning?(u(!0),F(T,{key:0},p(A.value,t=>(u(),F(`div`,{key:w(t),class:l([`model-dialog__row`,{"model-dialog__row--active":w(t)===e.selectedId}])},[D(`button`,{class:l([`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`,gX,[D(`span`,_X,h(t.name),1),D(`small`,vX,h(t.providerName||E(t.provider)),1)]),D(`span`,yX,[t.isDefault?(u(),F(`span`,bX,`默认`)):z(``,!0),w(t)===e.selectedId?(u(),F(`span`,xX,`当前`)):z(``,!0),w(t)===e.selectedId?(u(),k(Y,{key:2,name:`check`,size:16})):z(``,!0)])],10,hX),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)},[W(Y,{name:`dots`,size:18})],8,SX)],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)},[W(Y,{class:l([`model-dialog__chevron`,{collapsed:x.value[t.provider]}]),name:`chevron-down`,size:13},null,8,[`class`]),D(`strong`,null,h(t.label),1),D(`span`,null,h(t.models.length),1)],8,CX),d(D(`div`,wX,[(u(!0),F(T,null,p(t.models,t=>(u(),F(`button`,{key:w(t),class:l([`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`,EX,[D(`strong`,null,h(t.name||t.id),1),t.hint||t.name&&t.name!==t.id?(u(),F(`small`,{key:0,title:t.hint},h(t.hint||t.id),9,DX)):z(``,!0)]),t.isDefault?(u(),F(`span`,OX,`默认`)):z(``,!0),t.supportsReasoning?(u(),F(`span`,kX,`推理`)):z(``,!0),w(t)===e.selectedId?(u(),k(Y,{key:2,class:`model-dialog__check`,name:`check`,size:15})):z(``,!0)],10,TX))),128))],512),[[tt,!x.value[t.provider]]])]))),128)),e.tuning?v(t.$slots,`footer`,{},void 0,!0,1):z(``,!0),(e.tuning?!A.value.length:!j.value.length)?(u(),F(`p`,AX,`没有匹配的模型`)):z(``,!0)])]),e.tuning&&e.editing?(u(),F(`aside`,jX,[v(t.$slots,`tuning`,{},void 0,!0)])):z(``,!0)]),e.busy?(u(),F(`p`,MX,`正在保存…`)):z(``,!0)],14,sX)],34)):z(``,!0)]),_:3})]))}}),[[`__scopeId`,`data-v-654f5e6c`]]);function PX(e,t,n){let r=t===`auto`,i=e.models.find(e=>e.provider===t&&e.model===n),a=e.settings??Yr(),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 FX(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??Yr(),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 IX(e,t,n){let r=e.settings??Yr();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 LX=[`aria-busy`,`title`],RX=[`role`],zX=[`disabled`],BX=[`disabled`],VX={key:0,class:`bot-model-tuning`,"aria-label":`模型参数`},HX=[`disabled`],UX=[`disabled`],WX={class:`bot-model-tuning__row`},GX=[`aria-checked`,`disabled`],KX={key:0},qX={class:`bot-model-tuning__row`},JX=[`aria-expanded`,`disabled`],YX={key:1,class:`bot-model-tuning__efforts`,role:`group`,"aria-label":`推理强度选项`},XX=[`aria-pressed`,`onClick`],ZX={class:`bot-model-tuning__check`},QX={key:2},$X={class:`bot-model-tuning__scope`},eZ={key:3,role:`alert`,class:`error`},tZ={class:`sr-only`},nZ=H(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(),s=O(Yr()),c=O(!1),d=O(!1),g=O(``),_=O(``),v=0,y;function b(e=``){y!==void 0&&clearTimeout(y),_.value=e,y=e?setTimeout(()=>{_.value=``,y=void 0},3e3):void 0}let x=O(!1),C=O(null),E=(e,t)=>JSON.stringify([e,t]);U(()=>s.value.provider&&s.value.model?E(s.value.provider,s.value.model):``);let A=U(()=>Jr(s.value)),j=U(()=>A.value||!s.value.provider&&!!a.value?.auto?.enabled),M=U(()=>ti(a.value?.auto?.backend)),N=U(()=>A.value?void 0:a.value?.models.find(e=>e.provider===(s.value.provider??a.value?.defaults.provider)&&e.model===(s.value.model??a.value?.defaults.model))),P=U(()=>{if(j.value)return`Auto · ${M.value}`;let e=(N.value?.name??(A.value||!s.value.model?c.value?`正在读取…`:a.value?.defaults.model:s.value.model))?.trim()||`选择模型`;return n.compact?e.split(` · `).at(-1)?.trim()||`选择模型`:e}),I=U(()=>N.value?.defaultReasoningEffort??a.value?.defaults.reasoningEffort??`default`),R=e=>e==="default"?`提供方默认(未声明实际强度)`:Xr[e]??e,B=U(()=>!j.value&&!!N.value?.reasoningKnown&&!!N.value.reasoningEfforts.length),H=U(()=>c.value||d.value||n.disabled||!a.value);async function G(){let e=++v,t=n.agent.id;c.value=!0,d.value=!1,g.value=``,b(),a.value=void 0;try{let n=await X(`/api/app/agents/${t}/model-options`);if(e!==v)return;if(n.version!==1)throw Error(`模型目录版本不兼容。`);a.value=n,s.value={...Yr(),...n.settings}}catch(t){e===v&&(g.value=t instanceof Error?t.message:`模型配置读取失败`)}finally{e===v&&(c.value=!1)}}async function K(e){if(H.value||!a.value)return;let t=v,i=n.agent.id,o={...s.value},c=JSON.parse(JSON.stringify({modelSettings:{...e},expectedRevision:a.value.revision}));d.value=!0,g.value=``,b();try{let e=await X(`/api/app/agents/${i}`,{method:`PATCH`,body:c});if(t!==v)return;if(e.confirmationRequired){if(!window.confirm(e.confirmationMessage||`确认切换模型?`)){b(`已取消,保留原设置。`);return}if(!e.confirmationTarget)throw Error(`模型确认无效,请重新读取。`);if(e=await X(`/api/app/agents/${i}`,{method:`PATCH`,body:{...c,confirmedModel:e.confirmationTarget}}),t!==v)return}if(!e.agent)throw Error(`设置尚未保存,请重新读取。`);if(n.agent.revision>e.agent.revision){b(`其他端已更新,正在重新读取。`);return}return s.value={...Yr(),...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===v&&(s.value=o,g.value=e instanceof Error?e.message:`保存失败,保留原设置。`)}finally{t===v&&(d.value=!1)}}let ee=U(()=>`下一轮生效;仅此 Bot,适用于它的所有会话。${n.running?`当前运行保持原设置。`:``}`),te=U(()=>Qr(a.value)),q=U(()=>{let e=te.value.find(e=>e.isCurrent);return e?`${e.provider}:${e.id}`:``}),J=O(!1),ne=O(null);f(J,async e=>{!e&&se.value&&(await o(),ne.value?.focus())});let re=U(()=>j.value?[]:[{id:``,label:`继承 · ${R(I.value)}`},...(N.value?.reasoningEfforts??[]).map(e=>({id:e,label:R(e)}))]),ie=U(()=>j.value?`normal`:s.value.fastMode??a.value?.defaults.fastMode??`normal`),ae=U(()=>!j.value&&!!N.value?.fastModes.includes(`fast`)&&!!N.value?.fastModes.includes(`normal`));async function oe(e){if(!a.value)return;let t=e===`inherit:default`?{provider:`inherit`,id:`default`}:te.value.find(t=>`${t.provider}:${t.id}`===e);if(t)try{await K(IX(a.value,t.provider===`inherit`?void 0:t.provider,t.provider===`inherit`?void 0:t.id))&&(x.value=!1,se.value=void 0)}catch(e){g.value=e instanceof Error?e.message:String(e)}}let se=O(),ce=U(()=>te.value.find(e=>e.provider===se.value?.provider&&e.id===se.value?.model)),le=U(()=>a.value?.models.find(e=>e.provider===se.value?.provider&&e.model===se.value?.model)),ue=U(()=>!!le.value?.fastModes.includes(`normal`)&&!!le.value?.fastModes.includes(`fast`)),de=U(()=>se.value?.fastMode??a.value?.defaults.fastMode??`normal`),fe=U(()=>!!le.value?.reasoningKnown&&!!le.value.reasoningEfforts.length),pe=U(()=>[{id:``,label:`跟随默认`},...(le.value?.reasoningEfforts??[]).map(e=>({id:e,label:R(e)}))]);function me(e){let t=te.value.find(t=>`${t.provider}:${t.id}`===e);!t||!a.value||H.value||(J.value=!1,se.value=PX(a.value,t.provider===`inherit`?a.value.defaults.provider:t.provider,t.provider===`inherit`?a.value.defaults.model:t.id))}function he(){se.value=void 0,J.value=!1}async function ge(){if(!(!se.value||!a.value)){if(se.value.provider===`auto`){he();return}try{await K(FX(a.value,se.value))&&he()}catch(e){g.value=e instanceof Error?e.message:String(e)}}}function _e(e){if(e!==`escape`){he(),x.value=!1;return}if(J.value){J.value=!1;return}if(se.value){he();return}x.value=!1}function ve(e){K({...s.value,reasoningEffort:e||null})}function ye(e){ae.value&&K({...s.value,fastMode:e?`fast`:`normal`})}function be(e){C.value=e,he(),x.value=!0,G()}return f(()=>[n.agent.revision,d.value],([e])=>{!d.value&&a.value&&e>a.value.revision&&G()}),f(()=>n.agent.id,()=>{x.value=!1,he(),G()}),m(G),i(()=>{v++,b()}),(t,n)=>(u(),F(`section`,{class:`bot-chat-controls`,"aria-label":`Bot 聊天模型快捷设置`,"aria-busy":c.value||d.value,title:ee.value},[W(oX,{"model-label":P.value,combined:e.compact,compact:e.compact,"fast-target":e.optionsTarget,"reasoning-value":s.value.reasoningEffort??``,"reasoning-label":j.value?`自动 · ${M.value}`:R(s.value.reasoningEffort??I.value),"reasoning-options":re.value,"reasoning-disabled":!B.value,disabled:H.value,"fast-mode":ie.value!==`normal`,"fast-disabled":!ae.value,"fast-label":ie.value===`normal`||ie.value===`fast`?`快速`:V(Zr)[ie.value],scope:ee.value,onModelClick:be,onReasoningChange:ve,onFastModeToggle:ye},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},[W(XY,{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||_.value||g.value?(u(),F(`div`,{key:0,class:l([`bot-control-status`,{error:g.value}]),role:g.value?`alert`:`status`},[D(`span`,null,h(g.value||(d.value?`正在保存…`:_.value)),1),g.value?(u(),F(`button`,{key:0,type:`button`,disabled:c.value||d.value,onClick:G},`重新读取`,8,zX)):z(``,!0)],10,RX)):z(``,!0),W(NX,{open:x.value,anchor:C.value,options:te.value,"selected-id":q.value,busy:d.value,tuning:!0,editing:!!se.value,onClose:_e,onSelect:oe,onEdit:me},{footer:S(()=>[s.value.provider||s.value.model?(u(),F(`button`,{key:0,class:`bot-model-inherit`,type:`button`,disabled:H.value,onClick:n[0]||=e=>oe(`inherit:default`)},`跟随系统默认`,8,BX)):z(``,!0)]),tuning:S(()=>[se.value?(u(),F(`section`,VX,[D(`header`,null,[D(`button`,{type:`button`,"aria-label":`取消模型参数修改`,disabled:d.value,onClick:he},[W(Y,{name:`close`,size:15})],8,HX),D(`div`,null,[D(`strong`,null,h(se.value.model===`auto`?`Auto`:se.value.model),1),D(`small`,null,h(ce.value?.providerName||le.value?.providerName||se.value.provider),1)]),D(`button`,{class:`bot-model-tuning__done`,disabled:H.value,type:`button`,onClick:ge},`完成`,8,UX)]),D(`div`,WX,[n[4]||=D(`span`,null,`快速`,-1),D(`button`,{type:`button`,role:`switch`,"aria-label":`快速`,"aria-checked":de.value===`fast`,disabled:H.value||!ue.value,onClick:n[1]||=e=>se.value.fastMode=de.value===`fast`?`normal`:`fast`},[D(`span`,{class:l([`bot-model-switch`,{on:de.value===`fast`}])},[...n[3]||=[D(`i`,null,null,-1)]],2)],8,GX)]),ue.value?z(``,!0):(u(),F(`p`,KX,h(se.value.provider===`auto`?`由实际模型决定`:`当前连接暂未开放`),1)),D(`div`,qX,[n[5]||=D(`span`,null,`推理强度`,-1),D(`button`,{ref_key:`effortTrigger`,ref:ne,type:`button`,"aria-label":`选择推理强度`,"aria-expanded":J.value,disabled:H.value||!fe.value,onClick:n[2]||=e=>J.value=!J.value},[w(h(se.value.provider===`auto`?`自动`:se.value.reasoningEffort?R(se.value.reasoningEffort):`跟随默认`),1),W(Y,{name:`chevron-down`,size:12})],8,JX)]),J.value?(u(),F(`div`,YX,[(u(!0),F(T,null,p(pe.value,e=>(u(),F(`button`,{key:e.id,type:`button`,"aria-pressed":e.id===(se.value.reasoningEffort??``),onClick:t=>{se.value.reasoningEffort=e.id||null,J.value=!1}},[D(`span`,ZX,[e.id===(se.value.reasoningEffort??``)?(u(),k(Y,{key:0,name:`check`,size:14})):z(``,!0)]),w(h(e.label),1)],8,XX))),128))])):z(``,!0),fe.value?z(``,!0):(u(),F(`p`,QX,h(se.value.provider===`auto`?`${M.value} 自动选择模型和推理强度。`:le.value?.reasoningKnown?`此模型不提供推理强度选择。`:`模型目录未声明推理能力,采用提供方默认。`),1)),D(`p`,$X,h(ee.value)+h(q.value===`${se.value.provider}:${se.value.model}`?``:`选择此模型后使用这些参数。`),1),g.value?(u(),F(`p`,eZ,h(g.value),1)):z(``,!0)])):z(``,!0)]),_:1},8,[`open`,`anchor`,`options`,`selected-id`,`busy`,`editing`]),D(`span`,tZ,h(ee.value)+` `+h(N.value&&!B.value?N.value.reasoningKnown?`此模型不提供推理强度选择。`:`模型目录未声明推理能力,将采用提供方默认。`:``),1)],8,LX))}}),[[`__scopeId`,`data-v-4e1a0ae6`]]),rZ={class:`inspector`,"aria-label":`Inspector 请求查看器`},iZ={class:`inspector-toolbar`},aZ={class:`lenses`,role:`group`,"aria-label":`Inspector 视图`},oZ=[`aria-pressed`],sZ=[`aria-pressed`],cZ=[`disabled`],lZ={key:0,role:`alert`,class:`error`},uZ={key:1,class:`empty`},dZ={class:`summary`},fZ={key:0},pZ=H(E({__name:`WorkspaceInspectorPanel`,props:{conversationId:{},taskId:{},showClose:{type:Boolean}},emits:[`close`],setup(e,{emit:t}){let n=e,r=t,a=O([]),s=O(``),c=O(!1),d=O(`events`),m=O(),g,_=!1,v=0,y=O(!0),b=U(()=>a.value.filter(e=>d.value===`events`?e.direction===`event`:e.direction!==`event`)),x=U(()=>{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=v;c.value=!0;try{let t=await X(`/api/app/conversations/${n.conversationId}/inspector${n.taskId?`?taskId=`+encodeURIComponent(n.taskId):``}`);e===v&&!_&&(a.value=t.entries,s.value=``)}catch(t){e===v&&!_&&(s.value=t instanceof Error?t.message:`无法读取请求记录`)}finally{e===v&&(c.value=!1)}}async function E(){let e=v;document.hidden||await C(),!_&&e===v&&(g=setTimeout(E,3e3))}return f(()=>[n.conversationId,n.taskId],()=>{v++,a.value=[],y.value=!0,clearTimeout(g),E()},{immediate:!0}),f(d,async()=>{y.value=!0,await o(),m.value&&(m.value.scrollTop=0)}),f(x,async()=>{let e=y.value;await o(),e&&m.value&&(m.value.scrollTop=0)}),i(()=>{_=!0,v++,clearTimeout(g)}),(t,n)=>(u(),F(`section`,rZ,[D(`header`,null,[W(Y,{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`)},[W(Y,{name:`close`,size:16})])):z(``,!0)]),D(`div`,iZ,[D(`div`,aZ,[D(`button`,{"aria-pressed":d.value===`events`,onClick:n[1]||=e=>d.value=`events`},`Events`,8,oZ),D(`button`,{"aria-pressed":d.value===`raw`,onClick:n[2]||=e=>d.value=`raw`},`Raw`,8,sZ)]),D(`span`,null,h(c.value&&!a.value.length?`读取中…`:b.value.length+` 条记录`),1),D(`button`,{class:`reload`,"aria-label":`刷新请求记录`,title:`重新读取记录`,disabled:c.value,onClick:C},[W(Y,{name:`refresh`,size:14})],8,cZ)]),D(`div`,{ref_key:`list`,ref:m,class:`inspector-list`,onScroll:n[3]||=e=>y.value=!!m.value&&m.value.scrollTop<40},[s.value?(u(),F(`p`,lZ,h(s.value),1)):!x.value.length&&!c.value?(u(),F(`p`,uZ,h(d.value===`raw`?`此聊天尚未记录网关请求与响应。`:`此聊天尚未产生运行事件。`),1)):z(``,!0),(u(!0),F(T,null,p(x.value,e=>(u(),F(`details`,{key:e.id,class:l([`inspector-row`,e.tone])},[D(`summary`,null,[W(Y,{class:`chevron`,name:`chevron-left`,size:12}),D(`time`,null,h(S(e.at)),1),D(`span`,{class:l([`tag`,{native:d.value===`raw`}])},[w(h(e.tag),1),e.count>1?(u(),F(T,{key:0},[w(` ×`+h(e.count),1)],64)):z(``,!0)],2),D(`span`,dZ,h(e.summary),1),e.duration===void 0?z(``,!0):(u(),F(`small`,fZ,h(e.duration)+`ms`,1))]),D(`pre`,null,h(JSON.stringify(e.count===1?e.data[0]:e.data,null,2)),1)],2))),128))],544)]))}}),[[`__scopeId`,`data-v-8c8ae801`]]),mZ={class:`bot-panel`,"aria-label":`Inspector 侧栏`},hZ=H(E({__name:`WorkspaceBotPanel`,props:{conversationId:{},taskId:{}},emits:[`close`],setup(e,{emit:t}){let n=t;return(t,r)=>(u(),F(`aside`,mZ,[W(pZ,{"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`]]),gZ={class:`local-vm-workspace`,"aria-label":`双桌面工作区`},_Z=[`disabled`],vZ={key:0,role:`alert`},yZ={class:`panes`},bZ=[`value`,`disabled`,`aria-label`,`onChange`],xZ=[`value`,`disabled`],SZ={key:1,class:`empty`},CZ=H(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=[],s=O(!1),c=O(``),d=O(),f=U(()=>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 g(e){if(!s.value){s.value=!0,c.value=``;try{await m(),await o[e]?.take(),o[e]?.hasControl()&&(d.value=e)}catch(e){c.value=e instanceof Error?e.message:`切换控制失败`}finally{s.value=!1}}}async function _(e,t){if(!s.value){s.value=!0,c.value=``;try{await m(),a.value[e]=t}catch(e){c.value=String(e)}finally{s.value=!1}}}async function v(){if(s.value)return!1;s.value=!0;try{return await m(),i(`close`),!0}catch(e){return c.value=String(e),!1}finally{s.value=!1}}return t({close:v}),(e,t)=>(u(),F(`main`,gZ,[D(`header`,null,[t[0]||=D(`div`,null,[D(`strong`,null,`本地虚拟机 · 双桌面`),D(`p`,null,`同时查看两个机器人的桌面,每次只控制其中一台。`)],-1),D(`button`,{disabled:s.value,onClick:v},`交还并关闭`,8,_Z)]),c.value?(u(),F(`p`,vZ,h(c.value),1)):z(``,!0),D(`div`,yZ,[(u(!0),F(T,null,p(a.value,(e,n)=>(u(),F(`section`,{key:n,class:l([`pane`,{controlled:d.value===n}])},[D(`label`,null,[w(`桌面 `+h(n+1),1),D(`select`,{value:a.value[n],disabled:s.value,"aria-label":`选择桌面 ${n+1}`,onChange:e=>_(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},h(e.name),9,xZ))),128))],40,bZ)]),a.value[n]&&f.value.some(e=>e.id===a.value[n])?(u(),k(gt,{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=>g(n)},null,8,[`agents`,`onControlRequest`])):(u(),F(`p`,SZ,`选择另一位机器人。打开工作区不会创建或启动虚拟机。`))],2))),128))])]))}}),[[`__scopeId`,`data-v-3c7b5891`]]),wZ={class:`task-plan__header`},TZ=[`aria-expanded`,`aria-controls`],EZ={class:`task-plan__icon`},DZ={class:`task-plan__heading`},OZ={key:0,class:`task-plan__count`},kZ={class:`task-plan__actions`},AZ=[`id`,`onKeydown`],jZ=[`aria-valuenow`],MZ={key:1,class:`task-plan__steps`,"aria-label":`任务步骤`},NZ={key:2,class:`task-plan__result`},PZ={class:`result result--summary`},FZ=[`open`],IZ={class:`plan-details`},LZ={key:0,class:`objective`},RZ={key:1,class:`result`},zZ={key:2},BZ={key:0,class:`result`},VZ={key:1},HZ=[`disabled`],UZ={key:0,class:`criteria-error`,role:`alert`},WZ={class:`criteria-actions`},GZ=[`disabled`],KZ=[`disabled`],qZ={key:0,class:`criteria`},JZ={key:0},YZ=H(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=U(()=>n.assignments.filter(e=>e.status===`complete`).length),a=U(()=>n.assignments.length?Math.round(i.value/n.assignments.length*100):n.goal?.status===`complete`?100:0),s=U(()=>!!n.saveCriteria&&!!n.goal&&[`running`,`review`,`waiting`].includes(n.goal.status)),c=O(!!n.embedded),m=x(),g=O(!1),_=O(!1),v=O(``),y=O(``),b=O(),S=O(),C=O();async function E(){c.value=!0,await o(),C.value?.scrollIntoView?.({block:`nearest`})}async function A(){_.value||(c.value=!1,await o(),C.value?.focus())}t({open:E});let j=1;f(()=>n.goal?.id??n.assignments[0]?.goalId??``,()=>{c.value=!!n.embedded,g.value=!1,y.value=``});async function M(){n.goal&&(v.value=n.goal.acceptanceCriteria.join(`
|
|
249
249
|
`),j=n.goal.acceptanceRevision??1,y.value=``,g.value=!0,await o(),b.value?.focus())}async function N(){g.value=!1,await o(),S.value?.focus()}async function P(){if(!n.goal||!n.saveCriteria||_.value)return;let e=v.value.split(`
|
|
250
|
-
`).map(e=>e.trim()).filter(Boolean);if(!e.length||e.length>12||e.some(e=>e.length>1e3)){y.value=`请填写 1 至 12 条验收要求,每条不超过 1000 字。`;return}_.value=!0,y.value=``;try{await n.saveCriteria(n.goal.id,j,e),await N()}catch(e){y.value=e instanceof Error?e.message:`保存失败,请重试`}finally{_.value=!1}}return(t,n)=>e.goal||e.assignments.length?(u(),F(`section`,{key:0,class:l([`task-plan`,{"task-plan--expanded":c.value,"task-plan--embedded":e.embedded}]),"aria-label":`目标进度`},[D(`header`,wZ,[e.embedded&&e.goal?(u(),F(`span`,{key:0,class:l([`task-plan__status`,`task-plan__status--${e.goal.status}`])},[n[4]||=D(`i`,null,null,-1),w(h(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":c.value,"aria-controls":V(m),onClick:n[0]||=e=>c.value?A():E()},[D(`span`,EZ,[W(Y,{name:`files`,size:17})]),D(`span`,DZ,[n[6]||=D(`strong`,null,`交付进展`,-1),e.goal?(u(),F(`span`,{key:0,class:l([`task-plan__status`,`task-plan__status--${e.goal.status}`])},[n[5]||=D(`i`,null,null,-1),w(h(r[e.goal.status]),1)],2)):z(``,!0)]),e.assignments.length?(u(),F(`strong`,OZ,[w(h(i.value)+`/`+h(e.assignments.length)+` `,1),n[7]||=D(`small`,null,`项完成`,-1)])):z(``,!0),W(Y,{class:`task-plan__header-chevron`,name:`chevron-down`,size:15})],8,TZ)),D(`div`,kZ,[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)])]),c.value?(u(),F(`div`,{key:0,id:V(m),class:`task-plan__content`,onKeydown:Ie(Z(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:l({complete:e.status===`complete`,active:[`running`,`review`].includes(e.status),failed:[`failed`,`blocked`].includes(e.status)})},null,2))),128))],8,jZ)):z(``,!0),e.assignments.length?(u(),F(`div`,MZ,[(u(!0),F(T,null,p(e.assignments,(e,t)=>(u(),F(`div`,{key:e.id,class:l({complete:e.status===`complete`,active:[`running`,`review`].includes(e.status),failed:[`failed`,`blocked`].includes(e.status)})},[D(`span`,null,[e.status===`complete`?(u(),k(Y,{key:0,name:`check`,size:11})):(u(),F(T,{key:1},[w(h(t+1),1)],64))]),D(`strong`,null,h(e.title),1)],2))),128))])):z(``,!0),e.goal?.result?(u(),F(`div`,NZ,[n[8]||=D(`small`,null,`最新结果`,-1),D(`p`,PZ,h(e.goal.result),1)])):z(``,!0),D(`details`,{open:e.embedded},[D(`summary`,null,[W(Y,{name:`file`,size:15}),n[9]||=D(`span`,null,`任务与验收详情`,-1),W(Y,{class:`task-plan__chevron`,name:`chevron-down`,size:14})]),D(`div`,IZ,[e.goal?(u(),F(`p`,LZ,h(e.goal.objective),1)):z(``,!0),e.goal?.result?(u(),F(`p`,RZ,h(e.goal.result),1)):z(``,!0),e.assignments.length?(u(),F(`ol`,zZ,[(u(!0),F(T,null,p(e.assignments,t=>(u(),F(`li`,{key:t.id},[D(`div`,null,[D(`strong`,null,h(t.title),1),D(`span`,null,h(t.status===`complete`?`已复核`:r[t.status]),1)]),D(`small`,null,[w(h(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(` · 临时助手`+h(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`,BZ,h(t.result),1)):z(``,!0),t.review?(u(),F(`p`,VZ,h(t.review),1)):z(``,!0)]))),128))])):z(``,!0),g.value?(u(),F(`form`,{key:3,onSubmit:Z(P,[`prevent`])},[D(`label`,null,[n[10]||=w(`验收要求`,-1),d(D(`textarea`,{ref_key:`editor`,ref:b,"onUpdate:modelValue":n[3]||=e=>v.value=e,disabled:_.value,rows:`4`,"aria-describedby":`criteria-help`},null,8,HZ),[[Q,v.value]])]),n[11]||=D(`small`,{id:`criteria-help`},`每行一条,描述你需要的交付结果。`,-1),y.value?(u(),F(`p`,UZ,h(y.value),1)):z(``,!0),D(`div`,WZ,[D(`button`,{type:`submit`,disabled:_.value||!s.value},h(_.value?`保存中…`:`保存验收要求`),9,GZ),D(`button`,{type:`button`,disabled:_.value,onClick:N},`取消`,8,KZ)])],32)):(u(),F(T,{key:4},[e.goal?.acceptanceCriteria.length?(u(),F(`ul`,qZ,[(u(!0),F(T,null,p(e.goal.acceptanceCriteria,(t,n)=>(u(),F(`li`,{key:n},[D(`span`,null,h(e.goal.checks?.some(e=>e.criterion===n&&e.passed)?`已验收`:`待验收`),1),w(` `+h(t),1),e.goal.checks?.find(e=>e.criterion===n)?.evidence?(u(),F(`p`,JZ,h(e.goal.checks.find(e=>e.criterion===n)?.evidence),1)):z(``,!0)]))),128))])):z(``,!0),s.value?(u(),F(`button`,{key:1,ref_key:`editButton`,ref:S,type:`button`,onClick:M},`调整验收要求`,512)):z(``,!0)],64))])],8,FZ)],40,AZ)):z(``,!0)],2)):z(``,!0)}}),[[`__scopeId`,`data-v-e5c8af94`]]);function XZ(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 ZZ(e=[],t=[]){return t.map(t=>{let n=e.find(e=>e.id===t.id);return n?{...n,...t,records:XZ(n.records,t.records)}:t})}function QZ(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 $Z(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 eQ=e=>({start:`开始`,text:`输出`,thinking:`思考`,"tool-start":`调用工具`,"tool-result":`工具结果`,progress:`进展`,complete:`完成`,error:`失败`,interrupted:`已中断`})[e.kind]??e.kind;async function tQ(e,t){let n=XZ([],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=XZ(n,i.records);if(!i.records.some(t=>t.seq>r&&t.seq<n[e].seq))return a;n=a}}var nQ={key:0,role:`status`},rQ={class:`record-toolbar`},iQ=[`disabled`],aQ={key:0,role:`alert`},oQ=[`disabled`],sQ={key:1},cQ=[`data-record-kind`],lQ={key:0},uQ=[`disabled`,`onClick`],dQ={key:2},fQ=H(E({__name:`KernelTaskRecords`,props:{task:{}},setup(e){let t=e,n=O(!1),r=O(!1),a=O(0),s=O(!1),c=O(``),l=O([]),d=O(),m=O(),g=O({}),_=O(``),v=U(()=>XZ(l.value,t.task.records)),y=U(()=>d.value??t.task.hasOlderRecords??!t.task.records?.length),b=U(()=>`/api/app/runtime-tasks/${encodeURIComponent(t.task.id)}`),x=!1,S=!1,C=!1,E=!1;i(()=>{x=!0});async function k(){await o(),m.value&&(m.value.scrollTop=m.value.scrollHeight)}function A(){r.value=!1,a.value=0,k()}function j(){let e=m.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 tQ(v.value,e=>X(`${b.value}/records?after=${e}&limit=50`));x||(l.value=XZ(l.value,e))}while(C&&!x&&n.value)}catch(e){x||(c.value=e instanceof Error?e.message:`断线期间的记录未补齐,请重试`)}finally{S=!1}}}f([n,()=>t.task.records],()=>{M()});async function N(){if(s.value)return;s.value=!0,c.value=``,r.value=!0;let e=v.value[0]?.seq,t=m.value,n=t?.scrollHeight??0,i=t?.scrollTop??0;try{let r=await X(`${b.value}/records?limit=50${e===void 0?``:`&before=${e}`}`);if(x)return;l.value=XZ(l.value,r.records),d.value=r.hasMore,await o(),t&&(t.scrollTop=i+t.scrollHeight-n)}catch(e){x||(c.value=e instanceof Error?e.message:`记录读取失败,请重试`)}finally{s.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,c.value=``;let t=g.value[e.id],n=t?.next??0;try{let r=await X(`${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||(c.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`,nQ,`· 有 `+h(a.value)+` 条新记录`,1)):z(``,!0)]),n.value?(u(),F(T,{key:0},[D(`div`,rQ,[D(`button`,{type:`button`,disabled:s.value,onClick:t[0]||=e=>r.value?A():r.value=!0},h(r.value?`继续跟随`:`暂停滚动`),9,iQ),a.value?(u(),F(`button`,{key:0,type:`button`,onClick:A},`查看 `+h(a.value)+` 条新记录`,1)):z(``,!0)]),c.value?(u(),F(`p`,aQ,[w(h(c.value)+` `,1),D(`button`,{type:`button`,onClick:M},`重试补齐`)])):z(``,!0),D(`div`,{ref_key:`list`,ref:m,class:`record-list`,tabindex:`0`,"aria-label":`子任务执行记录`,onScroll:j},[y.value?(u(),F(`button`,{key:0,type:`button`,disabled:s.value,onClick:N},h(s.value?`正在读取…`:`加载更早记录`),9,oQ)):z(``,!0),!v.value.length&&!s.value?(u(),F(`p`,sQ,`暂无执行记录。`)):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(h(V(eQ)(e)),1),e.toolName?(u(),F(T,{key:0},[w(` · `+h(e.toolName),1)],64)):z(``,!0)]),D(`time`,null,h(new Date(e.at).toLocaleTimeString()),1)]),D(`pre`,null,h(g.value[e.id]?.text??e.text),1),e.status?(u(),F(`small`,lQ,h(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)},h(_.value===e.id?`正在读取…`:g.value[e.id]?`加载更多工具结果`:`查看完整工具结果`),9,uQ)):e.truncated&&!e.resultId?(u(),F(`small`,dQ,`此记录仅保留摘要。`)):z(``,!0)],8,cQ))),128))],544)],64)):z(``,!0)],32))}}),[[`__scopeId`,`data-v-eca920db`]]),pQ=[`open`],mQ={key:0,class:`execution-content`},hQ=[`data-task-id`],gQ={key:0},_Q={key:1,class:`task-error`},vQ={key:2},yQ=H(E({__name:`KernelTaskDetails`,props:{tasks:{},embedded:{type:Boolean}},setup(e){let t=e,n=O(!!t.embedded),r=O(Date.now()),a=U(()=>$Z(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:l([`execution-details`,{embedded:e.embedded}]),open:e.embedded,onToggle:i[0]||=e=>n.value=e.target.open},[D(`summary`,null,`执行详情 · `+h(e.tasks.length)+` 项内部子任务`,1),n.value?(u(),F(`div`,mQ,[(u(!0),F(T,null,p(a.value,({task:e,depth:t})=>(u(),F(`article`,{key:e.id,style:s({marginInlineStart:`${Math.min(t,4)*12}px`}),"data-task-id":e.id},[D(`header`,null,[D(`strong`,null,h(e.goal),1),D(`span`,null,h(e.status===`complete`?`执行完成`:V(q)(e.status))+` · `+h(V(QZ)(e,r.value)),1)]),t?(u(),F(`small`,gQ,`第 `+h(t+1)+` 层子任务`,1)):z(``,!0),e.failureReason?(u(),F(`p`,_Q,h(e.failureReason),1)):z(``,!0),e.result?(u(),F(`p`,vQ,h(e.result),1)):z(``,!0),W(fQ,{task:e},null,8,[`task`])],12,hQ))),128))])):z(``,!0)],42,pQ)):z(``,!0)}}),[[`__scopeId`,`data-v-b3c13d27`]]),bQ={class:`task-details-scroll`},xQ={key:1,class:`task-details-artifacts`},SQ=[`href`],CQ=H(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]||=Ie(Z(e=>n(`close`),[`stop`]),[`esc`])},[D(`header`,null,[D(`h2`,null,h(e.runtimeOnly?`临时子任务`:`任务详情`),1),D(`button`,{"aria-label":`关闭任务详情`,onClick:i[0]||=e=>n(`close`)},[W(Y,{name:`close`,size:20})])]),D(`div`,bQ,[e.runtimeOnly?z(``,!0):(u(),k(YZ,{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`,xQ,[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`},[W(Y,{name:`file`,size:16}),w(h(e.name),1)],8,SQ))),128))])):z(``,!0),e.runtimeOnly?(u(),k(yQ,{key:2,embedded:``,tasks:e.runtimeTasks},null,8,[`tasks`])):z(``,!0)])],544))}}),[[`__scopeId`,`data-v-5b054a06`]]);function wQ(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 TQ(e,t){return e.find(e=>e.id===t||e.sourceMessageIds?.includes(t))?.id??t}function EQ(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 DQ=e=>`conversation-sections-collapsed-v1:${e}`;function OQ(e){if(!e)return new Set;try{let t=JSON.parse(localStorage.getItem(DQ(e))??`[]`);return new Set(Array.isArray(t)?t.filter(e=>typeof e==`string`):[])}catch{return new Set}}function kQ(e,t){let n=O(OQ(e.value));f(e,e=>{n.value=OQ(e)});function r(r){let i=new Set(t()),a=new Set([...n.value].filter(e=>i.has(e)));if(a.delete(r)||a.add(r),n.value=a,e.value)try{localStorage.setItem(DQ(e.value),JSON.stringify([...a]))}catch{}}return{collapsed:n,toggle:r}}var AQ=[`aria-label`,`onKeydown`],jQ=[`placeholder`,`aria-label`],MQ=[`aria-label`,`aria-selected`,`tabindex`,`aria-controls`,`onClick`],NQ={key:0,class:`floating-resource-search__navigation`,"aria-label":`搜索范围`},PQ={key:0,class:`floating-resource-search__navigation-heading`},FQ=[`onClick`],IQ=[`id`,`role`,`aria-label`],LQ={key:0,class:`floating-resource-search__context`},RQ=[`role`],zQ={key:0,class:`floating-resource-search__section`},BQ=[`role`],VQ=[`role`,`aria-haspopup`,`onClick`],HQ={key:0,class:`floating-resource-search__icon floating-resource-search__icon--avatar`},UQ={key:1,class:`floating-resource-search__icon`},WQ={class:`floating-resource-search__copy`},GQ={key:0},KQ={key:2},qQ={key:0},JQ=`yaovi:sidebar-search`,YQ=`yaovi:sidebar-search-close`,XQ=H(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),s=O(``),c=O(null),g=O(null),_=O(null),y=null,b=O(``),x=U(()=>n.items.find(e=>e.id===b.value)),S=U(()=>x.value?.children??n.items),C=U(()=>s.value.trim().toLocaleLowerCase()),E=U(()=>{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=U(()=>E.value.map((e,t)=>({item:e,hasChildren:e.children!==void 0,showSection:!!(e.section&&e.section!==E.value[t-1]?.section)}))),j=U(()=>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&&(s.value=``,y=document.activeElement instanceof HTMLElement?document.activeElement:null,b.value=(n.split||n.tabbed)&&n.items[0]?.id||``,a.value=!0,r(`open`),await o(),c.value?.focus())}function N(){a.value&&(a.value=!1,s.value=``,b.value=``,document.dispatchEvent(new CustomEvent(YQ)),o(()=>{y?.isConnected&&y.focus()}))}async function P(e){if(e.children!==void 0){b.value=e.id,n.tabbed||(s.value=``,await o(),c.value?.focus());return}r(`select`,e.id),N()}async function I(){b.value=``,s.value=``,await o(),c.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(()=>_.value?.querySelector(`[aria-selected="true"]`)?.focus())}function B(e){let t=[...g.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&&c.value?.focus()}),m(()=>{document.addEventListener(JQ,M),document.addEventListener(YQ,N)}),i(()=>{document.removeEventListener(JQ,M),document.removeEventListener(YQ,N)}),(t,n)=>(u(),k(L,{to:`body`},[a.value?(u(),F(`div`,{key:0,class:`floating-resource-search__backdrop`,onClick:Z(N,[`self`])},[D(`section`,{ref_key:`panel`,ref:g,class:l([`floating-resource-search`,{"floating-resource-search--split":e.split}]),role:`dialog`,"aria-modal":`true`,"aria-label":e.label,onKeydown:[Ie(B,[`tab`]),Ie(Z(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},[W(Y,{name:`chevron-left`,size:17})])):z(``,!0),D(`label`,null,[W(Y,{name:`search`,size:18}),d(D(`input`,{ref_key:`input`,ref:c,"onUpdate:modelValue":n[0]||=e=>s.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]||=Ie(Z(t=>e.split||e.tabbed?N():x.value?I():N(),[`stop`,`prevent`]),[`esc`])},null,40,jQ),[[Q,s.value]])]),D(`button`,{type:`button`,"aria-label":`关闭搜索`,title:`关闭搜索`,onClick:N},[W(Y,{name:`close`,size:17})])]),e.tabbed?(u(),F(`nav`,{key:0,ref_key:`categories`,ref:_,class:`floating-resource-search__tabs`,role:`tablist`,"aria-label":`聊天分类`,onKeydown:[n[2]||=Ie(Z(e=>R(-1),[`prevent`]),[`left`]),n[3]||=Ie(Z(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(h(t.title),1),D(`small`,null,h(t.children?.length??0),1)],8,MQ))),128))],544)):z(``,!0),D(`div`,{class:l([`floating-resource-search__body`,{"floating-resource-search__body--split":e.split}])},[e.split?(u(),F(`nav`,NQ,[(u(!0),F(T,null,p(j.value,e=>(u(),F(T,{key:e.item.id},[e.showSection?(u(),F(`div`,PQ,h(e.item.section),1)):z(``,!0),D(`button`,{type:`button`,class:l({active:e.item.id===b.value}),onClick:t=>P(e.item)},[e.item.icon?(u(),k(Y,{key:0,name:e.item.icon,size:15},null,8,[`name`])):z(``,!0),D(`span`,null,h(e.item.title),1)],10,FQ)],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`,LQ,[D(`strong`,null,h(x.value.title),1),D(`span`,null,h(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`,zQ,h(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`,HQ,[e.item.avatarKind===`agent`?(u(),k(Ye,{key:0,name:e.item.title,avatar:e.item.avatar,state:e.item.avatarState,size:30},null,8,[`name`,`avatar`,`state`])):(u(),k(Me,{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`,UQ,[W(Y,{name:e.item.icon,size:16},null,8,[`name`])])):z(``,!0),D(`span`,WQ,[D(`strong`,null,h(e.item.title),1),e.item.subtitle?(u(),F(`small`,GQ,h(e.item.subtitle),1)):z(``,!0)]),e.item.meta?(u(),F(`small`,KQ,h(e.item.meta),1)):z(``,!0)],8,VQ),v(t.$slots,`item-actions`,{item:e.item},void 0,!0)],8,BQ)],64))),128)),E.value.length?z(``,!0):(u(),F(`p`,qQ,h(x.value?.emptyText||(x.value?`暂无${x.value.title}内容`:`没有匹配结果`)),1))],8,RQ)],8,IQ)],2),v(t.$slots,`footer`,{},void 0,!0)],42,AQ)])):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 QQ={key:0,class:`capsule__icon`},$Q={key:1,class:`capsule__name`},e$={key:0,class:`capsule__dot`,"aria-hidden":`true`},t$={class:`capsule__type`},n$=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:l([`capsule`,[`capsule--${e.size}`,{"capsule--interactive":e.as!==`span`&&e.as!==`div`,"capsule--tinted":!!e.tone}]]),style:s(e.tone?{"--capsule-tone":e.tone}:void 0),type:e.as===`button`?`button`:void 0},{default:S(()=>[t.$slots.icon?(u(),F(`span`,QQ,[v(t.$slots,`icon`)])):z(``,!0),e.name?(u(),F(`span`,$Q,h(e.name),1)):z(``,!0),e.type?(u(),F(T,{key:2},[e.name?(u(),F(`i`,e$)):z(``,!0),D(`span`,t$,h(e.type),1)],64)):z(``,!0),v(t.$slots,`default`),e.arrow?(u(),k(Y,{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`]))}}),r$={class:`system-message-notice`},i$={class:`capsule__name`},a$={key:1},o$={class:`capsule__name`,role:`status`},s$={class:`system-message-notice__details`},c$={class:`capsule__name`},l$=H(E({__name:`SystemMessageNotice`,props:{title:{},icon:{},href:{},accessibleLabel:{}},setup(e){return(t,n)=>(u(),F(`div`,r$,[e.href?(u(),k(n$,{key:0,as:`a`,class:`system-message-notice__label`,href:e.href,"aria-label":e.accessibleLabel||e.title,arrow:``},{icon:S(()=>[W(Y,{name:e.icon||`info`,size:14,"aria-hidden":`true`},null,8,[`name`])]),default:S(()=>[D(`span`,i$,h(e.title),1)]),_:1},8,[`href`,`aria-label`])):t.$slots.default?(u(),F(`details`,a$,[W(n$,{as:`summary`,class:`system-message-notice__label`,"aria-label":e.accessibleLabel||`${e.title},查看详情`,arrow:``},{icon:S(()=>[W(Y,{name:e.icon||`info`,size:14,"aria-hidden":`true`},null,8,[`name`])]),default:S(()=>[D(`span`,o$,h(e.title),1)]),_:1},8,[`aria-label`]),D(`div`,s$,[v(t.$slots,`default`,{},void 0,!0)])])):(u(),k(n$,{key:2,class:`system-message-notice__label`,role:`status`},{icon:S(()=>[W(Y,{name:e.icon||`info`,size:14,"aria-hidden":`true`},null,8,[`name`])]),default:S(()=>[D(`span`,c$,h(e.title),1)]),_:1}))]))}}),[[`__scopeId`,`data-v-b9599f8f`]]),u$={key:0},d$=H(E({__name:`MessageFailureNotice`,props:{failure:{}},setup(e){return(t,n)=>(u(),k(l$,{class:`failure-notice`,title:e.failure.title,icon:`info`},{default:S(()=>[D(`p`,null,h(e.failure.hint),1),e.failure.detail?(u(),F(`pre`,u$,h(e.failure.detail),1)):z(``,!0)]),_:1},8,[`title`]))}}),[[`__scopeId`,`data-v-739155c5`]]),f$=/^执行失败[::]\s*/;function p$(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`&&f$.test(t),r=e.error?.trim()||(n?t.replace(f$,``):``);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(f$,``):``,r].filter(Boolean))].filter((e,t,n)=>!n.some((n,r)=>r!==t&&n.includes(e))).join(`
|
|
250
|
+
`).map(e=>e.trim()).filter(Boolean);if(!e.length||e.length>12||e.some(e=>e.length>1e3)){y.value=`请填写 1 至 12 条验收要求,每条不超过 1000 字。`;return}_.value=!0,y.value=``;try{await n.saveCriteria(n.goal.id,j,e),await N()}catch(e){y.value=e instanceof Error?e.message:`保存失败,请重试`}finally{_.value=!1}}return(t,n)=>e.goal||e.assignments.length?(u(),F(`section`,{key:0,class:l([`task-plan`,{"task-plan--expanded":c.value,"task-plan--embedded":e.embedded}]),"aria-label":`目标进度`},[D(`header`,wZ,[e.embedded&&e.goal?(u(),F(`span`,{key:0,class:l([`task-plan__status`,`task-plan__status--${e.goal.status}`])},[n[4]||=D(`i`,null,null,-1),w(h(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":c.value,"aria-controls":V(m),onClick:n[0]||=e=>c.value?A():E()},[D(`span`,EZ,[W(Y,{name:`files`,size:17})]),D(`span`,DZ,[n[6]||=D(`strong`,null,`交付进展`,-1),e.goal?(u(),F(`span`,{key:0,class:l([`task-plan__status`,`task-plan__status--${e.goal.status}`])},[n[5]||=D(`i`,null,null,-1),w(h(r[e.goal.status]),1)],2)):z(``,!0)]),e.assignments.length?(u(),F(`strong`,OZ,[w(h(i.value)+`/`+h(e.assignments.length)+` `,1),n[7]||=D(`small`,null,`项完成`,-1)])):z(``,!0),W(Y,{class:`task-plan__header-chevron`,name:`chevron-down`,size:15})],8,TZ)),D(`div`,kZ,[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)])]),c.value?(u(),F(`div`,{key:0,id:V(m),class:`task-plan__content`,onKeydown:Ie(Z(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:l({complete:e.status===`complete`,active:[`running`,`review`].includes(e.status),failed:[`failed`,`blocked`].includes(e.status)})},null,2))),128))],8,jZ)):z(``,!0),e.assignments.length?(u(),F(`div`,MZ,[(u(!0),F(T,null,p(e.assignments,(e,t)=>(u(),F(`div`,{key:e.id,class:l({complete:e.status===`complete`,active:[`running`,`review`].includes(e.status),failed:[`failed`,`blocked`].includes(e.status)})},[D(`span`,null,[e.status===`complete`?(u(),k(Y,{key:0,name:`check`,size:11})):(u(),F(T,{key:1},[w(h(t+1),1)],64))]),D(`strong`,null,h(e.title),1)],2))),128))])):z(``,!0),e.goal?.result?(u(),F(`div`,NZ,[n[8]||=D(`small`,null,`最新结果`,-1),D(`p`,PZ,h(e.goal.result),1)])):z(``,!0),D(`details`,{open:e.embedded},[D(`summary`,null,[W(Y,{name:`file`,size:15}),n[9]||=D(`span`,null,`任务与验收详情`,-1),W(Y,{class:`task-plan__chevron`,name:`chevron-down`,size:14})]),D(`div`,IZ,[e.goal?(u(),F(`p`,LZ,h(e.goal.objective),1)):z(``,!0),e.goal?.result?(u(),F(`p`,RZ,h(e.goal.result),1)):z(``,!0),e.assignments.length?(u(),F(`ol`,zZ,[(u(!0),F(T,null,p(e.assignments,t=>(u(),F(`li`,{key:t.id},[D(`div`,null,[D(`strong`,null,h(t.title),1),D(`span`,null,h(t.status===`complete`?`已复核`:r[t.status]),1)]),D(`small`,null,[w(h(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(` · 临时助手`+h(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`,BZ,h(t.result),1)):z(``,!0),t.review?(u(),F(`p`,VZ,h(t.review),1)):z(``,!0)]))),128))])):z(``,!0),g.value?(u(),F(`form`,{key:3,onSubmit:Z(P,[`prevent`])},[D(`label`,null,[n[10]||=w(`验收要求`,-1),d(D(`textarea`,{ref_key:`editor`,ref:b,"onUpdate:modelValue":n[3]||=e=>v.value=e,disabled:_.value,rows:`4`,"aria-describedby":`criteria-help`},null,8,HZ),[[Q,v.value]])]),n[11]||=D(`small`,{id:`criteria-help`},`每行一条,描述你需要的交付结果。`,-1),y.value?(u(),F(`p`,UZ,h(y.value),1)):z(``,!0),D(`div`,WZ,[D(`button`,{type:`submit`,disabled:_.value||!s.value},h(_.value?`保存中…`:`保存验收要求`),9,GZ),D(`button`,{type:`button`,disabled:_.value,onClick:N},`取消`,8,KZ)])],32)):(u(),F(T,{key:4},[e.goal?.acceptanceCriteria.length?(u(),F(`ul`,qZ,[(u(!0),F(T,null,p(e.goal.acceptanceCriteria,(t,n)=>(u(),F(`li`,{key:n},[D(`span`,null,h(e.goal.checks?.some(e=>e.criterion===n&&e.passed)?`已验收`:`待验收`),1),w(` `+h(t),1),e.goal.checks?.find(e=>e.criterion===n)?.evidence?(u(),F(`p`,JZ,h(e.goal.checks.find(e=>e.criterion===n)?.evidence),1)):z(``,!0)]))),128))])):z(``,!0),s.value?(u(),F(`button`,{key:1,ref_key:`editButton`,ref:S,type:`button`,onClick:M},`调整验收要求`,512)):z(``,!0)],64))])],8,FZ)],40,AZ)):z(``,!0)],2)):z(``,!0)}}),[[`__scopeId`,`data-v-e5c8af94`]]);function XZ(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 ZZ(e=[],t=[]){return t.map(t=>{let n=e.find(e=>e.id===t.id);return n?{...n,...t,records:XZ(n.records,t.records)}:t})}function QZ(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 $Z(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 eQ=e=>({start:`开始`,text:`输出`,thinking:`思考`,"tool-start":`调用工具`,"tool-result":`工具结果`,progress:`进展`,complete:`完成`,error:`失败`,interrupted:`已中断`})[e.kind]??e.kind;async function tQ(e,t){let n=XZ([],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=XZ(n,i.records);if(!i.records.some(t=>t.seq>r&&t.seq<n[e].seq))return a;n=a}}var nQ={key:0,role:`status`},rQ={class:`record-toolbar`},iQ=[`disabled`],aQ={key:0,role:`alert`},oQ=[`disabled`],sQ={key:1},cQ=[`data-record-kind`],lQ={key:0},uQ=[`disabled`,`onClick`],dQ={key:2},fQ=H(E({__name:`KernelTaskRecords`,props:{task:{}},setup(e){let t=e,n=O(!1),r=O(!1),a=O(0),s=O(!1),c=O(``),l=O([]),d=O(),m=O(),g=O({}),_=O(``),v=U(()=>XZ(l.value,t.task.records)),y=U(()=>d.value??t.task.hasOlderRecords??!t.task.records?.length),b=U(()=>`/api/app/runtime-tasks/${encodeURIComponent(t.task.id)}`),x=!1,S=!1,C=!1,E=!1;i(()=>{x=!0});async function k(){await o(),m.value&&(m.value.scrollTop=m.value.scrollHeight)}function A(){r.value=!1,a.value=0,k()}function j(){let e=m.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 tQ(v.value,e=>X(`${b.value}/records?after=${e}&limit=50`));x||(l.value=XZ(l.value,e))}while(C&&!x&&n.value)}catch(e){x||(c.value=e instanceof Error?e.message:`断线期间的记录未补齐,请重试`)}finally{S=!1}}}f([n,()=>t.task.records],()=>{M()});async function N(){if(s.value)return;s.value=!0,c.value=``,r.value=!0;let e=v.value[0]?.seq,t=m.value,n=t?.scrollHeight??0,i=t?.scrollTop??0;try{let r=await X(`${b.value}/records?limit=50${e===void 0?``:`&before=${e}`}`);if(x)return;l.value=XZ(l.value,r.records),d.value=r.hasMore,await o(),t&&(t.scrollTop=i+t.scrollHeight-n)}catch(e){x||(c.value=e instanceof Error?e.message:`记录读取失败,请重试`)}finally{s.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,c.value=``;let t=g.value[e.id],n=t?.next??0;try{let r=await X(`${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||(c.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`,nQ,`· 有 `+h(a.value)+` 条新记录`,1)):z(``,!0)]),n.value?(u(),F(T,{key:0},[D(`div`,rQ,[D(`button`,{type:`button`,disabled:s.value,onClick:t[0]||=e=>r.value?A():r.value=!0},h(r.value?`继续跟随`:`暂停滚动`),9,iQ),a.value?(u(),F(`button`,{key:0,type:`button`,onClick:A},`查看 `+h(a.value)+` 条新记录`,1)):z(``,!0)]),c.value?(u(),F(`p`,aQ,[w(h(c.value)+` `,1),D(`button`,{type:`button`,onClick:M},`重试补齐`)])):z(``,!0),D(`div`,{ref_key:`list`,ref:m,class:`record-list`,tabindex:`0`,"aria-label":`子任务执行记录`,onScroll:j},[y.value?(u(),F(`button`,{key:0,type:`button`,disabled:s.value,onClick:N},h(s.value?`正在读取…`:`加载更早记录`),9,oQ)):z(``,!0),!v.value.length&&!s.value?(u(),F(`p`,sQ,`暂无执行记录。`)):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(h(V(eQ)(e)),1),e.toolName?(u(),F(T,{key:0},[w(` · `+h(e.toolName),1)],64)):z(``,!0)]),D(`time`,null,h(new Date(e.at).toLocaleTimeString()),1)]),D(`pre`,null,h(g.value[e.id]?.text??e.text),1),e.status?(u(),F(`small`,lQ,h(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)},h(_.value===e.id?`正在读取…`:g.value[e.id]?`加载更多工具结果`:`查看完整工具结果`),9,uQ)):e.truncated&&!e.resultId?(u(),F(`small`,dQ,`此记录仅保留摘要。`)):z(``,!0)],8,cQ))),128))],544)],64)):z(``,!0)],32))}}),[[`__scopeId`,`data-v-eca920db`]]),pQ=[`open`],mQ={key:0,class:`execution-content`},hQ=[`data-task-id`],gQ={key:0},_Q={key:1,class:`task-error`},vQ={key:2},yQ=H(E({__name:`KernelTaskDetails`,props:{tasks:{},embedded:{type:Boolean}},setup(e){let t=e,n=O(!!t.embedded),r=O(Date.now()),a=U(()=>$Z(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:l([`execution-details`,{embedded:e.embedded}]),open:e.embedded,onToggle:i[0]||=e=>n.value=e.target.open},[D(`summary`,null,`执行详情 · `+h(e.tasks.length)+` 项内部子任务`,1),n.value?(u(),F(`div`,mQ,[(u(!0),F(T,null,p(a.value,({task:e,depth:t})=>(u(),F(`article`,{key:e.id,style:s({marginInlineStart:`${Math.min(t,4)*12}px`}),"data-task-id":e.id},[D(`header`,null,[D(`strong`,null,h(e.goal),1),D(`span`,null,h(e.status===`complete`?`执行完成`:V(te)(e.status))+` · `+h(V(QZ)(e,r.value)),1)]),t?(u(),F(`small`,gQ,`第 `+h(t+1)+` 层子任务`,1)):z(``,!0),e.failureReason?(u(),F(`p`,_Q,h(e.failureReason),1)):z(``,!0),e.result?(u(),F(`p`,vQ,h(e.result),1)):z(``,!0),W(fQ,{task:e},null,8,[`task`])],12,hQ))),128))])):z(``,!0)],42,pQ)):z(``,!0)}}),[[`__scopeId`,`data-v-b3c13d27`]]),bQ={class:`task-details-scroll`},xQ={key:1,class:`task-details-artifacts`},SQ=[`href`],CQ=H(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]||=Ie(Z(e=>n(`close`),[`stop`]),[`esc`])},[D(`header`,null,[D(`h2`,null,h(e.runtimeOnly?`临时子任务`:`任务详情`),1),D(`button`,{"aria-label":`关闭任务详情`,onClick:i[0]||=e=>n(`close`)},[W(Y,{name:`close`,size:20})])]),D(`div`,bQ,[e.runtimeOnly?z(``,!0):(u(),k(YZ,{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`,xQ,[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`},[W(Y,{name:`file`,size:16}),w(h(e.name),1)],8,SQ))),128))])):z(``,!0),e.runtimeOnly?(u(),k(yQ,{key:2,embedded:``,tasks:e.runtimeTasks},null,8,[`tasks`])):z(``,!0)])],544))}}),[[`__scopeId`,`data-v-5b054a06`]]);function wQ(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 TQ(e,t){return e.find(e=>e.id===t||e.sourceMessageIds?.includes(t))?.id??t}function EQ(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 DQ=e=>`conversation-sections-collapsed-v1:${e}`;function OQ(e){if(!e)return new Set;try{let t=JSON.parse(localStorage.getItem(DQ(e))??`[]`);return new Set(Array.isArray(t)?t.filter(e=>typeof e==`string`):[])}catch{return new Set}}function kQ(e,t){let n=O(OQ(e.value));f(e,e=>{n.value=OQ(e)});function r(r){let i=new Set(t()),a=new Set([...n.value].filter(e=>i.has(e)));if(a.delete(r)||a.add(r),n.value=a,e.value)try{localStorage.setItem(DQ(e.value),JSON.stringify([...a]))}catch{}}return{collapsed:n,toggle:r}}var AQ=[`aria-label`,`onKeydown`],jQ=[`placeholder`,`aria-label`],MQ=[`aria-label`,`aria-selected`,`tabindex`,`aria-controls`,`onClick`],NQ={key:0,class:`floating-resource-search__navigation`,"aria-label":`搜索范围`},PQ={key:0,class:`floating-resource-search__navigation-heading`},FQ=[`onClick`],IQ=[`id`,`role`,`aria-label`],LQ={key:0,class:`floating-resource-search__context`},RQ=[`role`],zQ={key:0,class:`floating-resource-search__section`},BQ=[`role`],VQ=[`role`,`aria-haspopup`,`onClick`],HQ={key:0,class:`floating-resource-search__icon floating-resource-search__icon--avatar`},UQ={key:1,class:`floating-resource-search__icon`},WQ={class:`floating-resource-search__copy`},GQ={key:0},KQ={key:2},qQ={key:0},JQ=`yaovi:sidebar-search`,YQ=`yaovi:sidebar-search-close`,XQ=H(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),s=O(``),c=O(null),g=O(null),_=O(null),y=null,b=O(``),x=U(()=>n.items.find(e=>e.id===b.value)),S=U(()=>x.value?.children??n.items),C=U(()=>s.value.trim().toLocaleLowerCase()),E=U(()=>{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=U(()=>E.value.map((e,t)=>({item:e,hasChildren:e.children!==void 0,showSection:!!(e.section&&e.section!==E.value[t-1]?.section)}))),j=U(()=>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&&(s.value=``,y=document.activeElement instanceof HTMLElement?document.activeElement:null,b.value=(n.split||n.tabbed)&&n.items[0]?.id||``,a.value=!0,r(`open`),await o(),c.value?.focus())}function N(){a.value&&(a.value=!1,s.value=``,b.value=``,document.dispatchEvent(new CustomEvent(YQ)),o(()=>{y?.isConnected&&y.focus()}))}async function P(e){if(e.children!==void 0){b.value=e.id,n.tabbed||(s.value=``,await o(),c.value?.focus());return}r(`select`,e.id),N()}async function I(){b.value=``,s.value=``,await o(),c.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(()=>_.value?.querySelector(`[aria-selected="true"]`)?.focus())}function B(e){let t=[...g.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&&c.value?.focus()}),m(()=>{document.addEventListener(JQ,M),document.addEventListener(YQ,N)}),i(()=>{document.removeEventListener(JQ,M),document.removeEventListener(YQ,N)}),(t,n)=>(u(),k(L,{to:`body`},[a.value?(u(),F(`div`,{key:0,class:`floating-resource-search__backdrop`,onClick:Z(N,[`self`])},[D(`section`,{ref_key:`panel`,ref:g,class:l([`floating-resource-search`,{"floating-resource-search--split":e.split}]),role:`dialog`,"aria-modal":`true`,"aria-label":e.label,onKeydown:[Ie(B,[`tab`]),Ie(Z(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},[W(Y,{name:`chevron-left`,size:17})])):z(``,!0),D(`label`,null,[W(Y,{name:`search`,size:18}),d(D(`input`,{ref_key:`input`,ref:c,"onUpdate:modelValue":n[0]||=e=>s.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]||=Ie(Z(t=>e.split||e.tabbed?N():x.value?I():N(),[`stop`,`prevent`]),[`esc`])},null,40,jQ),[[Q,s.value]])]),D(`button`,{type:`button`,"aria-label":`关闭搜索`,title:`关闭搜索`,onClick:N},[W(Y,{name:`close`,size:17})])]),e.tabbed?(u(),F(`nav`,{key:0,ref_key:`categories`,ref:_,class:`floating-resource-search__tabs`,role:`tablist`,"aria-label":`聊天分类`,onKeydown:[n[2]||=Ie(Z(e=>R(-1),[`prevent`]),[`left`]),n[3]||=Ie(Z(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(h(t.title),1),D(`small`,null,h(t.children?.length??0),1)],8,MQ))),128))],544)):z(``,!0),D(`div`,{class:l([`floating-resource-search__body`,{"floating-resource-search__body--split":e.split}])},[e.split?(u(),F(`nav`,NQ,[(u(!0),F(T,null,p(j.value,e=>(u(),F(T,{key:e.item.id},[e.showSection?(u(),F(`div`,PQ,h(e.item.section),1)):z(``,!0),D(`button`,{type:`button`,class:l({active:e.item.id===b.value}),onClick:t=>P(e.item)},[e.item.icon?(u(),k(Y,{key:0,name:e.item.icon,size:15},null,8,[`name`])):z(``,!0),D(`span`,null,h(e.item.title),1)],10,FQ)],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`,LQ,[D(`strong`,null,h(x.value.title),1),D(`span`,null,h(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`,zQ,h(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`,HQ,[e.item.avatarKind===`agent`?(u(),k(Ye,{key:0,name:e.item.title,avatar:e.item.avatar,state:e.item.avatarState,size:30},null,8,[`name`,`avatar`,`state`])):(u(),k(Me,{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`,UQ,[W(Y,{name:e.item.icon,size:16},null,8,[`name`])])):z(``,!0),D(`span`,WQ,[D(`strong`,null,h(e.item.title),1),e.item.subtitle?(u(),F(`small`,GQ,h(e.item.subtitle),1)):z(``,!0)]),e.item.meta?(u(),F(`small`,KQ,h(e.item.meta),1)):z(``,!0)],8,VQ),v(t.$slots,`item-actions`,{item:e.item},void 0,!0)],8,BQ)],64))),128)),E.value.length?z(``,!0):(u(),F(`p`,qQ,h(x.value?.emptyText||(x.value?`暂无${x.value.title}内容`:`没有匹配结果`)),1))],8,RQ)],8,IQ)],2),v(t.$slots,`footer`,{},void 0,!0)],42,AQ)])):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 QQ={key:0,class:`capsule__icon`},$Q={key:1,class:`capsule__name`},e$={key:0,class:`capsule__dot`,"aria-hidden":`true`},t$={class:`capsule__type`},n$=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:l([`capsule`,[`capsule--${e.size}`,{"capsule--interactive":e.as!==`span`&&e.as!==`div`,"capsule--tinted":!!e.tone}]]),style:s(e.tone?{"--capsule-tone":e.tone}:void 0),type:e.as===`button`?`button`:void 0},{default:S(()=>[t.$slots.icon?(u(),F(`span`,QQ,[v(t.$slots,`icon`)])):z(``,!0),e.name?(u(),F(`span`,$Q,h(e.name),1)):z(``,!0),e.type?(u(),F(T,{key:2},[e.name?(u(),F(`i`,e$)):z(``,!0),D(`span`,t$,h(e.type),1)],64)):z(``,!0),v(t.$slots,`default`),e.arrow?(u(),k(Y,{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`]))}}),r$={class:`system-message-notice`},i$={class:`capsule__name`},a$={key:1},o$={class:`capsule__name`,role:`status`},s$={class:`system-message-notice__details`},c$={class:`capsule__name`},l$=H(E({__name:`SystemMessageNotice`,props:{title:{},icon:{},href:{},accessibleLabel:{}},setup(e){return(t,n)=>(u(),F(`div`,r$,[e.href?(u(),k(n$,{key:0,as:`a`,class:`system-message-notice__label`,href:e.href,"aria-label":e.accessibleLabel||e.title,arrow:``},{icon:S(()=>[W(Y,{name:e.icon||`info`,size:14,"aria-hidden":`true`},null,8,[`name`])]),default:S(()=>[D(`span`,i$,h(e.title),1)]),_:1},8,[`href`,`aria-label`])):t.$slots.default?(u(),F(`details`,a$,[W(n$,{as:`summary`,class:`system-message-notice__label`,"aria-label":e.accessibleLabel||`${e.title},查看详情`,arrow:``},{icon:S(()=>[W(Y,{name:e.icon||`info`,size:14,"aria-hidden":`true`},null,8,[`name`])]),default:S(()=>[D(`span`,o$,h(e.title),1)]),_:1},8,[`aria-label`]),D(`div`,s$,[v(t.$slots,`default`,{},void 0,!0)])])):(u(),k(n$,{key:2,class:`system-message-notice__label`,role:`status`},{icon:S(()=>[W(Y,{name:e.icon||`info`,size:14,"aria-hidden":`true`},null,8,[`name`])]),default:S(()=>[D(`span`,c$,h(e.title),1)]),_:1}))]))}}),[[`__scopeId`,`data-v-b9599f8f`]]),u$={key:0},d$=H(E({__name:`MessageFailureNotice`,props:{failure:{}},setup(e){return(t,n)=>(u(),k(l$,{class:`failure-notice`,title:e.failure.title,icon:`info`},{default:S(()=>[D(`p`,null,h(e.failure.hint),1),e.failure.detail?(u(),F(`pre`,u$,h(e.failure.detail),1)):z(``,!0)]),_:1},8,[`title`]))}}),[[`__scopeId`,`data-v-739155c5`]]),f$=/^执行失败[::]\s*/;function p$(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`&&f$.test(t),r=e.error?.trim()||(n?t.replace(f$,``):``);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(f$,``):``,r].filter(Boolean))].filter((e,t,n)=>!n.some((n,r)=>r!==t&&n.includes(e))).join(`
|
|
251
251
|
|
|
252
252
|
`),s=/timeout|timed?\s*out|no SSE events|didn[’']t respond in time|超时/i.test(r||o);return{title:e.role===`user`?`消息未发送`:s?`响应超时`:`回复暂时中断`,hint:e.role===`user`?`请检查连接后重新发送。`:`请稍后重试,或切换模型。`,detail:o,key:r||o,replacesContent:a}}function m$(e){return e.filter((t,n)=>{let r=e[n-1];if(!r||r.role!==`assistant`||t.role!==`system`||!/^执行失败[::]/.test(t.content))return!0;let i=p$(t),a=p$(r);if(!i?.key||i.key!==a?.key||t.attachments?.length||t.tools?.length||t.reasoning)return!0;if(t.runId&&r.runId)return t.runId!==r.runId;let o=new Date(t.createdAt??``).getTime(),s=new Date(r.createdAt??``).getTime();return!Number.isFinite(o)||!Number.isFinite(s)||o<s||o-s>2e3})}function h$(e){if(e.communication||e.role===`user`)return;if(e.timelineKind===`delegation-complete`)return{title:`子任务已完成`,icon:`groups`};if(e.timelineKind===`background-process`){let t=e.timelineMetadata?.exit_code;return{title:e.timelineMetadata?.signal?`后台子任务已终止`:t==null?`后台子任务已结束`:Number(t)===0?`后台子任务已完成`:`后台子任务失败`,icon:`tools`}}if(e.role!==`system`&&e.timelineKind!==`system`)return;let t=e.content.trim();if(e.timelineMetadata?.eventKind===`compaction`||/^\[context compaction/i.test(t))return{title:`上下文已压缩`,icon:`archive`};if(/^(?:由管理员分派的子任务|(?:已)?分派(?:了)?(?:终审|子)?任务)/.test(t))return{title:`已分派子任务`,icon:`branch`};if(/^执行失败[::]/.test(t))return{title:/timeout|timed?\s*out|超时|no SSE events/i.test(t)?`响应超时`:`回复暂时中断`,icon:`info`};if(/^(?:回复重点|重点提示)[::]?/.test(t))return{title:`回复重点`,icon:`info`};if(/^(?:任务|子任务).*(?:已完成|完成通知)/.test(t.split(`
|
|
253
|
-
`)[0]||``))return{title:`任务已完成`,icon:`check`};let n=t.match(/(?:changed to|切换为)\s*([^\s,。\]]+?)(?=\s+via\b|\s*$|\])/i)?.[1];return{title:n?`模型已切换`:`系统提示`,icon:n?`settings`:`info`}}var g$={key:0},_$=E({__name:`MessageSystemEvent`,props:{message:{}},setup(e){let t=e,n=U(()=>h$(t.message)),r=U(()=>{let e=t.message.timelineMetadata;if(!e)return``;if(t.message.timelineKind===`delegation-complete`){let t=Number(e.completed_count??0),n=Number(e.failed_count??0),r=Number(e.duration_seconds??0),i=r>0?` · 耗时 ${Math.round(r)} 秒`:``;return`${Number(e.task_count)||t+n||1} 项 · ${t} 完成 · ${n} 失败${i}`}return t.message.timelineKind===`background-process`?[e.exit_code==null?``:`退出码:${e.exit_code}`,e.signal?`信号:${e.signal}`:``].filter(Boolean).join(` · `):``});return(t,i)=>n.value?(u(),k(l$,{key:0,title:n.value.title,icon:n.value.icon},{default:S(()=>[r.value?(u(),F(`p`,g$,h(r.value),1)):z(``,!0),e.message.content?(u(),k(ZK,{key:1,"process-content":``,content:e.message.content},null,8,[`content`])):z(``,!0)]),_:1},8,[`title`,`icon`])):z(``,!0)}}),v$=I(null),y$=[`id`,`aria-label`],b$={class:`peer-drawer__inner`},x$={class:`peer-drawer__panel`},S$={key:0,class:`peer-drawer__state`,role:`status`},C$={key:1,class:`peer-drawer__state peer-drawer__state--error`,role:`alert`},w$={key:0,class:`peer-drawer__note`},T$={key:1,class:`peer-drawer__note`},E$={class:`peer-drawer__messages`},D$={class:`peer-drawer__meta`},O$={key:0},k$={class:`peer-drawer__content`},A$={key:0,class:`peer-drawer__error`},j$={key:1,class:`peer-drawer__files`},M$=[`onClick`],N$={key:2,class:`peer-drawer__progress`,"aria-label":`对方进度`},P$={key:0},F$={key:0,class:`peer-drawer__steps`},I$={key:3,class:`peer-drawer__note`},L$={key:4,class:`peer-drawer__actions`},R$={key:1},z$=H(E({__name:`PeerThreadDrawer`,props:{id:{},peerMessageId:{},conversationId:{default:``},readOnly:{type:Boolean,default:!1}},emits:[`close`,`openChat`,`previewFile`],setup(e,{emit:t}){let n=e,r=t,a=I(),o=O(!0),s=O(``),c=O(Date.now()),d,g,_=0,v;async function y(e=!1){d?.abort();let t=new AbortController;d=t,e||(o.value=!0,s.value=``);try{let e=await X(`/api/app/workspace/collaboration/${encodeURIComponent(n.peerMessageId)}/thread`,{signal:t.signal});d===t&&(a.value=e,s.value=``)}catch(e){d===t&&!t.signal.aborted&&!a.value&&(s.value=e instanceof Error?e.message:`详情没加载出来`)}finally{d===t&&(o.value=!1,d=void 0)}}function b(e){let t=Date.now()+e;g!==void 0&&_<=t||(window.clearTimeout(g),_=t,g=window.setTimeout(()=>{g=void 0,y(!0)},e))}f(v$,e=>{let t=a.value;!e||!t||(e.keys.has(`chain:${t.chainId}`)?b(300):t.progress&&e.keys.has(`run:${t.progress.runId}`)&&b(2e3))});let x=U(()=>!!a.value?.progress&&a.value.progress.finishedAt===null&&a.value.progress.startedAt!==null);f(x,e=>{window.clearInterval(v),v=void 0,e&&(c.value=Date.now(),v=window.setInterval(()=>{c.value=Date.now()},1e3))},{immediate:!0}),m(()=>{y()}),i(()=>{d?.abort(),window.clearTimeout(g),window.clearInterval(v)});let S=U(()=>a.value?.messages.find(e=>e.id===a.value?.focusId)),C={queued:`排着队`,running:`正在处理`,waiting:`在等补充信息`,complete:`处理完了`,failed:`没成功`,stopped:`已停止`,uncertain:`结果还没确认`},E={running:`进行中`,complete:`完成`,failed:`失败`,interrupted:`已中断`};function k(e){let t=Math.max(0,Math.round(e/1e3));return t<60?`${t} 秒`:t<3600?`${Math.floor(t/60)} 分 ${t%60} 秒`:`${Math.floor(t/3600)} 小时 ${Math.floor(t%3600/60)} 分`}let A=U(()=>{let e=a.value?.progress;return e?.startedAt?k((e.finishedAt??c.value)-e.startedAt):``}),j=U(()=>{let e=a.value,t=S.value;if(!(!e||!t)){if(e.chats.destination.id!==n.conversationId)return{target:e.chats.destination,name:t.to.name};if(e.chats.origin.id!==n.conversationId)return{target:e.chats.origin,name:t.from.name}}});function M(e){return e<1024?`${e} B`:e<1048576?`${(e/1024).toFixed(1)} KB`:`${(e/1048576).toFixed(1)} MB`}return(t,n)=>(u(),F(`div`,{id:e.id,class:`peer-drawer`,role:`region`,"aria-label":S.value?`${S.value.from.name}与${S.value.to.name}的往来详情`:`往来详情`,onKeydown:n[2]||=Ie(Z(e=>r(`close`),[`stop`,`prevent`]),[`esc`])},[D(`div`,b$,[D(`div`,x$,[o.value&&!a.value?(u(),F(`p`,S$,`正在加载详情…`)):s.value?(u(),F(`p`,C$,[w(h(s.value),1),D(`button`,{type:`button`,onClick:n[0]||=e=>y()},`重试`)])):a.value?(u(),F(T,{key:2},[a.value.private?(u(),F(`p`,w$,`这次往来涉及私人任务,只显示概况。`)):z(``,!0),a.value.truncated?(u(),F(`p`,T$,`只显示最近 32 条。`)):z(``,!0),D(`ol`,E$,[(u(!0),F(T,null,p(a.value.messages,e=>(u(),F(`li`,{key:e.id,class:l({"peer-drawer__message--focus":e.id===a.value.focusId})},[D(`div`,D$,[W(Ye,{name:e.from.name,avatar:e.from.avatar,size:16,animated:!1,"aria-hidden":`true`},null,8,[`name`,`avatar`]),D(`strong`,null,h(e.from.name),1),n[3]||=D(`span`,{"aria-hidden":`true`},`→`,-1),D(`span`,null,h(e.to.name),1),D(`time`,null,h(V(EV)(e.createdAt)),1),e.status===`failed`||e.status===`stopped`?(u(),F(`em`,O$,h(e.status===`failed`?`没成功`:`已停止`),1)):z(``,!0)]),D(`p`,k$,h(e.content),1),e.error?(u(),F(`p`,A$,h(e.error),1)):z(``,!0),e.files.length?(u(),F(`ul`,j$,[(u(!0),F(T,null,p(e.files,e=>(u(),F(`li`,{key:e.id},[D(`button`,{type:`button`,onClick:t=>r(`previewFile`,{name:e.name,url:`/api/app/files/${e.id}/${e.mimeType.startsWith(`image/`)?`preview`:`download`}`})},[w(h(e.name),1),D(`small`,null,h(M(e.size)),1)],8,M$)]))),128))])):z(``,!0)],2))),128))]),a.value.progress?(u(),F(`section`,N$,[D(`p`,null,[D(`strong`,null,h(a.value.progress.agent.name),1),w(h(C[a.value.progress.status]),1),A.value?(u(),F(`span`,P$,` · 用时 `+h(A.value),1)):z(``,!0)]),a.value.progress.steps.length?(u(),F(`ol`,F$,[(u(!0),F(T,null,p(a.value.progress.steps,(e,t)=>(u(),F(`li`,{key:t,class:l(`peer-drawer__step--${e.status}`)},[D(`code`,null,h(e.label),1),D(`small`,null,h(E[e.status]),1)],2))),128))])):z(``,!0)])):z(``,!0),a.value.stopped?(u(),F(`p`,I$,`这次往来已经停了。`)):z(``,!0),j.value&&!e.readOnly?(u(),F(`div`,L$,[j.value.target.available?(u(),F(`button`,{key:0,type:`button`,onClick:n[1]||=e=>r(`openChat`,{conversationId:j.value.target.id,...j.value.target.taskId?{taskId:j.value.target.taskId}:{}})},`打开与 `+h(j.value.name)+` 的聊天`,1)):(u(),F(`small`,R$,h(j.value.target.reason||`对方的聊天现在打不开`),1))])):z(``,!0)],64)):z(``,!0)])])],40,y$))}}),[[`__scopeId`,`data-v-d1418e5b`]]),B$={class:`empty-state`},V$={class:`empty-state__mark`},H$={key:0},U$=H(E({__name:`EmptyState`,props:{icon:{default:`chat`},title:{},description:{default:``},actionLabel:{default:``}},emits:[`action`],setup(e,{emit:t}){let n=t;return(t,r)=>(u(),F(`div`,B$,[D(`div`,V$,[W(Y,{name:e.icon,size:23},null,8,[`name`])]),D(`h2`,null,h(e.title),1),e.description?(u(),F(`p`,H$,h(e.description),1)):z(``,!0),e.actionLabel?(u(),F(`button`,{key:1,class:`solid-button`,type:`button`,onClick:r[0]||=e=>n(`action`)},h(e.actionLabel),1)):z(``,!0)]))}}),[[`__scopeId`,`data-v-eb3598e4`]]),W$=[`aria-label`],G$=H(E({__name:`TypingIndicator`,props:{avatarName:{},avatar:{},label:{}},setup(e){return(t,n)=>(u(),F(`div`,{class:`thinking-indicator`,role:`status`,"aria-live":`polite`,"aria-label":e.label||`机器人正在输入`,"data-testid":`chat-run-thinking-dots`},[W(Ye,{class:`thinking-indicator__avatar`,name:e.avatarName,avatar:e.avatar,size:20,state:`working`,ribbons:!1,"aria-hidden":`true`},null,8,[`name`,`avatar`]),e.label?(u(),F(`span`,{key:0,class:l([`thinking-indicator__label`,{"thinking-indicator__label--breath":!!e.label}])},h(e.label),3)):z(``,!0)],8,W$))}}),[[`__scopeId`,`data-v-ed003172`]]),K$=[`aria-labelledby`],q$={class:`interaction-card__heading`},J$={class:`interaction-card__icon`},Y$=[`id`],X$={key:0,class:`interaction-card__prompt`},Z$={key:1,class:`interaction-card__details`},Q$={key:2,class:`interaction-card__actions`},$$=[`disabled`],e1=[`disabled`],t1={key:0,class:`interaction-card__options`},n1=[`value`,`disabled`,`onChange`],r1={class:`interaction-card__custom`},i1=[`for`],a1={class:`interaction-card__custom-row`},o1=[`id`,`disabled`],s1=[`disabled`],c1=H(E({__name:`InteractionCard`,props:{interaction:{},busy:{type:Boolean}},emits:[`approve`,`clarify`],setup(e,{emit:t}){let n=e,r=t,i=O(``),a=O(``),o=U(()=>a.value.trim()||i.value);function s(e){i.value=e,a.value=``}function c(){!o.value||n.busy||r(`clarify`,o.value)}return f(()=>n.interaction.id,()=>{i.value=``,a.value=``}),(t,n)=>(u(),F(`section`,{class:l([`interaction-card`,`interaction-card--${e.interaction.kind}`]),"aria-live":`polite`,"aria-labelledby":`interaction-title-${e.interaction.id}`},[n[8]||=D(`span`,{class:`interaction-card__handle`,"aria-hidden":`true`},null,-1),D(`div`,q$,[D(`span`,J$,[W(Y,{name:e.interaction.kind===`approval`?`check`:`chat`,size:18},null,8,[`name`])]),D(`div`,null,[D(`small`,null,h(e.interaction.kind===`approval`?`需要审批`:`需要你的回答`),1),D(`strong`,{id:`interaction-title-${e.interaction.id}`},h(e.interaction.title||e.interaction.prompt),9,Y$)])]),e.interaction.title?(u(),F(`p`,X$,h(e.interaction.prompt),1)):z(``,!0),e.interaction.detail?(u(),F(`details`,Z$,[D(`summary`,null,[n[5]||=w(`查看详情`,-1),W(Y,{name:`chevron-down`,size:13})]),D(`pre`,null,h(e.interaction.detail),1)])):z(``,!0),e.interaction.kind===`approval`?(u(),F(`div`,Q$,[D(`button`,{class:`quiet-button`,type:`button`,disabled:e.busy,onClick:n[0]||=e=>r(`approve`,!1)},`拒绝`,8,$$),D(`button`,{class:`solid-button`,type:`button`,disabled:e.busy,onClick:n[1]||=e=>r(`approve`,!0)},`允许`,8,e1)])):(u(),F(`form`,{key:3,class:`interaction-card__answer`,onSubmit:Z(c,[`prevent`])},[e.interaction.options?.length?(u(),F(`fieldset`,t1,[n[6]||=D(`legend`,null,`请选择一个回答`,-1),(u(!0),F(T,null,p(e.interaction.options,t=>(u(),F(`label`,{key:t,class:l({selected:i.value===t})},[d(D(`input`,{"onUpdate:modelValue":n[2]||=e=>i.value=e,type:`radio`,value:t,disabled:e.busy,onChange:e=>s(t)},null,40,n1),[[Ue,i.value]]),D(`span`,null,h(t),1),i.value===t?(u(),k(Y,{key:0,name:`check`,size:15})):z(``,!0)],2))),128))])):z(``,!0),D(`div`,r1,[D(`label`,{for:`interaction-answer-${e.interaction.id}`},`其他回答`,8,i1),D(`div`,a1,[d(D(`textarea`,{id:`interaction-answer-${e.interaction.id}`,"onUpdate:modelValue":n[3]||=e=>a.value=e,rows:`2`,disabled:e.busy,placeholder:`补充你的想法(可选)`,onInput:n[4]||=e=>i.value=``},null,40,o1),[[Q,a.value]]),D(`button`,{class:`solid-button`,type:`submit`,disabled:e.busy||!o.value},[w(h(e.busy?`提交中…`:`提交回答`),1),e.busy?z(``,!0):(u(),k(Y,{key:0,name:`arrow-up`,size:14}))],8,s1)])]),n[7]||=D(`small`,{class:`interaction-card__hint`},`选择预设答案,或输入你自己的回答`,-1)],32))],10,K$))}}),[[`__scopeId`,`data-v-66a47616`]]);function l1(e,t){return t===!0&&!!e?.includes(`full_access`)}var u1=[`aria-busy`],d1={class:`workspace-approval__heading`},f1={class:`workspace-approval__copy`},p1={class:`workspace-approval__request`},m1=[`aria-expanded`],h1={key:0,class:`workspace-approval__details`},g1=[`disabled`],_1={class:`workspace-approval__actions`},v1=[`disabled`],y1={key:0,class:`workspace-approval__automatic`},b1=[`disabled`],x1=[`disabled`],S1={key:1,class:`workspace-approval__full`},C1=[`disabled`],w1={key:2,class:`workspace-approval__status`,role:`status`},T1={key:3,class:`workspace-approval__status`,role:`status`},E1={key:4,class:`workspace-approval__error`,role:`alert`},D1=H(E({__name:`WorkspaceApprovalCard`,props:{prompt:{},choices:{},agentName:{},busy:{type:Boolean},error:{},reviewAvailable:{type:Boolean},review:{},canManagePermissions:{type:Boolean}},emits:[`choose`],setup(e,{emit:t}){let n=e,r=t,i=O(!1),a=O(``),o=U(()=>n.prompt.trim().split(/\r?\n/)[0]||`请核对本次操作`);function s(e){n.busy||e===`full_access`&&!l1(n.choices,n.canManagePermissions)||(a.value=e,r(`choose`,e))}return(t,n)=>(u(),F(`section`,{class:`workspace-approval`,"aria-label":`工具审批`,"aria-busy":e.busy||void 0},[D(`div`,d1,[W(V(cb),{class:`workspace-approval__icon`,"aria-hidden":`true`}),D(`div`,f1,[D(`h3`,null,h(e.agentName?`${e.agentName}需要你的确认`:`需要你的确认`),1),D(`p`,p1,h(o.value),1)]),D(`button`,{class:`workspace-approval__detail`,type:`button`,"aria-expanded":i.value,onClick:n[0]||=e=>i.value=!i.value},[w(h(i.value?`收起`:`详情`),1),W(V(Xy),{"aria-hidden":`true`})],8,m1)]),i.value?(u(),F(`div`,h1,[D(`pre`,null,h(e.prompt),1),n[7]||=D(`p`,null,`允许本次只批准当前操作。`,-1),e.choices?.includes(`always`)?(u(),F(T,{key:0},[n[6]||=D(`p`,null,`永久规则只匹配相同操作和目标。`,-1),D(`button`,{type:`button`,disabled:e.busy,onClick:n[1]||=e=>s(`always`)},`始终允许此类操作`,8,g1)],64)):z(``,!0)])):z(``,!0),D(`div`,_1,[D(`button`,{class:`workspace-approval__deny`,type:`button`,disabled:e.busy,onClick:n[2]||=e=>s(`deny`)},`拒绝`,8,v1),e.reviewAvailable?(u(),F(`div`,y1,[D(`button`,{class:`workspace-approval__auto`,type:`button`,disabled:e.busy,onClick:n[3]||=e=>s(`review`)},[W(V(ub),{"aria-hidden":`true`}),n[8]||=w(`自动审批…`,-1)],8,b1),n[9]||=D(`small`,null,`自动判断,拿不准时询问你`,-1)])):z(``,!0),D(`button`,{class:`workspace-approval__allow`,type:`button`,disabled:e.busy,onClick:n[4]||=e=>s(`once`)},`允许本次`,8,x1)]),V(l1)(e.choices,e.canManagePermissions)?(u(),F(`div`,S1,[D(`button`,{type:`button`,disabled:e.busy,onClick:n[5]||=e=>s(`full_access`)},`以后全部授权`,8,C1),n[10]||=D(`small`,null,`仅此 Bot,以后所有操作无需询问`,-1)])):z(``,!0),e.busy?(u(),F(`p`,w1,h(a.value===`review`?`正在自动判断…`:`正在处理…`),1)):e.review?.decision===`ask`?(u(),F(`p`,T1,`需要你确认:`+h(e.review.reason),1)):z(``,!0),e.error?(u(),F(`p`,E1,h(e.error),1)):z(``,!0)],8,u1))}}),[[`__scopeId`,`data-v-d1692aa0`]]),O1=E({__name:`TaskResultNotice`,props:{content:{},taskReference:{},outcome:{},current:{type:Boolean}},emits:[`details`],setup(e,{emit:t}){let n=e,r=U(()=>n.content.split(/\r?\n/).map(e=>e.trim()).filter(e=>e&&!/^\[打开任务\]\(/.test(e))),i=U(()=>n.content.includes(`等待管理员复核`)),a=U(()=>n.outcome?{complete:`查好了`,running:`在处理`,review:`有新进展`,waiting:`需要你补充`,blocked:`卡住了`,cancelled:`任务已停止`,cancelling:`任务正在停止`}[n.outcome.status]:i.value?`有新进展`:`任务状态记录`),o=U(()=>{let e=r.value[0]?.match(/^「([^」]+)」的任务「([^」]+)」/);return e?`${e[1]} · ${e[2]}`:r.value[0]||`团队交付任务`}),s=U(()=>n.outcome?n.outcome.status===`review`?`等待负责人复核后继续`:`打开任务查看完整交付与验收状态`:i.value?`等待管理员复核后继续`:r.value.slice(1).join(` `)||`打开任务查看完整交付与验收状态`),c=U(()=>`/conversations/${encodeURIComponent(n.taskReference.conversationId)}?taskId=${encodeURIComponent(n.taskReference.taskId)}`);return(e,t)=>(u(),k(l$,{class:`task-result-notice`,title:a.value,icon:`file`,href:c.value,"accessible-label":`${a.value},${o.value},${s.value},打开任务`},null,8,[`title`,`href`,`accessible-label`]))}}),k1=[`data-goal-id`],A1={class:`chat-task-kind`},j1={class:`chat-task-owner`},M1={key:0,class:`chat-task-members`},N1={class:`chat-task-member-copy`},P1={key:1,class:`task-more`},F1={key:2,class:`chat-task-result`},I1={key:3,class:`task-artifacts`},L1=[`href`],R1={class:`chat-task-latest`},z1=H(E({__name:`ChatTaskCard`,props:{task:{},agents:{}},emits:[`details`],setup(e){let t=e,n=U(()=>t.agents.find(e=>e.id===t.task.goal.coordinatorId)),r=U(()=>t.task.assignments.filter(e=>e.status===`complete`).length),i=U(()=>{let{goal:e,assignments:r}=t.task;if(e.status===`complete`)return`目标已完成,验收结果可在详情中查看`;let i=r.filter(e=>e.status===`review`);if(i.length&&[`running`,`review`].includes(e.status))return`等待${n.value?.name||`负责人`}复核${i.length===1?`「${i[0].title}」`:` ${i.length} 项子任务`}`;if(e.status!==`running`)return q(e.status);let a=r.filter(e=>e.status===`running`);return a.length?`${a.length} 项子任务正在进行`:r.length?`负责人正在推进交付`:`负责人直接处理`});return(t,a)=>(u(),F(`section`,{class:`chat-task-card`,"data-goal-id":e.task.goal.id,"aria-label":`任务进展`},[D(`div`,A1,[W(Y,{name:e.task.assignments.length?`users`:`file`,size:16},null,8,[`name`]),w(h(e.task.assignments.length?`团队任务`:`交付任务`),1)]),D(`header`,null,[D(`h3`,null,h(e.task.goal.objective),1),D(`span`,{class:l([`task-status`,e.task.goal.status])},h(V(q)(e.task.goal.status)),3)]),D(`p`,j1,[w(`负责人 `+h(n.value?.name||`成员不可用`),1),e.task.assignments.length?(u(),F(T,{key:0},[w(` · `+h(e.task.assignments.length)+` 个子任务 · `+h(r.value)+` 项已复核`,1)],64)):z(``,!0)]),e.task.assignments.length?(u(),F(`ul`,M1,[(u(!0),F(T,null,p(e.task.assignments.slice(0,4),t=>(u(),F(`li`,{key:t.id},[W(Ye,{name:e.agents.find(e=>e.id===t.agentId)?.name||`成员`,avatar:e.agents.find(e=>e.id===t.agentId)?.avatar,size:24,animated:!1},null,8,[`name`,`avatar`]),D(`span`,N1,[w(h(t.title),1),D(`small`,null,` · `+h(e.agents.find(e=>e.id===t.agentId)?.name||`成员不可用`),1)]),D(`em`,{class:l(t.status)},[W(Y,{name:t.status===`complete`?`check`:t.status===`failed`?`alert`:`clock`,size:15},null,8,[`name`]),w(h(t.status===`complete`?`已复核`:V(q)(t.status)),1)],2)]))),128))])):z(``,!0),e.task.assignments.length>4?(u(),F(`small`,P1,`还有 `+h(e.task.assignments.length-4)+` 项,查看详情`,1)):z(``,!0),e.task.goal.result?(u(),F(`p`,F1,h(e.task.goal.result),1)):z(``,!0),e.task.artifacts.length?(u(),F(`div`,I1,[(u(!0),F(T,null,p(e.task.artifacts,e=>(u(),F(`a`,{key:e.id,href:`/api/app/files/${encodeURIComponent(e.id)}/download`,target:`_blank`,rel:`noopener`},[W(Y,{name:`file`,size:14}),w(h(e.name),1)],8,L1))),128))])):z(``,!0),D(`p`,R1,[W(Y,{name:`chat`,size:15}),w(h(i.value),1)]),D(`button`,{type:`button`,onClick:a[0]||=e=>t.$emit(`details`)},[a[1]||=w(`查看任务详情`,-1),W(Y,{name:`chevron-down`,class:`detail-chevron`,size:15})])],8,k1))}}),[[`__scopeId`,`data-v-c0308075`]]),B1={class:`runtime-card`,"aria-label":`临时子任务`},V1=H(E({__name:`RuntimeTaskCard`,props:{tasks:{}},emits:[`details`],setup(e){let t=e,n=U(()=>t.tasks.filter(e=>e.status===`complete`).length);return(t,r)=>(u(),F(`section`,B1,[D(`header`,null,[W(Y,{name:`branch`,size:16}),r[1]||=D(`strong`,null,`临时子任务`,-1),D(`small`,null,h(n.value)+`/`+h(e.tasks.length)+` 执行完成`,1)]),(u(!0),F(T,null,p(e.tasks.slice(0,3),e=>(u(),F(`div`,{key:e.id},[D(`span`,null,h(e.goal),1),D(`small`,null,h(e.status===`complete`?`执行完成`:V(q)(e.status)),1)]))),128)),r[3]||=D(`p`,null,`执行期间的临时助手,独立显示执行状态。`,-1),D(`button`,{type:`button`,onClick:r[0]||=e=>t.$emit(`details`)},[r[2]||=w(`查看执行详情`,-1),W(Y,{name:`chevron-down`,class:`detail-chevron`,size:15})])]))}}),[[`__scopeId`,`data-v-b441632d`]]),H1={key:0,class:`activity-capsule bot-created`,"aria-label":`Bot 已创建`},U1={class:`capsule-row`},W1={class:`capsule-row__note`},G1={class:`capsule-row__detail`},K1={key:1,class:`activity-capsule`,"aria-label":`协作活动`},q1={class:`capsule-row`},J1={key:1,class:`activity-capsule__glyph`},Y1={class:`capsule-row__note`},X1={class:`capsule-row__detail`},Z1={class:`capsule-row__detail`},Q1={class:`capsule-row__detail`},$1={key:1,class:`capsule-row__detail activity-capsule__description`},e0=H(E({__name:`WorkspaceActivityNotice`,props:{activity:{},agents:{}},setup(e){let t=e,n=U(()=>t.agents?.find(e=>e.id===t.activity.targetId)),r=U(()=>t.activity.conversationId?`/conversations/${encodeURIComponent(t.activity.conversationId)}${t.activity.taskId?`?taskId=${encodeURIComponent(t.activity.taskId)}`:``}`:void 0),i={bot_created:`持久 Bot`,helper_created:`临时助手`,team_created:`团队`,assignment_created:`任务`},a={bot_created:`已创建`,helper_created:`已创建`,team_created:`已组建`,assignment_created:`已派发`},o=U(()=>t.activity.kind===`assignment_created`?`branch`:`users`),s=U(()=>n.value?.archived?n.value.cleanupState===`pending`?`已退役,等待清理`:`已退役`:`仅参与本任务,结束后退役`);return(t,c)=>e.activity.kind===`bot_created`?(u(),F(`section`,H1,[D(`div`,U1,[W(n$,{as:r.value?`a`:`span`,href:r.value,"aria-label":r.value?`打开 Bot ${e.activity.targetName}`:void 0,name:e.activity.targetName,type:e.activity.description||i.bot_created,title:e.activity.description||void 0,arrow:!!r.value},{icon:S(()=>[W(Ye,{name:e.activity.targetName,avatar:n.value?.avatar,size:20,animated:!1},null,8,[`name`,`avatar`])]),_:1},8,[`as`,`href`,`aria-label`,`name`,`type`,`title`,`arrow`]),D(`span`,W1,h(a.bot_created),1)]),D(`p`,G1,h(e.activity.actorName)+` 创建了 Bot `+h(e.activity.targetName),1)])):(u(),F(`section`,K1,[D(`div`,q1,[W(n$,{as:r.value?`a`:`span`,href:r.value,"aria-label":r.value?`查看${e.activity.targetName}详情`:void 0,name:e.activity.targetName,type:i[e.activity.kind],arrow:!!r.value},{icon:S(()=>[e.activity.kind===`helper_created`?(u(),k(Ye,{key:0,name:e.activity.targetName,avatar:n.value?.avatar,size:20,animated:!1},null,8,[`name`,`avatar`])):(u(),F(`span`,J1,[W(Y,{name:o.value,size:12},null,8,[`name`])]))]),_:1},8,[`as`,`href`,`aria-label`,`name`,`type`,`arrow`]),D(`span`,Y1,h(a[e.activity.kind]),1)]),D(`p`,X1,h(e.activity.actorName)+` `+h(V(J)[e.activity.kind])+` `+h(e.activity.targetName),1),e.activity.kind===`helper_created`?(u(),F(T,{key:0},[D(`p`,Z1,`临时助手 · `+h(s.value),1),D(`p`,Q1,`所属任务:`+h(e.activity.goalTitle||`当前交付目标`),1)],64)):z(``,!0),e.activity.description?(u(),F(`p`,$1,h(e.activity.description),1)):z(``,!0)]))}}),[[`__scopeId`,`data-v-ecf7dad2`]]),t0={class:`managed-browser-card`,"aria-label":`托管浏览器会话`},n0={class:`browser-card-strip`},r0={class:`browser-card-copy`},i0={class:`browser-card-title`},a0=[`title`],o0={key:0},s0={key:0,class:`browser-card-detail`},c0={key:0,role:`status`},l0=[`value`],u0={key:2,class:`browser-card-error`,role:`alert`},d0={key:1},f0={key:2},p0=H(E({__name:`ManagedBrowserCard`,props:{card:{},readOnly:{type:Boolean}},emits:[`open`],setup(e,{emit:t}){let n=e,r=t,i=U(()=>({preparing:`正在准备`,ready:`可接管`,active:`浏览器已打开`,idle:`页面已保留`,closed:`会话已结束`,failed:`需要重试`})[n.card.status]),a=U(()=>{try{return n.card.url?new URL(n.card.url).hostname:``}catch{return``}}),o=U(()=>{let e=n.card.installation?.progress;return typeof e==`number`&&Number.isFinite(e)?Math.min(100,Math.max(0,e)):void 0});return(t,n)=>(u(),F(`section`,t0,[D(`div`,n0,[W(Y,{class:`browser-card-icon`,name:`globe`,size:22,"aria-hidden":`true`}),D(`div`,r0,[D(`strong`,i0,h(e.card.title||`${e.card.agentName}的浏览器`),1),D(`p`,{title:e.card.url},[a.value?(u(),F(`span`,o0,h(a.value)+` · `,1)):z(``,!0),D(`span`,{class:l({failed:e.card.status===`failed`})},h(i.value),3)],8,a0)]),e.readOnly?z(``,!0):(u(),F(`button`,{key:0,type:`button`,title:`接管后暂停机器人的浏览器操作;交还后恢复仍在运行的任务。`,onClick:n[0]||=t=>r(`open`,e.card)},h(e.card.status===`failed`?`重试并接管浏览器`:e.card.status===`closed`?`打开此 Bot 的浏览器`:`接管浏览器`),1))]),e.card.message||e.card.installation?.message||e.card.installation?.error||e.card.status===`preparing`?(u(),F(`div`,s0,[e.card.message||e.card.installation?.message?(u(),F(`p`,c0,h(e.card.message||e.card.installation?.message),1)):z(``,!0),e.card.status===`preparing`?(u(),F(`progress`,{key:1,value:o.value,max:`100`,"aria-label":`浏览器准备进度`},null,8,l0)):z(``,!0),e.card.installation?.error&&e.card.installation.error!==e.card.message?(u(),F(`p`,u0,h(e.card.installation.error),1)):z(``,!0)])):z(``,!0),e.card.status===`closed`?(u(),F(`small`,d0,`打开此 Bot 当前的浏览器;已关闭或回收的页面不会自动恢复。`)):e.card.status===`idle`?(u(),F(`small`,f0,`页面可跨任务继续使用;长时间空闲后可能回收。`)):z(``,!0)]))}}),[[`__scopeId`,`data-v-ae5d9f51`]]),m0={class:`draft-strip`},h0={class:`draft-copy`},g0={class:`draft-title`},_0={"data-test":`draft-heading`},v0={key:0,"data-test":`draft-granted`},y0={key:0,class:`hint`},b0={key:1,class:`hint`,"data-test":`credential-resume`},x0={class:`draft-summary`},S0={key:0},C0=[`disabled`],w0=[`disabled`],T0=[`disabled`],E0={key:1},D0=[`disabled`],O0={class:`hint`},k0={class:`draft-actions`},A0=[`disabled`],j0=[`disabled`],M0=[`disabled`],N0={key:3,class:`draft-actions`},P0={key:0,class:`hint`},F0=[`disabled`],I0=[`disabled`],L0={key:4,class:`draft-error`,role:`alert`},R0=`/api/app/vault`,z0=`凭证`,B0=H(E({__name:`CredentialDraftCard`,props:{card:{},readOnly:{type:Boolean}},emits:[`complete`],setup(e,{emit:t}){let n=e,r=t,a=O(n.card.resumeStatus),o=U(()=>a.value?{waiting:`填写并获授权后继续原任务`,queued:`已安排继续原任务`,cancelled:`自动继续已取消;不会重启原任务`,uncertain:`继续状态待核对;未自动重试`,authorization:`已保存,仍需完成使用授权`}[a.value]:``),s=O(!1),c=O(``),p=O(),g=O(``),_=O(),v=O(),y=O(!1),b=O(n.card.name),x=O(``),S=O(``),C=O(22),E=O(``),k=O(``),A=O(`password`),j=O(``),M=O(``),N=O(``),P=U(()=>p.value??n.card.status),I=U(()=>({website:`网站`,ssh:`SSH`,"api-token":`API Token`,env:`环境变量`})[n.card.kind]),L=U(()=>({pending:`待填写密钥`,sealed:`已入库`,confirmed:`已入库`,dismissed:`已驳回`})[P.value]),R=U(()=>_.value??n.card.grantNames??[]),B=U(()=>P.value===`confirmed`||P.value===`sealed`),V=U(()=>n.card.kind===`website`?`密码`:n.card.kind===`ssh`?A.value===`password`?`SSH 登录密码`:`私钥`:n.card.kind===`api-token`?`API Token`:`变量值`),H=U(()=>n.card.kind===`ssh`?(E.value?E.value+`@`:``)+S.value+`:`+C.value:n.card.kind===`env`?k.value:x.value),G=U(()=>!n.readOnly&&P.value===`pending`&&!!v.value?.online&&!!v.value.initialized);function K(){M.value=``,N.value=``}function ee(e){return{vault_revision_conflict:`原凭据已被修改,请刷新并让 Bot 重新发起更新。`,vault_missing:`请先在设置 → 密码与凭据创建密码库。`,vault_https_required:`公网访问需要 HTTPS;请在本机或局域网内操作。`,vault_invalid_request:`请检查填写内容:地址需为准确 origin,SSH 需要用户名,变量名需大写字母开头。`,vault_write_key_unavailable:`升级后需要在设置 → 密码与凭据中解锁一次,之后聊天卡片即可直接入库,无需再解锁。`,vault_entry_limit:`凭据数量已达到上限。`,vault_draft_settled:`这条凭证已处理过。`,vault_offline:`密码库暂时不可用。`}[e&&typeof e==`object`&&`code`in e?String(e.code):``]??`保存未完成;秘密未回显,请重试或到设置 → 密码与凭据处理。`}async function te(e,t=`GET`,n){return X(R0+e,{method:t,...n?{body:n}:{},timeoutMs:2e4,notifyUnauthorized:!1})}async function q(){if(!(n.readOnly||P.value!==`pending`))try{let e=await te(``);v.value=e,y.value=!1;let t=e.drafts?.find(e=>e.id===n.card.id);if(!t){let e=(await te(`/drafts`).catch(()=>void 0))?.drafts.find(e=>e.id===n.card.id);e&&e.status!==`pending`&&(p.value=e.status,a.value=e.resumeStatus,e.grantedNames&&(_.value=e.grantedNames));return}b.value=t.name,x.value=t.origin??``,S.value=t.host??``,C.value=t.port??22,E.value=t.username??``,k.value=t.envName??``,A.value=t.sshAuth??`password`,a.value=t.resumeStatus,j.value=e.bots?.some(e=>e.id===t.agentId)?t.agentId:``}catch(e){y.value=!0,c.value=ee(e)}}async function J(){if(s.value||!v.value)return;if(!M.value){c.value=`请填写`+V.value+`。`;return}let e={secret:M.value,...n.card.kind===`ssh`?{sshAuth:A.value,...A.value===`privateKey`&&N.value?{passphrase:N.value}:{}}:{}};K(),s.value=!0,c.value=``;try{let t=await te(`/drafts/`+encodeURIComponent(n.card.id)+`/save`,`POST`,e);g.value=b.value,p.value=t.status,a.value=t.resumeStatus,_.value=t.grantedNames??[]}catch(e){c.value=ee(e)}finally{K(),s.value=!1}}async function ne(){if(!s.value){s.value=!0,c.value=``;try{await te(`/drafts/`+encodeURIComponent(n.card.id)+`/dismiss`,`POST`,{}),p.value=`dismissed`,K()}catch(e){c.value=`驳回未完成:`+ee(e)}finally{s.value=!1}}}return f(()=>n.card.resumeStatus,e=>{a.value=e}),f(()=>n.card.status,e=>{e!==`pending`&&K()}),m(q),i(K),(t,n)=>(u(),F(`section`,{class:`credential-draft-card`,"aria-label":z0},[D(`div`,m0,[W(Y,{class:`draft-icon`,name:`shield`,size:22,"aria-hidden":`true`}),D(`div`,h0,[D(`strong`,g0,h((P.value===`confirmed`||P.value===`sealed`)&&g.value||e.card.name),1),D(`p`,_0,[n[7]||=w(`凭证 · `,-1),D(`span`,{class:l({dismissed:P.value===`dismissed`}),"data-test":`draft-status`},h(L.value),3)]),B.value&&R.value.length?(u(),F(`p`,v0,`已授权给:`+h(R.value.join(`、`)),1)):z(``,!0)])]),e.card.mode===`update`?(u(),F(`p`,y0,`更新原凭证,保留原引用与授权范围。`)):z(``,!0),o.value?(u(),F(`p`,b0,h(o.value),1)):z(``,!0),G.value?(u(),F(`form`,{key:2,class:`draft-form`,autocomplete:`off`,onSubmit:Z(J,[`prevent`])},[D(`dl`,x0,[n[9]||=D(`dt`,null,`名称`,-1),D(`dd`,null,h(b.value),1),n[10]||=D(`dt`,null,`类型`,-1),D(`dd`,null,h(I.value),1),e.card.kind===`api-token`?z(``,!0):(u(),F(T,{key:0},[D(`dt`,null,h(e.card.kind===`ssh`?`主机`:e.card.kind===`env`?`变量名`:`地址`),1),D(`dd`,null,h(H.value),1)],64)),e.card.kind===`website`&&E.value?(u(),F(T,{key:1},[n[8]||=D(`dt`,null,`用户名`,-1),D(`dd`,null,h(E.value),1)],64)):z(``,!0)]),e.card.kind===`ssh`?(u(),F(`label`,S0,[n[12]||=w(`认证方式`,-1),d(D(`select`,{"onUpdate:modelValue":n[0]||=e=>A.value=e,disabled:s.value,onChange:n[1]||=e=>{M.value=``,N.value=``}},[...n[11]||=[D(`option`,{value:`password`},`密码登录`,-1),D(`option`,{value:`privateKey`},`私钥登录`,-1)]],40,C0),[[Ne,A.value]])])):z(``,!0),D(`label`,null,[w(h(V.value)+` `,1),e.card.kind===`ssh`&&A.value===`privateKey`?d((u(),F(`textarea`,{key:0,"onUpdate:modelValue":n[2]||=e=>M.value=e,class:`masked`,rows:`3`,spellcheck:`false`,autocomplete:`off`,required:``,disabled:s.value},null,8,w0)),[[Q,M.value]]):d((u(),F(`input`,{key:1,"onUpdate:modelValue":n[3]||=e=>M.value=e,type:`password`,autocomplete:`new-password`,required:``,disabled:s.value},null,8,T0)),[[Q,M.value]])]),e.card.kind===`ssh`&&A.value===`privateKey`?(u(),F(`label`,E0,[n[13]||=w(`私钥口令(可选)`,-1),d(D(`input`,{"onUpdate:modelValue":n[4]||=e=>N.value=e,type:`password`,autocomplete:`new-password`,disabled:s.value},null,8,D0),[[Q,N.value]])])):z(``,!0),D(`p`,O0,h(e.card.mode===`update`?`保存会更新原条目,不增加 Bot 授权。`:e.card.kind===`website`?`网站需在密码页面配置登录表单后才能授权 Bot。`:`保存后自动授权给:`+(R.value.length?R.value.join(`、`):v.value?.bots?.find(e=>e.id===j.value)?.name??`主 Bot`)+`。`)+`无需解锁;秘密直接加密入库,不经过 Bot,不进入聊天记录。`,1),D(`div`,k0,[D(`button`,{type:`submit`,disabled:s.value},h(s.value?`保存中…`:`保存`),9,A0),D(`button`,{type:`button`,class:`secondary`,disabled:s.value,onClick:ne},`驳回`,8,j0),e.card.kind===`website`?(u(),F(`button`,{key:0,type:`button`,class:`link`,disabled:s.value,onClick:n[5]||=t=>r(`complete`,e.card)},`在密码页面配置登录表单`,8,M0)):z(``,!0)])],32)):!e.readOnly&&P.value===`pending`?(u(),F(`div`,N0,[v.value&&!v.value.initialized?(u(),F(`p`,P0,`尚未创建密码库,请先在设置 → 密码与凭据中创建。`)):z(``,!0),D(`button`,{type:`button`,disabled:s.value,onClick:n[6]||=t=>r(`complete`,e.card)},`去补全`,8,F0),D(`button`,{type:`button`,class:`secondary`,disabled:s.value,onClick:ne},`驳回`,8,I0)])):z(``,!0),c.value?(u(),F(`p`,L0,h(c.value),1)):z(``,!0)]))}}),[[`__scopeId`,`data-v-76a12310`]]),V0={key:0,class:`service-warnings`,"aria-label":`服务状态提示`},H0=E({__name:`ServiceWarnings`,props:{warnings:{}},setup(e){return(t,n)=>e.warnings.length?(u(),F(`div`,V0,[(u(!0),F(T,null,p(e.warnings,(e,t)=>(u(),k(l$,{key:`${e.service}:${e.code}:${t}`,title:`${e.service}:${e.message}`,icon:`info`},null,8,[`title`]))),128))])):z(``,!0)}}),U0={key:0},W0={key:0,class:`tool-trace__details`},G0={key:0,role:`status`},K0={key:2,class:`tool-trace__note`},q0={key:3},J0={key:4},Y0=H(E({__name:`ToolTrace`,props:{tool:{},expanded:{type:Boolean,default:!1}},setup(e){let t=e,n=O(t.expanded||t.tool.status===`error`),r=I(),a=O(!1),o=O(``),s;async function c(){let e=t.tool.detailsUrl;if(!n.value||!e||r.value||a.value)return;let i=new AbortController;s=i,a.value=!0,o.value=``;try{let t=await X(e,{signal:i.signal});s===i&&!i.signal.aborted&&(r.value=t)}catch(e){s===i&&!i.signal.aborted&&(o.value=e instanceof Error?e.message:`工具详情加载失败`)}finally{s===i&&(a.value=!1)}}f(()=>t.tool.detailsUrl,()=>{s?.abort(),s=void 0,r.value=void 0,a.value=!1,o.value=``,c()}),f(n,()=>{c()},{immediate:!0}),i(()=>s?.abort());let d=U(()=>({running:`运行中`,success:`完成`,error:`失败`,pending:`等待`,interrupted:`已结束,结果未确认`})[t.tool.status]);function p(e){if(e==null||e===``)return``;if(typeof e==`string`)return e;try{return JSON.stringify(e,null,2)}catch{return String(e??``)}}let m=U(()=>p(r.value?r.value.input:t.tool.input)),g=U(()=>p(r.value?r.value.output:t.tool.output));return f(()=>t.expanded,e=>{e&&(n.value=!0)}),(t,r)=>(u(),F(`div`,{class:l([`tool-trace`,`tool-trace--${e.tool.status}`])},[D(`button`,{type:`button`,onClick:r[0]||=e=>n.value=!n.value},[D(`strong`,null,h(e.tool.name),1),e.tool.status===`error`||e.tool.status===`interrupted`?(u(),F(`small`,U0,h(d.value),1)):z(``,!0),D(`span`,{class:l([`tool-trace__caret`,{open:n.value}])},`›`,2)]),n.value&&(e.tool.commentary||m.value||g.value||e.tool.detailsUrl)?(u(),F(`div`,W0,[a.value?(u(),F(`small`,G0,`正在加载工具详情…`)):z(``,!0),o.value?(u(),F(`button`,{key:1,type:`button`,onClick:c},h(o.value)+`,点击重试`,1)):z(``,!0),e.tool.commentary?(u(),F(`section`,K0,[r[1]||=D(`small`,null,`说明`,-1),D(`pre`,null,h(e.tool.commentary),1)])):z(``,!0),m.value?(u(),F(`section`,q0,[r[2]||=D(`small`,null,`输入`,-1),D(`pre`,null,h(m.value),1)])):z(``,!0),g.value?(u(),F(`section`,J0,[r[3]||=D(`small`,null,`输出`,-1),D(`pre`,null,h(g.value),1)])):z(``,!0)])):z(``,!0)],2))}}),[[`__scopeId`,`data-v-11d8153f`]]),X0={class:`turn-trace__summary`},Z0={class:`turn-trace__content`},Q0={key:0,class:`turn-trace__item turn-trace__reasoning`},$0=H(E({__name:`TurnTrace`,props:{group:{},streamIntervalMs:{}},setup(e){let t=e,n=U(()=>t.group.entries.filter(e=>e.type===`reasoning`).length),r=U(()=>t.group.entries.filter(e=>e.type===`tool`).length),i=U(()=>[n.value?`${n.value} 段思考`:``,r.value?`${r.value} 个工具`:``].filter(Boolean).join(` · `)),a=U(()=>t.group.status===`running`?`进行中`:t.group.status===`error`?`有错误`:``);return(t,n)=>(u(),k(l$,{class:`turn-trace`,icon:`brain`,title:e.group.status===`running`?`正在思考与使用工具`:e.group.status===`error`?`思考与工具出现错误`:`思考与工具`},{default:S(()=>[D(`p`,X0,[w(h(i.value),1),a.value?(u(),F(T,{key:0},[w(` · `+h(a.value),1)],64)):z(``,!0)]),D(`div`,Z0,[(u(!0),F(T,null,p(e.group.entries,t=>(u(),F(T,{key:t.id},[t.type===`reasoning`?(u(),F(`section`,Q0,[D(`header`,null,[W(Y,{name:`brain`,size:12}),w(`思考过程 · `+h(t.content.length)+` 字`,1)]),W(ZK,{"process-content":``,content:t.content,streaming:e.group.status===`running`,"stream-interval-ms":e.streamIntervalMs},null,8,[`content`,`streaming`,`stream-interval-ms`])])):(u(),k(Y0,{key:1,class:`turn-trace__item turn-trace__tool`,tool:t.tool,expanded:!t.tool.detailsUrl},null,8,[`tool`,`expanded`]))],64))),128))])]),_:1},8,[`title`]))}}),[[`__scopeId`,`data-v-cea5c2eb`]]);function e2(e){return`${e.profile||``}\u0000${e.author||``}`}function t2(e){return!!(e.browserCard||e.credentialDrafts?.length||e.serviceWarnings?.length||e.content.trim()||e.attachments?.length||e.error||e.status===`failed`)}function n2(e,t){return e.some(e=>e.status===`failed`)||t.some(e=>e.type===`tool`&&e.tool.status===`error`)?`error`:e.some(e=>e.status===`streaming`)||t.some(e=>e.type===`tool`&&[`running`,`pending`].includes(e.tool.status))?`running`:`success`}function r2(e,t,n){if(!t.length)return;let r=[];for(let e of t){e.reasoning?.trim()&&r.push({id:`reasoning:${e.id}`,type:`reasoning`,messageId:e.id,content:e.reasoning});for(let t of e.tools??[])r.push({id:`tool:${e.id}:${t.id}`,type:`tool`,messageId:e.id,tool:t})}r.length&&e.push({id:`trace:${t[0].id}`,kind:`trace`,entries:r,status:n2(t,r)});for(let r of t){if(!t2(r))continue;let t=n?.get(r);t||(t={...r,reasoning:void 0,tools:void 0},n?.set(r,t)),e.push({id:`message:${r.id}`,kind:`message`,message:t})}}function i2(e,t){let n=[],r=[],i=``,a=()=>{r2(n,r,t),r=[],i=``};for(let t of m$(e)){if(t.role===`assistant`&&!t.timelineKind){let e=e2(t);r.length&&e!==i&&a(),i=e,r.push(t),t2(t)&&a();continue}a(),n.push({id:`message:${t.id}`,kind:`message`,message:t})}return a(),n}var a2={feishu:{label:`飞书`,color:`#3370ff`},dingtalk:{label:`钉钉`,color:`#0aa5d6`},wecom:{label:`企业微信`,color:`#07a35a`},telegram:{label:`Telegram`,color:`#2aabee`},slack:{label:`Slack`,color:`#4a154b`},discord:{label:`Discord`,color:`#5865f2`},email:{label:`Email`,color:`#526781`},signal:{label:`Signal`,color:`#3a76f0`},whatsapp:{label:`WhatsApp`,color:`#158a47`}},o2=/^\s*〔来自([^〕\n]{1,80})〕[ \t]*/,s2=new Map(Object.entries(a2).map(([e,t])=>[t.label.toLowerCase(),e]));function c2(e){let t=o2.exec(e);if(!t)return{body:e};let[n,...r]=t[1].split(/[·・]/),i=s2.get(n.trim().toLowerCase());if(!i)return{body:e};let a=r.join(`·`).trim()||void 0,o=a2[i].label;return{origin:{platform:i,label:o,group:a,text:a?`${o} · ${a}`:o},body:e.slice(t[0].length)}}function l2(e){return c2(e).body}var u2=/(?:^|\n)--- Attached Context ---\s*\n/,d2=/(?:^|\n)--- Context Warnings ---[\s\S]*$/,f2=/@(file|folder|url|image|tool|terminal):(?:"[^"\n]+"|'[^'\n]+'|`[^`\n]+`|\S+)/g;function p2(e,t){if(e===`assistant`)return rV(t);if(e!==`user`)return t;t=l2(t);let n=t.match(u2);if(!n||n.index===void 0)return t.replace(d2,``).trim();let r=t.slice(0,n.index).replace(d2,``).trim(),i=t.slice(n.index+n[0].length);return[[...new Set(Array.from(i.matchAll(f2),e=>e[0]))].filter(e=>!r.includes(e)).join(`
|
|
253
|
+
`)[0]||``))return{title:`任务已完成`,icon:`check`};let n=t.match(/(?:changed to|切换为)\s*([^\s,。\]]+?)(?=\s+via\b|\s*$|\])/i)?.[1];return{title:n?`模型已切换`:`系统提示`,icon:n?`settings`:`info`}}var g$={key:0},_$=E({__name:`MessageSystemEvent`,props:{message:{}},setup(e){let t=e,n=U(()=>h$(t.message)),r=U(()=>{let e=t.message.timelineMetadata;if(!e)return``;if(t.message.timelineKind===`delegation-complete`){let t=Number(e.completed_count??0),n=Number(e.failed_count??0),r=Number(e.duration_seconds??0),i=r>0?` · 耗时 ${Math.round(r)} 秒`:``;return`${Number(e.task_count)||t+n||1} 项 · ${t} 完成 · ${n} 失败${i}`}return t.message.timelineKind===`background-process`?[e.exit_code==null?``:`退出码:${e.exit_code}`,e.signal?`信号:${e.signal}`:``].filter(Boolean).join(` · `):``});return(t,i)=>n.value?(u(),k(l$,{key:0,title:n.value.title,icon:n.value.icon},{default:S(()=>[r.value?(u(),F(`p`,g$,h(r.value),1)):z(``,!0),e.message.content?(u(),k(ZK,{key:1,"process-content":``,content:e.message.content},null,8,[`content`])):z(``,!0)]),_:1},8,[`title`,`icon`])):z(``,!0)}});function v$(e){return e.direction===`incoming`?`消息来自`:`${Number.isInteger(e.messageCount)&&e.messageCount>0?e.messageCount:e.hasReply||e.replyTo?2:1}条往来消息:`}var y$=I(null),b$=[`id`,`aria-label`],x$={class:`peer-drawer__header`},S$={class:`peer-drawer__title`},C$={key:1},w$={class:`peer-drawer__inner`},T$={class:`peer-drawer__panel`},E$={key:0,class:`peer-drawer__state`,role:`status`},D$={key:1,class:`peer-drawer__state peer-drawer__state--error`,role:`alert`},O$={key:0,class:`peer-drawer__note`},k$={key:1,class:`peer-drawer__note`},A$={class:`peer-drawer__messages`},j$={class:`peer-drawer__body`},M$={class:`peer-drawer__author`},N$={class:`peer-drawer__bubble`},P$={class:`peer-drawer__content`},F$={key:0,class:`peer-drawer__files`},I$=[`onClick`],L$={class:`peer-drawer__footer`},R$=H(E({__name:`PeerThreadDrawer`,props:{id:{},peerMessageId:{},conversationId:{default:``},readOnly:{type:Boolean,default:!1}},emits:[`close`,`openChat`,`previewFile`],setup(e,{emit:t}){let n=e,r=t,a=I(),s=O(),c=O(!0),d=O(``),g,_,v=0;async function y(e=!1){g?.abort();let t=new AbortController;g=t,e||(c.value=!0,d.value=``);try{let e=await X(`/api/app/workspace/collaboration/${encodeURIComponent(n.peerMessageId)}/thread`,{signal:t.signal});g===t&&(a.value=e,d.value=``)}catch(e){g===t&&!t.signal.aborted&&!a.value&&(d.value=e instanceof Error?e.message:`详情没加载出来`)}finally{g===t&&(c.value=!1,g=void 0)}}function b(e){let t=Date.now()+e;_!==void 0&&v<=t||(window.clearTimeout(_),v=t,_=window.setTimeout(()=>{_=void 0,y(!0)},e))}f(y$,e=>{let t=a.value;!e||!t||(e.keys.has(`chain:${t.chainId}`)?b(300):t.progress&&e.keys.has(`run:${t.progress.runId}`)&&b(2e3))}),m(()=>{o(()=>s.value?.focus({preventScroll:!0})),y()}),i(()=>{g?.abort(),window.clearTimeout(_)});let x=U(()=>a.value?.messages.find(e=>e.id===a.value?.focusId));function S(e){return e<1024?`${e} B`:e<1048576?`${(e/1024).toFixed(1)} KB`:`${(e/1048576).toFixed(1)} MB`}return(t,n)=>(u(),F(`section`,{id:e.id,class:`peer-drawer`,role:`region`,"aria-label":x.value?`${x.value.from.name}与${x.value.to.name}的往来记录`:`Bot 往来记录`,onKeydown:n[3]||=Ie(Z(e=>r(`close`),[`stop`,`prevent`]),[`esc`])},[D(`header`,x$,[D(`div`,S$,[a.value?.messages[0]?(u(),F(T,{key:0},[W(Ye,{name:a.value.messages[0].from.name,avatar:a.value.messages[0].from.avatar,size:28,animated:!1,"aria-hidden":`true`},null,8,[`name`,`avatar`]),D(`strong`,null,h(a.value.messages[0].from.name),1),n[4]||=D(`span`,{class:`peer-drawer__separator`,"aria-hidden":`true`},`↔`,-1),W(Ye,{name:a.value.messages[0].to.name,avatar:a.value.messages[0].to.avatar,size:28,animated:!1,"aria-hidden":`true`},null,8,[`name`,`avatar`]),D(`strong`,null,h(a.value.messages[0].to.name),1)],64)):(u(),F(`strong`,C$,`Bot 往来记录`))])]),D(`div`,w$,[D(`div`,T$,[c.value&&!a.value?(u(),F(`p`,E$,`正在加载详情…`)):d.value?(u(),F(`p`,D$,[w(h(d.value),1),D(`button`,{type:`button`,onClick:n[0]||=e=>y()},`重试`)])):a.value?(u(),F(T,{key:2},[a.value.private?(u(),F(`p`,O$,`这次往来涉及私人任务,只显示概况。`)):z(``,!0),a.value.truncated?(u(),F(`p`,k$,`只显示最近 32 条。`)):z(``,!0),D(`ol`,A$,[(u(!0),F(T,null,p(a.value.messages,e=>(u(),F(`li`,{key:e.id,class:l({"peer-drawer__message--focus":e.id===a.value.focusId})},[W(Ye,{class:`peer-drawer__avatar`,name:e.from.name,avatar:e.from.avatar,size:27,animated:!1,"aria-hidden":`true`},null,8,[`name`,`avatar`]),D(`div`,j$,[D(`strong`,M$,h(e.from.name),1),D(`div`,N$,[D(`div`,P$,[W(ZK,{content:e.content,onFileLink:n[1]||=(e,t)=>r(`previewFile`,{name:e,url:t})},null,8,[`content`])]),e.files.length?(u(),F(`ul`,F$,[(u(!0),F(T,null,p(e.files,e=>(u(),F(`li`,{key:e.id},[D(`button`,{type:`button`,onClick:t=>r(`previewFile`,{name:e.name,url:`/api/app/files/${e.id}/${e.mimeType.startsWith(`image/`)?`preview`:`download`}`})},[w(h(e.name),1),D(`small`,null,h(S(e.size)),1)],8,I$)]))),128))])):z(``,!0)])])],2))),128))])],64)):z(``,!0)])]),D(`footer`,L$,[D(`button`,{ref_key:`closeButton`,ref:s,type:`button`,class:`peer-drawer__close`,"aria-label":`关闭往来记录`,onClick:n[2]||=e=>r(`close`)},`关闭聊天`,512)])],40,b$))}}),[[`__scopeId`,`data-v-e3ee417b`]]),z$={class:`empty-state`},B$={class:`empty-state__mark`},V$={key:0},H$=H(E({__name:`EmptyState`,props:{icon:{default:`chat`},title:{},description:{default:``},actionLabel:{default:``}},emits:[`action`],setup(e,{emit:t}){let n=t;return(t,r)=>(u(),F(`div`,z$,[D(`div`,B$,[W(Y,{name:e.icon,size:23},null,8,[`name`])]),D(`h2`,null,h(e.title),1),e.description?(u(),F(`p`,V$,h(e.description),1)):z(``,!0),e.actionLabel?(u(),F(`button`,{key:1,class:`solid-button`,type:`button`,onClick:r[0]||=e=>n(`action`)},h(e.actionLabel),1)):z(``,!0)]))}}),[[`__scopeId`,`data-v-eb3598e4`]]),U$=[`aria-label`],W$=H(E({__name:`TypingIndicator`,props:{avatarName:{},avatar:{},label:{}},setup(e){return(t,n)=>(u(),F(`div`,{class:`thinking-indicator`,role:`status`,"aria-live":`polite`,"aria-label":e.label||`机器人正在输入`,"data-testid":`chat-run-thinking-dots`},[W(Ye,{class:`thinking-indicator__avatar`,name:e.avatarName,avatar:e.avatar,size:20,state:`working`,ribbons:!1,"aria-hidden":`true`},null,8,[`name`,`avatar`]),e.label?(u(),F(`span`,{key:0,class:l([`thinking-indicator__label`,{"thinking-indicator__label--breath":!!e.label}])},h(e.label),3)):z(``,!0)],8,U$))}}),[[`__scopeId`,`data-v-ed003172`]]),G$=[`aria-labelledby`],K$={class:`interaction-card__heading`},q$={class:`interaction-card__icon`},J$=[`id`],Y$={key:0,class:`interaction-card__prompt`},X$={key:1,class:`interaction-card__details`},Z$={key:2,class:`interaction-card__actions`},Q$=[`disabled`],$$=[`disabled`],e1={key:0,class:`interaction-card__options`},t1=[`value`,`disabled`,`onChange`],n1={class:`interaction-card__custom`},r1=[`for`],i1={class:`interaction-card__custom-row`},a1=[`id`,`disabled`],o1=[`disabled`],s1=H(E({__name:`InteractionCard`,props:{interaction:{},busy:{type:Boolean}},emits:[`approve`,`clarify`],setup(e,{emit:t}){let n=e,r=t,i=O(``),a=O(``),o=U(()=>a.value.trim()||i.value);function s(e){i.value=e,a.value=``}function c(){!o.value||n.busy||r(`clarify`,o.value)}return f(()=>n.interaction.id,()=>{i.value=``,a.value=``}),(t,n)=>(u(),F(`section`,{class:l([`interaction-card`,`interaction-card--${e.interaction.kind}`]),"aria-live":`polite`,"aria-labelledby":`interaction-title-${e.interaction.id}`},[n[8]||=D(`span`,{class:`interaction-card__handle`,"aria-hidden":`true`},null,-1),D(`div`,K$,[D(`span`,q$,[W(Y,{name:e.interaction.kind===`approval`?`check`:`chat`,size:18},null,8,[`name`])]),D(`div`,null,[D(`small`,null,h(e.interaction.kind===`approval`?`需要审批`:`需要你的回答`),1),D(`strong`,{id:`interaction-title-${e.interaction.id}`},h(e.interaction.title||e.interaction.prompt),9,J$)])]),e.interaction.title?(u(),F(`p`,Y$,h(e.interaction.prompt),1)):z(``,!0),e.interaction.detail?(u(),F(`details`,X$,[D(`summary`,null,[n[5]||=w(`查看详情`,-1),W(Y,{name:`chevron-down`,size:13})]),D(`pre`,null,h(e.interaction.detail),1)])):z(``,!0),e.interaction.kind===`approval`?(u(),F(`div`,Z$,[D(`button`,{class:`quiet-button`,type:`button`,disabled:e.busy,onClick:n[0]||=e=>r(`approve`,!1)},`拒绝`,8,Q$),D(`button`,{class:`solid-button`,type:`button`,disabled:e.busy,onClick:n[1]||=e=>r(`approve`,!0)},`允许`,8,$$)])):(u(),F(`form`,{key:3,class:`interaction-card__answer`,onSubmit:Z(c,[`prevent`])},[e.interaction.options?.length?(u(),F(`fieldset`,e1,[n[6]||=D(`legend`,null,`请选择一个回答`,-1),(u(!0),F(T,null,p(e.interaction.options,t=>(u(),F(`label`,{key:t,class:l({selected:i.value===t})},[d(D(`input`,{"onUpdate:modelValue":n[2]||=e=>i.value=e,type:`radio`,value:t,disabled:e.busy,onChange:e=>s(t)},null,40,t1),[[Ue,i.value]]),D(`span`,null,h(t),1),i.value===t?(u(),k(Y,{key:0,name:`check`,size:15})):z(``,!0)],2))),128))])):z(``,!0),D(`div`,n1,[D(`label`,{for:`interaction-answer-${e.interaction.id}`},`其他回答`,8,r1),D(`div`,i1,[d(D(`textarea`,{id:`interaction-answer-${e.interaction.id}`,"onUpdate:modelValue":n[3]||=e=>a.value=e,rows:`2`,disabled:e.busy,placeholder:`补充你的想法(可选)`,onInput:n[4]||=e=>i.value=``},null,40,a1),[[Q,a.value]]),D(`button`,{class:`solid-button`,type:`submit`,disabled:e.busy||!o.value},[w(h(e.busy?`提交中…`:`提交回答`),1),e.busy?z(``,!0):(u(),k(Y,{key:0,name:`arrow-up`,size:14}))],8,o1)])]),n[7]||=D(`small`,{class:`interaction-card__hint`},`选择预设答案,或输入你自己的回答`,-1)],32))],10,G$))}}),[[`__scopeId`,`data-v-66a47616`]]);function c1(e,t){return t===!0&&!!e?.includes(`full_access`)}var l1=[`aria-busy`],u1={class:`workspace-approval__heading`},d1={class:`workspace-approval__copy`},f1={class:`workspace-approval__request`},p1=[`aria-expanded`],m1={key:0,class:`workspace-approval__details`},h1=[`disabled`],g1={class:`workspace-approval__actions`},_1=[`disabled`],v1={key:0,class:`workspace-approval__automatic`},y1=[`disabled`],b1=[`disabled`],x1={key:1,class:`workspace-approval__full`},S1=[`disabled`],C1={key:2,class:`workspace-approval__status`,role:`status`},w1={key:3,class:`workspace-approval__status`,role:`status`},T1={key:4,class:`workspace-approval__error`,role:`alert`},E1=H(E({__name:`WorkspaceApprovalCard`,props:{prompt:{},choices:{},agentName:{},busy:{type:Boolean},error:{},reviewAvailable:{type:Boolean},review:{},canManagePermissions:{type:Boolean}},emits:[`choose`],setup(e,{emit:t}){let n=e,r=t,i=O(!1),a=O(``),o=U(()=>n.prompt.trim().split(/\r?\n/)[0]||`请核对本次操作`);function s(e){n.busy||e===`full_access`&&!c1(n.choices,n.canManagePermissions)||(a.value=e,r(`choose`,e))}return(t,n)=>(u(),F(`section`,{class:`workspace-approval`,"aria-label":`工具审批`,"aria-busy":e.busy||void 0},[D(`div`,u1,[W(V(cb),{class:`workspace-approval__icon`,"aria-hidden":`true`}),D(`div`,d1,[D(`h3`,null,h(e.agentName?`${e.agentName}需要你的确认`:`需要你的确认`),1),D(`p`,f1,h(o.value),1)]),D(`button`,{class:`workspace-approval__detail`,type:`button`,"aria-expanded":i.value,onClick:n[0]||=e=>i.value=!i.value},[w(h(i.value?`收起`:`详情`),1),W(V(Xy),{"aria-hidden":`true`})],8,p1)]),i.value?(u(),F(`div`,m1,[D(`pre`,null,h(e.prompt),1),n[7]||=D(`p`,null,`允许本次只批准当前操作。`,-1),e.choices?.includes(`always`)?(u(),F(T,{key:0},[n[6]||=D(`p`,null,`永久规则只匹配相同操作和目标。`,-1),D(`button`,{type:`button`,disabled:e.busy,onClick:n[1]||=e=>s(`always`)},`始终允许此类操作`,8,h1)],64)):z(``,!0)])):z(``,!0),D(`div`,g1,[D(`button`,{class:`workspace-approval__deny`,type:`button`,disabled:e.busy,onClick:n[2]||=e=>s(`deny`)},`拒绝`,8,_1),e.reviewAvailable?(u(),F(`div`,v1,[D(`button`,{class:`workspace-approval__auto`,type:`button`,disabled:e.busy,onClick:n[3]||=e=>s(`review`)},[W(V(ub),{"aria-hidden":`true`}),n[8]||=w(`自动审批…`,-1)],8,y1),n[9]||=D(`small`,null,`自动判断,拿不准时询问你`,-1)])):z(``,!0),D(`button`,{class:`workspace-approval__allow`,type:`button`,disabled:e.busy,onClick:n[4]||=e=>s(`once`)},`允许本次`,8,b1)]),V(c1)(e.choices,e.canManagePermissions)?(u(),F(`div`,x1,[D(`button`,{type:`button`,disabled:e.busy,onClick:n[5]||=e=>s(`full_access`)},`以后全部授权`,8,S1),n[10]||=D(`small`,null,`仅此 Bot,以后所有操作无需询问`,-1)])):z(``,!0),e.busy?(u(),F(`p`,C1,h(a.value===`review`?`正在自动判断…`:`正在处理…`),1)):e.review?.decision===`ask`?(u(),F(`p`,w1,`需要你确认:`+h(e.review.reason),1)):z(``,!0),e.error?(u(),F(`p`,T1,h(e.error),1)):z(``,!0)],8,l1))}}),[[`__scopeId`,`data-v-d1692aa0`]]),D1=E({__name:`TaskResultNotice`,props:{content:{},taskReference:{},outcome:{},current:{type:Boolean}},emits:[`details`],setup(e,{emit:t}){let n=e,r=U(()=>n.content.split(/\r?\n/).map(e=>e.trim()).filter(e=>e&&!/^\[打开任务\]\(/.test(e))),i=U(()=>n.content.includes(`等待管理员复核`)),a=U(()=>n.outcome?{complete:`查好了`,running:`在处理`,review:`有新进展`,waiting:`需要你补充`,blocked:`卡住了`,cancelled:`任务已停止`,cancelling:`任务正在停止`}[n.outcome.status]:i.value?`有新进展`:`任务状态记录`),o=U(()=>{let e=r.value[0]?.match(/^「([^」]+)」的任务「([^」]+)」/);return e?`${e[1]} · ${e[2]}`:r.value[0]||`团队交付任务`}),s=U(()=>n.outcome?n.outcome.status===`review`?`等待负责人复核后继续`:`打开任务查看完整交付与验收状态`:i.value?`等待管理员复核后继续`:r.value.slice(1).join(` `)||`打开任务查看完整交付与验收状态`),c=U(()=>`/conversations/${encodeURIComponent(n.taskReference.conversationId)}?taskId=${encodeURIComponent(n.taskReference.taskId)}`);return(e,t)=>(u(),k(l$,{class:`task-result-notice`,title:a.value,icon:`file`,href:c.value,"accessible-label":`${a.value},${o.value},${s.value},打开任务`},null,8,[`title`,`href`,`accessible-label`]))}}),O1=[`data-goal-id`],k1={class:`chat-task-kind`},A1={class:`chat-task-owner`},j1={key:0,class:`chat-task-members`},M1={class:`chat-task-member-copy`},N1={key:1,class:`task-more`},P1={key:2,class:`chat-task-result`},F1={key:3,class:`task-artifacts`},I1=[`href`],L1={class:`chat-task-latest`},R1=H(E({__name:`ChatTaskCard`,props:{task:{},agents:{}},emits:[`details`],setup(e){let t=e,n=U(()=>t.agents.find(e=>e.id===t.task.goal.coordinatorId)),r=U(()=>t.task.assignments.filter(e=>e.status===`complete`).length),i=U(()=>{let{goal:e,assignments:r}=t.task;if(e.status===`complete`)return`目标已完成,验收结果可在详情中查看`;let i=r.filter(e=>e.status===`review`);if(i.length&&[`running`,`review`].includes(e.status))return`等待${n.value?.name||`负责人`}复核${i.length===1?`「${i[0].title}」`:` ${i.length} 项子任务`}`;if(e.status!==`running`)return te(e.status);let a=r.filter(e=>e.status===`running`);return a.length?`${a.length} 项子任务正在进行`:r.length?`负责人正在推进交付`:`负责人直接处理`});return(t,a)=>(u(),F(`section`,{class:`chat-task-card`,"data-goal-id":e.task.goal.id,"aria-label":`任务进展`},[D(`div`,k1,[W(Y,{name:e.task.assignments.length?`users`:`file`,size:16},null,8,[`name`]),w(h(e.task.assignments.length?`团队任务`:`交付任务`),1)]),D(`header`,null,[D(`h3`,null,h(e.task.goal.objective),1),D(`span`,{class:l([`task-status`,e.task.goal.status])},h(V(te)(e.task.goal.status)),3)]),D(`p`,A1,[w(`负责人 `+h(n.value?.name||`成员不可用`),1),e.task.assignments.length?(u(),F(T,{key:0},[w(` · `+h(e.task.assignments.length)+` 个子任务 · `+h(r.value)+` 项已复核`,1)],64)):z(``,!0)]),e.task.assignments.length?(u(),F(`ul`,j1,[(u(!0),F(T,null,p(e.task.assignments.slice(0,4),t=>(u(),F(`li`,{key:t.id},[W(Ye,{name:e.agents.find(e=>e.id===t.agentId)?.name||`成员`,avatar:e.agents.find(e=>e.id===t.agentId)?.avatar,size:24,animated:!1},null,8,[`name`,`avatar`]),D(`span`,M1,[w(h(t.title),1),D(`small`,null,` · `+h(e.agents.find(e=>e.id===t.agentId)?.name||`成员不可用`),1)]),D(`em`,{class:l(t.status)},[W(Y,{name:t.status===`complete`?`check`:t.status===`failed`?`alert`:`clock`,size:15},null,8,[`name`]),w(h(t.status===`complete`?`已复核`:V(te)(t.status)),1)],2)]))),128))])):z(``,!0),e.task.assignments.length>4?(u(),F(`small`,N1,`还有 `+h(e.task.assignments.length-4)+` 项,查看详情`,1)):z(``,!0),e.task.goal.result?(u(),F(`p`,P1,h(e.task.goal.result),1)):z(``,!0),e.task.artifacts.length?(u(),F(`div`,F1,[(u(!0),F(T,null,p(e.task.artifacts,e=>(u(),F(`a`,{key:e.id,href:`/api/app/files/${encodeURIComponent(e.id)}/download`,target:`_blank`,rel:`noopener`},[W(Y,{name:`file`,size:14}),w(h(e.name),1)],8,I1))),128))])):z(``,!0),D(`p`,L1,[W(Y,{name:`chat`,size:15}),w(h(i.value),1)]),D(`button`,{type:`button`,onClick:a[0]||=e=>t.$emit(`details`)},[a[1]||=w(`查看任务详情`,-1),W(Y,{name:`chevron-down`,class:`detail-chevron`,size:15})])],8,O1))}}),[[`__scopeId`,`data-v-c0308075`]]),z1={class:`runtime-card`,"aria-label":`临时子任务`},B1=H(E({__name:`RuntimeTaskCard`,props:{tasks:{}},emits:[`details`],setup(e){let t=e,n=U(()=>t.tasks.filter(e=>e.status===`complete`).length);return(t,r)=>(u(),F(`section`,z1,[D(`header`,null,[W(Y,{name:`branch`,size:16}),r[1]||=D(`strong`,null,`临时子任务`,-1),D(`small`,null,h(n.value)+`/`+h(e.tasks.length)+` 执行完成`,1)]),(u(!0),F(T,null,p(e.tasks.slice(0,3),e=>(u(),F(`div`,{key:e.id},[D(`span`,null,h(e.goal),1),D(`small`,null,h(e.status===`complete`?`执行完成`:V(te)(e.status)),1)]))),128)),r[3]||=D(`p`,null,`执行期间的临时助手,独立显示执行状态。`,-1),D(`button`,{type:`button`,onClick:r[0]||=e=>t.$emit(`details`)},[r[2]||=w(`查看执行详情`,-1),W(Y,{name:`chevron-down`,class:`detail-chevron`,size:15})])]))}}),[[`__scopeId`,`data-v-b441632d`]]),V1={key:0,class:`activity-capsule bot-created`,"aria-label":`Bot 已创建`},H1={class:`capsule-row`},U1={class:`capsule-row__note`},W1={class:`capsule-row__detail`},G1={key:1,class:`activity-capsule`,"aria-label":`协作活动`},K1={class:`capsule-row`},q1={key:1,class:`activity-capsule__glyph`},J1={class:`capsule-row__note`},Y1={class:`capsule-row__detail`},X1={class:`capsule-row__detail`},Z1={class:`capsule-row__detail`},Q1={key:1,class:`capsule-row__detail activity-capsule__description`},$1=H(E({__name:`WorkspaceActivityNotice`,props:{activity:{},agents:{}},setup(e){let t=e,n=U(()=>t.agents?.find(e=>e.id===t.activity.targetId)),r=U(()=>t.activity.conversationId?`/conversations/${encodeURIComponent(t.activity.conversationId)}${t.activity.taskId?`?taskId=${encodeURIComponent(t.activity.taskId)}`:``}`:void 0),i={bot_created:`持久 Bot`,helper_created:`临时助手`,team_created:`团队`,assignment_created:`任务`},a={bot_created:`已创建`,helper_created:`已创建`,team_created:`已组建`,assignment_created:`已派发`},o=U(()=>t.activity.kind===`assignment_created`?`branch`:`users`),s=U(()=>n.value?.archived?n.value.cleanupState===`pending`?`已退役,等待清理`:`已退役`:`仅参与本任务,结束后退役`);return(t,c)=>e.activity.kind===`bot_created`?(u(),F(`section`,V1,[D(`div`,H1,[W(n$,{as:r.value?`a`:`span`,href:r.value,"aria-label":r.value?`打开 Bot ${e.activity.targetName}`:void 0,name:e.activity.targetName,type:e.activity.description||i.bot_created,title:e.activity.description||void 0,arrow:!!r.value},{icon:S(()=>[W(Ye,{name:e.activity.targetName,avatar:n.value?.avatar,size:20,animated:!1},null,8,[`name`,`avatar`])]),_:1},8,[`as`,`href`,`aria-label`,`name`,`type`,`title`,`arrow`]),D(`span`,U1,h(a.bot_created),1)]),D(`p`,W1,h(e.activity.actorName)+` 创建了 Bot `+h(e.activity.targetName),1)])):(u(),F(`section`,G1,[D(`div`,K1,[W(n$,{as:r.value?`a`:`span`,href:r.value,"aria-label":r.value?`查看${e.activity.targetName}详情`:void 0,name:e.activity.targetName,type:i[e.activity.kind],arrow:!!r.value},{icon:S(()=>[e.activity.kind===`helper_created`?(u(),k(Ye,{key:0,name:e.activity.targetName,avatar:n.value?.avatar,size:20,animated:!1},null,8,[`name`,`avatar`])):(u(),F(`span`,q1,[W(Y,{name:o.value,size:12},null,8,[`name`])]))]),_:1},8,[`as`,`href`,`aria-label`,`name`,`type`,`arrow`]),D(`span`,J1,h(a[e.activity.kind]),1)]),D(`p`,Y1,h(e.activity.actorName)+` `+h(V(J)[e.activity.kind])+` `+h(e.activity.targetName),1),e.activity.kind===`helper_created`?(u(),F(T,{key:0},[D(`p`,X1,`临时助手 · `+h(s.value),1),D(`p`,Z1,`所属任务:`+h(e.activity.goalTitle||`当前交付目标`),1)],64)):z(``,!0),e.activity.description?(u(),F(`p`,Q1,h(e.activity.description),1)):z(``,!0)]))}}),[[`__scopeId`,`data-v-ecf7dad2`]]),e0={class:`managed-browser-card`,"aria-label":`托管浏览器会话`},t0={class:`browser-card-strip`},n0={class:`browser-card-copy`},r0={class:`browser-card-title`},i0=[`title`],a0={key:0},o0={key:0,class:`browser-card-detail`},s0={key:0,role:`status`},c0=[`value`],l0={key:2,class:`browser-card-error`,role:`alert`},u0={key:1},d0={key:2},f0=H(E({__name:`ManagedBrowserCard`,props:{card:{},readOnly:{type:Boolean}},emits:[`open`],setup(e,{emit:t}){let n=e,r=t,i=U(()=>({preparing:`正在准备`,ready:`可接管`,active:`浏览器已打开`,idle:`页面已保留`,closed:`会话已结束`,failed:`需要重试`})[n.card.status]),a=U(()=>{try{return n.card.url?new URL(n.card.url).hostname:``}catch{return``}}),o=U(()=>{let e=n.card.installation?.progress;return typeof e==`number`&&Number.isFinite(e)?Math.min(100,Math.max(0,e)):void 0});return(t,n)=>(u(),F(`section`,e0,[D(`div`,t0,[W(Y,{class:`browser-card-icon`,name:`globe`,size:22,"aria-hidden":`true`}),D(`div`,n0,[D(`strong`,r0,h(e.card.title||`${e.card.agentName}的浏览器`),1),D(`p`,{title:e.card.url},[a.value?(u(),F(`span`,a0,h(a.value)+` · `,1)):z(``,!0),D(`span`,{class:l({failed:e.card.status===`failed`})},h(i.value),3)],8,i0)]),e.readOnly?z(``,!0):(u(),F(`button`,{key:0,type:`button`,title:`接管后暂停机器人的浏览器操作;交还后恢复仍在运行的任务。`,onClick:n[0]||=t=>r(`open`,e.card)},h(e.card.status===`failed`?`重试并接管浏览器`:e.card.status===`closed`?`打开此 Bot 的浏览器`:`接管浏览器`),1))]),e.card.message||e.card.installation?.message||e.card.installation?.error||e.card.status===`preparing`?(u(),F(`div`,o0,[e.card.message||e.card.installation?.message?(u(),F(`p`,s0,h(e.card.message||e.card.installation?.message),1)):z(``,!0),e.card.status===`preparing`?(u(),F(`progress`,{key:1,value:o.value,max:`100`,"aria-label":`浏览器准备进度`},null,8,c0)):z(``,!0),e.card.installation?.error&&e.card.installation.error!==e.card.message?(u(),F(`p`,l0,h(e.card.installation.error),1)):z(``,!0)])):z(``,!0),e.card.status===`closed`?(u(),F(`small`,u0,`打开此 Bot 当前的浏览器;已关闭或回收的页面不会自动恢复。`)):e.card.status===`idle`?(u(),F(`small`,d0,`页面可跨任务继续使用;长时间空闲后可能回收。`)):z(``,!0)]))}}),[[`__scopeId`,`data-v-ae5d9f51`]]),p0={class:`draft-strip`},m0={class:`draft-copy`},h0={class:`draft-title`},g0={"data-test":`draft-heading`},_0={key:0,"data-test":`draft-granted`},v0={key:0,class:`hint`},y0={key:1,class:`hint`,"data-test":`credential-resume`},b0={class:`draft-summary`},x0={key:0},S0=[`disabled`],C0=[`disabled`],w0=[`disabled`],T0={key:1},E0=[`disabled`],D0={class:`hint`},O0={class:`draft-actions`},k0=[`disabled`],A0=[`disabled`],j0=[`disabled`],M0={key:3,class:`draft-actions`},N0={key:0,class:`hint`},P0=[`disabled`],F0=[`disabled`],I0={key:4,class:`draft-error`,role:`alert`},L0=`/api/app/vault`,R0=`凭证`,z0=H(E({__name:`CredentialDraftCard`,props:{card:{},readOnly:{type:Boolean}},emits:[`complete`],setup(e,{emit:t}){let n=e,r=t,a=O(n.card.resumeStatus),o=U(()=>a.value?{waiting:`填写并获授权后继续原任务`,queued:`已安排继续原任务`,cancelled:`自动继续已取消;不会重启原任务`,uncertain:`继续状态待核对;未自动重试`,authorization:`已保存,仍需完成使用授权`}[a.value]:``),s=O(!1),c=O(``),p=O(),g=O(``),_=O(),v=O(),y=O(!1),b=O(n.card.name),x=O(``),S=O(``),C=O(22),E=O(``),k=O(``),A=O(`password`),j=O(``),M=O(``),N=O(``),P=U(()=>p.value??n.card.status),I=U(()=>({website:`网站`,ssh:`SSH`,"api-token":`API Token`,env:`环境变量`})[n.card.kind]),L=U(()=>({pending:`待填写密钥`,sealed:`已入库`,confirmed:`已入库`,dismissed:`已驳回`})[P.value]),R=U(()=>_.value??n.card.grantNames??[]),B=U(()=>P.value===`confirmed`||P.value===`sealed`),V=U(()=>n.card.kind===`website`?`密码`:n.card.kind===`ssh`?A.value===`password`?`SSH 登录密码`:`私钥`:n.card.kind===`api-token`?`API Token`:`变量值`),H=U(()=>n.card.kind===`ssh`?(E.value?E.value+`@`:``)+S.value+`:`+C.value:n.card.kind===`env`?k.value:x.value),G=U(()=>!n.readOnly&&P.value===`pending`&&!!v.value?.online&&!!v.value.initialized);function K(){M.value=``,N.value=``}function ee(e){return{vault_revision_conflict:`原凭据已被修改,请刷新并让 Bot 重新发起更新。`,vault_missing:`请先在设置 → 密码与凭据创建密码库。`,vault_https_required:`公网访问需要 HTTPS;请在本机或局域网内操作。`,vault_invalid_request:`请检查填写内容:地址需为准确 origin,SSH 需要用户名,变量名需大写字母开头。`,vault_write_key_unavailable:`升级后需要在设置 → 密码与凭据中解锁一次,之后聊天卡片即可直接入库,无需再解锁。`,vault_entry_limit:`凭据数量已达到上限。`,vault_draft_settled:`这条凭证已处理过。`,vault_offline:`密码库暂时不可用。`}[e&&typeof e==`object`&&`code`in e?String(e.code):``]??`保存未完成;秘密未回显,请重试或到设置 → 密码与凭据处理。`}async function te(e,t=`GET`,n){return X(L0+e,{method:t,...n?{body:n}:{},timeoutMs:2e4,notifyUnauthorized:!1})}async function q(){if(!(n.readOnly||P.value!==`pending`))try{let e=await te(``);v.value=e,y.value=!1;let t=e.drafts?.find(e=>e.id===n.card.id);if(!t){let e=(await te(`/drafts`).catch(()=>void 0))?.drafts.find(e=>e.id===n.card.id);e&&e.status!==`pending`&&(p.value=e.status,a.value=e.resumeStatus,e.grantedNames&&(_.value=e.grantedNames));return}b.value=t.name,x.value=t.origin??``,S.value=t.host??``,C.value=t.port??22,E.value=t.username??``,k.value=t.envName??``,A.value=t.sshAuth??`password`,a.value=t.resumeStatus,j.value=e.bots?.some(e=>e.id===t.agentId)?t.agentId:``}catch(e){y.value=!0,c.value=ee(e)}}async function J(){if(s.value||!v.value)return;if(!M.value){c.value=`请填写`+V.value+`。`;return}let e={secret:M.value,...n.card.kind===`ssh`?{sshAuth:A.value,...A.value===`privateKey`&&N.value?{passphrase:N.value}:{}}:{}};K(),s.value=!0,c.value=``;try{let t=await te(`/drafts/`+encodeURIComponent(n.card.id)+`/save`,`POST`,e);g.value=b.value,p.value=t.status,a.value=t.resumeStatus,_.value=t.grantedNames??[]}catch(e){c.value=ee(e)}finally{K(),s.value=!1}}async function ne(){if(!s.value){s.value=!0,c.value=``;try{await te(`/drafts/`+encodeURIComponent(n.card.id)+`/dismiss`,`POST`,{}),p.value=`dismissed`,K()}catch(e){c.value=`驳回未完成:`+ee(e)}finally{s.value=!1}}}return f(()=>n.card.resumeStatus,e=>{a.value=e}),f(()=>n.card.status,e=>{e!==`pending`&&K()}),m(q),i(K),(t,n)=>(u(),F(`section`,{class:`credential-draft-card`,"aria-label":R0},[D(`div`,p0,[W(Y,{class:`draft-icon`,name:`shield`,size:22,"aria-hidden":`true`}),D(`div`,m0,[D(`strong`,h0,h((P.value===`confirmed`||P.value===`sealed`)&&g.value||e.card.name),1),D(`p`,g0,[n[7]||=w(`凭证 · `,-1),D(`span`,{class:l({dismissed:P.value===`dismissed`}),"data-test":`draft-status`},h(L.value),3)]),B.value&&R.value.length?(u(),F(`p`,_0,`已授权给:`+h(R.value.join(`、`)),1)):z(``,!0)])]),e.card.mode===`update`?(u(),F(`p`,v0,`更新原凭证,保留原引用与授权范围。`)):z(``,!0),o.value?(u(),F(`p`,y0,h(o.value),1)):z(``,!0),G.value?(u(),F(`form`,{key:2,class:`draft-form`,autocomplete:`off`,onSubmit:Z(J,[`prevent`])},[D(`dl`,b0,[n[9]||=D(`dt`,null,`名称`,-1),D(`dd`,null,h(b.value),1),n[10]||=D(`dt`,null,`类型`,-1),D(`dd`,null,h(I.value),1),e.card.kind===`api-token`?z(``,!0):(u(),F(T,{key:0},[D(`dt`,null,h(e.card.kind===`ssh`?`主机`:e.card.kind===`env`?`变量名`:`地址`),1),D(`dd`,null,h(H.value),1)],64)),e.card.kind===`website`&&E.value?(u(),F(T,{key:1},[n[8]||=D(`dt`,null,`用户名`,-1),D(`dd`,null,h(E.value),1)],64)):z(``,!0)]),e.card.kind===`ssh`?(u(),F(`label`,x0,[n[12]||=w(`认证方式`,-1),d(D(`select`,{"onUpdate:modelValue":n[0]||=e=>A.value=e,disabled:s.value,onChange:n[1]||=e=>{M.value=``,N.value=``}},[...n[11]||=[D(`option`,{value:`password`},`密码登录`,-1),D(`option`,{value:`privateKey`},`私钥登录`,-1)]],40,S0),[[Ne,A.value]])])):z(``,!0),D(`label`,null,[w(h(V.value)+` `,1),e.card.kind===`ssh`&&A.value===`privateKey`?d((u(),F(`textarea`,{key:0,"onUpdate:modelValue":n[2]||=e=>M.value=e,class:`masked`,rows:`3`,spellcheck:`false`,autocomplete:`off`,required:``,disabled:s.value},null,8,C0)),[[Q,M.value]]):d((u(),F(`input`,{key:1,"onUpdate:modelValue":n[3]||=e=>M.value=e,type:`password`,autocomplete:`new-password`,required:``,disabled:s.value},null,8,w0)),[[Q,M.value]])]),e.card.kind===`ssh`&&A.value===`privateKey`?(u(),F(`label`,T0,[n[13]||=w(`私钥口令(可选)`,-1),d(D(`input`,{"onUpdate:modelValue":n[4]||=e=>N.value=e,type:`password`,autocomplete:`new-password`,disabled:s.value},null,8,E0),[[Q,N.value]])])):z(``,!0),D(`p`,D0,h(e.card.mode===`update`?`保存会更新原条目,不增加 Bot 授权。`:e.card.kind===`website`?`网站需在密码页面配置登录表单后才能授权 Bot。`:`保存后自动授权给:`+(R.value.length?R.value.join(`、`):v.value?.bots?.find(e=>e.id===j.value)?.name??`主 Bot`)+`。`)+`无需解锁;秘密直接加密入库,不经过 Bot,不进入聊天记录。`,1),D(`div`,O0,[D(`button`,{type:`submit`,disabled:s.value},h(s.value?`保存中…`:`保存`),9,k0),D(`button`,{type:`button`,class:`secondary`,disabled:s.value,onClick:ne},`驳回`,8,A0),e.card.kind===`website`?(u(),F(`button`,{key:0,type:`button`,class:`link`,disabled:s.value,onClick:n[5]||=t=>r(`complete`,e.card)},`在密码页面配置登录表单`,8,j0)):z(``,!0)])],32)):!e.readOnly&&P.value===`pending`?(u(),F(`div`,M0,[v.value&&!v.value.initialized?(u(),F(`p`,N0,`尚未创建密码库,请先在设置 → 密码与凭据中创建。`)):z(``,!0),D(`button`,{type:`button`,disabled:s.value,onClick:n[6]||=t=>r(`complete`,e.card)},`去补全`,8,P0),D(`button`,{type:`button`,class:`secondary`,disabled:s.value,onClick:ne},`驳回`,8,F0)])):z(``,!0),c.value?(u(),F(`p`,I0,h(c.value),1)):z(``,!0)]))}}),[[`__scopeId`,`data-v-76a12310`]]),B0={key:0,class:`service-warnings`,"aria-label":`服务状态提示`},V0=E({__name:`ServiceWarnings`,props:{warnings:{}},setup(e){return(t,n)=>e.warnings.length?(u(),F(`div`,B0,[(u(!0),F(T,null,p(e.warnings,(e,t)=>(u(),k(l$,{key:`${e.service}:${e.code}:${t}`,title:`${e.service}:${e.message}`,icon:`info`},null,8,[`title`]))),128))])):z(``,!0)}}),H0={key:0},U0={key:0,class:`tool-trace__details`},W0={key:0,role:`status`},G0={key:2,class:`tool-trace__note`},K0={key:3},q0={key:4},J0=H(E({__name:`ToolTrace`,props:{tool:{},expanded:{type:Boolean,default:!1}},setup(e){let t=e,n=O(t.expanded||t.tool.status===`error`),r=I(),a=O(!1),o=O(``),s;async function c(){let e=t.tool.detailsUrl;if(!n.value||!e||r.value||a.value)return;let i=new AbortController;s=i,a.value=!0,o.value=``;try{let t=await X(e,{signal:i.signal});s===i&&!i.signal.aborted&&(r.value=t)}catch(e){s===i&&!i.signal.aborted&&(o.value=e instanceof Error?e.message:`工具详情加载失败`)}finally{s===i&&(a.value=!1)}}f(()=>t.tool.detailsUrl,()=>{s?.abort(),s=void 0,r.value=void 0,a.value=!1,o.value=``,c()}),f(n,()=>{c()},{immediate:!0}),i(()=>s?.abort());let d=U(()=>({running:`运行中`,success:`完成`,error:`失败`,pending:`等待`,interrupted:`已结束,结果未确认`})[t.tool.status]);function p(e){if(e==null||e===``)return``;if(typeof e==`string`)return e;try{return JSON.stringify(e,null,2)}catch{return String(e??``)}}let m=U(()=>p(r.value?r.value.input:t.tool.input)),g=U(()=>p(r.value?r.value.output:t.tool.output));return f(()=>t.expanded,e=>{e&&(n.value=!0)}),(t,r)=>(u(),F(`div`,{class:l([`tool-trace`,`tool-trace--${e.tool.status}`])},[D(`button`,{type:`button`,onClick:r[0]||=e=>n.value=!n.value},[D(`strong`,null,h(e.tool.name),1),e.tool.status===`error`||e.tool.status===`interrupted`?(u(),F(`small`,H0,h(d.value),1)):z(``,!0),D(`span`,{class:l([`tool-trace__caret`,{open:n.value}])},`›`,2)]),n.value&&(e.tool.commentary||m.value||g.value||e.tool.detailsUrl)?(u(),F(`div`,U0,[a.value?(u(),F(`small`,W0,`正在加载工具详情…`)):z(``,!0),o.value?(u(),F(`button`,{key:1,type:`button`,onClick:c},h(o.value)+`,点击重试`,1)):z(``,!0),e.tool.commentary?(u(),F(`section`,G0,[r[1]||=D(`small`,null,`说明`,-1),D(`pre`,null,h(e.tool.commentary),1)])):z(``,!0),m.value?(u(),F(`section`,K0,[r[2]||=D(`small`,null,`输入`,-1),D(`pre`,null,h(m.value),1)])):z(``,!0),g.value?(u(),F(`section`,q0,[r[3]||=D(`small`,null,`输出`,-1),D(`pre`,null,h(g.value),1)])):z(``,!0)])):z(``,!0)],2))}}),[[`__scopeId`,`data-v-11d8153f`]]),Y0={class:`turn-trace__summary`},X0={class:`turn-trace__content`},Z0={key:0,class:`turn-trace__item turn-trace__reasoning`},Q0=H(E({__name:`TurnTrace`,props:{group:{},streamIntervalMs:{}},setup(e){let t=e,n=U(()=>t.group.entries.filter(e=>e.type===`reasoning`).length),r=U(()=>t.group.entries.filter(e=>e.type===`tool`).length),i=U(()=>[n.value?`${n.value} 段思考`:``,r.value?`${r.value} 个工具`:``].filter(Boolean).join(` · `)),a=U(()=>t.group.status===`running`?`进行中`:t.group.status===`error`?`有错误`:``);return(t,n)=>(u(),k(l$,{class:`turn-trace`,icon:`brain`,title:e.group.status===`running`?`正在思考与使用工具`:e.group.status===`error`?`思考与工具出现错误`:`思考与工具`},{default:S(()=>[D(`p`,Y0,[w(h(i.value),1),a.value?(u(),F(T,{key:0},[w(` · `+h(a.value),1)],64)):z(``,!0)]),D(`div`,X0,[(u(!0),F(T,null,p(e.group.entries,t=>(u(),F(T,{key:t.id},[t.type===`reasoning`?(u(),F(`section`,Z0,[D(`header`,null,[W(Y,{name:`brain`,size:12}),w(`思考过程 · `+h(t.content.length)+` 字`,1)]),W(ZK,{"process-content":``,content:t.content,streaming:e.group.status===`running`,"stream-interval-ms":e.streamIntervalMs},null,8,[`content`,`streaming`,`stream-interval-ms`])])):(u(),k(J0,{key:1,class:`turn-trace__item turn-trace__tool`,tool:t.tool,expanded:!t.tool.detailsUrl},null,8,[`tool`,`expanded`]))],64))),128))])]),_:1},8,[`title`]))}}),[[`__scopeId`,`data-v-cea5c2eb`]]);function $0(e){return`${e.profile||``}\u0000${e.author||``}`}function e2(e){return!!(e.browserCard||e.credentialDrafts?.length||e.serviceWarnings?.length||e.content.trim()||e.attachments?.length||e.error||e.status===`failed`)}function t2(e,t){return e.some(e=>e.status===`failed`)||t.some(e=>e.type===`tool`&&e.tool.status===`error`)?`error`:e.some(e=>e.status===`streaming`)||t.some(e=>e.type===`tool`&&[`running`,`pending`].includes(e.tool.status))?`running`:`success`}function n2(e,t,n){if(!t.length)return;let r=[];for(let e of t){e.reasoning?.trim()&&r.push({id:`reasoning:${e.id}`,type:`reasoning`,messageId:e.id,content:e.reasoning});for(let t of e.tools??[])r.push({id:`tool:${e.id}:${t.id}`,type:`tool`,messageId:e.id,tool:t})}r.length&&e.push({id:`trace:${t[0].id}`,kind:`trace`,entries:r,status:t2(t,r)});for(let r of t){if(!e2(r))continue;let t=n?.get(r);t||(t={...r,reasoning:void 0,tools:void 0},n?.set(r,t)),e.push({id:`message:${r.id}`,kind:`message`,message:t})}}function r2(e,t){let n=[],r=[],i=``,a=()=>{n2(n,r,t),r=[],i=``};for(let t of m$(e)){if(t.role===`assistant`&&!t.timelineKind){let e=$0(t);r.length&&e!==i&&a(),i=e,r.push(t),e2(t)&&a();continue}a(),n.push({id:`message:${t.id}`,kind:`message`,message:t})}return a(),n}var i2={feishu:{label:`飞书`,color:`#3370ff`},dingtalk:{label:`钉钉`,color:`#0aa5d6`},wecom:{label:`企业微信`,color:`#07a35a`},telegram:{label:`Telegram`,color:`#2aabee`},slack:{label:`Slack`,color:`#4a154b`},discord:{label:`Discord`,color:`#5865f2`},email:{label:`Email`,color:`#526781`},signal:{label:`Signal`,color:`#3a76f0`},whatsapp:{label:`WhatsApp`,color:`#158a47`}},a2=/^\s*〔来自([^〕\n]{1,80})〕[ \t]*/,o2=new Map(Object.entries(i2).map(([e,t])=>[t.label.toLowerCase(),e]));function s2(e){let t=a2.exec(e);if(!t)return{body:e};let[n,...r]=t[1].split(/[·・]/),i=o2.get(n.trim().toLowerCase());if(!i)return{body:e};let a=r.join(`·`).trim()||void 0,o=i2[i].label;return{origin:{platform:i,label:o,group:a,text:a?`${o} · ${a}`:o},body:e.slice(t[0].length)}}function c2(e){return s2(e).body}var l2=/(?:^|\n)--- Attached Context ---\s*\n/,u2=/(?:^|\n)--- Context Warnings ---[\s\S]*$/,d2=/@(file|folder|url|image|tool|terminal):(?:"[^"\n]+"|'[^'\n]+'|`[^`\n]+`|\S+)/g;function f2(e,t){if(e===`assistant`)return rV(t);if(e!==`user`)return t;t=c2(t);let n=t.match(l2);if(!n||n.index===void 0)return t.replace(u2,``).trim();let r=t.slice(0,n.index).replace(u2,``).trim(),i=t.slice(n.index+n[0].length);return[[...new Set(Array.from(i.matchAll(d2),e=>e[0]))].filter(e=>!r.includes(e)).join(`
|
|
254
254
|
`),r].filter(Boolean).join(`
|
|
255
255
|
|
|
256
|
-
`)||r}var m2={key:0,class:`channel-origin`},h2={viewBox:`0 0 16 16`,width:`13`,height:`13`,"aria-hidden":`true`,focusable:`false`},g2={key:0,d:`m3.6 7.8 8.2-3.2c.4-.1.7.1.6.6l-1.4 6.6c-.1.4-.4.5-.7.3l-2-1.5-1 .9c-.1.1-.2.2-.4.2l.1-2.1 3.7-3.3c.2-.1 0-.2-.2-.1L5.9 8.9l-2-.6c-.4-.1-.4-.4-.3-.5Z`,fill:`currentColor`},_2={key:1,d:`M4.6 5.4c0-.6.5-1.1 1.1-1.1h4.6c.6 0 1.1.5 1.1 1.1v3.3c0 .6-.5 1.1-1.1 1.1H8.3L6.2 11.5V9.8h-.5c-.6 0-1.1-.5-1.1-1.1Z`,fill:`currentColor`},v2=H(E({__name:`ChannelOriginPill`,props:{content:{}},setup(e){let t=e,n=U(()=>c2(t.content).origin);return(e,t)=>n.value?(u(),F(`div`,m2,[W(n$,{size:`compact`,tone:V(a2)[n.value.platform].color,name:n.value.label,type:n.value.group,"aria-label":`来自${n.value.text}`,role:`note`},{icon:S(()=>[(u(),F(`svg`,h2,[t[0]||=D(`circle`,{cx:`8`,cy:`8`,r:`8`,fill:`currentColor`,opacity:`.18`},null,-1),n.value.platform===`telegram`?(u(),F(`path`,g2)):(u(),F(`path`,_2))]))]),_:1},8,[`tone`,`name`,`type`,`aria-label`])])):z(``,!0)}}),[[`__scopeId`,`data-v-d6298947`]]),y2={key:0,class:`timeline-header__leading`},b2=[`aria-label`,`title`],x2={class:`timeline-heading`},S2={key:3,class:`timeline-header__actions`},C2={key:0,class:`message-skeletons`,"aria-label":`正在加载消息`},w2={key:1,class:`new-chat-empty`},T2={key:0,class:`fork-divider`,role:`separator`},E2=[`disabled`],D2=[`aria-expanded`,`aria-controls`,`disabled`,`onClick`,`onKeydown`],O2={key:0,class:`communication-caption__before`},k2={class:`communication-caption__name`},A2={key:1,class:`communication-caption__after`},j2={key:2,class:`message__body`},M2={key:0,class:`message__meta`},N2={key:0,class:`message__execution`},P2={key:1},F2=[`onClick`],I2={key:1,class:`message__reasoning`},L2={key:3,class:`message__promoted`,role:`note`},R2=[`onClick`],z2=[`onClick`],B2=[`aria-expanded`,`aria-controls`,`onClick`,`onKeydown`],V2={key:7,class:`message__tools`},H2={key:8,class:`message__actions`},U2={key:0,class:`message__action-time`},W2=[`title`,`aria-label`,`onClick`],G2=[`onClick`],K2=[`onClick`],q2={key:5,role:`alert`,style:{color:`var(--danger)`,"font-size":`14px`}},J2=120,Y2=H(E({__name:`WorkspaceMessageTimeline`,props:{messages:{},thinkingLabel:{},currentGoalId:{},activityAgents:{},identity:{},title:{default:``},subtitle:{default:``},headerMainBot:{type:Boolean},headerAvatarName:{default:``},headerAvatar:{default:``},headerAvatarKind:{default:`agent`},headerAvatarMembers:{default:()=>[]},headerAvatarState:{default:`idle`},headerAvatarActivityKey:{},emptyTitle:{default:`开始一段新对话`},emptyDescription:{default:`从下方输入框发送消息,或选择左侧的历史会话。`},emptyLogo:{type:Boolean,default:!1},transparentHeader:{type:Boolean,default:!1},frostedHeader:{type:Boolean,default:!1},forkSourceTitle:{default:``},loading:{type:Boolean,default:!1},loadingOlder:{type:Boolean,default:!1},hasOlder:{type:Boolean,default:!1},showTools:{type:Boolean,default:!0},showAssistantIdentity:{type:Boolean,default:!0},interaction:{default:null},interactionBusy:{type:Boolean},interactionError:{},approvalAgentName:{},canManagePermissions:{type:Boolean},mentionNames:{default:()=>[]},agentAvatars:{default:()=>({})},agentStates:{default:()=>({})},thinking:{type:Boolean,default:!1},thinkingIdentity:{},allowBranch:{type:Boolean,default:!0},readOnly:{type:Boolean,default:!1},conversationId:{}},emits:[`profile`,`taskDetails`,`runtimeDetails`,`visibleMessages`,`loadOlder`,`quote`,`retrySend`,`branch`,`preview`,`previewFile`,`approvalChoice`,`clarify`,`browserControl`,`credentialDraft`,`openTask`,`openChat`],setup(e,{expose:t,emit:n}){let{appearance:r}=Mb(),a=e,c=n,d=O(null);ZQ(d,e=>c(`visibleMessages`,EQ(a.messages,e)));let g=O(!0),_=O(!1),b=O(``),x=O(``),E=O(0),A=U(()=>a.messages.slice(E.value)),j=new WeakMap,M=U(()=>i2(A.value,j)),N=U(()=>a.mentionNames.join(`\0`)),P,I,L=0,R=0,B;function H(){g.value=!1}function G(){let e=d.value,t=e&&[...e.querySelectorAll(`[data-message-id]`)].find(t=>t.getBoundingClientRect().bottom>e.getBoundingClientRect().top);t&&(B={id:t.dataset.messageId,top:t.getBoundingClientRect().top}),H()}async function K(){await o();let e=d.value,t=B;if(!e||!t)return;let n=e.querySelector(`[data-message-id="${CSS.escape(t.id)}"]`);n&&(e.scrollTop+=n.getBoundingClientRect().top-t.top),L=e.scrollTop,B=void 0}async function ee(){G(),E.value>0?(E.value=Math.max(0,E.value-J2),await K()):c(`loadOlder`)}f(()=>a.identity,()=>{E.value=Math.max(0,a.messages.length-J2),g.value=!0,_.value=!1,B=void 0,o(()=>q())},{immediate:!0}),f(()=>a.messages[0]?.id,(e,t)=>{if(!t||e===t)return;let n=a.messages.findIndex(e=>e.id===t);n>0&&E.value>0&&(E.value+=n),B&&K()});function q(){!g.value||I!==void 0||(I=requestAnimationFrame(()=>{I=void 0,g.value&&ue(`auto`)}))}let J=U(()=>a.thinking),ne=U(()=>[...a.messages].reverse().find(e=>e.role===`assistant`&&e.status===`streaming`)??[...a.messages].reverse().find(e=>e.role===`assistant`)),ie=U(()=>a.thinkingIdentity?.name||ne.value?.author||ne.value?.profile||`夭`),ae=U(()=>{if(a.thinkingIdentity)return a.thinkingIdentity.avatar;let e=ne.value?.profile;return e&&a.agentAvatars[e]||``}),oe,se=EV;function ce(e){if(e.status===`streaming`)return e.profile&&a.agentStates[e.profile]||`working`;if(e.status===`pending`||e.status===`unknown-receipt`)return`waiting`;if(e.status===`failed`)return`failure`;let t=e.profile?a.agentStates[e.profile]:void 0;return(t===`success`||t===`failure`)&&[...a.messages].reverse().find(t=>t.profile===e.profile&&t.role===`assistant`)?.id===e.id?t:`idle`}function le(){let e=d.value;if(!e)return;let t=e.scrollHeight-e.scrollTop-e.clientHeight;e.scrollTop>L&&t<80&&(g.value=!0),L=e.scrollTop,_.value=!g.value&&t>100}function ue(e=`smooth`){let t=d.value;t&&(g.value=!0,t.scrollTo({top:t.scrollHeight,behavior:e}),L=t.scrollTop)}function de(){q()}function fe(e){e=TQ(a.messages,e);let t=d.value;if(!t)return!1;let n=t.querySelector(`[data-message-id="${CSS.escape(e)}"]`);if(!n){let t=a.messages.findIndex(t=>t.id===e);return t<0?!1:(H(),E.value=Math.max(0,t-Math.floor(J2/2)),o(()=>fe(e)),!0)}return H(),n.scrollIntoView({block:`center`,behavior:`smooth`}),n.classList.remove(`message--revealed`),requestAnimationFrame(()=>n.classList.add(`message--revealed`)),window.setTimeout(()=>n.classList.remove(`message--revealed`),1800),!0}function pe(e,t){e=TQ(a.messages,e);let n=d.value;if(!n)return!1;let r=n.querySelector(`[data-message-id="${CSS.escape(e)}"]`);if(!r){let n=a.messages.findIndex(t=>t.id===e);return n<0?!1:(H(),E.value=Math.max(0,n-60),o(()=>pe(e,t)),!0)}H();let i=t?r.querySelector(`#${CSS.escape(t)}`):null;return(i||r).scrollIntoView({block:i?`start`:`center`,behavior:`smooth`}),r.classList.remove(`message--revealed`),requestAnimationFrame(()=>r.classList.add(`message--revealed`)),window.setTimeout(()=>r.classList.remove(`message--revealed`),1800),!0}function me(e,t){let n=e;if(window.matchMedia?.(`(prefers-reduced-motion: reduce)`)?.matches){t();return}n.style.height=`${n.offsetHeight}px`,n.style.overflow=`hidden`,n.offsetHeight,n.style.transition=`height 220ms ease, opacity 160ms ease`,n.style.height=`0px`,n.style.opacity=`0`;let r=()=>{window.clearTimeout(a),n.removeEventListener(`transitionend`,i),t()},i=e=>{e.target===n&&e.propertyName===`height`&&r()},a=window.setTimeout(r,320);n.addEventListener(`transitionend`,i)}let he=O(``),ge,_e=!1;async function ve(e,t){let n=d.value,r=t.getBoundingClientRect().top,i=he.value!==e;i&&!he.value&&(_e=g.value),H(),he.value=i?e:``,ge=i?t:void 0,await o(),n&&(t.isConnected&&(n.scrollTop+=t.getBoundingClientRect().top-r),L=n.scrollTop,!i&&_e&&n.scrollHeight-n.scrollTop-n.clientHeight<80&&(g.value=!0))}function ye(){let e=ge;!he.value||!e||(ve(he.value,e),e.focus({preventScroll:!0}))}f(()=>a.identity,()=>{he.value=``,ge=void 0});async function be(e){let t=await hr(p2(e.role,e.content));b.value=t?e.id:``,x.value=t?``:e.id,oe!==void 0&&window.clearTimeout(oe),oe=window.setTimeout(()=>{b.value=``,x.value=``,oe=void 0},1400)}function xe(e){return e.role===`user`||e.role===`assistant`&&!!e.content.trim()}function Se(e){return{preparing:`正在准备附件`,attached:`附件已就绪`,pending:`正在发送`,accepted:`已发送`,failed:`发送失败`,"unknown-receipt":`回执未知,请检查后重试`}[e||`settled`]||``}return f(()=>a.messages.length,async()=>{g.value&&(await o(),q())}),f(()=>a.messages.at(-1)?.content,async()=>{g.value&&(await o(),q())}),m(()=>o(()=>{q(),P=new ResizeObserver(q);let e=d.value?.querySelector(`.message-stack`);e&&P.observe(e)})),f(()=>a.messages.length,()=>o(()=>{let e=d.value?.querySelector(`.message-stack`);e&&P?.observe(e)})),i(()=>{P?.disconnect(),I!==void 0&&cancelAnimationFrame(I),oe!==void 0&&window.clearTimeout(oe)}),t({scrollToMessage:fe,scrollToAnchor:pe,scrollToBottom:ue,isFollowingBottom:()=>g.value}),(t,n)=>(u(),F(`section`,{class:l([`timeline-frame`,{"timeline-frame--transparent":e.transparentHeader,"timeline-frame--frosted":e.frostedHeader&&!e.transparentHeader}])},[e.title||e.transparentHeader||e.frostedHeader?(u(),F(`header`,{key:0,class:l([`timeline-header`,{"timeline-header--transparent":e.transparentHeader,"timeline-header--frosted":e.frostedHeader&&!e.transparentHeader}])},[e.transparentHeader?v(t.$slots,`header-leading`,{},void 0,!0,1):(u(),F(`div`,y2,[v(t.$slots,`header-leading`,{},void 0,!0)])),e.transparentHeader?z(``,!0):(u(),F(`button`,{key:2,type:`button`,class:`timeline-identity`,"aria-label":`${e.title},打开 Bot 主页${e.subtitle?`。${e.subtitle}`:``}`,title:e.subtitle||void 0,onClick:n[0]||=e=>c(`profile`)},[e.headerAvatarName&&e.headerAvatarKind===`team`?(u(),k(Me,{key:0,name:e.headerAvatarName,avatar:e.headerAvatar,members:e.headerAvatarMembers,size:28},null,8,[`name`,`avatar`,`members`])):e.headerAvatarName?(u(),k(Ye,{key:1,class:`timeline-header__avatar`,name:e.headerAvatarName,avatar:e.headerAvatar,"main-bot":e.headerMainBot,state:e.headerAvatarState,"activity-key":e.headerAvatarActivityKey,size:28},null,8,[`name`,`avatar`,`main-bot`,`state`,`activity-key`])):z(``,!0),D(`div`,x2,[D(`h2`,null,h(e.title),1)])],8,b2)),e.transparentHeader?v(t.$slots,`header-actions`,{},void 0,!0,4):(u(),F(`div`,S2,[v(t.$slots,`header-actions`,{},void 0,!0)]))],2)):z(``,!0),D(`div`,{ref_key:`scroller`,ref:d,class:`timeline`,onScrollPassive:le,onWheelPassive:n[14]||=e=>{e.deltaY<0&&H()},onTouchstartPassive:n[15]||=e=>{C(R)?R.value=e.touches[0]?.clientY??0:R=e.touches[0]?.clientY??0},onTouchmovePassive:n[16]||=e=>{let t=e.touches[0]?.clientY??V(R);t>V(R)&&H(),C(R)?R.value=t:R=t},onPointerdown:n[17]||=e=>{let t=d.value;t&&e.clientX>=t.getBoundingClientRect().right-18&&H()},onKeydown:n[18]||=e=>{[`PageUp`,`Home`,`ArrowUp`].includes(e.key)&&H()}},[e.loading&&!e.messages.length?(u(),F(`div`,C2,[(u(),F(T,null,p(4,e=>D(`div`,{key:e,class:l({user:e%2==0})},[...n[20]||=[D(`i`,null,null,-1),D(`span`,null,null,-1)]],2)),64))])):!e.messages.length&&e.emptyLogo?(u(),F(`div`,w2,[...n[21]||=[D(`img`,{class:`new-chat-empty__logo`,src:`/brand/AppIcon-1024.png`,width:`1024`,height:`1024`,alt:``,"aria-hidden":`true`},null,-1),D(`p`,null,`聊点什么`,-1)]])):e.messages.length?(u(),F(`div`,{key:3,class:l([`message-stack`,{"message-stack--interaction":e.interaction}])},[e.forkSourceTitle?(u(),F(`div`,T2,[D(`span`,null,[W(Y,{name:`branch`,size:13}),n[22]||=w(`FORK 来源 `,-1),D(`strong`,null,h(e.forkSourceTitle),1)])])):z(``,!0),e.hasOlder||E.value>0?(u(),F(`button`,{key:1,class:`load-older`,type:`button`,disabled:e.loadingOlder,onClick:ee},h(e.loadingOlder?`正在加载…`:`加载更早消息`),9,E2)):z(``,!0),(u(!0),F(T,null,p(M.value,t=>(u(),F(T,{key:t.id},[t.kind===`trace`&&e.showTools?(u(),k($0,{key:0,group:t,"stream-interval-ms":0},null,8,[`group`])):t.kind===`message`?(u(!0),F(T,{key:1},p([t.message],(t,i,a,o)=>{let d=[V(r),t,t.goalCard?e.activityAgents:void 0,e.showTools,e.showAssistantIdentity,N.value,e.agentAvatars[t.profile||``],ce(t),b.value===t.id,x.value===t.id,e.readOnly,e.allowBranch,he.value===t.id];if(o&&o.el&&o.key===t.id&&y(o,d))return o;let f=(u(),F(`article`,{key:t.id,"data-message-id":t.id,class:l([`message`,[`message--${t.role}`,{"message--failed":t.status===`failed`,"message--failure-notice":V(p$)(t)?.replacesContent&&!t.attachments?.length,"message--has-failure":!!V(p$)(t),"message--notice":!!V(h$)(t)||!!t.activity||!!t.taskOutcome,"message--task-card":!!t.goalCard||!!t.runtimeTaskCard,"message--browser":!!t.browserCard,"message--communication":!!t.communication,"message--tool-only":t.role===`assistant`&&!t.content&&!t.reasoning&&!!t.tools?.length,"message--assistant-internal":t.role===`assistant`&&!t.content.trim(),"message--assistant-anonymous":t.role===`assistant`&&!e.showAssistantIdentity}]])},[!t.goalCard&&!t.runtimeTaskCard&&!t.communication&&t.role!==`user`&&(t.role!==`assistant`||e.showAssistantIdentity)?(u(),k(Ye,{key:0,class:`message__avatar`,name:t.author||t.profile||(t.role===`assistant`?`夭`:`系`),avatar:t.profile&&e.agentAvatars[t.profile]||``,size:27,state:ce(t)},null,8,[`name`,`avatar`,`state`])):z(``,!0),t.communication?(u(),F(`button`,{key:1,type:`button`,class:`communication-caption`,"aria-expanded":t.peerMessageId?he.value===t.id:void 0,"aria-controls":t.peerMessageId?`peer-thread-${t.id}`:void 0,disabled:!t.peerMessageId,onClick:e=>ve(t.id,e.currentTarget),onKeydown:Ie(e=>he.value===t.id&&ye(),[`esc`])},[V(te)(t.communication).before?(u(),F(`span`,O2,h(V(te)(t.communication).before),1)):z(``,!0),W(Ye,{name:t.communication.peerName,avatar:t.communication.peerAvatar,size:16,animated:!1,"aria-hidden":`true`},null,8,[`name`,`avatar`]),D(`span`,k2,h(t.communication.peerName),1),V(te)(t.communication).after?(u(),F(`span`,A2,h(V(te)(t.communication).after),1)):z(``,!0),t.peerMessageId?(u(),k(Y,{key:2,name:`chevron-down`,class:l([`communication-caption__chevron`,{open:he.value===t.id}]),size:12,"aria-hidden":`true`},null,8,[`class`])):z(``,!0)],40,D2)):z(``,!0),W(rt,{name:`peer-drawer`},{default:S(()=>[t.communication&&t.peerMessageId&&he.value===t.id?(u(),k(z$,{key:0,id:`peer-thread-${t.id}`,"peer-message-id":t.peerMessageId,"conversation-id":e.conversationId,"read-only":e.readOnly,onClose:ye,onOpenChat:n[1]||=e=>c(`openChat`,e),onPreviewFile:n[2]||=e=>c(`previewFile`,e)},null,8,[`id`,`peer-message-id`,`conversation-id`,`read-only`])):z(``,!0)]),_:2},1024),!t.communication||V(re)(t.communication.direction)?(u(),F(`div`,j2,[t.goalCard?(u(),k(z1,{key:0,task:t.goalCard,agents:e.activityAgents??[],onDetails:n[3]||=e=>c(`taskDetails`)},null,8,[`task`,`agents`])):t.runtimeTaskCard?(u(),k(V1,{key:1,tasks:t.runtimeTaskCard,onDetails:e=>c(`runtimeDetails`,t.runtimeTaskCard.map(e=>e.id))},null,8,[`tasks`,`onDetails`])):V(p$)(t)?.replacesContent&&!t.attachments?.length?(u(),k(d$,{key:2,failure:V(p$)(t)},null,8,[`failure`])):t.activity?(u(),k(e0,{key:3,activity:t.activity,agents:e.activityAgents},null,8,[`activity`,`agents`])):t.role===`system`&&t.taskReference?(u(),k(O1,{key:4,content:t.content,"task-reference":t.taskReference,outcome:t.taskOutcome,current:t.taskOutcome?.goalId===e.currentGoalId,onDetails:n[4]||=e=>c(`taskDetails`)},null,8,[`content`,`task-reference`,`outcome`,`current`])):V(h$)(t)?(u(),k(_$,{key:5,message:t},null,8,[`message`])):(u(),F(T,{key:6},[(!t.browserCard||t.content.trim())&&!t.communication&&(t.role!==`assistant`||e.showAssistantIdentity)?(u(),F(`div`,M2,[D(`strong`,null,[t.isRemoteAgent?(u(),k(Y,{key:0,class:`message__remote-agent`,name:`globe`,size:12})):z(``,!0),w(h(t.role===`user`?`你`:t.author||t.profile||(t.role===`assistant`?`机器人`:`系统`)),1)]),t.metadata?(u(),F(`span`,N2,h(t.metadata),1)):z(``,!0),D(`time`,null,h(V(se)(t.createdAt)),1),t.status&&![`settled`,`streaming`].includes(t.status)?(u(),F(`span`,P2,h({preparing:`准备中`,attached:`附件已就绪`,pending:t.localRequestId?`发送中…`:`等待回执`,accepted:`已接收`,streaming:`生成中`,settled:`已完成`,failed:t.role===`user`?`发送失败`:`回复中断`,"unknown-receipt":`发送结果待确认`}[t.status]),1)):z(``,!0),t.localRequestId&&[`failed`,`unknown-receipt`].includes(t.status||``)?(u(),F(`button`,{key:2,type:`button`,onClick:e=>c(`retrySend`,t.localRequestId)},`重试发送`,8,F2)):z(``,!0)])):z(``,!0),t.reasoning?(u(),F(`details`,I2,[D(`summary`,null,[W(Y,{name:`brain`,size:13}),w(`思考过程 · `+h(t.reasoning.length)+` 字`,1)]),W(ZK,{"process-content":``,content:t.reasoning,streaming:t.status===`streaming`,"stream-interval-ms":0,onRendered:de},null,8,[`content`,`streaming`])])):z(``,!0),t.role===`user`?(u(),k(v2,{key:2,content:t.content},null,8,[`content`])):z(``,!0),t.promotedTo?(u(),F(`div`,L2,[W(Y,{name:`clock`,size:13}),n[23]||=D(`span`,null,`已转到后台继续,结果会发在下面。`,-1),e.readOnly?z(``,!0):(u(),F(`button`,{key:0,type:`button`,onClick:e=>c(`openTask`,t.promotedTo)},`查看进度`,8,R2))])):z(``,!0),W(rt,{css:!1,onLeave:me},{default:S(()=>[!t.promotedTo&&!V(p$)(t)?.replacesContent?(u(),F(`div`,{key:0,class:`message__content`,style:s(!t.communication&&(t.role===`user`||t.role===`assistant`)?V(Tb)(V(r)[t.role],t.role):void 0)},[W(ZK,{"separate-media":t.role===`user`||t.role===`assistant`||!!t.communication,bubble:!t.communication&&(t.role===`user`||t.role===`assistant`)&&!!t.content.trim(),attachments:t.attachments,"content-parts":t.contentParts,onPreview:e=>e.id&&t.attachments?.some(t=>t.id===e.id)?c(`preview`,e):c(`previewFile`,{name:e.name,url:e.url}),"stream-interval-ms":0,"file-profile":t.profile,content:t.communication&&!V(re)(t.communication.direction)?``:V(p2)(t.role,t.content),streaming:t.status===`streaming`,"legacy-media":t.role===`assistant`,plain:t.role===`user`,"mention-names":e.mentionNames,"outline-prefix":t.role===`assistant`?`outline-${t.id}`:``,"file-cards":t.role===`user`||t.role===`assistant`||!!t.communication,"process-content":!t.communication&&t.role!==`user`&&t.role!==`assistant`,onRendered:de,onFileLink:n[5]||=(e,t)=>c(`previewFile`,{name:e,url:t})},null,8,[`separate-media`,`bubble`,`attachments`,`content-parts`,`onPreview`,`file-profile`,`content`,`streaming`,`legacy-media`,`plain`,`mention-names`,`outline-prefix`,`file-cards`,`process-content`])],4)):z(``,!0)]),_:2},1024),t.backgroundTaskId&&t.role===`assistant`&&!t.promotedTo&&!e.readOnly?(u(),F(`button`,{key:4,type:`button`,class:`message__task-link`,onClick:e=>c(`openTask`,t.backgroundTaskId)},[n[24]||=w(`查看详情`,-1),W(Y,{name:`chevron-down`,class:`message__task-link-chevron`,size:12})],8,z2)):t.peerMessageId&&t.role===`assistant`&&!t.communication?(u(),F(T,{key:5},[D(`button`,{type:`button`,class:`message__task-link`,"aria-expanded":he.value===t.id,"aria-controls":`peer-thread-${t.id}`,onClick:e=>ve(t.id,e.currentTarget),onKeydown:Ie(e=>he.value===t.id&&ye(),[`esc`])},[w(h(he.value===t.id?`收起详情`:`展开详情`),1),W(Y,{name:`chevron-down`,class:l([`message__task-link-chevron`,{open:he.value===t.id}]),size:12},null,8,[`class`])],40,B2),W(rt,{name:`peer-drawer`},{default:S(()=>[he.value===t.id?(u(),k(z$,{key:0,id:`peer-thread-${t.id}`,"peer-message-id":t.peerMessageId,"conversation-id":e.conversationId,"read-only":e.readOnly,onClose:ye,onOpenChat:n[6]||=e=>c(`openChat`,e),onPreviewFile:n[7]||=e=>c(`previewFile`,e)},null,8,[`id`,`peer-message-id`,`conversation-id`,`read-only`])):z(``,!0)]),_:2},1024)],64)):z(``,!0),t.role===`user`&&Se(t.status)?(u(),F(`div`,{key:6,class:l([`message__delivery`,`message__delivery--${t.status}`]),role:`status`,"aria-live":`polite`},[W(Y,{name:t.status===`accepted`?`check`:t.status===`failed`||t.status===`unknown-receipt`?`alert`:`dots`,size:11},null,8,[`name`]),w(` `+h(Se(t.status)),1)],2)):z(``,!0),e.showTools&&t.tools?.length?(u(),F(`div`,V2,[(u(!0),F(T,null,p(t.tools,e=>(u(),k(Y0,{key:e.id,tool:e},null,8,[`tool`]))),128))])):z(``,!0),xe(t)?(u(),F(`div`,H2,[t.role===`assistant`&&!e.showAssistantIdentity&&t.createdAt?(u(),F(`time`,U2,h(V(se)(t.createdAt)),1)):z(``,!0),D(`button`,{type:`button`,class:l({"message-action--copied":b.value===t.id,"message-action--copy-failed":x.value===t.id}),title:b.value===t.id?`已复制`:x.value===t.id?`复制失败`:`复制`,"aria-label":b.value===t.id?`已复制`:x.value===t.id?`复制失败`:`复制消息`,onClick:e=>be(t)},[W(Y,{name:b.value===t.id?`check`:x.value===t.id?`alert`:`copy`,size:13},null,8,[`name`])],10,W2),e.readOnly?z(``,!0):(u(),F(`button`,{key:1,type:`button`,title:`引用`,"aria-label":`引用消息`,onClick:e=>c(`quote`,t)},[W(Y,{name:`quote`,size:13})],8,G2)),!e.readOnly&&e.allowBranch&&t.role===`assistant`?(u(),F(`button`,{key:2,type:`button`,title:`从这里分支`,"aria-label":`从这里分支`,onClick:e=>c(`branch`,t)},[W(Y,{name:`branch`,size:13})],8,K2)):z(``,!0)])):z(``,!0)],64)),t.browserCard?(u(),k(p0,{key:7,class:l({"managed-browser-card--after-text":!!t.content.trim()}),card:t.browserCard,"read-only":e.readOnly,onOpen:n[8]||=e=>c(`browserControl`,e)},null,8,[`class`,`card`,`read-only`])):z(``,!0),(u(!0),F(T,null,p(t.credentialDrafts??[],t=>(u(),k(B0,{key:t.id,card:t,"read-only":e.readOnly,onComplete:n[9]||=e=>c(`credentialDraft`,e)},null,8,[`card`,`read-only`]))),128)),t.serviceWarnings?.length?(u(),k(H0,{key:8,warnings:t.serviceWarnings},null,8,[`warnings`])):z(``,!0),t.autoRoute?(u(),k(ui,{key:9,route:t.autoRoute},null,8,[`route`])):z(``,!0)])):z(``,!0),V(p$)(t)&&(!V(p$)(t)?.replacesContent||t.attachments?.length)?(u(),k(d$,{key:3,failure:V(p$)(t)},null,8,[`failure`])):z(``,!0)],10,[`data-message-id`]));return f.memo=d,f},n,10),128)):z(``,!0)],64))),128)),J.value?(u(),k(G$,{key:2,"avatar-name":ie.value,avatar:ae.value,label:e.thinkingLabel},null,8,[`avatar-name`,`avatar`,`label`])):z(``,!0),e.interaction?.kind===`approval`?(u(),k(D1,{key:e.interaction.id,prompt:e.interaction.prompt,choices:e.interaction.options,"agent-name":e.approvalAgentName,busy:e.interactionBusy,error:e.interactionError,"review-available":e.interaction.reviewAvailable,review:e.interaction.approvalReview,"can-manage-permissions":e.canManagePermissions,onChoose:n[12]||=e=>c(`approvalChoice`,e)},null,8,[`prompt`,`choices`,`agent-name`,`busy`,`error`,`review-available`,`review`,`can-manage-permissions`])):e.interaction?(u(),k(c1,{key:4,interaction:e.interaction,busy:e.interactionBusy,onClarify:n[13]||=e=>c(`clarify`,e)},null,8,[`interaction`,`busy`])):z(``,!0),e.interaction&&e.interaction.kind!==`approval`&&e.interactionError?(u(),F(`p`,q2,h(e.interactionError),1)):z(``,!0)],2)):(u(),k(U$,{key:2,icon:`chat`,title:e.emptyTitle,description:e.emptyDescription},null,8,[`title`,`description`]))],544),W(rt,{name:`view-fade`},{default:S(()=>[_.value?(u(),F(`button`,{key:0,class:`jump-bottom`,type:`button`,onClick:n[19]||=e=>ue()},[W(Y,{name:`chevron-down`,size:15}),n[25]||=w(`回到底部 `,-1)])):z(``,!0)]),_:1})],2))}}),[[`__scopeId`,`data-v-6dcf639a`]]),X2=(e,t)=>`${e}:${t??``}`;function Z2(e,t){let n=e.findIndex(e=>e.id===t.id);if(n<0)return[...e,t];let r=e.slice();return r[n]=t,r}function Q2(e,t){if(t.conversationId!==e.conversation.id)return e;let n=t.data,r=t=>(t??null)===(e.task?.id??null);switch(t.type){case`approval.summary.changed`:return r(n.conversationTaskId)?{...e,approvalSummaries:n.status===`pending`?Z2(e.approvalSummaries??[],n):e.approvalSummaries?.filter(e=>e.id!==n.id)}:e;case`conversation.changed`:return{...e,conversation:t.data};case`message.changed`:{let n=t.data;if(!r(n.conversationTaskId))return e;let i=n.visible===!1?e.messages.filter(e=>e.id!==n.id):Z2(e.messages,n).sort((e,t)=>e.seq-t.seq);return{...e,messages:i}}case`task.changed`:{let n=t.data;return{...e,tasks:Z2(e.tasks??[],n),task:e.task?.id===n.id?n:e.task}}case`task.deleted`:return{...e,tasks:(e.tasks??[]).filter(e=>e.id!==n.id)};case`run.changed`:return r(n.conversationTaskId)?{...e,run:t.data}:e;case`context.changed`:return r(n.conversationTaskId)?{...e,context:n}:e;case`interaction.changed`:return r(n.conversationTaskId)?{...e,interactions:n.resolved?e.interactions.filter(e=>e.id!==n.id):Z2(e.interactions,t.data)}:e;case`runtime-task.changed`:return r(n.conversationTaskId)?{...e,runtimeTasks:Z2(e.runtimeTasks??[],ZZ(e.runtimeTasks,[t.data])[0])}:e;case`runtime-task.recorded`:return r(n.conversationTaskId)?{...e,runtimeTasks:e.runtimeTasks?.map(e=>e.id===n.taskId?{...e,records:XZ(e.records,[n.record]),recordCursor:Math.max(e.recordCursor??0,n.record.seq)}:e)}:e;case`assignment.changed`:return n.goalId===e.task?.id?{...e,assignments:Z2(e.assignments??[],t.data)}:e;case`goal.changed`:return n.id===e.task?.id?{...e,task:{...e.task,goal:t.data}}:e;default:return e}}var $2=class{agents=[];conversationRows=[];get conversations(){return this.conversationRows}set conversations(e){this.conversationRows=[...e].sort(Zv)}sectionRows=[];get sections(){return this.sectionRows}set sections(e){this.sectionRows=[...e].sort(SI)}details=new Map;cursor=0;selectedTasks=new Map;reads=new Map;entityVersions=new Map;snapshotFloor=0;messageReconciler=new sy;staleDetails=new Set;acceptReceipt(e){if(e.cursor!==void 0)for(let[t,n]of[[`message.changed`,e.message],[`run.changed`,e.run],[`conversation.changed`,e.conversation],[`task.changed`,e.task]])n&&this.accept({seq:e.cursor,type:t,conversationId:e.run.conversationId,data:n})}acceptSectionReceipt(e){if(e.cursor!==void 0){for(let t of[...e.sections??[],...e.section?[e.section]:[]])this.accept({seq:e.cursor,type:`conversation-section.changed`,data:t});e.deletedSectionId&&this.accept({seq:e.cursor,type:`conversation-section.deleted`,data:{id:e.deletedSectionId}}),e.conversation&&this.accept({seq:e.cursor,type:`conversation.changed`,conversationId:e.conversation.id,data:e.conversation})}}beginRead(){let e=Symbol();return this.reads.set(e,[]),e}cancelRead(e){this.reads.delete(e)}finishRead(e,t,n=!0){let r=X2(t.conversation.id,t.task?.id),i=this.details.get(r);i&&t.cursor!==void 0&&t.cursor<this.snapshotFloor&&(t={...i,cursor:t.cursor,messages:t.messages,hiddenMessageIds:i.hiddenMessageIds,hasOlder:i.hasOlder});let a={...t,runtimeTasks:ZZ(i?.runtimeTasks,t.runtimeTasks)};if(i&&n){let e=new Map(i.messages.map(e=>[e.id,e]));for(let n of t.messages)(!e.get(n.id)||(this.entityVersions.get(`message:${n.id}`)??this.snapshotFloor)<=(t.cursor??2**53-1))&&e.set(n.id,n);a={...t,runtimeTasks:ZZ(i.runtimeTasks,t.runtimeTasks),hasOlder:i.hasOlder,messages:[...e.values()].filter(e=>e.visible!==!1&&!t.hiddenMessageIds?.includes(e.id)).sort((e,t)=>e.seq-t.seq)}}for(let n of this.reads.get(e)??[]){if(n.seq<=(t.cursor??0))continue;let r=n.data.id;if(n.type===`conversation.deleted`&&r===t.conversation.id||n.type===`task.deleted`&&r===t.task?.id)throw this.reads.delete(e),Error(`会话或任务已被删除`);a=Q2(a,n)}this.reads.delete(e),this.details.set(r,a),this.staleDetails.delete(r);for(let e of a.messages)this.messageReconciler.remember(e);return a}hydrate(e){if(!e||!Number.isSafeInteger(e.cursor)||e.cursor<0||!Array.isArray(e.agents)||!Array.isArray(e.conversations)||!Array.isArray(e.details))throw Error(`Bot 会话数据尚未就绪,正在重新同步`);let t=e.cursor===0&&e.conversations.length===0,n=new Map(t?[]:this.details);t&&this.reads.clear();let r=[...this.reads.values()].flat().filter(t=>t.seq>e.cursor).sort((e,t)=>e.seq-t.seq);this.entityVersions.clear(),this.snapshotFloor=e.cursor,this.messageReconciler.clear(),this.agents=e.agents,this.conversations=e.conversations,this.sections=e.sections??[],this.cursor=e.cursor,this.details.clear(),this.staleDetails.clear();for(let t of e.details){let e=X2(t.conversation.id,t.task?.id),r=n.get(e),i=new Map(r?.messages.map(e=>[e.id,e]));for(let e of t.messages)i.set(e.id,e);let a=r?{...t,runtimeTasks:ZZ(r.runtimeTasks,t.runtimeTasks),hasOlder:r?.hasOlder??t.hasOlder,messages:[...i.values()].filter(e=>e.visible!==!1&&!t.hiddenMessageIds?.includes(e.id)).sort((e,t)=>e.seq-t.seq)}:t;this.details.set(e,a);for(let e of a.messages)this.messageReconciler.remember(e)}for(let[t,r]of n){let n=e.conversations.find(e=>e.id===r.conversation.id),i=e.details.find(e=>e.conversation.id===r.conversation.id);if(!this.details.has(t)&&n&&(e.partialDetails||n.archived||i?.tasks?.some(e=>e.id===r.task?.id))){this.details.set(t,{...r,conversation:n}),this.staleDetails.add(t);for(let e of r.messages)this.messageReconciler.remember(e)}}for(let e of r)this.accept(e)}get(e,t){if(t)return this.details.get(X2(e,t));let n=this.selectedTasks.get(e);return(n?this.details.get(X2(e,n)):void 0)??[...this.details.values()].find(t=>t.conversation.id===e)}apply(e){e.seq<=this.cursor||(this.accept(e),this.cursor=e.seq)}accept(e){e=this.messageReconciler.normalize(e);let t=e.data,n=e.type===`runtime-task.recorded`?`runtime-record:${t.taskId}:${t.record?.seq}`:`${e.type.split(`.`)[0]}:${t.id??e.conversationId}`;if(!(e.seq<(this.entityVersions.get(n)??this.snapshotFloor))){this.entityVersions.set(n,e.seq);for(let t of this.reads.values())t.push(e);e.type===`agent.changed`&&(this.agents=Z2(this.agents,e.data)),e.type===`agent.deleted`&&(this.agents=this.agents.filter(e=>e.id!==t.id)),e.type===`conversation.changed`&&(this.conversations=Z2(this.conversations,e.data)),e.type===`conversation.deleted`&&(this.conversations=this.conversations.filter(e=>e.id!==t.id)),e.type===`conversation-section.changed`&&(this.sections=Z2(this.sections,e.data)),e.type===`conversation-section.deleted`&&(this.sections=this.sections.filter(e=>e.id!==t.id));for(let[n,r]of this.details)e.type===`conversation.deleted`&&r.conversation.id===t.id||e.type===`task.deleted`&&r.task?.id===t.id?this.details.delete(n):e.conversationId===r.conversation.id&&this.details.set(n,Q2(r,e))}}},e4=[`disabled`,`aria-label`,`title`],t4={class:`sr-only`,role:`status`},n4=H(E({__name:`HarnessVoiceInput`,props:{disabled:{type:Boolean},draftKey:{},botId:{},compact:{type:Boolean}},emits:[`text`,`error`,`activeChange`],setup(e,{emit:t}){let n=e,r=t,a=O(`idle`);f(a,e=>r(`activeChange`,e!==`idle`),{flush:`sync`});let o,s,c,d=0,p;function g(){d++,clearTimeout(c),p?.abort(),p=void 0,o?.state===`recording`&&o.stop(),o=void 0,s?.getTracks().forEach(e=>e.stop()),s=void 0,a.value=`idle`}f(()=>[n.draftKey,n.botId],g),f(()=>n.disabled,e=>{e&&g()});let _=()=>{document.hidden&&g()};m(()=>document.addEventListener(`visibilitychange`,_)),i(()=>{g(),document.removeEventListener(`visibilitychange`,_)});async function v(){if(a.value===`recording`){o?.stop();return}if(a.value!==`idle`){g();return}let e=++d;a.value=`starting`,p=new AbortController;try{if(!(await X(`/api/app/harness/speech${n.botId?`?botId=${encodeURIComponent(n.botId)}`:``}`,{signal:p.signal})).transcription)throw Error(`请在模型与语音中选择已配置的语音识别模型。`);if(!navigator.mediaDevices?.getUserMedia)throw Error(`当前浏览器无法录音,请使用本机地址或 HTTPS。`);let t=await navigator.mediaDevices.getUserMedia({audio:!0});if(e!==d){t.getTracks().forEach(e=>e.stop());return}s=t;let i=[];o=new MediaRecorder(s);let l=0;o.ondataavailable=e=>{l+=e.data.size,l>2097152?(g(),r(`error`,`录音超过大小限制,请分段录入。`)):i.push(e.data)},o.onstop=async()=>{if(e===d){clearTimeout(c),s?.getTracks().forEach(e=>e.stop()),s=void 0,a.value=`transcribing`;try{let t=new Blob(i,{type:o?.mimeType||`audio/webm`}),a=await new Promise((e,n)=>{let r=new FileReader;r.onload=()=>e(String(r.result).split(`,`)[1]),r.onerror=()=>n(Error(`录音读取失败`)),r.readAsDataURL(t)}),s=await X(`/api/app/harness/speech/transcription`,{method:`POST`,body:{requestId:crypto.randomUUID(),...n.botId?{botId:n.botId}:{},audio:a,mimeType:t.type.split(`;`)[0]},signal:p?.signal});e===d&&(r(`text`,s.text),g())}catch(t){e===d&&(g(),r(`error`,t instanceof Error?t.message:`转录失败`))}}},o.start(1e3),a.value=`recording`,c=setTimeout(()=>o?.stop(),6e4)}catch(t){e===d&&(g(),r(`error`,t instanceof Error?t.message:`录音失败`))}}return(t,n)=>(u(),F(`button`,{type:`button`,class:l([`voice-input`,{"voice-input--compact":e.compact,"voice-input--recording":a.value===`recording`}]),disabled:e.disabled,"aria-label":a.value===`recording`?`结束录音并转录`:a.value===`idle`?`语音输入`:`取消语音`,title:a.value===`recording`?`结束录音并转录`:a.value===`transcribing`?`转录中 · 取消`:a.value===`starting`?`准备中 · 取消`:`语音输入`,onClick:v},[e.compact?(u(),F(T,{key:0},[a.value===`idle`?(u(),k(V(eb),{key:0,"aria-hidden":`true`})):a.value===`recording`?(u(),k(V(ib),{key:1,"aria-hidden":`true`})):a.value===`starting`?(u(),k(V(Qy),{key:2,class:`voice-spinner`,"aria-hidden":`true`})):(u(),k(V(mb),{key:3,"aria-hidden":`true`})),D(`span`,t4,h(a.value===`recording`?`录音中`:a.value===`transcribing`?`正在转录`:a.value===`starting`?`正在准备录音`:``),1)],64)):(u(),F(T,{key:1},[w(h(a.value===`recording`?`结束录音`:a.value===`transcribing`?`转录中 · 取消`:a.value===`starting`?`准备中 · 取消`:`语音`),1)],64))],10,e4))}}),[[`__scopeId`,`data-v-c50bede6`]]),r4={key:0,class:`composer-reference`},i4={class:`composer-activity-slot`},a4={key:0,class:`composer-activity`,role:`status`,"aria-label":`机器人输入状态`,"aria-live":`polite`,"aria-atomic":`true`},o4={key:0,class:`composer-sending`,role:`status`,"aria-live":`polite`},s4={key:0,class:`composer-attachments`,"aria-label":`附件`},c4=[`src`,`alt`],l4=[`aria-label`,`onClick`],u4={class:`composer-input-row`},d4=[`disabled`,`placeholder`,`aria-describedby`],f4={class:`composer-toolbar`},p4={class:`composer-tools`},m4=[`disabled`,`aria-expanded`],h4={key:0,class:`composer-popover composer-add-menu`,role:`menu`,"aria-label":`添加到消息`},g4=[`disabled`],_4=[`disabled`],v4=[`aria-checked`,`disabled`],y4=[`disabled`,`title`],b4=[`disabled`],x4={class:`composer-model-slot`},S4={class:`composer-actions`},C4=[`disabled`,`title`,`aria-label`,`aria-expanded`],w4={class:`composer-popover composer-popover--settings`,role:`dialog`,"aria-label":`输入设置`},T4=[`aria-checked`,`disabled`],E4=[`disabled`],D4=[`disabled`],O4={key:5,class:`composer-queue-slot`},k4=[`title`],A4={key:6,class:`composer-stop-hitbox`},j4={class:`composer-send-hitbox`},M4={key:0,class:`composer-voice-slot`},N4=[`disabled`,`aria-label`],P4={key:0,class:`composer-menu`,role:`listbox`},F4={class:`composer-menu__label`},I4=[`aria-selected`,`disabled`,`onMousedown`,`onMouseenter`],L4={class:`composer-menu__avatar`},R4={key:0},z4={key:0},B4={key:1,class:`composer-drop-hint`},V4={key:0,class:`composer-error`,role:`alert`},H4=26214400,U4=8,W4=H(E({__name:`ComposerShell`,props:{mode:{default:`chat`},botLayout:{type:Boolean},draftKey:{default:``},voiceBotId:{},voiceActive:{type:Boolean},placeholder:{default:`畅所欲言`},disabled:{type:Boolean,default:!1},streaming:{type:Boolean,default:!1},stopWhileRunning:{type:Boolean,default:!1},sending:{type:Boolean,default:!1},modelLabel:{default:`选择模型`},fastMode:{type:Boolean,default:!1},fastModeDisabled:{type:Boolean,default:!1},reasoningEffort:{default:`默认`},reasoningValue:{default:``},reasoningOptions:{default:()=>[]},contextUsed:{default:0},contextLimit:{default:0},contextPercent:{},showContext:{type:Boolean,default:!1},queueMode:{type:Boolean,default:!1},toolTraceVisible:{type:Boolean,default:!0},reference:{default:null},mentionOptions:{default:()=>[]},slashCommands:{default:()=>[]},attachmentsEnabled:{type:Boolean,default:!0},activityText:{default:``},deliveryAvailable:{type:Boolean,default:!1},deliveryMode:{type:Boolean,default:!1},deliveryDisabled:{type:Boolean,default:!1},deliveryDisabledReason:{default:``}},emits:[`send`,`stop`,`modelClick`,`fastModeToggle`,`reasoningChange`,`settingsClick`,`queueToggle`,`toolTraceToggle`,`clearReference`,`error`,`update:deliveryMode`],setup(e,{expose:t,emit:n}){let r=e,a=n,c=O(``),g=O(null),_=O(null),y=O([]),b=O(!1),x=O(0),C=U(()=>x.value>0),E=O(null),A=O(0),j=O(null),M=O(``),N=O([]),P=O(!1),I=O(null),L=O(null),R=O(null),B=`composer-hint-${Qe()}`,H=O(null),G=O(!1),K=O(null),ee=O(null),te=U(()=>r.mode===`group`&&(r.mentionOptions.length>0||r.deliveryAvailable)),q=O(!1),J=O(``),ne,re=U(()=>!r.disabled&&!r.sending&&(c.value.trim().length>0||y.value.length>0)),ie=U(()=>!!c.value.trim()||y.value.length>0),ae=U(()=>r.disabled||r.sending||r.streaming||q.value),oe=U(()=>r.streaming&&(r.stopWhileRunning||r.mode===`chat`)),se=U(()=>oe.value&&!c.value.trim()&&!y.value.length),ce=U(()=>r.modelLabel.split(`/`).filter(Boolean).at(-1)||r.modelLabel),le=U(()=>r.contextPercent??(r.contextLimit>0?r.contextUsed/r.contextLimit*100:void 0)),ue=U(()=>r.contextUsed>0),de=U(()=>r.showContext||r.contextLimit>0||ue.value),fe=U(()=>{let e=j.value===`slash`?r.slashCommands:r.mentionOptions,t=M.value.trim().toLocaleLowerCase();return e.filter(e=>!t||e.label.toLocaleLowerCase().includes(t)||e.detail?.toLocaleLowerCase().includes(t)).slice(0,10)});function pe(e=r.draftKey){return e?`yaovi:composer:${r.mode}:${e}`:``}let me=!1,he=!1,ge=new Map;f([c,y,N],()=>{if(he&&!me){let e=pe();ge.set(e,(ge.get(e)??0)+1)}},{deep:!0,flush:`sync`});function _e(){he=!0;let e=pe();return{key:e,revision:ge.get(e)??0}}function ve(){let e=pe();me=!0;try{c.value=e&&localStorage.getItem(e)||``}finally{me=!1}o(Me)}function ye(e){let t=pe();t&&(e?localStorage.setItem(t,e):localStorage.removeItem(t))}function be(e){J.value=e,a(`error`,e),window.clearTimeout(ne),ne=window.setTimeout(()=>{J.value=``},4500)}function xe(e){return e<1024?`${e} B`:e<1048576?`${(e/1024).toFixed(1)} KB`:`${(e/1024/1024).toFixed(1)} MB`}function Se(e){return e.startsWith(`image/`)}function Ce(e){if(!r.attachmentsEnabled){be(`当前上游不支持团队附件`);return}let t=U4-y.value.length;if(t<=0)return be(`最多添加 ${U4} 个文件`);let n=[];for(let r of e.slice(0,t)){if(r.size>H4){be(`${r.name} 超过 25 MiB`);continue}n.push({id:`${r.name}:${r.size}:${r.lastModified}:${Qe(`attachment`)}`,file:r,name:r.name,size:r.size,type:r.type||`application/octet-stream`,previewUrl:Se(r.type)?URL.createObjectURL(r):void 0})}y.value.push(...n),e.length>t&&be(`最多添加 ${U4} 个文件`)}function we(e){let t=y.value.findIndex(t=>t.id===e);if(t<0)return;let[n]=y.value.splice(t,1);n?.previewUrl&&URL.revokeObjectURL(n.previewUrl)}function Te(){y.value.forEach(e=>e.previewUrl&&URL.revokeObjectURL(e.previewUrl)),y.value=[],_.value&&(_.value.value=``)}function Ee(e){let t=e.target;Ce(Array.from(t.files??[])),t.value=``}function De(e){let t=Array.from(e.clipboardData?.files??[]);t.length&&Ce(t)}function Oe(e){e.dataTransfer?.types.includes(`Files`)&&(e.preventDefault(),x.value+=1)}function ke(e){e.dataTransfer?.types.includes(`Files`)&&(e.preventDefault(),e.dataTransfer&&(e.dataTransfer.dropEffect=`copy`))}function Ae(e){e.preventDefault(),x.value=Math.max(0,x.value-1)}function je(e){e.preventDefault(),x.value=0,Ce(Array.from(e.dataTransfer?.files??[]))}function Me(){let e=g.value;!e||E.value!==null||(e.style.height=`auto`,e.style.height=`${Math.min(400,Math.max(30,e.scrollHeight))}px`)}function Ne(){E.value=null,g.value&&(g.value.style.height=`auto`),o(Me)}function Pe(e){let t=g.value;if(!t)return;e.preventDefault();let n=e.clientY,r=t.clientHeight,i=e.pointerId,a=e.currentTarget;a.setPointerCapture(i);let o=e=>{E.value=Math.min(400,Math.max(30,r-(e.clientY-n)))},s=()=>{a.removeEventListener(`pointermove`,o),a.removeEventListener(`pointerup`,s),a.removeEventListener(`pointercancel`,s)};a.addEventListener(`pointermove`,o),a.addEventListener(`pointerup`,s),a.addEventListener(`pointercancel`,s)}function Fe(){let e=g.value;if(!e||b.value)return;let t=c.value.slice(0,e.selectionStart);if(t.startsWith(`/`)&&!t.includes(` `)&&!t.includes(`
|
|
257
|
-
`)&&r.slashCommands.length){j.value=`slash`,M.value=t.slice(1),A.value=0;return}if(r.mode===`group`&&r.mentionOptions.length){let e=t.match(/(?<![A-Za-z0-9_.%+/@-])@([^\s@]*)$/u);if(e&&!/https?:\/\/\S*$/u.test(t)){j.value=`mention`,M.value=e[1]??``,A.value=0;return}}j.value=null}function Le(){G.value=!G.value,P.value=!1,j.value=null,G.value&&o(()=>K.value?.querySelector(`[role="menuitem"]:not(:disabled)`)?.focus())}function Re(e=!1){G.value=!1,e&&ee.value?.focus()}function ze(e){if(e.key===`Escape`)e.preventDefault(),e.stopPropagation(),Re(!0);else if(e.key===`Tab`)Re(!0);else if([`ArrowDown`,`ArrowUp`,`Home`,`End`].includes(e.key)){e.preventDefault();let t=Array.from(K.value?.querySelectorAll(`button: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 Be(){Re(!0),_.value?.click()}function Ve(e=!1){P.value=!1,e&&I.value?.focus()}function He(){P.value=!P.value,Re(),j.value=null,P.value&&r.botLayout&&o(()=>L.value?.querySelector(`.composer-popover button:not(:disabled)`)?.focus())}function Ue(e){if(e.key===`Escape`)e.preventDefault(),e.stopPropagation(),Ve(!0);else if(P.value&&[`ArrowDown`,`ArrowUp`,`Home`,`End`].includes(e.key)){e.preventDefault();let t=Array.from(L.value?.querySelectorAll(`.composer-popover button:not(:disabled)`)??[]);if(!t.length)return;let 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 X(){Re();let e=g.value;if(!e)return;let t=e.selectionStart,n=c.value.slice(0,t),r=`${n&&!/\s$/.test(n)?` `:``}@`;c.value=n+r+c.value.slice(e.selectionEnd),o(()=>{e.focus(),e.setSelectionRange(t+r.length,t+r.length),Fe(),Me()})}function We(e){r.disabled||r.deliveryDisabled||r.sending||(a(`update:deliveryMode`,e),Re(),o(()=>g.value?.focus()))}function Ge(e){if(e.disabled)return;let t=g.value;if(!t)return;let n=t.selectionStart,r=c.value.slice(0,n),i=c.value.slice(n);if(j.value===`slash`){let n=e.insertText??`/${e.label} `;c.value=n+i,o(()=>t.setSelectionRange(n.length,n.length))}else{let a=r.match(/(?<![A-Za-z0-9_.%+/@-])@([^\s@]*)$/u),s=a?n-a[0].length:n,l=c.value.slice(0,s),u=`@${e.label} `;c.value=l+u+i,e.id!==`all`&&!N.value.includes(e.id)&&N.value.push(e.id),o(()=>{let e=l.length+u.length;t.setSelectionRange(e,e)})}j.value=null,o(()=>{t.focus(),Me()})}function Ke(e){if(j.value&&fe.value.length){if(e.key===`ArrowDown`){e.preventDefault(),A.value=(A.value+1)%fe.value.length;return}if(e.key===`ArrowUp`){e.preventDefault(),A.value=(A.value-1+fe.value.length)%fe.value.length;return}if(e.key===`Escape`){e.preventDefault(),j.value=null;return}if(e.key===`Tab`||e.key===`Enter`&&!e.shiftKey){e.preventDefault();let t=fe.value[A.value];t&&Ge(t);return}}e.key!==`Enter`||e.shiftKey||b.value||e.isComposing||e.keyCode===229||(e.preventDefault(),Je())}function qe(){requestAnimationFrame(()=>{b.value=!1,Fe()})}function Je(){if(!re.value)return;let e={text:c.value.trim(),files:y.value.map(e=>e.file),mentionIds:[...N.value]};a(`send`,e),o(()=>g.value?.focus())}function Ye(e){if(e){if((ge.get(e.key)??0)!==e.revision)return!1;if(e.key!==pe())return e.key&&localStorage.removeItem(e.key),!1}return c.value=``,N.value=[],ye(``),Te(),Ne(),o(()=>g.value?.focus()),!0}function Xe(e){e.target.closest(`button, input, textarea, select, summary, a, [role="option"], .composer-resize`)||g.value?.focus()}function Ze(e){let t=e.target;K.value?.contains(t)||Re(),t.closest(`.composer-settings-anchor`)||(P.value=!1),t.closest(`.composer-shell`)||(j.value=null,P.value=!1)}return f(c,e=>{ye(e),o(Me)}),f(()=>r.draftKey,()=>{ve(),P.value=!1,G.value=!1}),f(()=>r.disabled,e=>{e&&(Re(),Ve())}),m(()=>{ve(),document.addEventListener(`pointerdown`,Ze)}),i(()=>{Te(),window.clearTimeout(ne),document.removeEventListener(`pointerdown`,Ze)}),t({attachFiles:Ce,filesSnapshot:()=>y.value.map(e=>e.file),focus:()=>g.value?.focus(),clearAfterSend:Ye,submissionToken:_e}),(t,n)=>(u(),F(`div`,{class:l([`composer-area`,{"composer-area--bot":e.botLayout}])},[e.reference?(u(),F(`div`,r4,[W(Y,{name:`quote`,size:14}),D(`span`,null,[D(`small`,null,h(e.reference.author?`回复 ${e.reference.author}`:`回复消息`),1),D(`strong`,null,h(e.reference.content.replace(/\s+/g,` `).trim()),1)]),D(`button`,{type:`button`,"aria-label":`取消引用`,onClick:n[0]||=e=>a(`clearReference`)},[W(Y,{name:`close`,size:13})])])):z(``,!0),D(`div`,i4,[v(t.$slots,`activity`,{},()=>[W(rt,{name:`composer-activity`},{default:S(()=>[e.activityText?(u(),F(`div`,a4,[n[21]||=D(`span`,{class:`composer-typing-dots`,"aria-hidden":`true`},[D(`i`),D(`i`),D(`i`)],-1),D(`strong`,null,h(e.activityText),1)])):z(``,!0)]),_:1})],!0),e.sending?(u(),F(`span`,o4,[...n[22]||=[D(`i`,null,null,-1),w(`正在发送`,-1)]])):z(``,!0)]),v(t.$slots,`before-input`,{},void 0,!0),D(`div`,{class:l([`composer-shell`,{"composer-shell--drag":C.value,"composer-shell--disabled":e.disabled}]),onMousedown:Xe,onDragenter:Oe,onDragover:ke,onDragleave:Ae,onDrop:je},[D(`input`,{ref_key:`fileInput`,ref:_,class:`composer-file-input`,type:`file`,multiple:``,onChange:Ee},null,544),D(`div`,{class:`composer-resize`,title:`拖动调整高度;双击复位`,onPointerdown:Pe,onDblclick:Ne},null,32),y.value.length?(u(),F(`div`,s4,[(u(!0),F(T,null,p(y.value,e=>(u(),F(`div`,{key:e.id,class:l([`composer-attachment`,{image:Se(e.type)}])},[e.previewUrl?(u(),F(`img`,{key:0,src:e.previewUrl,alt:e.name},null,8,c4)):(u(),k(Y,{key:1,name:`file`,size:19})),D(`span`,null,[D(`strong`,null,h(e.name),1),D(`small`,null,h(xe(e.size)),1)]),D(`button`,{type:`button`,"aria-label":`移除 ${e.name}`,onClick:t=>we(e.id)},[W(Y,{name:`close`,size:12})],8,l4)],2))),128))])):z(``,!0),D(`div`,u4,[e.botLayout?(u(),F(`span`,{key:0,id:B,class:l([`composer-shortcut-hint`,{"is-editing":!!c.value,"composer-shortcut-hint--stacked":y.value.length>0}])},`Enter 发送 · Shift + Enter 换行`,2)):z(``,!0),d(D(`textarea`,{ref_key:`textarea`,ref:g,"onUpdate:modelValue":n[1]||=e=>c.value=e,class:l([`composer-textarea`,{"composer-textarea--empty":!c.value}]),style:s(E.value===null?void 0:{height:`${E.value}px`}),rows:`1`,disabled:e.disabled,placeholder:e.deliveryAvailable&&e.deliveryMode?`描述希望团队交付的结果…`:e.botLayout?`畅所欲言`:e.placeholder,"aria-label":`消息`,"aria-describedby":e.botLayout?B:void 0,onInput:Fe,onClick:Fe,onKeydown:Ke,onPaste:De,onCompositionstart:n[2]||=e=>b.value=!0,onCompositionend:qe},null,46,d4),[[Q,c.value]]),D(`div`,f4,[D(`div`,p4,[e.botLayout||te.value?(u(),F(`div`,{key:0,ref_key:`actionsAnchor`,ref:K,class:`composer-popover-anchor composer-actions-anchor`,onKeydown:ze},[D(`button`,{ref_key:`actionsTrigger`,ref:ee,class:`composer-tool composer-add`,type:`button`,disabled:e.disabled,"aria-label":`添加`,"aria-haspopup":`menu`,"aria-expanded":G.value,onClick:Le,onKeydown:n[3]||=Ie(Z(e=>!G.value&&Le(),[`prevent`]),[`down`])},[W(Y,{name:`plus`,size:20})],40,m4),W(rt,{name:`composer-menu`},{default:S(()=>[e.botLayout||G.value?d((u(),F(`div`,h4,[D(`button`,{type:`button`,role:`menuitem`,disabled:!e.attachmentsEnabled,onClick:Be},[W(Y,{name:`paperclip`,size:20}),n[23]||=D(`span`,null,`添加附件`,-1)],8,g4),e.mentionOptions.length?(u(),F(`button`,{key:0,type:`button`,role:`menuitem`,onClick:X},[W(V(Jy),{class:`composer-action-icon`,"aria-hidden":`true`}),n[24]||=D(`span`,null,`提及成员`,-1)])):z(``,!0),e.deliveryAvailable?(u(),F(T,{key:1},[n[26]||=D(`div`,{class:`composer-add-menu__divider`,role:`separator`},null,-1),D(`button`,{type:`button`,role:`menuitem`,disabled:e.deliveryDisabled||e.sending,onClick:n[4]||=t=>We(!e.deliveryMode)},[W(V(fb),{class:`composer-action-icon`,"aria-hidden":`true`}),D(`span`,null,[n[25]||=D(`strong`,null,`交付目标`,-1),D(`small`,null,h(e.deliveryDisabledReason||(e.deliveryMode?`已开启;点击返回普通聊天`:`让团队持续完成一个结果`)),1)]),e.deliveryMode?(u(),k(Y,{key:0,name:`check`,size:16})):z(``,!0)],8,_4)],64)):z(``,!0),e.botLayout?(u(),F(T,{key:2},[n[28]||=D(`div`,{class:`composer-add-menu__divider`,role:`separator`},null,-1),D(`div`,{ref_key:`optionsTarget`,ref:R,class:`composer-options-target`},null,512),D(`button`,{type:`button`,role:`menuitemcheckbox`,"aria-checked":e.toolTraceVisible,disabled:e.disabled,onClick:n[5]||=e=>a(`toolTraceToggle`)},[W(Y,{name:`brain`,size:20}),n[27]||=D(`span`,null,`显示思考`,-1),e.toolTraceVisible?(u(),k(Y,{key:0,name:`check`,size:16})):z(``,!0)],8,v4)],64)):z(``,!0)],512)),[[tt,G.value]]):z(``,!0)]),_:1})],544)):(u(),F(`button`,{key:1,class:`composer-tool composer-add`,type:`button`,disabled:e.disabled||!e.attachmentsEnabled,title:e.attachmentsEnabled?`添加附件`:`当前上游不支持附件`,"aria-label":`添加附件`,onClick:n[6]||=e=>_.value?.click()},[W(Y,{name:`plus`,size:20})],8,y4)),e.deliveryAvailable&&e.deliveryMode?(u(),F(`button`,{key:2,class:`composer-delivery-chip`,type:`button`,disabled:e.disabled||e.deliveryDisabled||e.sending,"aria-label":`关闭交付目标,返回普通聊天`,title:`关闭交付目标,返回普通聊天`,onClick:n[7]||=e=>We(!1)},[W(V(fb),{class:`composer-action-icon`,"aria-hidden":`true`}),n[29]||=D(`span`,null,`交付目标`,-1),W(Y,{name:`close`,size:15})],8,b4)):z(``,!0),D(`div`,x4,[e.mode===`chat`?(u(),k(oX,{key:e.draftKey,"model-label":ce.value,"reasoning-value":e.reasoningValue,"reasoning-label":e.reasoningEffort,"reasoning-options":e.reasoningOptions,disabled:e.disabled,"fast-mode":e.fastMode,"fast-disabled":e.fastModeDisabled,compact:e.botLayout,combined:e.botLayout,"fast-target":e.botLayout?R.value:void 0,onModelClick:n[8]||=e=>{P.value=!1,a(`modelClick`,e)},onReasoningChange:n[9]||=e=>a(`reasoningChange`,e),onFastModeToggle:n[10]||=e=>a(`fastModeToggle`,e)},null,8,[`model-label`,`reasoning-value`,`reasoning-label`,`reasoning-options`,`disabled`,`fast-mode`,`fast-disabled`,`compact`,`combined`,`fast-target`])):v(t.$slots,`model-controls`,{contextTarget:H.value,optionsTarget:R.value},void 0,!0,1)])]),D(`div`,S4,[e.botLayout?(u(),F(`span`,{key:0,ref_key:`contextTarget`,ref:H,class:`composer-context-slot`},null,512)):z(``,!0),e.mode===`chat`&&!e.botLayout?(u(),F(`div`,{key:1,ref_key:`settingsAnchor`,ref:L,class:`composer-popover-anchor composer-settings-anchor`,onKeydown:Ue},[D(`button`,{ref_key:`settingsTrigger`,ref:I,class:l([`composer-tool composer-tool--icon`,{active:P.value}]),type:`button`,disabled:e.disabled,title:e.botLayout?`更多选项`:`设置`,"aria-label":e.botLayout?`更多选项`:`设置`,"aria-haspopup":`dialog`,"aria-expanded":P.value,onClick:He,onKeydown:n[11]||=Ie(Z(e=>!P.value&&He(),[`prevent`]),[`down`])},[W(Y,{name:`dots`,size:18})],42,C4),W(rt,{name:`composer-menu`},{default:S(()=>[d(D(`div`,w4,[e.botLayout?(u(),F(`div`,{key:0,ref_key:`optionsTarget`,ref:R,class:`composer-options-target`},null,512)):z(``,!0),D(`button`,{class:`composer-setting-row`,type:`button`,role:`switch`,"aria-checked":e.toolTraceVisible,disabled:e.disabled,onClick:n[12]||=t=>e.botLayout?a(`toolTraceToggle`):a(`settingsClick`)},[D(`span`,null,[W(Y,{name:`brain`,size:15}),n[30]||=w(`显示思考`,-1)]),e.toolTraceVisible?(u(),k(Y,{key:0,name:`check`,size:16})):z(``,!0)],8,T4),e.botLayout?z(``,!0):(u(),F(`button`,{key:1,class:`composer-setting-row`,type:`button`,title:`首版暂未启用语音输入`,onClick:n[13]||=e=>be(`语音输入尚未启用`)},[...n[31]||=[D(`span`,null,`语音输入设置`,-1)]]))],512),[[tt,P.value]])]),_:1})],544)):e.botLayout?z(``,!0):(u(),F(`button`,{key:2,class:l([`composer-tool`,{active:e.toolTraceVisible}]),type:`button`,disabled:e.disabled,title:`显示思考`,onClick:n[14]||=e=>a(`toolTraceToggle`)},[W(Y,{name:`brain`,size:16}),n[32]||=D(`span`,null,`思考`,-1)],10,E4)),!e.botLayout&&e.mode===`group`&&e.mentionOptions.length?(u(),F(`button`,{key:3,type:`button`,class:`composer-tool composer-mention-hint`,disabled:e.disabled,"aria-label":`提及成员`,onClick:X},[W(V(Jy),{class:`composer-action-icon`,"aria-hidden":`true`}),n[33]||=D(`span`,null,`提及成员`,-1)],8,D4)):z(``,!0),e.botLayout?z(``,!0):(u(),F(`span`,{key:4,ref_key:`contextTarget`,ref:H,class:`composer-context-slot`},null,512)),v(t.$slots,`context`,{},()=>[de.value?(u(),k(XY,{key:0,class:`composer-context`,compact:e.botLayout,"used-tokens":e.contextUsed,"limit-tokens":e.contextLimit,"percent-used":le.value},null,8,[`compact`,`used-tokens`,`limit-tokens`,`percent-used`])):z(``,!0)],!0),W(n4,{compact:e.botLayout,disabled:e.disabled||e.voiceActive,"draft-key":e.draftKey,"bot-id":e.voiceBotId,onActiveChange:n[15]||=e=>q.value=e,onText:n[16]||=e=>c.value+=(c.value?`
|
|
258
|
-
`:``)+e,onError:n[17]||=e=>a(`error`,e)},null,8,[`compact`,`disabled`,`draft-key`,`bot-id`]),e.mode===`chat`&&e.streaming&&re.value?(u(),F(`span`,
|
|
256
|
+
`)||r}var p2={key:0,class:`channel-origin`},m2={viewBox:`0 0 16 16`,width:`13`,height:`13`,"aria-hidden":`true`,focusable:`false`},h2={key:0,d:`m3.6 7.8 8.2-3.2c.4-.1.7.1.6.6l-1.4 6.6c-.1.4-.4.5-.7.3l-2-1.5-1 .9c-.1.1-.2.2-.4.2l.1-2.1 3.7-3.3c.2-.1 0-.2-.2-.1L5.9 8.9l-2-.6c-.4-.1-.4-.4-.3-.5Z`,fill:`currentColor`},g2={key:1,d:`M4.6 5.4c0-.6.5-1.1 1.1-1.1h4.6c.6 0 1.1.5 1.1 1.1v3.3c0 .6-.5 1.1-1.1 1.1H8.3L6.2 11.5V9.8h-.5c-.6 0-1.1-.5-1.1-1.1Z`,fill:`currentColor`},_2=H(E({__name:`ChannelOriginPill`,props:{content:{}},setup(e){let t=e,n=U(()=>s2(t.content).origin);return(e,t)=>n.value?(u(),F(`div`,p2,[W(n$,{size:`compact`,tone:V(i2)[n.value.platform].color,name:n.value.label,type:n.value.group,"aria-label":`来自${n.value.text}`,role:`note`},{icon:S(()=>[(u(),F(`svg`,m2,[t[0]||=D(`circle`,{cx:`8`,cy:`8`,r:`8`,fill:`currentColor`,opacity:`.18`},null,-1),n.value.platform===`telegram`?(u(),F(`path`,h2)):(u(),F(`path`,g2))]))]),_:1},8,[`tone`,`name`,`type`,`aria-label`])])):z(``,!0)}}),[[`__scopeId`,`data-v-d6298947`]]),v2=[`inert`],y2={key:0,class:`timeline-header__leading`},b2=[`aria-label`,`title`],x2={class:`timeline-heading`},S2={key:3,class:`timeline-header__actions`},C2=[`inert`],w2={key:0,class:`message-skeletons`,"aria-label":`正在加载消息`},T2={key:1,class:`new-chat-empty`},E2={key:0,class:`fork-divider`,role:`separator`},D2=[`disabled`],O2={key:1,class:`communication-caption`},k2={class:`communication-caption__before`},A2=[`aria-label`,`title`,`aria-expanded`,`aria-controls`,`disabled`,`onClick`],j2={class:`communication-caption__name`},M2={key:2,class:`message__body`},N2={key:0,class:`message__meta`},P2={key:0,class:`message__execution`},F2={key:1},I2=[`onClick`],L2={key:1,class:`message__reasoning`},R2={key:3,class:`message__promoted`,role:`note`},z2=[`onClick`],B2=[`onClick`],V2=[`aria-expanded`,`aria-controls`,`onClick`,`onKeydown`],H2={key:7,class:`message__tools`},U2={key:8,class:`message__actions`},W2={key:0,class:`message__action-time`},G2=[`title`,`aria-label`,`onClick`],K2=[`onClick`],q2=[`onClick`],J2={key:5,role:`alert`,style:{color:`var(--danger)`,"font-size":`14px`}},Y2=120,X2=H(E({__name:`WorkspaceMessageTimeline`,props:{messages:{},thinkingLabel:{},currentGoalId:{},activityAgents:{},identity:{},title:{default:``},subtitle:{default:``},headerMainBot:{type:Boolean},headerAvatarName:{default:``},headerAvatar:{default:``},headerAvatarKind:{default:`agent`},headerAvatarMembers:{default:()=>[]},headerAvatarState:{default:`idle`},headerAvatarActivityKey:{},emptyTitle:{default:`开始一段新对话`},emptyDescription:{default:`从下方输入框发送消息,或选择左侧的历史会话。`},emptyLogo:{type:Boolean,default:!1},transparentHeader:{type:Boolean,default:!1},frostedHeader:{type:Boolean,default:!1},forkSourceTitle:{default:``},loading:{type:Boolean,default:!1},loadingOlder:{type:Boolean,default:!1},hasOlder:{type:Boolean,default:!1},showTools:{type:Boolean,default:!0},showAssistantIdentity:{type:Boolean,default:!0},interaction:{default:null},interactionBusy:{type:Boolean},interactionError:{},approvalAgentName:{},canManagePermissions:{type:Boolean},mentionNames:{default:()=>[]},agentAvatars:{default:()=>({})},agentStates:{default:()=>({})},thinking:{type:Boolean,default:!1},thinkingIdentity:{},allowBranch:{type:Boolean,default:!0},readOnly:{type:Boolean,default:!1},conversationId:{}},emits:[`peerView`,`profile`,`taskDetails`,`runtimeDetails`,`visibleMessages`,`loadOlder`,`quote`,`retrySend`,`branch`,`preview`,`previewFile`,`approvalChoice`,`clarify`,`browserControl`,`credentialDraft`,`openTask`,`openChat`],setup(e,{expose:t,emit:n}){let{appearance:r}=Mb(),a=e,c=n,d=O(null),g=O(null);m(()=>{g.value=d.value?.closest(`.workspace-chat`)??null});let _=O(null);ZQ(_,e=>c(`visibleMessages`,EQ(a.messages,e)));let b=O(!0),x=O(!1),E=O(``),A=O(``),j=O(0),M=U(()=>a.messages.slice(j.value)),N=new WeakMap,P=U(()=>r2(M.value,N)),I=U(()=>a.mentionNames.join(`\0`)),R,B,H=0,G=0,K;function ee(){b.value=!1}function te(){let e=_.value,t=e&&[...e.querySelectorAll(`[data-message-id]`)].find(t=>t.getBoundingClientRect().bottom>e.getBoundingClientRect().top);t&&(K={id:t.dataset.messageId,top:t.getBoundingClientRect().top}),ee()}async function J(){await o();let e=_.value,t=K;if(!e||!t)return;let n=e.querySelector(`[data-message-id="${CSS.escape(t.id)}"]`);n&&(e.scrollTop+=n.getBoundingClientRect().top-t.top),H=e.scrollTop,K=void 0}async function ne(){te(),j.value>0?(j.value=Math.max(0,j.value-Y2),await J()):c(`loadOlder`)}f(()=>a.identity,()=>{j.value=Math.max(0,a.messages.length-Y2),b.value=!0,x.value=!1,K=void 0,o(()=>ie())},{immediate:!0}),f(()=>a.messages[0]?.id,(e,t)=>{if(!t||e===t)return;let n=a.messages.findIndex(e=>e.id===t);n>0&&j.value>0&&(j.value+=n),K&&J()});function ie(){!b.value||B!==void 0||(B=requestAnimationFrame(()=>{B=void 0,b.value&&pe(`auto`)}))}let ae=U(()=>a.thinking),oe=U(()=>[...a.messages].reverse().find(e=>e.role===`assistant`&&e.status===`streaming`)??[...a.messages].reverse().find(e=>e.role===`assistant`)),se=U(()=>a.thinkingIdentity?.name||oe.value?.author||oe.value?.profile||`夭`),ce=U(()=>{if(a.thinkingIdentity)return a.thinkingIdentity.avatar;let e=oe.value?.profile;return e&&a.agentAvatars[e]||``}),le,ue=EV;function de(e){if(e.status===`streaming`)return e.profile&&a.agentStates[e.profile]||`working`;if(e.status===`pending`||e.status===`unknown-receipt`)return`waiting`;if(e.status===`failed`)return`failure`;let t=e.profile?a.agentStates[e.profile]:void 0;return(t===`success`||t===`failure`)&&[...a.messages].reverse().find(t=>t.profile===e.profile&&t.role===`assistant`)?.id===e.id?t:`idle`}function fe(){let e=_.value;if(!e)return;let t=e.scrollHeight-e.scrollTop-e.clientHeight;e.scrollTop>H&&t<80&&(b.value=!0),H=e.scrollTop,x.value=!b.value&&t>100}function pe(e=`smooth`){let t=_.value;t&&(b.value=!0,t.scrollTo({top:t.scrollHeight,behavior:e}),H=t.scrollTop)}function me(){ie()}function he(e){e=TQ(a.messages,e);let t=_.value;if(!t)return!1;let n=t.querySelector(`[data-message-id="${CSS.escape(e)}"]`);if(!n){let t=a.messages.findIndex(t=>t.id===e);return t<0?!1:(ee(),j.value=Math.max(0,t-Math.floor(Y2/2)),o(()=>he(e)),!0)}return ee(),n.scrollIntoView({block:`center`,behavior:`smooth`}),n.classList.remove(`message--revealed`),requestAnimationFrame(()=>n.classList.add(`message--revealed`)),window.setTimeout(()=>n.classList.remove(`message--revealed`),1800),!0}function ge(e,t){e=TQ(a.messages,e);let n=_.value;if(!n)return!1;let r=n.querySelector(`[data-message-id="${CSS.escape(e)}"]`);if(!r){let n=a.messages.findIndex(t=>t.id===e);return n<0?!1:(ee(),j.value=Math.max(0,n-60),o(()=>ge(e,t)),!0)}ee();let i=t?r.querySelector(`#${CSS.escape(t)}`):null;return(i||r).scrollIntoView({block:i?`start`:`center`,behavior:`smooth`}),r.classList.remove(`message--revealed`),requestAnimationFrame(()=>r.classList.add(`message--revealed`)),window.setTimeout(()=>r.classList.remove(`message--revealed`),1800),!0}function _e(e,t){let n=e;if(window.matchMedia?.(`(prefers-reduced-motion: reduce)`)?.matches){t();return}n.style.height=`${n.offsetHeight}px`,n.style.overflow=`hidden`,n.offsetHeight,n.style.transition=`height 220ms ease, opacity 160ms ease`,n.style.height=`0px`,n.style.opacity=`0`;let r=()=>{window.clearTimeout(a),n.removeEventListener(`transitionend`,i),t()},i=e=>{e.target===n&&e.propertyName===`height`&&r()},a=window.setTimeout(r,320);n.addEventListener(`transitionend`,i)}let ve=O(``),ye=O(``);f(ve,e=>c(`peerView`,!!e),{flush:`sync`});let be,xe=!1,Se=0;function Ce(e,t){if(ve.value===e){we();return}let n=a.messages.find(t=>t.id===e);n?.peerMessageId&&(ve.value||(xe=b.value,Se=_.value?.scrollTop??0),ee(),ve.value=e,ye.value=n.peerMessageId,be=t)}async function we(){let e=be,t=a.identity;ve.value=``,ye.value=``,be=void 0,await o(),a.identity===t&&(_.value&&(_.value.scrollTop=Se,H=_.value.scrollTop,b.value=xe&&_.value.scrollHeight-_.value.scrollTop-_.value.clientHeight<80),e?.isConnected&&e.focus({preventScroll:!0}))}async function Te(e){await we(),c(`previewFile`,e)}function Ee(e){we(),c(`openChat`,e)}f(()=>a.identity,()=>{ve.value=``,ye.value=``,be=void 0});async function De(e){let t=await hr(f2(e.role,e.content));E.value=t?e.id:``,A.value=t?``:e.id,le!==void 0&&window.clearTimeout(le),le=window.setTimeout(()=>{E.value=``,A.value=``,le=void 0},1400)}function Oe(e){return e.role===`user`||e.role===`assistant`&&!!e.content.trim()}function ke(e){return{preparing:`正在准备附件`,attached:`附件已就绪`,pending:`正在发送`,accepted:`已发送`,failed:`发送失败`,"unknown-receipt":`回执未知,请检查后重试`}[e||`settled`]||``}return f(()=>a.messages.length,async()=>{b.value&&(await o(),ie())}),f(()=>a.messages.at(-1)?.content,async()=>{b.value&&(await o(),ie())}),m(()=>o(()=>{ie(),R=new ResizeObserver(ie);let e=_.value?.querySelector(`.message-stack`);e&&R.observe(e)})),f(()=>a.messages.length,()=>o(()=>{let e=_.value?.querySelector(`.message-stack`);e&&R?.observe(e)})),i(()=>{c(`peerView`,!1),R?.disconnect(),B!==void 0&&cancelAnimationFrame(B),le!==void 0&&window.clearTimeout(le)}),t({scrollToMessage:he,scrollToAnchor:ge,scrollToBottom:pe,isFollowingBottom:()=>b.value}),(t,n)=>(u(),F(`section`,{ref_key:`frame`,ref:d,class:l([`timeline-frame`,{"timeline-frame--transparent":e.transparentHeader,"timeline-frame--frosted":e.frostedHeader&&!e.transparentHeader}])},[e.title||e.transparentHeader||e.frostedHeader?(u(),F(`header`,{key:0,inert:!!ve.value,style:s({visibility:ve.value?`hidden`:void 0}),class:l([`timeline-header`,{"timeline-header--transparent":e.transparentHeader,"timeline-header--frosted":e.frostedHeader&&!e.transparentHeader}])},[e.transparentHeader?v(t.$slots,`header-leading`,{},void 0,!0,1):(u(),F(`div`,y2,[v(t.$slots,`header-leading`,{},void 0,!0)])),e.transparentHeader?z(``,!0):(u(),F(`button`,{key:2,type:`button`,class:`timeline-identity`,"aria-label":`${e.title},打开 Bot 主页${e.subtitle?`。${e.subtitle}`:``}`,title:e.subtitle||void 0,onClick:n[0]||=e=>c(`profile`)},[e.headerAvatarName&&e.headerAvatarKind===`team`?(u(),k(Me,{key:0,name:e.headerAvatarName,avatar:e.headerAvatar,members:e.headerAvatarMembers,size:28},null,8,[`name`,`avatar`,`members`])):e.headerAvatarName?(u(),k(Ye,{key:1,class:`timeline-header__avatar`,name:e.headerAvatarName,avatar:e.headerAvatar,"main-bot":e.headerMainBot,state:e.headerAvatarState,"activity-key":e.headerAvatarActivityKey,size:28},null,8,[`name`,`avatar`,`main-bot`,`state`,`activity-key`])):z(``,!0),D(`div`,x2,[D(`h2`,null,h(e.title),1)])],8,b2)),e.transparentHeader?v(t.$slots,`header-actions`,{},void 0,!0,4):(u(),F(`div`,S2,[v(t.$slots,`header-actions`,{},void 0,!0)]))],14,v2)):z(``,!0),D(`div`,{ref_key:`scroller`,ref:_,class:`timeline`,inert:!!ve.value,style:s({visibility:ve.value?`hidden`:void 0}),onScrollPassive:fe,onWheelPassive:n[10]||=e=>{e.deltaY<0&&ee()},onTouchstartPassive:n[11]||=e=>{C(G)?G.value=e.touches[0]?.clientY??0:G=e.touches[0]?.clientY??0},onTouchmovePassive:n[12]||=e=>{let t=e.touches[0]?.clientY??V(G);t>V(G)&&ee(),C(G)?G.value=t:G=t},onPointerdown:n[13]||=e=>{let t=_.value;t&&e.clientX>=t.getBoundingClientRect().right-18&&ee()},onKeydown:n[14]||=e=>{[`PageUp`,`Home`,`ArrowUp`].includes(e.key)&&ee()}},[e.loading&&!e.messages.length?(u(),F(`div`,w2,[(u(),F(T,null,p(4,e=>D(`div`,{key:e,class:l({user:e%2==0})},[...n[16]||=[D(`i`,null,null,-1),D(`span`,null,null,-1)]],2)),64))])):!e.messages.length&&e.emptyLogo?(u(),F(`div`,T2,[...n[17]||=[D(`img`,{class:`new-chat-empty__logo`,src:`/brand/AppIcon-1024.png`,width:`1024`,height:`1024`,alt:``,"aria-hidden":`true`},null,-1),D(`p`,null,`聊点什么`,-1)]])):e.messages.length?(u(),F(`div`,{key:3,class:l([`message-stack`,{"message-stack--interaction":e.interaction}])},[e.forkSourceTitle?(u(),F(`div`,E2,[D(`span`,null,[W(Y,{name:`branch`,size:13}),n[18]||=w(`FORK 来源 `,-1),D(`strong`,null,h(e.forkSourceTitle),1)])])):z(``,!0),e.hasOlder||j.value>0?(u(),F(`button`,{key:1,class:`load-older`,type:`button`,disabled:e.loadingOlder,onClick:ne},h(e.loadingOlder?`正在加载…`:`加载更早消息`),9,D2)):z(``,!0),(u(!0),F(T,null,p(P.value,t=>(u(),F(T,{key:t.id},[t.kind===`trace`&&e.showTools?(u(),k(Q0,{key:0,group:t,"stream-interval-ms":0},null,8,[`group`])):t.kind===`message`?(u(!0),F(T,{key:1},p([t.message],(t,i,a,o)=>{let d=[V(r),t,t.goalCard?e.activityAgents:void 0,e.showTools,e.showAssistantIdentity,I.value,e.agentAvatars[t.profile||``],de(t),E.value===t.id,A.value===t.id,e.readOnly,e.allowBranch,ve.value===t.id];if(o&&o.el&&o.key===t.id&&y(o,d))return o;let f=(u(),F(`article`,{key:t.id,"data-message-id":t.id,class:l([`message`,[`message--${t.role}`,{"message--failed":t.status===`failed`,"message--failure-notice":V(p$)(t)?.replacesContent&&!t.attachments?.length,"message--has-failure":!!V(p$)(t),"message--notice":!!V(h$)(t)||!!t.activity||!!t.taskOutcome,"message--task-card":!!t.goalCard||!!t.runtimeTaskCard,"message--browser":!!t.browserCard,"message--communication":!!t.communication,"message--tool-only":t.role===`assistant`&&!t.content&&!t.reasoning&&!!t.tools?.length,"message--assistant-internal":t.role===`assistant`&&!t.content.trim(),"message--assistant-anonymous":t.role===`assistant`&&!e.showAssistantIdentity}]])},[!t.goalCard&&!t.runtimeTaskCard&&!t.communication&&t.role!==`user`&&(t.role!==`assistant`||e.showAssistantIdentity)?(u(),k(Ye,{key:0,class:`message__avatar`,name:t.author||t.profile||(t.role===`assistant`?`夭`:`系`),avatar:t.profile&&e.agentAvatars[t.profile]||``,size:27,state:de(t)},null,8,[`name`,`avatar`,`state`])):z(``,!0),t.communication?(u(),F(`div`,O2,[D(`span`,k2,h(V(v$)(t.communication)),1),D(`button`,{type:`button`,class:`communication-caption__peer`,"aria-label":`${t.communication.peerName},打开往来对话。${V(q)(t.communication)}`,title:V(q)(t.communication),"aria-expanded":t.peerMessageId?ve.value===t.id:void 0,"aria-controls":t.peerMessageId?`peer-thread-${t.id}`:void 0,disabled:!t.peerMessageId,onClick:e=>Ce(t.id,e.currentTarget)},[W(Ye,{name:t.communication.peerName,avatar:t.communication.peerAvatar,size:16,animated:!1,"aria-hidden":`true`},null,8,[`name`,`avatar`]),D(`span`,j2,h(t.communication.peerName),1)],8,A2)])):z(``,!0),!t.communication||V(re)(t.communication.direction)?(u(),F(`div`,M2,[t.goalCard?(u(),k(R1,{key:0,task:t.goalCard,agents:e.activityAgents??[],onDetails:n[1]||=e=>c(`taskDetails`)},null,8,[`task`,`agents`])):t.runtimeTaskCard?(u(),k(B1,{key:1,tasks:t.runtimeTaskCard,onDetails:e=>c(`runtimeDetails`,t.runtimeTaskCard.map(e=>e.id))},null,8,[`tasks`,`onDetails`])):V(p$)(t)?.replacesContent&&!t.attachments?.length?(u(),k(d$,{key:2,failure:V(p$)(t)},null,8,[`failure`])):t.activity?(u(),k($1,{key:3,activity:t.activity,agents:e.activityAgents},null,8,[`activity`,`agents`])):t.role===`system`&&t.taskReference?(u(),k(D1,{key:4,content:t.content,"task-reference":t.taskReference,outcome:t.taskOutcome,current:t.taskOutcome?.goalId===e.currentGoalId,onDetails:n[2]||=e=>c(`taskDetails`)},null,8,[`content`,`task-reference`,`outcome`,`current`])):V(h$)(t)?(u(),k(_$,{key:5,message:t},null,8,[`message`])):(u(),F(T,{key:6},[(!t.browserCard||t.content.trim())&&!t.communication&&(t.role!==`assistant`||e.showAssistantIdentity)?(u(),F(`div`,N2,[D(`strong`,null,[t.isRemoteAgent?(u(),k(Y,{key:0,class:`message__remote-agent`,name:`globe`,size:12})):z(``,!0),w(h(t.role===`user`?`你`:t.author||t.profile||(t.role===`assistant`?`机器人`:`系统`)),1)]),t.metadata?(u(),F(`span`,P2,h(t.metadata),1)):z(``,!0),D(`time`,null,h(V(ue)(t.createdAt)),1),t.status&&![`settled`,`streaming`].includes(t.status)?(u(),F(`span`,F2,h({preparing:`准备中`,attached:`附件已就绪`,pending:t.localRequestId?`发送中…`:`等待回执`,accepted:`已接收`,streaming:`生成中`,settled:`已完成`,failed:t.role===`user`?`发送失败`:`回复中断`,"unknown-receipt":`发送结果待确认`}[t.status]),1)):z(``,!0),t.localRequestId&&[`failed`,`unknown-receipt`].includes(t.status||``)?(u(),F(`button`,{key:2,type:`button`,onClick:e=>c(`retrySend`,t.localRequestId)},`重试发送`,8,I2)):z(``,!0)])):z(``,!0),t.reasoning?(u(),F(`details`,L2,[D(`summary`,null,[W(Y,{name:`brain`,size:13}),w(`思考过程 · `+h(t.reasoning.length)+` 字`,1)]),W(ZK,{"process-content":``,content:t.reasoning,streaming:t.status===`streaming`,"stream-interval-ms":0,onRendered:me},null,8,[`content`,`streaming`])])):z(``,!0),t.role===`user`?(u(),k(_2,{key:2,content:t.content},null,8,[`content`])):z(``,!0),t.promotedTo?(u(),F(`div`,R2,[W(Y,{name:`clock`,size:13}),n[19]||=D(`span`,null,`已转到后台继续,结果会发在下面。`,-1),e.readOnly?z(``,!0):(u(),F(`button`,{key:0,type:`button`,onClick:e=>c(`openTask`,t.promotedTo)},`查看进度`,8,z2))])):z(``,!0),W(rt,{css:!1,onLeave:_e},{default:S(()=>[!t.promotedTo&&!V(p$)(t)?.replacesContent?(u(),F(`div`,{key:0,class:`message__content`,style:s(!t.communication&&(t.role===`user`||t.role===`assistant`)?V(Tb)(V(r)[t.role],t.role):void 0)},[W(ZK,{"separate-media":t.role===`user`||t.role===`assistant`||!!t.communication,bubble:!t.communication&&(t.role===`user`||t.role===`assistant`)&&!!t.content.trim(),attachments:t.attachments,"content-parts":t.contentParts,onPreview:e=>e.id&&t.attachments?.some(t=>t.id===e.id)?c(`preview`,e):c(`previewFile`,{name:e.name,url:e.url}),"stream-interval-ms":0,"file-profile":t.profile,content:t.communication&&!V(re)(t.communication.direction)?``:V(f2)(t.role,t.content),streaming:t.status===`streaming`,"legacy-media":t.role===`assistant`,plain:t.role===`user`,"mention-names":e.mentionNames,"outline-prefix":t.role===`assistant`?`outline-${t.id}`:``,"file-cards":t.role===`user`||t.role===`assistant`||!!t.communication,"process-content":!t.communication&&t.role!==`user`&&t.role!==`assistant`,onRendered:me,onFileLink:n[3]||=(e,t)=>c(`previewFile`,{name:e,url:t})},null,8,[`separate-media`,`bubble`,`attachments`,`content-parts`,`onPreview`,`file-profile`,`content`,`streaming`,`legacy-media`,`plain`,`mention-names`,`outline-prefix`,`file-cards`,`process-content`])],4)):z(``,!0)]),_:2},1024),t.backgroundTaskId&&t.role===`assistant`&&!t.promotedTo&&!e.readOnly?(u(),F(`button`,{key:4,type:`button`,class:`message__task-link`,onClick:e=>c(`openTask`,t.backgroundTaskId)},[n[20]||=w(`查看详情`,-1),W(Y,{name:`chevron-down`,class:`message__task-link-chevron`,size:12})],8,B2)):t.peerMessageId&&t.role===`assistant`&&!t.communication?(u(),F(`button`,{key:5,type:`button`,class:`message__task-link`,"aria-expanded":ve.value===t.id,"aria-controls":`peer-thread-${t.id}`,onClick:e=>Ce(t.id,e.currentTarget),onKeydown:Ie(e=>ve.value===t.id&&we(),[`esc`])},`查看往来记录`,40,V2)):z(``,!0),t.role===`user`&&ke(t.status)?(u(),F(`div`,{key:6,class:l([`message__delivery`,`message__delivery--${t.status}`]),role:`status`,"aria-live":`polite`},[W(Y,{name:t.status===`accepted`?`check`:t.status===`failed`||t.status===`unknown-receipt`?`alert`:`dots`,size:11},null,8,[`name`]),w(` `+h(ke(t.status)),1)],2)):z(``,!0),e.showTools&&t.tools?.length?(u(),F(`div`,H2,[(u(!0),F(T,null,p(t.tools,e=>(u(),k(J0,{key:e.id,tool:e},null,8,[`tool`]))),128))])):z(``,!0),Oe(t)?(u(),F(`div`,U2,[t.role===`assistant`&&!e.showAssistantIdentity&&t.createdAt?(u(),F(`time`,W2,h(V(ue)(t.createdAt)),1)):z(``,!0),D(`button`,{type:`button`,class:l({"message-action--copied":E.value===t.id,"message-action--copy-failed":A.value===t.id}),title:E.value===t.id?`已复制`:A.value===t.id?`复制失败`:`复制`,"aria-label":E.value===t.id?`已复制`:A.value===t.id?`复制失败`:`复制消息`,onClick:e=>De(t)},[W(Y,{name:E.value===t.id?`check`:A.value===t.id?`alert`:`copy`,size:13},null,8,[`name`])],10,G2),e.readOnly?z(``,!0):(u(),F(`button`,{key:1,type:`button`,title:`引用`,"aria-label":`引用消息`,onClick:e=>c(`quote`,t)},[W(Y,{name:`quote`,size:13})],8,K2)),!e.readOnly&&e.allowBranch&&t.role===`assistant`?(u(),F(`button`,{key:2,type:`button`,title:`从这里分支`,"aria-label":`从这里分支`,onClick:e=>c(`branch`,t)},[W(Y,{name:`branch`,size:13})],8,q2)):z(``,!0)])):z(``,!0)],64)),t.browserCard?(u(),k(f0,{key:7,class:l({"managed-browser-card--after-text":!!t.content.trim()}),card:t.browserCard,"read-only":e.readOnly,onOpen:n[4]||=e=>c(`browserControl`,e)},null,8,[`class`,`card`,`read-only`])):z(``,!0),(u(!0),F(T,null,p(t.credentialDrafts??[],t=>(u(),k(z0,{key:t.id,card:t,"read-only":e.readOnly,onComplete:n[5]||=e=>c(`credentialDraft`,e)},null,8,[`card`,`read-only`]))),128)),t.serviceWarnings?.length?(u(),k(V0,{key:8,warnings:t.serviceWarnings},null,8,[`warnings`])):z(``,!0),t.autoRoute?(u(),k(ui,{key:9,route:t.autoRoute},null,8,[`route`])):z(``,!0)])):z(``,!0),V(p$)(t)&&(!V(p$)(t)?.replacesContent||t.attachments?.length)?(u(),k(d$,{key:3,failure:V(p$)(t)},null,8,[`failure`])):z(``,!0)],10,[`data-message-id`]));return f.memo=d,f},n,6),128)):z(``,!0)],64))),128)),ae.value?(u(),k(W$,{key:2,"avatar-name":se.value,avatar:ce.value,label:e.thinkingLabel},null,8,[`avatar-name`,`avatar`,`label`])):z(``,!0),e.interaction?.kind===`approval`?(u(),k(E1,{key:e.interaction.id,prompt:e.interaction.prompt,choices:e.interaction.options,"agent-name":e.approvalAgentName,busy:e.interactionBusy,error:e.interactionError,"review-available":e.interaction.reviewAvailable,review:e.interaction.approvalReview,"can-manage-permissions":e.canManagePermissions,onChoose:n[8]||=e=>c(`approvalChoice`,e)},null,8,[`prompt`,`choices`,`agent-name`,`busy`,`error`,`review-available`,`review`,`can-manage-permissions`])):e.interaction?(u(),k(s1,{key:4,interaction:e.interaction,busy:e.interactionBusy,onClarify:n[9]||=e=>c(`clarify`,e)},null,8,[`interaction`,`busy`])):z(``,!0),e.interaction&&e.interaction.kind!==`approval`&&e.interactionError?(u(),F(`p`,J2,h(e.interactionError),1)):z(``,!0)],2)):(u(),k(H$,{key:2,icon:`chat`,title:e.emptyTitle,description:e.emptyDescription},null,8,[`title`,`description`]))],44,C2),W(rt,{name:`view-fade`},{default:S(()=>[x.value&&!ve.value?(u(),F(`button`,{key:0,class:`jump-bottom`,type:`button`,onClick:n[15]||=e=>pe()},[W(Y,{name:`chevron-down`,size:15}),n[21]||=w(`回到底部 `,-1)])):z(``,!0)]),_:1}),(u(),k(L,{to:g.value??`body`,disabled:!g.value},[ve.value&&ye.value?(u(),k(R$,{key:ye.value,id:`peer-thread-${ve.value}`,"peer-message-id":ye.value,"conversation-id":e.conversationId,"read-only":e.readOnly,onClose:we,onOpenChat:Ee,onPreviewFile:Te},null,8,[`id`,`peer-message-id`,`conversation-id`,`read-only`])):z(``,!0)],8,[`to`,`disabled`]))],2))}}),[[`__scopeId`,`data-v-6d6718b5`]]),Z2=(e,t)=>`${e}:${t??``}`;function Q2(e,t){let n=e.findIndex(e=>e.id===t.id);if(n<0)return[...e,t];let r=e.slice();return r[n]=t,r}function $2(e,t){if(t.conversationId!==e.conversation.id)return e;let n=t.data,r=t=>(t??null)===(e.task?.id??null);switch(t.type){case`approval.summary.changed`:return r(n.conversationTaskId)?{...e,approvalSummaries:n.status===`pending`?Q2(e.approvalSummaries??[],n):e.approvalSummaries?.filter(e=>e.id!==n.id)}:e;case`conversation.changed`:return{...e,conversation:t.data};case`message.changed`:{let n=t.data;if(!r(n.conversationTaskId))return e;let i=n.visible===!1?e.messages.filter(e=>e.id!==n.id):Q2(e.messages,n).sort((e,t)=>e.seq-t.seq);return{...e,messages:i}}case`task.changed`:{let n=t.data;return{...e,tasks:Q2(e.tasks??[],n),task:e.task?.id===n.id?n:e.task}}case`task.deleted`:return{...e,tasks:(e.tasks??[]).filter(e=>e.id!==n.id)};case`run.changed`:return r(n.conversationTaskId)?{...e,run:t.data}:e;case`context.changed`:return r(n.conversationTaskId)?{...e,context:n}:e;case`interaction.changed`:return r(n.conversationTaskId)?{...e,interactions:n.resolved?e.interactions.filter(e=>e.id!==n.id):Q2(e.interactions,t.data)}:e;case`runtime-task.changed`:return r(n.conversationTaskId)?{...e,runtimeTasks:Q2(e.runtimeTasks??[],ZZ(e.runtimeTasks,[t.data])[0])}:e;case`runtime-task.recorded`:return r(n.conversationTaskId)?{...e,runtimeTasks:e.runtimeTasks?.map(e=>e.id===n.taskId?{...e,records:XZ(e.records,[n.record]),recordCursor:Math.max(e.recordCursor??0,n.record.seq)}:e)}:e;case`assignment.changed`:return n.goalId===e.task?.id?{...e,assignments:Q2(e.assignments??[],t.data)}:e;case`goal.changed`:return n.id===e.task?.id?{...e,task:{...e.task,goal:t.data}}:e;default:return e}}var e4=class{agents=[];conversationRows=[];get conversations(){return this.conversationRows}set conversations(e){this.conversationRows=[...e].sort(Zv)}sectionRows=[];get sections(){return this.sectionRows}set sections(e){this.sectionRows=[...e].sort(SI)}details=new Map;cursor=0;selectedTasks=new Map;reads=new Map;entityVersions=new Map;snapshotFloor=0;messageReconciler=new sy;staleDetails=new Set;acceptReceipt(e){if(e.cursor!==void 0)for(let[t,n]of[[`message.changed`,e.message],[`run.changed`,e.run],[`conversation.changed`,e.conversation],[`task.changed`,e.task]])n&&this.accept({seq:e.cursor,type:t,conversationId:e.run.conversationId,data:n})}acceptSectionReceipt(e){if(e.cursor!==void 0){for(let t of[...e.sections??[],...e.section?[e.section]:[]])this.accept({seq:e.cursor,type:`conversation-section.changed`,data:t});e.deletedSectionId&&this.accept({seq:e.cursor,type:`conversation-section.deleted`,data:{id:e.deletedSectionId}}),e.conversation&&this.accept({seq:e.cursor,type:`conversation.changed`,conversationId:e.conversation.id,data:e.conversation})}}beginRead(){let e=Symbol();return this.reads.set(e,[]),e}cancelRead(e){this.reads.delete(e)}finishRead(e,t,n=!0){let r=Z2(t.conversation.id,t.task?.id),i=this.details.get(r);i&&t.cursor!==void 0&&t.cursor<this.snapshotFloor&&(t={...i,cursor:t.cursor,messages:t.messages,hiddenMessageIds:i.hiddenMessageIds,hasOlder:i.hasOlder});let a={...t,runtimeTasks:ZZ(i?.runtimeTasks,t.runtimeTasks)};if(i&&n){let e=new Map(i.messages.map(e=>[e.id,e]));for(let n of t.messages)(!e.get(n.id)||(this.entityVersions.get(`message:${n.id}`)??this.snapshotFloor)<=(t.cursor??2**53-1))&&e.set(n.id,n);a={...t,runtimeTasks:ZZ(i.runtimeTasks,t.runtimeTasks),hasOlder:i.hasOlder,messages:[...e.values()].filter(e=>e.visible!==!1&&!t.hiddenMessageIds?.includes(e.id)).sort((e,t)=>e.seq-t.seq)}}for(let n of this.reads.get(e)??[]){if(n.seq<=(t.cursor??0))continue;let r=n.data.id;if(n.type===`conversation.deleted`&&r===t.conversation.id||n.type===`task.deleted`&&r===t.task?.id)throw this.reads.delete(e),Error(`会话或任务已被删除`);a=$2(a,n)}this.reads.delete(e),this.details.set(r,a),this.staleDetails.delete(r);for(let e of a.messages)this.messageReconciler.remember(e);return a}hydrate(e){if(!e||!Number.isSafeInteger(e.cursor)||e.cursor<0||!Array.isArray(e.agents)||!Array.isArray(e.conversations)||!Array.isArray(e.details))throw Error(`Bot 会话数据尚未就绪,正在重新同步`);let t=e.cursor===0&&e.conversations.length===0,n=new Map(t?[]:this.details);t&&this.reads.clear();let r=[...this.reads.values()].flat().filter(t=>t.seq>e.cursor).sort((e,t)=>e.seq-t.seq);this.entityVersions.clear(),this.snapshotFloor=e.cursor,this.messageReconciler.clear(),this.agents=e.agents,this.conversations=e.conversations,this.sections=e.sections??[],this.cursor=e.cursor,this.details.clear(),this.staleDetails.clear();for(let t of e.details){let e=Z2(t.conversation.id,t.task?.id),r=n.get(e),i=new Map(r?.messages.map(e=>[e.id,e]));for(let e of t.messages)i.set(e.id,e);let a=r?{...t,runtimeTasks:ZZ(r.runtimeTasks,t.runtimeTasks),hasOlder:r?.hasOlder??t.hasOlder,messages:[...i.values()].filter(e=>e.visible!==!1&&!t.hiddenMessageIds?.includes(e.id)).sort((e,t)=>e.seq-t.seq)}:t;this.details.set(e,a);for(let e of a.messages)this.messageReconciler.remember(e)}for(let[t,r]of n){let n=e.conversations.find(e=>e.id===r.conversation.id),i=e.details.find(e=>e.conversation.id===r.conversation.id);if(!this.details.has(t)&&n&&(e.partialDetails||n.archived||i?.tasks?.some(e=>e.id===r.task?.id))){this.details.set(t,{...r,conversation:n}),this.staleDetails.add(t);for(let e of r.messages)this.messageReconciler.remember(e)}}for(let e of r)this.accept(e)}get(e,t){if(t)return this.details.get(Z2(e,t));let n=this.selectedTasks.get(e);return(n?this.details.get(Z2(e,n)):void 0)??[...this.details.values()].find(t=>t.conversation.id===e)}apply(e){e.seq<=this.cursor||(this.accept(e),this.cursor=e.seq)}accept(e){e=this.messageReconciler.normalize(e);let t=e.data,n=e.type===`runtime-task.recorded`?`runtime-record:${t.taskId}:${t.record?.seq}`:`${e.type.split(`.`)[0]}:${t.id??e.conversationId}`;if(!(e.seq<(this.entityVersions.get(n)??this.snapshotFloor))){this.entityVersions.set(n,e.seq);for(let t of this.reads.values())t.push(e);e.type===`agent.changed`&&(this.agents=Q2(this.agents,e.data)),e.type===`agent.deleted`&&(this.agents=this.agents.filter(e=>e.id!==t.id)),e.type===`conversation.changed`&&(this.conversations=Q2(this.conversations,e.data)),e.type===`conversation.deleted`&&(this.conversations=this.conversations.filter(e=>e.id!==t.id)),e.type===`conversation-section.changed`&&(this.sections=Q2(this.sections,e.data)),e.type===`conversation-section.deleted`&&(this.sections=this.sections.filter(e=>e.id!==t.id));for(let[n,r]of this.details)e.type===`conversation.deleted`&&r.conversation.id===t.id||e.type===`task.deleted`&&r.task?.id===t.id?this.details.delete(n):e.conversationId===r.conversation.id&&this.details.set(n,$2(r,e))}}},t4=[`disabled`,`aria-label`,`title`],n4={class:`sr-only`,role:`status`},r4=H(E({__name:`HarnessVoiceInput`,props:{disabled:{type:Boolean},draftKey:{},botId:{},compact:{type:Boolean}},emits:[`text`,`error`,`activeChange`],setup(e,{emit:t}){let n=e,r=t,a=O(`idle`);f(a,e=>r(`activeChange`,e!==`idle`),{flush:`sync`});let o,s,c,d=0,p;function g(){d++,clearTimeout(c),p?.abort(),p=void 0,o?.state===`recording`&&o.stop(),o=void 0,s?.getTracks().forEach(e=>e.stop()),s=void 0,a.value=`idle`}f(()=>[n.draftKey,n.botId],g),f(()=>n.disabled,e=>{e&&g()});let _=()=>{document.hidden&&g()};m(()=>document.addEventListener(`visibilitychange`,_)),i(()=>{g(),document.removeEventListener(`visibilitychange`,_)});async function v(){if(a.value===`recording`){o?.stop();return}if(a.value!==`idle`){g();return}let e=++d;a.value=`starting`,p=new AbortController;try{if(!(await X(`/api/app/harness/speech${n.botId?`?botId=${encodeURIComponent(n.botId)}`:``}`,{signal:p.signal})).transcription)throw Error(`请在模型与语音中选择已配置的语音识别模型。`);if(!navigator.mediaDevices?.getUserMedia)throw Error(`当前浏览器无法录音,请使用本机地址或 HTTPS。`);let t=await navigator.mediaDevices.getUserMedia({audio:!0});if(e!==d){t.getTracks().forEach(e=>e.stop());return}s=t;let i=[];o=new MediaRecorder(s);let l=0;o.ondataavailable=e=>{l+=e.data.size,l>2097152?(g(),r(`error`,`录音超过大小限制,请分段录入。`)):i.push(e.data)},o.onstop=async()=>{if(e===d){clearTimeout(c),s?.getTracks().forEach(e=>e.stop()),s=void 0,a.value=`transcribing`;try{let t=new Blob(i,{type:o?.mimeType||`audio/webm`}),a=await new Promise((e,n)=>{let r=new FileReader;r.onload=()=>e(String(r.result).split(`,`)[1]),r.onerror=()=>n(Error(`录音读取失败`)),r.readAsDataURL(t)}),s=await X(`/api/app/harness/speech/transcription`,{method:`POST`,body:{requestId:crypto.randomUUID(),...n.botId?{botId:n.botId}:{},audio:a,mimeType:t.type.split(`;`)[0]},signal:p?.signal});e===d&&(r(`text`,s.text),g())}catch(t){e===d&&(g(),r(`error`,t instanceof Error?t.message:`转录失败`))}}},o.start(1e3),a.value=`recording`,c=setTimeout(()=>o?.stop(),6e4)}catch(t){e===d&&(g(),r(`error`,t instanceof Error?t.message:`录音失败`))}}return(t,n)=>(u(),F(`button`,{type:`button`,class:l([`voice-input`,{"voice-input--compact":e.compact,"voice-input--recording":a.value===`recording`}]),disabled:e.disabled,"aria-label":a.value===`recording`?`结束录音并转录`:a.value===`idle`?`语音输入`:`取消语音`,title:a.value===`recording`?`结束录音并转录`:a.value===`transcribing`?`转录中 · 取消`:a.value===`starting`?`准备中 · 取消`:`语音输入`,onClick:v},[e.compact?(u(),F(T,{key:0},[a.value===`idle`?(u(),k(V(eb),{key:0,"aria-hidden":`true`})):a.value===`recording`?(u(),k(V(ib),{key:1,"aria-hidden":`true`})):a.value===`starting`?(u(),k(V(Qy),{key:2,class:`voice-spinner`,"aria-hidden":`true`})):(u(),k(V(mb),{key:3,"aria-hidden":`true`})),D(`span`,n4,h(a.value===`recording`?`录音中`:a.value===`transcribing`?`正在转录`:a.value===`starting`?`正在准备录音`:``),1)],64)):(u(),F(T,{key:1},[w(h(a.value===`recording`?`结束录音`:a.value===`transcribing`?`转录中 · 取消`:a.value===`starting`?`准备中 · 取消`:`语音`),1)],64))],10,t4))}}),[[`__scopeId`,`data-v-c50bede6`]]),i4={key:0,class:`composer-reference`},a4={class:`composer-activity-slot`},o4={key:0,class:`composer-activity`,role:`status`,"aria-label":`机器人输入状态`,"aria-live":`polite`,"aria-atomic":`true`},s4={key:0,class:`composer-sending`,role:`status`,"aria-live":`polite`},c4={key:0,class:`composer-attachments`,"aria-label":`附件`},l4=[`src`,`alt`],u4=[`aria-label`,`onClick`],d4={class:`composer-input-row`},f4=[`disabled`,`placeholder`,`aria-describedby`],p4={class:`composer-toolbar`},m4={class:`composer-tools`},h4=[`disabled`,`aria-expanded`],g4={key:0,class:`composer-popover composer-add-menu`,role:`menu`,"aria-label":`添加到消息`},_4=[`disabled`],v4=[`disabled`],y4=[`aria-checked`,`disabled`],b4=[`disabled`,`title`],x4=[`disabled`],S4={class:`composer-model-slot`},C4={class:`composer-actions`},w4=[`disabled`,`title`,`aria-label`,`aria-expanded`],T4={class:`composer-popover composer-popover--settings`,role:`dialog`,"aria-label":`输入设置`},E4=[`aria-checked`,`disabled`],D4=[`disabled`],O4=[`disabled`],k4={key:5,class:`composer-queue-slot`},A4=[`title`],j4={key:6,class:`composer-stop-hitbox`},M4={class:`composer-send-hitbox`},N4={key:0,class:`composer-voice-slot`},P4=[`disabled`,`aria-label`],F4={key:0,class:`composer-menu`,role:`listbox`},I4={class:`composer-menu__label`},L4=[`aria-selected`,`disabled`,`onMousedown`,`onMouseenter`],R4={class:`composer-menu__avatar`},z4={key:0},B4={key:0},V4={key:1,class:`composer-drop-hint`},H4={key:0,class:`composer-error`,role:`alert`},U4=26214400,W4=8,G4=H(E({__name:`ComposerShell`,props:{mode:{default:`chat`},botLayout:{type:Boolean},draftKey:{default:``},voiceBotId:{},voiceActive:{type:Boolean},placeholder:{default:`畅所欲言`},disabled:{type:Boolean,default:!1},streaming:{type:Boolean,default:!1},stopWhileRunning:{type:Boolean,default:!1},sending:{type:Boolean,default:!1},modelLabel:{default:`选择模型`},fastMode:{type:Boolean,default:!1},fastModeDisabled:{type:Boolean,default:!1},reasoningEffort:{default:`默认`},reasoningValue:{default:``},reasoningOptions:{default:()=>[]},contextUsed:{default:0},contextLimit:{default:0},contextPercent:{},showContext:{type:Boolean,default:!1},queueMode:{type:Boolean,default:!1},toolTraceVisible:{type:Boolean,default:!0},reference:{default:null},mentionOptions:{default:()=>[]},slashCommands:{default:()=>[]},attachmentsEnabled:{type:Boolean,default:!0},activityText:{default:``},deliveryAvailable:{type:Boolean,default:!1},deliveryMode:{type:Boolean,default:!1},deliveryDisabled:{type:Boolean,default:!1},deliveryDisabledReason:{default:``}},emits:[`send`,`stop`,`modelClick`,`fastModeToggle`,`reasoningChange`,`settingsClick`,`queueToggle`,`toolTraceToggle`,`clearReference`,`error`,`update:deliveryMode`],setup(e,{expose:t,emit:n}){let r=e,a=n,c=O(``),g=O(null),_=O(null),y=O([]),b=O(!1),x=O(0),C=U(()=>x.value>0),E=O(null),A=O(0),j=O(null),M=O(``),N=O([]),P=O(!1),I=O(null),L=O(null),R=O(null),B=`composer-hint-${Qe()}`,H=O(null),G=O(!1),K=O(null),ee=O(null),te=U(()=>r.mode===`group`&&(r.mentionOptions.length>0||r.deliveryAvailable)),q=O(!1),J=O(``),ne,re=U(()=>!r.disabled&&!r.sending&&(c.value.trim().length>0||y.value.length>0)),ie=U(()=>!!c.value.trim()||y.value.length>0),ae=U(()=>r.disabled||r.sending||r.streaming||q.value),oe=U(()=>r.streaming&&(r.stopWhileRunning||r.mode===`chat`)),se=U(()=>oe.value&&!c.value.trim()&&!y.value.length),ce=U(()=>r.modelLabel.split(`/`).filter(Boolean).at(-1)||r.modelLabel),le=U(()=>r.contextPercent??(r.contextLimit>0?r.contextUsed/r.contextLimit*100:void 0)),ue=U(()=>r.contextUsed>0),de=U(()=>r.showContext||r.contextLimit>0||ue.value),fe=U(()=>{let e=j.value===`slash`?r.slashCommands:r.mentionOptions,t=M.value.trim().toLocaleLowerCase();return e.filter(e=>!t||e.label.toLocaleLowerCase().includes(t)||e.detail?.toLocaleLowerCase().includes(t)).slice(0,10)});function pe(e=r.draftKey){return e?`yaovi:composer:${r.mode}:${e}`:``}let me=!1,he=!1,ge=new Map;f([c,y,N],()=>{if(he&&!me){let e=pe();ge.set(e,(ge.get(e)??0)+1)}},{deep:!0,flush:`sync`});function _e(){he=!0;let e=pe();return{key:e,revision:ge.get(e)??0}}function ve(){let e=pe();me=!0;try{c.value=e&&localStorage.getItem(e)||``}finally{me=!1}o(Me)}function ye(e){let t=pe();t&&(e?localStorage.setItem(t,e):localStorage.removeItem(t))}function be(e){J.value=e,a(`error`,e),window.clearTimeout(ne),ne=window.setTimeout(()=>{J.value=``},4500)}function xe(e){return e<1024?`${e} B`:e<1048576?`${(e/1024).toFixed(1)} KB`:`${(e/1024/1024).toFixed(1)} MB`}function Se(e){return e.startsWith(`image/`)}function Ce(e){if(!r.attachmentsEnabled){be(`当前上游不支持团队附件`);return}let t=W4-y.value.length;if(t<=0)return be(`最多添加 ${W4} 个文件`);let n=[];for(let r of e.slice(0,t)){if(r.size>U4){be(`${r.name} 超过 25 MiB`);continue}n.push({id:`${r.name}:${r.size}:${r.lastModified}:${Qe(`attachment`)}`,file:r,name:r.name,size:r.size,type:r.type||`application/octet-stream`,previewUrl:Se(r.type)?URL.createObjectURL(r):void 0})}y.value.push(...n),e.length>t&&be(`最多添加 ${W4} 个文件`)}function we(e){let t=y.value.findIndex(t=>t.id===e);if(t<0)return;let[n]=y.value.splice(t,1);n?.previewUrl&&URL.revokeObjectURL(n.previewUrl)}function Te(){y.value.forEach(e=>e.previewUrl&&URL.revokeObjectURL(e.previewUrl)),y.value=[],_.value&&(_.value.value=``)}function Ee(e){let t=e.target;Ce(Array.from(t.files??[])),t.value=``}function De(e){let t=Array.from(e.clipboardData?.files??[]);t.length&&Ce(t)}function Oe(e){e.dataTransfer?.types.includes(`Files`)&&(e.preventDefault(),x.value+=1)}function ke(e){e.dataTransfer?.types.includes(`Files`)&&(e.preventDefault(),e.dataTransfer&&(e.dataTransfer.dropEffect=`copy`))}function Ae(e){e.preventDefault(),x.value=Math.max(0,x.value-1)}function je(e){e.preventDefault(),x.value=0,Ce(Array.from(e.dataTransfer?.files??[]))}function Me(){let e=g.value;!e||E.value!==null||(e.style.height=`auto`,e.style.height=`${Math.min(400,Math.max(30,e.scrollHeight))}px`)}function Ne(){E.value=null,g.value&&(g.value.style.height=`auto`),o(Me)}function Pe(e){let t=g.value;if(!t)return;e.preventDefault();let n=e.clientY,r=t.clientHeight,i=e.pointerId,a=e.currentTarget;a.setPointerCapture(i);let o=e=>{E.value=Math.min(400,Math.max(30,r-(e.clientY-n)))},s=()=>{a.removeEventListener(`pointermove`,o),a.removeEventListener(`pointerup`,s),a.removeEventListener(`pointercancel`,s)};a.addEventListener(`pointermove`,o),a.addEventListener(`pointerup`,s),a.addEventListener(`pointercancel`,s)}function Fe(){let e=g.value;if(!e||b.value)return;let t=c.value.slice(0,e.selectionStart);if(t.startsWith(`/`)&&!t.includes(` `)&&!t.includes(`
|
|
257
|
+
`)&&r.slashCommands.length){j.value=`slash`,M.value=t.slice(1),A.value=0;return}if(r.mode===`group`&&r.mentionOptions.length){let e=t.match(/(?<![A-Za-z0-9_.%+/@-])@([^\s@]*)$/u);if(e&&!/https?:\/\/\S*$/u.test(t)){j.value=`mention`,M.value=e[1]??``,A.value=0;return}}j.value=null}function Le(){G.value=!G.value,P.value=!1,j.value=null,G.value&&o(()=>K.value?.querySelector(`[role="menuitem"]:not(:disabled)`)?.focus())}function Re(e=!1){G.value=!1,e&&ee.value?.focus()}function ze(e){if(e.key===`Escape`)e.preventDefault(),e.stopPropagation(),Re(!0);else if(e.key===`Tab`)Re(!0);else if([`ArrowDown`,`ArrowUp`,`Home`,`End`].includes(e.key)){e.preventDefault();let t=Array.from(K.value?.querySelectorAll(`button: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 Be(){Re(!0),_.value?.click()}function Ve(e=!1){P.value=!1,e&&I.value?.focus()}function He(){P.value=!P.value,Re(),j.value=null,P.value&&r.botLayout&&o(()=>L.value?.querySelector(`.composer-popover button:not(:disabled)`)?.focus())}function Ue(e){if(e.key===`Escape`)e.preventDefault(),e.stopPropagation(),Ve(!0);else if(P.value&&[`ArrowDown`,`ArrowUp`,`Home`,`End`].includes(e.key)){e.preventDefault();let t=Array.from(L.value?.querySelectorAll(`.composer-popover button:not(:disabled)`)??[]);if(!t.length)return;let 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 X(){Re();let e=g.value;if(!e)return;let t=e.selectionStart,n=c.value.slice(0,t),r=`${n&&!/\s$/.test(n)?` `:``}@`;c.value=n+r+c.value.slice(e.selectionEnd),o(()=>{e.focus(),e.setSelectionRange(t+r.length,t+r.length),Fe(),Me()})}function We(e){r.disabled||r.deliveryDisabled||r.sending||(a(`update:deliveryMode`,e),Re(),o(()=>g.value?.focus()))}function Ge(e){if(e.disabled)return;let t=g.value;if(!t)return;let n=t.selectionStart,r=c.value.slice(0,n),i=c.value.slice(n);if(j.value===`slash`){let n=e.insertText??`/${e.label} `;c.value=n+i,o(()=>t.setSelectionRange(n.length,n.length))}else{let a=r.match(/(?<![A-Za-z0-9_.%+/@-])@([^\s@]*)$/u),s=a?n-a[0].length:n,l=c.value.slice(0,s),u=`@${e.label} `;c.value=l+u+i,e.id!==`all`&&!N.value.includes(e.id)&&N.value.push(e.id),o(()=>{let e=l.length+u.length;t.setSelectionRange(e,e)})}j.value=null,o(()=>{t.focus(),Me()})}function Ke(e){if(j.value&&fe.value.length){if(e.key===`ArrowDown`){e.preventDefault(),A.value=(A.value+1)%fe.value.length;return}if(e.key===`ArrowUp`){e.preventDefault(),A.value=(A.value-1+fe.value.length)%fe.value.length;return}if(e.key===`Escape`){e.preventDefault(),j.value=null;return}if(e.key===`Tab`||e.key===`Enter`&&!e.shiftKey){e.preventDefault();let t=fe.value[A.value];t&&Ge(t);return}}e.key!==`Enter`||e.shiftKey||b.value||e.isComposing||e.keyCode===229||(e.preventDefault(),Je())}function qe(){requestAnimationFrame(()=>{b.value=!1,Fe()})}function Je(){if(!re.value)return;let e={text:c.value.trim(),files:y.value.map(e=>e.file),mentionIds:[...N.value]};a(`send`,e),o(()=>g.value?.focus())}function Ye(e){if(e){if((ge.get(e.key)??0)!==e.revision)return!1;if(e.key!==pe())return e.key&&localStorage.removeItem(e.key),!1}return c.value=``,N.value=[],ye(``),Te(),Ne(),o(()=>g.value?.focus()),!0}function Xe(e){e.target.closest(`button, input, textarea, select, summary, a, [role="option"], .composer-resize`)||g.value?.focus()}function Ze(e){let t=e.target;K.value?.contains(t)||Re(),t.closest(`.composer-settings-anchor`)||(P.value=!1),t.closest(`.composer-shell`)||(j.value=null,P.value=!1)}return f(c,e=>{ye(e),o(Me)}),f(()=>r.draftKey,()=>{ve(),P.value=!1,G.value=!1}),f(()=>r.disabled,e=>{e&&(Re(),Ve())}),m(()=>{ve(),document.addEventListener(`pointerdown`,Ze)}),i(()=>{Te(),window.clearTimeout(ne),document.removeEventListener(`pointerdown`,Ze)}),t({attachFiles:Ce,filesSnapshot:()=>y.value.map(e=>e.file),focus:()=>g.value?.focus(),clearAfterSend:Ye,submissionToken:_e}),(t,n)=>(u(),F(`div`,{class:l([`composer-area`,{"composer-area--bot":e.botLayout}])},[e.reference?(u(),F(`div`,i4,[W(Y,{name:`quote`,size:14}),D(`span`,null,[D(`small`,null,h(e.reference.author?`回复 ${e.reference.author}`:`回复消息`),1),D(`strong`,null,h(e.reference.content.replace(/\s+/g,` `).trim()),1)]),D(`button`,{type:`button`,"aria-label":`取消引用`,onClick:n[0]||=e=>a(`clearReference`)},[W(Y,{name:`close`,size:13})])])):z(``,!0),D(`div`,a4,[v(t.$slots,`activity`,{},()=>[W(rt,{name:`composer-activity`},{default:S(()=>[e.activityText?(u(),F(`div`,o4,[n[21]||=D(`span`,{class:`composer-typing-dots`,"aria-hidden":`true`},[D(`i`),D(`i`),D(`i`)],-1),D(`strong`,null,h(e.activityText),1)])):z(``,!0)]),_:1})],!0),e.sending?(u(),F(`span`,s4,[...n[22]||=[D(`i`,null,null,-1),w(`正在发送`,-1)]])):z(``,!0)]),v(t.$slots,`before-input`,{},void 0,!0),D(`div`,{class:l([`composer-shell`,{"composer-shell--drag":C.value,"composer-shell--disabled":e.disabled}]),onMousedown:Xe,onDragenter:Oe,onDragover:ke,onDragleave:Ae,onDrop:je},[D(`input`,{ref_key:`fileInput`,ref:_,class:`composer-file-input`,type:`file`,multiple:``,onChange:Ee},null,544),D(`div`,{class:`composer-resize`,title:`拖动调整高度;双击复位`,onPointerdown:Pe,onDblclick:Ne},null,32),y.value.length?(u(),F(`div`,c4,[(u(!0),F(T,null,p(y.value,e=>(u(),F(`div`,{key:e.id,class:l([`composer-attachment`,{image:Se(e.type)}])},[e.previewUrl?(u(),F(`img`,{key:0,src:e.previewUrl,alt:e.name},null,8,l4)):(u(),k(Y,{key:1,name:`file`,size:19})),D(`span`,null,[D(`strong`,null,h(e.name),1),D(`small`,null,h(xe(e.size)),1)]),D(`button`,{type:`button`,"aria-label":`移除 ${e.name}`,onClick:t=>we(e.id)},[W(Y,{name:`close`,size:12})],8,u4)],2))),128))])):z(``,!0),D(`div`,d4,[e.botLayout?(u(),F(`span`,{key:0,id:B,class:l([`composer-shortcut-hint`,{"is-editing":!!c.value,"composer-shortcut-hint--stacked":y.value.length>0}])},`Enter 发送 · Shift + Enter 换行`,2)):z(``,!0),d(D(`textarea`,{ref_key:`textarea`,ref:g,"onUpdate:modelValue":n[1]||=e=>c.value=e,class:l([`composer-textarea`,{"composer-textarea--empty":!c.value}]),style:s(E.value===null?void 0:{height:`${E.value}px`}),rows:`1`,disabled:e.disabled,placeholder:e.deliveryAvailable&&e.deliveryMode?`描述希望团队交付的结果…`:e.botLayout?`畅所欲言`:e.placeholder,"aria-label":`消息`,"aria-describedby":e.botLayout?B:void 0,onInput:Fe,onClick:Fe,onKeydown:Ke,onPaste:De,onCompositionstart:n[2]||=e=>b.value=!0,onCompositionend:qe},null,46,f4),[[Q,c.value]]),D(`div`,p4,[D(`div`,m4,[e.botLayout||te.value?(u(),F(`div`,{key:0,ref_key:`actionsAnchor`,ref:K,class:`composer-popover-anchor composer-actions-anchor`,onKeydown:ze},[D(`button`,{ref_key:`actionsTrigger`,ref:ee,class:`composer-tool composer-add`,type:`button`,disabled:e.disabled,"aria-label":`添加`,"aria-haspopup":`menu`,"aria-expanded":G.value,onClick:Le,onKeydown:n[3]||=Ie(Z(e=>!G.value&&Le(),[`prevent`]),[`down`])},[W(Y,{name:`plus`,size:20})],40,h4),W(rt,{name:`composer-menu`},{default:S(()=>[e.botLayout||G.value?d((u(),F(`div`,g4,[D(`button`,{type:`button`,role:`menuitem`,disabled:!e.attachmentsEnabled,onClick:Be},[W(Y,{name:`paperclip`,size:20}),n[23]||=D(`span`,null,`添加附件`,-1)],8,_4),e.mentionOptions.length?(u(),F(`button`,{key:0,type:`button`,role:`menuitem`,onClick:X},[W(V(Jy),{class:`composer-action-icon`,"aria-hidden":`true`}),n[24]||=D(`span`,null,`提及成员`,-1)])):z(``,!0),e.deliveryAvailable?(u(),F(T,{key:1},[n[26]||=D(`div`,{class:`composer-add-menu__divider`,role:`separator`},null,-1),D(`button`,{type:`button`,role:`menuitem`,disabled:e.deliveryDisabled||e.sending,onClick:n[4]||=t=>We(!e.deliveryMode)},[W(V(fb),{class:`composer-action-icon`,"aria-hidden":`true`}),D(`span`,null,[n[25]||=D(`strong`,null,`交付目标`,-1),D(`small`,null,h(e.deliveryDisabledReason||(e.deliveryMode?`已开启;点击返回普通聊天`:`让团队持续完成一个结果`)),1)]),e.deliveryMode?(u(),k(Y,{key:0,name:`check`,size:16})):z(``,!0)],8,v4)],64)):z(``,!0),e.botLayout?(u(),F(T,{key:2},[n[28]||=D(`div`,{class:`composer-add-menu__divider`,role:`separator`},null,-1),D(`div`,{ref_key:`optionsTarget`,ref:R,class:`composer-options-target`},null,512),D(`button`,{type:`button`,role:`menuitemcheckbox`,"aria-checked":e.toolTraceVisible,disabled:e.disabled,onClick:n[5]||=e=>a(`toolTraceToggle`)},[W(Y,{name:`brain`,size:20}),n[27]||=D(`span`,null,`显示思考`,-1),e.toolTraceVisible?(u(),k(Y,{key:0,name:`check`,size:16})):z(``,!0)],8,y4)],64)):z(``,!0)],512)),[[tt,G.value]]):z(``,!0)]),_:1})],544)):(u(),F(`button`,{key:1,class:`composer-tool composer-add`,type:`button`,disabled:e.disabled||!e.attachmentsEnabled,title:e.attachmentsEnabled?`添加附件`:`当前上游不支持附件`,"aria-label":`添加附件`,onClick:n[6]||=e=>_.value?.click()},[W(Y,{name:`plus`,size:20})],8,b4)),e.deliveryAvailable&&e.deliveryMode?(u(),F(`button`,{key:2,class:`composer-delivery-chip`,type:`button`,disabled:e.disabled||e.deliveryDisabled||e.sending,"aria-label":`关闭交付目标,返回普通聊天`,title:`关闭交付目标,返回普通聊天`,onClick:n[7]||=e=>We(!1)},[W(V(fb),{class:`composer-action-icon`,"aria-hidden":`true`}),n[29]||=D(`span`,null,`交付目标`,-1),W(Y,{name:`close`,size:15})],8,x4)):z(``,!0),D(`div`,S4,[e.mode===`chat`?(u(),k(oX,{key:e.draftKey,"model-label":ce.value,"reasoning-value":e.reasoningValue,"reasoning-label":e.reasoningEffort,"reasoning-options":e.reasoningOptions,disabled:e.disabled,"fast-mode":e.fastMode,"fast-disabled":e.fastModeDisabled,compact:e.botLayout,combined:e.botLayout,"fast-target":e.botLayout?R.value:void 0,onModelClick:n[8]||=e=>{P.value=!1,a(`modelClick`,e)},onReasoningChange:n[9]||=e=>a(`reasoningChange`,e),onFastModeToggle:n[10]||=e=>a(`fastModeToggle`,e)},null,8,[`model-label`,`reasoning-value`,`reasoning-label`,`reasoning-options`,`disabled`,`fast-mode`,`fast-disabled`,`compact`,`combined`,`fast-target`])):v(t.$slots,`model-controls`,{contextTarget:H.value,optionsTarget:R.value},void 0,!0,1)])]),D(`div`,C4,[e.botLayout?(u(),F(`span`,{key:0,ref_key:`contextTarget`,ref:H,class:`composer-context-slot`},null,512)):z(``,!0),e.mode===`chat`&&!e.botLayout?(u(),F(`div`,{key:1,ref_key:`settingsAnchor`,ref:L,class:`composer-popover-anchor composer-settings-anchor`,onKeydown:Ue},[D(`button`,{ref_key:`settingsTrigger`,ref:I,class:l([`composer-tool composer-tool--icon`,{active:P.value}]),type:`button`,disabled:e.disabled,title:e.botLayout?`更多选项`:`设置`,"aria-label":e.botLayout?`更多选项`:`设置`,"aria-haspopup":`dialog`,"aria-expanded":P.value,onClick:He,onKeydown:n[11]||=Ie(Z(e=>!P.value&&He(),[`prevent`]),[`down`])},[W(Y,{name:`dots`,size:18})],42,w4),W(rt,{name:`composer-menu`},{default:S(()=>[d(D(`div`,T4,[e.botLayout?(u(),F(`div`,{key:0,ref_key:`optionsTarget`,ref:R,class:`composer-options-target`},null,512)):z(``,!0),D(`button`,{class:`composer-setting-row`,type:`button`,role:`switch`,"aria-checked":e.toolTraceVisible,disabled:e.disabled,onClick:n[12]||=t=>e.botLayout?a(`toolTraceToggle`):a(`settingsClick`)},[D(`span`,null,[W(Y,{name:`brain`,size:15}),n[30]||=w(`显示思考`,-1)]),e.toolTraceVisible?(u(),k(Y,{key:0,name:`check`,size:16})):z(``,!0)],8,E4),e.botLayout?z(``,!0):(u(),F(`button`,{key:1,class:`composer-setting-row`,type:`button`,title:`首版暂未启用语音输入`,onClick:n[13]||=e=>be(`语音输入尚未启用`)},[...n[31]||=[D(`span`,null,`语音输入设置`,-1)]]))],512),[[tt,P.value]])]),_:1})],544)):e.botLayout?z(``,!0):(u(),F(`button`,{key:2,class:l([`composer-tool`,{active:e.toolTraceVisible}]),type:`button`,disabled:e.disabled,title:`显示思考`,onClick:n[14]||=e=>a(`toolTraceToggle`)},[W(Y,{name:`brain`,size:16}),n[32]||=D(`span`,null,`思考`,-1)],10,D4)),!e.botLayout&&e.mode===`group`&&e.mentionOptions.length?(u(),F(`button`,{key:3,type:`button`,class:`composer-tool composer-mention-hint`,disabled:e.disabled,"aria-label":`提及成员`,onClick:X},[W(V(Jy),{class:`composer-action-icon`,"aria-hidden":`true`}),n[33]||=D(`span`,null,`提及成员`,-1)],8,O4)):z(``,!0),e.botLayout?z(``,!0):(u(),F(`span`,{key:4,ref_key:`contextTarget`,ref:H,class:`composer-context-slot`},null,512)),v(t.$slots,`context`,{},()=>[de.value?(u(),k(XY,{key:0,class:`composer-context`,compact:e.botLayout,"used-tokens":e.contextUsed,"limit-tokens":e.contextLimit,"percent-used":le.value},null,8,[`compact`,`used-tokens`,`limit-tokens`,`percent-used`])):z(``,!0)],!0),W(r4,{compact:e.botLayout,disabled:e.disabled||e.voiceActive,"draft-key":e.draftKey,"bot-id":e.voiceBotId,onActiveChange:n[15]||=e=>q.value=e,onText:n[16]||=e=>c.value+=(c.value?`
|
|
258
|
+
`:``)+e,onError:n[17]||=e=>a(`error`,e)},null,8,[`compact`,`disabled`,`draft-key`,`bot-id`]),e.mode===`chat`&&e.streaming&&re.value?(u(),F(`span`,k4,[e.streaming&&re.value?(u(),F(`button`,{key:0,class:l([`queue-toggle`,{active:e.queueMode}]),type:`button`,title:e.queueMode?`消息将排队发送`:`消息将 Steer 当前会话`,onClick:n[18]||=e=>a(`queueToggle`)},h(e.queueMode?`排队`:`Steer`),11,A4)):z(``,!0)])):z(``,!0),oe.value&&!se.value?(u(),F(`span`,j4,[oe.value&&!se.value?(u(),F(`button`,{key:0,class:`composer-stop`,type:`button`,"aria-label":`停止生成`,title:`停止生成`,onClick:n[19]||=e=>a(`stop`)},[W(Y,{name:`stop`,size:15})])):z(``,!0)])):z(``,!0),D(`span`,M4,[e.botLayout&&t.$slots[`realtime-voice`]?d((u(),F(`span`,N4,[v(t.$slots,`realtime-voice`,{disabled:ae.value},void 0,!0)],512)),[[tt,!ie.value&&!se.value]]):z(``,!0),!e.botLayout||!t.$slots[`realtime-voice`]||ie.value||se.value?(u(),F(`button`,{key:1,class:l([`composer-send`,{"composer-send--stop":se.value}]),type:`button`,disabled:!se.value&&!re.value,"aria-label":se.value?`停止生成`:`发送消息`,onClick:n[20]||=e=>se.value?a(`stop`):Je()},[W(Y,{name:se.value?`stop`:`arrow-up`,size:(se.value,17)},null,8,[`name`,`size`])],10,P4)):z(``,!0)])])])]),W(rt,{name:`composer-menu`},{default:S(()=>[j.value&&fe.value.length?(u(),F(`div`,F4,[D(`div`,I4,h(j.value===`mention`?`提及机器人`:`命令`),1),(u(!0),F(T,null,p(fe.value,(e,t)=>(u(),F(`button`,{key:e.id,type:`button`,role:`option`,"aria-selected":t===A.value,disabled:e.disabled,class:l({active:t===A.value}),onMousedown:Z(t=>Ge(e),[`prevent`]),onMouseenter:e=>A.value=t},[D(`span`,R4,h(j.value===`mention`?e.label.slice(0,1).toUpperCase():`/`),1),D(`span`,null,[D(`strong`,null,h(j.value===`mention`?`@${e.label}`:`/${e.label}`),1),e.detail?(u(),F(`small`,z4,h(e.detail),1)):z(``,!0)]),e.disabled?(u(),F(`em`,B4,`不可用`)):z(``,!0)],42,L4))),128))])):z(``,!0)]),_:1}),C.value?(u(),F(`div`,V4,[W(Y,{name:`paperclip`,size:20}),n[34]||=w(`松开以添加附件`,-1)])):z(``,!0)],34),v(t.$slots,`controls-status`,{},void 0,!0),W(rt,{name:`composer-menu`},{default:S(()=>[J.value?(u(),F(`p`,H4,h(J.value),1)):z(``,!0)]),_:1})],2))}}),[[`__scopeId`,`data-v-ba5b4155`]]),K4=`<svg
|
|
259
259
|
xmlns="http://www.w3.org/2000/svg"
|
|
260
260
|
width="24"
|
|
261
261
|
height="24"
|
|
@@ -273,9 +273,9 @@ https://github.com/highlightjs/highlight.js/issues/2277`),i=e,r=t),n===void 0&&(
|
|
|
273
273
|
<path d="M18 5v13" />
|
|
274
274
|
<path d="M22 10v3" />
|
|
275
275
|
</svg>
|
|
276
|
-
`,
|
|
276
|
+
`,q4=()=>new DOMException(`语音对话已结束`,`AbortError`),J4=e=>{if(e.aborted)throw q4()};function Y4(e){return rV(e).replace(/```[\s\S]*?```/g,`这里有一段代码。`).replace(/!\[[^\]]*\]\([^)]*\)/g,`图片`).replace(/\[([^\]]+)\]\([^)]*\)/g,`$1`).replace(/https?:\/\/\S+/g,`链接`).replace(/<[^>]+>/g,``).replace(/^[\s]*[>#*-]+\s*/gm,``).replace(/[*_`~]/g,``).trim()}var X4=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(J4(n),!e.transcription||!e.speech)throw Error(`请先在“设置 → 模型服务 → 语音”配置语音识别和语音合成。`);for(await this.audio.open(n),J4(n);!n.aborted;){this.set({phase:`listening`});let e=await this.audio.record(n,()=>{n.aborted||this.set({phase:`recording`})});if(J4(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);J4(n);let a=await this.request(`/api/app/harness/speech/transcription`,{method:`POST`,signal:n,body:{requestId:He(),...r,audio:btoa(i),mimeType:e.type.split(`;`)[0]||`audio/webm`}});if(J4(n),!a.text.trim())continue;this.set({phase:`waiting`,text:a.text.trim(),reply:``});let o=await this.submit(a.text.trim(),n);J4(n),this.set({phase:`speaking`,reply:o});let s=Y4(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:He(),...r,text:s.slice(e,e+4e3)}});J4(n);let i=Uint8Array.from(atob(t.audio),e=>e.charCodeAt(0));await this.audio.play(new Blob([i],{type:t.mimeType}),n),J4(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`})}},Z4=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()),q4();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(),J4(e)}record(e,t){if(J4(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(q4());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 J4(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(q4());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}},Q4=[`disabled`,`aria-label`,`title`],$4=[`innerHTML`],e3={key:0,class:`voice-conversation-panel`,"aria-label":`实时语音对话`},t3={class:`voice-conversation-panel__heading`},n3={role:`status`,"aria-live":`polite`},r3={key:0,role:`alert`},i3={key:0,class:`voice-conversation-panel__text`},a3={class:`voice-conversation-panel__actions`},o3=H(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=U(()=>![`idle`,`error`].includes(a.value.phase)),s={idle:`实时对话`,starting:`正在连接麦克风…`,listening:`正在聆听`,recording:`正在听你说…`,transcribing:`正在识别语音…`,waiting:`等待 Bot 回复…`,speaking:`正在朗读回复`,error:`语音对话未连接`},c;function l(){c?.stop(),c=void 0}function d(){n.disabled||o.value||(c=new X4(X,new Z4,n.submit,e=>{a.value=e,r(`activeChange`,![`idle`,`error`].includes(e.phase)),e.phase===`error`&&r(`error`,e.error)},n.botId),c.start())}function p(){a.value={...a.value,phase:`idle`,error:``}}function g(){document.hidden&&l()}return f(()=>[n.draftKey,n.botId],l),m(()=>document.addEventListener(`visibilitychange`,g)),i(()=>{l(),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?l():d()},[o.value?(u(),k(V(nb),{key:0,"aria-hidden":`true`})):(u(),F(`span`,{key:1,class:`voice-conversation-wave`,"aria-hidden":`true`,innerHTML:V(K4)},null,8,$4))],8,Q4),(u(),k(L,{to:`body`},[o.value||a.value.error?(u(),F(`section`,e3,[D(`div`,t3,[D(`strong`,n3,h(s[a.value.phase]),1),a.value.error?(u(),F(`button`,{key:0,type:`button`,"aria-label":`关闭语音提示`,onClick:p},[W(V(mb),{"aria-hidden":`true`})])):z(``,!0)]),a.value.error?(u(),F(`p`,r3,h(a.value.error),1)):(u(),F(T,{key:1},[n[2]||=D(`p`,null,`说完后自动发送;回复完成后继续聆听。`,-1),a.value.text?(u(),F(`p`,i3,`你:`+h(a.value.text),1)):z(``,!0)],64)),D(`div`,a3,[a.value.error?(u(),F(`button`,{key:0,type:`button`,onClick:n[1]||=e=>{r(`settings`),p()}},`语音设置`)):z(``,!0),o.value?(u(),F(`button`,{key:1,type:`button`,class:`voice-conversation-panel__end`,onClick:l},[W(V(nb),{"aria-hidden":`true`}),n[3]||=w(`结束对话`,-1)])):z(``,!0)])])):z(``,!0)]))],64))}}),[[`__scopeId`,`data-v-3b401726`]]);function s3(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=>rV(e.content).trim()).filter(Boolean).join(`
|
|
277
277
|
|
|
278
|
-
`);return r?{text:r}:{error:`本轮已结束,没有可朗读的回复。请在聊天中查看交付结果。`}}var s3=[`aria-label`],c3={class:`image-preview-actions`},l3=[`href`,`aria-label`,`title`],u3=[`aria-label`,`title`],d3=[`aria-label`,`title`],f3=[`aria-label`],p3=[`src`,`aria-label`],m3=[`src`,`alt`],h3=[`aria-label`],g3={key:2,class:`image-preview-counter`},_3=H(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=U(()=>n.modelValue===null?null:n.images[n.modelValue]||null),s=VH(()=>o.value?.url),c=e=>{o.value&&HH(e,o.value.url,o.value.name).catch(()=>{})},l=U(()=>(n.modelValue??0)>0),d=U(()=>n.modelValue!==null&&n.modelValue<n.images.length-1);function f(){a.value=null,r(`update:modelValue`,null),r(`close`)}function p(e){if(n.modelValue===null)return;let t=n.modelValue+e;t>=0&&t<n.images.length&&r(`update:modelValue`,t)}function g(e){n.modelValue!==null&&(e.key===`Escape`?(e.preventDefault(),f()):e.key===`ArrowLeft`?(e.preventDefault(),p(-1)):e.key===`ArrowRight`&&(e.preventDefault(),p(1)))}function _(e){e.isPrimary&&(a.value={pointerId:e.pointerId,x:e.clientX})}function v(e){let t=a.value;a.value=null,!(!t||t.pointerId!==e.pointerId||Math.abs(e.clientX-t.x)<48)&&p(e.clientX<t.x?1:-1)}return m(()=>window.addEventListener(`keydown`,g)),i(()=>window.removeEventListener(`keydown`,g)),(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:Z(f,[`self`]),onPointerdown:_,onPointerup:v,onPointercancel:n[7]||=e=>a.value=null},[D(`div`,c3,[D(`a`,{href:o.value.url,download:``,onClick:c,"aria-label":`下载 ${o.value.name}`,title:`下载 ${o.value.name}`},[W(V(Ot),{"aria-hidden":`true`})],8,l3),e.canAdd?(u(),F(`button`,{key:0,type:`button`,"aria-label":e.addLabel||`添加到聊天`,title:e.addLabel||`添加到聊天`,onClick:n[0]||=Z(e=>r(`add`,o.value),[`stop`])},[W(V(bt),{"aria-hidden":`true`})],8,u3)):z(``,!0),D(`button`,{type:`button`,"aria-label":e.closeLabel||`关闭预览`,title:e.closeLabel||`关闭预览`,onClick:f},[W(V(Et),{"aria-hidden":`true`})],8,d3)]),l.value?(u(),F(`button`,{key:0,class:`image-preview-nav image-preview-nav--previous`,type:`button`,"aria-label":e.previousLabel||`上一张媒体`,onClick:n[1]||=Z(e=>p(-1),[`stop`])},[W(V(wt),{"aria-hidden":`true`})],8,f3)):z(``,!0),W(rt,{name:`image-preview-change`,mode:`out-in`},{default:S(()=>[o.value.type===`video`?(u(),F(`video`,{key:o.value.url,src:V(s).url.value,"aria-label":o.value.name,class:`image-preview-video`,controls:``,playsinline:``,preload:`metadata`,onClick:n[2]||=Z(()=>{},[`stop`]),onPointerdown:n[3]||=Z(()=>{},[`stop`]),onPointerup:n[4]||=Z(()=>{},[`stop`])},null,40,p3)):(u(),F(`img`,{key:o.value.url,src:V(s).url.value,alt:o.value.name,class:`image-preview-img`,draggable:`false`,onClick:n[5]||=Z(()=>{},[`stop`])},null,8,m3))]),_:1}),d.value?(u(),F(`button`,{key:1,class:`image-preview-nav image-preview-nav--next`,type:`button`,"aria-label":e.nextLabel||`下一张媒体`,onClick:n[6]||=Z(e=>p(1),[`stop`])},[W(V(ie),{"aria-hidden":`true`})],8,h3)):z(``,!0),e.images.length>1?(u(),F(`span`,g3,h((e.modelValue||0)+1)+` / `+h(e.images.length),1)):z(``,!0)],40,s3)):z(``,!0)]))}}),[[`__scopeId`,`data-v-7d71af51`]]),v3=[{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:`检查权限、数据、依赖和操作安全性`}]}],y3={class:`preset-picker`,"aria-label":`团队预设`},b3={class:`preset-grid`},x3=[`disabled`,`aria-label`,`onClick`],S3={key:0,class:`preset-help`},C3=H(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`,y3,[n[2]||=D(`div`,{class:`preset-picker__heading`},[D(`span`,null,`团队预设`),D(`small`,null,`选择后分配已创建的机器人`)],-1),D(`div`,b3,[D(`button`,{type:`button`,class:l({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(V(v3),t=>(u(),F(`button`,{key:t.id,type:`button`,class:l({selected:e.selected===t.id}),disabled:i(t)>0,"aria-label":t.name,onClick:e=>r(`select`,t)},[D(`strong`,null,h(t.name),1),D(`small`,null,h(t.summary),1),D(`em`,null,h(i(t)?`还缺 ${i(t)} 人`:`${t.roles.length} 人`),1)],10,x3))),128))]),e.available<5?(u(),F(`small`,S3,`成员不足时,请先创建所需的机器人。`)):z(``,!0)]))}}),[[`__scopeId`,`data-v-22ca72e6`]]),w3={key:0,class:`directory-view`},T3={key:0,role:`alert`,class:`error`},E3={key:0,class:`header-actions`},D3={key:0,class:`task-picker-shell`},O3=[`aria-busy`,`disabled`,`value`],k3=[`value`],A3=[`aria-pressed`],j3={key:0,class:`error`,role:`alert`},M3={key:0,class:`task-queue-status`,role:`status`},N3={key:1,class:`task-queue-status`,role:`status`},P3={key:0,class:`group-approval-summary`,role:`status`},F3=[`onClick`],I3={key:1,class:`knowledge-shortcuts composer-knowledge`},L3={key:0},R3=[`value`],z3={key:1},B3=[`value`],V3={key:2},H3={value:``},U3=[`value`],W3={key:0,class:`search-lifecycle-actions`},G3=[`aria-label`,`disabled`,`onClick`],K3=[`aria-label`,`disabled`,`aria-busy`,`onClick`],q3={key:0,class:`search-delete-error`,role:`alert`},J3={key:0,class:`lifecycle-error`,role:`alert`},Y3={id:`conversation-editor-title`},X3={class:`editor-content`},Z3={key:0,class:`error`,role:`alert`},Q3=[`readonly`],$3={key:2,class:`group-options`},e6={key:3},t6=[`aria-expanded`],n6={key:5,class:`team-avatar-settings`},r6={key:6},i6=[`readonly`,`placeholder`],a6={class:`model-summary`},o6={key:0,class:`group-options`},s6={class:`team-management-permission`},c6={key:8,class:`preset-role-mapping`},l6=[`value`,`aria-label`,`onChange`],u6=[`value`],d6={key:9},f6=[`value`,`disabled`],p6={class:`member-choice__copy`},m6={key:0},h6={key:1},g6=[`onClick`],_6={key:10},v6=[`value`],y6={key:0,class:`group-help`},b6={key:1,class:`group-help`},x6={key:0,value:`discussion`},S6={class:`group-options`},C6={key:1},w6=[`value`],T6={key:2},E6=[`checked`],D6={key:3},O6=[`disabled`],k6=`yaovi:workspace-dock-width`,A6=320,j6=6,M6=`__create_task__`,N6=E({__name:`ConversationsView`,setup(e){let t=ce(),n=U(()=>Gv(t.user?.id,ot.selectedHostId,ot.accountId)),r=we(),a=Ae(),c=Se(),g=O([]),v=O([]),y=I([]),b=O(),x=O(null),C=O([]),E=O([]),A=O(null),j=O([]),M=O(),N=O([]),P=O(``),R=O([]),B=O(``),H=O(),G=U(()=>j.value.includes(`conversation-sections-v1`)),{collapsed:K,toggle:ee}=kQ(n,()=>[vI,...R.value.map(e=>e.id)]),te=U(()=>[...K.value]),q=U(()=>j.value.includes(jt)),J=U(()=>j.value.includes(`background-tasks-v1`)),ne=U(()=>M.value?.enabled?M.value.mainBotId:null),re=U(()=>q.value&&a.query.view===`bots`),ie=U(()=>!!ne.value&&b.value?.kind===`direct`&&b.value.memberIds[0]===ne.value),le=U(()=>vt(N.value)),ue=U(()=>new Set(N.value.map(e=>e.runId).filter(Boolean))),de=U(()=>x.value&&!ue.value.has(x.value.id)?x.value:null),pe=U(()=>!!de.value&&[`queued`,`running`,`waiting`,`uncertain`].includes(de.value.status)||$v(y.value.filter(e=>!e.runId||!ue.value.has(e.runId)))),me=U(()=>!!b.value?.activeRunId&&!ue.value.has(b.value.activeRunId)),ge,_e=0,ve=O([]),xe=O(null),Ce=O([]),Te=O([]),Ee=O(!1),De=O(),Oe=O([]),je=U(()=>ve.value.filter(e=>Oe.value.includes(e.id)));function Fe(e){c.push({path:`/conversations/workstreams`,query:{task:e,...wn.value?{from:`/conversations/${wn.value}`}:{}}})}function Ie(e){c.push({path:`/conversations/${e.conversationId}`,query:e.taskId?{taskId:e.taskId}:{}})}function Le(e){Jn()&&($t.value===`editAgent`&&Yr(),jn.value=void 0,Oe.value=e??[],De.value=e?`runtime`:`goal`)}let ze=O(!1),Be=O(),Ve=O(0),Ue=O(!1),We=O([]),Ge=O(``),Ke=O(),Xe=O(``),Ze=U(()=>er.value.filter(e=>!e.temporaryGoalId&&!e.archived&&!e.remoteAgentId)),Qe=U(()=>Ze.value.find(e=>e.id===b.value?.administratorId)??Ze.value[0]),$e=U(()=>b.value?.kind===`group`&&!b.value.archived&&!xe.value?.goal&&(b.value.collaborationMode===`discussion`?Ze.value.length>0:er.value.some(e=>e.id===b.value?.administratorId&&!e.temporaryGoalId&&!e.archived&&!e.remoteAgentId))),et=new Map,nt=new Map,rt=U(()=>`${n.value}:${b.value?.id}${xe.value?`:${xe.value.id}`:``}`);f(rt,()=>{De.value=void 0,Ee.value=!1,Ge.value=``,Ke.value=void 0,Xe.value=``});async function it(){await _r(),Ue.value&&(We.value=(await X(`/api/app/workspace/projects`)).projects)}async function at(){await Promise.all([it(),fr()])}let lt=O(``),ut=O(``),dt=O(!1),ft=O(!1),pt=O([]),mt=O([]),ht=O(!0),yt=O(``),bt=O(``);f(()=>`${a.params.id}:${E.value[0]?.id}`,()=>{bt.value=``});let xt=U(()=>jV(v.value)),St=U(()=>[!1,!0].map(e=>{let t=v.value.filter(t=>t.archived===e).map(e=>NV(e,g.value,xt.value));return{id:e?`archived`:`unarchived`,title:e?`已归档`:`未归档`,children:t,emptyText:e?`没有已归档聊天`:`没有未归档聊天`}})),Ct=U(()=>new Set(v.value.filter(e=>e.archived).map(e=>e.id))),wt=O(``),Tt=O(``),Et=O(``),Dt=O(),Ot=O(),kt=O(!1),At=O(0),Mt,Nt=O(),Pt=O(null),Ft=O(null),It=O(null),Lt=O(!1),Rt=new $2,zt=new WeakMap,Bt=I([]),Vt=new Set;function Ht(e,t=n.value){!t||t!==n.value||(ry(t,e),Bt.value=e)}f(n,e=>{if(Bt.value=[],e)try{Bt.value=ny(e)}catch(e){ut.value=e instanceof Error?e.message:`待发送消息缓存无法读取`}},{immediate:!0}),f(y,e=>{let t=new Set(e.filter(e=>e.clientRequestId).map(e=>e.clientRequestId)),n=Bt.value.filter(e=>e.conversationId!==b.value?.id||(e.taskId??``)!==(xe.value?.id??``)||!t.has(e.requestId));if(n.length!==Bt.value.length)try{Ht(n)}catch{}});let Ut=U(()=>wQ(Yv(iy(y.value,Bt.value.filter(e=>e.conversationId===b.value?.id&&(e.taskId??``)===(xe.value?.id??``)))).filter(e=>e.visible!==!1).map(e=>{let t=zt.get(e);return t||(t={...OV([e])[0],localRequestId:e.localRequestId},zt.set(e,t)),t}),xe.value?.goal,Te.value,ve.value,y.value.flatMap(e=>e.attachments))),Wt=O(!1),Gt=U(()=>vq(Ut.value)),Kt=U(()=>Gt.value.filter(e=>e.kind===`image`||e.kind===`video`).map(e=>({url:e.previewUrl||e.downloadUrl||``,name:e.name,type:e.kind}))),qt=U(()=>Pt.value?{id:Pt.value.id,content:Pt.value.content,author:Pt.value.author}:null),Jt=U(()=>({name:en.value||`机器人`,displayName:$.name||`机器人`,agentName:$.name||`机器人`,agentAvatar:$.avatar,isDefault:!1,isRunning:!0}));function Yt(e){let t=e.url||``;try{t=decodeURIComponent(new URL(t,window.location.origin).pathname)}catch{}let n=y.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=hq(n?.name||e.name,e.url||``,void 0,i?`text`:void 0),o=Kt.value.findIndex(e=>e.url===(a.previewUrl||a.downloadUrl));o>=0?It.value=o:Ft.value=a}let Xt=[],Zt=[];async function Qt(e){let t=Ot.value,n=t?.submissionToken(),r=rt.value,i=ei;if(lt.value=Pt.value?`> ${Pt.value.author||`我`}: ${Pt.value.content.replace(/\n/g,`
|
|
279
|
-
> `)}\n\n${e.text}`:e.text,mt.value=e.mentionIds,e.files.length)try{if(dt.value=!0,e.files.length===Xt.length&&e.files.every((e,t)=>e===Xt[t]))pt.value=Zt;else{let t=new FormData;for(let n of e.files)t.append(`files`,n);let n=await X(`/api/app/uploads`,{method:`POST`,body:t});if(r!==rt.value||i!==ei)return;pt.value=n.files,Xt=[...e.files],Zt=[...pt.value]}}catch(e){ut.value=e instanceof Error?e.message:`上传失败`;return}finally{i===ei&&(dt.value=!1)}r===rt.value&&i===ei&&(e.files.length||(pt.value=[]),await ri()&&t?.clearAfterSend(n)&&Ot.value===t&&rt.value===r&&ei===i&&(Pt.value=null,Xt=[],Zt=[]))}let $t=O(null),en=O(``),tn=O(``);O(),O();let nn=O(),rn=O(),an=O(!1),on=O(``);function sn(e){let n=g.value.find(t=>t.id===e);!q.value||t.user?.role!==`admin`||!n||n.archived||n.temporaryGoalId||n.remoteAgentId||n.nodeId!==`local`||!Jn()||(Yr(),on.value=e)}async function cn(e){let t=v.value.find(t=>t.kind===`direct`&&t.memberIds[0]===e.id&&!t.archived);t&&Jn()&&await Kr(`editAgent`,t,!0)}function ln(e){M.value=e,fr()}let un=0,dn=U(()=>v.value.find(e=>e.id===tn.value)??(b.value?.id===tn.value?b.value:void 0)),fn=U(()=>g.value.find(e=>e.id===en.value)),pn=U(()=>$t.value===`editAgent`&&!!g.value.find(e=>e.id===en.value)?.remoteAgentId),$=_({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}),mn=O(`custom`),hn=U(()=>$t.value===`group`?v3.find(e=>e.id===mn.value):void 0);function _n(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 vn(e){let t=g.value.filter(e=>!e.archived&&!e.temporaryGoalId);e&&t.length<e.roles.length||(mn.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:Ue.value?`discussion`:`host`,autoReplyIds:[],maxReplyRounds:3}),e&&_n(e))}function yn(e,t){if(!hn.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,_n(hn.value)}_({});let bn=0,xn=!1,Sn,Cn=0,wn=U(()=>typeof a.params.id==`string`?a.params.id:void 0);f(wn,e=>{qe.value=e??null},{immediate:!0});let Tn=U(()=>typeof a.query.taskId==`string`?a.query.taskId:``),En=O(),Dn=O(),On=O(),kn=O(!0),An=O(!1),jn=O(),Mn=O(!1),Nn=O(),Pn=O(),Fn=O(``),In={default:380,min:280,max:480},Ln=O(),Rn=iF(k6,In),zn=U(()=>Rn.width.value),Bn=U(()=>({flex:`0 0 ${zn.value}px`,width:`${zn.value}px`})),Vn=U(()=>!!(De.value||jn.value||$t.value===`editAgent`&&fn.value));function Hn(){let e=Ln.value?.clientWidth||0,t=e>0?e:Math.min(window.innerWidth,1200)-360;return Math.max(In.min,t-A6-j6)}function Un(){Rn.persist(Rn.width.value,Hn())}function Wn(e){Un(),Rn.beginDrag(e,{direction:-1,maxAvailable:Hn})}function Gn(){Rn.reset(Hn())}f(Vn,e=>{e&&o(()=>Un())});let qn=O(!1);function Jn(){return $t.value!==`editAgent`||(rn.value?.beforeClose?.()??!0)}function Yn(e){Jn()&&($t.value===`editAgent`&&Yr(),De.value=void 0,jn.value=jn.value===e?void 0:e)}async function Xn(e,t,n,r=!0){if(r&&window.yaoviDesktop?.openComputer&&!fe()){try{await window.yaoviDesktop.openComputer(e.id,{backend:t,host:n})}catch(e){ut.value=e instanceof Error?e.message:`无法打开电脑窗口`}return}if(An.value&&On.value){if(Nn.value?.id===e.id&&Pn.value===t&&Fn.value===(n??``))return;try{await On.value.releaseControl(),An.value=!1,await o()}catch(e){ut.value=e instanceof Error?e.message:`请先交还当前电脑`;return}}Nn.value=e,Pn.value=t,Fn.value=n??``,kn.value=r,An.value=!0}function Zn(e){y.value.some(t=>t.credentialDrafts?.some(t=>t.id===e.id))&&(Dx.value=e.id,En.value?.openSettings(`credential-vault`))}async function Qn(e){if(!y.value.some(t=>t.browserCard?.id===e.id&&t.browserCard.agentId===e.agentId))return;let t=g.value.find(t=>t.id===e.agentId&&!t.archived);if(!t){ut.value=`此浏览器所属机器人已不可用,或你已没有访问权限`;return}await Xn(t,`managed-browser`)}async function $n(){if(Mn.value&&Dn.value&&!await Dn.value.close())return!1;if(An.value&&On.value)try{await On.value.releaseControl(),An.value=!1}catch{return!1}return!0}Re($n),oe(()=>Jn()?$n():!1);let er=U(()=>g.value.filter(e=>b.value?.memberIds.includes(e.id))),tr=U(()=>b.value?.kind===`direct`?g.value.find(e=>e.id===b.value?.memberIds[0]):void 0),nr=U(()=>tr.value?.name||b.value?.name||`Bot 模式`),rr=U(()=>b.value?tr.value?.name||b.value.name:``),ir=U(()=>tr.value?.avatar||b.value?.avatar||``),ar=U(()=>b.value?.kind===`group`?kV(b.value.memberIds,g.value,b.value):[]),or=U(()=>{let e=de.value;return dy({vmWait:e?.vmWait,runStatus:e?.status??(pe.value?`running`:void 0),stopRequested:e?.stopRequested,collaborationWaiting:!!b.value?.collaborationWaiting,backgroundPhase:e?.backgroundPhase,...fy(y.value)})??(pe.value?`正在输入…`:``)}),sr=U(()=>_y({foregroundActive:pe.value,tasks:J.value?N.value:[],conversation:b.value})??``),cr=U(()=>pe.value?or.value:sr.value),lr=U(()=>{let e=[...Ut.value].reverse().find(e=>e.role===`assistant`&&e.status===`streaming`)?.profile,t=tr.value?.id||x.value?.activeAgentId||e||b.value?.activeAgentId||Object.entries(b.value?.activeAgentStates??{}).find(([,e])=>e===`running`)?.[0]||b.value?.memberIds[0],n=g.value.find(e=>e.id===t);return{name:n?.name||b.value?.name||`机器人`,avatar:n?.avatar||(b.value?.kind===`direct`?b.value.avatar:``)||``}}),ur=U(()=>$t.value===`agent`||$t.value===`editAgent`),dr=e=>e;async function fr(){let e=++_e,n=t.user?.id,r=()=>!xn&&e===_e&&t.user?.id===n,i=[];await Promise.all([q.value?X(`/api/app/permissions/control`).then(e=>{r()&&(M.value=e)}).catch(e=>{i.push(e instanceof Error?e.message:`无法读取 Bot 权限`)}):Promise.resolve(),J.value?X(`/api/app/background-tasks`).then(e=>{r()&&(N.value=_t(N.value,e.tasks))}).catch(e=>{i.push(e instanceof Error?e.message:`无法读取后台任务`)}):Promise.resolve()]),r()&&(P.value=i.join(`;`))}function pr(){if(De.value=void 0,a.query.taskDetails===`goal`){let{taskDetails:e,...t}=a.query;c.replace({path:a.path,query:t})}}f(()=>[xe.value?.id,ft.value,a.query.taskDetails],async()=>{if(ft.value||a.query.taskDetails!==`goal`||!xe.value?.goal||xe.value.id!==Tn.value)return;let e=xe.value.id;await o(),!xn&&!ft.value&&xe.value?.id===e&&Tn.value===e&&a.query.taskDetails===`goal`&&Le()});async function mr(){Jn()&&(Yr(),await c.push(`/conversations?view=bots`))}async function hr(e,t=!1){let n=v.value.find(t=>t.kind===`direct`&&t.memberIds[0]===e.id&&!t.archived);if(!n){P.value=`此 Bot 的聊天尚不可用,请刷新后重试。`;return}if(t&&q.value){Jn()&&(Yr(),En.value?.openSettings(`my-bots`,void 0,e.id));return}t?(await Wr(n.id),await Kr(`editAgent`,n)):await Wr(n.id)}async function gr(){if(wn.value||a.query.view===`bots`||a.query.view===`chats`||!ne.value)return;let e=v.value.find(e=>e.kind===`direct`&&e.memberIds[0]===ne.value&&!e.archived);e&&await c.replace(`/conversations/${e.id}`)}async function _r(){let e=Rt.cursor,n=t.user?.id,[r,i]=await Promise.all([X(`/api/app/agents`),X(`/api/app/conversations`)]);if(xn||t.user?.id!==n||Rt.cursor!==e)return;g.value=r.agents;let a=new Map(v.value.map(e=>[e.id,e]));Rt.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}),Rt.agents=g.value,i.sections&&(Rt.sections=i.sections),v.value=Rt.conversations,R.value=Rt.sections,bn||(bn=i.cursor,Rt.cursor=i.cursor)}async function vr(e=wn.value,n=!1,r){if(!e){Cn++,b.value=void 0,y.value=[],x.value=null,E.value=[],A.value=null,xe.value=null,Ce.value=[],Te.value=[],ve.value=[];return}let i=++Cn,s=t.user?.id,l=ei,u=()=>!xn&&i===Cn&&!r?.aborted&&t.user?.id===s&&ei===l,d=rt.value,f=Ot.value?.filesSnapshot()??[],p=Pt.value,m=Tn.value||(b.value?.id===e?xe.value?.id:void 0),h=n?void 0:Rt.get(e,m),g=Rt.beginRead();n||(ft.value=!h),b.value?.id!==e&&(b.value=v.value.find(t=>t.id===e),y.value=h?.messages??[],x.value=null,E.value=[],A.value=null,xe.value=null,Ce.value=[],Te.value=[],ve.value=[],Pt.value=null,ht.value=!1);try{let i=h??await X(`/api/app/conversations/${e}?limit=50&toolDetails=lazy${m?`&taskId=${encodeURIComponent(m)}`:``}`,{signal:r});if(!u())return;let s=h??Rt.finishRead(g,i);h&&Rt.staleDetails.has(X2(e,h.task?.id))&&queueMicrotask(()=>{u()&&b.value?.id===e&&vr(e,!0,r)});let c=Nt.value?.isFollowingBottom()??!0;if(b.value=s.conversation,s.task&&Rt.selectedTasks.set(e,s.task.id),xe.value=s.task??null,Ce.value=s.tasks??[],Te.value=s.assignments??[],ve.value=s.runtimeTasks??[],y.value=s.messages,x.value=s.run,C.value=s.approvalSummaries??[],E.value=s.interactions,A.value=s.context,d!==rt.value){if(et.set(d,f),nt.set(d,p),xe.value&&!m&&!ot.selectedHostId){let e=`yaovi:composer:group:${t.user?.id}:${b.value.id}`,n=`yaovi:composer:group:${rt.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=et.get(rt.value);if(e?.length&&await Ot.value?.attachFiles(e),!u())return;Pt.value=nt.get(rt.value)??null}if(n||(ht.value=s.hasOlder??s.messages.length===50),!n||c){if(await o(),!u())return;!n&&typeof a.query.unread!=`string`&&Nt.value?.scrollToBottom(`auto`),typeof a.query.unread==`string`&&br(a.query.unread)}}catch(t){if(u()&&m&&t instanceof se&&t.status===404)try{let t=(await X(`/api/app/conversations/${e}/tasks`,{signal:r})).tasks[0];if(u()&&t&&t.id!==m){await c.replace({query:{...a.query,taskId:t.id}});return}}catch{}u()&&(ut.value=t instanceof Error?t.message:`加载失败`)}finally{Rt.cancelRead(g),i===Cn&&(ft.value=!1)}}let yr=0;async function br(e){let t=++yr,n=wn.value,r=Tn.value,i=a.path,s=()=>!xn&&t===yr&&a.path===i&&b.value?.id===n&&wn.value===n&&Tn.value===r&&a.query.unread===e;try{for(let t=0;t<100&&s();t++){if(await o(),!s()||Nt.value?.scrollToMessage(e)||!ht.value||Wt.value)return;await xi()}}finally{if(s()){let e={...a.query};delete e.unread,await c.replace({query:e})}}}f(()=>a.query.unread,e=>{typeof e==`string`&&!ft.value&&b.value?.id===wn.value&&br(e)},{flush:`post`});let xr=st(),Sr=new Set;async function Cr(e){let t=b.value;if(!t||ft.value||An.value||typeof a.query.unread==`string`)return;let n=`${t.id}:${e.join(`,`)}`;if(Sr.has(n))return;let r=new Set(y.value.filter(e=>e.role===`assistant`&&e.status===`complete`&&e.visible!==!1).map(e=>e.id));Sr.add(n);try{await xr.visible(`bot`,t.id,void 0,e.filter(e=>r.has(e)))}catch{}finally{Sr.delete(n)}}async function wr(e){let t=e.currentTarget,n=t.value;if(n!==M6){await c.push({query:{...a.query,taskId:n}});return}if(t.value=xe.value?.id??``,!b.value||b.value.kind!==`group`||qn.value)return;let r=b.value.id;qn.value=!0,ut.value=``;try{let e=await X(`/api/app/conversations/${r}/tasks`,{method:`POST`,body:{}});if(b.value?.id!==r)return;Ce.value=[e.task,...Ce.value.filter(t=>t.id!==e.task.id)],await c.push({query:{...a.query,taskId:e.task.id}})}catch(e){ut.value=e instanceof Error?e.message:`新建话题失败`}finally{qn.value=!1}}async function Tr(){if(!(!b.value||!xe.value))try{await X(`/api/app/conversations/${b.value.id}/tasks/${xe.value.id}/stop`,{method:`POST`,body:{}}),await vr(void 0,!0)}catch(e){ut.value=e instanceof Error?e.message:`停止任务失败`}}async function Er(){if(!(!b.value||!xe.value))try{await X(`/api/app/conversations/${b.value.id}/tasks/${xe.value.id}/resume`,{method:`POST`,body:{requestId:He()}}),await vr(void 0,!0)}catch(e){ut.value=e instanceof Error?e.message:`恢复任务失败`}}async function Dr(e,t,n){let r=b.value?.id;if(!r||xe.value?.id!==e)throw Error(`话题已切换,请重新打开目标`);let i=await X(`/api/app/conversations/${r}/tasks/${e}/plan`,{method:`PATCH`,body:{requestId:He(),expectedRevision:t,acceptanceCriteria:n}});b.value?.id===r&&xe.value?.id===e&&(xe.value.goal=i.goal,await vr(r,!0))}function Or(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(),c.push(n.pathname+n.search)}catch{}}let kr=!1,Ar=ke.beginWorkspace(),jr=ke.status,Mr,Nr,Pr=[],Fr;function Ir(){Fr?.abort(),Fr=void 0,Sn&&clearTimeout(Sn),Sn=void 0}function Lr(e){Nt.value?.isFollowingBottom(),b.value=e.conversation,y.value=e.messages,xe.value=e.task??null,Ce.value=e.tasks??[],x.value=e.run,E.value=e.interactions,C.value=e.approvalSummaries??[],A.value=e.context,Te.value=e.assignments??[],ve.value=e.runtimeTasks??[],ht.value=e.hasOlder??!1}function Rr(){Nr=void 0;let e=new Set;try{for(let t of Pr){let n=t.seq>Rt.cursor;if(Rt.apply(t),t.type===`collaboration.changed`?e.add(`chain:${t.data.chainId}`):t.type===`run.changed`?e.add(`run:${t.data.id}`):t.type===`message.changed`&&t.data.runId&&e.add(`run:${t.data.runId}`),t.type===`message.changed`){let e=t.data;if(e.clientRequestId&&Bt.value.some(t=>t.requestId===e.clientRequestId&&t.conversationId===e.conversationId&&(t.taskId??``)===(e.conversationTaskId??``)))try{Ht(Bt.value.filter(t=>t.requestId!==e.clientRequestId))}catch{}}if(t.type===`server.identity.changed`&&be(t.data),n&&Mt?.(t),String(t.type)===`background-task.changed`){let e=t.data;N.value=_t(N.value,[e])}if((String(t.type).startsWith(`bot.control.`)||String(t.type).startsWith(`bot.permission.`))&&fr(),t.type===`project.changed`){let e=t.data;We.value=[...We.value.filter(t=>t.id!==e.id),e]}(/^(memory|project|collaboration)\./.test(t.type)||t.type===`message.changed`&&t.data.activity)&&Ve.value++}}catch{Pr=[],Mr?.close(),Ur();return}if(Pr=[],bn=Rt.cursor,e.size&&(v$.value={keys:e,seq:bn}),g.value=Rt.agents,v.value=Rt.conversations,R.value=Rt.sections,wn.value){let e=Rt.get(wn.value,Tn.value||xe.value?.id);e?Lr(e):v.value.some(e=>e.id===wn.value)?xe.value&&!Rt.details.has(X2(wn.value,xe.value.id))&&(c.replace(`/conversations/${wn.value}`),vr(wn.value,!0)):c.replace(`/conversations`)}Mt&&At.value++}async function zr(e){let n=t.user?.id,r=ei,i=await X(`/api/app/capabilities`,{signal:e});if(e.aborted||xn||ei!==r||t.user?.id!==n)return;kr=i.features.includes(ay),Ue.value=i.features.includes(`bot-file-memory-v1`),j.value=i.features,i.csrfToken&&ye(i.csrfToken);let a=Rt.beginRead();try{let i=new URLSearchParams({details:`selected`,toolDetails:`lazy`});wn.value&&i.set(`conversationId`,wn.value),Tn.value&&i.set(`taskId`,Tn.value);let a=await X(`/api/app/workspace/snapshot?${i}`,{signal:e});if(e.aborted||xn||ei!==r||t.user?.id!==n||(Rt.hydrate(a),g.value=a.agents,v.value=Rt.conversations,R.value=Rt.sections,bn=a.cursor,We.value=a.projects??[],be(a.serverIdentity),await fr(),e.aborted||xn||ei!==r||t.user?.id!==n))return;await gr()}finally{Rt.cancelRead(a)}}function Br(){if(Mr?.close(),xn)return;if(!navigator.onLine){Vr();return}Ar.update(`syncing`);let e=he(`/api/app/events/stream?after=${bn}&toolDetails=lazy${kr?`&format=patch-v1`:``}`,()=>Rt.cursor);Mr=e,e.addEventListener(`workspace`,t=>{if(!(xn||Mr!==e))try{Pr.push(JSON.parse(t.data)),Nr===void 0&&(Nr=requestAnimationFrame(Rr))}catch{e.close(),ut.value=`消息同步失败,正在恢复`,Ur()}}),e.addEventListener(`ready`,t=>{if(Mr===e)try{let n=JSON.parse(t.data);if(Rr(),xn||Mr!==e)return;be(n.serverIdentity),ut.value=``,Ar.update(`online`)}catch{e.close(),Ur()}}),e.addEventListener(`reset`,()=>{!xn&&Mr===e&&(e.close(),Ur())}),e.onerror=()=>{xn||Mr!==e||(Ar.update(`reconnecting`),ut.value=`连接中断,正在重连`,X(`/api/app/capabilities`).catch(t=>{xn||Mr!==e||t instanceof se&&[401,403].includes(t.status)&&(e.close(),Ar.update(`expired`),ut.value=t.message)}))}}function Vr(){Ir(),Mr?.close(),Mr=void 0,Ar.update(`offline`),ut.value=`网络已断开,恢复连接后将自动同步`}function Hr(){!xn&&t.user?.id&&Ur()}async function Ur(e=!1){if(Ir(),xn||!t.user?.id)return;if(!navigator.onLine){Vr();return}Ar.update(`syncing`);let n=new AbortController,r=t.user.id,i=ei;Fr=n;let a=()=>!xn&&!n.signal.aborted&&Fr===n&&ei===i&&t.user?.id===r;Mr?.close(),Mr=void 0,Pr=[],Nr!==void 0&&cancelAnimationFrame(Nr),Nr=void 0;try{if(await zr(n.signal),!a())return;let t=!e&&wn.value?Rt.get(wn.value,Tn.value||xe.value?.id):void 0;t?(Lr(t),Rt.staleDetails.has(X2(t.conversation.id,t.task?.id))&&await vr(t.conversation.id,!0,n.signal)):await vr(wn.value,!1,n.signal),a()&&Br()}catch(e){if(!a())return;if(!navigator.onLine){Vr();return}if(ut.value=e instanceof Error?e.message:`连接中断`,e instanceof se&&[401,403].includes(e.status)){Ar.update(`expired`);return}Ar.update(`reconnecting`),Sn=setTimeout(()=>void Ur(),1500)}finally{Fr===n&&(Fr=void 0)}}async function Wr(e){let t=v.value.find(t=>t.id===e),n;if($t.value===`editAgent`&&(t?.kind===`direct`?t.memberIds[0]:void 0)!==en.value){if(!Jn())return;let e=an.value;Yr(),t?.kind===`direct`&&(n=e)}ut.value=``,pt.value=[],mt.value=[],lt.value=``,Ft.value=null,It.value=null,await c.push(`/conversations/${e}`),n!==void 0&&t?.kind===`direct`&&await Kr(`editAgent`,t,n)}function Gr(e,t=!1){let n=v.value.find(t=>t.id===e);if(n?.kind===`direct`&&q.value&&(t||window.matchMedia?.(`(max-width: 900px)`).matches)){Jn()&&(Yr(),En.value?.openSettings(`my-bots`,void 0,n.memberIds[0]));return}n&&Kr(n.kind===`direct`?`editAgent`:`editGroup`,n)}async function Kr(e,t=b.value,n=!1){if(e===`editAgent`&&$t.value===`editAgent`&&en.value===t?.memberIds[0]){rn.value?.focus?.();return}if(!Jn())return;let r=++un,i=ei,a=()=>r===un&&i===ei&&!xn;e===`editAgent`&&(De.value=void 0,jn.value=void 0,an.value=n),ut.value=``,$t.value=e,ze.value=!1,en.value=``,tn.value=e===`editAgent`||e===`editGroup`?t?.id??``:``,mn.value=`custom`,Object.assign($,{name:``,avatar:e===`agent`?ct(Pe(`new-agent`,`机器人`)):``,job:``,antiJobs:[],voice:``,voiceCustom:``,actBias:``,instructions:``,description:``,execution:`profile`,canManageTeam:!0,canCollaborate:!0,memoryEnabled:!0,approvalPolicy:`ask`,memberIds:[],memberRoles:{},administratorId:``,mode:Ue.value?`discussion`:`host`,autoReplyIds:[],maxReplyRounds:3});try{if(e===`editAgent`){let e=g.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 X(`/api/app/nodes/${e.nodeId}/agents`)).agents.find(t=>t.id===e.remoteAgentId);if(!a())return;t&&Object.assign($,t)}$.approvalPolicy=e.approvalPolicy??`ask`,en.value=e.id}e===`editGroup`&&t&&(en.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()&&nn.value?.showModal()}catch(e){if(!a())return;ut.value=String(e),$t.value=null}}let qr=O(!1),Jr=O(!1);function Yr(){$t.value===`editGroup`&&(Jr.value||qr.value&&!window.confirm(`权限更改尚未保存,确定放弃?`))||(qr.value=!1,un++,en.value=``,nn.value?.close(),$t.value=null,tn.value=``)}function Xr(e){Object.assign($,e),$.description??=``,$.job??=``,$.antiJobs??=[],$.voice??=``,$.voiceCustom??=``,$.actBias??=``,Zr.value=e.modelSettings&&e.expectedRevision?{modelSettings:e.modelSettings,expectedRevision:e.expectedRevision}:void 0,$r()}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 Zr=O();async function Qr(e){if(dt.value||$t.value!==`agent`)return;let t=un,n=ei,r=()=>t===un&&n===ei&&!xn;dt.value=!0,ut.value=``;let i={...e,computer:`auto`,envs:{vm:!0,cloud:!0,desktop:!0},execution:`profile`};try{let e=await X(`/api/app/agents`,{method:`POST`,body:dr(i)});if(!r())return;if(e.confirmationRequired){if(!e.confirmationTarget)throw Error(`模型确认信息不完整,请重新选择模型。`);if(!window.confirm(e.confirmationMessage||`确认使用所选模型创建 Bot?`)||(e=await X(`/api/app/agents`,{method:`POST`,body:dr({...i,confirmedModel:e.confirmationTarget})}),!r()))return}if(!e.agent)throw Error(`创建尚未确认,请刷新 Bot 列表后检查。`);let t=e.agent.id;if(Yr(),await Promise.all([_r(),fr()]),n!==ei||xn)return;let a=v.value.find(e=>e.kind===`direct`&&e.memberIds[0]===t);a&&await Wr(a.id)}catch(e){n===ei&&!xn&&(ut.value=e instanceof Error?e.message:`创建失败`)}finally{n===ei&&!xn&&(dt.value=!1)}}async function $r(){let e=$t.value,t=un,n=ei,r=Zr.value;Zr.value=void 0;let i,a=()=>t===un&&n===ei&&!xn;dt.value=!0,ut.value=``;try{let t={name:$.name,...ur.value?{avatar:$.avatar,description:$.description.trim(),canManageTeam:$.canManageTeam,approvalPolicy:$.approvalPolicy,...Ue.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(pn.value)await X(`/api/app/agents/${en.value}`,{method:`PATCH`,body:{approvalPolicy:$.approvalPolicy}});else if($t.value===`agent`){let e=await X(`/api/app/agents`,{method:`POST`,body:{...t,...s,computer:`auto`,envs:{vm:!0,cloud:!0,desktop:!0},execution:`profile`}});await _r();let n=v.value.find(t=>t.kind===`direct`&&t.memberIds[0]===e.agent.id);n&&await Wr(n.id)}else if($t.value===`editAgent`){let e={...t,...o,...r},n=await X(`/api/app/agents/${en.value}`,{method:`PATCH`,body:dr(e)});if(!a())return;if(n.confirmationRequired){if(!window.confirm(n.confirmationMessage||`确认使用此模型?`))return;if(!n.confirmationTarget)throw Error(`模型确认响应无效,请重新加载。`);n=await X(`/api/app/agents/${en.value}`,{method:`PATCH`,body:dr({...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,...Ue.value?{collaborationMode:$.mode}:{},autoReplyIds:$.autoReplyIds,maxReplyRounds:$.maxReplyRounds,...$t.value===`editGroup`?{expectedRevision:dn.value?.revision??0}:{},memberIds:$.memberIds,memberRoles:$.memberRoles};await Wr((await X($t.value===`group`?`/api/app/conversations`:`/api/app/conversations/${en.value}`,{method:$t.value===`group`?`POST`:`PATCH`,body:dr(e)})).conversation.id)}if(!a())return;e===`editAgent`?rn.value?.markSaved?.(i):Yr(),await _r(),q.value&&await fr(),n===ei&&!xn&&await vr()}catch(e){a()&&(ut.value=e instanceof Error?e.message:`保存失败`)}finally{n===ei&&(dt.value=!1)}}let ei=0,ti=new Map;function ni(e,n,r,i){clearTimeout(ti.get(n)),ti.set(n,setTimeout(()=>{ti.delete(n),!(xn||t.user?.id!==i||rt.value!==n)&&(e.cursor!==void 0&&Rt.cursor>=e.cursor&&Mr?.readyState===EventSource.OPEN||vr(r,!0).catch(()=>{ut.value=`消息已发送,正在恢复同步`}))},e.cursor===void 0?0:2e3))}async function ri(){let e=b.value;if(!e||dt.value||!lt.value.trim()&&!pt.value.length)return;dt.value=!0,ut.value=``;let n=xe.value?.id,r=t.user?.id,i=ei,a=rt.value,o=Ee.value&&!xe.value?.goal?`goal`:void 0;try{let{deviceHost:s,warning:c}=await Jv(lt.value);if(xn||b.value!==e||t.user?.id!==r||ei!==i||rt.value!==a)return;c&&(ut.value=c);let l=He(),u={requestId:l,conversationId:e.id,taskId:n,content:lt.value,attachments:pt.value,createdAt:Date.now(),afterSeq:Math.max(0,...y.value.map(e=>e.seq)),state:`queued`,body:{requestId:l,...o?{mode:o}:{},...Ue.value?{...e.kind===`direct`&&Ge.value?{projectId:Ge.value}:{},...Ke.value&&e.collaborationMode===`discussion`?{rounds:Ke.value}:{},...Ee.value&&e.collaborationMode===`discussion`?{coordinatorId:Xe.value||Qe.value?.id}:{}}:{},...xe.value?{taskId:xe.value.id}:{},content:lt.value,mentionIds:mt.value,fileIds:pt.value.map(e=>e.id),...s?{deviceHost:s}:{}}};return Ht([...Bt.value,u]),lt.value=``,pt.value=[],mt.value=[],Ee.value=!1,ii(u),!0}catch(e){!xn&&t.user?.id===r&&ei===i&&rt.value===a&&(ut.value=e instanceof Error?e.message:`发送失败`)}finally{dt.value=!1}}async function ii(e,n){if(Vt.has(e.requestId))return;let r=t.user?.id,i=ei;Vt.add(e.requestId);try{Ht(Bt.value.map(t=>t.requestId===e.requestId?{...t,state:`sending`,error:void 0}:t));let a=await X(`/api/app/conversations/${e.conversationId}/messages`,{method:`POST`,body:e.body,...n?{signal:n}:{}});if(xn||ei!==i||t.user?.id!==r)return;Rr(),Rt.acceptReceipt(a),v.value=Rt.conversations;let o=Rt.get(e.conversationId,e.taskId);return o&&b.value?.id===e.conversationId&&(xe.value?.id??``)===(e.taskId??``)&&(Lr(o),ni(a,rt.value,e.conversationId,r)),Ht(Bt.value.filter(t=>t.requestId!==e.requestId)),a}catch(n){if(!xn&&ei===i&&t.user?.id===r){if(!Bt.value.some(t=>t.requestId===e.requestId))return;let t=n instanceof Error?n.message:`发送结果尚未确认`,r=n instanceof se&&n.status>=400&&n.status<500&&n.status!==408,i=Bt.value.map(n=>n.requestId===e.requestId?{...n,state:r?`failed`:`uncertain`,error:t}:n);try{Ht(i)}catch{Bt.value=i}ut.value=t}}finally{Vt.delete(e.requestId)}}function ai(e){let t=Bt.value.find(t=>t.requestId===e);t&&ii(t)}async function oi(e,n){let r=b.value,i=t.user?.id,a=ei,o=rt.value,s=xe.value?.id;if(!r||r.archived||dt.value||ft.value||n.aborted)throw Error(`当前会话暂时无法发送语音,请稍后重试。`);let c=()=>!xn&&!n.aborted&&t.user?.id===i&&ei===a&&rt.value===o&&wn.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)};Mt=u,dt.value=!0;let d=!0;try{let{deviceHost:a,warning:u}=await Jv(e);if(!c())throw K4();u&&(ut.value=u);let p=He(),m={requestId:p,conversationId:r.id,taskId:s,content:e,attachments:[],createdAt:Date.now(),afterSeq:Math.max(0,...y.value.map(e=>e.seq)),state:`queued`,body:{requestId:p,content:e,mentionIds:[],fileIds:[],...s?{taskId:s}:{},...a?{deviceHost:a}:{},...Ue.value&&r.kind===`direct`&&Ge.value?{projectId:Ge.value}:{},...Ue.value&&Ke.value&&r.collaborationMode===`discussion`?{rounds:Ke.value}:{}}};Ht([...Bt.value,m]);let h=await ii(m,n);if(!c())throw K4();if(!h?.run?.id)throw Error(`发送结果尚未确认,请在聊天中查看。语音不会重复发送。`);let g=h.run.steeredInto??h.run.id;Rr(),l.has(h.run.id)||l.set(h.run.id,h.run),Rt.acceptReceipt(h),v.value=Rt.conversations;let _=Rt.get(r.id,s);return _&&Lr(_),ni(h,o,r.id,i),dt.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(K4()),m=()=>{if(!c())return p();if(jr.value!==`online`)return d(Error(`连接中断,本次语音等待已结束,请在聊天中查看消息状态。`));let e=Rt.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=o3(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([At,y,x,rt,wn,()=>t.user?.id,jr],m),u=setTimeout(()=>d(Error(`本轮仍未收到完整回复,本次语音等待已结束。可在聊天中继续查看进展。`)),6e5),m()})}finally{Mt===u&&(Mt=void 0),d&&ei===a&&(dt.value=!1)}}async function si(e,t=b.value?.id){let n=v.value.find(e=>e.id===t);if(n){if(e===`archive`)return _i(n.archived?`restore`:`archive`,n.id);try{await X(`/api/app/conversations/${n.id}`,{method:`PATCH`,body:{pinned:!n.pinned}}),await _r(),await vr()}catch(e){ut.value=String(e)}}}function ci(e){Rt.acceptSectionReceipt(e),R.value=Rt.sections,v.value=Rt.conversations}async function li(e,t){let n=e instanceof Error?e.message:`操作失败,请重试`;t&&B.value===t&&!(e instanceof se&&e.status===404)?H.value={id:t,message:n}:ut.value=n,e instanceof se&&e.status===404&&(B.value===t&&fi(),await _r().catch(()=>{}))}async function ui(e){try{let t=await X(`/api/app/conversation-sections`,{method:`POST`,body:{requestId:He(),name:TI(R.value),...e?{conversationId:e}:{}}});ci(t),t.section&&(H.value=void 0,B.value=t.section.id)}catch(e){await li(e)}}function di(e){H.value=void 0,B.value=e}function fi(){B.value=``,H.value=void 0}async function pi(e,t){if(wI(t,R.value,e)){H.value={id:e,message:`已有同名分组`};return}try{ci(await X(`/api/app/conversation-sections/${e}`,{method:`PATCH`,body:{name:t}})),fi()}catch(t){await li(t,e)}}async function mi(e,t){try{ci(await X(`/api/app/conversation-sections/${e}`,{method:`PATCH`,body:{position:t}}))}catch(e){await li(e)}}async function hi(e){try{ci({cursor:(await X(`/api/app/conversation-sections/${e}`,{method:`DELETE`})).cursor,deletedSectionId:e})}catch(e){await li(e)}}async function gi(e,t){try{ci(await X(`/api/app/conversations/${e}/section`,{method:`PUT`,body:{sectionId:t}}))}catch(e){await li(e)}}async function _i(e,t,n=!1){let r=v.value.find(e=>e.id===t);if(!r||wt.value)return;let i=n?Tt:Et;i.value=``,wt.value=t,Dt.value=e;try{let n=`/api/app/conversations/${t}/lifecycle`,i;if(e!==`restore`){let t=await X(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 和`:``}文件库中的文件会保留。`:`
|
|
280
|
-
聊天记录会保留,可在搜索的“已归档”中取消归档。`,!confirm(o))return;i=t.confirmationToken}await X(n,{method:`POST`,body:{action:e,...i?{confirmationToken:i}:{}}}),e===`delete`&&(v.value=v.value.filter(e=>e.id!==t),r.kind===`direct`&&(g.value=g.value.filter(e=>e.id!==r.memberIds[0])),wn.value===t&&await c.replace(`/conversations`)),await _r(),wn.value===t&&await vr()}catch(e){i.value=e instanceof Error?e.message:`操作失败,请重试`}finally{wt.value=``,Dt.value=void 0}}async function vi(e){if(dn.value)try{await X(`/api/app/conversations/${dn.value.id}/agents/${e}/stop`,{method:`POST`,body:{}}),await vr(),await _r()}catch(e){ut.value=e instanceof Error?e.message:`停止失败`}}async function yi(e){let t=de.value?.id??(b.value?.activeRunId&&!ue.value.has(b.value.activeRunId)?b.value.activeRunId:void 0)??xe.value?.activeRunId;if(t)try{await X(`/api/app/runs/${t}/${e}`,{method:`POST`,body:{}}),await vr(void 0,!0)}catch(e){ut.value=String(e)}}async function bi(e,t){if(!yt.value){yt.value=e.id,bt.value=``;try{let n=Kv(e.kind,t);await X(`/api/app/interactions/${encodeURIComponent(e.id)}/${n.action}`,{method:`POST`,body:n.body}),await vr(void 0,!0)}catch(n){if(bt.value=n instanceof Error?n.message:`审批答复失败,请重试`,e.kind===`approval`&&t===`full_access`)try{await vr(void 0,!0)}catch{}}finally{yt.value=``}}}async function xi(){let e=b.value;if(!e||Wt.value)return;Wt.value=!0;let t=Rt.beginRead(),n=xe.value?.id,r=Cn;try{let i=await X(`/api/app/conversations/${e.id}/messages?limit=50&toolDetails=lazy&before=${y.value[0]?.seq??0}${xe.value?`&taskId=${xe.value.id}`:``}`);if(r!==Cn||b.value?.id!==e.id||xe.value?.id!==n)return;let a=Rt.get(e.id,n);if(!a)return;let o=Rt.finishRead(t,{...a,messages:i.messages,cursor:i.cursor});o.hasOlder=i.messages.length===50,y.value=o.messages,ht.value=o.hasOlder}catch(e){ut.value=String(e)}finally{Rt.cancelRead(t),Wt.value=!1}}return f(()=>a.query.view,()=>{gr()}),f([wn,Tn],()=>{et.set(rt.value,Ot.value?.filesSnapshot()??[]),nt.set(rt.value,Pt.value),pt.value=[],mt.value=[],lt.value=``,Xt=[],Zt=[],vr(),gr()}),f(()=>t.user?.id,(e,t)=>{e!==t&&(Be.value?.close(),Ue.value=!1,We.value=[],Ve.value++,ei++,_e++,j.value=[],M.value=void 0,N.value=[],P.value=``,dt.value=!1,Yr(),Cn++,Ir(),lt.value=``,pt.value=[],mt.value=[],Pt.value=null,Xt=[],Zt=[],Mr?.close(),Mr=void 0,Pr=[],Nr!==void 0&&cancelAnimationFrame(Nr),Nr=void 0,bn=0,Rt.hydrate({agents:[],conversations:[],details:[],cursor:0}),Rt.selectedTasks.clear(),g.value=[],v.value=[],R.value=[],B.value=``,y.value=[],b.value=void 0,Ce.value=[],xe.value=null,x.value=null,E.value=[],A.value=null,et.clear(),nt.clear(),e?(Ar=ke.beginWorkspace(),Ur()):Ar.close())}),m(async()=>{window.addEventListener(`offline`,Vr),window.addEventListener(`online`,Hr),await Ur(!0),ge=setInterval(()=>{document.visibilityState===`visible`&&navigator.onLine&&(q.value||J.value)&&fr()},1e4)}),i(()=>{qe.value=null,window.removeEventListener(`offline`,Vr),window.removeEventListener(`online`,Hr);for(let e of ti.values())clearTimeout(e);ti.clear(),xn=!0,Ar.close(),_e++,ge&&clearInterval(ge),Mr?.close(),Nr!==void 0&&cancelAnimationFrame(Nr),Cn++,Ir()}),(e,n)=>(u(),k(XF,{"remote-host":!!V(ot).selectedHostId,onSwitchHost:n[68]||=async()=>{V(t).switchHost(),await V(c).replace(`/conversations`)},ref_key:`shell`,ref:En,"server-name":V(t).serverIdentity?.displayName,"user-name":V(t).accountDisplayName,"user-avatar":V(t).user?.avatar,"is-admin":V(t).user?.role===`admin`,features:j.value,"upstream-ready":V(t).upstreamReady,"upstream-error":V(t).upstreamError,connection:V(jr),theme:V(r).resolvedTheme,"theme-preference":V(r).theme,"sidebar-title":`聊天`,"sidebar-context-title":`聊天列表`,onLogout:V(t).logout,onToggleTheme:V(r).toggle,onSetTheme:V(r).setTheme,onCreateAgent:n[69]||=e=>Kr(`agent`),onCreateGroup:n[70]||=e=>Kr(`group`),onCreateSection:n[71]||=e=>ui(),onBotSettingsChanged:at},{sidebar:S(()=>[W(eH,{conversations:v.value,agents:g.value,selected:wn.value,"main-bot-id":ne.value,"bot-control":q.value,"directory-selected":re.value,"is-admin":V(t).user?.role===`admin`,"background-count":J.value?le.value.active:void 0,onMainBot:sn,onDirectory:mr,onSelect:Wr,onSettings:Gr,onPin:n[0]||=e=>si(`pin`,e),onArchive:n[1]||=e=>si(`archive`,e),onDelete:n[2]||=e=>_i(`delete`,e),sections:R.value,"sections-enabled":G.value,"collapsed-sections":te.value,"editing-section-id":B.value,"section-error":H.value,onToggleSection:V(ee),onCreateSection:ui,onStartRename:di,onRenameSection:pi,onCancelRename:fi,onMoveSection:mi,onDeleteSection:hi,onAssignSection:gi},null,8,[`conversations`,`agents`,`selected`,`main-bot-id`,`bot-control`,`directory-selected`,`is-admin`,`background-count`,`sections`,`sections-enabled`,`collapsed-sections`,`editing-section-id`,`section-error`,`onToggleSection`])]),"mobile-sidebar":S(()=>[W(eH,{conversations:v.value,agents:g.value,selected:wn.value,"main-bot-id":ne.value,"bot-control":q.value,"directory-selected":re.value,"is-admin":V(t).user?.role===`admin`,"background-count":J.value?le.value.active:void 0,onMainBot:sn,onDirectory:mr,onSelect:Wr,onSettings:n[3]||=e=>Gr(e,!0),onPin:n[4]||=e=>si(`pin`,e),onArchive:n[5]||=e=>si(`archive`,e),onDelete:n[6]||=e=>_i(`delete`,e),sections:R.value,"sections-enabled":G.value,"collapsed-sections":te.value,"editing-section-id":B.value,"section-error":H.value,onToggleSection:V(ee),onCreateSection:ui,onStartRename:di,onRenameSection:pi,onCancelRename:fi,onMoveSection:mi,onDeleteSection:hi,onAssignSection:gi},null,8,[`conversations`,`agents`,`selected`,`main-bot-id`,`bot-control`,`directory-selected`,`is-admin`,`background-count`,`sections`,`sections-enabled`,`collapsed-sections`,`editing-section-id`,`section-error`,`onToggleSection`])]),default:S(()=>[re.value?(u(),F(`div`,w3,[P.value?(u(),F(`p`,T3,h(P.value),1)):z(``,!0),W(uH,{"is-admin":V(t).user?.role===`admin`,agents:g.value,"main-bot-id":ne.value,onProfile:cn,onBack:n[7]||=e=>V(c).push(`/conversations?view=chats`),onSelect:n[8]||=e=>hr(e),onEdit:n[9]||=e=>hr(e,!0),onCreate:n[10]||=e=>Kr(`agent`),onManage:n[11]||=e=>En.value?.openSettings(`my-bots`)},null,8,[`is-admin`,`agents`,`main-bot-id`])])):z(``,!0),d(D(`div`,{ref_key:`dockRowEl`,ref:Ln,class:`conversation-with-computer`,style:s({"--workspace-dock-width":`${zn.value}px`})},[D(`section`,{class:l([`workspace-chat`,{"workspace-chat--main":ie.value&&J.value}]),"aria-label":`聊天`,onClickCapture:Or},[W(Y2,{onProfile:n[15]||=e=>b.value&&Kr(b.value.kind===`direct`?`editAgent`:`editGroup`,b.value,!0),"current-goal-id":xe.value?.goal?.id,"activity-agents":g.value,onTaskDetails:n[16]||=e=>Le(),onRuntimeDetails:n[17]||=e=>Le(e),onOpenTask:Fe,onOpenChat:Ie,"conversation-id":wn.value,onVisibleMessages:Cr,ref_key:`timeline`,ref:Nt,identity:`${wn.value}:${xe.value?.id??``}`,"loading-older":Wt.value,messages:Ut.value,title:nr.value,subtitle:V(MV)(b.value,{memberCount:er.value.length,main:ie.value,managed:!!M.value?.enabled,thinking:pe.value,background:J.value,accountActive:le.value.active,connection:V(jr)}),"header-main-bot":ie.value,"header-avatar-name":rr.value,"header-avatar":ir.value,"header-avatar-kind":b.value?.kind===`group`?`team`:`agent`,"header-avatar-members":ar.value,"header-avatar-state":ie.value?pe.value?`working`:`idle`:tr.value?V(AV)(b.value,tr.value.id):`idle`,"header-avatar-activity-key":b.value?.lastSeq,"frosted-header":``,loading:ft.value,"has-older":ht.value&&!!b.value,"show-tools":Lt.value,"allow-branch":!1,thinking:pe.value||!!sr.value,"thinking-label":cr.value,"thinking-identity":lr.value,"agent-avatars":Object.fromEntries(g.value.map(e=>[e.id,e.avatar])),"show-assistant-identity":b.value?.kind===`group`,"agent-states":Object.fromEntries(er.value.map(e=>[e.id,V(AV)(b.value,e.id)])),"mention-names":er.value.map(e=>e.name),"empty-logo":!!b.value,"empty-title":b.value?`聊点什么`:`还没有聊天`,"empty-description":b.value?``:`创建机器人,或选择成员新建群聊。`,interaction:E.value[0]?{id:E.value[0].id,kind:E.value[0].kind,prompt:E.value[0].message,options:E.value[0].choices,reviewAvailable:E.value[0].reviewAvailable,approvalReview:E.value[0].approvalReview}:null,"interaction-busy":!!yt.value,"interaction-error":bt.value,"approval-agent-name":g.value.find(e=>e.id===E.value[0]?.agentId)?.name,"can-manage-permissions":V(t).user?.role===`admin`,onLoadOlder:xi,onQuote:n[18]||=e=>Pt.value=e,onPreview:Yt,onPreviewFile:Yt,onRetrySend:ai,onBrowserControl:Qn,onCredentialDraft:Zn,onApprovalChoice:n[19]||=e=>E.value[0]&&bi(E.value[0],e),onClarify:n[20]||=e=>E.value[0]&&bi(E.value[0],e)},{"header-leading":S(()=>[b.value?(u(),F(`button`,{key:0,class:`workspace-list-back icon-button`,"aria-label":`返回 Bot 列表`,onClick:n[12]||=e=>V(c).push(q.value?`/conversations?view=chats`:`/conversations`)},[W(Y,{name:`chevron-left`})])):z(``,!0)]),"header-actions":S(()=>[b.value?(u(),F(`div`,E3,[b.value.kind===`group`&&Ce.value.length?(u(),F(`span`,D3,[D(`select`,{class:`task-picker`,"aria-label":`当前话题`,"aria-busy":qn.value,disabled:qn.value,value:xe.value?.id,onChange:wr},[(u(!0),F(T,null,p(Ce.value,e=>(u(),F(`option`,{key:e.id,value:e.id},h(!e.messageCount&&e.titleSource===`automatic`?`新话题`:e.title),9,k3))),128)),D(`option`,{value:M6},`新建话题`)],40,O3),W(Y,{name:`chevron-down`,size:14})])):z(``,!0),b.value.kind===`group`?(u(),F(`button`,{key:1,class:`icon-button`,"aria-label":`群聊设置`,title:`群聊设置`,onClick:n[13]||=e=>Kr(`editGroup`)},[W(Y,{name:`settings`})])):z(``,!0),D(`button`,{type:`button`,class:`icon-button`,"aria-label":`Inspector`,title:`Inspector`,"aria-pressed":jn.value===`inspector`,onClick:n[14]||=e=>Yn(`inspector`)},[W(Y,{name:`bug`})],8,A3)])):z(``,!0)]),_:1},8,`current-goal-id.activity-agents.conversation-id.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(`.`)),ut.value?(u(),F(`p`,j3,[w(h(ut.value),1),D(`button`,{class:`icon-button`,onClick:n[21]||=e=>ut.value=``,"aria-label":`关闭错误`},[W(Y,{name:`close`})])])):z(``,!0),b.value?(u(),k(W4,{key:rt.value,ref_key:`composer`,ref:Ot,mode:`group`,"bot-layout":``,"draft-key":rt.value,"voice-bot-id":tr.value?.id,"voice-active":kt.value,"delivery-mode":Ee.value,"onUpdate:deliveryMode":n[30]||=e=>Ee.value=e,"delivery-available":b.value.kind===`group`&&!xe.value?.goal,"delivery-disabled":!$e.value||dt.value||ft.value||!!xe.value?.activeRunId,"delivery-disabled-reason":$e.value?``:`负责人需要是本机上未归档的 Bot`,disabled:b.value.archived||ft.value||b.value.id!==wn.value,sending:dt.value,"stop-while-running":``,streaming:me.value,"tool-trace-visible":Lt.value,reference:qt.value,"mention-options":b.value.kind===`group`?er.value.map(e=>({id:e.id,label:e.name,insertText:`@${e.name} `})):[],onSend:Qt,onStop:n[31]||=e=>yi(`stop`),onToolTraceToggle:n[32]||=e=>Lt.value=!Lt.value,onClearReference:n[33]||=e=>Pt.value=null,onError:n[34]||=e=>ut.value=e},{activity:S(()=>[de.value?.status===`queued`?(u(),F(`p`,M3,`正在等待可用机器人`)):b.value.collaborationWaiting?(u(),F(`p`,N3,[D(`button`,{onClick:n[22]||=e=>Be.value?.open(`collaboration`,b.value.memberIds[0])},`等待同伴回复 · 查看协作`)])):z(``,!0)]),"model-controls":S(({contextTarget:e,optionsTarget:r})=>[tr.value?(u(),k(nZ,{compact:``,"options-target":r,"context-target":e,key:`${V(t).user?.id}:${tr.value.id}`,agent:tr.value,context:A.value,running:pe.value,disabled:b.value.archived||ft.value||dt.value,onSaved:n[23]||=e=>{g.value=g.value.map(t=>t.id===e.id?e:t)}},null,8,[`options-target`,`context-target`,`agent`,`context`,`running`,`disabled`])):(u(),k(XY,{key:1,compact:``,snapshot:A.value},null,8,[`snapshot`]))]),"realtime-voice":S(({disabled:e})=>[W(a3,{disabled:e,"draft-key":rt.value,"bot-id":tr.value?.id,submit:oi,onActiveChange:n[24]||=e=>kt.value=e,onError:n[25]||=e=>ut.value=e,onSettings:n[26]||=e=>En.value?.openSettings(`system-voice`)},null,8,[`disabled`,`draft-key`,`bot-id`])]),"before-input":S(()=>[b.value?.kind===`group`&&C.value.length?(u(),F(`aside`,P3,[(u(!0),F(T,null,p(C.value,e=>(u(),F(`button`,{key:e.id,type:`button`,onClick:t=>Wr(e.displayConversationId)},`等待你处理 · 前往执行 Bot 单聊`,8,F3))),128))])):z(``,!0),Ue.value?(u(),F(`div`,I3,[b.value.kind===`direct`&&We.value.some(e=>e.memberIds.includes(b.value.memberIds[0]))?(u(),F(`label`,L3,[n[73]||=w(`当前项目`,-1),d(D(`select`,{"onUpdate:modelValue":n[27]||=e=>Ge.value=e},[n[72]||=D(`option`,{value:``},`不关联项目`,-1),(u(!0),F(T,null,p(We.value.filter(e=>!e.archived&&e.memberIds.includes(b.value.memberIds[0])),e=>(u(),F(`option`,{key:e.id,value:e.id},h(e.name),9,R3))),128))],512),[[Ne,Ge.value]])])):z(``,!0),b.value.collaborationMode===`discussion`&&!Ee.value?(u(),F(`label`,z3,[n[75]||=w(`讨论轮数`,-1),d(D(`select`,{"onUpdate:modelValue":n[28]||=e=>Ke.value=e},[n[74]||=D(`option`,{value:void 0},`按消息要求`,-1),(u(),F(T,null,p(12,e=>D(`option`,{key:e,value:e},h(e)+` 轮`,9,B3)),64))],512),[[Ne,Ke.value]])])):z(``,!0),Ee.value&&b.value.collaborationMode===`discussion`?(u(),F(`label`,V3,[n[76]||=w(`交付负责人`,-1),d(D(`select`,{"onUpdate:modelValue":n[29]||=e=>Xe.value=e},[D(`option`,H3,h(Qe.value?.name??`请先授权负责人`),1),(u(!0),F(T,null,p(Ze.value,e=>(u(),F(`option`,{key:e.id,value:e.id},h(e.name),9,U3))),128))],512),[[Ne,Xe.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),Vn.value?(u(),F(T,{key:0},[W(eF,{class:`desktop-only-dock-resize`,label:`调整右侧栏宽度`,onDrag:Wn,onReset:Gn}),D(`aside`,{class:`conversation-dock`,style:s(Bn.value)},[De.value?(u(),k(CQ,{key:`${xe.value?.id}:${De.value}`,goal:xe.value?.goal,assignments:Te.value,agents:g.value,"runtime-tasks":je.value,artifacts:Ut.value.find(e=>e.goalCard)?.goalCard?.artifacts,"runtime-only":De.value===`runtime`,"save-criteria":Dr,onClose:pr,onStop:Tr,onResume:Er},null,8,[`goal`,`assignments`,`agents`,`runtime-tasks`,`artifacts`,`runtime-only`])):jn.value===`inspector`&&b.value?(u(),k(hZ,{key:1,"conversation-id":b.value.id,"task-id":xe.value?.id,onClose:n[35]||=e=>jn.value=void 0},null,8,[`conversation-id`,`task-id`])):$t.value===`editAgent`&&fn.value?(u(),k(TY,{active:!Mn.value,onWorkspace:n[36]||=e=>{Nn.value=e,Mn.value=!0},"main-bot-id":ne.value,onConfigure:n[37]||=e=>{Jn()&&(Yr(),En.value?.openSettings(`my-bots`,void 0,e))},"initial-edit":!an.value,connection:V(jr),onDesktop:n[38]||=(e,t,n)=>Xn(e,t,n,!1),onSettings:n[39]||=e=>En.value?.openLocalVm(),onOpenConversation:n[40]||=(e,t)=>{Jn()&&(Yr(),V(c).push({path:`/conversations/`+e,query:t?{taskId:t}:{}}))},ref_key:`botProfile`,ref:rn,key:fn.value.id,"permission-control":q.value,onManagePermissions:n[41]||=e=>En.value?.openSettings(`my-bots`),agent:fn.value,draft:$,agents:g.value,conversations:v.value,"conversation-id":tn.value,"is-admin":V(t).user?.role===`admin`,"knowledge-enabled":Ue.value,busy:dt.value,error:ut.value,onClose:Yr,onSave:Xr,onChanged:it,onManageModels:n[42]||=e=>En.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),on.value?(u(),k(zp,{key:1,"target-bot-id":on.value,onClose:n[43]||=e=>on.value=``,onChanged:ln},null,8,[`target-bot-id`])):z(``,!0)],4),[[tt,!Mn.value&&!re.value]]),An.value&&Nn.value?(u(),k(gt,{key:1,ref_key:`desktopViewer`,ref:On,agents:[Nn.value],backend:Pn.value,host:Fn.value,"auto-take":kn.value,onChanged:n[44]||=e=>vr(),onClose:n[45]||=e=>An.value=!1},null,8,[`agents`,`backend`,`host`,`auto-take`])):z(``,!0),Mn.value&&Nn.value?(u(),k(CZ,{key:2,ref_key:`vmWorkspace`,ref:Dn,agents:g.value.filter(e=>e.execution===`computer`&&!e.archived&&!e.computerEnvironmentId),primary:Nn.value.id,onClose:n[46]||=e=>Mn.value=!1},null,8,[`agents`,`primary`])):z(``,!0),W(XQ,{section:`groups`,label:`搜索聊天`,items:St.value,tabbed:``,onOpen:n[47]||=e=>Tt.value=``,onSelect:Wr},{"item-actions":S(({item:e})=>[Ct.value.has(e.id)?(u(),F(`div`,W3,[D(`button`,{type:`button`,class:`search-restore`,"aria-label":`取消归档:${e.title}`,disabled:!!wt.value,onClick:t=>_i(`restore`,e.id,!0)},h(wt.value===e.id&&Dt.value===`restore`?`恢复中…`:`取消归档`),9,G3),D(`button`,{type:`button`,class:`search-delete`,"aria-label":`删除聊天:${e.title}`,disabled:!!wt.value,"aria-busy":wt.value===e.id&&Dt.value===`delete`,onClick:t=>_i(`delete`,e.id,!0)},[W(Y,{name:`trash`,size:15}),w(h(wt.value===e.id&&Dt.value===`delete`?`删除中…`:`删除`),1)],8,K3)])):z(``,!0)]),footer:S(()=>[Tt.value?(u(),F(`p`,q3,h(Tt.value),1)):z(``,!0)]),_:1},8,[`items`]),(u(),k(L,{to:`body`},[Et.value?(u(),F(`div`,J3,[D(`span`,null,h(Et.value),1),D(`button`,{type:`button`,"aria-label":`关闭聊天操作提示`,onClick:n[48]||=e=>Et.value=``},[W(Y,{name:`close`,size:16})])])):z(``,!0)])),Ft.value?(u(),k(fq,{key:3,item:Ft.value,items:Gt.value,onClose:n[49]||=e=>Ft.value=null},null,8,[`item`,`items`])):z(``,!0),W(_3,{modelValue:It.value,"onUpdate:modelValue":n[50]||=e=>It.value=e,images:Kt.value},null,8,[`modelValue`,`images`]),(u(),k(L,{to:`body`},[$t.value&&$t.value!==`editAgent`?(u(),F(`dialog`,{key:0,ref_key:`dialogElement`,ref:nn,class:`editor`,"aria-labelledby":`conversation-editor-title`,onCancel:n[67]||=Z(e=>!dt.value&&Yr(),[`prevent`])},[$t.value===`agent`&&q.value?(u(),k(RH,{key:0,busy:dt.value,error:ut.value,onClose:Yr,onSubmit:Qr},null,8,[`busy`,`error`])):(u(),F(`form`,{key:1,onSubmit:Z($r,[`prevent`])},[D(`header`,null,[D(`h2`,Y3,h($t.value===`agent`?`创建 Bot`:$t.value===`group`?`创建团队`:`群聊设置`),1),D(`button`,{type:`button`,class:`icon-button`,"aria-label":`关闭`,onClick:Yr},[W(Y,{name:`close`,size:18})])]),D(`div`,X3,[ut.value?(u(),F(`p`,Z3,h(ut.value),1)):z(``,!0),$t.value===`editGroup`?(u(),k(gn,{key:1,kind:`conversations`,"target-id":en.value,onDirtyChange:n[51]||=e=>qr.value=e,onBusyChange:n[52]||=e=>Jr.value=e},null,8,[`target-id`])):z(``,!0),D(`label`,null,[n[77]||=w(`名称`,-1),d(D(`input`,{"onUpdate:modelValue":n[53]||=e=>$.name=e,readonly:pn.value,required:``,maxlength:`100`},null,8,Q3),[[Q,$.name]])]),$t.value===`group`?(u(),F(`details`,$3,[n[78]||=D(`summary`,null,`从团队模板选择(可选)`,-1),W(C3,{selected:mn.value,available:g.value.filter(e=>!e.archived&&!e.temporaryGoalId).length,onSelect:vn},null,8,[`selected`,`available`])])):z(``,!0),pn.value?(u(),F(`p`,e6,`引用的机器人配置由远端管理,请在远端修改名称、头像和角色规则。`)):z(``,!0),ur.value&&!pn.value?(u(),F(T,{key:4},[D(`button`,{class:`avatar-summary`,type:`button`,"aria-expanded":ze.value,onClick:n[54]||=e=>ze.value=!ze.value},[W(Ye,{name:$.name||`新 Bot`,avatar:$.avatar,size:48,animated:!1},null,8,[`name`,`avatar`]),n[79]||=D(`span`,{class:`avatar-summary__copy`},[w(`Bot 头像`),D(`small`,null,`点击调整外形或上传图片`)],-1),W(Y,{name:`edit`,size:16})],8,t6),ze.value?(u(),k(Kn,{key:`${$t.value}:${en.value}`,profile:Jt.value,embedded:``,"show-name":!1,"show-default-model":!1,"show-actions":!1,onAvatarChange:n[55]||=e=>$.avatar=e},null,8,[`profile`])):z(``,!0),D(`label`,null,[n[80]||=w(`一句话职责`,-1),d(D(`input`,{"onUpdate:modelValue":n[56]||=e=>$.job=e,maxlength:`120`,placeholder:`例如:检查代码正确性,给出有依据的修改建议`},null,512),[[Q,$.job]])])],64)):$t.value===`editGroup`?(u(),F(`div`,n6,[W(Me,{name:$.name,members:V(kV)($.memberIds,g.value,$t.value===`editGroup`?dn.value:void 0),size:64},null,8,[`name`,`members`]),n[81]||=D(`small`,null,`群聊头像由成员头像自动组合,随成员头像更新。`,-1)])):z(``,!0),ur.value?(u(),F(`label`,r6,[n[82]||=w(`角色提示词与规则`,-1),d(D(`textarea`,{"onUpdate:modelValue":n[57]||=e=>$.instructions=e,readonly:pn.value,rows:`6`,maxlength:`24000`,placeholder:ur.value?`例如:你是代码审查员。重点检查正确性、边界情况和测试证据。`:`所有成员共同遵守的协作规则`},null,8,i6),[[Q,$.instructions]])])):z(``,!0),ur.value&&!pn.value?(u(),F(T,{key:7},[D(`p`,a6,[W(Y,{name:`brain`,size:16}),n[83]||=w(`模型:跟随服务器默认配置`,-1),n[84]||=D(`small`,null,`创建后可在 Bot 资料中调整模型与思考等级。`,-1)]),Ue.value?(u(),F(`details`,o6,[n[86]||=D(`summary`,null,`高级设置`,-1),D(`label`,s6,[D(`span`,null,[d(D(`input`,{"onUpdate:modelValue":n[58]||=e=>$.memoryEnabled=e,type:`checkbox`},null,512),[[Je,$.memoryEnabled]]),n[85]||=w(`自动记录长期事实`,-1)])]),D(`small`,null,h(q.value?`继承服务器已开放的协作与执行能力,可在 Bot 设置中收紧。`:`组队和同伴通信默认可用,使用服务器已有授权。`),1)])):z(``,!0)],64)):z(``,!0),hn.value?(u(),F(`fieldset`,c6,[n[87]||=D(`legend`,null,`角色分配`,-1),(u(!0),F(T,null,p(hn.value.roles,(e,t)=>(u(),F(`label`,{key:e.name},[w(h(e.name)+h(e.host?` · 管理员`:``)+` `,1),D(`select`,{value:$.memberIds[t],"aria-label":`${e.name}对应的机器人`,onChange:e=>yn(t,e.target.value)},[(u(!0),F(T,null,p(g.value.filter(e=>!e.archived&&!e.temporaryGoalId),e=>(u(),F(`option`,{key:e.id,value:e.id},h(e.name),9,u6))),128))],40,l6),D(`small`,null,h(e.description),1)]))),128)),n[88]||=D(`small`,null,`角色分工仅在本群生效,聊天中保留机器人的名称和头像。`,-1)])):ur.value?z(``,!0):(u(),F(`fieldset`,d6,[D(`legend`,null,`选择成员 · `+h($.memberIds.length)+`/8`,1),(u(!0),F(T,null,p(g.value.filter(e=>!e.temporaryGoalId&&(!e.archived||$t.value===`editGroup`&&dn.value?.memberIds.includes(e.id))),e=>(u(),F(`label`,{key:e.id,class:`member-choice`},[d(D(`input`,{"onUpdate:modelValue":n[59]||=e=>$.memberIds=e,type:`checkbox`,value:e.id,disabled:dt.value||!$.memberIds.includes(e.id)&&$.memberIds.length>=8},null,8,f6),[[Je,$.memberIds]]),W(Ye,{name:e.name,avatar:e.avatar,size:36,animated:!1},null,8,[`name`,`avatar`]),D(`span`,p6,[D(`strong`,null,h(e.name),1),D(`small`,null,h(e.job||e.description||e.instructions.slice(0,80)||`尚未填写职责`),1)])]))),128)),$t.value===`group`&&g.value.filter(e=>!e.archived&&!e.temporaryGoalId).length<2?(u(),F(`small`,m6,`至少需要两个机器人才能创建群聊。`)):z(``,!0),$t.value===`editGroup`?(u(),F(`small`,h6,`可增减成员,最多 8 位。目标进行时不能移除目标负责人;其他成员可按需调整。`)):z(``,!0),(u(!0),F(T,null,p(g.value.filter(e=>dn.value?.activeAgentStates?.[e.id]),e=>(u(),F(`button`,{key:`stop:${e.id}`,type:`button`,onClick:t=>vi(e.id)},`停止 `+h(e.name),9,g6))),128))])),$t.value===`editGroup`&&Object.keys($.memberRoles).length?(u(),F(`fieldset`,_6,[n[90]||=D(`legend`,null,`角色分工`,-1),(u(!0),F(T,null,p($.memberRoles,(e,t)=>(u(),F(`p`,{key:t},[w(h(g.value.find(e=>e.id===t)?.name)+` · `+h(e.name),1),n[89]||=D(`br`,null,null,-1),D(`small`,null,h(e.description),1)]))),128))])):z(``,!0),ur.value?z(``,!0):(u(),F(T,{key:11},[D(`label`,null,[n[91]||=w(`交付负责人`,-1),d(D(`select`,{"onUpdate:modelValue":n[60]||=e=>$.administratorId=e,required:``},[(u(!0),F(T,null,p(g.value.filter(e=>$.memberIds.includes(e.id)),e=>(u(),F(`option`,{key:e.id,value:e.id},h(e.name),9,v6))),128))],512),[[Ne,$.administratorId]])]),$.mode===`discussion`?(u(),F(`small`,y6,`讨论时成员平等;启动交付目标时由所选负责人协调。`)):z(``,!0),D(`label`,null,[n[92]||=w(`群规则(可选)`,-1),d(D(`textarea`,{"onUpdate:modelValue":n[61]||=e=>$.instructions=e,rows:`3`,maxlength:`24000`,placeholder:`例如:回答简洁,重要结论注明来源`},null,512),[[Q,$.instructions]])]),$t.value===`group`?(u(),F(`p`,b6,`创建后即可聊天。需要交付具体结果时,再开启交付目标。`)):z(``,!0),D(`label`,null,[n[95]||=w(`协作方式`,-1),d(D(`select`,{"onUpdate:modelValue":n[62]||=e=>$.mode=e},[Ue.value?(u(),F(`option`,x6,`平等讨论`)):z(``,!0),n[93]||=D(`option`,{value:`host`},`管理员协调`,-1),n[94]||=D(`option`,{value:`free`},`自由协作`,-1)],512),[[Ne,$.mode]]),D(`small`,null,h($.mode===`discussion`?`成员平等参与,按本条消息要求讨论。`:$.mode===`host`?`由负责人安排成员回复,并汇总结果。`:`成员按提及与自动回复设置参与协作。`),1)]),D(`details`,S6,[n[99]||=D(`summary`,null,`高级协作设置`,-1),Ue.value?(u(),F(`button`,{key:0,type:`button`,onClick:n[63]||=e=>Be.value?.open(`projects`,$.memberIds[0],dn.value?.projectId)},`关联项目与共享记忆`)):z(``,!0),$.mode===`free`?(u(),F(`fieldset`,C6,[n[96]||=D(`legend`,null,`未 @ 时自动回复`,-1),(u(!0),F(T,null,p(g.value.filter(e=>$.memberIds.includes(e.id)),e=>(u(),F(`label`,{key:e.id},[d(D(`input`,{"onUpdate:modelValue":n[64]||=e=>$.autoReplyIds=e,type:`checkbox`,value:e.id},null,8,w6),[[Je,$.autoReplyIds]]),w(h(e.name),1)]))),128))])):z(``,!0),$.mode===`discussion`?z(``,!0):(u(),F(`label`,T6,[D(`input`,{type:`checkbox`,checked:$.maxReplyRounds===-1,onChange:n[65]||=e=>$.maxReplyRounds=e.target.checked?-1:3},null,40,E6),n[97]||=w(`不限制自动协作轮数`,-1)])),$.mode!==`discussion`&&$.maxReplyRounds!==-1?(u(),F(`label`,D6,[n[98]||=w(`自动协作轮数`,-1),d(D(`input`,{"onUpdate:modelValue":n[66]||=e=>$.maxReplyRounds=e,type:`number`,min:`1`,max:`100`,required:``},null,512),[[Q,$.maxReplyRounds,void 0,{number:!0}]])])):z(``,!0)])],64))]),D(`footer`,null,[D(`button`,{class:`quiet-button`,type:`button`,onClick:Yr},`取消`),pn.value?z(``,!0):(u(),F(`button`,{key:0,class:`solid-button`,disabled:dt.value||!ur.value&&($.memberIds.length<($t.value===`group`?2:1)||$.memberIds.length>8)},h(dt.value?`保存中…`:$t.value===`agent`?`创建 Bot`:$t.value===`group`?`创建团队`:`保存`),9,O6))])],32))],544)):z(``,!0)])),Ue.value?(u(),k(ae,{key:4,ref_key:`knowledgePanel`,ref:Be,agents:g.value,conversations:v.value,"conversation-id":b.value?.id,"task-id":xe.value?.id,assignments:Te.value,goal:xe.value?.goal,revision:Ve.value,onChanged:it},null,8,[`agents`,`conversations`,`conversation-id`,`task-id`,`assignments`,`goal`,`revision`])):z(``,!0)]),_:1},8,[`remote-host`,`server-name`,`user-name`,`user-avatar`,`is-admin`,`features`,`upstream-ready`,`upstream-error`,`connection`,`theme`,`theme-preference`,`onLogout`,`onToggleTheme`,`onSetTheme`]))}}),P6=t({default:()=>F6}),F6=H(N6,[[`__scopeId`,`data-v-a833f83e`]]);export{gn as S,Ms as _,lg as a,Pr as b,Yp as c,Gp as d,F6 as default,Kp as f,Pu as g,Sp as h,Qg as i,Jp as l,zp as m,Wv as n,Rh as o,Wp as p,iv as r,wh as s,P6 as t,qp as u,rs as v,ar as x,Qo as y};
|
|
281
|
-
//# sourceMappingURL=ConversationsView-
|
|
278
|
+
`);return r?{text:r}:{error:`本轮已结束,没有可朗读的回复。请在聊天中查看交付结果。`}}var c3=[`aria-label`],l3={class:`image-preview-actions`},u3=[`href`,`aria-label`,`title`],d3=[`aria-label`,`title`],f3=[`aria-label`,`title`],p3=[`aria-label`],m3=[`src`,`aria-label`],h3=[`src`,`alt`],g3=[`aria-label`],_3={key:2,class:`image-preview-counter`},v3=H(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=U(()=>n.modelValue===null?null:n.images[n.modelValue]||null),s=VH(()=>o.value?.url),c=e=>{o.value&&HH(e,o.value.url,o.value.name).catch(()=>{})},l=U(()=>(n.modelValue??0)>0),d=U(()=>n.modelValue!==null&&n.modelValue<n.images.length-1);function f(){a.value=null,r(`update:modelValue`,null),r(`close`)}function p(e){if(n.modelValue===null)return;let t=n.modelValue+e;t>=0&&t<n.images.length&&r(`update:modelValue`,t)}function g(e){n.modelValue!==null&&(e.key===`Escape`?(e.preventDefault(),f()):e.key===`ArrowLeft`?(e.preventDefault(),p(-1)):e.key===`ArrowRight`&&(e.preventDefault(),p(1)))}function _(e){e.isPrimary&&(a.value={pointerId:e.pointerId,x:e.clientX})}function v(e){let t=a.value;a.value=null,!(!t||t.pointerId!==e.pointerId||Math.abs(e.clientX-t.x)<48)&&p(e.clientX<t.x?1:-1)}return m(()=>window.addEventListener(`keydown`,g)),i(()=>window.removeEventListener(`keydown`,g)),(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:Z(f,[`self`]),onPointerdown:_,onPointerup:v,onPointercancel:n[7]||=e=>a.value=null},[D(`div`,l3,[D(`a`,{href:o.value.url,download:``,onClick:c,"aria-label":`下载 ${o.value.name}`,title:`下载 ${o.value.name}`},[W(V(Ot),{"aria-hidden":`true`})],8,u3),e.canAdd?(u(),F(`button`,{key:0,type:`button`,"aria-label":e.addLabel||`添加到聊天`,title:e.addLabel||`添加到聊天`,onClick:n[0]||=Z(e=>r(`add`,o.value),[`stop`])},[W(V(bt),{"aria-hidden":`true`})],8,d3)):z(``,!0),D(`button`,{type:`button`,"aria-label":e.closeLabel||`关闭预览`,title:e.closeLabel||`关闭预览`,onClick:f},[W(V(Et),{"aria-hidden":`true`})],8,f3)]),l.value?(u(),F(`button`,{key:0,class:`image-preview-nav image-preview-nav--previous`,type:`button`,"aria-label":e.previousLabel||`上一张媒体`,onClick:n[1]||=Z(e=>p(-1),[`stop`])},[W(V(wt),{"aria-hidden":`true`})],8,p3)):z(``,!0),W(rt,{name:`image-preview-change`,mode:`out-in`},{default:S(()=>[o.value.type===`video`?(u(),F(`video`,{key:o.value.url,src:V(s).url.value,"aria-label":o.value.name,class:`image-preview-video`,controls:``,playsinline:``,preload:`metadata`,onClick:n[2]||=Z(()=>{},[`stop`]),onPointerdown:n[3]||=Z(()=>{},[`stop`]),onPointerup:n[4]||=Z(()=>{},[`stop`])},null,40,m3)):(u(),F(`img`,{key:o.value.url,src:V(s).url.value,alt:o.value.name,class:`image-preview-img`,draggable:`false`,onClick:n[5]||=Z(()=>{},[`stop`])},null,8,h3))]),_:1}),d.value?(u(),F(`button`,{key:1,class:`image-preview-nav image-preview-nav--next`,type:`button`,"aria-label":e.nextLabel||`下一张媒体`,onClick:n[6]||=Z(e=>p(1),[`stop`])},[W(V(ie),{"aria-hidden":`true`})],8,g3)):z(``,!0),e.images.length>1?(u(),F(`span`,_3,h((e.modelValue||0)+1)+` / `+h(e.images.length),1)):z(``,!0)],40,c3)):z(``,!0)]))}}),[[`__scopeId`,`data-v-7d71af51`]]),y3=[{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:`检查权限、数据、依赖和操作安全性`}]}],b3={class:`preset-picker`,"aria-label":`团队预设`},x3={class:`preset-grid`},S3=[`disabled`,`aria-label`,`onClick`],C3={key:0,class:`preset-help`},w3=H(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`,b3,[n[2]||=D(`div`,{class:`preset-picker__heading`},[D(`span`,null,`团队预设`),D(`small`,null,`选择后分配已创建的机器人`)],-1),D(`div`,x3,[D(`button`,{type:`button`,class:l({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(V(y3),t=>(u(),F(`button`,{key:t.id,type:`button`,class:l({selected:e.selected===t.id}),disabled:i(t)>0,"aria-label":t.name,onClick:e=>r(`select`,t)},[D(`strong`,null,h(t.name),1),D(`small`,null,h(t.summary),1),D(`em`,null,h(i(t)?`还缺 ${i(t)} 人`:`${t.roles.length} 人`),1)],10,S3))),128))]),e.available<5?(u(),F(`small`,C3,`成员不足时,请先创建所需的机器人。`)):z(``,!0)]))}}),[[`__scopeId`,`data-v-22ca72e6`]]),T3={key:0,class:`directory-view`},E3={key:0,role:`alert`,class:`error`},D3={key:0,class:`header-actions`},O3={key:0,class:`task-picker-shell`},k3=[`aria-busy`,`disabled`,`value`],A3=[`value`],j3=[`aria-pressed`],M3={key:0,class:`error`,role:`alert`},N3={key:0,class:`task-queue-status`,role:`status`},P3={key:1,class:`task-queue-status`,role:`status`},F3={key:0,class:`group-approval-summary`,role:`status`},I3=[`onClick`],L3={key:1,class:`knowledge-shortcuts composer-knowledge`},R3={key:0},z3=[`value`],B3={key:1},V3=[`value`],H3={key:2},U3={value:``},W3=[`value`],G3={key:0,class:`search-lifecycle-actions`},K3=[`aria-label`,`disabled`,`onClick`],q3=[`aria-label`,`disabled`,`aria-busy`,`onClick`],J3={key:0,class:`search-delete-error`,role:`alert`},Y3={key:0,class:`lifecycle-error`,role:`alert`},X3={id:`conversation-editor-title`},Z3={class:`editor-content`},Q3={key:0,class:`error`,role:`alert`},$3=[`readonly`],e6={key:2,class:`group-options`},t6={key:3},n6=[`aria-expanded`],r6={key:5,class:`team-avatar-settings`},i6={key:6},a6=[`readonly`,`placeholder`],o6={class:`model-summary`},s6={key:0,class:`group-options`},c6={class:`team-management-permission`},l6={key:8,class:`preset-role-mapping`},u6=[`value`,`aria-label`,`onChange`],d6=[`value`],f6={key:9},p6=[`value`,`disabled`],m6={class:`member-choice__copy`},h6={key:0},g6={key:1},_6=[`onClick`],v6={key:10},y6=[`value`],b6={key:0,class:`group-help`},x6={key:1,class:`group-help`},S6={key:0,value:`discussion`},C6={class:`group-options`},w6={key:1},T6=[`value`],E6={key:2},D6=[`checked`],O6={key:3},k6=[`disabled`],A6=`yaovi:workspace-dock-width`,j6=320,M6=6,N6=`__create_task__`,P6=E({__name:`ConversationsView`,setup(e){let t=ce(),n=U(()=>Gv(t.user?.id,ot.selectedHostId,ot.accountId)),r=we(),a=Ae(),c=Se(),g=O([]),v=O([]),y=I([]),b=O(),x=O(null),C=O([]),E=O([]),A=O(null),j=O([]),M=O(),N=O([]),P=O(``),R=O([]),B=O(``),H=O(),G=U(()=>j.value.includes(`conversation-sections-v1`)),{collapsed:K,toggle:ee}=kQ(n,()=>[vI,...R.value.map(e=>e.id)]),te=U(()=>[...K.value]),q=U(()=>j.value.includes(jt)),J=U(()=>j.value.includes(`background-tasks-v1`)),ne=U(()=>M.value?.enabled?M.value.mainBotId:null),re=U(()=>q.value&&a.query.view===`bots`),ie=U(()=>!!ne.value&&b.value?.kind===`direct`&&b.value.memberIds[0]===ne.value),le=U(()=>vt(N.value)),ue=U(()=>new Set(N.value.map(e=>e.runId).filter(Boolean))),de=U(()=>x.value&&!ue.value.has(x.value.id)?x.value:null),pe=U(()=>!!de.value&&[`queued`,`running`,`waiting`,`uncertain`].includes(de.value.status)||$v(y.value.filter(e=>!e.runId||!ue.value.has(e.runId)))),me=U(()=>!!b.value?.activeRunId&&!ue.value.has(b.value.activeRunId)),ge,_e=0,ve=O([]),xe=O(null),Ce=O([]),Te=O([]),Ee=O(!1),De=O(),Oe=O([]),je=U(()=>ve.value.filter(e=>Oe.value.includes(e.id)));function Fe(e){c.push({path:`/conversations/workstreams`,query:{task:e,...Tn.value?{from:`/conversations/${Tn.value}`}:{}}})}function Ie(e){c.push({path:`/conversations/${e.conversationId}`,query:e.taskId?{taskId:e.taskId}:{}})}function Le(e){Yn()&&(en.value===`editAgent`&&Xr(),Mn.value=void 0,Oe.value=e??[],De.value=e?`runtime`:`goal`)}let ze=O(!1),Be=O(),Ve=O(0),Ue=O(!1),We=O([]),Ge=O(``),Ke=O(),Xe=O(``),Ze=U(()=>tr.value.filter(e=>!e.temporaryGoalId&&!e.archived&&!e.remoteAgentId)),Qe=U(()=>Ze.value.find(e=>e.id===b.value?.administratorId)??Ze.value[0]),$e=U(()=>b.value?.kind===`group`&&!b.value.archived&&!xe.value?.goal&&(b.value.collaborationMode===`discussion`?Ze.value.length>0:tr.value.some(e=>e.id===b.value?.administratorId&&!e.temporaryGoalId&&!e.archived&&!e.remoteAgentId))),et=new Map,nt=new Map,rt=U(()=>`${n.value}:${b.value?.id}${xe.value?`:${xe.value.id}`:``}`);f(rt,()=>{De.value=void 0,Ee.value=!1,Ge.value=``,Ke.value=void 0,Xe.value=``});async function it(){await vr(),Ue.value&&(We.value=(await X(`/api/app/workspace/projects`)).projects)}async function at(){await Promise.all([it(),pr()])}let lt=O(``),ut=O(``),dt=O(!1),ft=O(!1),pt=O([]),mt=O([]),ht=O(!0),yt=O(``),bt=O(``);f(()=>`${a.params.id}:${E.value[0]?.id}`,()=>{bt.value=``});let xt=U(()=>jV(v.value)),St=U(()=>[!1,!0].map(e=>{let t=v.value.filter(t=>t.archived===e).map(e=>NV(e,g.value,xt.value));return{id:e?`archived`:`unarchived`,title:e?`已归档`:`未归档`,children:t,emptyText:e?`没有已归档聊天`:`没有未归档聊天`}})),Ct=U(()=>new Set(v.value.filter(e=>e.archived).map(e=>e.id))),wt=O(``),Tt=O(``),Et=O(``),Dt=O(),Ot=O(),kt=O(!1),At=O(0),Mt,Nt=O(!1),Pt=O(),Ft=O(null),It=O(null),Lt=O(null),Rt=O(!1),zt=new e4,Bt=new WeakMap,Vt=I([]),Ht=new Set;function Ut(e,t=n.value){!t||t!==n.value||(ry(t,e),Vt.value=e)}f(n,e=>{if(Vt.value=[],e)try{Vt.value=ny(e)}catch(e){ut.value=e instanceof Error?e.message:`待发送消息缓存无法读取`}},{immediate:!0}),f(y,e=>{let t=new Set(e.filter(e=>e.clientRequestId).map(e=>e.clientRequestId)),n=Vt.value.filter(e=>e.conversationId!==b.value?.id||(e.taskId??``)!==(xe.value?.id??``)||!t.has(e.requestId));if(n.length!==Vt.value.length)try{Ut(n)}catch{}});let Wt=U(()=>wQ(Yv(iy(y.value,Vt.value.filter(e=>e.conversationId===b.value?.id&&(e.taskId??``)===(xe.value?.id??``)))).filter(e=>e.visible!==!1).map(e=>{let t=Bt.get(e);return t||(t={...OV([e])[0],localRequestId:e.localRequestId},Bt.set(e,t)),t}),xe.value?.goal,Te.value,ve.value,y.value.flatMap(e=>e.attachments))),Gt=O(!1),Kt=U(()=>vq(Wt.value)),qt=U(()=>Kt.value.filter(e=>e.kind===`image`||e.kind===`video`).map(e=>({url:e.previewUrl||e.downloadUrl||``,name:e.name,type:e.kind}))),Jt=U(()=>Ft.value?{id:Ft.value.id,content:Ft.value.content,author:Ft.value.author}:null),Yt=U(()=>({name:tn.value||`机器人`,displayName:$.name||`机器人`,agentName:$.name||`机器人`,agentAvatar:$.avatar,isDefault:!1,isRunning:!0}));function Xt(e){let t=e.url||``;try{t=decodeURIComponent(new URL(t,window.location.origin).pathname)}catch{}let n=y.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=hq(n?.name||e.name,e.url||``,void 0,i?`text`:void 0),o=qt.value.findIndex(e=>e.url===(a.previewUrl||a.downloadUrl));o>=0?Lt.value=o:It.value=a}let Zt=[],Qt=[];async function $t(e){let t=Ot.value,n=t?.submissionToken(),r=rt.value,i=ti;if(lt.value=Ft.value?`> ${Ft.value.author||`我`}: ${Ft.value.content.replace(/\n/g,`
|
|
279
|
+
> `)}\n\n${e.text}`:e.text,mt.value=e.mentionIds,e.files.length)try{if(dt.value=!0,e.files.length===Zt.length&&e.files.every((e,t)=>e===Zt[t]))pt.value=Qt;else{let t=new FormData;for(let n of e.files)t.append(`files`,n);let n=await X(`/api/app/uploads`,{method:`POST`,body:t});if(r!==rt.value||i!==ti)return;pt.value=n.files,Zt=[...e.files],Qt=[...pt.value]}}catch(e){ut.value=e instanceof Error?e.message:`上传失败`;return}finally{i===ti&&(dt.value=!1)}r===rt.value&&i===ti&&(e.files.length||(pt.value=[]),await ii()&&t?.clearAfterSend(n)&&Ot.value===t&&rt.value===r&&ti===i&&(Ft.value=null,Zt=[],Qt=[]))}let en=O(null),tn=O(``),nn=O(``);O(),O();let rn=O(),an=O(),on=O(!1),sn=O(``);function cn(e){let n=g.value.find(t=>t.id===e);!q.value||t.user?.role!==`admin`||!n||n.archived||n.temporaryGoalId||n.remoteAgentId||n.nodeId!==`local`||!Yn()||(Xr(),sn.value=e)}async function ln(e){let t=v.value.find(t=>t.kind===`direct`&&t.memberIds[0]===e.id&&!t.archived);t&&Yn()&&await qr(`editAgent`,t,!0)}function un(e){M.value=e,pr()}let dn=0,fn=U(()=>v.value.find(e=>e.id===nn.value)??(b.value?.id===nn.value?b.value:void 0)),pn=U(()=>g.value.find(e=>e.id===tn.value)),mn=U(()=>en.value===`editAgent`&&!!g.value.find(e=>e.id===tn.value)?.remoteAgentId),$=_({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}),hn=O(`custom`),_n=U(()=>en.value===`group`?y3.find(e=>e.id===hn.value):void 0);function vn(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 yn(e){let t=g.value.filter(e=>!e.archived&&!e.temporaryGoalId);e&&t.length<e.roles.length||(hn.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:Ue.value?`discussion`:`host`,autoReplyIds:[],maxReplyRounds:3}),e&&vn(e))}function bn(e,t){if(!_n.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,vn(_n.value)}_({});let xn=0,Sn=!1,Cn,wn=0,Tn=U(()=>typeof a.params.id==`string`?a.params.id:void 0);f(Tn,e=>{qe.value=e??null},{immediate:!0});let En=U(()=>typeof a.query.taskId==`string`?a.query.taskId:``),Dn=O(),On=O(),kn=O(),An=O(!0),jn=O(!1),Mn=O(),Nn=O(!1),Pn=O(),Fn=O(),In=O(``),Ln={default:380,min:280,max:480},Rn=O(),zn=iF(A6,Ln),Bn=U(()=>zn.width.value),Vn=U(()=>({flex:`0 0 ${Bn.value}px`,width:`${Bn.value}px`})),Hn=U(()=>!!(De.value||Mn.value||en.value===`editAgent`&&pn.value));function Un(){let e=Rn.value?.clientWidth||0,t=e>0?e:Math.min(window.innerWidth,1200)-360;return Math.max(Ln.min,t-j6-M6)}function Wn(){zn.persist(zn.width.value,Un())}function Gn(e){Wn(),zn.beginDrag(e,{direction:-1,maxAvailable:Un})}function qn(){zn.reset(Un())}f(Hn,e=>{e&&o(()=>Wn())});let Jn=O(!1);function Yn(){return en.value!==`editAgent`||(an.value?.beforeClose?.()??!0)}function Xn(e){Yn()&&(en.value===`editAgent`&&Xr(),De.value=void 0,Mn.value=Mn.value===e?void 0:e)}async function Zn(e,t,n,r=!0){if(r&&window.yaoviDesktop?.openComputer&&!fe()){try{await window.yaoviDesktop.openComputer(e.id,{backend:t,host:n})}catch(e){ut.value=e instanceof Error?e.message:`无法打开电脑窗口`}return}if(jn.value&&kn.value){if(Pn.value?.id===e.id&&Fn.value===t&&In.value===(n??``))return;try{await kn.value.releaseControl(),jn.value=!1,await o()}catch(e){ut.value=e instanceof Error?e.message:`请先交还当前电脑`;return}}Pn.value=e,Fn.value=t,In.value=n??``,An.value=r,jn.value=!0}function Qn(e){y.value.some(t=>t.credentialDrafts?.some(t=>t.id===e.id))&&(Dx.value=e.id,Dn.value?.openSettings(`credential-vault`))}async function $n(e){if(!y.value.some(t=>t.browserCard?.id===e.id&&t.browserCard.agentId===e.agentId))return;let t=g.value.find(t=>t.id===e.agentId&&!t.archived);if(!t){ut.value=`此浏览器所属机器人已不可用,或你已没有访问权限`;return}await Zn(t,`managed-browser`)}async function er(){if(Nn.value&&On.value&&!await On.value.close())return!1;if(jn.value&&kn.value)try{await kn.value.releaseControl(),jn.value=!1}catch{return!1}return!0}Re(er),oe(()=>Yn()?er():!1);let tr=U(()=>g.value.filter(e=>b.value?.memberIds.includes(e.id))),nr=U(()=>b.value?.kind===`direct`?g.value.find(e=>e.id===b.value?.memberIds[0]):void 0),rr=U(()=>nr.value?.name||b.value?.name||`Bot 模式`),ir=U(()=>b.value?nr.value?.name||b.value.name:``),ar=U(()=>nr.value?.avatar||b.value?.avatar||``),or=U(()=>b.value?.kind===`group`?kV(b.value.memberIds,g.value,b.value):[]),sr=U(()=>{let e=de.value;return dy({vmWait:e?.vmWait,runStatus:e?.status??(pe.value?`running`:void 0),stopRequested:e?.stopRequested,collaborationWaiting:!!b.value?.collaborationWaiting,backgroundPhase:e?.backgroundPhase,...fy(y.value)})??(pe.value?`正在输入…`:``)}),cr=U(()=>_y({foregroundActive:pe.value,tasks:J.value?N.value:[],conversation:b.value})??``),lr=U(()=>pe.value?sr.value:cr.value),ur=U(()=>{let e=[...Wt.value].reverse().find(e=>e.role===`assistant`&&e.status===`streaming`)?.profile,t=nr.value?.id||x.value?.activeAgentId||e||b.value?.activeAgentId||Object.entries(b.value?.activeAgentStates??{}).find(([,e])=>e===`running`)?.[0]||b.value?.memberIds[0],n=g.value.find(e=>e.id===t);return{name:n?.name||b.value?.name||`机器人`,avatar:n?.avatar||(b.value?.kind===`direct`?b.value.avatar:``)||``}}),dr=U(()=>en.value===`agent`||en.value===`editAgent`),fr=e=>e;async function pr(){let e=++_e,n=t.user?.id,r=()=>!Sn&&e===_e&&t.user?.id===n,i=[];await Promise.all([q.value?X(`/api/app/permissions/control`).then(e=>{r()&&(M.value=e)}).catch(e=>{i.push(e instanceof Error?e.message:`无法读取 Bot 权限`)}):Promise.resolve(),J.value?X(`/api/app/background-tasks`).then(e=>{r()&&(N.value=_t(N.value,e.tasks))}).catch(e=>{i.push(e instanceof Error?e.message:`无法读取后台任务`)}):Promise.resolve()]),r()&&(P.value=i.join(`;`))}function mr(){if(De.value=void 0,a.query.taskDetails===`goal`){let{taskDetails:e,...t}=a.query;c.replace({path:a.path,query:t})}}f(()=>[xe.value?.id,ft.value,a.query.taskDetails],async()=>{if(ft.value||a.query.taskDetails!==`goal`||!xe.value?.goal||xe.value.id!==En.value)return;let e=xe.value.id;await o(),!Sn&&!ft.value&&xe.value?.id===e&&En.value===e&&a.query.taskDetails===`goal`&&Le()});async function hr(){Yn()&&(Xr(),await c.push(`/conversations?view=bots`))}async function gr(e,t=!1){let n=v.value.find(t=>t.kind===`direct`&&t.memberIds[0]===e.id&&!t.archived);if(!n){P.value=`此 Bot 的聊天尚不可用,请刷新后重试。`;return}if(t&&q.value){Yn()&&(Xr(),Dn.value?.openSettings(`my-bots`,void 0,e.id));return}t?(await Gr(n.id),await qr(`editAgent`,n)):await Gr(n.id)}async function _r(){if(Tn.value||a.query.view===`bots`||a.query.view===`chats`||!ne.value)return;let e=v.value.find(e=>e.kind===`direct`&&e.memberIds[0]===ne.value&&!e.archived);e&&await c.replace(`/conversations/${e.id}`)}async function vr(){let e=zt.cursor,n=t.user?.id,[r,i]=await Promise.all([X(`/api/app/agents`),X(`/api/app/conversations`)]);if(Sn||t.user?.id!==n||zt.cursor!==e)return;g.value=r.agents;let a=new Map(v.value.map(e=>[e.id,e]));zt.conversations=i.conversations.map(e=>{let t=a.get(e.id);return t&&t.unreadVersion===e.unreadVersion&&[...Cr].some(t=>t.startsWith(`${e.id}:`))?{...e,unread:t.unread,unreadCount:t.unreadCount}:e}),zt.agents=g.value,i.sections&&(zt.sections=i.sections),v.value=zt.conversations,R.value=zt.sections,xn||(xn=i.cursor,zt.cursor=i.cursor)}async function yr(e=Tn.value,n=!1,r){if(!e){wn++,b.value=void 0,y.value=[],x.value=null,E.value=[],A.value=null,xe.value=null,Ce.value=[],Te.value=[],ve.value=[];return}let i=++wn,s=t.user?.id,l=ti,u=()=>!Sn&&i===wn&&!r?.aborted&&t.user?.id===s&&ti===l,d=rt.value,f=Ot.value?.filesSnapshot()??[],p=Ft.value,m=En.value||(b.value?.id===e?xe.value?.id:void 0),h=n?void 0:zt.get(e,m),g=zt.beginRead();n||(ft.value=!h),b.value?.id!==e&&(b.value=v.value.find(t=>t.id===e),y.value=h?.messages??[],x.value=null,E.value=[],A.value=null,xe.value=null,Ce.value=[],Te.value=[],ve.value=[],Ft.value=null,ht.value=!1);try{let i=h??await X(`/api/app/conversations/${e}?limit=50&toolDetails=lazy${m?`&taskId=${encodeURIComponent(m)}`:``}`,{signal:r});if(!u())return;let s=h??zt.finishRead(g,i);h&&zt.staleDetails.has(Z2(e,h.task?.id))&&queueMicrotask(()=>{u()&&b.value?.id===e&&yr(e,!0,r)});let c=Pt.value?.isFollowingBottom()??!0;if(b.value=s.conversation,s.task&&zt.selectedTasks.set(e,s.task.id),xe.value=s.task??null,Ce.value=s.tasks??[],Te.value=s.assignments??[],ve.value=s.runtimeTasks??[],y.value=s.messages,x.value=s.run,C.value=s.approvalSummaries??[],E.value=s.interactions,A.value=s.context,d!==rt.value){if(et.set(d,f),nt.set(d,p),xe.value&&!m&&!ot.selectedHostId){let e=`yaovi:composer:group:${t.user?.id}:${b.value.id}`,n=`yaovi:composer:group:${rt.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=et.get(rt.value);if(e?.length&&await Ot.value?.attachFiles(e),!u())return;Ft.value=nt.get(rt.value)??null}if(n||(ht.value=s.hasOlder??s.messages.length===50),!n||c){if(await o(),!u())return;!n&&typeof a.query.unread!=`string`&&Pt.value?.scrollToBottom(`auto`),typeof a.query.unread==`string`&&xr(a.query.unread)}}catch(t){if(u()&&m&&t instanceof se&&t.status===404)try{let t=(await X(`/api/app/conversations/${e}/tasks`,{signal:r})).tasks[0];if(u()&&t&&t.id!==m){await c.replace({query:{...a.query,taskId:t.id}});return}}catch{}u()&&(ut.value=t instanceof Error?t.message:`加载失败`)}finally{zt.cancelRead(g),i===wn&&(ft.value=!1)}}let br=0;async function xr(e){let t=++br,n=Tn.value,r=En.value,i=a.path,s=()=>!Sn&&t===br&&a.path===i&&b.value?.id===n&&Tn.value===n&&En.value===r&&a.query.unread===e;try{for(let t=0;t<100&&s();t++){if(await o(),!s()||Pt.value?.scrollToMessage(e)||!ht.value||Gt.value)return;await Si()}}finally{if(s()){let e={...a.query};delete e.unread,await c.replace({query:e})}}}f(()=>a.query.unread,e=>{typeof e==`string`&&!ft.value&&b.value?.id===Tn.value&&xr(e)},{flush:`post`});let Sr=st(),Cr=new Set;async function wr(e){let t=b.value;if(!t||ft.value||jn.value||typeof a.query.unread==`string`)return;let n=`${t.id}:${e.join(`,`)}`;if(Cr.has(n))return;let r=new Set(y.value.filter(e=>e.role===`assistant`&&e.status===`complete`&&e.visible!==!1).map(e=>e.id));Cr.add(n);try{await Sr.visible(`bot`,t.id,void 0,e.filter(e=>r.has(e)))}catch{}finally{Cr.delete(n)}}async function Tr(e){let t=e.currentTarget,n=t.value;if(n!==N6){await c.push({query:{...a.query,taskId:n}});return}if(t.value=xe.value?.id??``,!b.value||b.value.kind!==`group`||Jn.value)return;let r=b.value.id;Jn.value=!0,ut.value=``;try{let e=await X(`/api/app/conversations/${r}/tasks`,{method:`POST`,body:{}});if(b.value?.id!==r)return;Ce.value=[e.task,...Ce.value.filter(t=>t.id!==e.task.id)],await c.push({query:{...a.query,taskId:e.task.id}})}catch(e){ut.value=e instanceof Error?e.message:`新建话题失败`}finally{Jn.value=!1}}async function Er(){if(!(!b.value||!xe.value))try{await X(`/api/app/conversations/${b.value.id}/tasks/${xe.value.id}/stop`,{method:`POST`,body:{}}),await yr(void 0,!0)}catch(e){ut.value=e instanceof Error?e.message:`停止任务失败`}}async function Dr(){if(!(!b.value||!xe.value))try{await X(`/api/app/conversations/${b.value.id}/tasks/${xe.value.id}/resume`,{method:`POST`,body:{requestId:He()}}),await yr(void 0,!0)}catch(e){ut.value=e instanceof Error?e.message:`恢复任务失败`}}async function Or(e,t,n){let r=b.value?.id;if(!r||xe.value?.id!==e)throw Error(`话题已切换,请重新打开目标`);let i=await X(`/api/app/conversations/${r}/tasks/${e}/plan`,{method:`PATCH`,body:{requestId:He(),expectedRevision:t,acceptanceCriteria:n}});b.value?.id===r&&xe.value?.id===e&&(xe.value.goal=i.goal,await yr(r,!0))}function kr(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(),c.push(n.pathname+n.search)}catch{}}let Ar=!1,jr=ke.beginWorkspace(),Mr=ke.status,Nr,Pr,Fr=[],Ir;function Lr(){Ir?.abort(),Ir=void 0,Cn&&clearTimeout(Cn),Cn=void 0}function Rr(e){Pt.value?.isFollowingBottom(),b.value=e.conversation,y.value=e.messages,xe.value=e.task??null,Ce.value=e.tasks??[],x.value=e.run,E.value=e.interactions,C.value=e.approvalSummaries??[],A.value=e.context,Te.value=e.assignments??[],ve.value=e.runtimeTasks??[],ht.value=e.hasOlder??!1}function zr(){Pr=void 0;let e=new Set;try{for(let t of Fr){let n=t.seq>zt.cursor;if(zt.apply(t),t.type===`collaboration.changed`?e.add(`chain:${t.data.chainId}`):t.type===`run.changed`?e.add(`run:${t.data.id}`):t.type===`message.changed`&&t.data.runId&&e.add(`run:${t.data.runId}`),t.type===`message.changed`){let e=t.data;if(e.clientRequestId&&Vt.value.some(t=>t.requestId===e.clientRequestId&&t.conversationId===e.conversationId&&(t.taskId??``)===(e.conversationTaskId??``)))try{Ut(Vt.value.filter(t=>t.requestId!==e.clientRequestId))}catch{}}if(t.type===`server.identity.changed`&&be(t.data),n&&Mt?.(t),String(t.type)===`background-task.changed`){let e=t.data;N.value=_t(N.value,[e])}if((String(t.type).startsWith(`bot.control.`)||String(t.type).startsWith(`bot.permission.`))&&pr(),t.type===`project.changed`){let e=t.data;We.value=[...We.value.filter(t=>t.id!==e.id),e]}(/^(memory|project|collaboration)\./.test(t.type)||t.type===`message.changed`&&t.data.activity)&&Ve.value++}}catch{Fr=[],Nr?.close(),Wr();return}if(Fr=[],xn=zt.cursor,e.size&&(y$.value={keys:e,seq:xn}),g.value=zt.agents,v.value=zt.conversations,R.value=zt.sections,Tn.value){let e=zt.get(Tn.value,En.value||xe.value?.id);e?Rr(e):v.value.some(e=>e.id===Tn.value)?xe.value&&!zt.details.has(Z2(Tn.value,xe.value.id))&&(c.replace(`/conversations/${Tn.value}`),yr(Tn.value,!0)):c.replace(`/conversations`)}Mt&&At.value++}async function Br(e){let n=t.user?.id,r=ti,i=await X(`/api/app/capabilities`,{signal:e});if(e.aborted||Sn||ti!==r||t.user?.id!==n)return;Ar=i.features.includes(ay),Ue.value=i.features.includes(`bot-file-memory-v1`),j.value=i.features,i.csrfToken&&ye(i.csrfToken);let a=zt.beginRead();try{let i=new URLSearchParams({details:`selected`,toolDetails:`lazy`});Tn.value&&i.set(`conversationId`,Tn.value),En.value&&i.set(`taskId`,En.value);let a=await X(`/api/app/workspace/snapshot?${i}`,{signal:e});if(e.aborted||Sn||ti!==r||t.user?.id!==n||(zt.hydrate(a),g.value=a.agents,v.value=zt.conversations,R.value=zt.sections,xn=a.cursor,We.value=a.projects??[],be(a.serverIdentity),await pr(),e.aborted||Sn||ti!==r||t.user?.id!==n))return;await _r()}finally{zt.cancelRead(a)}}function Vr(){if(Nr?.close(),Sn)return;if(!navigator.onLine){Hr();return}jr.update(`syncing`);let e=he(`/api/app/events/stream?after=${xn}&toolDetails=lazy${Ar?`&format=patch-v1`:``}`,()=>zt.cursor);Nr=e,e.addEventListener(`workspace`,t=>{if(!(Sn||Nr!==e))try{Fr.push(JSON.parse(t.data)),Pr===void 0&&(Pr=requestAnimationFrame(zr))}catch{e.close(),ut.value=`消息同步失败,正在恢复`,Wr()}}),e.addEventListener(`ready`,t=>{if(Nr===e)try{let n=JSON.parse(t.data);if(zr(),Sn||Nr!==e)return;be(n.serverIdentity),ut.value=``,jr.update(`online`)}catch{e.close(),Wr()}}),e.addEventListener(`reset`,()=>{!Sn&&Nr===e&&(e.close(),Wr())}),e.onerror=()=>{Sn||Nr!==e||(jr.update(`reconnecting`),ut.value=`连接中断,正在重连`,X(`/api/app/capabilities`).catch(t=>{Sn||Nr!==e||t instanceof se&&[401,403].includes(t.status)&&(e.close(),jr.update(`expired`),ut.value=t.message)}))}}function Hr(){Lr(),Nr?.close(),Nr=void 0,jr.update(`offline`),ut.value=`网络已断开,恢复连接后将自动同步`}function Ur(){!Sn&&t.user?.id&&Wr()}async function Wr(e=!1){if(Lr(),Sn||!t.user?.id)return;if(!navigator.onLine){Hr();return}jr.update(`syncing`);let n=new AbortController,r=t.user.id,i=ti;Ir=n;let a=()=>!Sn&&!n.signal.aborted&&Ir===n&&ti===i&&t.user?.id===r;Nr?.close(),Nr=void 0,Fr=[],Pr!==void 0&&cancelAnimationFrame(Pr),Pr=void 0;try{if(await Br(n.signal),!a())return;let t=!e&&Tn.value?zt.get(Tn.value,En.value||xe.value?.id):void 0;t?(Rr(t),zt.staleDetails.has(Z2(t.conversation.id,t.task?.id))&&await yr(t.conversation.id,!0,n.signal)):await yr(Tn.value,!1,n.signal),a()&&Vr()}catch(e){if(!a())return;if(!navigator.onLine){Hr();return}if(ut.value=e instanceof Error?e.message:`连接中断`,e instanceof se&&[401,403].includes(e.status)){jr.update(`expired`);return}jr.update(`reconnecting`),Cn=setTimeout(()=>void Wr(),1500)}finally{Ir===n&&(Ir=void 0)}}async function Gr(e){let t=v.value.find(t=>t.id===e),n;if(en.value===`editAgent`&&(t?.kind===`direct`?t.memberIds[0]:void 0)!==tn.value){if(!Yn())return;let e=on.value;Xr(),t?.kind===`direct`&&(n=e)}ut.value=``,pt.value=[],mt.value=[],lt.value=``,It.value=null,Lt.value=null,await c.push(`/conversations/${e}`),n!==void 0&&t?.kind===`direct`&&await qr(`editAgent`,t,n)}function Kr(e,t=!1){let n=v.value.find(t=>t.id===e);if(n?.kind===`direct`&&q.value&&(t||window.matchMedia?.(`(max-width: 900px)`).matches)){Yn()&&(Xr(),Dn.value?.openSettings(`my-bots`,void 0,n.memberIds[0]));return}n&&qr(n.kind===`direct`?`editAgent`:`editGroup`,n)}async function qr(e,t=b.value,n=!1){if(e===`editAgent`&&en.value===`editAgent`&&tn.value===t?.memberIds[0]){an.value?.focus?.();return}if(!Yn())return;let r=++dn,i=ti,a=()=>r===dn&&i===ti&&!Sn;e===`editAgent`&&(De.value=void 0,Mn.value=void 0,on.value=n),ut.value=``,en.value=e,ze.value=!1,tn.value=``,nn.value=e===`editAgent`||e===`editGroup`?t?.id??``:``,hn.value=`custom`,Object.assign($,{name:``,avatar:e===`agent`?ct(Pe(`new-agent`,`机器人`)):``,job:``,antiJobs:[],voice:``,voiceCustom:``,actBias:``,instructions:``,description:``,execution:`profile`,canManageTeam:!0,canCollaborate:!0,memoryEnabled:!0,approvalPolicy:`ask`,memberIds:[],memberRoles:{},administratorId:``,mode:Ue.value?`discussion`:`host`,autoReplyIds:[],maxReplyRounds:3});try{if(e===`editAgent`){let e=g.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 X(`/api/app/nodes/${e.nodeId}/agents`)).agents.find(t=>t.id===e.remoteAgentId);if(!a())return;t&&Object.assign($,t)}$.approvalPolicy=e.approvalPolicy??`ask`,tn.value=e.id}e===`editGroup`&&t&&(tn.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()&&rn.value?.showModal()}catch(e){if(!a())return;ut.value=String(e),en.value=null}}let Jr=O(!1),Yr=O(!1);function Xr(){en.value===`editGroup`&&(Yr.value||Jr.value&&!window.confirm(`权限更改尚未保存,确定放弃?`))||(Jr.value=!1,dn++,tn.value=``,rn.value?.close(),en.value=null,nn.value=``)}function Zr(e){Object.assign($,e),$.description??=``,$.job??=``,$.antiJobs??=[],$.voice??=``,$.voiceCustom??=``,$.actBias??=``,Qr.value=e.modelSettings&&e.expectedRevision?{modelSettings:e.modelSettings,expectedRevision:e.expectedRevision}:void 0,ei()}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 Qr=O();async function $r(e){if(dt.value||en.value!==`agent`)return;let t=dn,n=ti,r=()=>t===dn&&n===ti&&!Sn;dt.value=!0,ut.value=``;let i={...e,computer:`auto`,envs:{vm:!0,cloud:!0,desktop:!0},execution:`profile`};try{let e=await X(`/api/app/agents`,{method:`POST`,body:fr(i)});if(!r())return;if(e.confirmationRequired){if(!e.confirmationTarget)throw Error(`模型确认信息不完整,请重新选择模型。`);if(!window.confirm(e.confirmationMessage||`确认使用所选模型创建 Bot?`)||(e=await X(`/api/app/agents`,{method:`POST`,body:fr({...i,confirmedModel:e.confirmationTarget})}),!r()))return}if(!e.agent)throw Error(`创建尚未确认,请刷新 Bot 列表后检查。`);let t=e.agent.id;if(Xr(),await Promise.all([vr(),pr()]),n!==ti||Sn)return;let a=v.value.find(e=>e.kind===`direct`&&e.memberIds[0]===t);a&&await Gr(a.id)}catch(e){n===ti&&!Sn&&(ut.value=e instanceof Error?e.message:`创建失败`)}finally{n===ti&&!Sn&&(dt.value=!1)}}async function ei(){let e=en.value,t=dn,n=ti,r=Qr.value;Qr.value=void 0;let i,a=()=>t===dn&&n===ti&&!Sn;dt.value=!0,ut.value=``;try{let t={name:$.name,...dr.value?{avatar:$.avatar,description:$.description.trim(),canManageTeam:$.canManageTeam,approvalPolicy:$.approvalPolicy,...Ue.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(mn.value)await X(`/api/app/agents/${tn.value}`,{method:`PATCH`,body:{approvalPolicy:$.approvalPolicy}});else if(en.value===`agent`){let e=await X(`/api/app/agents`,{method:`POST`,body:{...t,...s,computer:`auto`,envs:{vm:!0,cloud:!0,desktop:!0},execution:`profile`}});await vr();let n=v.value.find(t=>t.kind===`direct`&&t.memberIds[0]===e.agent.id);n&&await Gr(n.id)}else if(en.value===`editAgent`){let e={...t,...o,...r},n=await X(`/api/app/agents/${tn.value}`,{method:`PATCH`,body:fr(e)});if(!a())return;if(n.confirmationRequired){if(!window.confirm(n.confirmationMessage||`确认使用此模型?`))return;if(!n.confirmationTarget)throw Error(`模型确认响应无效,请重新加载。`);n=await X(`/api/app/agents/${tn.value}`,{method:`PATCH`,body:fr({...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,...Ue.value?{collaborationMode:$.mode}:{},autoReplyIds:$.autoReplyIds,maxReplyRounds:$.maxReplyRounds,...en.value===`editGroup`?{expectedRevision:fn.value?.revision??0}:{},memberIds:$.memberIds,memberRoles:$.memberRoles};await Gr((await X(en.value===`group`?`/api/app/conversations`:`/api/app/conversations/${tn.value}`,{method:en.value===`group`?`POST`:`PATCH`,body:fr(e)})).conversation.id)}if(!a())return;e===`editAgent`?an.value?.markSaved?.(i):Xr(),await vr(),q.value&&await pr(),n===ti&&!Sn&&await yr()}catch(e){a()&&(ut.value=e instanceof Error?e.message:`保存失败`)}finally{n===ti&&(dt.value=!1)}}let ti=0,ni=new Map;function ri(e,n,r,i){clearTimeout(ni.get(n)),ni.set(n,setTimeout(()=>{ni.delete(n),!(Sn||t.user?.id!==i||rt.value!==n)&&(e.cursor!==void 0&&zt.cursor>=e.cursor&&Nr?.readyState===EventSource.OPEN||yr(r,!0).catch(()=>{ut.value=`消息已发送,正在恢复同步`}))},e.cursor===void 0?0:2e3))}async function ii(){let e=b.value;if(!e||dt.value||!lt.value.trim()&&!pt.value.length)return;dt.value=!0,ut.value=``;let n=xe.value?.id,r=t.user?.id,i=ti,a=rt.value,o=Ee.value&&!xe.value?.goal?`goal`:void 0;try{let{deviceHost:s,warning:c}=await Jv(lt.value);if(Sn||b.value!==e||t.user?.id!==r||ti!==i||rt.value!==a)return;c&&(ut.value=c);let l=He(),u={requestId:l,conversationId:e.id,taskId:n,content:lt.value,attachments:pt.value,createdAt:Date.now(),afterSeq:Math.max(0,...y.value.map(e=>e.seq)),state:`queued`,body:{requestId:l,...o?{mode:o}:{},...Ue.value?{...e.kind===`direct`&&Ge.value?{projectId:Ge.value}:{},...Ke.value&&e.collaborationMode===`discussion`?{rounds:Ke.value}:{},...Ee.value&&e.collaborationMode===`discussion`?{coordinatorId:Xe.value||Qe.value?.id}:{}}:{},...xe.value?{taskId:xe.value.id}:{},content:lt.value,mentionIds:mt.value,fileIds:pt.value.map(e=>e.id),...s?{deviceHost:s}:{}}};return Ut([...Vt.value,u]),lt.value=``,pt.value=[],mt.value=[],Ee.value=!1,ai(u),!0}catch(e){!Sn&&t.user?.id===r&&ti===i&&rt.value===a&&(ut.value=e instanceof Error?e.message:`发送失败`)}finally{dt.value=!1}}async function ai(e,n){if(Ht.has(e.requestId))return;let r=t.user?.id,i=ti;Ht.add(e.requestId);try{Ut(Vt.value.map(t=>t.requestId===e.requestId?{...t,state:`sending`,error:void 0}:t));let a=await X(`/api/app/conversations/${e.conversationId}/messages`,{method:`POST`,body:e.body,...n?{signal:n}:{}});if(Sn||ti!==i||t.user?.id!==r)return;zr(),zt.acceptReceipt(a),v.value=zt.conversations;let o=zt.get(e.conversationId,e.taskId);return o&&b.value?.id===e.conversationId&&(xe.value?.id??``)===(e.taskId??``)&&(Rr(o),ri(a,rt.value,e.conversationId,r)),Ut(Vt.value.filter(t=>t.requestId!==e.requestId)),a}catch(n){if(!Sn&&ti===i&&t.user?.id===r){if(!Vt.value.some(t=>t.requestId===e.requestId))return;let t=n instanceof Error?n.message:`发送结果尚未确认`,r=n instanceof se&&n.status>=400&&n.status<500&&n.status!==408,i=Vt.value.map(n=>n.requestId===e.requestId?{...n,state:r?`failed`:`uncertain`,error:t}:n);try{Ut(i)}catch{Vt.value=i}ut.value=t}}finally{Ht.delete(e.requestId)}}function oi(e){let t=Vt.value.find(t=>t.requestId===e);t&&ai(t)}async function si(e,n){let r=b.value,i=t.user?.id,a=ti,o=rt.value,s=xe.value?.id;if(!r||r.archived||dt.value||ft.value||n.aborted)throw Error(`当前会话暂时无法发送语音,请稍后重试。`);let c=()=>!Sn&&!n.aborted&&t.user?.id===i&&ti===a&&rt.value===o&&Tn.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)};Mt=u,dt.value=!0;let d=!0;try{let{deviceHost:a,warning:u}=await Jv(e);if(!c())throw q4();u&&(ut.value=u);let p=He(),m={requestId:p,conversationId:r.id,taskId:s,content:e,attachments:[],createdAt:Date.now(),afterSeq:Math.max(0,...y.value.map(e=>e.seq)),state:`queued`,body:{requestId:p,content:e,mentionIds:[],fileIds:[],...s?{taskId:s}:{},...a?{deviceHost:a}:{},...Ue.value&&r.kind===`direct`&&Ge.value?{projectId:Ge.value}:{},...Ue.value&&Ke.value&&r.collaborationMode===`discussion`?{rounds:Ke.value}:{}}};Ut([...Vt.value,m]);let h=await ai(m,n);if(!c())throw q4();if(!h?.run?.id)throw Error(`发送结果尚未确认,请在聊天中查看。语音不会重复发送。`);let g=h.run.steeredInto??h.run.id;zr(),l.has(h.run.id)||l.set(h.run.id,h.run),zt.acceptReceipt(h),v.value=zt.conversations;let _=zt.get(r.id,s);return _&&Rr(_),ri(h,o,r.id,i),dt.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(q4()),m=()=>{if(!c())return p();if(Mr.value!==`online`)return d(Error(`连接中断,本次语音等待已结束,请在聊天中查看消息状态。`));let e=zt.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=s3(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([At,y,x,rt,Tn,()=>t.user?.id,Mr],m),u=setTimeout(()=>d(Error(`本轮仍未收到完整回复,本次语音等待已结束。可在聊天中继续查看进展。`)),6e5),m()})}finally{Mt===u&&(Mt=void 0),d&&ti===a&&(dt.value=!1)}}async function ci(e,t=b.value?.id){let n=v.value.find(e=>e.id===t);if(n){if(e===`archive`)return vi(n.archived?`restore`:`archive`,n.id);try{await X(`/api/app/conversations/${n.id}`,{method:`PATCH`,body:{pinned:!n.pinned}}),await vr(),await yr()}catch(e){ut.value=String(e)}}}function li(e){zt.acceptSectionReceipt(e),R.value=zt.sections,v.value=zt.conversations}async function ui(e,t){let n=e instanceof Error?e.message:`操作失败,请重试`;t&&B.value===t&&!(e instanceof se&&e.status===404)?H.value={id:t,message:n}:ut.value=n,e instanceof se&&e.status===404&&(B.value===t&&pi(),await vr().catch(()=>{}))}async function di(e){try{let t=await X(`/api/app/conversation-sections`,{method:`POST`,body:{requestId:He(),name:TI(R.value),...e?{conversationId:e}:{}}});li(t),t.section&&(H.value=void 0,B.value=t.section.id)}catch(e){await ui(e)}}function fi(e){H.value=void 0,B.value=e}function pi(){B.value=``,H.value=void 0}async function mi(e,t){if(wI(t,R.value,e)){H.value={id:e,message:`已有同名分组`};return}try{li(await X(`/api/app/conversation-sections/${e}`,{method:`PATCH`,body:{name:t}})),pi()}catch(t){await ui(t,e)}}async function hi(e,t){try{li(await X(`/api/app/conversation-sections/${e}`,{method:`PATCH`,body:{position:t}}))}catch(e){await ui(e)}}async function gi(e){try{li({cursor:(await X(`/api/app/conversation-sections/${e}`,{method:`DELETE`})).cursor,deletedSectionId:e})}catch(e){await ui(e)}}async function _i(e,t){try{li(await X(`/api/app/conversations/${e}/section`,{method:`PUT`,body:{sectionId:t}}))}catch(e){await ui(e)}}async function vi(e,t,n=!1){let r=v.value.find(e=>e.id===t);if(!r||wt.value)return;let i=n?Tt:Et;i.value=``,wt.value=t,Dt.value=e;try{let n=`/api/app/conversations/${t}/lifecycle`,i;if(e!==`restore`){let t=await X(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 和`:``}文件库中的文件会保留。`:`
|
|
280
|
+
聊天记录会保留,可在搜索的“已归档”中取消归档。`,!confirm(o))return;i=t.confirmationToken}await X(n,{method:`POST`,body:{action:e,...i?{confirmationToken:i}:{}}}),e===`delete`&&(v.value=v.value.filter(e=>e.id!==t),r.kind===`direct`&&(g.value=g.value.filter(e=>e.id!==r.memberIds[0])),Tn.value===t&&await c.replace(`/conversations`)),await vr(),Tn.value===t&&await yr()}catch(e){i.value=e instanceof Error?e.message:`操作失败,请重试`}finally{wt.value=``,Dt.value=void 0}}async function yi(e){if(fn.value)try{await X(`/api/app/conversations/${fn.value.id}/agents/${e}/stop`,{method:`POST`,body:{}}),await yr(),await vr()}catch(e){ut.value=e instanceof Error?e.message:`停止失败`}}async function bi(e){let t=de.value?.id??(b.value?.activeRunId&&!ue.value.has(b.value.activeRunId)?b.value.activeRunId:void 0)??xe.value?.activeRunId;if(t)try{await X(`/api/app/runs/${t}/${e}`,{method:`POST`,body:{}}),await yr(void 0,!0)}catch(e){ut.value=String(e)}}async function xi(e,t){if(!yt.value){yt.value=e.id,bt.value=``;try{let n=Kv(e.kind,t);await X(`/api/app/interactions/${encodeURIComponent(e.id)}/${n.action}`,{method:`POST`,body:n.body}),await yr(void 0,!0)}catch(n){if(bt.value=n instanceof Error?n.message:`审批答复失败,请重试`,e.kind===`approval`&&t===`full_access`)try{await yr(void 0,!0)}catch{}}finally{yt.value=``}}}async function Si(){let e=b.value;if(!e||Gt.value)return;Gt.value=!0;let t=zt.beginRead(),n=xe.value?.id,r=wn;try{let i=await X(`/api/app/conversations/${e.id}/messages?limit=50&toolDetails=lazy&before=${y.value[0]?.seq??0}${xe.value?`&taskId=${xe.value.id}`:``}`);if(r!==wn||b.value?.id!==e.id||xe.value?.id!==n)return;let a=zt.get(e.id,n);if(!a)return;let o=zt.finishRead(t,{...a,messages:i.messages,cursor:i.cursor});o.hasOlder=i.messages.length===50,y.value=o.messages,ht.value=o.hasOlder}catch(e){ut.value=String(e)}finally{zt.cancelRead(t),Gt.value=!1}}return f(()=>a.query.view,()=>{_r()}),f([Tn,En],()=>{et.set(rt.value,Ot.value?.filesSnapshot()??[]),nt.set(rt.value,Ft.value),pt.value=[],mt.value=[],lt.value=``,Zt=[],Qt=[],yr(),_r()}),f(()=>t.user?.id,(e,t)=>{e!==t&&(Be.value?.close(),Ue.value=!1,We.value=[],Ve.value++,ti++,_e++,j.value=[],M.value=void 0,N.value=[],P.value=``,dt.value=!1,Xr(),wn++,Lr(),lt.value=``,pt.value=[],mt.value=[],Ft.value=null,Zt=[],Qt=[],Nr?.close(),Nr=void 0,Fr=[],Pr!==void 0&&cancelAnimationFrame(Pr),Pr=void 0,xn=0,zt.hydrate({agents:[],conversations:[],details:[],cursor:0}),zt.selectedTasks.clear(),g.value=[],v.value=[],R.value=[],B.value=``,y.value=[],b.value=void 0,Ce.value=[],xe.value=null,x.value=null,E.value=[],A.value=null,et.clear(),nt.clear(),e?(jr=ke.beginWorkspace(),Wr()):jr.close())}),m(async()=>{window.addEventListener(`offline`,Hr),window.addEventListener(`online`,Ur),await Wr(!0),ge=setInterval(()=>{document.visibilityState===`visible`&&navigator.onLine&&(q.value||J.value)&&pr()},1e4)}),i(()=>{qe.value=null,window.removeEventListener(`offline`,Hr),window.removeEventListener(`online`,Ur);for(let e of ni.values())clearTimeout(e);ni.clear(),Sn=!0,jr.close(),_e++,ge&&clearInterval(ge),Nr?.close(),Pr!==void 0&&cancelAnimationFrame(Pr),wn++,Lr()}),(e,n)=>(u(),k(XF,{"remote-host":!!V(ot).selectedHostId,onSwitchHost:n[69]||=async()=>{V(t).switchHost(),await V(c).replace(`/conversations`)},ref_key:`shell`,ref:Dn,"server-name":V(t).serverIdentity?.displayName,"user-name":V(t).accountDisplayName,"user-avatar":V(t).user?.avatar,"is-admin":V(t).user?.role===`admin`,features:j.value,"upstream-ready":V(t).upstreamReady,"upstream-error":V(t).upstreamError,connection:V(Mr),theme:V(r).resolvedTheme,"theme-preference":V(r).theme,"sidebar-title":`聊天`,"sidebar-context-title":`聊天列表`,onLogout:V(t).logout,onToggleTheme:V(r).toggle,onSetTheme:V(r).setTheme,onCreateAgent:n[70]||=e=>qr(`agent`),onCreateGroup:n[71]||=e=>qr(`group`),onCreateSection:n[72]||=e=>di(),onBotSettingsChanged:at},{sidebar:S(()=>[W(eH,{conversations:v.value,agents:g.value,selected:Tn.value,"main-bot-id":ne.value,"bot-control":q.value,"directory-selected":re.value,"is-admin":V(t).user?.role===`admin`,"background-count":J.value?le.value.active:void 0,onMainBot:cn,onDirectory:hr,onSelect:Gr,onSettings:Kr,onPin:n[0]||=e=>ci(`pin`,e),onArchive:n[1]||=e=>ci(`archive`,e),onDelete:n[2]||=e=>vi(`delete`,e),sections:R.value,"sections-enabled":G.value,"collapsed-sections":te.value,"editing-section-id":B.value,"section-error":H.value,onToggleSection:V(ee),onCreateSection:di,onStartRename:fi,onRenameSection:mi,onCancelRename:pi,onMoveSection:hi,onDeleteSection:gi,onAssignSection:_i},null,8,[`conversations`,`agents`,`selected`,`main-bot-id`,`bot-control`,`directory-selected`,`is-admin`,`background-count`,`sections`,`sections-enabled`,`collapsed-sections`,`editing-section-id`,`section-error`,`onToggleSection`])]),"mobile-sidebar":S(()=>[W(eH,{conversations:v.value,agents:g.value,selected:Tn.value,"main-bot-id":ne.value,"bot-control":q.value,"directory-selected":re.value,"is-admin":V(t).user?.role===`admin`,"background-count":J.value?le.value.active:void 0,onMainBot:cn,onDirectory:hr,onSelect:Gr,onSettings:n[3]||=e=>Kr(e,!0),onPin:n[4]||=e=>ci(`pin`,e),onArchive:n[5]||=e=>ci(`archive`,e),onDelete:n[6]||=e=>vi(`delete`,e),sections:R.value,"sections-enabled":G.value,"collapsed-sections":te.value,"editing-section-id":B.value,"section-error":H.value,onToggleSection:V(ee),onCreateSection:di,onStartRename:fi,onRenameSection:mi,onCancelRename:pi,onMoveSection:hi,onDeleteSection:gi,onAssignSection:_i},null,8,[`conversations`,`agents`,`selected`,`main-bot-id`,`bot-control`,`directory-selected`,`is-admin`,`background-count`,`sections`,`sections-enabled`,`collapsed-sections`,`editing-section-id`,`section-error`,`onToggleSection`])]),default:S(()=>[re.value?(u(),F(`div`,T3,[P.value?(u(),F(`p`,E3,h(P.value),1)):z(``,!0),W(uH,{"is-admin":V(t).user?.role===`admin`,agents:g.value,"main-bot-id":ne.value,onProfile:ln,onBack:n[7]||=e=>V(c).push(`/conversations?view=chats`),onSelect:n[8]||=e=>gr(e),onEdit:n[9]||=e=>gr(e,!0),onCreate:n[10]||=e=>qr(`agent`),onManage:n[11]||=e=>Dn.value?.openSettings(`my-bots`)},null,8,[`is-admin`,`agents`,`main-bot-id`])])):z(``,!0),d(D(`div`,{ref_key:`dockRowEl`,ref:Rn,class:`conversation-with-computer`,style:s({"--workspace-dock-width":`${Bn.value}px`})},[D(`section`,{class:l([`workspace-chat`,{"workspace-chat--main":ie.value&&J.value,"workspace-chat--peer":Nt.value}]),"aria-label":`聊天`,onClickCapture:kr},[W(X2,{onPeerView:n[15]||=e=>Nt.value=e,onProfile:n[16]||=e=>b.value&&qr(b.value.kind===`direct`?`editAgent`:`editGroup`,b.value,!0),"current-goal-id":xe.value?.goal?.id,"activity-agents":g.value,onTaskDetails:n[17]||=e=>Le(),onRuntimeDetails:n[18]||=e=>Le(e),onOpenTask:Fe,onOpenChat:Ie,"conversation-id":Tn.value,onVisibleMessages:wr,ref_key:`timeline`,ref:Pt,identity:`${Tn.value}:${xe.value?.id??``}`,"loading-older":Gt.value,messages:Wt.value,title:rr.value,subtitle:V(MV)(b.value,{memberCount:tr.value.length,main:ie.value,managed:!!M.value?.enabled,thinking:pe.value,background:J.value,accountActive:le.value.active,connection:V(Mr)}),"header-main-bot":ie.value,"header-avatar-name":ir.value,"header-avatar":ar.value,"header-avatar-kind":b.value?.kind===`group`?`team`:`agent`,"header-avatar-members":or.value,"header-avatar-state":ie.value?pe.value?`working`:`idle`:nr.value?V(AV)(b.value,nr.value.id):`idle`,"header-avatar-activity-key":b.value?.lastSeq,"frosted-header":``,loading:ft.value,"has-older":ht.value&&!!b.value,"show-tools":Rt.value,"allow-branch":!1,thinking:pe.value||!!cr.value,"thinking-label":lr.value,"thinking-identity":ur.value,"agent-avatars":Object.fromEntries(g.value.map(e=>[e.id,e.avatar])),"show-assistant-identity":b.value?.kind===`group`,"agent-states":Object.fromEntries(tr.value.map(e=>[e.id,V(AV)(b.value,e.id)])),"mention-names":tr.value.map(e=>e.name),"empty-logo":!!b.value,"empty-title":b.value?`聊点什么`:`还没有聊天`,"empty-description":b.value?``:`创建机器人,或选择成员新建群聊。`,interaction:E.value[0]?{id:E.value[0].id,kind:E.value[0].kind,prompt:E.value[0].message,options:E.value[0].choices,reviewAvailable:E.value[0].reviewAvailable,approvalReview:E.value[0].approvalReview}:null,"interaction-busy":!!yt.value,"interaction-error":bt.value,"approval-agent-name":g.value.find(e=>e.id===E.value[0]?.agentId)?.name,"can-manage-permissions":V(t).user?.role===`admin`,onLoadOlder:Si,onQuote:n[19]||=e=>Ft.value=e,onPreview:Xt,onPreviewFile:Xt,onRetrySend:oi,onBrowserControl:$n,onCredentialDraft:Qn,onApprovalChoice:n[20]||=e=>E.value[0]&&xi(E.value[0],e),onClarify:n[21]||=e=>E.value[0]&&xi(E.value[0],e)},{"header-leading":S(()=>[b.value?(u(),F(`button`,{key:0,class:`workspace-list-back icon-button`,"aria-label":`返回 Bot 列表`,onClick:n[12]||=e=>V(c).push(q.value?`/conversations?view=chats`:`/conversations`)},[W(Y,{name:`chevron-left`})])):z(``,!0)]),"header-actions":S(()=>[b.value?(u(),F(`div`,D3,[b.value.kind===`group`&&Ce.value.length?(u(),F(`span`,O3,[D(`select`,{class:`task-picker`,"aria-label":`当前话题`,"aria-busy":Jn.value,disabled:Jn.value,value:xe.value?.id,onChange:Tr},[(u(!0),F(T,null,p(Ce.value,e=>(u(),F(`option`,{key:e.id,value:e.id},h(!e.messageCount&&e.titleSource===`automatic`?`新话题`:e.title),9,A3))),128)),D(`option`,{value:N6},`新建话题`)],40,k3),W(Y,{name:`chevron-down`,size:14})])):z(``,!0),b.value.kind===`group`?(u(),F(`button`,{key:1,class:`icon-button`,"aria-label":`群聊设置`,title:`群聊设置`,onClick:n[13]||=e=>qr(`editGroup`)},[W(Y,{name:`settings`})])):z(``,!0),D(`button`,{type:`button`,class:`icon-button`,"aria-label":`Inspector`,title:`Inspector`,"aria-pressed":Mn.value===`inspector`,onClick:n[14]||=e=>Xn(`inspector`)},[W(Y,{name:`bug`})],8,j3)])):z(``,!0)]),_:1},8,`current-goal-id.activity-agents.conversation-id.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(`.`)),ut.value?(u(),F(`p`,M3,[w(h(ut.value),1),D(`button`,{class:`icon-button`,onClick:n[22]||=e=>ut.value=``,"aria-label":`关闭错误`},[W(Y,{name:`close`})])])):z(``,!0),b.value?(u(),k(G4,{inert:Nt.value,style:s({visibility:Nt.value?`hidden`:void 0}),key:rt.value,ref_key:`composer`,ref:Ot,mode:`group`,"bot-layout":``,"draft-key":rt.value,"voice-bot-id":nr.value?.id,"voice-active":kt.value,"delivery-mode":Ee.value,"onUpdate:deliveryMode":n[31]||=e=>Ee.value=e,"delivery-available":b.value.kind===`group`&&!xe.value?.goal,"delivery-disabled":!$e.value||dt.value||ft.value||!!xe.value?.activeRunId,"delivery-disabled-reason":$e.value?``:`负责人需要是本机上未归档的 Bot`,disabled:b.value.archived||ft.value||b.value.id!==Tn.value,sending:dt.value,"stop-while-running":``,streaming:me.value,"tool-trace-visible":Rt.value,reference:Jt.value,"mention-options":b.value.kind===`group`?tr.value.map(e=>({id:e.id,label:e.name,insertText:`@${e.name} `})):[],onSend:$t,onStop:n[32]||=e=>bi(`stop`),onToolTraceToggle:n[33]||=e=>Rt.value=!Rt.value,onClearReference:n[34]||=e=>Ft.value=null,onError:n[35]||=e=>ut.value=e},{activity:S(()=>[de.value?.status===`queued`?(u(),F(`p`,N3,`正在等待可用机器人`)):b.value.collaborationWaiting?(u(),F(`p`,P3,[D(`button`,{onClick:n[23]||=e=>Be.value?.open(`collaboration`,b.value.memberIds[0])},`等待同伴回复 · 查看协作`)])):z(``,!0)]),"model-controls":S(({contextTarget:e,optionsTarget:r})=>[nr.value?(u(),k(nZ,{compact:``,"options-target":r,"context-target":e,key:`${V(t).user?.id}:${nr.value.id}`,agent:nr.value,context:A.value,running:pe.value,disabled:b.value.archived||ft.value||dt.value,onSaved:n[24]||=e=>{g.value=g.value.map(t=>t.id===e.id?e:t)}},null,8,[`options-target`,`context-target`,`agent`,`context`,`running`,`disabled`])):(u(),k(XY,{key:1,compact:``,snapshot:A.value},null,8,[`snapshot`]))]),"realtime-voice":S(({disabled:e})=>[W(o3,{disabled:e,"draft-key":rt.value,"bot-id":nr.value?.id,submit:si,onActiveChange:n[25]||=e=>kt.value=e,onError:n[26]||=e=>ut.value=e,onSettings:n[27]||=e=>Dn.value?.openSettings(`system-voice`)},null,8,[`disabled`,`draft-key`,`bot-id`])]),"before-input":S(()=>[b.value?.kind===`group`&&C.value.length?(u(),F(`aside`,F3,[(u(!0),F(T,null,p(C.value,e=>(u(),F(`button`,{key:e.id,type:`button`,onClick:t=>Gr(e.displayConversationId)},`等待你处理 · 前往执行 Bot 单聊`,8,I3))),128))])):z(``,!0),Ue.value?(u(),F(`div`,L3,[b.value.kind===`direct`&&We.value.some(e=>e.memberIds.includes(b.value.memberIds[0]))?(u(),F(`label`,R3,[n[74]||=w(`当前项目`,-1),d(D(`select`,{"onUpdate:modelValue":n[28]||=e=>Ge.value=e},[n[73]||=D(`option`,{value:``},`不关联项目`,-1),(u(!0),F(T,null,p(We.value.filter(e=>!e.archived&&e.memberIds.includes(b.value.memberIds[0])),e=>(u(),F(`option`,{key:e.id,value:e.id},h(e.name),9,z3))),128))],512),[[Ne,Ge.value]])])):z(``,!0),b.value.collaborationMode===`discussion`&&!Ee.value?(u(),F(`label`,B3,[n[76]||=w(`讨论轮数`,-1),d(D(`select`,{"onUpdate:modelValue":n[29]||=e=>Ke.value=e},[n[75]||=D(`option`,{value:void 0},`按消息要求`,-1),(u(),F(T,null,p(12,e=>D(`option`,{key:e,value:e},h(e)+` 轮`,9,V3)),64))],512),[[Ne,Ke.value]])])):z(``,!0),Ee.value&&b.value.collaborationMode===`discussion`?(u(),F(`label`,H3,[n[77]||=w(`交付负责人`,-1),d(D(`select`,{"onUpdate:modelValue":n[30]||=e=>Xe.value=e},[D(`option`,U3,h(Qe.value?.name??`请先授权负责人`),1),(u(!0),F(T,null,p(Ze.value,e=>(u(),F(`option`,{key:e.id,value:e.id},h(e.name),9,W3))),128))],512),[[Ne,Xe.value]])])):z(``,!0)])):z(``,!0)]),_:1},8,[`inert`,`style`,`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),Hn.value?(u(),F(T,{key:0},[W(eF,{class:`desktop-only-dock-resize`,label:`调整右侧栏宽度`,onDrag:Gn,onReset:qn}),D(`aside`,{class:`conversation-dock`,style:s(Vn.value)},[De.value?(u(),k(CQ,{key:`${xe.value?.id}:${De.value}`,goal:xe.value?.goal,assignments:Te.value,agents:g.value,"runtime-tasks":je.value,artifacts:Wt.value.find(e=>e.goalCard)?.goalCard?.artifacts,"runtime-only":De.value===`runtime`,"save-criteria":Or,onClose:mr,onStop:Er,onResume:Dr},null,8,[`goal`,`assignments`,`agents`,`runtime-tasks`,`artifacts`,`runtime-only`])):Mn.value===`inspector`&&b.value?(u(),k(hZ,{key:1,"conversation-id":b.value.id,"task-id":xe.value?.id,onClose:n[36]||=e=>Mn.value=void 0},null,8,[`conversation-id`,`task-id`])):en.value===`editAgent`&&pn.value?(u(),k(TY,{active:!Nn.value,onWorkspace:n[37]||=e=>{Pn.value=e,Nn.value=!0},"main-bot-id":ne.value,onConfigure:n[38]||=e=>{Yn()&&(Xr(),Dn.value?.openSettings(`my-bots`,void 0,e))},"initial-edit":!on.value,connection:V(Mr),onDesktop:n[39]||=(e,t,n)=>Zn(e,t,n,!1),onSettings:n[40]||=e=>Dn.value?.openLocalVm(),onOpenConversation:n[41]||=(e,t)=>{Yn()&&(Xr(),V(c).push({path:`/conversations/`+e,query:t?{taskId:t}:{}}))},ref_key:`botProfile`,ref:an,key:pn.value.id,"permission-control":q.value,onManagePermissions:n[42]||=e=>Dn.value?.openSettings(`my-bots`),agent:pn.value,draft:$,agents:g.value,conversations:v.value,"conversation-id":nn.value,"is-admin":V(t).user?.role===`admin`,"knowledge-enabled":Ue.value,busy:dt.value,error:ut.value,onClose:Xr,onSave:Zr,onChanged:it,onManageModels:n[43]||=e=>Dn.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),sn.value?(u(),k(zp,{key:1,"target-bot-id":sn.value,onClose:n[44]||=e=>sn.value=``,onChanged:un},null,8,[`target-bot-id`])):z(``,!0)],4),[[tt,!Nn.value&&!re.value]]),jn.value&&Pn.value?(u(),k(gt,{key:1,ref_key:`desktopViewer`,ref:kn,agents:[Pn.value],backend:Fn.value,host:In.value,"auto-take":An.value,onChanged:n[45]||=e=>yr(),onClose:n[46]||=e=>jn.value=!1},null,8,[`agents`,`backend`,`host`,`auto-take`])):z(``,!0),Nn.value&&Pn.value?(u(),k(CZ,{key:2,ref_key:`vmWorkspace`,ref:On,agents:g.value.filter(e=>e.execution===`computer`&&!e.archived&&!e.computerEnvironmentId),primary:Pn.value.id,onClose:n[47]||=e=>Nn.value=!1},null,8,[`agents`,`primary`])):z(``,!0),W(XQ,{section:`groups`,label:`搜索聊天`,items:St.value,tabbed:``,onOpen:n[48]||=e=>Tt.value=``,onSelect:Gr},{"item-actions":S(({item:e})=>[Ct.value.has(e.id)?(u(),F(`div`,G3,[D(`button`,{type:`button`,class:`search-restore`,"aria-label":`取消归档:${e.title}`,disabled:!!wt.value,onClick:t=>vi(`restore`,e.id,!0)},h(wt.value===e.id&&Dt.value===`restore`?`恢复中…`:`取消归档`),9,K3),D(`button`,{type:`button`,class:`search-delete`,"aria-label":`删除聊天:${e.title}`,disabled:!!wt.value,"aria-busy":wt.value===e.id&&Dt.value===`delete`,onClick:t=>vi(`delete`,e.id,!0)},[W(Y,{name:`trash`,size:15}),w(h(wt.value===e.id&&Dt.value===`delete`?`删除中…`:`删除`),1)],8,q3)])):z(``,!0)]),footer:S(()=>[Tt.value?(u(),F(`p`,J3,h(Tt.value),1)):z(``,!0)]),_:1},8,[`items`]),(u(),k(L,{to:`body`},[Et.value?(u(),F(`div`,Y3,[D(`span`,null,h(Et.value),1),D(`button`,{type:`button`,"aria-label":`关闭聊天操作提示`,onClick:n[49]||=e=>Et.value=``},[W(Y,{name:`close`,size:16})])])):z(``,!0)])),It.value?(u(),k(fq,{key:3,item:It.value,items:Kt.value,onClose:n[50]||=e=>It.value=null},null,8,[`item`,`items`])):z(``,!0),W(v3,{modelValue:Lt.value,"onUpdate:modelValue":n[51]||=e=>Lt.value=e,images:qt.value},null,8,[`modelValue`,`images`]),(u(),k(L,{to:`body`},[en.value&&en.value!==`editAgent`?(u(),F(`dialog`,{key:0,ref_key:`dialogElement`,ref:rn,class:`editor`,"aria-labelledby":`conversation-editor-title`,onCancel:n[68]||=Z(e=>!dt.value&&Xr(),[`prevent`])},[en.value===`agent`&&q.value?(u(),k(RH,{key:0,busy:dt.value,error:ut.value,onClose:Xr,onSubmit:$r},null,8,[`busy`,`error`])):(u(),F(`form`,{key:1,onSubmit:Z(ei,[`prevent`])},[D(`header`,null,[D(`h2`,X3,h(en.value===`agent`?`创建 Bot`:en.value===`group`?`创建团队`:`群聊设置`),1),D(`button`,{type:`button`,class:`icon-button`,"aria-label":`关闭`,onClick:Xr},[W(Y,{name:`close`,size:18})])]),D(`div`,Z3,[ut.value?(u(),F(`p`,Q3,h(ut.value),1)):z(``,!0),en.value===`editGroup`?(u(),k(gn,{key:1,kind:`conversations`,"target-id":tn.value,onDirtyChange:n[52]||=e=>Jr.value=e,onBusyChange:n[53]||=e=>Yr.value=e},null,8,[`target-id`])):z(``,!0),D(`label`,null,[n[78]||=w(`名称`,-1),d(D(`input`,{"onUpdate:modelValue":n[54]||=e=>$.name=e,readonly:mn.value,required:``,maxlength:`100`},null,8,$3),[[Q,$.name]])]),en.value===`group`?(u(),F(`details`,e6,[n[79]||=D(`summary`,null,`从团队模板选择(可选)`,-1),W(w3,{selected:hn.value,available:g.value.filter(e=>!e.archived&&!e.temporaryGoalId).length,onSelect:yn},null,8,[`selected`,`available`])])):z(``,!0),mn.value?(u(),F(`p`,t6,`引用的机器人配置由远端管理,请在远端修改名称、头像和角色规则。`)):z(``,!0),dr.value&&!mn.value?(u(),F(T,{key:4},[D(`button`,{class:`avatar-summary`,type:`button`,"aria-expanded":ze.value,onClick:n[55]||=e=>ze.value=!ze.value},[W(Ye,{name:$.name||`新 Bot`,avatar:$.avatar,size:48,animated:!1},null,8,[`name`,`avatar`]),n[80]||=D(`span`,{class:`avatar-summary__copy`},[w(`Bot 头像`),D(`small`,null,`点击调整外形或上传图片`)],-1),W(Y,{name:`edit`,size:16})],8,n6),ze.value?(u(),k(Kn,{key:`${en.value}:${tn.value}`,profile:Yt.value,embedded:``,"show-name":!1,"show-default-model":!1,"show-actions":!1,onAvatarChange:n[56]||=e=>$.avatar=e},null,8,[`profile`])):z(``,!0),D(`label`,null,[n[81]||=w(`一句话职责`,-1),d(D(`input`,{"onUpdate:modelValue":n[57]||=e=>$.job=e,maxlength:`120`,placeholder:`例如:检查代码正确性,给出有依据的修改建议`},null,512),[[Q,$.job]])])],64)):en.value===`editGroup`?(u(),F(`div`,r6,[W(Me,{name:$.name,members:V(kV)($.memberIds,g.value,en.value===`editGroup`?fn.value:void 0),size:64},null,8,[`name`,`members`]),n[82]||=D(`small`,null,`群聊头像由成员头像自动组合,随成员头像更新。`,-1)])):z(``,!0),dr.value?(u(),F(`label`,i6,[n[83]||=w(`角色提示词与规则`,-1),d(D(`textarea`,{"onUpdate:modelValue":n[58]||=e=>$.instructions=e,readonly:mn.value,rows:`6`,maxlength:`24000`,placeholder:dr.value?`例如:你是代码审查员。重点检查正确性、边界情况和测试证据。`:`所有成员共同遵守的协作规则`},null,8,a6),[[Q,$.instructions]])])):z(``,!0),dr.value&&!mn.value?(u(),F(T,{key:7},[D(`p`,o6,[W(Y,{name:`brain`,size:16}),n[84]||=w(`模型:跟随服务器默认配置`,-1),n[85]||=D(`small`,null,`创建后可在 Bot 资料中调整模型与思考等级。`,-1)]),Ue.value?(u(),F(`details`,s6,[n[87]||=D(`summary`,null,`高级设置`,-1),D(`label`,c6,[D(`span`,null,[d(D(`input`,{"onUpdate:modelValue":n[59]||=e=>$.memoryEnabled=e,type:`checkbox`},null,512),[[Je,$.memoryEnabled]]),n[86]||=w(`自动记录长期事实`,-1)])]),D(`small`,null,h(q.value?`继承服务器已开放的协作与执行能力,可在 Bot 设置中收紧。`:`组队和同伴通信默认可用,使用服务器已有授权。`),1)])):z(``,!0)],64)):z(``,!0),_n.value?(u(),F(`fieldset`,l6,[n[88]||=D(`legend`,null,`角色分配`,-1),(u(!0),F(T,null,p(_n.value.roles,(e,t)=>(u(),F(`label`,{key:e.name},[w(h(e.name)+h(e.host?` · 管理员`:``)+` `,1),D(`select`,{value:$.memberIds[t],"aria-label":`${e.name}对应的机器人`,onChange:e=>bn(t,e.target.value)},[(u(!0),F(T,null,p(g.value.filter(e=>!e.archived&&!e.temporaryGoalId),e=>(u(),F(`option`,{key:e.id,value:e.id},h(e.name),9,d6))),128))],40,u6),D(`small`,null,h(e.description),1)]))),128)),n[89]||=D(`small`,null,`角色分工仅在本群生效,聊天中保留机器人的名称和头像。`,-1)])):dr.value?z(``,!0):(u(),F(`fieldset`,f6,[D(`legend`,null,`选择成员 · `+h($.memberIds.length)+`/8`,1),(u(!0),F(T,null,p(g.value.filter(e=>!e.temporaryGoalId&&(!e.archived||en.value===`editGroup`&&fn.value?.memberIds.includes(e.id))),e=>(u(),F(`label`,{key:e.id,class:`member-choice`},[d(D(`input`,{"onUpdate:modelValue":n[60]||=e=>$.memberIds=e,type:`checkbox`,value:e.id,disabled:dt.value||!$.memberIds.includes(e.id)&&$.memberIds.length>=8},null,8,p6),[[Je,$.memberIds]]),W(Ye,{name:e.name,avatar:e.avatar,size:36,animated:!1},null,8,[`name`,`avatar`]),D(`span`,m6,[D(`strong`,null,h(e.name),1),D(`small`,null,h(e.job||e.description||e.instructions.slice(0,80)||`尚未填写职责`),1)])]))),128)),en.value===`group`&&g.value.filter(e=>!e.archived&&!e.temporaryGoalId).length<2?(u(),F(`small`,h6,`至少需要两个机器人才能创建群聊。`)):z(``,!0),en.value===`editGroup`?(u(),F(`small`,g6,`可增减成员,最多 8 位。目标进行时不能移除目标负责人;其他成员可按需调整。`)):z(``,!0),(u(!0),F(T,null,p(g.value.filter(e=>fn.value?.activeAgentStates?.[e.id]),e=>(u(),F(`button`,{key:`stop:${e.id}`,type:`button`,onClick:t=>yi(e.id)},`停止 `+h(e.name),9,_6))),128))])),en.value===`editGroup`&&Object.keys($.memberRoles).length?(u(),F(`fieldset`,v6,[n[91]||=D(`legend`,null,`角色分工`,-1),(u(!0),F(T,null,p($.memberRoles,(e,t)=>(u(),F(`p`,{key:t},[w(h(g.value.find(e=>e.id===t)?.name)+` · `+h(e.name),1),n[90]||=D(`br`,null,null,-1),D(`small`,null,h(e.description),1)]))),128))])):z(``,!0),dr.value?z(``,!0):(u(),F(T,{key:11},[D(`label`,null,[n[92]||=w(`交付负责人`,-1),d(D(`select`,{"onUpdate:modelValue":n[61]||=e=>$.administratorId=e,required:``},[(u(!0),F(T,null,p(g.value.filter(e=>$.memberIds.includes(e.id)),e=>(u(),F(`option`,{key:e.id,value:e.id},h(e.name),9,y6))),128))],512),[[Ne,$.administratorId]])]),$.mode===`discussion`?(u(),F(`small`,b6,`讨论时成员平等;启动交付目标时由所选负责人协调。`)):z(``,!0),D(`label`,null,[n[93]||=w(`群规则(可选)`,-1),d(D(`textarea`,{"onUpdate:modelValue":n[62]||=e=>$.instructions=e,rows:`3`,maxlength:`24000`,placeholder:`例如:回答简洁,重要结论注明来源`},null,512),[[Q,$.instructions]])]),en.value===`group`?(u(),F(`p`,x6,`创建后即可聊天。需要交付具体结果时,再开启交付目标。`)):z(``,!0),D(`label`,null,[n[96]||=w(`协作方式`,-1),d(D(`select`,{"onUpdate:modelValue":n[63]||=e=>$.mode=e},[Ue.value?(u(),F(`option`,S6,`平等讨论`)):z(``,!0),n[94]||=D(`option`,{value:`host`},`管理员协调`,-1),n[95]||=D(`option`,{value:`free`},`自由协作`,-1)],512),[[Ne,$.mode]]),D(`small`,null,h($.mode===`discussion`?`成员平等参与,按本条消息要求讨论。`:$.mode===`host`?`由负责人安排成员回复,并汇总结果。`:`成员按提及与自动回复设置参与协作。`),1)]),D(`details`,C6,[n[100]||=D(`summary`,null,`高级协作设置`,-1),Ue.value?(u(),F(`button`,{key:0,type:`button`,onClick:n[64]||=e=>Be.value?.open(`projects`,$.memberIds[0],fn.value?.projectId)},`关联项目与共享记忆`)):z(``,!0),$.mode===`free`?(u(),F(`fieldset`,w6,[n[97]||=D(`legend`,null,`未 @ 时自动回复`,-1),(u(!0),F(T,null,p(g.value.filter(e=>$.memberIds.includes(e.id)),e=>(u(),F(`label`,{key:e.id},[d(D(`input`,{"onUpdate:modelValue":n[65]||=e=>$.autoReplyIds=e,type:`checkbox`,value:e.id},null,8,T6),[[Je,$.autoReplyIds]]),w(h(e.name),1)]))),128))])):z(``,!0),$.mode===`discussion`?z(``,!0):(u(),F(`label`,E6,[D(`input`,{type:`checkbox`,checked:$.maxReplyRounds===-1,onChange:n[66]||=e=>$.maxReplyRounds=e.target.checked?-1:3},null,40,D6),n[98]||=w(`不限制自动协作轮数`,-1)])),$.mode!==`discussion`&&$.maxReplyRounds!==-1?(u(),F(`label`,O6,[n[99]||=w(`自动协作轮数`,-1),d(D(`input`,{"onUpdate:modelValue":n[67]||=e=>$.maxReplyRounds=e,type:`number`,min:`1`,max:`100`,required:``},null,512),[[Q,$.maxReplyRounds,void 0,{number:!0}]])])):z(``,!0)])],64))]),D(`footer`,null,[D(`button`,{class:`quiet-button`,type:`button`,onClick:Xr},`取消`),mn.value?z(``,!0):(u(),F(`button`,{key:0,class:`solid-button`,disabled:dt.value||!dr.value&&($.memberIds.length<(en.value===`group`?2:1)||$.memberIds.length>8)},h(dt.value?`保存中…`:en.value===`agent`?`创建 Bot`:en.value===`group`?`创建团队`:`保存`),9,k6))])],32))],544)):z(``,!0)])),Ue.value?(u(),k(ae,{key:4,ref_key:`knowledgePanel`,ref:Be,agents:g.value,conversations:v.value,"conversation-id":b.value?.id,"task-id":xe.value?.id,assignments:Te.value,goal:xe.value?.goal,revision:Ve.value,onChanged:it},null,8,[`agents`,`conversations`,`conversation-id`,`task-id`,`assignments`,`goal`,`revision`])):z(``,!0)]),_:1},8,[`remote-host`,`server-name`,`user-name`,`user-avatar`,`is-admin`,`features`,`upstream-ready`,`upstream-error`,`connection`,`theme`,`theme-preference`,`onLogout`,`onToggleTheme`,`onSetTheme`]))}}),F6=t({default:()=>I6}),I6=H(P6,[[`__scopeId`,`data-v-7d2687fc`]]);export{gn as S,Ms as _,lg as a,Pr as b,Yp as c,Gp as d,I6 as default,Kp as f,Pu as g,Sp as h,Qg as i,Jp as l,zp as m,Wv as n,Rh as o,Wp as p,iv as r,wh as s,F6 as t,qp as u,rs as v,ar as x,Qo as y};
|
|
281
|
+
//# sourceMappingURL=ConversationsView-kztie5lF.js.map
|