ezllm 0.0.40 → 0.0.41
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/README.md +6 -7
- package/dist/cli.js +23 -24
- package/dist/daemon.js +6 -10
- package/dist/server.js +73 -83
- package/dist/web-ui/assets/{DashboardView-C0baZH6c.js → DashboardView-DRckeG7f.js} +1 -1
- package/dist/web-ui/assets/LayoutView-4x7mM1Nd.js +1 -0
- package/dist/web-ui/assets/{LayoutView-CQJN31vh.css → LayoutView-D84C9Iqp.css} +1 -1
- package/dist/web-ui/assets/{LoginView-C3CW0urr.js → LoginView-D55GMnh2.js} +1 -1
- package/dist/web-ui/assets/{LogsView-C70vgFde.js → LogsView-Ck8cUn2K.js} +1 -1
- package/dist/web-ui/assets/{ManagedServicesView-dC-MR3OW.js → ManagedServicesView-aU7KD-uK.js} +1 -1
- package/dist/web-ui/assets/{PluginsView-B7CeBD8Q.js → PluginsView-XtlAtfkK.js} +1 -1
- package/dist/web-ui/assets/{ProvidersView-B8l3DcZY.js → ProvidersView-BuCzzvhA.js} +1 -1
- package/dist/web-ui/assets/{ServiceStatusView-DpGDJHh9.js → ServiceStatusView-BfEtiG3k.js} +1 -1
- package/dist/web-ui/assets/SettingsView-C3lfSDLN.js +1 -0
- package/dist/web-ui/assets/{SettingsView-CB_w0Y2E.css → SettingsView-NXkxZUgr.css} +1 -1
- package/dist/web-ui/assets/{SetupView-B_hE_Uhm.js → SetupView-BB5YHhmw.js} +1 -1
- package/dist/web-ui/assets/{config-IC8ZbooF.js → config-B3YP6GMt.js} +1 -1
- package/dist/web-ui/assets/{index-D2JhqxaS.js → index-DVkpGX_l.js} +1 -1
- package/dist/web-ui/assets/{message-Cp_GAwQs.js → message-JXw_u_ps.js} +1 -1
- package/dist/web-ui/assets/{providers-BwuaO9o9.js → providers-CbsDigh3.js} +1 -1
- package/dist/web-ui/assets/{router-BzfmTCjF.js → router-DxY62FPf.js} +2 -2
- package/dist/web-ui/assets/{useCopyToast-BpTqycuM.js → useCopyToast-W6vLjLdg.js} +1 -1
- package/dist/web-ui/assets/{useManagerApi-lFkQleJX.js → useManagerApi-7t9qNB2C.js} +1 -1
- package/dist/web-ui/assets/{useQuickRangeFilter-DmQyTw4A.js → useQuickRangeFilter-BWtDACYs.js} +1 -1
- package/dist/web-ui/assets/useToast-DgnKZwIF.js +1 -0
- package/dist/web-ui/index.html +3 -3
- package/package.json +3 -2
- package/dist/web-ui/assets/LayoutView-BMNKjFyW.js +0 -1
- package/dist/web-ui/assets/SettingsView-CqUrHj3w.js +0 -1
- package/dist/web-ui/assets/useToast-D3xB24vj.js +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{A as e,F as t,I as n,M as r,O as i,P as a,Pt as o,Q as s,Tt as c,V as l,Wt as u,Z as d,a as f,at as p,et as m,fn as h,ht as g,i as _,it as v,j as y,k as b,mt as x,n as S,nt as C,vt as w,w as T}from"./router-BzfmTCjF.js";import{n as E,t as D}from"./index-D2JhqxaS.js";import{n as O,t as k}from"./useManagerApi-lFkQleJX.js";import{t as A}from"./config-IC8ZbooF.js";import{n as j,t as M}from"./useCopyToast-BpTqycuM.js";import{t as N}from"./useToast-D3xB24vj.js";import{t as P}from"./updateNote-CttDt8SZ.js";l(),u(),w();var F={class:`flex-between`},I={class:`muted-sm mb-8`},L={class:`switch-row`},R={class:`switch-info`},z={class:`switch-title`},B={class:`switch-row`},V={class:`switch-info`},H={class:`switch-title`},U={class:`switch-row`},W={class:`switch-info`},G={class:`switch-title`},K=D(n({__name:`HarnessSwitches`,setup(n){let{toast:i}=N(),o=c(!0),s=c(!1),l=c(null),u=c(null),f=c(null),_=c(null),S=c(`success`),C=async e=>{e||(l.value?s.value=!0:o.value=!0);try{l.value=await k.harness(),u.value=null}catch(t){e||(u.value=t.message)}finally{e||(o.value=!1,s.value=!1)}};d(()=>C(!1));let w={claudeCode:{label:`Claude Code`,file:`~/.claude/settings.json`,toggle:k.setClaudeCode},codex:{label:`Codex CLI`,file:`~/.codex/config.toml`,toggle:k.setCodex},dsh:{label:`DeepSeek Harness`,file:`~/.dsh/settings.yaml`,toggle:k.setDsh}},D=async(e,t)=>{if(!l.value||f.value)return;let n=w[e],r=t?`确定开启 ${n.label} 代理?将改写 ${n.file}(开启前自动备份,关闭时从备份还原)。`:`确定关闭 ${n.label} 代理?将从备份还原 ${n.file}(无备份时移除代理相关配置)。`;try{await E.confirm(r,t?`开启确认`:`关闭确认`,{confirmButtonText:t?`开启`:`关闭`,cancelButtonText:`取消`,type:`warning`})}catch{return}f.value=e;try{let e=await n.toggle(t);_.value=e.note??null,S.value=t?`success`:`info`,i(t?`已开启代理`:`已关闭代理`,`success`)}catch(e){i(e.message||`操作失败`,`error`)}finally{f.value=null,await C(!0)}};return(n,i)=>{let c=v(`el-button`),d=v(`el-alert`),w=v(`el-tag`),E=v(`el-switch`),O=v(`el-divider`),k=v(`el-empty`),A=v(`el-card`),j=p(`loading`);return g((m(),e(A,{shadow:`never`},{header:x(()=>[b(`div`,F,[i[7]||=b(`span`,{class:`fw-600`},`代理开关`,-1),t(c,{loading:s.value,onClick:i[0]||=e=>C(!1)},{default:x(()=>[...i[6]||=[a(`刷新`,-1)]]),_:1},8,[`loading`])])]),default:x(()=>[l.value?(m(),r(T,{key:0},[b(`div`,I,` 将本机 CLI 工具的流量一键指向本机网关(`+h(l.value.gatewayBase)+`)。 开启前自动备份原配置为 *.ellm-bak(保留最早的原始备份),关闭时从备份还原。 `,1),_.value?(m(),e(d,{key:0,title:_.value,type:S.value,"show-icon":``,class:`mb-8`,onClose:i[1]||=e=>_.value=null},null,8,[`title`,`type`])):y(``,!0),b(`div`,L,[b(`div`,R,[b(`div`,z,[i[8]||=a(` Claude Code `,-1),t(w,{type:l.value.claudeCode?`success`:`info`,size:`small`,"disable-transitions":``},{default:x(()=>[a(h(l.value.claudeCode?`已开启`:`未开启`),1)]),_:1},8,[`type`])]),i[9]||=b(`div`,{class:`switch-desc`},[a(` 写入 `),b(`code`,null,`~/.claude/settings.json`),a(` 的 env.ANTHROPIC_BASE_URL / ANTHROPIC_AUTH_TOKEN, 鉴权取网关配置的 masterKey(未设置将开启失败);其余字段原样保留,重启 Claude Code 会话后生效。 `)],-1)]),t(E,{"model-value":l.value.claudeCode,loading:f.value===`claudeCode`,onChange:i[2]||=e=>D(`claudeCode`,!!e)},null,8,[`model-value`,`loading`])]),t(O,{class:`switch-divider`}),b(`div`,B,[b(`div`,V,[b(`div`,H,[i[10]||=a(` Codex CLI `,-1),t(w,{type:l.value.codex?`success`:`info`,size:`small`,"disable-transitions":``},{default:x(()=>[a(h(l.value.codex?`已开启`:`未开启`),1)]),_:1},8,[`type`])]),i[11]||=b(`div`,{class:`switch-desc`},[a(` 写入 `),b(`code`,null,`~/.codex/config.toml`),a(` 的 model_provider 与 [model_providers.ellm-proxy] 段 (保留用户注释与排版);开启后需按提示设置环境变量 ELLM_PROXY_API_KEY 供 Codex 鉴权。 `)],-1)]),t(E,{"model-value":l.value.codex,loading:f.value===`codex`,onChange:i[3]||=e=>D(`codex`,!!e)},null,8,[`model-value`,`loading`])]),t(O,{class:`switch-divider`}),b(`div`,U,[b(`div`,W,[b(`div`,G,[i[12]||=a(` DeepSeek Harness `,-1),t(w,{type:l.value.dsh?`success`:`info`,size:`small`,"disable-transitions":``},{default:x(()=>[a(h(l.value.dsh?`已开启`:`未开启`),1)]),_:1},8,[`type`])]),i[13]||=b(`div`,{class:`switch-desc`},[a(` 写入 `),b(`code`,null,`~/.dsh/settings.yaml`),a(` 的 llm-deepseek.baseURL 与 `),b(`code`,null,`~/.dsh/.credentials.yaml`),a(` 的 DEEPSEEK_API_KEY(取网关 masterKey,未设置则写占位值);模型请在 dsh 内选择与网关部署名一致的模型。 dsh 为 developer preview,配置格式可能随版本变化。 `)],-1)]),t(E,{"model-value":l.value.dsh,loading:f.value===`dsh`,onChange:i[4]||=e=>D(`dsh`,!!e)},null,8,[`model-value`,`loading`])])],64)):(m(),e(k,{key:1,description:u.value||`暂无开关状态`},{default:x(()=>[t(c,{type:`primary`,onClick:i[5]||=e=>C(!1)},{default:x(()=>[...i[14]||=[a(`重试`,-1)]]),_:1})]),_:1},8,[`description`]))]),_:1})),[[j,o.value]])}}}),[[`__scopeId`,`data-v-fb084a91`]]);l(),u(),w();var q={class:`service-settings`},J={class:`flex-between`},Y={key:0,class:`switch-row`},ee={class:`switch-info`},te={class:`switch-title`},X={key:0,class:`switch-row`},Z={class:`switch-info`},ne={class:`switch-title`},re={class:`switch-desc`},ie={key:0,class:`version-block`},ae={class:`version-row`},oe={class:`muted-sm`},se={key:0,class:`muted-sm`},ce={key:1,class:`muted-sm`},le={class:`muted-sm`},ue={class:`version-actions`},Q=D(n({__name:`ServiceUpdateSettings`,setup(n){let{toast:o}=N(),l=c(!0),u=c(!1),f=c(null),S=c(null),C=c(null),w=c(null),D=c(null),A=c(!1),j=c(!1),M=c(null),F=null;s(()=>F?.abort());let I=async e=>{if(!e){if(u.value)return;u.value=!0}try{let[e,t]=await Promise.allSettled([k.autostart(),k.update()]);f.value=e.status===`fulfilled`?e.value:null,S.value=e.status===`rejected`?e.reason?.message:null,C.value=t.status===`fulfilled`?t.value:null,w.value=t.status===`rejected`?t.reason?.message:null}finally{l.value=!1,u.value=!1}};d(()=>I(!1));let L=e=>e?new Date(e).toLocaleString():``,R=i(()=>C.value?.lastCheck?.currentVersion??null),z=i(()=>_.value?.buildSource===`local`),B=i(()=>C.value?.lastCheck?.latestVersion??null),V=i(()=>C.value?.lastCheck?.hasUpdate===!0),H=i(()=>{let e=C.value?.lastCheck?.checkedAt;return e?new Date(e).toLocaleString():null}),U=i(()=>{let e=C.value?.lastApply;if(!e)return null;let t=L(e.appliedAt);return`${e.fromVersion} → ${e.toVersion}${t?`(${t})`:``}`}),W=async e=>{if(!f.value||D.value)return;let t=e?`确定开启开机自启?将注册登录触发的自启项(登录时自动恢复服务)。`:`确定关闭开机自启?将移除自启项,且此后首次启动不再自动注册。`;try{await E.confirm(t,e?`开启确认`:`关闭确认`,{confirmButtonText:e?`开启`:`关闭`,cancelButtonText:`取消`,type:`warning`})}catch{return}D.value=`autostart`;try{let t=await k.setAutostart(e);t.note?o(t.note,`success`):o(e?`开机自启已开启`:`开机自启已关闭`,`success`)}catch(e){o(e.message||`操作失败`,`error`)}finally{D.value=null,await I(!0)}},G=async e=>{if(!C.value||D.value)return;let t=e?`确定开启自动检查?将每小时检查 npm 源,发现新版本时在管理台提示(安装更新需在终端执行 npx ezllm update)。`:`确定关闭自动检查?不再自动检查(手动检查不受影响)。`;try{await E.confirm(t,e?`开启确认`:`关闭确认`,{confirmButtonText:e?`开启`:`关闭`,cancelButtonText:`取消`,type:`warning`})}catch{return}D.value=`updateEnabled`;try{let t=await k.setUpdateEnabled(e);t.note&&o(t.note,`success`)}catch(e){o(e.message||`操作失败`,`error`)}finally{D.value=null,await I(!0)}},K=async()=>{A.value=!0;try{let e=await k.checkUpdate();M.value=e.hasUpdate?`发现新版本 ${e.latestVersion}(当前 ${e.currentVersion}):更新需在终端执行 npx ezllm update 完成`:`已是最新版本 ${e.currentVersion}(检查于 ${L(e.checkedAt)})`,await I(!0)}catch(e){o(e.message||`检查更新失败`,`error`)}finally{A.value=!1}},Q=async()=>{try{await E.confirm(`发现新版本 ${B.value}:更新需在终端执行「npx ezllm update」完成(管理台不再自动安装)。`,`更新方式`,{confirmButtonText:`查看指引`,cancelButtonText:`取消`,type:`info`})}catch{return}j.value=!0;let e=new AbortController;F=e;try{let t=await k.update(),n=await k.applyUpdate();if(!n.updated){M.value=n.hasUpdate?`发现新版本 ${n.toVersion}(当前 ${n.fromVersion}):请在终端执行 npx ezllm update 完成更新`:`已是最新版本 ${n.fromVersion}`;return}M.value=`正在重启服务并安装 ${n.toVersion}(预计 1~3 分钟):重启期间管理台短暂不可访问,完成后这里会自动显示结果。`;let r=await O({targetVersion:n.toVersion,sinceAppliedAt:t.lastApply?.appliedAt??null,signal:e.signal});if(e.signal.aborted)return;r&&!r.error?(o(`已更新到 ${r.toVersion}`,`success`),M.value=`已更新 ${r.fromVersion} → ${r.toVersion},服务已在新版本上运行。`):r?.error?(o(`更新失败:${r.error}`,`error`),M.value=P(r.error)):M.value=`更新仍在进行(安装耗时较长):稍后刷新页面查看最新状态。`}catch(e){o(e.message||`更新失败`,`error`)}finally{j.value=!1,F===e&&(F=null),e.signal.aborted||await I(!0)}};return(n,i)=>{let o=v(`el-button`),s=v(`el-tag`),c=v(`el-switch`),d=v(`el-empty`),_=v(`el-card`),E=v(`el-link`),O=v(`el-alert`),k=p(`loading`);return g((m(),r(`div`,q,[t(_,{shadow:`never`,class:`mb-16`},{header:x(()=>[b(`div`,J,[i[7]||=b(`span`,{class:`fw-600`},`开机自启`,-1),t(o,{loading:u.value,onClick:i[0]||=e=>I(!1)},{default:x(()=>[...i[6]||=[a(`刷新`,-1)]]),_:1},8,[`loading`])])]),default:x(()=>[f.value?(m(),r(`div`,Y,[b(`div`,ee,[b(`div`,te,[i[8]||=a(` 登录时自动启动服务 `,-1),t(s,{type:f.value.enabled?`success`:`info`,size:`small`,"disable-transitions":``},{default:x(()=>[a(h(f.value.enabled?`已开启`:`未开启`),1)]),_:1},8,[`type`])]),i[9]||=b(`div`,{class:`switch-desc`},[a(` 登录操作系统时自动启动服务(无需管理员权限)。 关闭后首次启动 `),b(`code`,null,`ezllm`),a(` 也不会再自动注册,重新开启即可解除。 `)],-1)]),t(c,{"model-value":f.value.enabled,loading:D.value===`autostart`,onChange:i[1]||=e=>W(!!e)},null,8,[`model-value`,`loading`])])):(m(),e(d,{key:1,description:S.value||`暂无自启状态`},{default:x(()=>[t(o,{type:`primary`,onClick:i[2]||=e=>I(!1)},{default:x(()=>[...i[10]||=[a(`重试`,-1)]]),_:1})]),_:1},8,[`description`]))]),_:1}),t(_,{shadow:`never`,class:`mb-16`},{header:x(()=>[...i[11]||=[b(`div`,{class:`flex-between`},[b(`span`,{class:`fw-600`},`自动检查`)],-1)]]),default:x(()=>[C.value?(m(),r(`div`,X,[b(`div`,Z,[b(`div`,ne,[i[12]||=a(` 自动检查新版本 `,-1),t(s,{type:C.value.enabled?`success`:`info`,size:`small`,"disable-transitions":``},{default:x(()=>[a(h(C.value.enabled?`已开启`:`未开启`),1)]),_:1},8,[`type`])]),b(`div`,re,[C.value.supported?(m(),r(T,{key:1},[i[13]||=a(` 每小时检查 npm 源,发现新版本时在管理台提示——安装更新需在终端执行 `,-1),i[14]||=b(`code`,null,`npx ezllm update`,-1),i[15]||=a(`(管理台不代你安装);关闭后仍可在下方手动检查。 `,-1)],64)):(m(),r(T,{key:0},[a(` 当前为源码运行模式,更新检查不可用(仅通过 npx ezllm install 装配的实例支持)。 `)],64))])]),C.value.supported?(m(),e(c,{key:0,"model-value":C.value.enabled,loading:D.value===`updateEnabled`,onChange:i[3]||=e=>G(!!e)},null,8,[`model-value`,`loading`])):y(``,!0)])):(m(),e(d,{key:1,description:w.value||`暂无更新状态`},{default:x(()=>[t(o,{type:`primary`,onClick:i[4]||=e=>I(!1)},{default:x(()=>[...i[16]||=[a(`重试`,-1)]]),_:1})]),_:1},8,[`description`]))]),_:1}),t(_,{shadow:`never`},{header:x(()=>[...i[17]||=[b(`div`,{class:`flex-between`},[b(`span`,{class:`fw-600`},`版本信息`)],-1)]]),default:x(()=>[C.value?(m(),r(`div`,ie,[b(`div`,ae,[i[21]||=b(`span`,{class:`version-label`},`当前版本`,-1),t(s,{size:`small`},{default:x(()=>[a(h(R.value||`未知`),1)]),_:1}),z.value?(m(),e(s,{key:0,type:`warning`,size:`small`,"disable-transitions":``},{default:x(()=>[...i[18]||=[a(`本地构建`,-1)]]),_:1})):y(``,!0),B.value?(m(),r(T,{key:1},[i[20]||=b(`span`,{class:`version-label`},`最新版本`,-1),t(s,{type:V.value?`warning`:`success`,size:`small`,"disable-transitions":``},{default:x(()=>[a(h(B.value),1)]),_:1},8,[`type`]),V.value?(m(),e(s,{key:0,type:`warning`,size:`small`,"disable-transitions":``},{default:x(()=>[...i[19]||=[a(`发现新版本`,-1)]]),_:1})):y(``,!0)],64)):y(``,!0)]),b(`div`,oe,[a(` 上次检查:`+h(H.value||`尚未检查`)+` `,1),C.value.updating?(m(),r(T,{key:0},[a(` · 更新执行中...`)],64)):y(``,!0)]),C.value.supported?y(``,!0):(m(),r(`div`,se,`源码运行模式:手动检查与更新不可用。`)),U.value?(m(),r(`div`,ce,`上次更新:`+h(U.value),1)):y(``,!0),b(`div`,le,[i[23]||=a(` npm 包主页:`,-1),t(E,{type:`primary`,href:`https://www.npmjs.com/package/ezllm`,target:`_blank`},{default:x(()=>[...i[22]||=[a(`npmjs.com/package/ezllm`,-1)]]),_:1})]),b(`div`,ue,[t(o,{loading:A.value,disabled:!C.value.supported||C.value.updating,onClick:K},{default:x(()=>[a(h(A.value?`检查中...`:`检查更新`),1)]),_:1},8,[`loading`,`disabled`]),V.value&&C.value.supported?(m(),e(o,{key:0,type:`primary`,loading:j.value,disabled:C.value.updating,onClick:Q},{default:x(()=>[a(h(j.value?`处理中...`:`查看更新方式(${B.value})`),1)]),_:1},8,[`loading`,`disabled`])):y(``,!0)]),M.value?(m(),e(O,{key:2,title:M.value,type:`info`,"show-icon":``,class:`mt-8`,onClose:i[5]||=e=>M.value=null},null,8,[`title`])):y(``,!0)])):(m(),e(d,{key:1,description:`更新状态不可用`}))]),_:1})])),[[k,l.value]])}}}),[[`__scopeId`,`data-v-60d0920d`]]);l(),w(),u();var de={class:`flex-col-gap`},$={class:`flex-between`},fe={class:`muted-sm`},pe={class:`login-row`},me={class:`muted-sm`},he={class:`flex-between`},ge={class:`monitor-row`},_e={class:`save-bar`},ve=D(n({__name:`SettingsView`,setup(n){let{toast:s}=N(),{copyWithToast:l}=M(),u=A(),_=c(`basic`),w=c(!0),E=c(!1),D=c(``),O=async()=>{D.value&&await l(D.value)},k=c(29770),P=c(null),F=c(!0),I=c(``),L=c(``),R=i(()=>D.value.trim()!==``||I.value!==``&&L.value!==``),z=c(!1),B=c(60),V=[{label:`10分钟`,value:10},{label:`30分钟`,value:30},{label:`1小时`,value:60},{label:`2小时`,value:120},{label:`5小时`,value:300},{label:`8小时`,value:480},{label:`12小时`,value:720},{label:`24小时`,value:1440}],{loadError:H,run:U}=j(`设置加载失败,请重试`),W=()=>U(async()=>{try{await u.load(),D.value=u.config.masterKey||``,k.value=u.config.port??29770;let e=u.config[`web-ui`]?.[`login-account`];I.value=e?.username||``,L.value=e?.password||``,F.value=u.config.allowLan!==!1;let t=u.config.latencyTest;z.value=t?.enabled===!0,B.value=t?.intervalMinutes??60;try{let e=await f.get(`/api/status`);P.value=e.listenPort}catch{P.value=null}}finally{w.value=!1}}),G=async()=>{if(I.value.trim()!==``||L.value!==``){if(I.value.trim()===``||L.value===``){s(`用户名和密码需同时填写`,`error`);return}if(L.value.length<6){s(`密码至少 6 位`,`error`);return}}E.value=!0;let e=z.value&&u.config.latencyTest?.enabled!==!0;try{let t=await u.update(e=>{e.masterKey=D.value.trim(),e.port=k.value,e.allowLan=F.value,e.latencyTest={enabled:z.value,intervalMinutes:B.value},e[`web-ui`]??={},e[`web-ui`][`login-account`]??={},e[`web-ui`][`login-account`].username=I.value.trim(),e[`web-ui`][`login-account`].password=L.value});await S(!0),s(`设置已保存并生效`,`success`),e&&s(`已开启自动测试:服务将定期直连所有上游发送探测请求,有少量 token 消耗`,`warning`),t.restartHint&&s(t.restartHint,`warning`)}catch(e){s(e.message,`error`)}finally{E.value=!1}};return d(W),(n,i)=>{let s=v(`el-button`),c=v(`el-alert`),l=v(`el-tag`),u=v(`el-input`),d=v(`el-form-item`),f=v(`el-input-number`),S=v(`el-form`),A=v(`el-card`),j=v(`el-switch`),M=v(`el-divider`),N=v(`el-option`),U=v(`el-select`),q=v(`el-tab-pane`),J=v(`el-tabs`),Y=p(`loading`);return m(),e(J,{modelValue:_.value,"onUpdate:modelValue":i[7]||=e=>_.value=e,class:`settings-tabs`},{default:x(()=>[t(q,{label:`基本设置`,name:`basic`},{default:x(()=>[g((m(),r(`div`,de,[o(H)?(m(),e(c,{key:0,title:o(H),type:`error`,"show-icon":``,closable:!1},{default:x(()=>[t(s,{size:`small`,onClick:W},{default:x(()=>[...i[8]||=[a(`重试`,-1)]]),_:1})]),_:1},8,[`title`])):y(``,!0),t(A,{shadow:`never`},{header:x(()=>[b(`div`,$,[i[10]||=b(`span`,{class:`fw-600`},`网关访问`,-1),t(l,{type:`success`},{default:x(()=>[...i[9]||=[a(`运行中`,-1)]]),_:1})])]),default:x(()=>[t(S,{"label-position":`top`},{default:x(()=>[t(d,{label:`API 密钥 (masterKey)`},{default:x(()=>[t(u,{modelValue:D.value,"onUpdate:modelValue":i[0]||=e=>D.value=e,placeholder:`sk-1234`,clearable:``},{append:x(()=>[t(s,{onClick:O},{default:x(()=>[...i[11]||=[a(`复制`,-1)]]),_:1})]),_:1},8,[`modelValue`]),i[12]||=b(`div`,{class:`muted-sm`},`客户端请求 /v1/* 时的认证密钥(Bearer <masterKey>;留空 = 本地放行)`,-1)]),_:1}),t(d,{label:`监听端口 (port)`},{default:x(()=>[t(f,{modelValue:k.value,"onUpdate:modelValue":i[1]||=e=>k.value=e,min:1,max:65535,step:1,style:{width:`220px`}},null,8,[`modelValue`]),b(`div`,fe,[i[14]||=a(` 网关与管理台 API 的监听端口,保存后重启生效 `,-1),P.value===null?y(``,!0):(m(),r(T,{key:0},[i[13]||=a(` ;服务上报的端口 `,-1),b(`b`,null,h(P.value),1)],64))])]),_:1})]),_:1})]),_:1}),t(A,{shadow:`never`},{header:x(()=>[...i[15]||=[b(`span`,{class:`fw-600`},`安全与登录`,-1)]]),default:x(()=>[t(S,{"label-position":`top`},{default:x(()=>[t(d,{label:`管理台登录账号`},{default:x(()=>[b(`div`,pe,[t(u,{modelValue:I.value,"onUpdate:modelValue":i[2]||=e=>I.value=e,placeholder:`用户名`,style:{width:`200px`}},null,8,[`modelValue`]),t(u,{modelValue:L.value,"onUpdate:modelValue":i[3]||=e=>L.value=e,type:`password`,placeholder:`密码(至少 6 位)`,"show-password":``,style:{width:`200px`}},null,8,[`modelValue`])]),i[16]||=b(`div`,{class:`muted-sm`},` 管理台登录凭证;留空 = 免登录直接访问(仅本机使用时推荐)。 修改后立即生效,需用新账号重新登录 `,-1)]),_:1}),t(d,{label:`允许局域网访问 (allowLan)`},{default:x(()=>[t(j,{modelValue:F.value,"onUpdate:modelValue":i[4]||=e=>F.value=e},null,8,[`modelValue`]),b(`div`,me,[i[17]||=a(` 开启 = 绑定全部网卡,局域网内设备可访问;关闭 = 仅本机 127.0.0.1。保存后需重启生效 `,-1),R.value?y(``,!0):(m(),r(T,{key:0},[a(` ;未设置任何凭据(密钥与登录账号皆无)时始终仅绑本机 `)],64))])]),_:1})]),_:1})]),_:1}),t(A,{shadow:`never`},{header:x(()=>[b(`div`,he,[i[18]||=b(`span`,{class:`fw-600`},`模型服务监控`,-1),t(l,{type:z.value?`success`:`info`,size:`small`,"disable-transitions":``},{default:x(()=>[a(h(z.value?`已开启`:`未开启`),1)]),_:1},8,[`type`])])]),default:x(()=>[b(`div`,ge,[i[19]||=b(`div`,{class:`monitor-info`},[b(`div`,{class:`monitor-title`},`自动测试模型服务状态`),b(`div`,{class:`muted-sm`},` 按设定间隔自动直连所有上游模型发送极小探测请求(max_tokens: 1,有少量 token 消耗); 测试结果展示在「服务状态」页面 `)],-1),t(j,{modelValue:z.value,"onUpdate:modelValue":i[5]||=e=>z.value=e},null,8,[`modelValue`])]),z.value?(m(),r(T,{key:0},[t(M,{style:{margin:`12px 0`}}),t(S,{"label-position":`top`},{default:x(()=>[t(d,{label:`测试间隔`,style:{"margin-bottom":`0`}},{default:x(()=>[t(U,{modelValue:B.value,"onUpdate:modelValue":i[6]||=e=>B.value=e,style:{width:`220px`}},{default:x(()=>[(m(),r(T,null,C(V,e=>t(N,{key:e.value,label:e.label,value:e.value},null,8,[`label`,`value`])),64))]),_:1},8,[`modelValue`]),i[20]||=b(`div`,{class:`muted-sm`},`自动测试的执行间隔,保存后即时生效(无需重启)`,-1)]),_:1})]),_:1})],64)):y(``,!0)]),_:1}),b(`div`,_e,[t(s,{type:`primary`,size:`large`,loading:E.value,disabled:E.value||o(H)!==null,onClick:G},{default:x(()=>[a(h(E.value?`保存中...`:`保存设置`),1)]),_:1},8,[`loading`,`disabled`])])])),[[Y,w.value]])]),_:1}),t(q,{label:`代理开关`,name:`harness`,lazy:``},{default:x(()=>[t(K)]),_:1}),t(q,{label:`服务与更新`,name:`service`,lazy:``},{default:x(()=>[t(Q)]),_:1})]),_:1},8,[`modelValue`])}}}),[[`__scopeId`,`data-v-e5f93ad5`]]);export{ve as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t as e}from"./message-Cp_GAwQs.js";function t(){function t(t,n=`success`){e({message:t,type:n,duration:n===`warning`?8e3:3e3})}return{toast:t}}export{t};
|