@lsamien/yaovi 0.1.1 → 0.1.2
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 +23 -3
- package/desktop/main.mjs +18 -9
- package/dist/assets/{AboutDialog-CBKv505Y.js → AboutDialog-CJ9tCjSs.js} +2 -2
- package/dist/assets/AboutDialog-CJ9tCjSs.js.map +1 -0
- package/dist/assets/{BotAutomationsView-S3aHciek.js → BotAutomationsView-CsoI3js3.js} +2 -2
- package/dist/assets/{BotAutomationsView-S3aHciek.js.map → BotAutomationsView-CsoI3js3.js.map} +1 -1
- package/dist/assets/{BotControlSettingsPanel-DJF4oA6g.js → BotControlSettingsPanel-DIuBZlLu.js} +2 -2
- package/dist/assets/{BotControlSettingsPanel-DJF4oA6g.js.map → BotControlSettingsPanel-DIuBZlLu.js.map} +1 -1
- package/dist/assets/{BotPluginsDialog-BVOQ3DTp.js → BotPluginsDialog-BsGszDMH.js} +2 -2
- package/dist/assets/{BotPluginsDialog-BVOQ3DTp.js.map → BotPluginsDialog-BsGszDMH.js.map} +1 -1
- package/dist/assets/{BotSettingsPanel-CEH3KSAO.js → BotSettingsPanel-j3ThYgt2.js} +3 -3
- package/dist/assets/{BotSettingsPanel-CEH3KSAO.js.map → BotSettingsPanel-j3ThYgt2.js.map} +1 -1
- package/dist/assets/{ComputerPanel-CC-xkAxr.js → ComputerPanel-DdlgOm-B.js} +2 -2
- package/dist/assets/{ComputerPanel-CC-xkAxr.js.map → ComputerPanel-DdlgOm-B.js.map} +1 -1
- package/dist/assets/{ComputerViewerView-CEQrOmy7.js → ComputerViewerView-I3adPI6O.js} +2 -2
- package/dist/assets/{ComputerViewerView-CEQrOmy7.js.map → ComputerViewerView-I3adPI6O.js.map} +1 -1
- package/dist/assets/ConversationsView-CBhzg-9w.css +1 -0
- package/dist/assets/{ConversationsView-CzFWn-79.js → ConversationsView-CxVFk5sQ.js} +73 -73
- package/dist/assets/ConversationsView-CxVFk5sQ.js.map +1 -0
- package/dist/assets/{DevicePairingDialog-ByYk05DC.js → DevicePairingDialog-C307ARt-.js} +2 -2
- package/dist/assets/{DevicePairingDialog-ByYk05DC.js.map → DevicePairingDialog-C307ARt-.js.map} +1 -1
- package/dist/assets/{LocalVmSettingsPanel-DBkqouAU.js → LocalVmSettingsPanel-Zs7CiXdf.js} +2 -2
- package/dist/assets/{LocalVmSettingsPanel-DBkqouAU.js.map → LocalVmSettingsPanel-Zs7CiXdf.js.map} +1 -1
- package/dist/assets/{ProviderLoginDialog-DdPS62uM.js → ProviderLoginDialog-D3mqdAlo.js} +2 -2
- package/dist/assets/{ProviderLoginDialog-DdPS62uM.js.map → ProviderLoginDialog-D3mqdAlo.js.map} +1 -1
- package/dist/assets/{RunnerSettingsPanel-gzA2xzOg.js → RunnerSettingsPanel-DjMGnXGP.js} +2 -2
- package/dist/assets/{RunnerSettingsPanel-gzA2xzOg.js.map → RunnerSettingsPanel-DjMGnXGP.js.map} +1 -1
- package/dist/assets/{StandaloneDialog-B9HCNEFb.js → StandaloneDialog-BXCK22Dx.js} +2 -2
- package/dist/assets/{StandaloneDialog-B9HCNEFb.js.map → StandaloneDialog-BXCK22Dx.js.map} +1 -1
- package/dist/assets/{UpdateCheckDialog-djkXTQgD.js → UpdateCheckDialog-DAY0VEQm.js} +2 -2
- package/dist/assets/{UpdateCheckDialog-djkXTQgD.js.map → UpdateCheckDialog-DAY0VEQm.js.map} +1 -1
- package/dist/assets/{UsageView-DFaWBB40.js → UsageView-DNwG8LAx.js} +2 -2
- package/dist/assets/{UsageView-DFaWBB40.js.map → UsageView-DNwG8LAx.js.map} +1 -1
- package/dist/assets/{WorkspaceKnowledgePanel-In2a_s_z.js → WorkspaceKnowledgePanel-hy_IkIJI.js} +2 -2
- package/dist/assets/{WorkspaceKnowledgePanel-In2a_s_z.js.map → WorkspaceKnowledgePanel-hy_IkIJI.js.map} +1 -1
- package/dist/assets/{WorkspaceRoutinesPanel-zOxFoqML.js → WorkspaceRoutinesPanel-B7PkBP7x.js} +2 -2
- package/dist/assets/{WorkspaceRoutinesPanel-zOxFoqML.js.map → WorkspaceRoutinesPanel-B7PkBP7x.js.map} +1 -1
- package/dist/assets/{WorkstreamsView-HvlivC3b.js → WorkstreamsView-BeE2TRXK.js} +2 -2
- package/dist/assets/{WorkstreamsView-HvlivC3b.js.map → WorkstreamsView-BeE2TRXK.js.map} +1 -1
- package/dist/assets/{index-BPE9bBla.js → index-D11cgXI9.js} +3 -3
- package/dist/assets/{index-BPE9bBla.js.map → index-D11cgXI9.js.map} +1 -1
- package/dist/assets/{pdf-Q2a37aK5.js → pdf-BjTcV6As.js} +2 -2
- package/dist/assets/{pdf-Q2a37aK5.js.map → pdf-BjTcV6As.js.map} +1 -1
- package/dist/index.html +1 -1
- package/dist-server/server/botControl.js +1 -1
- package/dist-server/server/desktopEnvironments.js +10 -9
- package/dist-server/server/desktopHostProtocol.js +1 -1
- package/dist-server/server/workspacePrompt.js +2 -2
- package/dist-server/shared/botEnvironment.js +10 -4
- package/dist-server/shared/fileTransferEndpoint.mjs +5 -5
- package/dist-server/shared/hostPaths.mjs +14 -4
- package/package.json +3 -2
- package/release.json +3 -3
- package/dist/assets/AboutDialog-CBKv505Y.js.map +0 -1
- package/dist/assets/ConversationsView-B6JNGLt_.css +0 -1
- package/dist/assets/ConversationsView-CzFWn-79.js.map +0 -1
package/dist/assets/{WorkspaceKnowledgePanel-In2a_s_z.js → WorkspaceKnowledgePanel-hy_IkIJI.js}
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import{A as e,B as t,D as n,Dt as r,F as i,G as a,H as o,L as s,M as c,Tt as l,W as u,_ as d,a as f,b as p,d as m,et as h,f as g,m as _,ot as v,p as y,t as b,u as x,v as S}from"./_plugin-vue_export-helper-BumXM028.js";import{G as C,J as w,M as T,V as E,W as D,r as O,w as k}from"./index-BPE9bBla.js";import{c as A,l as j,o as M,r as N,t as ee,u as P}from"./ProviderLoginDialog-DdPS62uM.js";import{n as F}from"./id-mzBN_4Vw.js";var I={xmlns:`http://www.w3.org/2000/svg`,"xmlns:xlink":`http://www.w3.org/1999/xlink`,viewBox:`0 0 512 512`},L=p({name:`ChevronForwardOutline`,render:function(e,t){return i(),_(`svg`,I,t[0]||=[m(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`48`,d:`M184 112l144 144l-144 144`},null,-1)])}}),R={class:`connection-network`},z=[`disabled`],B={class:`connection-heading`},te={class:`hint`},V={key:0,role:`alert`},H={key:1,role:`status`},ne={key:3},re=[`disabled`],U=[`disabled`],W=b(p({__name:`ConnectionNetworkPanel`,props:{provider:{},name:{},bot:{},canLogin:{type:Boolean}},emits:[`back`,`login`,`changed`,`dirty-change`,`busy-change`],setup(e,{expose:t,emit:n}){let a=e,s=n,l=h(),u=h({mode:`inherit`}),f=h(!1),p=h(!1),v=h(``),b=h(``),C=x(()=>!!l.value&&JSON.stringify(u.value)!==JSON.stringify(l.value.connections[a.provider]??{mode:`inherit`}));o(C,e=>s(`dirty-change`,e)),o(f,e=>s(`busy-change`,e));async function w(){try{l.value=await j.get(a.bot),u.value={...l.value.connections[a.provider]??{mode:`inherit`}}}catch(e){v.value=e instanceof Error?e.message:`读取失败`}}function E(){!f.value&&(!C.value||window.confirm(`放弃尚未保存的网络更改?`))&&s(`back`)}async function D(e=!1){f.value=!0,v.value=``;try{l.value=await j.save(l.value.revision,u.value,a.provider,a.bot),b.value=`网络设置已保存,从下一轮任务或新登录生效。`,s(`changed`),e&&s(`login`)}catch(e){v.value=e instanceof Error?e.message:`保存失败`}finally{f.value=!1}}return c(w),t({reset:()=>{l.value&&(u.value={...l.value.connections[a.provider]??{mode:`inherit`}}),b.value=``}}),(t,n)=>(i(),_(`section`,R,[m(`button`,{class:`back`,type:`button`,disabled:f.value,onClick:E},[S(T,{name:`chevron-left`,size:16}),n[4]||=d(`返回模型连接`,-1)],8,z),m(`div`,B,[m(`h3`,null,r(e.name),1),m(`span`,null,r(e.canLogin?`尚未登录`:`模型连接`),1)]),m(`p`,te,`用于登录、自动续期、模型列表与模型请求。`+r(e.bot?`继承服务器凭据时沿用服务器连接的网络;此处配置用于本 Bot 独立保存的凭据。`:``),1),v.value?(i(),_(`p`,V,r(v.value),1)):y(``,!0),b.value?(i(),_(`p`,H,r(b.value),1)):y(``,!0),l.value?(i(),g(A,{key:2,modelValue:u.value,"onUpdate:modelValue":n[0]||=e=>u.value=e,view:l.value,provider:e.provider,bot:e.bot,disabled:f.value,onBusy:n[1]||=e=>p.value=e},null,8,[`modelValue`,`view`,`provider`,`bot`,`disabled`])):y(``,!0),l.value?(i(),_(`footer`,ne,[m(`button`,{type:`button`,disabled:f.value||!C.value,onClick:n[2]||=t=>u.value={...l.value.connections[e.provider]??{mode:`inherit`}}},`取消更改`,8,re),m(`button`,{class:`primary`,type:`button`,disabled:f.value||p.value||!C.value&&!e.canLogin||u.value.mode===`proxy`&&!u.value.proxyId,onClick:n[3]||=t=>D(!!e.canLogin)},r(f.value?`正在保存…`:e.canLogin?`保存并登录`:`保存更改`),9,U)])):y(``,!0)]))}}),[[`__scopeId`,`data-v-34276c52`]]),G=[`light`,`standard`,`complex`,`deep`],ie={light:`轻量`,standard:`常规`,complex:`复杂`,deep:`深度`},ae={light:`问候、短答、单步查询,以及目标清晰、范围有限的操作。`,standard:`常规多步任务、一般分析与内容整理。`,complex:`跨模块修改、复杂排查和有多项约束的工作。`,deep:`高难推理、系统性研究与架构设计。`},oe=[`low`,`medium`,`high`,`xhigh`,`max`],K=[`none`,`minimal`,...oe,`ultra`],q=e=>K.indexOf(e),J={new:`新任务`,continue:`继续未完成任务`,correction:`纠正原任务`,unclear:`上下文不足`};function Y(e){return e===`gpt-6-luna`?`light`:e===`gpt-6.1-sol`?`complex`:e===`gpt-6-astra`?`deep`:`standard`}function X(e){return e.tier??Y(e.model)}function se(e){return{preserveTaskAbility:e.preserveTaskAbility!==!1,maxReasoningEffort:e.maxReasoningEffort??`high`,fallbackReasoningEffort:e.fallbackReasoningEffort??`medium`}}function Z(e,t,n){if(!e.reasoningKnown)return`default`;if(!e.reasoningEfforts.length)return`none`;let r=e.reasoningEfforts.filter(e=>q(e)>=0&&q(e)<=q(n)).sort((e,t)=>q(e)-q(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(q(t),q(`low`)),q(n)),a=t===`none`?r:r.filter(e=>e!==`none`);return a.length?a.find(e=>q(e)>=i)??null:null}var ce=`typesafe`,le=.55;function ue(e){return e?.provider===`auto`&&e?.model===`auto`}var de=()=>({provider:null,model:null,reasoningEffort:null,fastMode:null,auxiliary:null,fallback:null,autoPool:null}),fe={none:`关闭`,minimal:`最小`,low:`低`,medium:`中`,high:`高`,xhigh:`极高`,max:`最大`,ultra:`Ultra`},pe={normal:`普通`,fast:`快速`,auto:`每轮开始加速`,cold:`首次回复加速`};function me(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 he=[`jev`,`jeff`],Q={jev:`Jev(云端 TypeSafe)`,jeff:`Jeff(本机)`};function ge(e){return e===`jeff`?`Jeff`:`Jev`}var $=`http://127.0.0.1:8765`,_e=`jeff-latest`,ve={class:`auto-route`,"aria-label":`Auto 选模依据`},ye={key:0},be={class:`auto-route__detail`},xe={key:0},Se={key:1},Ce={key:2},we=b(p({__name:`AutoRouteNotice`,props:{route:{}},setup(e){let t=e=>e==="default"?`提供方默认`:fe[e]??e,n={jev:`Jev 自动判断`,jeff:`Jeff 自动判断`,fallback:`回退组合`,single:`仅剩一个候选`};return(a,o)=>(i(),_(`details`,ve,[m(`summary`,null,[d(`Auto · `+r(e.route.model)+` · `+r(t(e.route.reasoningEffort))+r([`none`,`default`].includes(e.route.reasoningEffort)?``:`思考`),1),e.route.reason!==`jev`&&e.route.reason!==`jeff`?(i(),_(`span`,ye,` · 回退`)):y(``,!0)]),m(`div`,be,[m(`p`,null,r(e.route.explanation),1),m(`dl`,null,[m(`div`,null,[o[0]||=m(`dt`,null,`决策来源`,-1),m(`dd`,null,r(n[e.route.reason]),1)]),e.route.taskTier?(i(),_(`div`,xe,[o[1]||=m(`dt`,null,`任务能力`,-1),m(`dd`,null,r(v(ie)[e.route.taskTier])+r(e.route.requestedTier&&e.route.requestedTier!==e.route.taskTier?`(本轮判断 ${v(ie)[e.route.requestedTier]},保留任务下限)`:``),1)])):y(``,!0),e.route.continuity?(i(),_(`div`,Se,[o[2]||=m(`dt`,null,`任务关系`,-1),m(`dd`,null,r(v(J)[e.route.continuity]),1)])):y(``,!0),m(`div`,null,[o[3]||=m(`dt`,null,`判断置信度`,-1),m(`dd`,null,r(Math.round(e.route.confidence*100))+`%`,1)]),e.route.requestedEffort&&e.route.requestedEffort!==e.route.reasoningEffort?(i(),_(`div`,Ce,[o[4]||=m(`dt`,null,`思考适配`,-1),m(`dd`,null,r(t(e.route.requestedEffort))+` → `+r(t(e.route.reasoningEffort)),1)])):y(``,!0),m(`div`,null,[o[5]||=m(`dt`,null,`模型服务`,-1),m(`dd`,null,r(e.route.provider),1)])])])]))}}),[[`__scopeId`,`data-v-6a520af2`]]),Te=[`aria-busy`],Ee={class:`jev-title`},De={class:`jev-toggle`},Oe=[`disabled`],ke={key:0,class:`error`,role:`alert`},Ae={key:1,role:`status`},je=[`disabled`],Me=[`value`],Ne={class:`jev-fields`},Pe=[`disabled`],Fe=[`disabled`],Ie={key:3},Le=[`placeholder`,`disabled`],Re={class:`jev-roles`},ze={class:`jev-model-name`},Be={key:0,class:`error`},Ve={class:`sr-only`},He=[`onUpdate:modelValue`,`aria-label`,`disabled`],Ue=[`value`],We={key:0},Ge=[`open`],Ke=[`disabled`],qe={class:`jev-model-list`},Je=[`checked`,`disabled`,`onChange`],Ye={key:0},Xe=[`disabled`,`onChange`],Ze={class:`jev-continuity`},Qe=[`disabled`],$e=[`value`],et={class:`jev-advanced`},tt={class:`jev-fields`},nt=[`disabled`],rt=[`value`],it=[`disabled`],at={key:0},ot=[`disabled`],st=[`value`],ct=[`disabled`],lt=[`value`],ut=[`value`],dt=[`onUpdate:modelValue`,`disabled`],ft={class:`jev-preview`},pt=[`disabled`],mt=[`disabled`],ht={key:0,class:`error`,role:`alert`},gt={"aria-live":`polite`},_t=[`disabled`],vt=[`disabled`],yt=b(p({__name:`JevAutoPanel`,props:{models:{},disabled:{type:Boolean}},emits:[`dirty-change`,`busy-change`],setup(e,{expose:t,emit:n}){let l=e,u=n,p=h(),b=h([]),S=h(!1),w=h([]),T=h(``),O=h(``),k=h(`jev`),A=h($),j=h(_e),M=h({}),ee=h(!0),P=h(`high`),F=h(`medium`),I=h(le),L=h(!1),R=h(``),z=h(``),B=h(``),te=h(``),V=h(`你好`),H=h(),ne=h(!1),re=h(``),U=x(()=>l.disabled||L.value||ne.value||!p.value),W=(e,t)=>JSON.stringify([e,t]),K=e=>{let[t,n]=JSON.parse(e);return{provider:t,model:n}},J=e=>K(e).model,ce=e=>{let t=K(e);return b.value.find(e=>e.provider===t.provider&&e.model===t.model)},ue=x(()=>w.value.map(e=>({...K(e),tier:M.value[e]?.tier??Y(J(e)),...M.value[e]?.blurb.trim()?{blurb:M.value[e].blurb.trim()}:{}}))),de=()=>({candidates:ue.value,...T.value?{fallback:K(T.value)}:{},minConfidence:I.value,preserveTaskAbility:ee.value,maxReasoningEffort:P.value,fallbackReasoningEffort:F.value}),pe=()=>JSON.stringify([S.value,k.value,A.value.trim(),j.value.trim(),de()]),me=x(()=>!!p.value&&(pe()!==B.value||!!O.value.trim())),ge=x(()=>Number.isFinite(I.value)&&I.value>=0&&I.value<=1&&(!S.value||w.value.length>=2)),ve=x(()=>k.value===`jeff`||!!O.value.trim()||!!p.value?.hasApiKey),ye=x(()=>U.value||!S.value||!ge.value||!V.value.trim()||!ve.value);o(me,e=>u(`dirty-change`,e)),o(()=>L.value||ne.value,e=>u(`busy-change`,e)),o([pe,V,O],()=>{H.value=void 0,re.value=``});let be=x(()=>(l.models?.providers??[]).filter(e=>e.authenticated!==!1&&e.models.length)),xe=x(()=>be.value.map(e=>({...e,models:e.models.filter(t=>`${e.name} ${t}`.toLowerCase().includes(te.value.trim().toLowerCase()))})).filter(e=>e.models.length)),Se=x(()=>{let e=T.value?ce(T.value):void 0;return e?.reasoningKnown?oe.filter(t=>e.reasoningEfforts.includes(t)&&q(t)<=q(P.value)):[]}),Ce=x(()=>{let e=T.value?ce(T.value):void 0,t=e?Z(e,F.value,P.value):`default`;return t===null?`当前模型无符合思考上限的档位`:t==="default"?`提供方默认`:fe[t]??t}),yt=x(()=>k.value===`jeff`?`自动(Jeff)`:`自动(Jev)`);function bt(e){p.value=e,e.modelOptions&&(b.value=e.modelOptions),S.value=e.enabled,k.value=e.backend??`jev`,A.value=e.jeffBaseUrl||`http://127.0.0.1:8765`,j.value=e.jeffModel||`jeff-latest`,w.value=e.candidates.map(e=>W(e.provider,e.model)),M.value=Object.fromEntries(e.candidates.map(e=>[W(e.provider,e.model),{tier:X(e),blurb:e.blurb??``}])),T.value=e.fallback?W(e.fallback.provider,e.fallback.model):w.value[0]??``;let t=se(e);ee.value=t.preserveTaskAbility,P.value=t.maxReasoningEffort,F.value=t.fallbackReasoningEffort,I.value=e.minConfidence??.55,O.value=``,B.value=pe()}function xt(e){M.value[e]||(M.value[e]={tier:Y(J(e)),blurb:``}),w.value=w.value.includes(e)?w.value.filter(t=>t!==e):[...w.value,e],w.value.includes(T.value)||(T.value=w.value[0]??``)}async function St(){if(!p.value||L.value||ne.value)return!1;if(!ge.value)return R.value=`请选择至少两个候选模型,并将置信度设为 0 到 1。`,!1;L.value=!0,R.value=``,z.value=``;try{return bt(await N.saveJev({revision:p.value.revision,enabled:S.value,backend:k.value,jeffBaseUrl:A.value.trim()||`http://127.0.0.1:8765`,jeffModel:j.value.trim()||`jeff-latest`,...de(),...O.value.trim()?{apiKey:O.value.trim()}:{}})),z.value=`自动选模已保存,新的 Bot 回合使用此配置。`,!0}catch(e){return R.value=e instanceof Error?e.message:`保存失败`,!1}finally{L.value=!1}}async function Ct(){if(!(L.value||ne.value)){L.value=!0,R.value=``,z.value=``;try{bt(await N.jev())}catch(e){R.value=e instanceof Error?e.message:`无法读取自动选模设置`}finally{L.value=!1}}}async function wt(){if(!ye.value){ne.value=!0,re.value=``,H.value=void 0;try{H.value=await N.previewJev({pool:de(),enabled:S.value,userText:V.value.trim(),backend:k.value,jeffBaseUrl:A.value.trim()||`http://127.0.0.1:8765`,jeffModel:j.value.trim()||`jeff-latest`,...O.value.trim()?{apiKey:O.value.trim()}:{}})}catch(e){re.value=e instanceof Error?e.message:`预览失败`}finally{ne.value=!1}}}return c(Ct),t({reset:Ct,save:St}),(e,t)=>(i(),_(`section`,{class:`jev-auto`,"aria-label":`自动选模`,"aria-busy":L.value||ne.value},[m(`div`,Ee,[t[13]||=m(`h4`,null,`自动选模`,-1),m(`label`,De,[a(m(`input`,{"onUpdate:modelValue":t[0]||=e=>S.value=e,type:`checkbox`,disabled:U.value},null,8,Oe),[[E,S.value]]),t[12]||=d(` 启用自动选模`,-1)])]),t[31]||=m(`p`,null,`由决策模型结合任务和上下文,选择能胜任的最轻模型与思考强度。关闭后 Bot 不可选择 Auto。`,-1),R.value?(i(),_(`p`,ke,r(R.value),1)):y(``,!0),z.value?(i(),_(`p`,Ae,r(z.value),1)):y(``,!0),m(`label`,null,[t[14]||=d(`决策服务`,-1),a(m(`select`,{"onUpdate:modelValue":t[1]||=e=>k.value=e,"aria-label":`决策服务`,disabled:U.value},[(i(!0),_(f,null,s(v(he),e=>(i(),_(`option`,{key:e,value:e},r(v(Q)[e]),9,Me))),128))],8,je),[[D,k.value]])]),k.value===`jeff`?(i(),_(f,{key:2},[m(`div`,Ne,[m(`label`,null,[t[15]||=d(`Jeff 地址`,-1),a(m(`input`,{"onUpdate:modelValue":t[2]||=e=>A.value=e,type:`url`,placeholder:`http://127.0.0.1:8765`,disabled:U.value},null,8,Pe),[[C,A.value]])]),m(`label`,null,[t[16]||=d(`Jeff 模型`,-1),a(m(`input`,{"onUpdate:modelValue":t[3]||=e=>j.value=e,type:`text`,placeholder:`jeff-latest`,disabled:U.value},null,8,Fe),[[C,j.value]])])]),t[17]||=m(`p`,null,[d(`本机 Jeff 默认无密钥。地址仅允许 127.0.0.1 / localhost。可用环境变量 `),m(`code`,null,`YAOVI_DECISION_BACKEND=jeff`),d(`、`),m(`code`,null,`JEFF_BASE_URL`),d(` 覆盖。`)],-1)],64)):(i(),_(`label`,Ie,[t[18]||=d(`TypeSafe API 密钥`,-1),a(m(`input`,{"onUpdate:modelValue":t[4]||=e=>O.value=e,type:`password`,autocomplete:`new-password`,placeholder:p.value?.hasApiKey?`已保存,留空则不修改`:`sk-…`,disabled:U.value},null,8,Le),[[C,O.value]])])),t[32]||=m(`div`,{class:`jev-section-title`},[m(`h5`,null,`模型分工`),m(`small`,null,`建议分工,可按实际表现调整`)],-1),m(`div`,Re,[(i(!0),_(f,null,s(w.value,e=>(i(),_(`div`,{key:e,class:`jev-role`},[m(`div`,ze,[m(`strong`,null,r(J(e)),1),m(`small`,null,r(v(ae)[M.value[e].tier]),1),b.value.length&&!ce(e)?(i(),_(`small`,Be,`当前不可用`)):y(``,!0)]),m(`label`,null,[m(`span`,Ve,r(J(e))+` 的任务分工`,1),a(m(`select`,{"onUpdate:modelValue":t=>M.value[e].tier=t,"aria-label":`${J(e)} 的任务分工`,disabled:U.value},[(i(!0),_(f,null,s(v(G),e=>(i(),_(`option`,{key:e,value:e},r(v(ie)[e])+`任务`,9,Ue))),128))],8,He),[[D,M.value[e].tier]])])]))),128)),w.value.length?y(``,!0):(i(),_(`p`,We,`选择至少两个候选模型后配置分工。`))]),m(`details`,{class:`jev-picker`,open:!w.value.length},[m(`summary`,null,`选择候选模型 · 已选 `+r(w.value.length)+` 个`,1),m(`label`,null,[t[19]||=d(`筛选候选模型`,-1),a(m(`input`,{"onUpdate:modelValue":t[5]||=e=>te.value=e,type:`search`,placeholder:`搜索模型或供应商`,disabled:U.value},null,8,Ke),[[C,te.value]])]),m(`div`,qe,[(i(!0),_(f,null,s(xe.value,e=>(i(),_(`div`,{key:e.slug,class:`jev-group`},[m(`strong`,null,r(e.name),1),(i(!0),_(f,null,s(e.models,t=>(i(),_(`label`,{key:e.slug+t},[m(`input`,{type:`checkbox`,checked:w.value.includes(W(e.slug,t)),disabled:U.value||w.value.length>=32&&!w.value.includes(W(e.slug,t)),onChange:n=>xt(W(e.slug,t))},null,40,Je),d(r(t),1)]))),128))]))),128)),xe.value.length?y(``,!0):(i(),_(`p`,Ye,`没有匹配的已连接模型。`)),(i(!0),_(f,null,s(w.value.filter(e=>!be.value.some(t=>t.slug===K(e).provider&&t.models.includes(J(e)))),e=>(i(),_(`label`,{key:e,class:`jev-toggle`},[m(`input`,{type:`checkbox`,checked:``,disabled:U.value,onChange:t=>xt(e)},null,40,Xe),d(r(J(e))+`(目录外,可移除)`,1)]))),128))])],8,Ge),m(`label`,Ze,[a(m(`input`,{"onUpdate:modelValue":t[6]||=e=>ee.value=e,type:`checkbox`,disabled:U.value},null,8,Qe),[[E,ee.value]]),t[20]||=m(`span`,null,[d(`保留未完成任务所需能力`),m(`small`,null,`继续复杂任务时保留能力与思考下限;新的简单任务允许降级。`)],-1)]),m(`label`,null,[t[21]||=d(`思考强度`,-1),m(`input`,{value:yt.value,readonly:``,"aria-label":`Auto 思考强度`},null,8,$e)]),m(`details`,et,[t[27]||=m(`summary`,null,`高级设置与回退`,-1),m(`div`,tt,[m(`label`,null,[t[22]||=d(`最高允许思考等级`,-1),a(m(`select`,{"onUpdate:modelValue":t[7]||=e=>P.value=e,disabled:U.value},[(i(!0),_(f,null,s(v(oe),e=>(i(),_(`option`,{key:e,value:e},r(v(fe)[e]),9,rt))),128))],8,nt),[[D,P.value]])]),m(`label`,null,[t[23]||=d(`最低置信度`,-1),a(m(`input`,{"onUpdate:modelValue":t[8]||=e=>I.value=e,type:`number`,min:`0`,max:`1`,step:`0.05`,disabled:U.value},null,8,it),[[C,I.value,void 0,{number:!0}]])]),w.value.length?(i(),_(`label`,at,[t[24]||=d(`回退模型`,-1),a(m(`select`,{"onUpdate:modelValue":t[9]||=e=>T.value=e,disabled:U.value},[(i(!0),_(f,null,s(w.value,e=>(i(),_(`option`,{key:e,value:e},r(J(e)),9,st))),128))],8,ot),[[D,T.value]])])):y(``,!0),m(`label`,null,[t[26]||=d(`回退思考强度`,-1),a(m(`select`,{"onUpdate:modelValue":t[10]||=e=>F.value=e,disabled:U.value},[t[25]||=m(`option`,{value:`default`},`模型默认`,-1),F.value!=="default"&&!Se.value.includes(F.value)?(i(),_(`option`,{key:0,value:F.value},r(v(fe)[F.value])+`(自动适配)`,9,lt)):y(``,!0),(i(!0),_(f,null,s(Se.value,e=>(i(),_(`option`,{key:e,value:e},r(v(fe)[e]),9,ut))),128))],8,ct),[[D,F.value]]),m(`small`,null,`实际档位:`+r(Ce.value),1)])]),t[28]||=m(`p`,null,`回退不影响下一轮偏好。继续原任务时仍保留必要能力;思考档位未知时使用提供方默认。`,-1),(i(!0),_(f,null,s(w.value,e=>(i(),_(`label`,{key:e,class:`jev-hint`},[d(r(J(e))+` · 补充能力说明`,1),a(m(`input`,{"onUpdate:modelValue":t=>M.value[e].blurb=t,maxlength:`280`,placeholder:`可选,例如擅长代码排查或长文分析`,disabled:U.value},null,8,dt),[[C,M.value[e].blurb]])]))),128))]),m(`details`,ft,[t[30]||=m(`summary`,null,`选模预览`,-1),m(`p`,null,`使用当前草稿调用 `+r(k.value===`jeff`?`Jeff`:`Jev`)+`,仅判断这个新任务,不执行任务,也不保存设置。`,1),m(`label`,null,[t[29]||=d(`任务内容`,-1),a(m(`textarea`,{"onUpdate:modelValue":t[11]||=e=>V.value=e,maxlength:`2000`,rows:`2`,disabled:U.value},null,8,pt),[[C,V.value]])]),m(`button`,{type:`button`,disabled:ye.value,onClick:wt},r(ne.value?k.value===`jeff`?`Jeff 正在判断…`:`Jev 正在判断…`:`预览模型与思考强度`),9,mt),re.value?(i(),_(`p`,ht,r(re.value),1)):y(``,!0),m(`div`,gt,[H.value?(i(),g(we,{key:0,route:H.value},null,8,[`route`])):y(``,!0)])]),m(`button`,{type:`button`,disabled:U.value||!me.value||!ge.value,onClick:St},r(L.value?`正在处理…`:`保存自动选模`),9,_t),R.value?(i(),_(`button`,{key:4,type:`button`,disabled:L.value||ne.value,onClick:Ct},`重新读取设置`,8,vt)):y(``,!0)],8,Te))}}),[[`__scopeId`,`data-v-be01e084`]]),bt={class:`jev-network`,"aria-label":`Jev 独立网络`},xt={key:0,class:`error`,role:`alert`},St={key:1,role:`status`},Ct={class:`actions`},wt=[`disabled`],Tt=[`disabled`],Et=[`disabled`],Dt=b(p({__name:`JevNetworkPanel`,props:{disabled:{type:Boolean}},emits:[`dirty-change`,`busy-change`,`manage-network`],setup(e,{expose:t,emit:n}){let a=n,s=h(),l=h({mode:`inherit`}),u=h(!1),d=h(!1),f=h(``),p=h(``),b=x(()=>!!s.value&&JSON.stringify(l.value)!==JSON.stringify(s.value.connections.typesafe??{mode:`inherit`}));o(b,e=>a(`dirty-change`,e)),o(()=>u.value||d.value,e=>a(`busy-change`,e));async function S(){f.value=``,p.value=``;try{s.value=await j.get(),l.value={...s.value.connections.typesafe??{mode:`inherit`}}}catch(e){f.value=e instanceof Error?e.message:`无法读取 Jev 网络设置`}}async function C(){if(!s.value||u.value||d.value)return!1;u.value=!0,f.value=``,p.value=``;try{return s.value=await j.save(s.value.revision,l.value,ce),p.value=`Jev 独立网络已保存,从下一次选模请求生效。`,!0}catch(e){return f.value=e instanceof Error?e.message:`保存失败,草稿已保留。`,!1}finally{u.value=!1}}return c(S),t({reset:S,save:C}),(t,n)=>(i(),_(`section`,bt,[n[3]||=m(`h4`,null,`Jev 独立网络`,-1),n[4]||=m(`p`,null,`仅用于云端 TypeSafe Jev 选模请求。选择本机 Jeff 时走回环,不经此代理。各模型供应商使用各自的连接网络。`,-1),f.value?(i(),_(`p`,xt,r(f.value),1)):y(``,!0),p.value?(i(),_(`p`,St,r(p.value),1)):y(``,!0),s.value?(i(),g(A,{key:2,modelValue:l.value,"onUpdate:modelValue":n[0]||=e=>l.value=e,view:s.value,provider:v(ce),disabled:e.disabled||u.value,compact:``,onBusy:n[1]||=e=>d.value=e},null,8,[`modelValue`,`view`,`provider`,`disabled`])):y(``,!0),m(`div`,Ct,[m(`button`,{type:`button`,disabled:e.disabled||u.value||d.value||!b.value||l.value.mode===`proxy`&&!l.value.proxyId,onClick:C},r(u.value?`正在保存…`:`保存 Jev 网络`),9,wt),m(`button`,{type:`button`,disabled:e.disabled||u.value||d.value,onClick:n[2]||=e=>a(`manage-network`)},`管理代理`,8,Tt),f.value?(i(),_(`button`,{key:0,type:`button`,disabled:e.disabled||u.value||d.value,onClick:S},`重新读取`,8,Et)):y(``,!0)])]))}}),[[`__scopeId`,`data-v-28b34336`]]),Ot={class:`bot-model-visibility`,"aria-label":`Bot 可选模型`},kt={key:0,class:`error`,role:`alert`},At={key:1,role:`status`},jt={class:`toggle`},Mt=[`disabled`],Nt={class:`filters`},Pt=[`disabled`],Ft=[`disabled`],It=[`value`],Lt={class:`actions`},Rt=[`disabled`],zt=[`disabled`],Bt={role:`status`},Vt={class:`model-list`},Ht=[`checked`,`disabled`,`onChange`],Ut={key:0},Wt={key:0},Gt={key:3},Kt={class:`actions`},qt=[`disabled`],Jt=[`disabled`],Yt=b(p({__name:`BotModelVisibilityPanel`,props:{models:{},disabled:{type:Boolean}},emits:[`dirty-change`,`busy-change`],setup(e,{expose:t,emit:n}){let l=e,u=n,p=h(),g=h(!1),v=h([]),b=h(``),S=h(``),w=h(!1),T=h(``),O=h(``),k=h(``),A=(e,t)=>JSON.stringify([e,t]),j=x(()=>(l.models?.providers??[]).filter(e=>e.authenticated!==!1&&e.models.length)),M=x(()=>j.value.filter(e=>!S.value||e.slug===S.value).map(e=>({...e,models:e.models.filter(t=>`${e.name} ${t}`.toLowerCase().includes(b.value.trim().toLowerCase()))})).filter(e=>e.models.length)),ee=()=>JSON.stringify(g.value?[...v.value].sort():null),P=x(()=>!!p.value&&ee()!==k.value);o(P,e=>u(`dirty-change`,e)),o(w,e=>u(`busy-change`,e));function F(e){p.value=e,g.value=e.models!==null,v.value=e.models?.map(e=>A(e.provider,e.model))??[],k.value=ee()}function I(e){v.value=v.value.includes(e)?v.value.filter(t=>t!==e):[...v.value,e]}function L(e){let t=M.value.flatMap(e=>e.models.map(t=>A(e.slug,t)));v.value=e?[...new Set([...v.value,...t])]:v.value.filter(e=>!t.includes(e))}async function R(){T.value=``,O.value=``;try{F(await N.botModels())}catch(e){T.value=e instanceof Error?e.message:`无法读取 Bot 可选模型`}}async function z(){if(!p.value||w.value)return!1;w.value=!0,T.value=``,O.value=``;try{return F(await N.saveBotModels({revision:p.value.revision,models:g.value?v.value.map(e=>{let[t,n]=JSON.parse(e);return{provider:t,model:n}}):null})),O.value=`Bot 可选模型已保存,重新打开模型选择即可读取。`,!0}catch(e){return T.value=e instanceof Error?e.message:`保存失败,草稿已保留。`,!1}finally{w.value=!1}}return c(R),t({reset:R,save:z}),(t,n)=>(i(),_(`section`,Ot,[n[9]||=m(`h4`,null,`Bot 可选模型`,-1),n[10]||=m(`p`,null,`统一精简 Bot 的手动对话模型列表。已有选择会保留;Auto 使用上方自动选模的候选池。`,-1),T.value?(i(),_(`p`,kt,r(T.value),1)):y(``,!0),O.value?(i(),_(`p`,At,r(O.value),1)):y(``,!0),m(`label`,jt,[a(m(`input`,{"onUpdate:modelValue":n[0]||=e=>g.value=e,type:`checkbox`,disabled:e.disabled||w.value||!p.value},null,8,Mt),[[E,g.value]]),n[5]||=d(` 只显示勾选的模型`,-1)]),g.value?(i(),_(f,{key:2},[m(`div`,Nt,[m(`label`,null,[n[6]||=d(`搜索模型`,-1),a(m(`input`,{"onUpdate:modelValue":n[1]||=e=>b.value=e,type:`search`,placeholder:`搜索模型或供应商`,disabled:e.disabled||w.value},null,8,Pt),[[C,b.value]])]),m(`label`,null,[n[8]||=d(`供应商`,-1),a(m(`select`,{"onUpdate:modelValue":n[2]||=e=>S.value=e,disabled:e.disabled||w.value},[n[7]||=m(`option`,{value:``},`全部已连接供应商`,-1),(i(!0),_(f,null,s(j.value,e=>(i(),_(`option`,{key:e.slug,value:e.slug},r(e.name),9,It))),128))],8,Ft),[[D,S.value]])])]),m(`div`,Lt,[m(`button`,{type:`button`,disabled:e.disabled||w.value,onClick:n[3]||=e=>L(!0)},`全选搜索结果`,8,Rt),m(`button`,{type:`button`,disabled:e.disabled||w.value,onClick:n[4]||=e=>L(!1)},`取消搜索结果`,8,zt),m(`small`,Bt,`已勾选 `+r(v.value.length)+` 个模型`,1)]),m(`div`,Vt,[(i(!0),_(f,null,s(M.value,t=>(i(),_(`div`,{key:t.slug,class:`model-group`},[m(`strong`,null,r(t.name),1),(i(!0),_(f,null,s(t.models,n=>(i(),_(`label`,{key:n,class:`toggle`},[m(`input`,{type:`checkbox`,checked:v.value.includes(A(t.slug,n)),disabled:e.disabled||w.value,onChange:e=>I(A(t.slug,n))},null,40,Ht),d(r(n),1)]))),128))]))),128)),M.value.length?y(``,!0):(i(),_(`p`,Ut,`没有匹配的模型,请调整搜索或供应商筛选。`))]),v.value.length?y(``,!0):(i(),_(`small`,Wt,`未勾选时只显示跟随系统默认、Auto 和此 Bot 已有选择。`))],64)):(i(),_(`p`,Gt,`当前显示所有已连接模型。`)),m(`div`,Kt,[m(`button`,{type:`button`,disabled:e.disabled||w.value||!P.value||!e.models,onClick:z},r(w.value?`正在保存…`:`保存 Bot 可选模型`),9,qt),T.value?(i(),_(`button`,{key:0,type:`button`,disabled:e.disabled||w.value,onClick:R},`重新读取`,8,Jt)):y(``,!0)])]))}}),[[`__scopeId`,`data-v-7025970d`]]),Xt=[`aria-busy`],Zt={key:0,class:`note`},Qt={key:1,class:`error`,role:`alert`},$t={key:2,role:`status`},en=[`id`],tn={class:`setting-row`},nn=[`required`,`disabled`],rn=[`value`],an=[`value`],on={class:`setting-row`},sn=[`required`,`disabled`],cn={id:`hermes-main-models`},ln=[`value`],un={class:`defaults-status`},dn=[`disabled`],fn=[`disabled`],pn={class:`fallback-section`},mn=[`disabled`],hn=[`disabled`],gn={key:0,class:`block`},_n={class:`providers`},vn={class:`head`},yn={class:`badge ok`},bn={class:`hint`},xn=[`onClick`],Sn={key:1,class:`block`},Cn={class:`providers`},wn={class:`head`},Tn=[`onClick`],En={key:0},Dn=[`disabled`,`onClick`],On={key:1},kn=[`disabled`,`onClick`],An={class:`block`},jn={class:`connection-heading`},Mn=[`disabled`],Nn={class:`providers`},Pn={class:`head`},Fn=[`onClick`],In={key:0},Ln=[`disabled`,`onClick`],Rn={key:1},zn=[`disabled`,`onClick`],Bn=[`onSubmit`],Vn=[`onUpdate:modelValue`,`placeholder`,`aria-label`],Hn=[`disabled`],Un=[`disabled`,`onClick`],Wn=[`onClick`],Gn={key:2,class:`pool`},Kn={key:0},qn=[`disabled`,`onClick`],Jn=[`disabled`],Yn={class:`row`},Xn=[`disabled`],Zn={key:2,class:`block`},Qn={class:`providers`},$n={class:`head`},er={class:`hint`},tr=[`onSubmit`],nr=[`onUpdate:modelValue`,`placeholder`,`aria-label`],rr=[`disabled`],ir=[`disabled`,`onClick`],ar={key:3,class:`hint`},or={class:`endpoint-section`},sr=[`disabled`],cr=b(p({__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:u}){let p=h(),v=h(),b=h(!1),E=h();async function O(){try{p.value=await j.get(I.bot)}catch{p.value=void 0}}function k(e){return p.value?(I.bot?`独立凭据网络:`:`网络:`)+P(p.value,p.value.connections[e]??{mode:`inherit`}):`设置连接网络`}function A(e,t){v.value={id:e,name:t}}function F(){b.value=!1,v.value=void 0,O()}c(O);let I=e,L=u,R=h(),z=h(),B=h(),te=h(!1),V=h(!1),H=h(!1),ne=h(!1),re=h(!1),U=h(!1),G=x(()=>te.value||V.value||H.value),ie=x(()=>ne.value||re.value||U.value),ae=h([]),oe=h([]),K=h({}),q=h(),J=h(``),Y=h(``),X=h(``),se=h(``),Z=h(!1),ce=h(``),le=h(``),ue=h(),de,fe=h({}),pe=h(``),me=h([]),he=h(``),Q=h(``),ge=h(`fill_first`),$=h({name:``,base_url:``,model:``,api_key:``,api_mode:``}),_e=h([]),ve=h({}),ye=h(!1),be=h(!1),xe=h(I.section===`all`),Se=h(``),Ce=h({provider:``,model:``}),we=h(``),Te=h(),Ee=x(()=>{let e=se.value.trim().toLowerCase();return ae.value.filter(t=>(xe.value||!!e||Ae(t))&&(!e||t.id.includes(e)||t.label.toLowerCase().includes(e)||t.aliases.some(t=>t.includes(e))))}),De=e=>oe.value.find(t=>t.id===e),Oe=x(()=>oe.value.filter(e=>!ae.value.some(t=>t.id===e.id))),ke=e=>e.envVars[0],Ae=e=>!!De(e.id)?.status.logged_in||e.envVars.some(e=>K.value[e]?.is_set),je=x(()=>q.value?.providers.find(e=>e.slug===J.value)?.models??[]),Me=x(()=>q.value?.providers.filter(e=>e.authenticated===!0)??[]),Ne=x(()=>Me.value.some(e=>e.slug===J.value)),Pe=x(()=>q.value?.providers.filter(e=>(e.authenticated===!0||e.is_current)&&!ae.value.some(t=>t.id===e.slug))??[]),Fe=x(()=>be.value&&(J.value!==Ce.value.provider||Y.value!==Ce.value.model)),Ie=x(()=>be.value&&X.value!==we.value),Le=x(()=>Object.values(fe.value).some(Boolean)||Object.values($.value).some(Boolean)||!!he.value||!!Q.value||Object.values(ve.value).some(e=>e.trim())),Re=x(()=>b.value||G.value||(I.section===`defaults`?Fe.value||Ie.value:I.section===`connections`?Le.value:Fe.value||Ie.value||Le.value));o(Re,e=>{e&&(le.value=``),L(`dirty-change`,e)}),o(()=>be.value&&!Z.value&&!ie.value&&(!Fe.value||Ne.value&&!!Y.value.trim())&&(Fe.value||Ie.value||G.value),e=>L(`can-save-change`,e),{immediate:!0}),o(()=>ye.value||ie.value,e=>L(`busy-change`,e),{immediate:!0});async function ze(){await Be(async()=>{q.value=await N.models(!0),Se.value=``},`模型列表已刷新`,!1)}async function Be(e,t,n=!0){if(!(Z.value||ie.value)){Z.value=!0,ye.value=n,ce.value=``,le.value=``;try{let n=await e();t&&n!==!1&&(le.value=t)}catch(e){ce.value=e instanceof Error?e.message:`操作失败`}finally{Z.value=!1,ye.value=!1}}}async function Ve(){await Be(async()=>{let[e,t,n,r]=await Promise.all([I.section===`defaults`?Promise.resolve({providers:[]}):N.providers(I.bot),I.section===`defaults`?Promise.resolve({providers:[]}):N.oauth(I.bot),I.section===`defaults`?Promise.resolve({}):N.env(I.bot),N.config(I.bot)]);ae.value=e.providers,oe.value=t.providers,K.value=n,J.value=r.config.model?.provider??``,Y.value=r.config.model?.default??``;let i=r.config.fallback_model;X.value=(Array.isArray(i)?i:i?[i]:[]).map(e=>`${e.provider} ${e.model}`).join(`
|
|
1
|
+
import{A as e,B as t,D as n,Dt as r,F as i,G as a,H as o,L as s,M as c,Tt as l,W as u,_ as d,a as f,b as p,d as m,et as h,f as g,m as _,ot as v,p as y,t as b,u as x,v as S}from"./_plugin-vue_export-helper-BumXM028.js";import{G as C,J as w,M as T,V as E,W as D,r as O,w as k}from"./index-D11cgXI9.js";import{c as A,l as j,o as M,r as N,t as ee,u as P}from"./ProviderLoginDialog-D3mqdAlo.js";import{n as F}from"./id-mzBN_4Vw.js";var I={xmlns:`http://www.w3.org/2000/svg`,"xmlns:xlink":`http://www.w3.org/1999/xlink`,viewBox:`0 0 512 512`},L=p({name:`ChevronForwardOutline`,render:function(e,t){return i(),_(`svg`,I,t[0]||=[m(`path`,{fill:`none`,stroke:`currentColor`,"stroke-linecap":`round`,"stroke-linejoin":`round`,"stroke-width":`48`,d:`M184 112l144 144l-144 144`},null,-1)])}}),R={class:`connection-network`},z=[`disabled`],B={class:`connection-heading`},te={class:`hint`},V={key:0,role:`alert`},H={key:1,role:`status`},ne={key:3},re=[`disabled`],U=[`disabled`],W=b(p({__name:`ConnectionNetworkPanel`,props:{provider:{},name:{},bot:{},canLogin:{type:Boolean}},emits:[`back`,`login`,`changed`,`dirty-change`,`busy-change`],setup(e,{expose:t,emit:n}){let a=e,s=n,l=h(),u=h({mode:`inherit`}),f=h(!1),p=h(!1),v=h(``),b=h(``),C=x(()=>!!l.value&&JSON.stringify(u.value)!==JSON.stringify(l.value.connections[a.provider]??{mode:`inherit`}));o(C,e=>s(`dirty-change`,e)),o(f,e=>s(`busy-change`,e));async function w(){try{l.value=await j.get(a.bot),u.value={...l.value.connections[a.provider]??{mode:`inherit`}}}catch(e){v.value=e instanceof Error?e.message:`读取失败`}}function E(){!f.value&&(!C.value||window.confirm(`放弃尚未保存的网络更改?`))&&s(`back`)}async function D(e=!1){f.value=!0,v.value=``;try{l.value=await j.save(l.value.revision,u.value,a.provider,a.bot),b.value=`网络设置已保存,从下一轮任务或新登录生效。`,s(`changed`),e&&s(`login`)}catch(e){v.value=e instanceof Error?e.message:`保存失败`}finally{f.value=!1}}return c(w),t({reset:()=>{l.value&&(u.value={...l.value.connections[a.provider]??{mode:`inherit`}}),b.value=``}}),(t,n)=>(i(),_(`section`,R,[m(`button`,{class:`back`,type:`button`,disabled:f.value,onClick:E},[S(T,{name:`chevron-left`,size:16}),n[4]||=d(`返回模型连接`,-1)],8,z),m(`div`,B,[m(`h3`,null,r(e.name),1),m(`span`,null,r(e.canLogin?`尚未登录`:`模型连接`),1)]),m(`p`,te,`用于登录、自动续期、模型列表与模型请求。`+r(e.bot?`继承服务器凭据时沿用服务器连接的网络;此处配置用于本 Bot 独立保存的凭据。`:``),1),v.value?(i(),_(`p`,V,r(v.value),1)):y(``,!0),b.value?(i(),_(`p`,H,r(b.value),1)):y(``,!0),l.value?(i(),g(A,{key:2,modelValue:u.value,"onUpdate:modelValue":n[0]||=e=>u.value=e,view:l.value,provider:e.provider,bot:e.bot,disabled:f.value,onBusy:n[1]||=e=>p.value=e},null,8,[`modelValue`,`view`,`provider`,`bot`,`disabled`])):y(``,!0),l.value?(i(),_(`footer`,ne,[m(`button`,{type:`button`,disabled:f.value||!C.value,onClick:n[2]||=t=>u.value={...l.value.connections[e.provider]??{mode:`inherit`}}},`取消更改`,8,re),m(`button`,{class:`primary`,type:`button`,disabled:f.value||p.value||!C.value&&!e.canLogin||u.value.mode===`proxy`&&!u.value.proxyId,onClick:n[3]||=t=>D(!!e.canLogin)},r(f.value?`正在保存…`:e.canLogin?`保存并登录`:`保存更改`),9,U)])):y(``,!0)]))}}),[[`__scopeId`,`data-v-34276c52`]]),G=[`light`,`standard`,`complex`,`deep`],ie={light:`轻量`,standard:`常规`,complex:`复杂`,deep:`深度`},ae={light:`问候、短答、单步查询,以及目标清晰、范围有限的操作。`,standard:`常规多步任务、一般分析与内容整理。`,complex:`跨模块修改、复杂排查和有多项约束的工作。`,deep:`高难推理、系统性研究与架构设计。`},oe=[`low`,`medium`,`high`,`xhigh`,`max`],K=[`none`,`minimal`,...oe,`ultra`],q=e=>K.indexOf(e),J={new:`新任务`,continue:`继续未完成任务`,correction:`纠正原任务`,unclear:`上下文不足`};function Y(e){return e===`gpt-6-luna`?`light`:e===`gpt-6.1-sol`?`complex`:e===`gpt-6-astra`?`deep`:`standard`}function X(e){return e.tier??Y(e.model)}function se(e){return{preserveTaskAbility:e.preserveTaskAbility!==!1,maxReasoningEffort:e.maxReasoningEffort??`high`,fallbackReasoningEffort:e.fallbackReasoningEffort??`medium`}}function Z(e,t,n){if(!e.reasoningKnown)return`default`;if(!e.reasoningEfforts.length)return`none`;let r=e.reasoningEfforts.filter(e=>q(e)>=0&&q(e)<=q(n)).sort((e,t)=>q(e)-q(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(q(t),q(`low`)),q(n)),a=t===`none`?r:r.filter(e=>e!==`none`);return a.length?a.find(e=>q(e)>=i)??null:null}var ce=`typesafe`,le=.55;function ue(e){return e?.provider===`auto`&&e?.model===`auto`}var de=()=>({provider:null,model:null,reasoningEffort:null,fastMode:null,auxiliary:null,fallback:null,autoPool:null}),fe={none:`关闭`,minimal:`最小`,low:`低`,medium:`中`,high:`高`,xhigh:`极高`,max:`最大`,ultra:`Ultra`},pe={normal:`普通`,fast:`快速`,auto:`每轮开始加速`,cold:`首次回复加速`};function me(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 he=[`jev`,`jeff`],Q={jev:`Jev(云端 TypeSafe)`,jeff:`Jeff(本机)`};function ge(e){return e===`jeff`?`Jeff`:`Jev`}var $=`http://127.0.0.1:8765`,_e=`jeff-latest`,ve={class:`auto-route`,"aria-label":`Auto 选模依据`},ye={key:0},be={class:`auto-route__detail`},xe={key:0},Se={key:1},Ce={key:2},we=b(p({__name:`AutoRouteNotice`,props:{route:{}},setup(e){let t=e=>e==="default"?`提供方默认`:fe[e]??e,n={jev:`Jev 自动判断`,jeff:`Jeff 自动判断`,fallback:`回退组合`,single:`仅剩一个候选`};return(a,o)=>(i(),_(`details`,ve,[m(`summary`,null,[d(`Auto · `+r(e.route.model)+` · `+r(t(e.route.reasoningEffort))+r([`none`,`default`].includes(e.route.reasoningEffort)?``:`思考`),1),e.route.reason!==`jev`&&e.route.reason!==`jeff`?(i(),_(`span`,ye,` · 回退`)):y(``,!0)]),m(`div`,be,[m(`p`,null,r(e.route.explanation),1),m(`dl`,null,[m(`div`,null,[o[0]||=m(`dt`,null,`决策来源`,-1),m(`dd`,null,r(n[e.route.reason]),1)]),e.route.taskTier?(i(),_(`div`,xe,[o[1]||=m(`dt`,null,`任务能力`,-1),m(`dd`,null,r(v(ie)[e.route.taskTier])+r(e.route.requestedTier&&e.route.requestedTier!==e.route.taskTier?`(本轮判断 ${v(ie)[e.route.requestedTier]},保留任务下限)`:``),1)])):y(``,!0),e.route.continuity?(i(),_(`div`,Se,[o[2]||=m(`dt`,null,`任务关系`,-1),m(`dd`,null,r(v(J)[e.route.continuity]),1)])):y(``,!0),m(`div`,null,[o[3]||=m(`dt`,null,`判断置信度`,-1),m(`dd`,null,r(Math.round(e.route.confidence*100))+`%`,1)]),e.route.requestedEffort&&e.route.requestedEffort!==e.route.reasoningEffort?(i(),_(`div`,Ce,[o[4]||=m(`dt`,null,`思考适配`,-1),m(`dd`,null,r(t(e.route.requestedEffort))+` → `+r(t(e.route.reasoningEffort)),1)])):y(``,!0),m(`div`,null,[o[5]||=m(`dt`,null,`模型服务`,-1),m(`dd`,null,r(e.route.provider),1)])])])]))}}),[[`__scopeId`,`data-v-6a520af2`]]),Te=[`aria-busy`],Ee={class:`jev-title`},De={class:`jev-toggle`},Oe=[`disabled`],ke={key:0,class:`error`,role:`alert`},Ae={key:1,role:`status`},je=[`disabled`],Me=[`value`],Ne={class:`jev-fields`},Pe=[`disabled`],Fe=[`disabled`],Ie={key:3},Le=[`placeholder`,`disabled`],Re={class:`jev-roles`},ze={class:`jev-model-name`},Be={key:0,class:`error`},Ve={class:`sr-only`},He=[`onUpdate:modelValue`,`aria-label`,`disabled`],Ue=[`value`],We={key:0},Ge=[`open`],Ke=[`disabled`],qe={class:`jev-model-list`},Je=[`checked`,`disabled`,`onChange`],Ye={key:0},Xe=[`disabled`,`onChange`],Ze={class:`jev-continuity`},Qe=[`disabled`],$e=[`value`],et={class:`jev-advanced`},tt={class:`jev-fields`},nt=[`disabled`],rt=[`value`],it=[`disabled`],at={key:0},ot=[`disabled`],st=[`value`],ct=[`disabled`],lt=[`value`],ut=[`value`],dt=[`onUpdate:modelValue`,`disabled`],ft={class:`jev-preview`},pt=[`disabled`],mt=[`disabled`],ht={key:0,class:`error`,role:`alert`},gt={"aria-live":`polite`},_t=[`disabled`],vt=[`disabled`],yt=b(p({__name:`JevAutoPanel`,props:{models:{},disabled:{type:Boolean}},emits:[`dirty-change`,`busy-change`],setup(e,{expose:t,emit:n}){let l=e,u=n,p=h(),b=h([]),S=h(!1),w=h([]),T=h(``),O=h(``),k=h(`jev`),A=h($),j=h(_e),M=h({}),ee=h(!0),P=h(`high`),F=h(`medium`),I=h(le),L=h(!1),R=h(``),z=h(``),B=h(``),te=h(``),V=h(`你好`),H=h(),ne=h(!1),re=h(``),U=x(()=>l.disabled||L.value||ne.value||!p.value),W=(e,t)=>JSON.stringify([e,t]),K=e=>{let[t,n]=JSON.parse(e);return{provider:t,model:n}},J=e=>K(e).model,ce=e=>{let t=K(e);return b.value.find(e=>e.provider===t.provider&&e.model===t.model)},ue=x(()=>w.value.map(e=>({...K(e),tier:M.value[e]?.tier??Y(J(e)),...M.value[e]?.blurb.trim()?{blurb:M.value[e].blurb.trim()}:{}}))),de=()=>({candidates:ue.value,...T.value?{fallback:K(T.value)}:{},minConfidence:I.value,preserveTaskAbility:ee.value,maxReasoningEffort:P.value,fallbackReasoningEffort:F.value}),pe=()=>JSON.stringify([S.value,k.value,A.value.trim(),j.value.trim(),de()]),me=x(()=>!!p.value&&(pe()!==B.value||!!O.value.trim())),ge=x(()=>Number.isFinite(I.value)&&I.value>=0&&I.value<=1&&(!S.value||w.value.length>=2)),ve=x(()=>k.value===`jeff`||!!O.value.trim()||!!p.value?.hasApiKey),ye=x(()=>U.value||!S.value||!ge.value||!V.value.trim()||!ve.value);o(me,e=>u(`dirty-change`,e)),o(()=>L.value||ne.value,e=>u(`busy-change`,e)),o([pe,V,O],()=>{H.value=void 0,re.value=``});let be=x(()=>(l.models?.providers??[]).filter(e=>e.authenticated!==!1&&e.models.length)),xe=x(()=>be.value.map(e=>({...e,models:e.models.filter(t=>`${e.name} ${t}`.toLowerCase().includes(te.value.trim().toLowerCase()))})).filter(e=>e.models.length)),Se=x(()=>{let e=T.value?ce(T.value):void 0;return e?.reasoningKnown?oe.filter(t=>e.reasoningEfforts.includes(t)&&q(t)<=q(P.value)):[]}),Ce=x(()=>{let e=T.value?ce(T.value):void 0,t=e?Z(e,F.value,P.value):`default`;return t===null?`当前模型无符合思考上限的档位`:t==="default"?`提供方默认`:fe[t]??t}),yt=x(()=>k.value===`jeff`?`自动(Jeff)`:`自动(Jev)`);function bt(e){p.value=e,e.modelOptions&&(b.value=e.modelOptions),S.value=e.enabled,k.value=e.backend??`jev`,A.value=e.jeffBaseUrl||`http://127.0.0.1:8765`,j.value=e.jeffModel||`jeff-latest`,w.value=e.candidates.map(e=>W(e.provider,e.model)),M.value=Object.fromEntries(e.candidates.map(e=>[W(e.provider,e.model),{tier:X(e),blurb:e.blurb??``}])),T.value=e.fallback?W(e.fallback.provider,e.fallback.model):w.value[0]??``;let t=se(e);ee.value=t.preserveTaskAbility,P.value=t.maxReasoningEffort,F.value=t.fallbackReasoningEffort,I.value=e.minConfidence??.55,O.value=``,B.value=pe()}function xt(e){M.value[e]||(M.value[e]={tier:Y(J(e)),blurb:``}),w.value=w.value.includes(e)?w.value.filter(t=>t!==e):[...w.value,e],w.value.includes(T.value)||(T.value=w.value[0]??``)}async function St(){if(!p.value||L.value||ne.value)return!1;if(!ge.value)return R.value=`请选择至少两个候选模型,并将置信度设为 0 到 1。`,!1;L.value=!0,R.value=``,z.value=``;try{return bt(await N.saveJev({revision:p.value.revision,enabled:S.value,backend:k.value,jeffBaseUrl:A.value.trim()||`http://127.0.0.1:8765`,jeffModel:j.value.trim()||`jeff-latest`,...de(),...O.value.trim()?{apiKey:O.value.trim()}:{}})),z.value=`自动选模已保存,新的 Bot 回合使用此配置。`,!0}catch(e){return R.value=e instanceof Error?e.message:`保存失败`,!1}finally{L.value=!1}}async function Ct(){if(!(L.value||ne.value)){L.value=!0,R.value=``,z.value=``;try{bt(await N.jev())}catch(e){R.value=e instanceof Error?e.message:`无法读取自动选模设置`}finally{L.value=!1}}}async function wt(){if(!ye.value){ne.value=!0,re.value=``,H.value=void 0;try{H.value=await N.previewJev({pool:de(),enabled:S.value,userText:V.value.trim(),backend:k.value,jeffBaseUrl:A.value.trim()||`http://127.0.0.1:8765`,jeffModel:j.value.trim()||`jeff-latest`,...O.value.trim()?{apiKey:O.value.trim()}:{}})}catch(e){re.value=e instanceof Error?e.message:`预览失败`}finally{ne.value=!1}}}return c(Ct),t({reset:Ct,save:St}),(e,t)=>(i(),_(`section`,{class:`jev-auto`,"aria-label":`自动选模`,"aria-busy":L.value||ne.value},[m(`div`,Ee,[t[13]||=m(`h4`,null,`自动选模`,-1),m(`label`,De,[a(m(`input`,{"onUpdate:modelValue":t[0]||=e=>S.value=e,type:`checkbox`,disabled:U.value},null,8,Oe),[[E,S.value]]),t[12]||=d(` 启用自动选模`,-1)])]),t[31]||=m(`p`,null,`由决策模型结合任务和上下文,选择能胜任的最轻模型与思考强度。关闭后 Bot 不可选择 Auto。`,-1),R.value?(i(),_(`p`,ke,r(R.value),1)):y(``,!0),z.value?(i(),_(`p`,Ae,r(z.value),1)):y(``,!0),m(`label`,null,[t[14]||=d(`决策服务`,-1),a(m(`select`,{"onUpdate:modelValue":t[1]||=e=>k.value=e,"aria-label":`决策服务`,disabled:U.value},[(i(!0),_(f,null,s(v(he),e=>(i(),_(`option`,{key:e,value:e},r(v(Q)[e]),9,Me))),128))],8,je),[[D,k.value]])]),k.value===`jeff`?(i(),_(f,{key:2},[m(`div`,Ne,[m(`label`,null,[t[15]||=d(`Jeff 地址`,-1),a(m(`input`,{"onUpdate:modelValue":t[2]||=e=>A.value=e,type:`url`,placeholder:`http://127.0.0.1:8765`,disabled:U.value},null,8,Pe),[[C,A.value]])]),m(`label`,null,[t[16]||=d(`Jeff 模型`,-1),a(m(`input`,{"onUpdate:modelValue":t[3]||=e=>j.value=e,type:`text`,placeholder:`jeff-latest`,disabled:U.value},null,8,Fe),[[C,j.value]])])]),t[17]||=m(`p`,null,[d(`本机 Jeff 默认无密钥。地址仅允许 127.0.0.1 / localhost。可用环境变量 `),m(`code`,null,`YAOVI_DECISION_BACKEND=jeff`),d(`、`),m(`code`,null,`JEFF_BASE_URL`),d(` 覆盖。`)],-1)],64)):(i(),_(`label`,Ie,[t[18]||=d(`TypeSafe API 密钥`,-1),a(m(`input`,{"onUpdate:modelValue":t[4]||=e=>O.value=e,type:`password`,autocomplete:`new-password`,placeholder:p.value?.hasApiKey?`已保存,留空则不修改`:`sk-…`,disabled:U.value},null,8,Le),[[C,O.value]])])),t[32]||=m(`div`,{class:`jev-section-title`},[m(`h5`,null,`模型分工`),m(`small`,null,`建议分工,可按实际表现调整`)],-1),m(`div`,Re,[(i(!0),_(f,null,s(w.value,e=>(i(),_(`div`,{key:e,class:`jev-role`},[m(`div`,ze,[m(`strong`,null,r(J(e)),1),m(`small`,null,r(v(ae)[M.value[e].tier]),1),b.value.length&&!ce(e)?(i(),_(`small`,Be,`当前不可用`)):y(``,!0)]),m(`label`,null,[m(`span`,Ve,r(J(e))+` 的任务分工`,1),a(m(`select`,{"onUpdate:modelValue":t=>M.value[e].tier=t,"aria-label":`${J(e)} 的任务分工`,disabled:U.value},[(i(!0),_(f,null,s(v(G),e=>(i(),_(`option`,{key:e,value:e},r(v(ie)[e])+`任务`,9,Ue))),128))],8,He),[[D,M.value[e].tier]])])]))),128)),w.value.length?y(``,!0):(i(),_(`p`,We,`选择至少两个候选模型后配置分工。`))]),m(`details`,{class:`jev-picker`,open:!w.value.length},[m(`summary`,null,`选择候选模型 · 已选 `+r(w.value.length)+` 个`,1),m(`label`,null,[t[19]||=d(`筛选候选模型`,-1),a(m(`input`,{"onUpdate:modelValue":t[5]||=e=>te.value=e,type:`search`,placeholder:`搜索模型或供应商`,disabled:U.value},null,8,Ke),[[C,te.value]])]),m(`div`,qe,[(i(!0),_(f,null,s(xe.value,e=>(i(),_(`div`,{key:e.slug,class:`jev-group`},[m(`strong`,null,r(e.name),1),(i(!0),_(f,null,s(e.models,t=>(i(),_(`label`,{key:e.slug+t},[m(`input`,{type:`checkbox`,checked:w.value.includes(W(e.slug,t)),disabled:U.value||w.value.length>=32&&!w.value.includes(W(e.slug,t)),onChange:n=>xt(W(e.slug,t))},null,40,Je),d(r(t),1)]))),128))]))),128)),xe.value.length?y(``,!0):(i(),_(`p`,Ye,`没有匹配的已连接模型。`)),(i(!0),_(f,null,s(w.value.filter(e=>!be.value.some(t=>t.slug===K(e).provider&&t.models.includes(J(e)))),e=>(i(),_(`label`,{key:e,class:`jev-toggle`},[m(`input`,{type:`checkbox`,checked:``,disabled:U.value,onChange:t=>xt(e)},null,40,Xe),d(r(J(e))+`(目录外,可移除)`,1)]))),128))])],8,Ge),m(`label`,Ze,[a(m(`input`,{"onUpdate:modelValue":t[6]||=e=>ee.value=e,type:`checkbox`,disabled:U.value},null,8,Qe),[[E,ee.value]]),t[20]||=m(`span`,null,[d(`保留未完成任务所需能力`),m(`small`,null,`继续复杂任务时保留能力与思考下限;新的简单任务允许降级。`)],-1)]),m(`label`,null,[t[21]||=d(`思考强度`,-1),m(`input`,{value:yt.value,readonly:``,"aria-label":`Auto 思考强度`},null,8,$e)]),m(`details`,et,[t[27]||=m(`summary`,null,`高级设置与回退`,-1),m(`div`,tt,[m(`label`,null,[t[22]||=d(`最高允许思考等级`,-1),a(m(`select`,{"onUpdate:modelValue":t[7]||=e=>P.value=e,disabled:U.value},[(i(!0),_(f,null,s(v(oe),e=>(i(),_(`option`,{key:e,value:e},r(v(fe)[e]),9,rt))),128))],8,nt),[[D,P.value]])]),m(`label`,null,[t[23]||=d(`最低置信度`,-1),a(m(`input`,{"onUpdate:modelValue":t[8]||=e=>I.value=e,type:`number`,min:`0`,max:`1`,step:`0.05`,disabled:U.value},null,8,it),[[C,I.value,void 0,{number:!0}]])]),w.value.length?(i(),_(`label`,at,[t[24]||=d(`回退模型`,-1),a(m(`select`,{"onUpdate:modelValue":t[9]||=e=>T.value=e,disabled:U.value},[(i(!0),_(f,null,s(w.value,e=>(i(),_(`option`,{key:e,value:e},r(J(e)),9,st))),128))],8,ot),[[D,T.value]])])):y(``,!0),m(`label`,null,[t[26]||=d(`回退思考强度`,-1),a(m(`select`,{"onUpdate:modelValue":t[10]||=e=>F.value=e,disabled:U.value},[t[25]||=m(`option`,{value:`default`},`模型默认`,-1),F.value!=="default"&&!Se.value.includes(F.value)?(i(),_(`option`,{key:0,value:F.value},r(v(fe)[F.value])+`(自动适配)`,9,lt)):y(``,!0),(i(!0),_(f,null,s(Se.value,e=>(i(),_(`option`,{key:e,value:e},r(v(fe)[e]),9,ut))),128))],8,ct),[[D,F.value]]),m(`small`,null,`实际档位:`+r(Ce.value),1)])]),t[28]||=m(`p`,null,`回退不影响下一轮偏好。继续原任务时仍保留必要能力;思考档位未知时使用提供方默认。`,-1),(i(!0),_(f,null,s(w.value,e=>(i(),_(`label`,{key:e,class:`jev-hint`},[d(r(J(e))+` · 补充能力说明`,1),a(m(`input`,{"onUpdate:modelValue":t=>M.value[e].blurb=t,maxlength:`280`,placeholder:`可选,例如擅长代码排查或长文分析`,disabled:U.value},null,8,dt),[[C,M.value[e].blurb]])]))),128))]),m(`details`,ft,[t[30]||=m(`summary`,null,`选模预览`,-1),m(`p`,null,`使用当前草稿调用 `+r(k.value===`jeff`?`Jeff`:`Jev`)+`,仅判断这个新任务,不执行任务,也不保存设置。`,1),m(`label`,null,[t[29]||=d(`任务内容`,-1),a(m(`textarea`,{"onUpdate:modelValue":t[11]||=e=>V.value=e,maxlength:`2000`,rows:`2`,disabled:U.value},null,8,pt),[[C,V.value]])]),m(`button`,{type:`button`,disabled:ye.value,onClick:wt},r(ne.value?k.value===`jeff`?`Jeff 正在判断…`:`Jev 正在判断…`:`预览模型与思考强度`),9,mt),re.value?(i(),_(`p`,ht,r(re.value),1)):y(``,!0),m(`div`,gt,[H.value?(i(),g(we,{key:0,route:H.value},null,8,[`route`])):y(``,!0)])]),m(`button`,{type:`button`,disabled:U.value||!me.value||!ge.value,onClick:St},r(L.value?`正在处理…`:`保存自动选模`),9,_t),R.value?(i(),_(`button`,{key:4,type:`button`,disabled:L.value||ne.value,onClick:Ct},`重新读取设置`,8,vt)):y(``,!0)],8,Te))}}),[[`__scopeId`,`data-v-be01e084`]]),bt={class:`jev-network`,"aria-label":`Jev 独立网络`},xt={key:0,class:`error`,role:`alert`},St={key:1,role:`status`},Ct={class:`actions`},wt=[`disabled`],Tt=[`disabled`],Et=[`disabled`],Dt=b(p({__name:`JevNetworkPanel`,props:{disabled:{type:Boolean}},emits:[`dirty-change`,`busy-change`,`manage-network`],setup(e,{expose:t,emit:n}){let a=n,s=h(),l=h({mode:`inherit`}),u=h(!1),d=h(!1),f=h(``),p=h(``),b=x(()=>!!s.value&&JSON.stringify(l.value)!==JSON.stringify(s.value.connections.typesafe??{mode:`inherit`}));o(b,e=>a(`dirty-change`,e)),o(()=>u.value||d.value,e=>a(`busy-change`,e));async function S(){f.value=``,p.value=``;try{s.value=await j.get(),l.value={...s.value.connections.typesafe??{mode:`inherit`}}}catch(e){f.value=e instanceof Error?e.message:`无法读取 Jev 网络设置`}}async function C(){if(!s.value||u.value||d.value)return!1;u.value=!0,f.value=``,p.value=``;try{return s.value=await j.save(s.value.revision,l.value,ce),p.value=`Jev 独立网络已保存,从下一次选模请求生效。`,!0}catch(e){return f.value=e instanceof Error?e.message:`保存失败,草稿已保留。`,!1}finally{u.value=!1}}return c(S),t({reset:S,save:C}),(t,n)=>(i(),_(`section`,bt,[n[3]||=m(`h4`,null,`Jev 独立网络`,-1),n[4]||=m(`p`,null,`仅用于云端 TypeSafe Jev 选模请求。选择本机 Jeff 时走回环,不经此代理。各模型供应商使用各自的连接网络。`,-1),f.value?(i(),_(`p`,xt,r(f.value),1)):y(``,!0),p.value?(i(),_(`p`,St,r(p.value),1)):y(``,!0),s.value?(i(),g(A,{key:2,modelValue:l.value,"onUpdate:modelValue":n[0]||=e=>l.value=e,view:s.value,provider:v(ce),disabled:e.disabled||u.value,compact:``,onBusy:n[1]||=e=>d.value=e},null,8,[`modelValue`,`view`,`provider`,`disabled`])):y(``,!0),m(`div`,Ct,[m(`button`,{type:`button`,disabled:e.disabled||u.value||d.value||!b.value||l.value.mode===`proxy`&&!l.value.proxyId,onClick:C},r(u.value?`正在保存…`:`保存 Jev 网络`),9,wt),m(`button`,{type:`button`,disabled:e.disabled||u.value||d.value,onClick:n[2]||=e=>a(`manage-network`)},`管理代理`,8,Tt),f.value?(i(),_(`button`,{key:0,type:`button`,disabled:e.disabled||u.value||d.value,onClick:S},`重新读取`,8,Et)):y(``,!0)])]))}}),[[`__scopeId`,`data-v-28b34336`]]),Ot={class:`bot-model-visibility`,"aria-label":`Bot 可选模型`},kt={key:0,class:`error`,role:`alert`},At={key:1,role:`status`},jt={class:`toggle`},Mt=[`disabled`],Nt={class:`filters`},Pt=[`disabled`],Ft=[`disabled`],It=[`value`],Lt={class:`actions`},Rt=[`disabled`],zt=[`disabled`],Bt={role:`status`},Vt={class:`model-list`},Ht=[`checked`,`disabled`,`onChange`],Ut={key:0},Wt={key:0},Gt={key:3},Kt={class:`actions`},qt=[`disabled`],Jt=[`disabled`],Yt=b(p({__name:`BotModelVisibilityPanel`,props:{models:{},disabled:{type:Boolean}},emits:[`dirty-change`,`busy-change`],setup(e,{expose:t,emit:n}){let l=e,u=n,p=h(),g=h(!1),v=h([]),b=h(``),S=h(``),w=h(!1),T=h(``),O=h(``),k=h(``),A=(e,t)=>JSON.stringify([e,t]),j=x(()=>(l.models?.providers??[]).filter(e=>e.authenticated!==!1&&e.models.length)),M=x(()=>j.value.filter(e=>!S.value||e.slug===S.value).map(e=>({...e,models:e.models.filter(t=>`${e.name} ${t}`.toLowerCase().includes(b.value.trim().toLowerCase()))})).filter(e=>e.models.length)),ee=()=>JSON.stringify(g.value?[...v.value].sort():null),P=x(()=>!!p.value&&ee()!==k.value);o(P,e=>u(`dirty-change`,e)),o(w,e=>u(`busy-change`,e));function F(e){p.value=e,g.value=e.models!==null,v.value=e.models?.map(e=>A(e.provider,e.model))??[],k.value=ee()}function I(e){v.value=v.value.includes(e)?v.value.filter(t=>t!==e):[...v.value,e]}function L(e){let t=M.value.flatMap(e=>e.models.map(t=>A(e.slug,t)));v.value=e?[...new Set([...v.value,...t])]:v.value.filter(e=>!t.includes(e))}async function R(){T.value=``,O.value=``;try{F(await N.botModels())}catch(e){T.value=e instanceof Error?e.message:`无法读取 Bot 可选模型`}}async function z(){if(!p.value||w.value)return!1;w.value=!0,T.value=``,O.value=``;try{return F(await N.saveBotModels({revision:p.value.revision,models:g.value?v.value.map(e=>{let[t,n]=JSON.parse(e);return{provider:t,model:n}}):null})),O.value=`Bot 可选模型已保存,重新打开模型选择即可读取。`,!0}catch(e){return T.value=e instanceof Error?e.message:`保存失败,草稿已保留。`,!1}finally{w.value=!1}}return c(R),t({reset:R,save:z}),(t,n)=>(i(),_(`section`,Ot,[n[9]||=m(`h4`,null,`Bot 可选模型`,-1),n[10]||=m(`p`,null,`统一精简 Bot 的手动对话模型列表。已有选择会保留;Auto 使用上方自动选模的候选池。`,-1),T.value?(i(),_(`p`,kt,r(T.value),1)):y(``,!0),O.value?(i(),_(`p`,At,r(O.value),1)):y(``,!0),m(`label`,jt,[a(m(`input`,{"onUpdate:modelValue":n[0]||=e=>g.value=e,type:`checkbox`,disabled:e.disabled||w.value||!p.value},null,8,Mt),[[E,g.value]]),n[5]||=d(` 只显示勾选的模型`,-1)]),g.value?(i(),_(f,{key:2},[m(`div`,Nt,[m(`label`,null,[n[6]||=d(`搜索模型`,-1),a(m(`input`,{"onUpdate:modelValue":n[1]||=e=>b.value=e,type:`search`,placeholder:`搜索模型或供应商`,disabled:e.disabled||w.value},null,8,Pt),[[C,b.value]])]),m(`label`,null,[n[8]||=d(`供应商`,-1),a(m(`select`,{"onUpdate:modelValue":n[2]||=e=>S.value=e,disabled:e.disabled||w.value},[n[7]||=m(`option`,{value:``},`全部已连接供应商`,-1),(i(!0),_(f,null,s(j.value,e=>(i(),_(`option`,{key:e.slug,value:e.slug},r(e.name),9,It))),128))],8,Ft),[[D,S.value]])])]),m(`div`,Lt,[m(`button`,{type:`button`,disabled:e.disabled||w.value,onClick:n[3]||=e=>L(!0)},`全选搜索结果`,8,Rt),m(`button`,{type:`button`,disabled:e.disabled||w.value,onClick:n[4]||=e=>L(!1)},`取消搜索结果`,8,zt),m(`small`,Bt,`已勾选 `+r(v.value.length)+` 个模型`,1)]),m(`div`,Vt,[(i(!0),_(f,null,s(M.value,t=>(i(),_(`div`,{key:t.slug,class:`model-group`},[m(`strong`,null,r(t.name),1),(i(!0),_(f,null,s(t.models,n=>(i(),_(`label`,{key:n,class:`toggle`},[m(`input`,{type:`checkbox`,checked:v.value.includes(A(t.slug,n)),disabled:e.disabled||w.value,onChange:e=>I(A(t.slug,n))},null,40,Ht),d(r(n),1)]))),128))]))),128)),M.value.length?y(``,!0):(i(),_(`p`,Ut,`没有匹配的模型,请调整搜索或供应商筛选。`))]),v.value.length?y(``,!0):(i(),_(`small`,Wt,`未勾选时只显示跟随系统默认、Auto 和此 Bot 已有选择。`))],64)):(i(),_(`p`,Gt,`当前显示所有已连接模型。`)),m(`div`,Kt,[m(`button`,{type:`button`,disabled:e.disabled||w.value||!P.value||!e.models,onClick:z},r(w.value?`正在保存…`:`保存 Bot 可选模型`),9,qt),T.value?(i(),_(`button`,{key:0,type:`button`,disabled:e.disabled||w.value,onClick:R},`重新读取`,8,Jt)):y(``,!0)])]))}}),[[`__scopeId`,`data-v-7025970d`]]),Xt=[`aria-busy`],Zt={key:0,class:`note`},Qt={key:1,class:`error`,role:`alert`},$t={key:2,role:`status`},en=[`id`],tn={class:`setting-row`},nn=[`required`,`disabled`],rn=[`value`],an=[`value`],on={class:`setting-row`},sn=[`required`,`disabled`],cn={id:`hermes-main-models`},ln=[`value`],un={class:`defaults-status`},dn=[`disabled`],fn=[`disabled`],pn={class:`fallback-section`},mn=[`disabled`],hn=[`disabled`],gn={key:0,class:`block`},_n={class:`providers`},vn={class:`head`},yn={class:`badge ok`},bn={class:`hint`},xn=[`onClick`],Sn={key:1,class:`block`},Cn={class:`providers`},wn={class:`head`},Tn=[`onClick`],En={key:0},Dn=[`disabled`,`onClick`],On={key:1},kn=[`disabled`,`onClick`],An={class:`block`},jn={class:`connection-heading`},Mn=[`disabled`],Nn={class:`providers`},Pn={class:`head`},Fn=[`onClick`],In={key:0},Ln=[`disabled`,`onClick`],Rn={key:1},zn=[`disabled`,`onClick`],Bn=[`onSubmit`],Vn=[`onUpdate:modelValue`,`placeholder`,`aria-label`],Hn=[`disabled`],Un=[`disabled`,`onClick`],Wn=[`onClick`],Gn={key:2,class:`pool`},Kn={key:0},qn=[`disabled`,`onClick`],Jn=[`disabled`],Yn={class:`row`},Xn=[`disabled`],Zn={key:2,class:`block`},Qn={class:`providers`},$n={class:`head`},er={class:`hint`},tr=[`onSubmit`],nr=[`onUpdate:modelValue`,`placeholder`,`aria-label`],rr=[`disabled`],ir=[`disabled`,`onClick`],ar={key:3,class:`hint`},or={class:`endpoint-section`},sr=[`disabled`],cr=b(p({__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:u}){let p=h(),v=h(),b=h(!1),E=h();async function O(){try{p.value=await j.get(I.bot)}catch{p.value=void 0}}function k(e){return p.value?(I.bot?`独立凭据网络:`:`网络:`)+P(p.value,p.value.connections[e]??{mode:`inherit`}):`设置连接网络`}function A(e,t){v.value={id:e,name:t}}function F(){b.value=!1,v.value=void 0,O()}c(O);let I=e,L=u,R=h(),z=h(),B=h(),te=h(!1),V=h(!1),H=h(!1),ne=h(!1),re=h(!1),U=h(!1),G=x(()=>te.value||V.value||H.value),ie=x(()=>ne.value||re.value||U.value),ae=h([]),oe=h([]),K=h({}),q=h(),J=h(``),Y=h(``),X=h(``),se=h(``),Z=h(!1),ce=h(``),le=h(``),ue=h(),de,fe=h({}),pe=h(``),me=h([]),he=h(``),Q=h(``),ge=h(`fill_first`),$=h({name:``,base_url:``,model:``,api_key:``,api_mode:``}),_e=h([]),ve=h({}),ye=h(!1),be=h(!1),xe=h(I.section===`all`),Se=h(``),Ce=h({provider:``,model:``}),we=h(``),Te=h(),Ee=x(()=>{let e=se.value.trim().toLowerCase();return ae.value.filter(t=>(xe.value||!!e||Ae(t))&&(!e||t.id.includes(e)||t.label.toLowerCase().includes(e)||t.aliases.some(t=>t.includes(e))))}),De=e=>oe.value.find(t=>t.id===e),Oe=x(()=>oe.value.filter(e=>!ae.value.some(t=>t.id===e.id))),ke=e=>e.envVars[0],Ae=e=>!!De(e.id)?.status.logged_in||e.envVars.some(e=>K.value[e]?.is_set),je=x(()=>q.value?.providers.find(e=>e.slug===J.value)?.models??[]),Me=x(()=>q.value?.providers.filter(e=>e.authenticated===!0)??[]),Ne=x(()=>Me.value.some(e=>e.slug===J.value)),Pe=x(()=>q.value?.providers.filter(e=>(e.authenticated===!0||e.is_current)&&!ae.value.some(t=>t.id===e.slug))??[]),Fe=x(()=>be.value&&(J.value!==Ce.value.provider||Y.value!==Ce.value.model)),Ie=x(()=>be.value&&X.value!==we.value),Le=x(()=>Object.values(fe.value).some(Boolean)||Object.values($.value).some(Boolean)||!!he.value||!!Q.value||Object.values(ve.value).some(e=>e.trim())),Re=x(()=>b.value||G.value||(I.section===`defaults`?Fe.value||Ie.value:I.section===`connections`?Le.value:Fe.value||Ie.value||Le.value));o(Re,e=>{e&&(le.value=``),L(`dirty-change`,e)}),o(()=>be.value&&!Z.value&&!ie.value&&(!Fe.value||Ne.value&&!!Y.value.trim())&&(Fe.value||Ie.value||G.value),e=>L(`can-save-change`,e),{immediate:!0}),o(()=>ye.value||ie.value,e=>L(`busy-change`,e),{immediate:!0});async function ze(){await Be(async()=>{q.value=await N.models(!0),Se.value=``},`模型列表已刷新`,!1)}async function Be(e,t,n=!0){if(!(Z.value||ie.value)){Z.value=!0,ye.value=n,ce.value=``,le.value=``;try{let n=await e();t&&n!==!1&&(le.value=t)}catch(e){ce.value=e instanceof Error?e.message:`操作失败`}finally{Z.value=!1,ye.value=!1}}}async function Ve(){await Be(async()=>{let[e,t,n,r]=await Promise.all([I.section===`defaults`?Promise.resolve({providers:[]}):N.providers(I.bot),I.section===`defaults`?Promise.resolve({providers:[]}):N.oauth(I.bot),I.section===`defaults`?Promise.resolve({}):N.env(I.bot),N.config(I.bot)]);ae.value=e.providers,oe.value=t.providers,K.value=n,J.value=r.config.model?.provider??``,Y.value=r.config.model?.default??``;let i=r.config.fallback_model;X.value=(Array.isArray(i)?i:i?[i]:[]).map(e=>`${e.provider} ${e.model}`).join(`
|
|
2
2
|
`),Ce.value={provider:J.value,model:Y.value},we.value=X.value,be.value=!0,I.bot||(q.value=await N.models(!1).catch(()=>{Se.value=`暂时无法读取模型列表,可重试刷新。`})),await He()},void 0,!1)}async function He(){if(I.bot||I.section!==`all`&&I.section!==`connections`){_e.value=[];return}try{let[e,t]=await Promise.all([M.config(`image_gen`),M.config(`video_gen`)]),n=new Set(ae.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||!!K.value[t.key]?.is_set;let o=`${i} · ${e.name}`;a.uses.includes(o)||a.uses.push(o),r.set(t.key,a)}_e.value=[...r.values()]}catch{_e.value=[]}}t({reset:()=>v.value?E.value?.reset():Promise.all([Ve(),R.value?.reset(),z.value?.reset(),B.value?.reset()])}),c(Ve);async function Ue(e){let t=ve.value[e]?.trim();t&&await Be(async()=>{await N.setEnv(e,t,I.bot),ve.value[e]=``,K.value=await N.env(I.bot),await He(),L(`changed`)},`媒体密钥已保存`)}async function We(e){let t=ke(e),n=fe.value[e.id]?.trim();!t||!n||await Be(async()=>{await N.setEnv(t,n,I.bot),fe.value[e.id]=``,K.value=await N.env(I.bot),L(`changed`)},`${e.label} 密钥已保存`)}async function Ge(e){await Be(async()=>{await N.deleteEnv(e,I.bot),K.value=await N.env(I.bot),await He(),L(`changed`)},`密钥已移除`)}function Ke(e){Z.value||ue.value||(de=document.activeElement instanceof HTMLElement?document.activeElement:void 0,ue.value=De(e))}function qe(){ue.value=void 0,n(()=>{de?.isConnected&&de.focus({preventScroll:!0})})}async function Je(){le.value=`登录成功`,L(`changed`);try{let[e,t]=await Promise.all([N.oauth(I.bot),N.env(I.bot)]);oe.value=e.providers,K.value=t}catch{ce.value=`登录已完成,连接状态刷新失败,请刷新页面。`}}async function Ye(e){await Be(async()=>{await N.oauthDisconnect(e,I.bot),oe.value=(await N.oauth(I.bot)).providers,L(`changed`)},`已退出登录`)}async function Xe(e){if(pe.value===e){pe.value=``;return}await Be(async()=>{let t=await N.pool(e,I.bot);me.value=t.entries,ge.value=t.strategy,pe.value=e},void 0,!1)}async function Ze(){let e=pe.value;!e||!he.value.trim()||await Be(async()=>{await N.addPool(e,he.value.trim(),Q.value.trim(),I.bot),he.value=``,Q.value=``,me.value=(await N.pool(e,I.bot)).entries,L(`changed`)},`已加入凭据池`)}async function Qe(e){let t=pe.value;await Be(async()=>{await N.removePool(t,e,I.bot),me.value=(await N.pool(t,I.bot)).entries,L(`changed`)},`已移除`)}async function $e(){let e=pe.value;await Be(async()=>{let t=(await N.config(I.bot)).config.credential_pool_strategies??{};await N.patchConfig({credential_pool_strategies:{...t,[e]:ge.value}},I.bot)},`轮换策略已保存`)}async function et(e=!1){let t=await N.setModel({scope:`main`,provider:J.value,model:Y.value.trim(),...e?{confirm_expensive_model:!0}:{}});return t.confirm_required?!e&&window.confirm(t.confirm_message||`该模型费用较高,确认使用?`)?et(!0):!1:(Ce.value={provider:J.value,model:Y.value},L(`changed`),!0)}function tt(){return X.value.split(`
|
|
3
3
|
`).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 nt(e=tt()){await N.patchConfig({fallback_model:e.length?e:null},I.bot),we.value=X.value,L(`changed`)}async function rt(){!Ne.value||!Y.value.trim()||await Be(()=>et(),`默认模型已保存,新一轮对话生效`)}async function it(){await Be(()=>nt(),`故障回退已保存`)}async function at(){!Te.value?.reportValidity()||!be.value||Fe.value&&!Ne.value||await Be(async()=>{let e=tt(),t=!1;if(Fe.value){if(!await et())return!1;t=!0}try{Ie.value&&await nt(e)}catch(e){throw t?Error(`默认模型已保存,故障回退尚未保存。`+(e instanceof Error?e.message:`请重试。`)):e}return!(te.value&&await R.value?.save()===!1||V.value&&await z.value?.save()===!1||H.value&&await B.value?.save()===!1)},`设置已保存,新一轮对话生效`)}async function ot(){let e=$.value;!e.name.trim()||!e.base_url.trim()||await Be(async()=>{await N.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},I.bot),$.value={name:``,base_url:``,model:``,api_key:``,api_mode:``};let t=await Promise.all([N.providers(I.bot),N.oauth(I.bot),N.env(I.bot)]);ae.value=t[0].providers,oe.value=t[1].providers,K.value=t[2],I.bot||(q.value=await N.models()),L(`changed`)},`自定义端点已保存`)}return(t,n)=>(i(),_(`section`,{class:`hermes-providers`,"aria-busy":Z.value,"aria-label":`Hermes 供应商`},[e.section!==`defaults`&&!v.value?(i(),_(`p`,Zt,r(e.bot?`这里的登录和密钥只对此 Bot 生效,并覆盖系统默认连接。`:`连接供服务器中的 Bot 使用;登录与密钥安全保存,凭据不会完整回显。`),1)):y(``,!0),ce.value?(i(),_(`p`,Qt,r(ce.value),1)):y(``,!0),le.value?(i(),_(`p`,$t,r(le.value),1)):y(``,!0),ue.value?(i(),g(ee,{key:ue.value.id,provider:ue.value,bot:e.bot,onClose:n[0]||=e=>{qe(),O()},onSuccess:Je},null,8,[`provider`,`bot`])):y(``,!0),v.value?(i(),g(W,{key:4,ref_key:`networkEditor`,ref:E,provider:v.value.id,name:v.value.name,bot:e.bot,"can-login":!!De(v.value.id)&&!De(v.value.id).status.logged_in,onBack:F,onLogin:n[1]||=e=>Ke(v.value.id),onChanged:O,onDirtyChange:n[2]||=e=>b.value=e,onBusyChange:n[3]||=e=>ye.value=e},null,8,[`provider`,`name`,`bot`,`can-login`])):y(``,!0),v.value?y(``,!0):(i(),_(f,{key:5},[!e.bot&&e.section!==`connections`?(i(),_(`form`,{key:0,id:e.formId,ref_key:`defaultsForm`,ref:Te,class:`defaults-form`,onSubmit:w(at,[`prevent`])},[e.section===`all`||e.section===`defaults`?(i(),_(f,{key:0},[n[33]||=m(`div`,{class:`defaults-heading`},[m(`h4`,null,`默认对话模型`),m(`p`,null,`Bot 未单独指定模型时使用此配置。`)],-1),m(`label`,tn,[n[25]||=m(`span`,null,[m(`strong`,null,`供应商`),m(`small`,null,`只列出模型连接中已授权的供应商。`)],-1),a(m(`select`,{"onUpdate:modelValue":n[4]||=e=>J.value=e,required:Fe.value,"aria-label":`默认模型供应商`,disabled:Z.value||!be.value},[n[24]||=m(`option`,{value:``},`请选择`,-1),(i(!0),_(f,null,s(Me.value,e=>(i(),_(`option`,{key:e.slug,value:e.slug},r(e.name),9,rn))),128)),J.value&&!Ne.value?(i(),_(`option`,{key:0,value:J.value},r(q.value?.providers.find(e=>e.slug===J.value)?.name||J.value)+`(未授权)`,9,an)):y(``,!0)],8,nn),[[D,J.value]])]),m(`label`,on,[n[26]||=m(`span`,null,[m(`strong`,null,`模型`),m(`small`,null,`选择默认的对话模型。`)],-1),a(m(`input`,{"onUpdate:modelValue":n[5]||=e=>Y.value=e,required:Fe.value,"aria-label":`默认对话模型`,list:`hermes-main-models`,disabled:Z.value||!be.value,placeholder:`选择或输入模型 ID`},null,8,sn),[[C,Y.value]])]),m(`datalist`,cn,[(i(!0),_(f,null,s(je.value,e=>(i(),_(`option`,{key:e,value:e},null,8,ln))),128))]),m(`div`,un,[m(`span`,{class:l({configured:Ne.value})},r(be.value?Se.value||(Ne.value?`服务已授权`:J.value?`该供应商尚未授权,请先到模型连接完成授权。`:`请选择已授权的模型服务`):`正在读取配置…`),3),m(`button`,{type:`button`,class:`refresh-models`,disabled:Z.value,onClick:ze},[S(T,{name:`refresh`,size:16}),n[27]||=d(`刷新模型列表`,-1)],8,dn)]),e.embedded?y(``,!0):(i(),_(`button`,{key:0,type:`button`,disabled:Z.value||!Ne.value||!Y.value.trim(),onClick:rt},`保存默认模型`,8,fn)),m(`div`,pn,[n[31]||=m(`h4`,null,`故障回退`,-1),n[32]||=m(`p`,null,`默认模型不可用时,按顺序尝试备用模型。`,-1),m(`details`,null,[m(`summary`,null,[n[28]||=m(`span`,null,`回退模型`,-1),m(`span`,null,r(X.value.trim()?X.value.trim().split(`
|
|
4
4
|
`).length+` 个备用模型`:`尚未设置`),1),S(T,{name:`chevron-left`,size:18})]),m(`label`,null,[n[29]||=d(`备用模型顺序`,-1),a(m(`textarea`,{"onUpdate:modelValue":n[6]||=e=>X.value=e,rows:`4`,placeholder:`每行:供应商 模型,以空格分隔`,disabled:Z.value},null,8,mn),[[C,X.value]])]),n[30]||=m(`small`,null,`按从上到下的顺序尝试;留空可关闭回退。`,-1),e.embedded?y(``,!0):(i(),_(`button`,{key:0,type:`button`,disabled:Z.value,onClick:it},`保存回退链`,8,hn))])])],64)):y(``,!0),e.section===`all`||e.section===`auto`?(i(),g(yt,{key:1,ref_key:`jevEditor`,ref:R,models:q.value,disabled:Z.value||ie.value,onDirtyChange:n[7]||=e=>te.value=e,onBusyChange:n[8]||=e=>ne.value=e},null,8,[`models`,`disabled`])):y(``,!0),e.section===`all`||e.section===`auto`?(i(),g(Dt,{key:2,ref_key:`jevNetworkEditor`,ref:z,disabled:Z.value||ie.value,onDirtyChange:n[9]||=e=>V.value=e,onBusyChange:n[10]||=e=>re.value=e,onManageNetwork:n[11]||=e=>L(`manage-network`)},null,8,[`disabled`])):y(``,!0),e.section===`all`||e.section===`visibility`?(i(),g(Yt,{key:3,ref_key:`botModelsEditor`,ref:B,models:q.value,disabled:Z.value||ie.value,onDirtyChange:n[12]||=e=>H.value=e,onBusyChange:n[13]||=e=>U.value=e},null,8,[`models`,`disabled`])):y(``,!0)],40,en)):y(``,!0),e.section===`all`||e.section===`connections`?(i(),_(f,{key:1},[Pe.value.length?(i(),_(`div`,gn,[n[34]||=m(`h4`,null,`已连接服务`,-1),m(`ul`,_n,[(i(!0),_(f,null,s(Pe.value,e=>(i(),_(`li`,{key:e.slug},[m(`div`,vn,[m(`strong`,null,r(e.name),1),m(`span`,yn,r(e.authenticated===!0?`已授权`:`当前服务`),1)]),m(`p`,bn,r(e.models.length)+` 个可选模型`,1),m(`button`,{type:`button`,class:`link`,onClick:t=>A(e.slug,e.name)},r(k(e.slug)),9,xn)]))),128))])])):y(``,!0),Oe.value.length&&(xe.value||Oe.value.some(e=>e.status.logged_in))?(i(),_(`div`,Sn,[n[36]||=m(`h4`,null,`其他登录方式`,-1),m(`ul`,Cn,[(i(!0),_(f,null,s(Oe.value.filter(e=>xe.value||e.status.logged_in),e=>(i(),_(`li`,{key:e.id},[m(`div`,wn,[m(`strong`,null,r(e.name),1),n[35]||=d(),m(`code`,null,r(e.id),1),m(`span`,{class:l([`badge`,e.status.logged_in?`ok`:``])},r(e.status.logged_in?`已登录`:`未登录`),3)]),m(`button`,{type:`button`,class:`link`,onClick:t=>A(e.id,e.name)},r(k(e.id)),9,Tn),e.status.logged_in&&e.disconnectable?(i(),_(`p`,En,[m(`button`,{type:`button`,disabled:Z.value,onClick:t=>Ye(e.id)},`退出登录`,8,Dn)])):e.status.logged_in?y(``,!0):(i(),_(`p`,On,[m(`button`,{type:`button`,disabled:Z.value,"aria-haspopup":`dialog`,onClick:t=>Ke(e.id)},`登录 `+r(e.name),9,kn)]))]))),128))])])):y(``,!0),m(`div`,An,[m(`div`,jn,[m(`h4`,null,r(xe.value?`添加模型连接`:`已配置供应商`),1),e.section===`connections`?(i(),_(`button`,{key:0,type:`button`,disabled:Z.value,onClick:n[14]||=e=>xe.value=!xe.value},r(xe.value?`查看已配置`:`添加连接`),9,Mn)):y(``,!0)]),a(m(`input`,{"onUpdate:modelValue":n[15]||=e=>se.value=e,type:`search`,placeholder:`搜索供应商或别名`,"aria-label":`搜索供应商`},null,512),[[C,se.value]]),m(`ul`,Nn,[(i(!0),_(f,null,s(Ee.value,e=>(i(),_(`li`,{key:e.id},[m(`div`,Pn,[m(`strong`,null,r(e.label),1),n[37]||=d(),m(`code`,null,r(e.id),1),m(`span`,{class:l([`badge`,Ae(e)?`ok`:``])},r(Ae(e)?`已配置`:`未配置`),3)]),m(`button`,{type:`button`,class:`link`,onClick:t=>A(e.id,e.label)},r(k(e.id)),9,Fn),De(e.id)?(i(),_(f,{key:0},[De(e.id).status.logged_in?(i(),_(`p`,In,[d(`已登录 `+r(De(e.id).status.token_preview?`· …`+De(e.id).status.token_preview:``)+` `,1),De(e.id).disconnectable?(i(),_(`button`,{key:0,type:`button`,disabled:Z.value,onClick:t=>Ye(e.id)},`退出登录`,8,Ln)):y(``,!0)])):(i(),_(`p`,Rn,[m(`button`,{type:`button`,disabled:Z.value,"aria-haspopup":`dialog`,onClick:t=>Ke(e.id)},`登录 `+r(De(e.id).name),9,zn)]))],64)):y(``,!0),ke(e)?(i(),_(`form`,{key:1,class:`row`,onSubmit:w(t=>We(e),[`prevent`])},[a(m(`input`,{"onUpdate:modelValue":t=>fe.value[e.id]=t,type:`password`,autocomplete:`new-password`,placeholder:K.value[ke(e)]?.is_set?`${ke(e)} 已设置(${K.value[ke(e)]?.redacted_value??`***`})`:ke(e),"aria-label":`${e.label} API Key`},null,8,Vn),[[C,fe.value[e.id]]]),m(`button`,{type:`submit`,disabled:Z.value||!fe.value[e.id]?.trim()},`保存`,8,Hn),K.value[ke(e)]?.is_set?(i(),_(`button`,{key:0,type:`button`,disabled:Z.value,onClick:t=>Ge(ke(e))},`移除`,8,Un)):y(``,!0)],40,Bn)):y(``,!0),m(`button`,{type:`button`,class:`link`,onClick:t=>Xe(e.id)},r(pe.value===e.id?`收起凭据池`:`凭据池`),9,Wn),pe.value===e.id?(i(),_(`div`,Gn,[m(`ol`,null,[(i(!0),_(f,null,s(me.value,e=>(i(),_(`li`,{key:e.id},[d(r(e.label)+` · `+r(e.authType)+` · `+r(e.source)+` `+r(e.tokenPreview)+` `,1),e.lastStatus?(i(),_(`em`,Kn,r(e.lastStatus),1)):y(``,!0),m(`button`,{type:`button`,disabled:Z.value,onClick:t=>Qe(e.index)},`删除`,8,qn)]))),128))]),m(`form`,{class:`row`,onSubmit:w(Ze,[`prevent`])},[a(m(`input`,{"onUpdate:modelValue":n[16]||=e=>he.value=e,type:`password`,autocomplete:`new-password`,placeholder:`追加 API Key`},null,512),[[C,he.value]]),a(m(`input`,{"onUpdate:modelValue":n[17]||=e=>Q.value=e,placeholder:`标签(可选)`},null,512),[[C,Q.value]]),m(`button`,{type:`submit`,disabled:Z.value||!he.value.trim()},`加入`,8,Jn)],32),m(`label`,Yn,[n[39]||=d(`轮换策略`,-1),a(m(`select`,{"onUpdate:modelValue":n[18]||=e=>ge.value=e},[...n[38]||=[m(`option`,{value:`fill_first`},`fill_first`,-1),m(`option`,{value:`round_robin`},`round_robin`,-1),m(`option`,{value:`least_used`},`least_used`,-1),m(`option`,{value:`random`},`random`,-1)]],512),[[D,ge.value]]),m(`button`,{type:`button`,disabled:Z.value,onClick:$e},`保存`,8,Xn)])])):y(``,!0)]))),128))])]),_e.value.length?(i(),_(`div`,Zn,[n[41]||=m(`h4`,null,`媒体专用凭据`,-1),n[42]||=m(`p`,{class:`hint`},`这些密钥只供图片或视频使用。保存后,对应页面可以直接选用已授权的供应商。`,-1),m(`ul`,Qn,[(i(!0),_(f,null,s(_e.value,e=>(i(),_(`li`,{key:e.key},[m(`div`,$n,[m(`strong`,null,r(e.prompt),1),n[40]||=d(),m(`code`,null,r(e.key),1),m(`span`,{class:l([`badge`,e.isSet?`ok`:``])},r(e.isSet?`已配置`:`未配置`),3)]),m(`p`,er,r(e.uses.join(`、`)),1),m(`form`,{class:`row`,onSubmit:w(t=>Ue(e.key),[`prevent`])},[a(m(`input`,{"onUpdate:modelValue":t=>ve.value[e.key]=t,type:`password`,autocomplete:`new-password`,placeholder:e.isSet?`${e.key} 已设置,留空则不修改`:e.key,"aria-label":e.prompt},null,8,nr),[[C,ve.value[e.key]]]),m(`button`,{type:`submit`,disabled:Z.value||!ve.value[e.key]?.trim()},`保存`,8,rr),e.isSet?(i(),_(`button`,{key:0,type:`button`,disabled:Z.value,onClick:t=>Ge(e.key)},`移除`,8,ir)):y(``,!0)],40,tr)]))),128))])])):y(``,!0),!Ee.value.length&&!Pe.value.length&&!_e.value.length?(i(),_(`p`,ar,`暂无匹配的连接。可添加供应商或自定义服务。`)):y(``,!0),m(`details`,or,[n[50]||=m(`summary`,null,`添加自定义模型服务`,-1),m(`form`,{class:`block`,onSubmit:w(ot,[`prevent`])},[n[49]||=m(`h4`,null,`自定义 OpenAI 兼容服务`,-1),m(`label`,null,[n[43]||=d(`服务名称`,-1),a(m(`input`,{"onUpdate:modelValue":n[19]||=e=>$.value.name=e,placeholder:`名称`},null,512),[[C,$.value.name]])]),m(`label`,null,[n[44]||=d(`服务地址`,-1),a(m(`input`,{"onUpdate:modelValue":n[20]||=e=>$.value.base_url=e,type:`url`,placeholder:`https://host/v1`},null,512),[[C,$.value.base_url]])]),m(`label`,null,[n[45]||=d(`默认模型`,-1),a(m(`input`,{"onUpdate:modelValue":n[21]||=e=>$.value.model=e,placeholder:`默认模型`},null,512),[[C,$.value.model]])]),m(`label`,null,[n[46]||=d(`API Key(可选)`,-1),a(m(`input`,{"onUpdate:modelValue":n[22]||=e=>$.value.api_key=e,type:`password`,autocomplete:`new-password`,placeholder:`API Key`},null,512),[[C,$.value.api_key]])]),m(`label`,null,[n[48]||=d(`接口协议`,-1),a(m(`select`,{"onUpdate:modelValue":n[23]||=e=>$.value.api_mode=e},[...n[47]||=[m(`option`,{value:``},`自动识别`,-1),m(`option`,{value:`chat_completions`},`chat_completions`,-1),m(`option`,{value:`codex_responses`},`codex_responses`,-1),m(`option`,{value:`anthropic_messages`},`anthropic_messages`,-1)]],512),[[D,$.value.api_mode]])]),m(`button`,{type:`submit`,disabled:Z.value||!$.value.name.trim()||!$.value.base_url.trim()},`保存端点`,8,sr)],32)])],64)):y(``,!0)],64))],8,Xt))}}),[[`__scopeId`,`data-v-69d4d48a`]]),lr=[`vision`,`compression`,`skills_hub`,`approval`,`mcp`,`title_generation`,`review`,`voice_chat`,`triage_specifier`,`kanban_decomposer`,`profile_describer`,`curator`,`memory_query_rewrite`],ur={vision:`看图`,compression:`上下文压缩`,skills_hub:`技能中心`,approval:`智能审批`,mcp:`MCP`,title_generation:`会话标题`,review:`后台复盘`,voice_chat:`语音对话`,triage_specifier:`任务分诊`,kanban_decomposer:`看板拆解`,profile_describer:`简介生成`,curator:`技能整理`,memory_query_rewrite:`记忆检索改写`},dr={class:`memory-files`,"aria-label":`Markdown 记忆文件`},fr={key:0,role:`alert`},pr={key:1,role:`status`},mr={class:`file-list`},hr=[`disabled`,`onClick`],gr=[`disabled`],_r=[`disabled`],vr=[`disabled`],yr={class:`actions`},br=[`disabled`],xr=[`disabled`],Sr=[`disabled`],Cr=[`disabled`,`onClick`],wr=`/api/app/workspace`,Tr=b(p({__name:`MemoryFilesPanel`,props:{agentId:{},scope:{},projectId:{}},emits:[`dirty-change`,`changed`],setup(t,{emit:n}){let c=t,l=n,u=h([]),p=h(),g=h(``),v=h(`memory/notes.md`),b=h(``),x=h(``),S=h(!1),T=h([]),E=0,D=()=>({scope:c.scope,agentId:c.agentId,...c.scope===`project`?{projectId:c.projectId}:{}}),O=(e={})=>new URLSearchParams({...D(),...e});async function A(e){if(!S.value){S.value=!0,b.value=``,x.value=``;try{await e()}catch(e){b.value=e instanceof Error?e.message:`操作失败`}finally{S.value=!1}}}async function j(){let e=++E;if(!c.agentId||c.scope===`project`&&!c.projectId){u.value=[];return}try{let t=await k(`${wr}/memory-files?${O()}`);e===E&&(u.value=t.files)}catch(t){e===E&&(b.value=String(t))}}async function M(e){await A(async()=>{let t=E,n=await k(`${wr}/memory-file?${O({path:e})}`);t===E&&(p.value=n,g.value=n.content,T.value=[])})}async function N(){p.value&&await A(async()=>{p.value=await k(`/api/app/workspace/memory-file`,{method:`PUT`,body:{...D(),requestId:F(),path:p.value.path,content:g.value,expectedHash:p.value.hash}}),g.value=p.value.content,x.value=`文件已保存,下一轮对话生效。`,l(`changed`),await j()})}async function ee(){await A(async()=>{T.value=(await k(`${wr}/memory-file-history?${O()}`)).revisions.filter(e=>e.path===p.value?.path)})}async function P(e){await A(async()=>{p.value=await k(`/api/app/workspace/memory-file-revert`,{method:`POST`,body:{...D(),requestId:F(),id:e.id,expectedHash:p.value.hash}}),g.value=p.value.content,x.value=`已撤销该次修改。`,await j(),l(`changed`)})}return o(()=>[c.scope,c.agentId,c.projectId],()=>{p.value=void 0,g.value=``,T.value=[],j()},{immediate:!0}),o(()=>!!p.value&&g.value!==p.value.content,e=>l(`dirty-change`,e)),e(()=>{E++}),(e,n)=>(i(),_(`section`,dr,[n[7]||=m(`h3`,null,`记忆文件`,-1),n[8]||=m(`p`,null,`MEMORY.md 自动加载;主题和日记按需读取。可以直接编辑 Markdown。`,-1),b.value?(i(),_(`p`,fr,r(b.value),1)):y(``,!0),x.value?(i(),_(`p`,pr,r(x.value),1)):y(``,!0),p.value?(i(),_(f,{key:3},[m(`label`,null,[d(r(p.value.path),1),a(m(`textarea`,{"onUpdate:modelValue":n[2]||=e=>g.value=e,disabled:S.value,rows:`16`,spellcheck:`false`,"aria-label":`记忆 Markdown 内容`},null,8,vr),[[C,g.value]])]),m(`div`,yr,[m(`button`,{disabled:S.value||g.value===p.value.content,onClick:N},` 保存`,8,br),m(`button`,{disabled:S.value,onClick:n[3]||=e=>{p.value=void 0,T.value=[]}},` 取消编辑`,8,xr),m(`button`,{disabled:S.value,onClick:ee},`修改历史`,8,Sr)]),(i(!0),_(f,null,s(T.value,e=>(i(),_(`details`,{key:e.id},[m(`summary`,null,r(new Date(e.at).toLocaleString()),1),n[5]||=m(`p`,null,`修改前`,-1),m(`pre`,null,r(e.before),1),n[6]||=m(`p`,null,`修改后`,-1),m(`pre`,null,r(e.after),1),m(`button`,{disabled:S.value||e.afterHash!==p.value.hash||g.value!==p.value.content,onClick:t=>P(e)},` 撤销此修改 `,8,Cr)]))),128))],64)):(i(),_(f,{key:2},[m(`div`,mr,[(i(!0),_(f,null,s(u.value,e=>(i(),_(`button`,{key:e.path,disabled:S.value,onClick:t=>M(e.path)},r(e.path)+` · `+r(e.bytes)+` B `,9,hr))),128))]),m(`form`,{onSubmit:n[1]||=w(e=>M(v.value),[`prevent`])},[m(`label`,null,[n[4]||=d(`新文件路径`,-1),a(m(`input`,{"onUpdate:modelValue":n[0]||=e=>v.value=e,placeholder:`memory/主题.md`,disabled:S.value},null,8,gr),[[C,v.value]])]),m(`button`,{disabled:S.value||!t.agentId},`创建或打开`,8,_r)],32)],64))]))}}),[[`__scopeId`,`data-v-3820f19a`]]);function Er(e){return e.status===`failed`?`投递或执行失败`:e.status===`stopped`?`协作已停止`:e.hasReply?`已收到回复`:e.replyTo?`回复已投递`:{queued:`已投递 · 排队中`,running:`正在处理`,waiting:`等待补充信息`,complete:`执行已结束 · 暂无回复`}[e.status??``]??`协作消息`}function Dr(e){return{queued:`排队中`,pending:`待执行`,failed:`执行失败`,interrupted:`已中断`,running:`进行中`,review:`待复核`,waiting:`需要补充信息`,blocked:`遇到阻碍`,complete:`已完成`,cancelling:`正在停止`,cancelled:`已停止`}[e]??`状态待确认`}var Or={bot_created:`创建了 Bot`,helper_created:`创建了临时助手`,team_created:`组建了团队`,assignment_created:`派发了任务`};function kr(e){return e===`outgoing`?`已发消息给`:`消息来自`}function Ar(e){return e===`incoming`}function jr(e){let t=[],n=e.coordinatorId?e.name(e.coordinatorId):`负责人`;for(let n of e.activities??[]){let r=n.activity;!r||r.kind===`assignment_created`&&e.assignments.length||t.push({id:`activity:${n.id}`,title:`${r.actorName} ${Or[r.kind]} ${r.targetName}`,status:`已记录`,content:r.description,at:n.createdAt})}for(let r of e.assignments){let i=e.name(r.agentId);t.push({id:`assignment:${r.id}:created`,title:`${n} → ${i} · 派发任务`,status:Dr(r.status),content:[r.title,r.brief].filter(Boolean).join(`
|
|
5
5
|
`),at:r.createdAt??0}),r.result&&t.push({id:`assignment:${r.id}:result`,title:`${i} → ${n} · 回传结果`,status:`已回传`,content:`${r.title}\n${r.result}`,at:r.updatedAt??r.createdAt??0}),r.review&&t.push({id:`assignment:${r.id}:review`,title:`${n} → ${i} · 复核意见`,status:Dr(r.status),content:r.review,at:r.updatedAt??r.createdAt??0})}for(let n of e.peers)t.push({id:`peer:${n.id}`,title:`${n.fromName||e.name(n.fromAgentId)} → ${n.targetName||(n.toAgentId?e.name(n.toAgentId):`群聊`)}`,status:Er(n),content:n.content,at:n.createdAt??0,error:n.error,peer:n});return[...new Map(t.map(e=>[e.id,e])).values()].sort((e,t)=>e.at-t.at)}var Mr={key:0},Nr={key:1,"aria-label":`记忆与项目分类`},Pr=[`aria-pressed`,`onClick`],Fr=[`aria-busy`],Ir={key:0,class:`actions`},Lr={key:1,role:`alert`,class:`knowledge-error`},Rr={key:0,class:`project-heading`},zr=[`value`],Br=[`value`,`disabled`],Vr={key:0,class:`check`},Hr={class:`actions`},Ur=[`disabled`],Wr={key:0,class:`project-list`,"aria-label":`项目列表`},Gr=[`aria-pressed`,`onClick`],Kr={key:1,class:`project-details`,"aria-label":`当前项目详情`},qr={key:0,class:`project-description`},Jr={class:`project-detail-row`},Yr={class:`project-members`},Xr={key:0},Zr={class:`project-detail-row`},Qr={class:`project-detail-row`},$r={class:`project-detail-actions`},ei={class:`actions`},ti=[`onClick`],ni=[`onClick`],ri={key:5,class:`empty`},ii={class:`scope-note`},ai={class:`pre-wrap`},oi={key:0},si={key:1,class:`knowledge-error`},ci=[`disabled`,`onClick`],li={key:0,class:`empty`},ui={class:`filters`},di={key:0},fi=[`disabled`],pi=[`value`],mi={key:1},hi=[`disabled`],gi=[`value`],_i={class:`scope-note`},vi={key:0,class:`check`},yi=[`checked`,`disabled`],bi={key:1,role:`status`},xi={key:2,class:`actions`},Si=[`disabled`],Ci=[`href`],wi={key:0},Ti=[`value`],Ei={class:`actions`},Di=[`disabled`],Oi={class:`pre-wrap`},ki={key:0,role:`status`},Ai={key:1},ji=[`href`],Mi={key:0},Ni={class:`actions`},Pi=[`onClick`],Fi=[`onClick`,`disabled`],Ii=[`onClick`,`disabled`],Li={key:4,class:`actions`},Ri={role:`status`},zi=[`disabled`],Bi=[`disabled`],Vi={key:5,class:`empty`},Hi={key:6,class:`knowledge-editor`},Ui={key:7},Wi={key:0},Gi={key:1},Ki=[`disabled`,`onClick`],qi=b(p({__name:`WorkspaceKnowledgePanel`,props:{agents:{},conversations:{},conversationId:{},taskId:{},assignments:{},goal:{},revision:{},embedded:{type:Boolean},initialTab:{},selectedAgentId:{},hideAgentControls:{type:Boolean}},emits:[`changed`,`dirty-change`],setup(p,{expose:b,emit:A}){let j=p,M=A,N=h(),ee=h(!1),P=h(!1),I=h(``),R=h(`agent`),z=h(``),B=h(``),te=h(``),V=h([]),H=h([]),ne=h([]),re=h([]),U=h([]),W=h(),G=h(),ie=h(0),ae=h(),oe=h(!1),K=h(!1),q=h([]),J=0,Y,X=x(()=>j.agents.filter(e=>!e.archived&&!e.temporaryGoalId)),se=x(()=>j.agents.find(e=>e.id===z.value)),Z=x(()=>V.value.find(e=>e.id===B.value)),ce=x(()=>[`agent`,`user`,`project`].includes(R.value)?R.value:`agent`),le=e=>j.agents.find(t=>t.id===e)?.name??`原贡献者`,ue=x(()=>jr({peers:ne.value,activities:q.value,assignments:j.assignments??[],coordinatorId:j.goal?.coordinatorId,name:le})),de=()=>new URLSearchParams({scope:ce.value,...R.value===`agent`&&z.value?{agentId:z.value}:{},...R.value===`project`&&B.value?{projectId:B.value}:{},...te.value?{search:te.value}:{}}).toString(),fe={queued:`已排队`,pending:`待提炼`,running:`处理中`,waiting:`等待同伴`,complete:`已完成`,failed:`失败`,stopped:`已停止`,skipped:`已跳过`},pe={source_missing:`找不到对应的来源消息`,quote_mismatch:`引用与原文不一致`,sensitive_content:`包含凭据等敏感内容`,project_unbound:`项目记忆缺少关联项目`,user_not_explicit:`缺少用户明确表达的长期信息`,forgotten:`已遗忘的内容或来源不再保存`,stale:`推理期间记忆已更新,本次旧提炼结果未应用`};function me(e){if(e.status!==`complete`)return fe[e.status]??e.status;let t=e.result;return t?t.extractedCount?t.writtenCount?`已保存 ${t.writtenCount} 条记忆`:t.replayedCount?`重试已确认 ${t.replayedCount} 条记录`:t.duplicateCount?`未新增记忆,已有相同内容`:`候选记忆均未保存`:`本轮没有可记录内容`:`已结束(旧记录未统计保存结果)`}function he(e){return Object.entries(e.result?.skippedReasons??{}).filter(([,e])=>e>0).map(([e,t])=>`${pe[e]??`其他原因`}:${t} 条`)}async function Q(e=!1){if(e&&oe.value&&R.value!==`collaboration`)return;let t=++J;e||(I.value=``);try{let e=await k(`/api/app/workspace/projects`);if(t!==J||!ee.value)return;if(V.value=e.projects,B.value||=V.value.find(e=>!e.archived)?.id??``,R.value===`collaboration`){let[e,n]=await Promise.all([k(`/api/app/workspace/collaboration?${new URLSearchParams({...j.conversationId?{conversationId:j.conversationId}:{},...j.taskId?{taskId:j.taskId}:{}})}`),j.conversationId?k(`/api/app/conversations/${encodeURIComponent(j.conversationId)}/activities${j.taskId?`?taskId=${encodeURIComponent(j.taskId)}`:``}`):Promise.resolve({messages:[]})]);t===J&&(ne.value=e.messages,q.value=n.messages)}else if(R.value!==`projects`&&(R.value!==`project`||B.value)){let e=await k(`/api/app/workspace/memories?${de()}`);t===J&&(H.value=e.memories,ie.value=e.total??e.memories.length,ae.value=e.nextOffset,oe.value=!1)}else H.value=[],ie.value=0,ae.value=void 0,oe.value=!1;if(z.value){let e=await k(`/api/app/workspace/memory-jobs?agentId=${z.value}`);t===J&&(re.value=e.jobs)}}catch(e){t===J&&(I.value=String(e))}}async function ge(){if(P.value||ae.value===void 0)return;let e=J,t=de(),n=ae.value;P.value=!0,I.value=``;try{let r=await k(`/api/app/workspace/memories?${t}&offset=${n}&limit=100`);if(e!==J||!ee.value||t!==de())return;let i=new Set(H.value.map(e=>`${e.scope}:${e.agentId}:${e.id}`));H.value.push(...r.memories.filter(e=>!i.has(`${e.scope}:${e.agentId}:${e.id}`))),ie.value=r.total,ae.value=r.nextOffset,oe.value=!0}catch(t){e===J&&(I.value=String(t))}finally{P.value=!1}}async function $(e=`agent`,t,r){R.value=e,z.value=t??X.value[0]?.id??``,B.value=r??``,ee.value=!0,W.value=void 0,G.value=void 0,U.value=[],te.value=``,await n(),j.embedded||N.value?.showModal(),await Q(),clearInterval(Y),Y=setInterval(()=>{!P.value&&!W.value&&!G.value&&Q(!0)},5e3)}function _e(){if(K.value){I.value=`请先保存文件或取消编辑。`;return}ee.value=!1,J++,clearInterval(Y),j.embedded||N.value?.close()}function ve(e){K.value||(R.value=e,W.value=void 0,G.value=void 0,U.value=[],Q())}async function ye(e){if(!P.value){P.value=!0,I.value=``;try{await e(),M(`changed`),await Q()}catch(e){I.value=String(e)}finally{P.value=!1}}}function be(e){U.value=[],W.value=e?{id:e.id,expectedRevision:e.revision,agentId:e.agentId,content:e.content,tier:e.tier}:{agentId:z.value||X.value[0]?.id||``,content:``,tier:`log`}}async function xe(){let e=W.value;if(!e?.content.trim()){I.value=`请输入需要记住的事实`;return}await ye(async()=>{await k(`/api/app/workspace/memories`,{method:`POST`,body:{requestId:F(),scope:ce.value,...ce.value===`project`?{projectId:B.value}:{},...e}}),W.value=void 0})}async function Se(e){await ye(async()=>{await k(`/api/app/workspace/memories/forget`,{method:`POST`,body:{requestId:F(),scope:e.scope,agentId:e.agentId,...e.projectId?{projectId:e.projectId}:{},id:e.id,expectedRevision:e.revision}})})}async function Ce(e){let t=new URLSearchParams({scope:e.scope,agentId:e.agentId,...e.projectId?{projectId:e.projectId}:{}});await ye(async()=>{U.value=(await k(`/api/app/workspace/memories/${e.id}/revisions?${t}`)).revisions})}function we(e){G.value=e?{...e,memberIds:[...e.memberIds],groupIds:[...e.groupIds]}:{id:``,name:``,description:``,memberIds:[],groupIds:[],revision:0,archived:!1,createdAt:0,updatedAt:0}}async function Te(){let e=G.value;if(!e?.name.trim()){I.value=`请输入项目名称`;return}await ye(async()=>{let t=await k(`/api/app/workspace/projects`,{method:`POST`,body:{requestId:F(),...e.id?{id:e.id,expectedRevision:e.revision}:{},name:e.name,description:e.description,memberIds:e.memberIds,groupIds:e.groupIds,archived:e.archived}});B.value=t.project.id,G.value=void 0})}async function Ee(e,t){await ye(async()=>{await k(`/api/app/agents/${z.value}`,{method:`PATCH`,body:{[e]:t}})})}return e(()=>{J++,clearInterval(Y)}),c(()=>{j.embedded&&$(j.initialTab??`projects`,j.selectedAgentId)}),o(()=>j.initialTab,e=>{j.embedded&&e&&ve(e)}),o(()=>j.revision,()=>{ee.value&&!P.value&&!W.value&&!G.value&&Q(!0)}),o(()=>[j.conversationId,j.taskId],()=>{J++,ne.value=[],q.value=[],ee.value&&R.value===`collaboration`&&Q()}),o(()=>K.value||!!W.value||!!G.value,e=>M(`dirty-change`,e)),b({open:$,close:_e}),(e,n)=>(i(),g(t(p.embedded?`section`:`dialog`),{ref_key:`dialog`,ref:N,class:l([`knowledge-dialog`,{"knowledge-dialog--embedded":p.embedded}]),"aria-labelledby":p.embedded?void 0:`knowledge-title`,onCancel:w(_e,[`prevent`]),onClose:n[27]||=e=>ee.value=!1},{default:u(()=>[p.embedded?y(``,!0):(i(),_(`header`,Mr,[n[28]||=m(`div`,null,[m(`h2`,{id:`knowledge-title`},`Bot 记忆与协作`),m(`p`,null,`管理长期事实、项目和同伴请求`)],-1),m(`button`,{type:`button`,onClick:_e,"aria-label":`关闭记忆与协作`},`关闭`)])),p.embedded?y(``,!0):(i(),_(`nav`,Nr,[(i(),_(f,null,s([[`agent`,`Bot 记忆`],[`user`,`用户记忆`],[`projects`,`项目`],[`project`,`项目记忆`],[`collaboration`,`协作`]],e=>m(`button`,{key:e[0],"aria-pressed":R.value===e[0],onClick:t=>ve(e[0])},r(e[1]),9,Pr)),64))])),m(`div`,{class:`knowledge-body`,"aria-busy":P.value},[p.embedded&&R.value===`project`?(i(),_(`div`,Ir,[m(`button`,{type:`button`,onClick:n[0]||=e=>ve(`projects`)},`返回项目`),n[29]||=m(`h3`,null,`项目记忆`,-1)])):y(``,!0),I.value?(i(),_(`p`,Lr,r(I.value),1)):y(``,!0),R.value===`projects`?(i(),_(f,{key:2},[p.embedded?(i(),_(`div`,Rr,[n[30]||=m(`div`,null,[m(`h3`,null,`项目`),m(`p`,null,`让同一项目的 Bot 共享决策与约定。`)],-1),G.value?y(``,!0):(i(),_(`button`,{key:0,type:`button`,class:`project-primary`,onClick:n[1]||=e=>we()},`新建项目`))])):G.value?y(``,!0):(i(),_(`button`,{key:1,onClick:n[2]||=e=>we()},`新建项目`)),G.value?(i(),_(`form`,{key:2,class:`knowledge-editor`,onSubmit:w(Te,[`prevent`])},[m(`h3`,null,r(G.value.id?`编辑项目`:`新建项目`),1),m(`label`,null,[n[31]||=d(`名称`,-1),a(m(`input`,{"onUpdate:modelValue":n[3]||=e=>G.value.name=e,required:``,maxlength:`100`},null,512),[[C,G.value.name]])]),m(`label`,null,[n[32]||=d(`说明`,-1),a(m(`textarea`,{"onUpdate:modelValue":n[4]||=e=>G.value.description=e,rows:`3`,maxlength:`16000`},null,512),[[C,G.value.description]])]),m(`fieldset`,null,[n[33]||=m(`legend`,null,`项目成员`,-1),(i(!0),_(f,null,s(X.value,e=>(i(),_(`label`,{key:e.id,class:`check`},[a(m(`input`,{"onUpdate:modelValue":n[5]||=e=>G.value.memberIds=e,type:`checkbox`,value:e.id},null,8,zr),[[E,G.value.memberIds]]),d(r(e.name),1)]))),128))]),m(`fieldset`,null,[n[34]||=m(`legend`,null,`关联群聊`,-1),n[35]||=m(`p`,null,`群内所有 Bot 需要先加入此项目。`,-1),(i(!0),_(f,null,s(p.conversations.filter(e=>e.kind===`group`&&!e.archived),e=>(i(),_(`label`,{key:e.id,class:`check`},[a(m(`input`,{"onUpdate:modelValue":n[6]||=e=>G.value.groupIds=e,type:`checkbox`,value:e.id,disabled:e.memberIds.some(e=>!G.value.memberIds.includes(e))||!!e.projectId&&e.projectId!==G.value.id},null,8,Br),[[E,G.value.groupIds]]),d(r(e.name),1)]))),128))]),G.value.id?(i(),_(`label`,Vr,[a(m(`input`,{"onUpdate:modelValue":n[7]||=e=>G.value.archived=e,type:`checkbox`},null,512),[[E,G.value.archived]]),n[36]||=d(`归档项目`,-1)])):y(``,!0),m(`div`,Hr,[m(`button`,{type:`submit`,disabled:P.value},`保存项目`,8,Ur),m(`button`,{type:`button`,onClick:n[8]||=e=>G.value=void 0},`取消`)])],32)):y(``,!0),p.embedded&&!G.value?(i(),_(f,{key:3},[V.value.length?(i(),_(`div`,Wr,[(i(!0),_(f,null,s(V.value,e=>(i(),_(`button`,{key:e.id,type:`button`,"aria-pressed":B.value===e.id,onClick:t=>B.value=e.id},[S(T,{name:`files`,size:21}),m(`span`,null,[m(`strong`,null,r(e.name)+r(e.archived?` · 已归档`:``),1),m(`small`,null,r(e.memberIds.length)+` 位 Bot · `+r(e.groupIds.length)+` 个群聊`,1)]),S(v(L),{class:`project-chevron`,"aria-hidden":`true`})],8,Gr))),128))])):y(``,!0),Z.value?(i(),_(`section`,Kr,[m(`h3`,null,r(Z.value.name),1),Z.value.description?(i(),_(`p`,qr,r(Z.value.description),1)):y(``,!0),m(`div`,Jr,[n[37]||=m(`span`,null,`项目成员`,-1),m(`div`,Yr,[(i(!0),_(f,null,s(Z.value.memberIds,e=>(i(),_(`span`,{key:e},[S(O,{name:le(e),avatar:p.agents.find(t=>t.id===e)?.avatar||``,size:24},null,8,[`name`,`avatar`]),d(r(le(e)),1)]))),128)),Z.value.memberIds.length?y(``,!0):(i(),_(`small`,Xr,`尚无成员`))])]),m(`div`,Zr,[n[38]||=m(`span`,null,`关联群聊`,-1),m(`div`,null,r(Z.value.groupIds.map(e=>p.conversations.find(t=>t.id===e)?.name??`原群聊`).join(`、`)||`尚未关联群聊`),1)]),m(`div`,Qr,[n[39]||=m(`span`,null,`项目记忆`,-1),m(`div`,null,[m(`button`,{type:`button`,onClick:n[9]||=e=>ve(`project`)},`查看记忆`)])]),m(`div`,$r,[m(`button`,{type:`button`,class:`project-primary`,onClick:n[10]||=e=>we(Z.value)},`编辑项目`)])])):y(``,!0)],64)):p.embedded?y(``,!0):(i(!0),_(f,{key:4},s(V.value,e=>(i(),_(`article`,{key:e.id},[m(`h3`,null,r(e.name)+r(e.archived?` · 已归档`:``),1),m(`p`,null,r(e.description||`暂无说明`),1),m(`small`,null,r(e.memberIds.map(e=>le(e)).join(`、`)||`尚无成员`)+` · `+r(e.groupIds.length)+` 个群`,1),m(`div`,ei,[m(`button`,{onClick:t=>we(e)},`编辑`,8,ti),m(`button`,{onClick:t=>{B.value=e.id,ve(`project`)}},`查看记忆`,8,ni)])]))),128)),!V.value.length&&!G.value?(i(),_(`p`,ri,`创建项目后,多个群可以共享该项目的决策和约定。`)):y(``,!0)],64)):R.value===`collaboration`?(i(),_(f,{key:3},[m(`p`,ii,r(p.taskId?`当前话题`:`当前聊天`)+` · `+r(ue.value.length)+` 条协作记录`,1),(i(!0),_(f,null,s(ue.value,e=>(i(),_(`article`,{key:e.id},[m(`details`,null,[m(`summary`,null,r(e.title)+` · `+r(e.status),1),m(`p`,ai,r(e.content),1),e.at?(i(),_(`small`,oi,r(new Date(e.at).toLocaleString()),1)):y(``,!0),e.error?(i(),_(`p`,si,r(e.error),1)):y(``,!0)]),e.peer&&[`queued`,`running`,`waiting`].includes(e.peer.status)?(i(),_(`button`,{key:0,disabled:P.value,onClick:t=>ye(async()=>{await v(k)(`/api/app/workspace/collaboration/${encodeURIComponent(e.peer.id)}/stop`,{method:`POST`})})},`停止此次协作`,8,ci)):y(``,!0)]))),128)),ue.value.length?y(``,!0):(i(),_(`p`,li,`暂无协作记录。你可以在聊天中让 Bot 联系同伴,或派发任务。`))],64)):(i(),_(f,{key:4},[z.value&&(ce.value!==`project`||B.value)?(i(),g(Tr,{key:0,"agent-id":z.value,scope:ce.value,"project-id":B.value,onDirtyChange:n[11]||=e=>K.value=e,onChanged:n[12]||=e=>{M(`changed`),Q()}},null,8,[`agent-id`,`scope`,`project-id`])):y(``,!0),m(`div`,ui,[[`agent`,`user`,`project`].includes(R.value)&&!p.selectedAgentId?(i(),_(`label`,di,[n[40]||=d(`记忆贡献 Bot`,-1),a(m(`select`,{disabled:K.value,"onUpdate:modelValue":n[13]||=e=>z.value=e,onChange:n[14]||=e=>{W.value=void 0,Q()}},[(i(!0),_(f,null,s(X.value,e=>(i(),_(`option`,{key:e.id,value:e.id},r(e.name),9,pi))),128))],40,fi),[[D,z.value]])])):y(``,!0),R.value===`project`?(i(),_(`label`,mi,[n[41]||=d(`项目`,-1),a(m(`select`,{disabled:K.value,"onUpdate:modelValue":n[15]||=e=>B.value=e,onChange:n[16]||=e=>{W.value=void 0,Q()}},[(i(!0),_(f,null,s(V.value,e=>(i(),_(`option`,{key:e.id,value:e.id},r(e.name),9,gi))),128))],40,hi),[[D,B.value]])])):y(``,!0),m(`form`,{onSubmit:n[18]||=w(e=>Q(),[`prevent`])},[m(`label`,null,[n[42]||=d(`搜索记忆`,-1),a(m(`input`,{"onUpdate:modelValue":n[17]||=e=>te.value=e,type:`search`,placeholder:`搜索事实、偏好或决策`},null,512),[[C,te.value]])]),n[43]||=m(`button`,{type:`submit`},`搜索`,-1)],32)]),m(`p`,_i,r(R.value===`agent`?`仅此 Bot 使用,可跨单聊和群聊延续。`:R.value===`user`?`同一账号的 Bot 共享,按贡献者保存。`:`仅「${Z.value?.name??`当前项目`}」成员读取。`),1),R.value===`agent`&&se.value?(i(),_(f,{key:1},[p.hideAgentControls?y(``,!0):(i(),_(`label`,vi,[m(`input`,{type:`checkbox`,checked:se.value.memoryEnabled!==!1,disabled:P.value,onChange:n[19]||=e=>Ee(`memoryEnabled`,e.target.checked)},null,40,yi),n[44]||=d(`自动记录长期事实`,-1)])),se.value.memoryStatus===`upgrade_required`?(i(),_(`p`,bi,`执行节点需要升级后才能启用隔离记忆;已保存的文件仍可管理。`)):y(``,!0)],64)):y(``,!0),R.value!==`project`||B.value?(i(),_(`div`,xi,[m(`button`,{onClick:n[20]||=e=>be(),disabled:!X.value.length},`添加记忆`,8,Si),m(`a`,{href:`/api/app/workspace/memory-export?${de()}`,download:`bot-memory.md`},`导出 Markdown`,8,Ci)])):y(``,!0),W.value?(i(),_(`form`,{key:3,class:`knowledge-editor`,onSubmit:w(xe,[`prevent`])},[m(`h3`,null,r(W.value.id?`编辑记忆`:`添加记忆`),1),!W.value.id&&R.value!==`agent`?(i(),_(`label`,wi,[n[45]||=d(`贡献 Bot`,-1),a(m(`select`,{"onUpdate:modelValue":n[21]||=e=>W.value.agentId=e},[(i(!0),_(f,null,s(X.value.filter(e=>R.value!==`project`||Z.value?.memberIds.includes(e.id)),e=>(i(),_(`option`,{key:e.id,value:e.id},r(e.name),9,Ti))),128))],512),[[D,W.value.agentId]])])):y(``,!0),m(`label`,null,[n[46]||=d(`事实`,-1),a(m(`textarea`,{"onUpdate:modelValue":n[22]||=e=>W.value.content=e,required:``,rows:`4`,maxlength:`2000`},null,512),[[C,W.value.content]])]),m(`label`,null,[n[48]||=d(`类别`,-1),a(m(`select`,{"onUpdate:modelValue":n[23]||=e=>W.value.tier=e},[...n[47]||=[m(`option`,{value:`profile`},`长期事实`,-1),m(`option`,{value:`log`},`历史记录`,-1),m(`option`,{value:`note`},`补充笔记`,-1)]],512),[[D,W.value.tier]])]),m(`div`,Ei,[m(`button`,{type:`submit`,disabled:P.value},`保存`,8,Di),m(`button`,{type:`button`,onClick:n[24]||=e=>W.value=void 0},`取消`)])],32)):y(``,!0),(i(!0),_(f,null,s(H.value,e=>(i(),_(`article`,{key:`${e.scope}:${e.agentId}:${e.id}`},[m(`p`,Oi,r(e.content),1),e.conflict?(i(),_(`p`,ki,`同主题有不同贡献,请核对来源。`)):y(``,!0),m(`small`,null,r(le(e.agentId))+` · `+r(e.origin===`manual`?`用户维护`:e.origin===`explicit`?`明确保存`:`自动提炼`)+` · `+r(new Date(e.updatedAt).toLocaleString())+` · 版本 `+r(e.revision),1),e.sources.length?(i(),_(`details`,Ai,[n[49]||=m(`summary`,null,`查看来源`,-1),(i(!0),_(f,null,s(e.sources,e=>(i(),_(`p`,{key:e.messageId},[m(`a`,{href:`/conversations/${e.conversationId}${e.taskId?`?taskId=${e.taskId}`:``}`},r(e.quote||`查看原话题`),9,ji),e.at?(i(),_(`small`,Mi,` · 来源 `+r(new Date(e.at).toLocaleString()),1)):y(``,!0)]))),128))])):y(``,!0),m(`div`,Ni,[m(`button`,{onClick:t=>be(e)},`编辑`,8,Pi),m(`button`,{onClick:t=>Ce(e),disabled:P.value},`修订记录`,8,Fi),m(`button`,{onClick:t=>Se(e),disabled:P.value},`遗忘`,8,Ii)])]))),128)),H.value.length?(i(),_(`div`,Li,[m(`small`,Ri,`已显示 `+r(H.value.length)+` / `+r(ie.value)+` 条`,1),ae.value===void 0?y(``,!0):(i(),_(`button`,{key:0,disabled:P.value,onClick:ge},`加载更多记忆`,8,zi)),oe.value?(i(),_(`button`,{key:1,disabled:P.value,onClick:n[25]||=e=>Q()},`刷新结果`,8,Bi)):y(``,!0)])):y(``,!0),!H.value.length&&!W.value?(i(),_(`p`,Vi,`暂无记忆。可手动添加,也可在对话中说明需要长期记住的事实。`)):y(``,!0),U.value.length?(i(),_(`section`,Hi,[n[50]||=m(`h3`,null,`修订记录`,-1),(i(!0),_(f,null,s(U.value,e=>(i(),_(`article`,{key:e.id},[m(`small`,null,`版本 `+r(e.revision)+` · `+r(e.operation===`forget`?`遗忘`:`保存`)+` · `+r(new Date(e.at).toLocaleString()),1),m(`p`,null,r(e.after?.content??e.before?.content),1)]))),128)),m(`button`,{onClick:n[26]||=e=>U.value=[]},`收起`)])):y(``,!0),R.value===`agent`&&re.value.length?(i(),_(`details`,Ui,[n[51]||=m(`summary`,null,`后台提炼记录`,-1),(i(!0),_(f,null,s(re.value,e=>(i(),_(`article`,{key:e.id},[m(`small`,null,r(new Date(e.createdAt).toLocaleString())+` · `+r(me(e)),1),e.result?(i(),_(`p`,Wi,`本次提炼 `+r(e.result.extractedCount)+` 条 · 新增保存 `+r(e.result.writtenCount)+` 条 · 重复 `+r(e.result.duplicateCount)+` 条 · 重试确认 `+r(e.result.replayedCount)+` 条`,1)):y(``,!0),(i(!0),_(f,null,s(he(e),e=>(i(),_(`p`,{key:e},r(e),1))),128)),e.error?(i(),_(`p`,Gi,r(e.error),1)):y(``,!0),e.status===`failed`?(i(),_(`button`,{key:2,disabled:P.value,onClick:t=>ye(async()=>{await v(k)(`/api/app/workspace/memory-jobs/${e.id}/retry`,{method:`POST`})})},`重试`,8,Ki)):y(``,!0)]))),128))])):y(``,!0)],64))],8,Fr)]),_:1},40,[`class`,`aria-labelledby`]))}}),[[`__scopeId`,`data-v-454b8349`]]);export{L as _,Dr as a,lr as c,ge as d,pe as f,ue as g,de as h,Ar as i,cr as l,fe as m,Or as n,Tr as o,me as p,kr as r,ur as s,qi as t,we as u};
|
|
6
|
-
//# sourceMappingURL=WorkspaceKnowledgePanel-
|
|
6
|
+
//# sourceMappingURL=WorkspaceKnowledgePanel-hy_IkIJI.js.map
|