jishushell 0.4.10 → 0.4.24
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/Dockerfile.hermes-slim +193 -0
- package/INSTALL-NOTICE +10 -12
- package/apps/hermes-container.yaml +35 -0
- package/apps/ollama-binary.yaml +200 -0
- package/apps/ollama-cpu-container.yaml +37 -0
- package/apps/ollama-with-hollama-binary.yaml +195 -0
- package/apps/openclaw-binary.yaml +69 -0
- package/apps/openclaw-container.yaml +37 -0
- package/apps/openclaw-with-ollama-container.yaml +42 -0
- package/apps/openclaw-with-searxng-container.yaml +136 -0
- package/apps/openwebui-container.yaml +53 -0
- package/apps/playwright-container.yaml +120 -0
- package/apps/searxng-container.yaml +115 -0
- package/dist/auth.d.ts +1 -0
- package/dist/auth.js +15 -14
- package/dist/auth.js.map +1 -1
- package/dist/cli/app.d.ts +4 -0
- package/dist/cli/app.js +814 -0
- package/dist/cli/app.js.map +1 -0
- package/dist/cli/backup.d.ts +3 -0
- package/dist/cli/backup.js +434 -0
- package/dist/cli/backup.js.map +1 -0
- package/dist/{doctor.d.ts → cli/doctor.d.ts} +7 -1
- package/dist/{doctor.js → cli/doctor.js} +377 -22
- package/dist/cli/doctor.js.map +1 -0
- package/dist/cli/helpers.d.ts +4 -0
- package/dist/cli/helpers.js +32 -0
- package/dist/cli/helpers.js.map +1 -0
- package/dist/cli/job.d.ts +4 -0
- package/dist/cli/job.js +198 -0
- package/dist/cli/job.js.map +1 -0
- package/dist/cli/llm.d.ts +25 -0
- package/dist/cli/llm.js +599 -0
- package/dist/cli/llm.js.map +1 -0
- package/dist/cli/managed-list.d.ts +30 -0
- package/dist/cli/managed-list.js +129 -0
- package/dist/cli/managed-list.js.map +1 -0
- package/dist/cli/panel.d.ts +26 -0
- package/dist/cli/panel.js +804 -0
- package/dist/cli/panel.js.map +1 -0
- package/dist/cli/version.d.ts +1 -0
- package/dist/cli/version.js +12 -0
- package/dist/cli/version.js.map +1 -0
- package/dist/cli.js +48 -776
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +69 -0
- package/dist/config.js +268 -7
- package/dist/config.js.map +1 -1
- package/dist/control.d.ts +17 -41
- package/dist/control.js +61 -1323
- package/dist/control.js.map +1 -1
- package/dist/install.d.ts +16 -0
- package/dist/install.js +75 -26
- package/dist/install.js.map +1 -1
- package/dist/routes/agent-apps.d.ts +15 -0
- package/dist/routes/agent-apps.js +78 -0
- package/dist/routes/agent-apps.js.map +1 -0
- package/dist/routes/apps.d.ts +3 -0
- package/dist/routes/apps.js +278 -0
- package/dist/routes/apps.js.map +1 -0
- package/dist/routes/backup.js +3 -3
- package/dist/routes/backup.js.map +1 -1
- package/dist/routes/instances.d.ts +6 -0
- package/dist/routes/instances.js +863 -874
- package/dist/routes/instances.js.map +1 -1
- package/dist/routes/llm.d.ts +15 -0
- package/dist/routes/llm.js +247 -0
- package/dist/routes/llm.js.map +1 -0
- package/dist/routes/runtime.d.ts +15 -0
- package/dist/routes/runtime.js +69 -0
- package/dist/routes/runtime.js.map +1 -0
- package/dist/routes/setup.js +131 -9
- package/dist/routes/setup.js.map +1 -1
- package/dist/routes/system.js +56 -9
- package/dist/routes/system.js.map +1 -1
- package/dist/server.js +107 -7
- package/dist/server.js.map +1 -1
- package/dist/services/agent-apps/catalog.d.ts +30 -0
- package/dist/services/agent-apps/catalog.js +60 -0
- package/dist/services/agent-apps/catalog.js.map +1 -0
- package/dist/services/agent-apps/index.d.ts +36 -0
- package/dist/services/agent-apps/index.js +171 -0
- package/dist/services/agent-apps/index.js.map +1 -0
- package/dist/services/agent-apps/installers/adapter-probes.d.ts +49 -0
- package/dist/services/agent-apps/installers/adapter-probes.js +223 -0
- package/dist/services/agent-apps/installers/adapter-probes.js.map +1 -0
- package/dist/services/agent-apps/installers/adapter.d.ts +30 -0
- package/dist/services/agent-apps/installers/adapter.js +171 -0
- package/dist/services/agent-apps/installers/adapter.js.map +1 -0
- package/dist/services/agent-apps/installers/registry-probe.d.ts +38 -0
- package/dist/services/agent-apps/installers/registry-probe.js +183 -0
- package/dist/services/agent-apps/installers/registry-probe.js.map +1 -0
- package/dist/services/agent-apps/installers/shell-script.d.ts +47 -0
- package/dist/services/agent-apps/installers/shell-script.js +471 -0
- package/dist/services/agent-apps/installers/shell-script.js.map +1 -0
- package/dist/services/agent-apps/types.d.ts +125 -0
- package/dist/services/agent-apps/types.js +17 -0
- package/dist/services/agent-apps/types.js.map +1 -0
- package/dist/services/app/app-compiler.d.ts +15 -0
- package/dist/services/app/app-compiler.js +172 -0
- package/dist/services/app/app-compiler.js.map +1 -0
- package/dist/services/app/app-manager.d.ts +142 -0
- package/dist/services/app/app-manager.js +1988 -0
- package/dist/services/app/app-manager.js.map +1 -0
- package/dist/services/app/custom-manager.d.ts +27 -0
- package/dist/services/app/custom-manager.js +285 -0
- package/dist/services/app/custom-manager.js.map +1 -0
- package/dist/services/app/hermes-agent-manager.d.ts +20 -0
- package/dist/services/app/hermes-agent-manager.js +289 -0
- package/dist/services/app/hermes-agent-manager.js.map +1 -0
- package/dist/services/app/id-normalizer.d.ts +27 -0
- package/dist/services/app/id-normalizer.js +77 -0
- package/dist/services/app/id-normalizer.js.map +1 -0
- package/dist/services/app/ollama-manager.d.ts +18 -0
- package/dist/services/app/ollama-manager.js +207 -0
- package/dist/services/app/ollama-manager.js.map +1 -0
- package/dist/services/app/openclaw-manager.d.ts +63 -0
- package/dist/services/app/openclaw-manager.js +1178 -0
- package/dist/services/app/openclaw-manager.js.map +1 -0
- package/dist/services/app/paths.d.ts +47 -0
- package/dist/services/app/paths.js +68 -0
- package/dist/services/app/paths.js.map +1 -0
- package/dist/services/app/registry.d.ts +17 -0
- package/dist/services/app/registry.js +31 -0
- package/dist/services/app/registry.js.map +1 -0
- package/dist/services/app/remote-spec.d.ts +14 -0
- package/dist/services/app/remote-spec.js +58 -0
- package/dist/services/app/remote-spec.js.map +1 -0
- package/dist/services/app/terminal-session-manager.d.ts +27 -0
- package/dist/services/app/terminal-session-manager.js +157 -0
- package/dist/services/app/terminal-session-manager.js.map +1 -0
- package/dist/services/app/types.d.ts +72 -0
- package/dist/services/app/types.js +16 -0
- package/dist/services/app/types.js.map +1 -0
- package/dist/services/backup-manager.js +60 -22
- package/dist/services/backup-manager.js.map +1 -1
- package/dist/services/instance-manager.d.ts +125 -34
- package/dist/services/instance-manager.js +679 -1043
- package/dist/services/instance-manager.js.map +1 -1
- package/dist/services/llm-proxy/adapters.js +5 -1
- package/dist/services/llm-proxy/adapters.js.map +1 -1
- package/dist/services/llm-proxy/circuit-breaker.js +10 -2
- package/dist/services/llm-proxy/circuit-breaker.js.map +1 -1
- package/dist/services/llm-proxy/index.d.ts +43 -0
- package/dist/services/llm-proxy/index.js +120 -5
- package/dist/services/llm-proxy/index.js.map +1 -1
- package/dist/services/llm-proxy/ssrf.js +1 -1
- package/dist/services/llm-proxy/ssrf.js.map +1 -1
- package/dist/services/nomad-manager.d.ts +260 -3
- package/dist/services/nomad-manager.js +2921 -341
- package/dist/services/nomad-manager.js.map +1 -1
- package/dist/services/panel-manager.d.ts +50 -0
- package/dist/services/panel-manager.js +443 -0
- package/dist/services/panel-manager.js.map +1 -0
- package/dist/services/plugin-installer.js +28 -2
- package/dist/services/plugin-installer.js.map +1 -1
- package/dist/services/process-manager.js +42 -7
- package/dist/services/process-manager.js.map +1 -1
- package/dist/services/runtime/adapters/custom.d.ts +20 -0
- package/dist/services/runtime/adapters/custom.js +90 -0
- package/dist/services/runtime/adapters/custom.js.map +1 -0
- package/dist/services/runtime/adapters/hermes.d.ts +174 -0
- package/dist/services/runtime/adapters/hermes.js +1316 -0
- package/dist/services/runtime/adapters/hermes.js.map +1 -0
- package/dist/services/runtime/adapters/openclaw-routes.d.ts +17 -0
- package/dist/services/runtime/adapters/openclaw-routes.js +946 -0
- package/dist/services/runtime/adapters/openclaw-routes.js.map +1 -0
- package/dist/services/runtime/adapters/openclaw.d.ts +188 -0
- package/dist/services/runtime/adapters/openclaw.js +2195 -0
- package/dist/services/runtime/adapters/openclaw.js.map +1 -0
- package/dist/services/runtime/errors.d.ts +28 -0
- package/dist/services/runtime/errors.js +31 -0
- package/dist/services/runtime/errors.js.map +1 -0
- package/dist/services/runtime/index.d.ts +34 -0
- package/dist/services/runtime/index.js +51 -0
- package/dist/services/runtime/index.js.map +1 -0
- package/dist/services/runtime/instance.d.ts +24 -0
- package/dist/services/runtime/instance.js +143 -0
- package/dist/services/runtime/instance.js.map +1 -0
- package/dist/services/runtime/migrations.d.ts +15 -0
- package/dist/services/runtime/migrations.js +25 -0
- package/dist/services/runtime/migrations.js.map +1 -0
- package/dist/services/runtime/registry.d.ts +13 -0
- package/dist/services/runtime/registry.js +32 -0
- package/dist/services/runtime/registry.js.map +1 -0
- package/dist/services/runtime/types.d.ts +545 -0
- package/dist/services/runtime/types.js +14 -0
- package/dist/services/runtime/types.js.map +1 -0
- package/dist/services/setup-manager.d.ts +70 -29
- package/dist/services/setup-manager.js +591 -625
- package/dist/services/setup-manager.js.map +1 -1
- package/dist/services/task-registry.d.ts +44 -0
- package/dist/services/task-registry.js +74 -0
- package/dist/services/task-registry.js.map +1 -0
- package/dist/services/telemetry/heartbeat.d.ts +6 -6
- package/dist/services/telemetry/heartbeat.js +29 -30
- package/dist/services/telemetry/heartbeat.js.map +1 -1
- package/dist/services/update-manager.d.ts +47 -0
- package/dist/services/update-manager.js +305 -0
- package/dist/services/update-manager.js.map +1 -0
- package/dist/types.d.ts +222 -0
- package/dist/utils/docker-host.d.ts +15 -0
- package/dist/utils/docker-host.js +64 -0
- package/dist/utils/docker-host.js.map +1 -0
- package/install/jishu-install.sh +303 -37
- package/install/post-install.sh +64 -5
- package/package.json +19 -5
- package/public/assets/Dashboard-B-JoOjBQ.js +1 -0
- package/public/assets/HermesChatPanel-mFSureyc.js +1 -0
- package/public/assets/HermesConfigForm-DvR05LK1.js +4 -0
- package/public/assets/InitPassword-CVA8wQA6.js +1 -0
- package/public/assets/InstanceDetail-DcZW2QGO.js +91 -0
- package/public/assets/{Login-CUoEZOWR.js → Login-BWsZH2mu.js} +1 -1
- package/public/assets/NewInstance-BCIrAd86.js +1 -0
- package/public/assets/Settings-xkDcduFz.js +1 -0
- package/public/assets/Setup-Cfuwj4gV.js +1 -0
- package/public/assets/WeixinLoginPanel-CnjR8xMu.js +9 -0
- package/public/assets/index-CPhVFEsx.css +1 -0
- package/public/assets/index-DQsM6Joa.js +19 -0
- package/public/assets/input-paste-CrNVAyOy.js +1 -0
- package/public/assets/{providers-lBSOjUWy.js → providers-V-vwrExZ.js} +1 -1
- package/public/assets/registry-B4UFJdpA.js +2 -0
- package/public/assets/{usePolling-CK0DfI4h.js → usePolling-Do5Erqm_.js} +1 -1
- package/public/assets/vendor-i18n-ucpM0OR0.js +9 -0
- package/public/assets/{vendor-react-B1-3Yrt-.js → vendor-react-Bk1hRGiY.js} +1 -1
- package/public/favicon.png +0 -0
- package/public/index.html +9 -4
- package/public/logos/hermes.png +0 -0
- package/public/logos/ollama.png +0 -0
- package/public/logos/openclaw.svg +60 -0
- package/scripts/build-hermes-image.sh +21 -0
- package/scripts/build-local.sh +54 -0
- package/scripts/check-adapter-isolation.ts +293 -0
- package/scripts/fixtures/instances/hermes-sample/instance.json +37 -0
- package/scripts/fixtures/instances/legacy-openclaw-sample/instance.json +7 -0
- package/scripts/smoke/hermes-bootstrap.sh +195 -0
- package/templates/hermes-entrypoint.sh +154 -0
- package/dist/doctor.js.map +0 -1
- package/install/jishu-install-china.sh +0 -3092
- package/public/assets/Dashboard-DhsrzJ4F.js +0 -1
- package/public/assets/InitPassword-BjubiVdd.js +0 -1
- package/public/assets/InstanceDetail-DMcywsof.js +0 -17
- package/public/assets/NewInstance-Bk0G4EiJ.js +0 -1
- package/public/assets/Settings-D5tHL_h5.js +0 -1
- package/public/assets/Setup-4t6E3Rut.js +0 -1
- package/public/assets/index-BJ47MWpF.css +0 -1
- package/public/assets/index-DbX85irc.js +0 -16
- package/public/assets/vendor-i18n-CfW0RvgE.js +0 -9
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/Login-BWsZH2mu.js","assets/vendor-react-Bk1hRGiY.js","assets/vendor-i18n-ucpM0OR0.js","assets/InitPassword-CVA8wQA6.js","assets/Setup-Cfuwj4gV.js","assets/input-paste-CrNVAyOy.js","assets/providers-V-vwrExZ.js","assets/registry-B4UFJdpA.js","assets/Dashboard-B-JoOjBQ.js","assets/usePolling-Do5Erqm_.js","assets/InstanceDetail-DcZW2QGO.js","assets/WeixinLoginPanel-CnjR8xMu.js","assets/NewInstance-BCIrAd86.js","assets/Settings-xkDcduFz.js"])))=>i.map(i=>d[i]);
|
|
2
|
+
var Se=Object.defineProperty;var Fe=(e,n,a)=>n in e?Se(e,n,{enumerable:!0,configurable:!0,writable:!0,value:a}):e[n]=a;var ee=(e,n,a)=>Fe(e,typeof n!="symbol"?n+"":n,a);import{r as d,a as Ce,u as le,b as Ie,L as R,R as Pe,c as N,N as E,d as Ae,e as je,B as Ne}from"./vendor-react-Bk1hRGiY.js";import{i as Le,a as Te,u as q}from"./vendor-i18n-ucpM0OR0.js";(function(){const n=document.createElement("link").relList;if(n&&n.supports&&n.supports("modulepreload"))return;for(const c of document.querySelectorAll('link[rel="modulepreload"]'))r(c);new MutationObserver(c=>{for(const i of c)if(i.type==="childList")for(const s of i.addedNodes)s.tagName==="LINK"&&s.rel==="modulepreload"&&r(s)}).observe(document,{childList:!0,subtree:!0});function a(c){const i={};return c.integrity&&(i.integrity=c.integrity),c.referrerPolicy&&(i.referrerPolicy=c.referrerPolicy),c.crossOrigin==="use-credentials"?i.credentials="include":c.crossOrigin==="anonymous"?i.credentials="omit":i.credentials="same-origin",i}function r(c){if(c.ep)return;c.ep=!0;const i=a(c);fetch(c.href,i)}})();var ce={exports:{}},$={};/**
|
|
3
|
+
* @license React
|
|
4
|
+
* react-jsx-runtime.production.min.js
|
|
5
|
+
*
|
|
6
|
+
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
7
|
+
*
|
|
8
|
+
* This source code is licensed under the MIT license found in the
|
|
9
|
+
* LICENSE file in the root directory of this source tree.
|
|
10
|
+
*/var De=d,Oe=Symbol.for("react.element"),Re=Symbol.for("react.fragment"),Me=Object.prototype.hasOwnProperty,Ee=De.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,qe={key:!0,ref:!0,__self:!0,__source:!0};function de(e,n,a){var r,c={},i=null,s=null;a!==void 0&&(i=""+a),n.key!==void 0&&(i=""+n.key),n.ref!==void 0&&(s=n.ref);for(r in n)Me.call(n,r)&&!qe.hasOwnProperty(r)&&(c[r]=n[r]);if(e&&e.defaultProps)for(r in n=e.defaultProps,n)c[r]===void 0&&(c[r]=n[r]);return{$$typeof:Oe,type:e,key:i,ref:s,props:c,_owner:Ee.current}}$.Fragment=Re;$.jsx=de;$.jsxs=de;ce.exports=$;var t=ce.exports,H={},te=Ce;H.createRoot=te.createRoot,H.hydrateRoot=te.hydrateRoot;const Ue={"status.running":"运行中","status.starting":"启动中","status.failed":"失败","status.crashed":"已崩溃","status.stopped":"已停止","action.start":"启动","action.stop":"停止","action.restart":"重启","action.retry":"重试","action.save":"保存","action.cancel":"取消","action.delete":"删除","action.close":"关闭","action.confirm":"确认","action.refresh":"刷新","action.copyAll":"复制全部","action.startDone":"已启动","action.stopDone":"已停止","action.restartDone":"已重启","error.loadFailed":"加载失败","error.operationFailed":"操作失败","error.saveFailed":"保存失败","error.deleteFailed":"删除失败","error.connectionFailed":"无法连接服务器","error.checkBackend":"请检查 JishuShell 后端是否正在运行","nav.overview":"概览","nav.settings":"设置","nav.logout":"退出","nav.instances":"应用列表","nav.navigation":"导航","nav.newInstance":"安装应用","nav.importInstance":"导入应用备份","label.password":"密码","label.enabled":"启用","label.disabled":"禁用","nav.switchLanguage":"切换语言"},Be="概览",$e="系统状态和实例管理",We={title:Be,subtitle:$e,"stats.runningInstances":"运行实例","stats.engineRunning":"引擎运行中","stats.engineStopped":"引擎未启动","stats.cpu":"CPU","stats.memory":"内存","stats.disk":"磁盘","instances.title":"实例","instances.new":"+ 新建","instances.import":"导入","instances.restartEngine":"重启引擎","instances.restartEngineTitle":"重启 Nomad 引擎(会中断运行中的实例)","instances.restarting":"重启中...","instances.empty":"还没有实例","instances.emptyHint":"创建第一个 OpenClaw 实例开始使用","instances.loadError":"加载失败: {{error}}","table.name":"名称","table.status":"状态","table.uptime":"运行时间","table.memory":"内存","table.actions":"操作","update.found":"发现新版本:","update.upgradeNow":"立即升级","update.upgrading":"升级中…","update.confirm":`升级 JishuShell {{currentVersion}} → {{latestVersion}}?
|
|
11
|
+
面板将自动重启,页面需手动刷新。`,"update.started":"升级已启动,面板即将重启,请稍后刷新页面","update.restarting":"新版本已安装,正在等待面板重启…","update.completed":"升级成功:JishuShell {{latestVersion}} 已就绪","update.failed":"升级失败","update.refreshPrompt":"JishuShell 已升级到 {{latestVersion}}。刷新页面后更新生效,是否现在刷新?","engine.restarted":"引擎已重启","engine.restartFailed":"引擎重启失败","engine.restartConfirm":"重启引擎将中断所有运行中的实例,确认继续?","openclawUpdate.found":"发现 OpenClaw 新版本:","openclawUpdate.noRebuild":"无需重建镜像","openclawUpdate.upgradeNow":"立即升级","openclawUpdate.upgrading":"升级中…","openclawUpdate.confirm":`升级 OpenClaw {{currentVersion}} → {{latestVersion}}?
|
|
12
|
+
运行中的实例将自动重启以使用新版本,无需重建 Docker 镜像。`,"openclawUpdate.started":"OpenClaw 升级完成,运行中的实例已重启","openclawUpdate.failed":"OpenClaw 升级失败"},Ve={"login.title":"登录管理面板","login.password":"密码","login.placeholder":"输入密码","login.submit":"登 录","login.loading":"登录中","login.failed":"登录失败","login.forgotPassword":"忘记密码?请在终端执行","init.title":"首次使用,请设置管理密码","init.password":"密码","init.passwordPlaceholder":"至少 8 位","init.confirm":"确认密码","init.confirmPlaceholder":"再次输入密码","init.mismatch":"两次密码不一致","init.submit":"完成设置","init.loading":"设置中","init.failed":"设置失败"},He="设置",Ke="系统配置和安全",_e={title:He,subtitle:Ke,"proxy.title":"内置代理","proxy.desc":"内置代理始终运行,由系统自动管理。用户只需在设置页面或实例页填写真实上游 API Key,保存后由代理转发。","proxy.status":"请勿在 OpenClaw 配置页面自行修改 API Key","password.title":"修改密码","password.current":"当前密码","password.currentPlaceholder":"当前密码","password.new":"新密码","password.newPlaceholder":"至少 8 位","password.submit":"更新密码","password.updated":"密码已更新","password.failed":"修改失败","system.title":"系统信息","system.cpuUsage":"CPU 使用率","system.memory":"内存","system.disk":"磁盘","system.cpuTemp":"CPU 温度","about.title":"关于","llm.title":"模型供应商","llm.desc":"配置 AI 模型接口,可添加、编辑、删除和设置默认供应商","llm.add":"添加","llm.addTitle":"添加供应商","llm.editTitle":"编辑: {{id}}","llm.save":"保存","llm.saving":"保存中…","llm.cancel":"取消","llm.edit":"编辑","llm.delete":"删除","llm.setDefault":"设为默认","llm.default":"默认","llm.availableModels":"可用模型","llm.model":"默认模型","llm.noModel":"不指定","llm.loading":"加载中…","llm.empty":"尚未配置任何供应商","llm.added":"供应商已添加","llm.updated":"供应商已更新","llm.deleted":"供应商已删除","llm.defaultSet":"{{id}} 已设为默认供应商","llm.saveFailed":"保存失败","llm.deleteFailed":"删除失败","llm.confirmDelete":'确认删除供应商 "{{id}}"?',"llm.deleteLastForbidden":"至少需要保留一个 Provider","llm.presetLabel":"模型供应商","llm.presetPlaceholder":"选择供应商","llm.presetRequired":"请选择供应商","llm.alias":"标签(可选)","llm.aliasPlaceholder":"work / 个人 / 备用(可选)","llm.aliasHint":"用于同一供应商添加多个账号,留空则自动编号","llm.aliasConflict":"该标签已存在,请换一个","llm.fetchModels":"获取模型","llm.fetchingModels":"获取中…","llm.liveModels":"个在线模型","llm.apiKeyRequired":"请输入 API Key","llm.baseUrlRequired":"Base URL 不能为空","llm.fieldName":"显示名称","llm.fieldNamePlaceholder":"OpenAI","llm.fieldBaseUrl":"Base URL","llm.fieldApi":"接口格式","llm.fieldAuthHeader":"鉴权请求头","llm.fieldApiKey":"API Key","llm.apiKeyConfigured":"已配置","llm.apiKeyLeaveBlank":"不修改则留空","llm.apiKeyPlaceholder":"sk-...","llm.fieldModel":"默认模型","llm.modelsFetched":"获取到 {{count}} 个模型","llm.modelsFetchFailed":"获取模型列表失败"},Je="安装应用",ze="安装新的 Agent 或周边应用",Ge="应用配置",Ye="创建应用",Qe="创建中",Xe="创建失败",Ze={title:Je,subtitle:ze,"tab.openclaw":"OpenClaw","tab.hermes":"Hermes","tab.ollama":"Ollama","tab.custom":"自定义","appDesc.openclaw":"OpenClaw AI Agent — 支持多模型、IM 通道、技能扩展的自主 AI 助手平台。","appDesc.hermes":"Hermes Agent — 由 Nous Research 打造的自进化 AI Agent。","appDesc.ollama":"Ollama — 本地运行大语言模型,支持 Llama、Mistral、Gemma 等开源模型。当前仅支持单实例运行。","appDesc.custom":"自定义应用 — 通过编写 App Spec YAML 部署任意容器化应用。",appConfig:Ge,"kind.label":"应用类型","runtime.label":"本地镜像","runtime.notInstalled":"未安装","runtime.ready":"已就绪","runtime.installing":"安装中","runtime.waitingOtherInstall":"等待其他安装...","runtime.install":"安装 {{name}}","runtime.installFirst":"请先安装 {{name}} 运行时","template.label":"模板","template.loading":"正在加载模板...","template.none":"暂无可直接用于新建应用的模板","template.loadFailed":"加载内置模板失败","template.defaultRequired":"未找到 {{name}} 默认模板","template.compatibilityHint":"模板列表来自 apps 目录,仅展示可直接创建应用的 container 模板。","template.ollamaHint":"默认读取 apps 目录中的 Ollama 模板,可直接作为本地模型应用创建。","template.ollamaRequired":"未找到可用的 Ollama 模板","source.label":"来源","source.builtin":"内置模板","source.url":"远程 URL","source.yaml":"粘贴 YAML","source.urlPlaceholder":"https://example.com/app.yaml","source.urlHint":"面板会在服务端下载 YAML,适合没有 CORS 的地址。","install.actionTitle":"安装模板应用","install.actionHint":"安装成功后,才能继续创建应用。","install.button":"安装","install.identityRequired":"请先确认应用名称和应用 ID","install.installing":"安装中...","install.missingTask":"未找到可恢复的安装任务,请重新点击创建应用","install.notFoundAfterInstall":"安装完成后未找到应用,请刷新页面后重试","install.waitingLogs":"等待安装日志...","install.reusedTask":"检测到已有安装任务,继续显示该任务日志。","install.logs":"安装日志","install.installedList":"已安装","install.noneInstalled":"暂无可创建的已安装应用","install.createRequiresInstalled":"请先安装当前模板,安装成功后才能创建应用","install.waitingCompletion":"当前模板正在安装中,请等待安装完成","install.success":"模板安装完成","install.failed":"模板安装失败","install.done":"完成","install.runningShort":"进行中","install.failedShort":"失败","install.manualRequired":"当前环境无法自动提权,请在终端手动执行下方命令后重新点击创建应用。","install.manualCommandLabel":"请在终端执行以下命令后,再重新点击创建应用:","sudoDialog.title":"输入 sudo 密码以继续安装应用","sudoDialog.body":"当前安装步骤需要 sudo 提权。密码只会用于这次安装请求,不会写入应用配置或任务日志。","sudoDialog.uninstallTitle":"输入 sudo 密码以继续卸载 Ollama","sudoDialog.uninstallBody":"当前卸载步骤需要 sudo 提权。密码只会用于这次卸载请求,不会写入应用配置或任务日志。","sudoDialog.passwordLabel":"sudo 密码","sudoDialog.passwordPlaceholder":"输入当前用户的 sudo 密码","sudoDialog.passwordRequired":"请输入 sudo 密码。","sudoDialog.passwordInvalid":"sudo 密码错误,请重新输入。","sudoDialog.verifying":"验证中...","sudoDialog.cancel":"取消","sudoDialog.confirm":"继续安装","sudoDialog.uninstallConfirm":"继续卸载","uninstall.submit":"卸载 Ollama","uninstall.loading":"卸载中","uninstall.runningShort":"卸载中","uninstall.waitingLogs":"等待卸载日志...","uninstall.logs":"卸载日志","uninstall.reusedTask":"检测到已有卸载任务,继续显示该任务日志。","uninstall.success":"Ollama 已卸载","uninstall.failed":"卸载失败","uninstall.requiresSudo":"卸载 Ollama 时会再次弹出 sudo 密码输入框。","hermes.apiKey":"API 密钥","hermes.apiKeyPlaceholder":"留空自动生成随机密钥","hermes.imageTitle":"Docker 镜像","hermes.imageChecking":"检查镜像中...","hermes.imageReady":"镜像已就绪","hermes.imageMissing":"镜像未找到","hermes.imageMissingHint":"本地未找到 {{image}} 镜像,需要先下载才能创建应用。","hermes.pullButton":"下载镜像","hermes.retryPull":"重试下载","hermes.pulling":"正在下载镜像,请稍候...","hermes.pullSuccess":"镜像下载成功","hermes.pullFailed":"镜像下载失败","hermes.noProvider":"尚未配置默认 LLM 提供商,Open WebUI 将无法使用 AI 对话功能。请先在设置中配置。","ollama.model":"默认模型","ollama.modelPlaceholder":"例:llama3.2、mistral、gemma2","ollama.gpu":"GPU 加速","custom.yamlTitle":"App Spec (YAML)","custom.specDocs":"查看规范文档","custom.yamlPlaceholder":"id: my-app\\ntasks:\\n - name: server\\n runtime: container\\n image: myapp:latest\\n ports:\\n - {name: http, port: 8080}","custom.yamlHint":"必须包含 tasks 数组,每个 task 需要 name、runtime、image 字段。","custom.urlRequired":"请填写 App Spec URL","custom.yamlRequired":"请填写 App Spec YAML","custom.yamlMissingFields":"YAML 缺少 id 和 tasks 字段","custom.yamlMissingTasks":"YAML 缺少 tasks 字段","name.label":"应用名称","name.placeholder":"例:极术 Agent","name.duplicate":"应用名称“{{name}}”已存在(ID: {{id}})","id.label":"应用 ID","id.placeholder":"jishu-agent","id.duplicate":"应用 ID“{{id}}”已存在","id.invalid":"名称无法生成有效 ID,请手动填写","id.hint":"小写字母、数字和连字符,创建后不可修改","description.label":"说明","description.placeholder":"可选","clone.label":"从已有实例复制配置","clone.none":"不复制","create.startedSuccess":"应用 {{name}} 创建成功并已启动",submit:Ye,loading:Qe,failed:Xe,"clone.preview":"将复制以下内容:","clone.config":"Agent 配置 (openclaw.json)","clone.plugins":"插件 (extensions)","clone.workspace":"工作区 / Skills / 人设文件","clone.apikey":"API Key 配置","clone.memory":"Agent 记忆","clone.sessions":"对话历史","clone.channelNote":"IM 通道凭证不会复制(同一通道不能绑定多个实例)","import.title":"从文件导入","import.uploadDesc":"上传 .tar.gz 文件(支持 JishuShell 导出包、备份包、OpenClaw 官方备份)","import.upload":"上传并预览","import.uploading":"上传中...","import.name":"名称","import.type":"类型","import.size":"大小","import.platform":"平台","import.noSessions":"不含对话历史","import.create":"创建应用","import.creating":"正在创建应用...","import.success":"导入成功","import.failed":"导入失败","import.fromFile":"从文件导入(导出包 / 备份 / OpenClaw 官方备份)","import.selectFile":"点击选择 .tar.gz 文件","backup.fromExisting":"从已有应用的备份创建","backup.fromExistingTitle":"从备份创建新应用","backup.selectInstance":"选择源应用","backup.selectPlaceholder":"选择应用...","backup.selectBackup":"选择备份","backup.selectBackupPlaceholder":"选择备份...","backup.noBackupsAvailable":"该实例没有备份","backup.newName":"新应用名称","backup.newId":"新应用 ID","backup.creating":"创建中...","backup.createInstance":"创建应用"},et="← 概览",tt="← 返回应用",nt="端口 {{port}}",at="应用运行失败,请查看日志排查原因。",ot="查看日志",it="独立窗口",st="重新加载",rt="快捷技能",lt="获取 gateway launch URL 失败",ct={"uptime.days":"{{d}}天{{h}}小时","uptime.hours":"{{h}}小时{{m}}分钟","uptime.minutes":"{{m}}分钟","tab.chat":"应用","tab.config":"配置","tab.logs":"日志","tab.usage":"使用情况","action.restarting":"重启中...","action.stopping":"停止中...","action.starting":"启动中...","action.startHint":"启动中...","action.stopDone":"已停止","action.restartHint":"重启中...","action.loadInstanceFailed":"加载实例失败","action.loadConfigFailed":"加载配置失败","action.loadUsageFailed":"加载用量失败","action.operationFailed":"操作失败",backToOverview:et,backToChat:tt,port:nt,"webui.ready":"Web 界面已就绪","webui.open":"打开 Web 界面","webui.notRunning":"应用未运行,请先启动。",failedHint:at,viewLogs:ot,openInWindow:it,reload:st,quickSkill:rt,"quickSkill.im":"即时通讯","quickSkill.skills":"技能","quickSkill.mcp":"MCP","quickSkill.slash":"命令","quickSkill.installed":"已安装","quickSkill.installing":"安装中…","quickSkill.install":"安装","quickSkill.allInstalled":"全部已安装","quickSkill.noInstalled":"暂无已安装的 Skill","quickSkill.noSkills":"该分类暂无技能,敬请期待","quickSkill.loading":"加载中…","quickSkill.customSkillPlaceholder":"自定义 Skill 链接 (clawhub.ai/...)","quickSkill.visit":"访问 →","quickSkill.bound":"已绑定","quickSkill.scanToBind":"扫码绑定","quickSkill.pluginInstalling":"插件安装中...","quickSkill.clickToInstall":"点击安装插件","quickSkill.moreImConfig":"更多渠道配置","quickSkill.configured":"已配置","quickSkill.oneClickConfig":"一键配置","quickSkill.detecting":"检测中…","quickSkill.mcporterDesc":"MCP 服务安装与管理工具","quickSkill.mcpJsonLabel":"填入 MCP 配置(JSON)","quickSkill.addToConfig":"添加到配置","quickSkill.mcpJsonNotObject":'JSON 格式错误,应为对象({ "serverName": {...} })',"quickSkill.mcpJsonEmpty":"未检测到有效的 MCP server 条目","quickSkill.mcpJsonParseFailed":"JSON 解析失败:{{error}}","quickSkill.mcpJsonValueNotObject":'"{{name}}" 的值必须是对象',"quickSkill.mcpJsonMissingField":'"{{name}}" 缺少 command 或 baseUrl 字段',"quickSkill.mcpWritten":"已写入 MCPorter 配置","quickSkill.mcpAdded":"已添加 {{label}} 到 MCPorter 配置","quickSkill.mcpWriteFailed":"写入失败","quickSkill.mcpAddFailed":"添加失败","quickSkill.mcporterConfigured":"MCPorter 已配置","quickSkill.statusNormal":"正常","quickSkill.statusNormalWithTools":"正常 · {{count}}工具","feishu.pluginInstalled":"飞书插件安装完成,实例将自动重启加载插件","feishu.pluginFailed":"飞书插件安装失败","weixin.pluginInstalled":"微信插件安装完成,实例将自动重启加载插件","weixin.pluginFailed":"微信插件安装失败","feishu.installing":"正在安装飞书插件...","weixin.installing":"正在安装微信插件...","feishu.waitingInstall":"飞书插件安装中,请稍候","weixin.waitingInstall":"微信插件安装中,请稍候","qr.gettingQr":"正在获取二维码...","qr.getFailed":"获取二维码失败","qr.scanFeishu":"请使用飞书或 Lark 扫描二维码","qr.scanWeixin":"请使用微信扫描二维码","qr.loginSuccess":"登录成功!","qr.expired":"二维码已过期","qr.pollFailed":"轮询失败,请刷新后重试","qr.refreshed":"二维码已刷新,请重新扫描","qr.scaned":"已扫码,请在手机上确认...","qr.credSaved":"凭证已自动保存,重启实例后生效。","qr.feishuTitle":"飞书 / Lark 登录","qr.weixinTitle":"微信 ClawBot 登录","qr.retry":"重新获取","config.modified":"配置已修改,需保存后生效","config.discard":"放弃修改","config.form":"表单","config.json":"JSON","config.jsonHelp":"JSON 编辑说明","config.jsonHelp1":'API Key 配置位于 <code class="bg-[#0066FF]/10 px-1 rounded">x-jishushell.proxy.upstream.apiKey</code>,已保存的 Key 不会回显,留空即保持不变',"config.jsonHelp2":'<code class="bg-[#0066FF]/10 px-1 rounded">models.providers</code> 会在保存时自动重写为内置代理配置,请勿手动修改',"config.jsonHelp3":"模型/厂商切换建议使用表单模式,JSON 模式适合微调 channels、plugins 等高级配置","config.saving":"保存中...","config.save":"保存","config.processing":"处理中...","config.saveAndRestart":"保存并重启","config.savedAndRestarted":"配置已保存并重启","config.savedButRestartFailed":"配置已保存,但重启失败: {{error}}","config.restartFailed":"重启失败: {{error}}","config.saved":"配置已保存","config.jsonError":"JSON 格式错误","config.jsonParseError":"JSON 格式错误: {{error}}","config.unsavedWarning":"配置尚未保存,确定离开?","config.presetAdded":"预设已添加,请填写必要字段后保存","config.navigatingToConfig":"正在跳转到配置页,预设将自动填入","delete.title":"删除实例","delete.warning":"此操作将删除实例 <strong>{{name}}</strong> 的所有配置和数据,不可恢复。","delete.warningBefore":"此操作将删除实例 ","delete.warningAfter":" 的所有配置和数据,不可恢复。","delete.confirmHint":"请输入应用名称确认:","delete.confirm":"确认删除","delete.failed":"删除失败","delete.skillConfirm":'确定删除 Skill "{{name}}"?',"delete.mcpConfirm":'确定删除 MCP "{{name}}"?',"logs.searchPlaceholder":"搜索日志...","logs.empty":"暂无日志","logs.copied":"已复制","logs.copyFailed":"复制失败","usage.noTokenData":"当前模型提供商未返回 Token 用量数据,消息计数仍然有效。","usage.messages":"消息数","usage.totalTokens":"总 Tokens","usage.totalCost":"总费用","usage.sessions":"会话","usage.noSessions":"暂无会话数据","usage.time":"时间","usage.model":"模型","usage.source":"来源","usage.messagesShort":"消息","usage.input":"输入","usage.output":"输出","usage.tokens":"总 Tokens","usage.cost":"费用","chat.notReady":"应用服务未就绪","chat.startHint":"请先启动应用,启动后应用界面将自动加载","chat.startInstance":"启动应用","chat.waitingGateway":"正在等待网关就绪...","status.gatewayPending":"网关就绪中","chat.loadingChat":"正在加载应用界面...","update.confirm":`升级 JishuShell {{currentVersion}} → {{latestVersion}}?
|
|
13
|
+
面板将自动重启,页面需手动刷新。`,"update.started":"升级已启动,面板即将重启,请稍后刷新页面","update.restarting":"新版本已安装,正在等待面板重启…","update.completed":"升级成功:JishuShell {{latestVersion}} 已就绪","update.failed":"升级失败","update.refreshPrompt":"JishuShell 已升级到 {{latestVersion}}。刷新页面后更新生效,是否现在刷新?","update.found":"发现新版本:","update.upgrading":"升级中…","update.upgradeNow":"立即升级",gatewayLaunchFailed:lt,"configForm.modelConfig":"模型配置","configForm.imChannelConfig":"IM 通道配置","configForm.proxyChain":"内置代理链路","configForm.proxyChainDesc":"OpenClaw 固定使用 `jsproxy/default`,真实上游 API Key 只会保存在代理侧。","configForm.proxyAddress":"代理地址:","configForm.notConfigured":"未配置","configForm.proxyStatus":"代理状态:","configForm.running":"运行中","configForm.notRunning":"未运行","configForm.virtualKeyLabel":"实例虚拟 Key:","configForm.generated":"已生成","configForm.notGenerated":"未生成","configForm.editModelConfig":"修改模型配置","configForm.upstreamProvider":"上游模型提供商","configForm.upstreamProviderHint":"这里配置的是内置代理背后的真实 provider,而不是 OpenClaw 直接连接的 provider","configForm.selectProvider":"选择上游 provider","configForm.custom":"(自定义)","configForm.switchProviderConfirm":"切换 Provider 将清空已输入的 API Key,确定继续?","configForm.upstreamApiKey":"上游 API Key","configForm.apiKeyHintSaved":"已保存在代理侧,留空则保持不变","configForm.apiKeyHintNew":"从真实 provider 平台获取","configForm.enterApiKey":"输入 API Key","configForm.markedForClear":"已标记为清空","configForm.clearSavedApiKey":"清空已保存 API Key","configForm.upstreamModel":"上游默认模型","configForm.upstreamModelHint":"已自动选择推荐模型,如需切换可在此更改","configForm.modelId":"模型 ID","configForm.modelIdHint":"必填,如 llama3、qwen2.5:7b","configForm.modelName":"模型名称","configForm.modelNamePlaceholder":"可选,留空同模型 ID","configForm.contextWindow":"上下文窗口","configForm.collapseAdvanced":"收起高级选项","configForm.advancedOptions":"高级选项","configForm.upstreamBaseUrl":"上游 Base URL","configForm.baseUrlPlaceholder":"API 地址","configForm.upstreamApiProtocol":"上游 API 协议","configForm.localServiceAddress":"本地服务地址","configForm.providerGroup.国内厂商":"国内厂商","configForm.providerGroup.国际厂商":"国际厂商","configForm.providerGroup.推理加速":"推理加速","configForm.providerGroup.聚合平台":"聚合平台","configForm.providerGroup.本地部署":"本地部署","configForm.providerLabel.minimax":"MiniMax (国内)","configForm.providerLabel.minimax-intl":"MiniMax (国际)","configForm.providerLabel.moonshot-coding":"Kimi (编码计划)","configForm.providerLabel.moonshot-intl":"Kimi (国际)","configForm.providerLabel.zhipu":"智谱AI (GLM)","configForm.providerLabel.zhipu-intl":"Z.AI (GLM)","configForm.providerLabel.volcengine":"火山引擎 (豆包)","configForm.providerLabel.qianfan":"百度千帆 (ERNIE)","configForm.providerLabel.dashscope":"阿里云百炼","configForm.providerLabel.modelstudio":"阿里云百炼 (国际/Coding)","configForm.providerLabel.tencent":"腾讯混元","configForm.providerLabel.stepfun":"阶跃星辰","configForm.providerLabel.baichuan":"百川智能","configForm.providerLabel.xiaomi":"MiMo (小米)","configForm.providerLabel.byteplus":"火山引擎国际版 (Doubao)","configForm.providerLabel.spark":"讯飞星火","configForm.providerLabel.siliconflow":"SiliconFlow","configForm.providerLabel.infini":"Infini-AI","configForm.providerLabel.ollama":"Ollama (本地)","configForm.providerLabel.vllm":"vLLM (本地)","configForm.providerLabel.sglang":"SGLang (本地)","channel.feishu":"飞书 / Lark","channel.weixin":"微信","configForm.channel.feishu":"飞书 / Lark","configForm.channel.openclaw-weixin":"微信","configForm.channel.telegram":"Telegram","configForm.channel.discord":"Discord","configForm.channel.slack":"Slack","configForm.channel.whatsapp":"WhatsApp","configForm.channel.msteams":"Microsoft Teams","configForm.channel.signal":"Signal","configForm.channel.line":"LINE","configForm.channel.googlechat":"Google Chat","configForm.apiProtocol":"API 协议","configForm.proxyNote":"OpenClaw 的实际 provider 会在保存时自动改写为 `jsproxy/default`。这里的高级参数只影响内置代理背后的真实上游连接。","configForm.hint.moonshot-coding":"使用 Anthropic 兼容接口对接 Kimi K2 系列模型,专为 Coding/Agent 场景优化。推荐模型:kimi-k2-thinking-turbo(高速思考)或 kimi-k2.5(全能多模态)。","configForm.hint.volcengine":"火山引擎需要先在控制台创建「推理接入点」,然后将接入点 ID 填入下方模型 ID 中。","configForm.hint.byteplus":"BytePlus 需要先在控制台创建 Endpoint,然后将 Endpoint ID 填入下方模型 ID 中。","configForm.hint.openrouter":"OpenRouter 聚合了多家模型,选择 Auto 会自动路由到最优模型。API Key 从 openrouter.ai/keys 获取。","configForm.hint.ollama":"请确保 Ollama 服务已启动,并在下方填写实际部署的模型名称。","configForm.hint.vllm":"请确保 vLLM 服务已启动,并在下方填写实际加载的模型名称。","configForm.hint.sglang":"请确保 SGLang 服务已启动,并在下方填写实际加载的模型名称。","configForm.sessionIsolation":"对话隔离模式","configForm.sessionIsolationHint":"控制不同用户、不同通道的对话是否共享上下文","configForm.sessionMain":"所有人共享对话","configForm.sessionPerPeer":"每人独立对话","configForm.sessionPerChannelPeer":"每人每通道独立对话","configForm.sessionPerAccountChannelPeer":"每人每账号独立对话","configForm.pluginInstalling":"{{label}}插件安装中...","configForm.installPlugin":"安装{{label}}插件","configForm.installPluginHint":"安装插件后即可配置{{label}}通道","configForm.remove":"移除","configForm.addImChannel":"添加 IM 通道","configForm.whatsappTitle":"WhatsApp 通过二维码配对","configForm.whatsappHint":"启用后启动实例,在「日志」Tab 中查看 QR 码,用手机 WhatsApp 扫描即可。首次配对后凭证会自动保存,后续无需重复扫码。","configForm.feishu.platform":"平台: {{platform}}。凭证已自动保存,重启实例后生效。","configForm.feishu.platformLark":"Lark (国际版)","configForm.feishu.platformFeishu":"飞书","configForm.feishu.added":"已添加","configForm.feishu.addBot":"添加飞书 / Lark 机器人","configForm.feishu.addBotHint":"使用飞书或 Lark APP 扫码,自动创建并配置机器人。系统自动识别平台。","configForm.feishu.gettingQr":"正在获取二维码...","configForm.feishu.scanHint":"请使用飞书或 Lark 扫描二维码","configForm.feishu.cancel":"取消","configForm.feishu.refresh":"刷新","configForm.weixin.accountId":"账号 ID:","configForm.weixin.restartHint":"保存并重启实例后生效。可再次扫码添加更多微信号。","configForm.weixin.addAnother":"添加另一个微信号","configForm.weixin.added":"已添加","configForm.weixin.addClawBot":"添加微信 ClawBot","configForm.weixin.addClawBotHint":"点击后显示二维码,用手机微信扫码即可。{{extra}}","configForm.weixin.addClawBotHintRestart":"保存并重启后生效。","configForm.weixin.addClawBotHintMulti":"支持多账号。","configForm.weixin.gettingQr":"正在获取二维码...","configForm.weixin.scanHint":"请使用微信扫描二维码","configForm.weixin.cancel":"取消","configForm.weixin.refresh":"刷新","config.clickToEdit":"点击输入新值","backup.manageMenu":"备份管理","backup.autoBackup":"自动备份","backup.autoEnabled":"自动备份已开启","backup.autoDisabled":"自动备份已关闭","backup.notConfigured":"自动备份未开启","backup.enableNow":"立即开启","backup.enabling":"开启中...","backup.interval":"每{{h}}小时备份","backup.keep":"保留{{n}}份","backup.failed":"失败","backup.manageTitle":"备份管理","backup.noBackups":"暂无备份","backup.typeAuto":"自动","backup.typeManual":"手动","backup.typePreRestore":"恢复前","backup.restore":"恢复","backup.createNew":"创建新实例","backup.download":"下载","backup.delete":"删除","backup.createNew2":"创建新备份","backup.create":"备份","backup.createTitle":"创建备份","backup.createDesc":"备份当前实例的配置、插件和数据。","backup.includeSessions":"包含对话历史(体积较大)","backup.creating":"备份中...","backup.created":"备份完成","backup.deleted":"已删除","backup.processing":"处理中...","backup.queueNote":"任务将按顺序执行","backup.restoreTitle":"恢复将覆盖当前数据","backup.restoreDesc":"已自动创建恢复前备份,如有问题可回滚。","backup.restoreConfirmLabel":"输入实例名确认恢复:","backup.confirmRestore":"确认恢复","backup.restoring":"恢复中...","backup.restoreSuccess":"恢复完成","backup.restoreOk":"实例已恢复。","backup.restoreFailed":"恢复失败","backup.restoreFailedRolledBack":"恢复失败 — 已自动回滚","backup.apiKeyLost":"备份来自不同平台/架构,请确认 API Key 配置是否仍然适用。","backup.configApiKey":"配置 API Key","backup.createFromTitle":"从备份创建新应用","backup.newName":"新应用名称","backup.newNamePlaceholder":"我的 Agent 副本","backup.newId":"新应用 ID","backup.newIdPlaceholder":"my-agent-copy","backup.createFromNote":"API Key 和 IM 凭证不会复制,需自行配置。","backup.createInstance":"创建","backup.createFromBackupOk":"新应用创建成功","backup.createFromBackupFail":"创建应用失败","backup.export":"导出(分享)","backup.exportTitle":"导出(分享)","backup.exportDesc":"生成可分享的导出包,API Key 和凭证将自动移除。","backup.exportConfig":"配置 (openclaw.json, 已清洗)","backup.exportPlugins":"插件 (extensions)","backup.exportWorkspace":"工作区 / Skills","backup.exportNoKeys":"API Key / 凭证 — 已移除","backup.exportIncludeSessions":"包含对话历史","backup.exportBtn":"导出","backup.exporting":"导出中...","backup.exportDone":"导出完成","backup.downloadExport":"下载","backup.scopeFull":"完整备份(含运行时)","backup.scopeState":"仅数据(更小、可移植)","backup.scopeFullDesc":"包含升级后的 OpenClaw 运行时——恢复后保持当前版本","backup.scopeStateDesc":"仅 .openclaw/ 数据——体积小,兼容官方 OpenClaw 格式","clone.preview":"将复制以下内容:","clone.config":"Agent 配置 (openclaw.json)","clone.plugins":"插件 (extensions)","clone.workspace":"工作区 / Skills / 人设文件","clone.apikey":"API Key 配置","clone.memory":"Agent 记忆","clone.sessions":"对话历史","clone.channelNote":"IM 通道凭证不会复制(同一通道不能绑定多个实例)","import.title":"从文件导入 OpenClaw 实例","import.uploadDesc":"上传 .tar.gz 文件(支持 JishuShell 导出包、备份包、OpenClaw 官方备份)","import.upload":"上传并预览","import.uploading":"上传中...","import.name":"名称","import.type":"类型","import.size":"大小","import.platform":"平台","import.noSessions":"不含对话历史","import.create":"创建应用","import.creating":"正在创建应用...","import.success":"导入成功"},dt="配置运行环境",ut="版本过低",pt="必需",mt="恢复任务: {{label}}...",gt="任务失败",ht="{{label}} 已完成",ft="{{label}} 任务状态获取失败",kt="{{label}} 超时(超过 10 分钟),请检查后端日志",bt="正在安装 {{label}}...",wt="{{label}} 已开始",vt="{{label}} 安装失败: {{error}}",xt="安装失败",yt="Docker 镜像构建",St="Docker 安装",Ft="OpenClaw 安装",Ct="正在配置 Nomad systemd 服务...",It="Nomad 服务已启动",Pt="Nomad 已启动",At="Nomad 启动失败: {{error}}",jt="等待 Nomad 就绪...",Nt="Nomad 已就绪",Lt="配置写入失败",Tt="保存失败",Dt="{{label}} 失败: {{message}}",Ot={title:dt,"steps.check":"环境检测","steps.modelConfig":"模型配置","steps.done":"完成",versionTooOld:ut,required:pt,resumeTask:mt,taskFailed:gt,taskCompleted:ht,taskStatusFailed:ft,taskTimeout:kt,installing:bt,taskStarted:wt,installFailed:vt,defaultInstallFailed:xt,dockerImageBuild:yt,dockerInstall:St,openclawInstall:Ft,configuringNomadSystemd:Ct,nomadServiceStarted:It,nomadStarted:Pt,nomadStartFailed:At,waitingNomad:jt,nomadReady:Nt,configWriteFailed:Lt,saveFailed:Tt,"check.title":"环境检测","check.desc":"检查系统已安装的组件","check.requiredComponents":"必需组件","check.upgrading":"升级中...","check.upgrade":"升级","node.title":"升级 Node.js","node.desc":"OpenClaw 需要 Node.js 22+,当前版本过低","node.ready":"Node.js 已就绪 ({{version}})","node.currentVersion":"当前版本 {{version}},需升级到 22+","node.noSudo":"当前版本 {{version}},需升级到 22+,但当前用户没有 sudo 权限","node.upgrading":"升级中...","node.upgradeBtn":"升级 Node.js","node.sudoRequired":"需要 sudo 权限,通过 NodeSource 安装","node.contactAdmin":"请联系管理员执行以下命令:","node.refreshAfterInstall":"安装完成后点此刷新","docker.title":"安装 Docker","docker.desc":"容器运行时,用于隔离运行 OpenClaw 实例","docker.running":"Docker 运行中 ({{version}})","docker.notRunning":"Docker 已安装但服务未运行,请启动 Docker 服务","docker.refreshAfterStart":"启动后点此刷新","docker.installing":"安装中,请稍候...","docker.installBtn":"安装 Docker","docker.sudoRequired":"需要 sudo 权限,可能需要几分钟","docker.noSudo":"当前用户没有 sudo 权限,无法自动安装","docker.contactAdmin":"请联系管理员执行以下命令:","docker.refreshAfterInstall":"安装完成后点此刷新","nomad.title":"安装 Nomad","nomad.desc":"编排引擎,管理 OpenClaw 容器的生命周期","nomad.running":"Nomad 运行中 ({{version}})","nomad.starting":"Nomad 已安装,正在启动...","nomad.installing":"安装中...","nomad.installBtn":"安装 Nomad","openclaw.title":"安装 OpenClaw","openclaw.desc":"AI 智能体运行时,JishuShell 的核心组件","openclaw.installed":"OpenClaw 已安装 ({{version}})","openclaw.buildingImage":"正在构建 Docker 镜像,首次构建需要几分钟...","openclaw.buildImageBtn":"构建 Docker 镜像","openclaw.installing":"安装中,请稍候...","openclaw.installBtn":"安装 OpenClaw","openclaw.npmHint":"通过 npm 安装,需要网络连接","done.finalizing":"正在完成配置...","done.finalizingDesc":"写入系统配置,请稍候","done.complete":"环境配置完成","done.completeDesc":"基础环境已就绪","provider.title":"配置默认模型","provider.desc":"新建应用时将自动使用此配置,可随时在应用详情中修改","provider.label":"模型提供商","provider.placeholder":"选择提供商","provider.apiKey":"API Key","provider.apiKeyPlaceholder":"输入 API Key","provider.baseUrl":"Base URL","provider.fetchModels":"获取模型","provider.fetchingModels":"获取中…","provider.liveModels":"个在线模型","provider.fetchModelsFailed":"获取模型列表失败","provider.defaultModel":"默认模型","provider.skip":"跳过","provider.saving":"保存中...","provider.save":"保存","provider.saved":"模型配置已保存","provider.saveFailed":"保存失败","provider.apiKeyConfigured":"••••••••(已配置)","provider.fetchFailed":"获取模型失败,请检查地址是否可达","provider.noModelsFound":"未获取到可用模型","provider.modelName":"模型名称","provider.modelNamePlaceholder":"输入模型名称,如 qwen2.5:7b","provider.modelNameHint":"可点击「获取模型」自动获取,或手动输入","provider.saveAndContinue":"保存并继续","nav.next":"下一步","nav.retry":"重试","nav.enterPanel":"进入面板",taskErrorPrefix:Dt},Rt={"im.feishu.desc":"飞书机器人(WebSocket 模式)","im.openclaw-weixin.desc":"微信扫码接入","skills.group.hubs":"热门Hub","skills.group.general":"通用基础","skills.group.productivity":"工作效率","skills.group.life":"生活辅助","skills.group.dev":"开发工具","skills.clawhub.desc":"OpenClaw 官方 Skill 市场","skills.skillhub-tencent.label":"腾讯 SkillHub","skills.skillhub-tencent.desc":"腾讯技能中心,官方出品","skills.skills-sh.desc":"第三方 Skill 聚合社区","skills.skill-vetter.desc":"安全审计 Skill,安装前建议先审查","skills.self-improving-agent.desc":"自我优化的 Agent,持续改进任务执行","skills.proactive-agent.desc":"主动式 Agent,自动感知并提前完成任务","skills.multi-search-engine.desc":"多搜索引擎聚合搜索","skills.exa-web-search-free.desc":"免费 Exa 网页语义搜索","skills.lobehub-skills.label":"LobeHub Skills","skills.lobehub-skills.desc":"LobeHub 社区 Skill 市场","skills.findskills.label":"FindSkills.org","skills.findskills.desc":"开源 Skill 搜索与聚合平台","skills.playbooks-skills.label":"Playbooks Skills","skills.playbooks-skills.desc":"Playbooks 社区 Skill 目录","skills.pdf-reader.label":"PDF Reader","skills.pdf-reader.desc":"PDF 文档读取与分析","skills.powerpoint-pptx.label":"PowerPoint / PPTX","skills.powerpoint-pptx.desc":"PPT 演示文稿生成与编辑","skills.word-docx.label":"Word / DOCX","skills.word-docx.desc":"Word 文档生成与编辑","skills.excel-xlsx.label":"Excel / XLSX","skills.excel-xlsx.desc":"Excel 表格生成与数据处理","skills.todo-manager.label":"Todo Manager","skills.todo-manager.desc":"任务与待办事项管理","skills.12306.label":"12306 火车票","skills.12306.desc":"查询与购买 12306 火车票","skills.youtube-watcher.label":"YouTube Watcher","skills.youtube-watcher.desc":"YouTube 视频摘要与内容分析","skills.cli-developer.label":"CLI Developer","skills.cli-developer.desc":"命令行工具开发辅助","skills.home-assistant.label":"Home Assistant","skills.home-assistant.desc":"Home Assistant 智能家居集成","mcp.12306-mcp.label":"12306-MCP车票查询工具","mcp.12306-mcp.desc":"12306-MCP车票查询工具","slash.group.会话":"会话","slash.group.模型":"模型","slash.group.工具":"工具","slash.slash-new.desc":"开启新会话","slash.slash-reset.desc":"重置当前会话","slash.slash-compact.desc":"压缩会话上下文","slash.slash-stop.desc":"停止当前运行","slash.slash-clear.desc":"清空聊天记录","slash.slash-focus.desc":"切换专注模式","slash.slash-model.desc":"查看或切换模型","slash.slash-think.desc":"设置思考深度","slash.slash-verbose.desc":"切换详细输出模式","slash.slash-fast.desc":"切换快速模式","slash.slash-help.desc":"查看可用命令","slash.slash-status.desc":"显示会话状态(agent)","slash.slash-export.desc":"导出会话为 Markdown","slash.slash-usage.desc":"显示 Token 用量"},Mt={"status.running":"Running","status.starting":"Starting","status.failed":"Failed","status.crashed":"Crashed","status.stopped":"Stopped","action.start":"Start","action.stop":"Stop","action.restart":"Restart","action.retry":"Retry","action.save":"Save","action.cancel":"Cancel","action.delete":"Delete","action.close":"Close","action.confirm":"Confirm","action.refresh":"Refresh","action.copyAll":"Copy All","action.startDone":"Started","action.stopDone":"Stopped","action.restartDone":"Restarted","error.loadFailed":"Failed to load","error.operationFailed":"Operation failed","error.saveFailed":"Save failed","error.deleteFailed":"Delete failed","error.connectionFailed":"Cannot connect to server","error.checkBackend":"Please check if JishuShell backend is running","nav.overview":"Overview","nav.settings":"Settings","nav.logout":"Logout","nav.instances":"App List","nav.navigation":"Navigation","nav.newInstance":"Install Application","nav.importInstance":"Import Application Backup","label.password":"Password","label.enabled":"Enabled","label.disabled":"Disabled","nav.switchLanguage":"Switch language"},Et="Overview",qt="System status and instance management",Ut={title:Et,subtitle:qt,"stats.runningInstances":"Running","stats.engineRunning":"Engine running","stats.engineStopped":"Engine not running","stats.cpu":"CPU","stats.memory":"Memory","stats.disk":"Disk","instances.title":"Instances","instances.new":"+ New","instances.import":"Import","instances.restartEngine":"Restart Engine","instances.restartEngineTitle":"Restart Nomad engine (will interrupt running instances)","instances.restarting":"Restarting...","instances.empty":"No instances yet","instances.emptyHint":"Create your first OpenClaw instance to get started","instances.loadError":"Failed to load: {{error}}","table.name":"Name","table.status":"Status","table.uptime":"Uptime","table.memory":"Memory","table.actions":"Actions","update.found":"New version available:","update.upgradeNow":"Upgrade Now","update.upgrading":"Upgrading…","update.confirm":`Upgrade JishuShell {{currentVersion}} → {{latestVersion}}?
|
|
14
|
+
The panel will restart automatically. Please refresh the page manually.`,"update.started":"Upgrade started. The panel will restart shortly. Please refresh later.","update.restarting":"The new version is installed. Waiting for the panel to restart…","update.completed":"Upgrade complete: JishuShell {{latestVersion}} is ready","update.failed":"Upgrade failed","update.refreshPrompt":"JishuShell has been upgraded to {{latestVersion}}. Refresh the page to apply the update now?","engine.restarted":"Engine restarted","engine.restartFailed":"Engine restart failed","engine.restartConfirm":"Restarting the engine will interrupt all running instances. Continue?","openclawUpdate.found":"OpenClaw update available:","openclawUpdate.noRebuild":"No image rebuild needed","openclawUpdate.upgradeNow":"Upgrade Now","openclawUpdate.upgrading":"Upgrading…","openclawUpdate.confirm":`Upgrade OpenClaw {{currentVersion}} → {{latestVersion}}?
|
|
15
|
+
Running instances will be restarted automatically. No Docker image rebuild required.`,"openclawUpdate.started":"OpenClaw upgraded. Running instances have been restarted.","openclawUpdate.failed":"OpenClaw upgrade failed"},Bt={"login.title":"Login to Admin Panel","login.password":"Password","login.placeholder":"Enter password","login.submit":"Login","login.loading":"Logging in","login.failed":"Login failed","login.forgotPassword":"Forgot password? Run in terminal:","init.title":"First time setup — set your admin password","init.password":"Password","init.passwordPlaceholder":"At least 8 characters","init.confirm":"Confirm Password","init.confirmPlaceholder":"Enter password again","init.mismatch":"Passwords do not match","init.submit":"Complete Setup","init.loading":"Setting up","init.failed":"Setup failed"},$t="Settings",Wt="System configuration and security",Vt={title:$t,subtitle:Wt,"proxy.title":"Built-in Proxy","proxy.desc":"The built-in proxy is always running and managed automatically by the system. Simply fill in the real upstream API Key on the Settings page or instance page, and the proxy will handle forwarding.","proxy.status":"Do not manually modify the API Key in the OpenClaw configuration page.","password.title":"Change Password","password.current":"Current Password","password.currentPlaceholder":"Current password","password.new":"New Password","password.newPlaceholder":"At least 8 characters","password.submit":"Update Password","password.updated":"Password updated","password.failed":"Update failed","system.title":"System Info","system.cpuUsage":"CPU Usage","system.memory":"Memory","system.disk":"Disk","system.cpuTemp":"CPU Temperature","about.title":"About","llm.title":"Model Providers","llm.desc":"Configure AI model providers: add, edit, delete and set the default","llm.add":"Add","llm.addTitle":"Add Provider","llm.editTitle":"Edit: {{id}}","llm.save":"Save","llm.saving":"Saving…","llm.cancel":"Cancel","llm.edit":"Edit","llm.delete":"Delete","llm.setDefault":"Set Default","llm.default":"Default","llm.availableModels":"Available models","llm.model":"Default model","llm.noModel":"None","llm.loading":"Loading…","llm.empty":"No providers configured yet","llm.added":"Provider added","llm.updated":"Provider updated","llm.deleted":"Provider deleted","llm.defaultSet":"{{id}} set as default provider","llm.saveFailed":"Save failed","llm.deleteFailed":"Delete failed","llm.confirmDelete":'Delete provider "{{id}}"?',"llm.deleteLastForbidden":"At least one provider must remain","llm.presetLabel":"Provider","llm.presetPlaceholder":"Select a provider","llm.presetRequired":"Please select a provider","llm.alias":"Tag (optional)","llm.aliasPlaceholder":"work / personal / backup (optional)","llm.aliasHint":"Allows multiple accounts for the same provider. Leave blank for auto-numbering.","llm.aliasConflict":"This tag already exists, please use a different one","llm.fetchModels":"Fetch Models","llm.fetchingModels":"Fetching…","llm.liveModels":"live models","llm.apiKeyRequired":"API Key is required","llm.baseUrlRequired":"Base URL is required","llm.fieldName":"Display name","llm.fieldNamePlaceholder":"OpenAI","llm.fieldBaseUrl":"Base URL","llm.fieldApi":"API format","llm.fieldAuthHeader":"Auth header","llm.fieldApiKey":"API Key","llm.apiKeyConfigured":"Configured","llm.apiKeyLeaveBlank":"Leave blank to keep existing","llm.apiKeyPlaceholder":"sk-...","llm.fieldModel":"Default model","llm.modelsFetched":"{{count}} models fetched","llm.modelsFetchFailed":"Failed to fetch models"},Ht="Install Application",Kt="Install a new Agent or companion application",_t="App Configuration",Jt="Create Application",zt="Creating",Gt="Creation failed",Yt={title:Ht,subtitle:Kt,"tab.openclaw":"OpenClaw","tab.hermes":"Hermes","tab.ollama":"Ollama","tab.custom":"Custom","appDesc.openclaw":"OpenClaw AI Agent — multi-model, IM channel, and skill-extensible autonomous AI assistant platform.","appDesc.hermes":"Hermes Agent — A self-evolving AI Agent built by Nous Research.","appDesc.ollama":"Ollama — run large language models locally, supports Llama, Mistral, Gemma and more. Only one Ollama instance is supported at a time.","appDesc.custom":"Custom App — deploy any containerized application using App Spec YAML.",appConfig:_t,"kind.label":"Application Type","runtime.label":"Local Image","runtime.notInstalled":"Not installed","runtime.ready":"Ready","runtime.installing":"Installing","runtime.waitingOtherInstall":"Waiting for another install...","runtime.install":"Install {{name}}","runtime.installFirst":"Install the {{name}} runtime first","template.label":"Template","template.loading":"Loading templates...","template.none":"No container-based templates are available for application creation","template.loadFailed":"Failed to load built-in templates","template.defaultRequired":"Default template for {{name}} was not found","template.compatibilityHint":"Templates come from the apps directory. Only container-based specs that can be created as applications are shown here.","template.ollamaHint":"Uses Ollama templates from the apps directory so you can create a local model application directly.","template.ollamaRequired":"No compatible Ollama template was found","source.label":"Source","source.builtin":"Built-in Template","source.url":"Remote URL","source.yaml":"Paste YAML","source.urlPlaceholder":"https://example.com/app.yaml","source.urlHint":"The panel downloads the YAML server-side, which works even when the remote URL does not allow CORS.","install.actionTitle":"Install Template App","install.actionHint":"You can create the application only after the install succeeds.","install.button":"Install","install.identityRequired":"Set the application name and ID first","install.installing":"Installing...","install.missingTask":"No install task could be resumed. Please click Create Application again","install.notFoundAfterInstall":"The application could not be found after installation. Refresh the page and try again","install.waitingLogs":"Waiting for install logs...","install.reusedTask":"An existing install task was found. Continuing to show that task's logs.","install.logs":"Install Logs","install.installedList":"Installed","install.noneInstalled":"No installed apps are ready for creation yet","install.createRequiresInstalled":"Install the current template before creating the application","install.waitingCompletion":"The current template is still installing. Please wait for it to finish","install.success":"Template installed","install.failed":"Template installation failed","install.done":"Done","install.runningShort":"In progress","install.failedShort":"Failed","install.manualRequired":"This environment cannot elevate privileges in the background. Run the command below in a terminal, then click Create again.","install.manualCommandLabel":"Run this command in a terminal, then click Create again:","sudoDialog.title":"Enter your sudo password to continue installing this application","sudoDialog.body":"This installation step needs sudo privileges. The password is used only for this install request and is not written to app config or task logs.","sudoDialog.uninstallTitle":"Enter your sudo password to continue uninstalling Ollama","sudoDialog.uninstallBody":"This uninstall step needs sudo privileges. The password is used only for this uninstall request and is not written to app config or task logs.","sudoDialog.passwordLabel":"sudo password","sudoDialog.passwordPlaceholder":"Enter the current user's sudo password","sudoDialog.passwordRequired":"Please enter your sudo password.","sudoDialog.passwordInvalid":"Incorrect sudo password. Please try again.","sudoDialog.verifying":"Verifying...","sudoDialog.cancel":"Cancel","sudoDialog.confirm":"Continue install","sudoDialog.uninstallConfirm":"Continue uninstall","uninstall.submit":"Uninstall Ollama","uninstall.loading":"Uninstalling","uninstall.runningShort":"Uninstalling","uninstall.waitingLogs":"Waiting for uninstall logs...","uninstall.logs":"Uninstall Logs","uninstall.reusedTask":"An existing uninstall task was found. Continuing to show that task's logs.","uninstall.success":"Ollama has been uninstalled","uninstall.failed":"Uninstall failed","uninstall.requiresSudo":"Uninstalling Ollama will prompt for your sudo password again.","hermes.apiKey":"API Key","hermes.apiKeyPlaceholder":"Leave empty to auto-generate a random key","hermes.imageTitle":"Docker Image","hermes.imageChecking":"Checking image...","hermes.imageReady":"Image ready","hermes.imageMissing":"Image not found","hermes.imageMissingHint":"Image {{image}} not found locally. You need to download it before creating an application.","hermes.pullButton":"Download Image","hermes.retryPull":"Retry Download","hermes.pulling":"Downloading image, please wait...","hermes.pullSuccess":"Image downloaded successfully","hermes.pullFailed":"Failed to download image","hermes.noProvider":"No default LLM provider configured. Open WebUI will not be able to use AI chat. Please configure one in Settings first.","ollama.model":"Default Model","ollama.modelPlaceholder":"e.g. llama3.2, mistral, gemma2","ollama.gpu":"GPU Acceleration","custom.yamlTitle":"App Spec (YAML)","custom.specDocs":"View spec docs","custom.yamlPlaceholder":"id: my-app\\ntasks:\\n - name: server\\n runtime: container\\n image: myapp:latest\\n ports:\\n - {name: http, port: 8080}","custom.yamlHint":"Must contain a tasks array. Each task needs name, runtime, and image fields.","custom.urlRequired":"Please provide an App Spec URL","custom.yamlRequired":"Please provide App Spec YAML","custom.yamlMissingFields":"YAML missing id and tasks fields","custom.yamlMissingTasks":"YAML missing tasks field","name.label":"Application Name","name.placeholder":"e.g. My Agent","name.duplicate":'Application name "{{name}}" already exists (ID: {{id}})',"id.label":"Application ID","id.placeholder":"my-agent","id.duplicate":'Application ID "{{id}}" already exists',"id.invalid":"Name cannot generate a valid ID. Please enter manually.","id.hint":"Lowercase letters, numbers, and hyphens. Cannot be changed after creation.","description.label":"Description","description.placeholder":"Optional","clone.label":"Clone config from existing instance","clone.none":"Don't clone","create.startedSuccess":"Application {{name}} was created and started successfully",submit:Jt,loading:zt,failed:Gt,"clone.preview":"Will copy the following:","clone.config":"Agent Config (openclaw.json)","clone.plugins":"Plugins (extensions)","clone.workspace":"Workspace / Skills / Persona Files","clone.apikey":"API Key Config","clone.memory":"Agent Memory","clone.sessions":"Conversation History","clone.channelNote":"IM channel credentials will not be copied (same channel cannot bind multiple instances)","import.title":"Import from File","import.uploadDesc":"Upload a .tar.gz file (JishuShell export, backup, or OpenClaw official backup)","import.upload":"Upload & Preview","import.uploading":"Uploading...","import.name":"Name","import.type":"Type","import.size":"Size","import.platform":"Platform","import.noSessions":"No conversation history","import.create":"Create Application","import.creating":"Creating application...","import.success":"Import Successful","import.failed":"Import failed","import.fromFile":"Import from file (export / backup / OpenClaw official backup)","import.selectFile":"Click to select a .tar.gz file","backup.fromExisting":"Create from an existing application backup","backup.fromExistingTitle":"Create Application from Backup","backup.selectInstance":"Select source application","backup.selectPlaceholder":"Select application...","backup.selectBackup":"Select backup","backup.selectBackupPlaceholder":"Select backup...","backup.noBackupsAvailable":"No backups available for this instance","backup.newName":"New Application Name","backup.newId":"New Application ID","backup.creating":"Creating...","backup.createInstance":"Create Application"},Qt="← Overview",Xt="← Back to Chat",Zt="Port {{port}}",en="Instance failed. Check logs for details.",tn="View Logs",nn="Open in Window",an="Reload",on="Quick Skills",sn="Failed to get gateway launch URL",rn={"uptime.days":"{{d}}d {{h}}h","uptime.hours":"{{h}}h {{m}}m","uptime.minutes":"{{m}}m","tab.chat":"Chat","tab.config":"Config","tab.logs":"Logs","tab.usage":"Usage","action.restarting":"Restarting...","action.stopping":"Stopping...","action.starting":"Starting...","action.startHint":"Starting...","action.stopDone":"Stopped","action.restartHint":"Restarting...","action.loadInstanceFailed":"Failed to load instance","action.loadConfigFailed":"Failed to load config","action.loadUsageFailed":"Failed to load usage","action.operationFailed":"Operation failed",backToOverview:Qt,backToChat:Xt,port:Zt,"webui.ready":"Web UI is ready","webui.open":"Open Web UI","webui.notRunning":"Instance is not running. Start it first.",failedHint:en,viewLogs:tn,openInWindow:nn,reload:an,quickSkill:on,"quickSkill.im":"IM","quickSkill.skills":"Skills","quickSkill.mcp":"MCP","quickSkill.slash":"Commands","quickSkill.installed":"Installed","quickSkill.installing":"Installing…","quickSkill.install":"Install","quickSkill.allInstalled":"All Installed","quickSkill.noInstalled":"No skills installed yet","quickSkill.noSkills":"No skills in this category yet","quickSkill.loading":"Loading…","quickSkill.customSkillPlaceholder":"Custom skill URL (clawhub.ai/...)","quickSkill.visit":"Visit →","quickSkill.bound":"Bound","quickSkill.scanToBind":"Scan to bind","quickSkill.pluginInstalling":"Plugin installing...","quickSkill.clickToInstall":"Click to install plugin","quickSkill.moreImConfig":"More channel settings","quickSkill.configured":"Configured","quickSkill.oneClickConfig":"One-click setup","quickSkill.detecting":"Detecting…","quickSkill.mcporterDesc":"MCP service installer and manager","quickSkill.mcpJsonLabel":"Paste MCP config (JSON)","quickSkill.addToConfig":"Add to config","quickSkill.mcpJsonNotObject":'Invalid JSON format. Expected an object ({ "serverName": {...} })',"quickSkill.mcpJsonEmpty":"No valid MCP server entries detected","quickSkill.mcpJsonParseFailed":"JSON parse failed: {{error}}","quickSkill.mcpJsonValueNotObject":'"{{name}}" value must be an object',"quickSkill.mcpJsonMissingField":'"{{name}}" is missing command or baseUrl field',"quickSkill.mcpWritten":"MCPorter config saved","quickSkill.mcpAdded":"Added {{label}} to MCPorter config","quickSkill.mcpWriteFailed":"Write failed","quickSkill.mcpAddFailed":"Add failed","quickSkill.mcporterConfigured":"MCPorter Configured","quickSkill.statusNormal":"OK","quickSkill.statusNormalWithTools":"OK · {{count}} tools","feishu.pluginInstalled":"Feishu plugin installed. Instance will restart to load it.","feishu.pluginFailed":"Feishu plugin installation failed","weixin.pluginInstalled":"WeChat plugin installed. Instance will restart to load it.","weixin.pluginFailed":"WeChat plugin installation failed","feishu.installing":"Installing Feishu plugin...","weixin.installing":"Installing WeChat plugin...","feishu.waitingInstall":"Feishu plugin is installing, please wait","weixin.waitingInstall":"WeChat plugin is installing, please wait","qr.gettingQr":"Getting QR code...","qr.getFailed":"Failed to get QR code","qr.scanFeishu":"Scan with Feishu or Lark","qr.scanWeixin":"Scan with WeChat","qr.loginSuccess":"Login successful!","qr.expired":"QR code expired","qr.pollFailed":"Polling failed. Please refresh and retry.","qr.refreshed":"QR code refreshed. Please scan again.","qr.scaned":"Scanned. Please confirm on your phone...","qr.credSaved":"Credentials saved. Restart instance to apply.","qr.feishuTitle":"Feishu / Lark Login","qr.weixinTitle":"WeChat ClawBot Login","qr.retry":"Retry","config.modified":"Config modified. Save to apply.","config.discard":"Discard changes","config.form":"Form","config.json":"JSON","config.jsonHelp":"JSON Editing Notes","config.jsonHelp1":'API Key is at <code class="bg-[#0066FF]/10 px-1 rounded">x-jishushell.proxy.upstream.apiKey</code>. Saved keys are hidden; leave empty to keep current.',"config.jsonHelp2":'<code class="bg-[#0066FF]/10 px-1 rounded">models.providers</code> is auto-rewritten to built-in proxy config on save. Do not edit manually.',"config.jsonHelp3":"Use Form mode for model/provider changes. JSON mode is for fine-tuning channels, plugins, etc.","config.saving":"Saving...","config.save":"Save","config.processing":"Processing...","config.saveAndRestart":"Save & Restart","config.savedAndRestarted":"Config saved and restarted","config.savedButRestartFailed":"Config saved, but restart failed: {{error}}","config.restartFailed":"Restart failed: {{error}}","config.saved":"Config saved","config.jsonError":"Invalid JSON","config.jsonParseError":"Invalid JSON: {{error}}","config.unsavedWarning":"Config has unsaved changes. Leave anyway?","config.presetAdded":"Preset added. Fill in required fields and save.","config.navigatingToConfig":"Navigating to config. Preset will be auto-filled.","delete.title":"Delete Instance","delete.warning":"This will delete all config and data for <strong>{{name}}</strong>. This cannot be undone.","delete.warningBefore":"This will delete all config and data for ","delete.warningAfter":". This cannot be undone.","delete.confirmHint":"Type the instance name to confirm:","delete.confirm":"Delete","delete.failed":"Delete failed","delete.skillConfirm":'Delete Skill "{{name}}"?',"delete.mcpConfirm":'Delete MCP "{{name}}"?',"logs.searchPlaceholder":"Search logs...","logs.empty":"No logs yet","logs.copied":"Copied","logs.copyFailed":"Copy failed","usage.noTokenData":"The current model provider does not return token usage data. Message counts are still valid.","usage.messages":"Messages","usage.totalTokens":"Total Tokens","usage.totalCost":"Total Cost","usage.sessions":"Sessions","usage.noSessions":"No session data","usage.time":"Time","usage.model":"Model","usage.source":"Source","usage.messagesShort":"Messages","usage.input":"Input","usage.output":"Output","usage.tokens":"Total Tokens","usage.cost":"Cost","chat.notReady":"Chat service not ready","chat.startHint":"Start the instance first. Chat will load automatically.","chat.startInstance":"Start Instance","chat.waitingGateway":"Waiting for gateway...","status.gatewayPending":"Gateway pending","chat.loadingChat":"Loading chat interface...","update.confirm":`Upgrade JishuShell {{currentVersion}} → {{latestVersion}}?
|
|
16
|
+
The panel will restart automatically. Please refresh manually.`,"update.started":"Upgrade started. Panel will restart shortly.","update.restarting":"The new version is installed. Waiting for the panel to restart…","update.completed":"Upgrade complete: JishuShell {{latestVersion}} is ready","update.failed":"Upgrade failed","update.refreshPrompt":"JishuShell has been upgraded to {{latestVersion}}. Refresh the page to apply the update now?","update.found":"New version available:","update.upgrading":"Upgrading…","update.upgradeNow":"Upgrade Now",gatewayLaunchFailed:sn,"configForm.modelConfig":"Model Config","configForm.imChannelConfig":"IM Channel Config","configForm.proxyChain":"Built-in Proxy Chain","configForm.proxyChainDesc":"OpenClaw uses `jsproxy/default`. The real upstream API Key is only stored on the proxy side.","configForm.proxyAddress":"Proxy address:","configForm.notConfigured":"Not configured","configForm.proxyStatus":"Proxy status:","configForm.running":"Running","configForm.notRunning":"Not running","configForm.virtualKeyLabel":"Instance virtual key:","configForm.generated":"Generated","configForm.notGenerated":"Not generated","configForm.editModelConfig":"Edit Model Config","configForm.upstreamProvider":"Upstream Provider","configForm.upstreamProviderHint":"This configures the real provider behind the built-in proxy, not the provider OpenClaw connects to directly","configForm.selectProvider":"Select upstream provider","configForm.custom":"(custom)","configForm.switchProviderConfirm":"Switching provider will clear the entered API Key. Continue?","configForm.upstreamApiKey":"Upstream API Key","configForm.apiKeyHintSaved":"Saved on proxy side. Leave empty to keep current.","configForm.apiKeyHintNew":"Get from the real provider platform","configForm.enterApiKey":"Enter API Key","configForm.markedForClear":"Marked for clearing","configForm.clearSavedApiKey":"Clear saved API Key","configForm.upstreamModel":"Upstream Default Model","configForm.upstreamModelHint":"Recommended model auto-selected. Change here if needed.","configForm.modelId":"Model ID","configForm.modelIdHint":"Required, e.g. llama3, qwen2.5:7b","configForm.modelName":"Model Name","configForm.modelNamePlaceholder":"Optional, defaults to Model ID","configForm.contextWindow":"Context Window","configForm.collapseAdvanced":"Collapse advanced","configForm.advancedOptions":"Advanced Options","configForm.upstreamBaseUrl":"Upstream Base URL","configForm.baseUrlPlaceholder":"API address","configForm.upstreamApiProtocol":"Upstream API Protocol","configForm.localServiceAddress":"Local service address","configForm.providerGroup.国内厂商":"China Providers","configForm.providerGroup.国际厂商":"International","configForm.providerGroup.推理加速":"Inference Acceleration","configForm.providerGroup.聚合平台":"Aggregation Platforms","configForm.providerGroup.本地部署":"Local Deployment","configForm.providerLabel.minimax":"MiniMax (China)","configForm.providerLabel.minimax-intl":"MiniMax (Intl)","configForm.providerLabel.moonshot-coding":"Kimi (Coding Plan)","configForm.providerLabel.moonshot-intl":"Kimi (Intl)","configForm.providerLabel.zhipu":"ZhipuAI (GLM)","configForm.providerLabel.zhipu-intl":"Z.AI (GLM)","configForm.providerLabel.volcengine":"Volcengine (Doubao)","configForm.providerLabel.qianfan":"Baidu Qianfan (ERNIE)","configForm.providerLabel.dashscope":"Alibaba Bailian","configForm.providerLabel.modelstudio":"Alibaba Bailian (Intl/Coding)","configForm.providerLabel.tencent":"Tencent Hunyuan","configForm.providerLabel.stepfun":"StepFun","configForm.providerLabel.baichuan":"Baichuan","configForm.providerLabel.xiaomi":"MiMo (Xiaomi)","configForm.providerLabel.byteplus":"Volcengine Intl (Doubao)","configForm.providerLabel.spark":"iFlytek Spark","configForm.providerLabel.siliconflow":"SiliconFlow","configForm.providerLabel.infini":"Infini-AI","configForm.providerLabel.ollama":"Ollama (Local)","configForm.providerLabel.vllm":"vLLM (Local)","configForm.providerLabel.sglang":"SGLang (Local)","channel.feishu":"Feishu / Lark","channel.weixin":"WeChat","configForm.channel.feishu":"Feishu / Lark","configForm.channel.openclaw-weixin":"WeChat","configForm.channel.telegram":"Telegram","configForm.channel.discord":"Discord","configForm.channel.slack":"Slack","configForm.channel.whatsapp":"WhatsApp","configForm.channel.msteams":"Microsoft Teams","configForm.channel.signal":"Signal","configForm.channel.line":"LINE","configForm.channel.googlechat":"Google Chat","configForm.apiProtocol":"API Protocol","configForm.proxyNote":"OpenClaw's actual provider is auto-rewritten to `jsproxy/default` on save. These advanced settings only affect the real upstream connection behind the built-in proxy.","configForm.hint.moonshot-coding":"Uses Anthropic-compatible API for Kimi K2 series models, optimized for Coding/Agent scenarios. Recommended: kimi-k2-thinking-turbo (fast thinking) or kimi-k2.5 (all-round multimodal).","configForm.hint.volcengine":"Volcengine requires creating an inference endpoint in the console first. Enter the endpoint ID in the Model ID field below.","configForm.hint.byteplus":"BytePlus requires creating an Endpoint in the console first. Enter the Endpoint ID in the Model ID field below.","configForm.hint.openrouter":"OpenRouter aggregates multiple models. Auto routes to the best model. Get API Key from openrouter.ai/keys.","configForm.hint.ollama":"Make sure Ollama is running and enter the actual model name below.","configForm.hint.vllm":"Make sure vLLM is running and enter the actual model name below.","configForm.hint.sglang":"Make sure SGLang is running and enter the actual model name below.","configForm.sessionIsolation":"Session Isolation","configForm.sessionIsolationHint":"Controls whether different users and channels share conversation context","configForm.sessionMain":"Shared conversation for all","configForm.sessionPerPeer":"Separate conversation per user","configForm.sessionPerChannelPeer":"Separate per user per channel","configForm.sessionPerAccountChannelPeer":"Separate per user per account per channel","configForm.pluginInstalling":"{{label}} plugin installing...","configForm.installPlugin":"Install {{label}} plugin","configForm.installPluginHint":"Install plugin to configure {{label}} channel","configForm.remove":"Remove","configForm.addImChannel":"Add IM Channel","configForm.whatsappTitle":"WhatsApp pairs via QR code","configForm.whatsappHint":"After enabling and starting the instance, check the Logs tab for the QR code. Scan with your phone's WhatsApp. Credentials are auto-saved after first pairing.","configForm.feishu.platform":"Platform: {{platform}}. Credentials saved. Restart instance to apply.","configForm.feishu.platformLark":"Lark (International)","configForm.feishu.platformFeishu":"Feishu","configForm.feishu.added":"Added","configForm.feishu.addBot":"Add Feishu / Lark Bot","configForm.feishu.addBotHint":"Scan with Feishu or Lark app to auto-create and configure a bot. Platform is auto-detected.","configForm.feishu.gettingQr":"Getting QR code...","configForm.feishu.scanHint":"Scan with Feishu or Lark","configForm.feishu.cancel":"Cancel","configForm.feishu.refresh":"Refresh","configForm.weixin.accountId":"Account ID:","configForm.weixin.restartHint":"Save and restart instance to apply. Scan again to add more accounts.","configForm.weixin.addAnother":"Add another WeChat account","configForm.weixin.added":"Added","configForm.weixin.addClawBot":"Add WeChat ClawBot","configForm.weixin.addClawBotHint":"Click to show QR code, scan with WeChat. {{extra}}","configForm.weixin.addClawBotHintRestart":"Save and restart to apply.","configForm.weixin.addClawBotHintMulti":"Supports multiple accounts.","configForm.weixin.gettingQr":"Getting QR code...","configForm.weixin.scanHint":"Scan with WeChat","configForm.weixin.cancel":"Cancel","configForm.weixin.refresh":"Refresh","config.clickToEdit":"Click to enter new value","backup.manageMenu":"Backup Manager","backup.autoBackup":"Auto Backup","backup.autoEnabled":"Auto backup enabled","backup.autoDisabled":"Auto backup disabled","backup.notConfigured":"Auto backup not enabled","backup.enableNow":"Enable Now","backup.enabling":"Enabling...","backup.interval":"Every {{h}}h","backup.keep":"Keep {{n}}","backup.failed":"Failed","backup.manageTitle":"Backup Manager","backup.noBackups":"No backups yet","backup.typeAuto":"Auto","backup.typeManual":"Manual","backup.typePreRestore":"Pre-restore","backup.restore":"Restore","backup.createNew":"Create new application","backup.download":"Download","backup.delete":"Delete","backup.createNew2":"New Backup","backup.create":"Backup","backup.createTitle":"Create Backup","backup.createDesc":"Back up the instance config, plugins and data.","backup.includeSessions":"Include conversation history (larger size)","backup.creating":"Backing up...","backup.created":"Backup Complete","backup.deleted":"Deleted","backup.processing":"Processing...","backup.queueNote":"Tasks run in sequence","backup.restoreTitle":"Restore will overwrite current data","backup.restoreDesc":"A pre-restore backup has been created automatically. You can roll back if needed.","backup.restoreConfirmLabel":"Type instance name to confirm:","backup.confirmRestore":"Confirm Restore","backup.restoring":"Restoring...","backup.restoreSuccess":"Restore Complete","backup.restoreOk":"Instance restored.","backup.restoreFailed":"Restore Failed","backup.restoreFailedRolledBack":"Restore Failed — Auto Rolled Back","backup.apiKeyLost":"Backup was built on a different platform/arch; verify the API Key configuration still matches this host.","backup.configApiKey":"Configure API Key","backup.createFromTitle":"Create Application from Backup","backup.newName":"New Application Name","backup.newNamePlaceholder":"My Agent Copy","backup.newId":"New Application ID","backup.newIdPlaceholder":"my-agent-copy","backup.createFromNote":"API Key and IM credentials will not be copied.","backup.createInstance":"Create","backup.createFromBackupOk":"New application created","backup.createFromBackupFail":"Failed to create application","backup.export":"Export (Share)","backup.exportTitle":"Export (Share)","backup.exportDesc":"Generate a shareable package. API keys and credentials will be removed.","backup.exportConfig":"Config (openclaw.json, scrubbed)","backup.exportPlugins":"Plugins (extensions)","backup.exportWorkspace":"Workspace / Skills","backup.exportNoKeys":"API Key / Credentials — Removed","backup.exportIncludeSessions":"Include conversation history","backup.exportBtn":"Export","backup.exporting":"Exporting...","backup.exportDone":"Export Complete","backup.downloadExport":"Download","backup.scopeFull":"Full backup (with runtime)","backup.scopeState":"Data only (smaller, portable)","backup.scopeFullDesc":"Includes upgraded OpenClaw runtime — restore preserves the exact version you have now","backup.scopeStateDesc":"Only .openclaw/ data — smaller, compatible with official OpenClaw format","clone.preview":"Will copy the following:","clone.config":"Agent Config (openclaw.json)","clone.plugins":"Plugins (extensions)","clone.workspace":"Workspace / Skills / Persona Files","clone.apikey":"API Key Config","clone.memory":"Agent Memory","clone.sessions":"Conversation History","clone.channelNote":"IM channel credentials will not be copied (same channel cannot bind multiple instances)","import.title":"Import OpenClaw Instance from File","import.uploadDesc":"Upload a .tar.gz file (JishuShell export, backup, or OpenClaw official backup)","import.upload":"Upload & Preview","import.uploading":"Uploading...","import.name":"Name","import.type":"Type","import.size":"Size","import.platform":"Platform","import.noSessions":"No conversation history","import.create":"Create Application","import.creating":"Creating application...","import.success":"Import Successful"},ln="Configure Environment",cn="Version too old",dn="Required",un="Resuming task: {{label}}...",pn="Task failed",mn="{{label}} completed",gn="Failed to get {{label}} task status",hn="{{label}} timed out (over 10 minutes), please check backend logs",fn="Installing {{label}}...",kn="{{label}} started",bn="{{label}} installation failed: {{error}}",wn="Installation failed",vn="Docker image build",xn="Docker installation",yn="OpenClaw installation",Sn="Configuring Nomad systemd service...",Fn="Nomad service started",Cn="Nomad started",In="Nomad start failed: {{error}}",Pn="Waiting for Nomad to be ready...",An="Nomad is ready",jn="Config write failed",Nn="Save failed",Ln="{{label}} failed: {{message}}",Tn={title:ln,"steps.check":"Check","steps.modelConfig":"Model Config","steps.done":"Done",versionTooOld:cn,required:dn,resumeTask:un,taskFailed:pn,taskCompleted:mn,taskStatusFailed:gn,taskTimeout:hn,installing:fn,taskStarted:kn,installFailed:bn,defaultInstallFailed:wn,dockerImageBuild:vn,dockerInstall:xn,openclawInstall:yn,configuringNomadSystemd:Sn,nomadServiceStarted:Fn,nomadStarted:Cn,nomadStartFailed:In,waitingNomad:Pn,nomadReady:An,configWriteFailed:jn,saveFailed:Nn,"check.title":"Environment Check","check.desc":"Check installed system components","check.requiredComponents":"Required Components","check.upgrading":"Upgrading...","check.upgrade":"Upgrade","node.title":"Upgrade Node.js","node.desc":"OpenClaw requires Node.js 22+, current version is too old","node.ready":"Node.js is ready ({{version}})","node.currentVersion":"Current version {{version}}, needs upgrade to 22+","node.noSudo":"Current version {{version}}, needs upgrade to 22+, but current user lacks sudo privileges","node.upgrading":"Upgrading...","node.upgradeBtn":"Upgrade Node.js","node.sudoRequired":"Requires sudo privileges, installs via NodeSource","node.contactAdmin":"Please ask an administrator to run the following command:","node.refreshAfterInstall":"Click to refresh after installation","docker.title":"Install Docker","docker.desc":"Container runtime for running OpenClaw instances in isolation","docker.running":"Docker is running ({{version}})","docker.notRunning":"Docker is installed but the service is not running, please start the Docker service","docker.refreshAfterStart":"Click to refresh after starting","docker.installing":"Installing, please wait...","docker.installBtn":"Install Docker","docker.sudoRequired":"Requires sudo privileges, may take a few minutes","docker.noSudo":"Current user lacks sudo privileges, cannot install automatically","docker.contactAdmin":"Please ask an administrator to run the following command:","docker.refreshAfterInstall":"Click to refresh after installation","nomad.title":"Install Nomad","nomad.desc":"Orchestration engine for managing OpenClaw container lifecycle","nomad.running":"Nomad is running ({{version}})","nomad.starting":"Nomad is installed, starting...","nomad.installing":"Installing...","nomad.installBtn":"Install Nomad","openclaw.title":"Install OpenClaw","openclaw.desc":"AI agent runtime, the core component of JishuShell","openclaw.installed":"OpenClaw is installed ({{version}})","openclaw.buildingImage":"Building Docker image, first build may take a few minutes...","openclaw.buildImageBtn":"Build Docker Image","openclaw.installing":"Installing, please wait...","openclaw.installBtn":"Install OpenClaw","openclaw.npmHint":"Installs via npm, requires network connection","done.finalizing":"Finalizing configuration...","done.finalizingDesc":"Writing system configuration, please wait","done.complete":"Environment setup complete","done.completeDesc":"Base environment is ready","provider.title":"Configure Default Model","provider.desc":"New applications will use this configuration by default and can be changed in application details anytime","provider.label":"Model Provider","provider.placeholder":"Select a provider","provider.apiKey":"API Key","provider.apiKeyPlaceholder":"Enter API Key","provider.baseUrl":"Base URL","provider.fetchModels":"Fetch Models","provider.fetchingModels":"Fetching…","provider.liveModels":"live models","provider.fetchModelsFailed":"Failed to fetch model list","provider.defaultModel":"Default Model","provider.skip":"Skip","provider.saving":"Saving...","provider.save":"Save","provider.saved":"Model configuration saved","provider.saveFailed":"Save failed","provider.apiKeyConfigured":"•••••••• (Configured)","provider.fetchFailed":"Failed to fetch models, please check the address","provider.noModelsFound":"No models found","provider.modelName":"Model Name","provider.modelNamePlaceholder":"Enter model name, e.g. qwen2.5:7b","provider.modelNameHint":'Click "Fetch Models" to auto-detect, or enter manually',"provider.saveAndContinue":"Save & Continue","nav.next":"Next","nav.retry":"Retry","nav.enterPanel":"Enter Panel",taskErrorPrefix:Ln},Dn={"im.feishu.desc":"Feishu bot (WebSocket mode)","im.openclaw-weixin.desc":"WeChat QR code login","skills.group.hubs":"Popular Hubs","skills.group.general":"General","skills.group.productivity":"Productivity","skills.group.life":"Life Assistant","skills.group.dev":"Dev Tools","skills.clawhub.desc":"Official OpenClaw Skill marketplace","skills.skillhub-tencent.label":"Tencent SkillHub","skills.skillhub-tencent.desc":"Tencent's official skill center","skills.skills-sh.desc":"Community skill aggregator","skills.skill-vetter.desc":"Security audit skill — review before installing","skills.self-improving-agent.desc":"Self-improving agent for continuous task optimization","skills.proactive-agent.desc":"Proactive agent that anticipates and completes tasks","skills.multi-search-engine.desc":"Multi search engine aggregation","skills.exa-web-search-free.desc":"Free Exa semantic web search","skills.lobehub-skills.label":"LobeHub Skills","skills.lobehub-skills.desc":"LobeHub community Skill marketplace","skills.findskills.label":"FindSkills.org","skills.findskills.desc":"Open-source skill search and aggregation platform","skills.playbooks-skills.label":"Playbooks Skills","skills.playbooks-skills.desc":"Playbooks community Skill directory","skills.pdf-reader.label":"PDF Reader","skills.pdf-reader.desc":"PDF document reading and analysis","skills.powerpoint-pptx.label":"PowerPoint / PPTX","skills.powerpoint-pptx.desc":"PowerPoint presentation generation and editing","skills.word-docx.label":"Word / DOCX","skills.word-docx.desc":"Word document generation and editing","skills.excel-xlsx.label":"Excel / XLSX","skills.excel-xlsx.desc":"Excel spreadsheet generation and data processing","skills.todo-manager.label":"Todo Manager","skills.todo-manager.desc":"Task and todo list management","skills.12306.label":"12306 Train Tickets","skills.12306.desc":"Search and book 12306 train tickets","skills.youtube-watcher.label":"YouTube Watcher","skills.youtube-watcher.desc":"YouTube video summaries and content analysis","skills.cli-developer.label":"CLI Developer","skills.cli-developer.desc":"Command-line tool development assistant","skills.home-assistant.label":"Home Assistant","skills.home-assistant.desc":"Home Assistant smart home integration","mcp.12306-mcp.label":"12306 Train Ticket MCP","mcp.12306-mcp.desc":"12306 train ticket search tool","slash.group.会话":"Sessions","slash.group.模型":"Models","slash.group.工具":"Tools","slash.slash-new.desc":"Start new session","slash.slash-reset.desc":"Reset current session","slash.slash-compact.desc":"Compress session context","slash.slash-stop.desc":"Stop current execution","slash.slash-clear.desc":"Clear chat history","slash.slash-focus.desc":"Toggle focus mode","slash.slash-model.desc":"View or switch model","slash.slash-think.desc":"Set thinking depth","slash.slash-verbose.desc":"Toggle verbose output","slash.slash-fast.desc":"Toggle fast mode","slash.slash-help.desc":"Show available commands","slash.slash-status.desc":"Show session status (agent)","slash.slash-export.desc":"Export session as Markdown","slash.slash-usage.desc":"Show token usage"},On=localStorage.getItem("jishushell-lang")||(navigator.language.startsWith("zh")?"zh":"en");Le.use(Te).init({resources:{zh:{common:Ue,dashboard:We,auth:Ve,settings:_e,newInstance:Ze,instance:ct,setup:Ot,data:Rt},en:{common:Mt,dashboard:Ut,auth:Bt,settings:Vt,newInstance:Yt,instance:rn,setup:Tn,data:Dn}},lng:On,fallbackLng:"zh",defaultNS:"common",interpolation:{escapeValue:!1}});const Rn="modulepreload",Mn=function(e){return"/"+e},ne={},L=function(n,a,r){let c=Promise.resolve();if(a&&a.length>0){document.getElementsByTagName("link");const s=document.querySelector("meta[property=csp-nonce]"),l=(s==null?void 0:s.nonce)||(s==null?void 0:s.getAttribute("nonce"));c=Promise.allSettled(a.map(u=>{if(u=Mn(u),u in ne)return;ne[u]=!0;const v=u.endsWith(".css"),m=v?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${u}"]${m}`))return;const g=document.createElement("link");if(g.rel=v?"stylesheet":Rn,v||(g.as="script"),g.crossOrigin="",g.href=u,l&&g.setAttribute("nonce",l),document.head.appendChild(g),v)return new Promise((k,S)=>{g.addEventListener("load",k),g.addEventListener("error",()=>S(new Error(`Unable to preload CSS for ${u}`)))})}))}function i(s){const l=new Event("vite:preloadError",{cancelable:!0});if(l.payload=s,window.dispatchEvent(l),!l.defaultPrevented)throw s}return c.then(s=>{for(const l of s||[])l.status==="rejected"&&i(l.reason);return n().catch(i)})},U="/api";let T=null;function Y(){return T}function En(e){T=e}function ue(){T=null,fetch(`${U}/auth/logout`,{method:"POST",credentials:"same-origin"}).catch(()=>{})}async function o(e,n={}){const a=Y(),r={...n.headers||{}};n.body&&(r["Content-Type"]="application/json"),a&&(r.Authorization=`Bearer ${a}`);const c=new AbortController,i=setTimeout(()=>c.abort(),6e4);let s;try{s=await fetch(`${U}${e}`,{...n,headers:r,credentials:"same-origin",signal:c.signal})}catch(l){throw clearTimeout(i),l.name==="AbortError"?new Error("Request timeout"):l}if(clearTimeout(i),s.status===401)throw T=null,window.location.pathname!=="/login"&&(window.dispatchEvent(new CustomEvent("jishushell:auth-expired")),window.location.replace("/login")),new Error("Unauthorized");if(!s.ok){const l=await s.json().catch(()=>({}));throw new Error(l.message||l.error||l.detail||`HTTP ${s.status}`)}return s.status===204||s.headers.get("content-length")==="0"?null:s.json()}async function pe(){try{const e={};return T&&(e.Authorization=`Bearer ${T}`),(await fetch(`${U}/instances`,{headers:e,credentials:"same-origin"})).ok}catch{return!1}}const me=()=>o("/auth/status"),qn=e=>o("/auth/init",{method:"POST",body:JSON.stringify({password:e})}),Un=e=>o("/auth/login",{method:"POST",body:JSON.stringify({password:e})}),Bn=(e,n)=>o("/auth/change-password",{method:"POST",body:JSON.stringify({old_password:e,new_password:n})}),$n=()=>o("/runtime/catalog"),Wn=()=>o("/apps/builtin-specs"),Vn=()=>o("/apps"),Hn=e=>o("/apps/install-task",{method:"POST",body:JSON.stringify(e)}),Kn=e=>o("/apps/validate-sudo-password",{method:"POST",body:JSON.stringify(e)}),_n=(e,n)=>o(`/apps/${e}/uninstall-task`,{method:"POST",body:JSON.stringify(n||{})}),Jn=(e,n,a)=>o(`/instances/${e}/provides/${encodeURIComponent(n)}/terminal/session`,{method:"POST",body:JSON.stringify(a)}),zn=(e,n,a,r)=>o(`/instances/${e}/provides/${encodeURIComponent(n)}/terminal/session/${encodeURIComponent(a)}/input`,{method:"POST",body:JSON.stringify(r)}),Gn=(e,n,a)=>o(`/instances/${e}/provides/${encodeURIComponent(n)}/terminal/session/${encodeURIComponent(a)}/stop`,{method:"POST",body:"{}"}),ge=()=>o("/instances"),Yn=e=>o(`/instances/${e}`),Qn=e=>o(`/instances/${e}/gateway-launch`);async function Xn(e,n){var S;const r=Y(),c={"Content-Type":"application/json",Accept:"text/event-stream"};r&&(c.Authorization=`Bearer ${r}`);const i=new AbortController;let s=setTimeout(()=>i.abort(),3e4);const l=()=>{clearTimeout(s),s=setTimeout(()=>i.abort(),3e4)};let u;try{u=await fetch(`${U}/instances/${e}/agent/chat`,{method:"POST",headers:c,body:JSON.stringify(n),credentials:"same-origin",signal:i.signal})}catch(w){throw clearTimeout(s),w.name==="AbortError"?new Error("Request timeout"):w}if(u.status===401)throw clearTimeout(s),window.dispatchEvent(new CustomEvent("jishushell:auth-expired")),new Error("Unauthorized");if(!(u.headers.get("content-type")||"").includes("text/event-stream")||!u.body){clearTimeout(s);const w=await u.json().catch(()=>({}));throw new Error(w.message||w.error||w.detail||`HTTP ${u.status}`)}const m=u.body.getReader(),g=new TextDecoder("utf-8");let k="";try{for(;;){const{done:w,value:f}=await m.read();if(w)break;l(),k+=g.decode(f,{stream:!0});let F;for(;(F=k.indexOf(`
|
|
17
|
+
|
|
18
|
+
`))!==-1;){const j=k.slice(0,F);k=k.slice(F+2);let p="",x="";for(const y of j.split(`
|
|
19
|
+
`))y.startsWith("event:")?p=y.slice(6).trim():y.startsWith("data:")&&(x+=y.slice(5).trim());if(p==="result"){const y=JSON.parse(x);clearTimeout(s);const h=Number(y.status)||200,I=String(y.body??"");let C;try{C=JSON.parse(I)}catch{C={text:I}}if(h>=400){const W=((S=C==null?void 0:C.error)==null?void 0:S.message)||(C==null?void 0:C.detail)||(C==null?void 0:C.message)||`HTTP ${h}`;throw new Error(W)}return C}if(p==="error"){const y=(()=>{try{return JSON.parse(x)}catch{return{detail:x}}})();throw clearTimeout(s),new Error(y.detail||y.error||"Agent error")}}}throw new Error("Agent chat stream ended without a result event")}finally{clearTimeout(s)}}const Zn=e=>o("/instances",{method:"POST",body:JSON.stringify(e)}),ea=(e,n)=>o(`/instances/${e}`,{method:"PUT",body:JSON.stringify(n)}),ta=(e,n=!1,a)=>o(`/instances/${e}${n?"?purge_backups=true":""}`,{method:"DELETE",...a&&Object.keys(a).length>0?{body:JSON.stringify(a)}:{}}),na=e=>o(`/instances/${e}/config`),aa=e=>o(`/instances/${e}/config-meta`),oa=(e,n)=>o(`/instances/${e}/config`,{method:"PUT",body:JSON.stringify(n)}),ia=e=>o(`/instances/${e}/plugins/status`),sa=(e,n)=>o(`/instances/${e}/plugins/install`,{method:"POST",body:JSON.stringify({channelId:n})}),ra=(e,n)=>o(`/instances/${e}/feishu/login`,{method:"POST",body:JSON.stringify({channelKey:n||"feishu"})}),la=(e,n)=>o(`/instances/${e}/feishu/login/${n}`),ca=e=>o(`/instances/${e}/weixin/accounts`),da=e=>o(`/instances/${e}/weixin/login`,{method:"POST"}),ua=(e,n)=>o(`/instances/${e}/weixin/login/${n}`),pa=e=>o(`/instances/${e}/service/start`,{method:"POST"}),ma=e=>o(`/instances/${e}/service/stop`,{method:"POST"}),ga=e=>o(`/instances/${e}/service/restart`,{method:"POST"}),ha=e=>o(`/instances/${e}/quick-status`),fa=e=>o(`/instances/${e}/mcporter/list`),ka=(e,n)=>o(`/instances/${e}/mcporter/add`,{method:"POST",body:JSON.stringify({servers:n})}),ba=(e,n)=>o(`/instances/${e}/mcporter/${encodeURIComponent(n)}`,{method:"DELETE"}),wa=(e,n)=>o(`/instances/${e}/skills/${encodeURIComponent(n)}`,{method:"DELETE"}),va=(e,n=200,a="stderr")=>o(`/instances/${e}/logs?lines=${n}&log_type=${a}`),xa=e=>o(`/instances/${e}/usage`),he=()=>o("/system/status"),ya=()=>o("/system/restart-nomad",{method:"POST"}),fe=()=>o("/system/update-check"),K=()=>o("/system/update-status"),ke=()=>o("/system/update",{method:"POST"}),be=()=>{const e={},n=Y();return n&&(e.Authorization=`Bearer ${n}`),fetch(`${U}/setup/status`,{headers:e,credentials:"same-origin"}).then(a=>a.json())},Sa=e=>o(`/setup/install/${e}`,{method:"POST"}),Fa=e=>o(`/setup/install/runtime/${e}`,{method:"POST",body:"{}"}),Ca=e=>o(`/setup/start/${e}`,{method:"POST"}),Ia=()=>o("/setup/upgrade/node",{method:"POST"}),Pa=e=>o("/setup/install/all",{method:"POST",body:JSON.stringify(e||{})}),Aa=()=>o("/setup/default-provider"),ja=e=>o("/setup/default-provider",{method:"POST",body:JSON.stringify(e)}),Na=e=>o(`/setup/tasks/${e}`),La=()=>o("/llm/providers"),Ta=e=>o("/llm/providers",{method:"POST",body:JSON.stringify(e)}),Da=(e,n)=>o(`/llm/providers/${encodeURIComponent(e)}`,{method:"PUT",body:JSON.stringify(n)}),Oa=e=>o(`/llm/providers/${encodeURIComponent(e)}`,{method:"DELETE"}),Ra=e=>o(`/llm/providers/${encodeURIComponent(e)}/default`,{method:"POST"}),Ma=e=>o(`/llm/providers/${encodeURIComponent(e)}/models`),Ea=(e,n,a)=>o("/llm/probe-models",{method:"POST",body:JSON.stringify({baseUrl:e,apiKey:n,authHeader:a})}),qa=e=>o(`/instances/${e}/backups`),Ua=(e,n)=>o(`/instances/${e}/backup`,{method:"POST",body:JSON.stringify(n||{})}),Ba=(e,n)=>`/api/instances/${e}/backup/download/${encodeURIComponent(n)}`,$a=(e,n)=>o(`/instances/${e}/backups/${encodeURIComponent(n)}`,{method:"DELETE"}),Wa=(e,n)=>o(`/instances/${e}/restore/${encodeURIComponent(n)}`,{method:"POST"}),Va=e=>o("/instances/create-from-backup",{method:"POST",body:JSON.stringify(e)}),Ha=()=>o("/backups/orphaned"),Ka=(e,n)=>o(`/instances/${e}/export`,{method:"POST",body:JSON.stringify(n||{})}),_a=(e,n)=>`/api/instances/${e}/export/download/${encodeURIComponent(n)}`,Ja=async e=>{const n=new FormData;n.append("file",e);const a=await fetch("/api/instances/import/upload",{method:"POST",body:n});if(!a.ok){const r=await a.json().catch(()=>({detail:a.statusText}));throw new Error(r.detail||"Upload failed")}return a.json()},za=e=>o("/instances/import/preview",{method:"POST",body:JSON.stringify({temp_id:e})}),Ga=e=>o("/instances/import",{method:"POST",body:JSON.stringify(e)}),Ya=e=>o(`/instances/${e}/auto-backup`),Qa=(e,n)=>o(`/instances/${e}/auto-backup`,{method:"PUT",body:JSON.stringify(n)}),Xa=e=>o(`/backup/jobs/${e}`),Eo=Object.freeze(Object.defineProperty({__proto__:null,addLlmProvider:Ta,addMcporterServers:ka,agentChat:Xn,authChangePassword:Bn,authInit:qn,authLogin:Un,authStatus:me,checkSession:pe,checkUpdate:fe,clearToken:ue,confirmImport:Ga,createBackup:Ua,createExport:Ka,createFromBackup:Va,createInstance:Zn,deleteBackup:$a,deleteInstance:ta,deleteLlmProvider:Oa,deleteMcporterServer:ba,deleteSkill:wa,downloadBackupUrl:Ba,downloadExportUrl:_a,getAutoBackupConfig:Ya,getBackupJob:Xa,getConfig:na,getConfigMeta:aa,getDefaultProvider:Aa,getGatewayLaunch:Qn,getInstance:Yn,getLlmModels:Ma,getLogs:va,getMcporterList:fa,getPluginStatuses:ia,getQuickStatus:ha,getRuntimeCatalog:$n,getSetupStatus:be,getSetupTask:Na,getSystemStatus:he,getUpdateStatus:K,getUsage:xa,getWeixinAccounts:ca,installDep:Sa,installPlugin:sa,installRuntimeByType:Fa,listBackups:qa,listBuiltinAppSpecs:Wn,listInstalledApps:Vn,listInstances:ge,listLlmProviders:La,listOrphanedBackups:Ha,pollFeishuLogin:la,pollWeixinLogin:ua,previewImport:za,probeModels:Ea,restartNomad:ya,restartService:ga,restoreFromBackup:Wa,runFullSetup:Pa,runUpdate:ke,saveConfig:oa,saveDefaultProvider:ja,sendInstanceTerminalInput:zn,setDefaultLlmProvider:Ra,setToken:En,startAppInstallTask:Hn,startDep:Ca,startFeishuLogin:ra,startInstanceTerminalSession:Jn,startService:pa,startWeixinLogin:da,stopInstanceTerminalSession:Gn,stopService:ma,uninstallInstalledAppTask:_n,updateAutoBackupConfig:Qa,updateInstance:ea,updateLlmProvider:Da,upgradeNode:Ia,uploadForImport:Ja,validateAppSudoPassword:Kn},Symbol.toStringTag,{value:"Module"}));function qo({className:e="w-4 h-4"}){return t.jsx("svg",{className:e,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round",children:t.jsx("path",{d:"M6 9l6 6 6-6"})})}function Uo({className:e="w-4 h-4"}){return t.jsx("svg",{className:e,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round",children:t.jsx("path",{d:"M9 18l6-6-6-6"})})}function Za({className:e="w-4 h-4"}){return t.jsxs("svg",{className:e,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round",children:[t.jsx("line",{x1:"12",y1:"5",x2:"12",y2:"19"}),t.jsx("line",{x1:"5",y1:"12",x2:"19",y2:"12"})]})}function eo({className:e="w-4 h-4"}){return t.jsxs("svg",{className:e,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:1.5,strokeLinecap:"round",strokeLinejoin:"round",children:[t.jsx("path",{d:"M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"}),t.jsx("circle",{cx:"12",cy:"12",r:"3"})]})}function to({className:e="w-4 h-4"}){return t.jsxs("svg",{className:e,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:1.5,strokeLinecap:"round",strokeLinejoin:"round",children:[t.jsx("path",{d:"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4"}),t.jsx("polyline",{points:"16 17 21 12 16 7"}),t.jsx("line",{x1:"21",y1:"12",x2:"9",y2:"12"})]})}function no({className:e="w-5 h-5"}){return t.jsxs("svg",{className:e,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:1.5,strokeLinecap:"round",strokeLinejoin:"round",children:[t.jsx("line",{x1:"4",y1:"6",x2:"20",y2:"6"}),t.jsx("line",{x1:"4",y1:"12",x2:"20",y2:"12"}),t.jsx("line",{x1:"4",y1:"18",x2:"20",y2:"18"})]})}function ao({className:e="w-5 h-5"}){return t.jsxs("svg",{className:e,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:1.5,strokeLinecap:"round",strokeLinejoin:"round",children:[t.jsx("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),t.jsx("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})}function Bo({className:e="w-4 h-4"}){return t.jsx("svg",{className:e,viewBox:"0 0 24 24",fill:"currentColor",children:t.jsx("polygon",{points:"5 3 19 12 5 21 5 3"})})}function $o({className:e="w-4 h-4"}){return t.jsx("svg",{className:e,viewBox:"0 0 24 24",fill:"currentColor",children:t.jsx("rect",{x:"4",y:"4",width:"16",height:"16",rx:"2"})})}function Wo({className:e="w-4 h-4"}){return t.jsxs("svg",{className:e,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:1.5,strokeLinecap:"round",strokeLinejoin:"round",children:[t.jsx("polyline",{points:"23 4 23 10 17 10"}),t.jsx("path",{d:"M20.49 15a9 9 0 1 1-2.12-9.36L23 10"})]})}function Vo({className:e="w-4 h-4"}){return t.jsxs("svg",{className:e,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:1.5,strokeLinecap:"round",strokeLinejoin:"round",children:[t.jsx("rect",{x:"9",y:"9",width:"13",height:"13",rx:"2",ry:"2"}),t.jsx("path",{d:"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"})]})}function Ho({className:e="w-4 h-4"}){return t.jsxs("svg",{className:e,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:1.5,strokeLinecap:"round",strokeLinejoin:"round",children:[t.jsx("circle",{cx:"11",cy:"11",r:"8"}),t.jsx("line",{x1:"21",y1:"21",x2:"16.65",y2:"16.65"})]})}function Ko({className:e="w-4 h-4"}){return t.jsxs("svg",{className:e,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:1.5,strokeLinecap:"round",strokeLinejoin:"round",children:[t.jsx("path",{d:"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z"}),t.jsx("circle",{cx:"12",cy:"12",r:"3"})]})}function _o({className:e="w-4 h-4"}){return t.jsxs("svg",{className:e,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:1.5,strokeLinecap:"round",strokeLinejoin:"round",children:[t.jsx("path",{d:"M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24"}),t.jsx("line",{x1:"1",y1:"1",x2:"23",y2:"23"})]})}function Jo({className:e="w-4 h-4"}){return t.jsxs("svg",{className:e,viewBox:"0 0 24 24",fill:"currentColor",children:[t.jsx("circle",{cx:"12",cy:"5",r:"1.5"}),t.jsx("circle",{cx:"12",cy:"12",r:"1.5"}),t.jsx("circle",{cx:"12",cy:"19",r:"1.5"})]})}function zo({className:e="w-4 h-4"}){return t.jsxs("svg",{className:e,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:1.5,strokeLinecap:"round",strokeLinejoin:"round",children:[t.jsx("path",{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"}),t.jsx("polyline",{points:"15 3 21 3 21 9"}),t.jsx("line",{x1:"10",y1:"14",x2:"21",y2:"3"})]})}function oo({className:e="w-4 h-4"}){return t.jsxs("svg",{className:e,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:1.5,strokeLinecap:"round",strokeLinejoin:"round",children:[t.jsx("path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"}),t.jsx("polyline",{points:"7 10 12 15 17 10"}),t.jsx("line",{x1:"12",y1:"15",x2:"12",y2:"3"})]})}function io({className:e=""}){const{i18n:n,t:a}=q(),r=n.language==="en",c=()=>{const i=r?"zh":"en";n.changeLanguage(i),localStorage.setItem("jishushell-lang",i)};return t.jsxs("button",{onClick:c,title:a("nav.switchLanguage"),className:`inline-flex items-center justify-center gap-1 px-2 py-1 rounded-md text-xs font-medium text-muted hover:bg-[var(--card)] hover:text-foreground border border-[var(--border)] transition-all duration-200 ${e}`,children:[t.jsxs("svg",{className:"w-3 h-3",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:1.5,strokeLinecap:"round",strokeLinejoin:"round",children:[t.jsx("circle",{cx:"12",cy:"12",r:"10"}),t.jsx("path",{d:"M2 12h20"}),t.jsx("path",{d:"M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z"})]}),t.jsx("span",{children:r?"中":"EN"})]})}const so="/assets/logo-black-theme-DywLAtFy.png",ro="/assets/logo-white-theme-DXffFAWw.png";function lo({className:e="",alt:n="JishuShell"}){const[a,r]=d.useState(()=>window.matchMedia("(prefers-color-scheme: dark)").matches);return d.useEffect(()=>{const c=window.matchMedia("(prefers-color-scheme: dark)"),i=s=>r(s.matches);return c.addEventListener("change",i),()=>c.removeEventListener("change",i)},[]),t.jsx("img",{src:a?so:ro,alt:n,className:e})}const ae=3e4,co=15,_="jishushell:self-update:status",J="jishushell:self-update:dismissed-completed-version",z="jishushell:self-update:dismissed-failed-version";function uo(e,n){const a=v=>v.replace(/^v/,"").split(".").map(m=>Number.parseInt(m,10)||0),[r=0,c=0,i=0]=a(e),[s=0,l=0,u=0]=a(n);return r!==s?r-s:c!==l?c-l:i-u}function po(e,n){return uo(e,n)>=0}function G(e){return e.installedVersion||e.targetVersion||e.currentVersion}function oe(){try{const e=window.sessionStorage.getItem(_);return e?JSON.parse(e):null}catch{return null}}function V(e){try{if(!e||e.status==="failed"){window.sessionStorage.removeItem(_);return}window.sessionStorage.setItem(_,JSON.stringify(e))}catch{}}function mo(){try{return window.sessionStorage.getItem(z)}catch{return null}}function go(e){try{if(!e){window.sessionStorage.removeItem(z);return}window.sessionStorage.setItem(z,e)}catch{}}function ho(e){return!e||e.status!=="failed"?!1:mo()===(e.targetVersion||e.currentVersion)}function fo(){try{return window.sessionStorage.getItem(J)}catch{return null}}function ie(e){try{if(!e){window.sessionStorage.removeItem(J);return}window.sessionStorage.setItem(J,e)}catch{}}function B(e){return!e||e.status!=="completed"?!1:fo()===G(e)}function se(e){const{status:n,...a}=e;return n==="idle"?null:{status:n,...a}}function ko(e,n){const{t:a}=q(e),[r,c]=d.useState(null),[i,s]=d.useState(()=>{const p=oe();return B(p)?null:p}),l=d.useRef(null),u=d.useRef(0),v=(i==null?void 0:i.status)==="running"||(i==null?void 0:i.status)==="restarting",m=d.useCallback(p=>{if(B(p)||ho(p)){s(null),V(null);return}s(p),V(p)},[]),g=d.useCallback(()=>{l.current!==null&&(window.clearTimeout(l.current),l.current=null)},[]),k=d.useCallback(async()=>{try{const p=await fe();if(p.hasUpdate){c({currentVersion:p.currentVersion,latestVersion:p.latestVersion});return}c(null)}catch{}},[]),S=d.useCallback(()=>{i&&(i.status==="completed"?(ie(G(i)),window.location.reload()):i.status==="failed"&&(go(i.targetVersion||i.currentVersion),V(null),window.location.reload()))},[i]),w=d.useCallback(p=>{g(),m(p)},[m,g]),f=d.useCallback(p=>{g();const x={status:"failed",currentVersion:(i==null?void 0:i.currentVersion)||(r==null?void 0:r.currentVersion)||"unknown",installedVersion:(i==null?void 0:i.installedVersion)||(r==null?void 0:r.currentVersion)||"unknown",targetVersion:(i==null?void 0:i.targetVersion)||(r==null?void 0:r.latestVersion),updatedAt:Date.now(),error:p,inProgress:!1};m(x),n(p||a("update.failed"),"error")},[m,g,n,a,r,i]);d.useEffect(()=>{let p=!1;return(async()=>{const y=oe();let h=y&&!B(y)?y:null;h&&m(h);try{const I=se(await K());if(p)return;h=I&&!B(I)?I:null,m(h)}catch{if(p)return}if(h!=null&&h.inProgress&&h.targetVersion){const I=++u.current;g(),l.current=window.setTimeout(()=>{I===u.current&&F(h.targetVersion)},ae)}await k()})(),()=>{p=!0,u.current+=1,g()}},[m,g,k]);const F=d.useCallback((p,x=co)=>{const y=++u.current;g(),l.current=window.setTimeout(async()=>{if(y===u.current)try{const h=se(await K());if(!h){if(x<=1){f(a("update.failed"));return}F(p,x-1);return}if(m(h),h.status==="running"||h.status==="restarting"||h.inProgress){if(x<=1){f(a("update.failed"));return}F(p,x-1);return}if(h.status==="completed"){const I=G(h);if(I&&po(I,p)){w(h);return}f(h.error||a("update.failed"));return}if(h.status==="failed"){f(h.error||a("update.failed"));return}f(a("update.failed"))}catch{if(x<=1){f(a("update.failed"));return}F(p,x-1)}},ae)},[m,g,f,w,a]),j=d.useCallback(async()=>{if(r){ie(null),m({status:"running",currentVersion:r.currentVersion,installedVersion:r.currentVersion,targetVersion:r.latestVersion,updatedAt:Date.now(),inProgress:!0});try{const p=await ke();if(n(a("update.started"),"success"),p.status==="completed"){w({status:"completed",currentVersion:p.targetVersion,installedVersion:p.targetVersion,targetVersion:p.targetVersion,updatedAt:Date.now(),inProgress:!1});return}F(p.targetVersion||r.latestVersion)}catch(p){const x=p.message||a("update.failed");if(/already in progress/i.test(x)){await k();return}f(x)}}},[m,f,w,k,F,n,a,r]);return{updateInfo:r,updateStatus:i,updateLoading:v,handleUpdate:j,handleRefresh:S,refreshUpdateInfo:k}}function bo(e){return e.installedVersion||e.targetVersion||e.currentVersion}function wo({status:e,className:n}){return e==="completed"?t.jsx("svg",{className:n,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:1.8,children:t.jsx("path",{d:"M5 12.5 9.5 17 19 7.5"})}):e==="failed"?t.jsxs("svg",{className:n,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:1.8,children:[t.jsx("circle",{cx:"12",cy:"12",r:"9"}),t.jsx("path",{d:"M9 9l6 6m0-6-6 6"})]}):e==="restarting"?t.jsxs("svg",{className:n,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:1.8,children:[t.jsx("path",{d:"M12 3a9 9 0 1 1-6.36 2.64"}),t.jsx("path",{d:"M4 4v5h5"})]}):t.jsx("svg",{className:n,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:1.8,children:t.jsx("path",{d:"M12 2v6m0 0 2-2m-2 2-2-2M4.93 10.93A10 10 0 1 0 21 12"})})}function vo({namespace:e,updateInfo:n,updateStatus:a,updateLoading:r,onUpdate:c,onRefresh:i}){const{t:s}=q([e,"common"]);if(!n&&!a)return null;let l="available";a&&(l=a.status);const u=l==="completed"?{container:"bg-emerald-500/10 border-emerald-500/30",text:"text-emerald-200",secondary:"text-emerald-200/80",icon:"text-emerald-400",version:"text-emerald-100",arrow:"text-emerald-400",button:"bg-emerald-500 hover:bg-emerald-400 text-black"}:l==="failed"?{container:"bg-red-500/10 border-red-500/30",text:"text-red-200",secondary:"text-red-200/80",icon:"text-red-400",version:"text-red-100",arrow:"text-red-400",button:"bg-red-500 hover:bg-red-400 text-white"}:l==="restarting"?{container:"bg-sky-500/10 border-sky-500/30",text:"text-sky-200",secondary:"text-sky-200/80",icon:"text-sky-400",version:"text-sky-100",arrow:"text-sky-400",button:"bg-sky-500 hover:bg-sky-400 text-black"}:{container:"bg-amber-500/10 border-amber-500/30",text:"text-amber-300",secondary:"text-amber-300/80",icon:"text-amber-400",version:"text-amber-200",arrow:"text-amber-500",button:"bg-amber-500 hover:bg-amber-400 text-black"},v=(a==null?void 0:a.currentVersion)||(n==null?void 0:n.currentVersion),m=(a==null?void 0:a.targetVersion)||(n==null?void 0:n.latestVersion),g=a?bo(a):null;let k="",S="",w=!1,f=null;return l==="available"?(S=s("update.upgradeNow"),f=c):l==="running"?(k=s("update.started"),S=s("update.upgrading"),w=!0):l==="restarting"?(k=s("update.restarting"),S=s("update.upgrading"),w=!0):(l==="completed"||l==="failed")&&(S=s("common:action.refresh"),f=i),l==="failed"&&(a!=null&&a.error)&&(k=a.error),t.jsxs("div",{className:`mb-4 flex flex-col gap-3 rounded-lg border px-4 py-2.5 sm:flex-row sm:items-center sm:justify-between ${u.container}`,children:[t.jsxs("div",{className:"flex min-w-0 items-start gap-2 text-sm",children:[t.jsx(wo,{status:l,className:`mt-0.5 h-4 w-4 shrink-0 ${u.icon} ${l==="running"?"animate-spin":""}`}),t.jsxs("div",{className:"min-w-0",children:[t.jsxs("div",{className:`flex flex-wrap items-center gap-x-1 gap-y-0.5 ${u.text}`,children:[l==="available"&&t.jsxs(t.Fragment,{children:[t.jsx("span",{children:s("update.found")}),t.jsx("span",{className:`font-mono ${u.version}`,children:n==null?void 0:n.currentVersion}),t.jsx("span",{className:u.arrow,children:"→"}),t.jsx("span",{className:`font-mono ${u.version}`,children:n==null?void 0:n.latestVersion})]}),l==="running"&&t.jsxs(t.Fragment,{children:[t.jsx("span",{children:s("update.upgrading")}),v&&m&&t.jsxs(t.Fragment,{children:[t.jsx("span",{className:`font-mono ${u.version}`,children:v}),t.jsx("span",{className:u.arrow,children:"→"}),t.jsx("span",{className:`font-mono ${u.version}`,children:m})]})]}),l==="restarting"&&t.jsxs(t.Fragment,{children:[t.jsx("span",{children:s("update.restarting")}),m&&t.jsx("span",{className:`font-mono ${u.version}`,children:m})]}),l==="completed"&&t.jsx("span",{children:s("update.completed",{latestVersion:g})}),l==="failed"&&t.jsxs(t.Fragment,{children:[t.jsx("span",{children:s("update.failed")}),v&&m&&t.jsxs(t.Fragment,{children:[t.jsx("span",{className:`font-mono ${u.version}`,children:v}),t.jsx("span",{className:u.arrow,children:"→"}),t.jsx("span",{className:`font-mono ${u.version}`,children:m})]})]})]}),k&&t.jsx("div",{className:`mt-0.5 break-all text-xs ${u.secondary}`,children:k})]})]}),S&&t.jsx("button",{onClick:f||void 0,disabled:w||r,className:`shrink-0 rounded-md px-3 py-1 text-xs font-semibold transition-colors disabled:cursor-not-allowed disabled:opacity-50 ${u.button}`,children:S})]})}const Q=d.createContext({showToast:()=>{},instances:[],system:null,refreshInstances:()=>{}});function Go(){return d.useContext(Q)}function Yo(){return d.useContext(Q)}function xo({toasts:e,onDismiss:n}){return t.jsx("div",{className:"fixed top-4 right-4 z-50 flex flex-col gap-2 pointer-events-none",children:e.map(a=>t.jsxs("div",{className:`pointer-events-auto flex items-center gap-2 px-4 py-2.5 rounded-lg text-sm shadow-xl border backdrop-blur-sm animate-in slide-in-from-right ${a.type==="error"?"bg-red-500/10 border-red-500/20 text-red-400":a.type==="success"?"bg-emerald-500/10 border-emerald-500/20 text-emerald-400":"bg-amber-500/10 border-amber-500/20 text-amber-400"}`,children:[t.jsx("span",{className:"flex-1",children:a.message}),t.jsx("button",{onClick:()=>n(a.id),className:"text-current opacity-50 hover:opacity-100 ml-2",children:"×"})]},a.id))})}function yo(e){return e==="running"?"bg-emerald-500 shadow-[0_0_6px_rgba(16,185,129,0.6)]":e==="pending"?"bg-amber-400 animate-pulse shadow-[0_0_6px_rgba(251,191,36,0.5)]":e==="failed"||e==="dead"?"bg-red-500 shadow-[0_0_6px_rgba(239,68,68,0.6)]":"bg-[var(--muted)] opacity-40"}function So({children:e}){var Z;const{t:n}=q(),[a,r]=d.useState([]),[c,i]=d.useState(null),[s,l]=d.useState(!1),[u,v]=d.useState([]),[m,g]=d.useState([]),[k,S]=d.useState(new Set),w=le(),f=Ie(),F=d.useRef(0),j=d.useCallback(()=>{ge().then(r).catch(()=>{}),he().then(i).catch(()=>{})},[]);d.useEffect(()=>{j();const b=setInterval(j,1e4);return()=>clearInterval(b)},[j]),d.useEffect(()=>{l(!1)},[f.pathname]),d.useEffect(()=>{var A;if(!(a!=null&&a.length))return;const b=[];for(const P of a){const D=P.auto_backup;if((A=D==null?void 0:D.warnings)!=null&&A.length)for(const O of D.warnings)b.push({instanceId:P.id,instanceName:P.name,warning:O})}g(b)},[a]);const p=d.useCallback((b,A="info")=>{const P=++F.current;v(O=>[...O,{id:P,message:b,type:A}]),setTimeout(()=>v(O=>O.filter(ye=>ye.id!==P)),A==="error"?1e4:4e3)},[]),{updateInfo:x,updateStatus:y,updateLoading:h,handleUpdate:I,handleRefresh:C}=ko("dashboard",p),W=b=>{v(A=>A.filter(P=>P.id!==b))},we=()=>{ue(),w("/login")},ve=(Z=f.pathname.match(/^\/instances\/([^/]+)/))==null?void 0:Z[1],X=t.jsxs("div",{className:"flex flex-col h-full",children:[t.jsx("div",{className:"flex items-center gap-2.5 px-4 h-12 border-b border-[var(--border)] shrink-0",children:t.jsx(lo,{className:"w-20 h-20 object-contain"})}),t.jsxs("div",{className:"flex-1 overflow-y-auto sidebar-scroll py-1.5",children:[t.jsx("div",{className:"px-3 mb-1 mt-1",children:t.jsx("span",{className:"text-[10px] font-medium text-muted uppercase tracking-wider opacity-70",children:n("nav.instances")})}),a.map(b=>{var P;const A=b.id===ve;return t.jsxs(R,{to:`/instances/${b.id}`,className:`flex items-center gap-2 mx-2 px-2 py-1.5 rounded-md text-sm transition-all duration-200 ${A?"bg-[var(--card-hover)] text-foreground font-medium border-l-2 border-[var(--primary)] pl-[6px]":"text-muted hover:bg-[var(--card)] hover:text-foreground"}`,children:[t.jsx("span",{className:`w-1.5 h-1.5 rounded-full shrink-0 ${yo((P=b.service)==null?void 0:P.status)}`}),t.jsx("span",{className:"truncate",children:b.name})]},b.id)}),t.jsxs(R,{to:"/instances/new",className:"flex items-center gap-2 mx-2 px-2 py-1.5 rounded-md text-sm text-muted hover:bg-[var(--card)] hover:text-foreground transition-all duration-200 mt-0.5",children:[t.jsx(Za,{className:"w-3.5 h-3.5"}),t.jsx("span",{children:n("nav.newInstance")})]}),t.jsxs(R,{to:"/instances/new?import=true",className:"flex items-center gap-2 mx-2 px-2 py-1.5 rounded-md text-sm text-muted hover:bg-[var(--card)] hover:text-foreground transition-all duration-200",children:[t.jsx(oo,{className:"w-3.5 h-3.5"}),t.jsx("span",{children:n("nav.importInstance")})]})]}),t.jsxs("div",{className:"border-t border-[var(--border)] py-1.5 shrink-0",children:[t.jsx("div",{className:"px-3 mb-1",children:t.jsx("span",{className:"text-[10px] font-medium text-muted uppercase tracking-wider opacity-70",children:n("nav.navigation")})}),t.jsxs(R,{to:"/",className:`flex items-center gap-2 mx-2 px-2 py-1.5 rounded-md text-sm transition-all duration-200 ${f.pathname==="/"?"bg-[var(--card-hover)] text-foreground font-medium border-l-2 border-[var(--primary)] pl-[6px]":"text-muted hover:bg-[var(--card)] hover:text-foreground"}`,children:[t.jsxs("svg",{className:"w-3.5 h-3.5",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:1.5,strokeLinecap:"round",strokeLinejoin:"round",children:[t.jsx("rect",{x:"3",y:"3",width:"7",height:"7"}),t.jsx("rect",{x:"14",y:"3",width:"7",height:"7"}),t.jsx("rect",{x:"3",y:"14",width:"7",height:"7"}),t.jsx("rect",{x:"14",y:"14",width:"7",height:"7"})]}),t.jsx("span",{children:n("nav.overview")})]}),t.jsxs(R,{to:"/settings",className:`flex items-center gap-2 mx-2 px-2 py-1.5 rounded-md text-sm transition-all duration-200 ${f.pathname==="/settings"?"bg-[var(--card-hover)] text-foreground font-medium border-l-2 border-[var(--primary)] pl-[6px]":"text-muted hover:bg-[var(--card)] hover:text-foreground"}`,children:[t.jsx(eo,{className:"w-3.5 h-3.5"}),t.jsx("span",{children:n("nav.settings")})]}),t.jsxs("button",{onClick:we,className:"flex items-center gap-2 mx-2 px-2 py-1.5 rounded-md text-sm text-muted hover:bg-[var(--card)] hover:text-foreground transition-all duration-200 w-full text-left",children:[t.jsx(to,{className:"w-3.5 h-3.5"}),t.jsx("span",{children:n("nav.logout")})]}),t.jsx("div",{className:"mx-2 mt-1",children:t.jsx(io,{className:"w-full"})})]})]}),xe=d.useMemo(()=>({showToast:p,instances:a,system:c,refreshInstances:j}),[p,a,c,j]);return t.jsxs(Q.Provider,{value:xe,children:[t.jsxs("div",{className:"flex h-screen overflow-hidden bg-background",children:[t.jsx("aside",{className:"hidden lg:flex w-52 border-r border-[var(--border)] flex-col shrink-0",style:{background:"var(--sidebar-bg)"},children:X}),s&&t.jsxs("div",{className:"fixed inset-0 z-40 lg:hidden",onClick:()=>l(!1),children:[t.jsx("div",{className:"absolute inset-0 bg-black/60 backdrop-blur-sm"}),t.jsxs("aside",{className:"absolute left-0 top-0 bottom-0 w-60 border-r border-[var(--border)] shadow-2xl",style:{background:"var(--sidebar-bg)"},onClick:b=>b.stopPropagation(),children:[t.jsx("button",{onClick:()=>l(!1),className:"absolute top-3 right-3 p-1 text-muted hover:text-foreground transition-colors",children:t.jsx(ao,{})}),X]})]}),t.jsxs("main",{className:"flex-1 overflow-y-auto bg-background",children:[t.jsxs("div",{className:"lg:hidden flex items-center gap-3 px-4 h-11 border-b border-[var(--border)] bg-background sticky top-0 z-10",children:[t.jsx("button",{onClick:()=>l(!0),className:"text-muted hover:text-foreground transition-colors",children:t.jsx(no,{})}),t.jsx("span",{className:"font-semibold text-sm text-foreground",children:"JishuShell"})]}),m.filter(b=>!k.has(b.instanceId+b.warning)).map((b,A)=>t.jsxs("div",{className:"mx-4 mt-2 bg-amber-500/10 border border-amber-500/20 text-amber-400 text-sm rounded-lg px-4 py-2.5 flex items-center justify-between",children:[t.jsxs("span",{children:[t.jsx("strong",{children:b.instanceName}),": ",b.warning]}),t.jsx("button",{onClick:()=>S(P=>new Set([...P,b.instanceId+b.warning])),className:"text-amber-400/60 hover:text-amber-400 ml-3 text-lg leading-none",children:"×"})]},A)),(x||y)&&t.jsx("div",{className:"max-w-5xl mx-auto px-4 pt-3",children:t.jsx(vo,{namespace:"dashboard",updateInfo:x,updateStatus:y,updateLoading:h,onUpdate:I,onRefresh:C})}),e]})]}),t.jsx(xo,{toasts:u,onDismiss:W})]})}const Fo=d.lazy(()=>L(()=>import("./Login-BWsZH2mu.js"),__vite__mapDeps([0,1,2]))),Co=d.lazy(()=>L(()=>import("./InitPassword-CVA8wQA6.js"),__vite__mapDeps([3,1,2]))),Io=d.lazy(()=>L(()=>import("./Setup-Cfuwj4gV.js"),__vite__mapDeps([4,1,5,6,7,2]))),Po=d.lazy(()=>L(()=>import("./Dashboard-B-JoOjBQ.js"),__vite__mapDeps([8,1,9,2]))),Ao=d.lazy(()=>L(()=>import("./InstanceDetail-DcZW2QGO.js"),__vite__mapDeps([10,1,11,2,9,6,7]))),jo=d.lazy(()=>L(()=>import("./NewInstance-BCIrAd86.js"),__vite__mapDeps([12,1,2,7]))),No=d.lazy(()=>L(()=>import("./Settings-xkDcduFz.js"),__vite__mapDeps([13,1,5,6,2])));class Lo extends d.Component{constructor(){super(...arguments);ee(this,"state",{hasError:!1,error:null})}static getDerivedStateFromError(a){return{hasError:!0,error:a}}componentDidCatch(a,r){console.error("[ErrorBoundary]",a,r.componentStack)}render(){var a;return this.state.hasError?t.jsx("div",{className:"flex items-center justify-center min-h-screen bg-background",children:t.jsxs("div",{className:"text-center space-y-4",children:[t.jsx("div",{className:"text-red-400 text-lg font-medium",children:"UI Error"}),t.jsx("p",{className:"text-muted text-sm max-w-md",children:(a=this.state.error)==null?void 0:a.message}),t.jsx("button",{onClick:()=>{this.setState({hasError:!1,error:null}),window.location.reload()},className:"px-4 py-2 bg-[#0066FF] text-white text-sm rounded-md hover:bg-[#0066FF]/90 transition-colors",children:"Reload"})]})}):this.props.children}}function re(){const{id:e}=Ae();return t.jsx(Ao,{},e)}function To({authed:e,children:n}){return e?t.jsx(t.Fragment,{children:n}):t.jsx(E,{to:"/login",replace:!0})}function M({authed:e,setupDone:n,children:a}){return e?n?t.jsx(So,{children:a}):t.jsx(E,{to:"/setup",replace:!0}):t.jsx(E,{to:"/login",replace:!0})}function Do(){const{t:e}=q(),[n,a]=d.useState(!0),[r,c]=d.useState(!0),[i,s]=d.useState(!0),[l,u]=d.useState(!1),[v,m]=d.useState(!1),g=le(),k=()=>{m(!1),a(!0),Promise.all([me(),be().catch(()=>({ready:!0,providerConfigured:!0}))]).then(async([w,f])=>{if(c(w.initialized),s(f.ready&&f.providerConfigured!==!1),!w.initialized)g("/init",{replace:!0});else{const F=await pe();u(F),F&&!f.ready&&g("/setup",{replace:!0})}a(!1)}).catch(()=>{m(!0),a(!1)})};if(d.useEffect(()=>{k()},[]),n)return t.jsx("div",{className:"flex items-center justify-center min-h-screen bg-background",children:t.jsx("div",{className:"w-5 h-5 border-2 border-[var(--border)] border-t-foreground rounded-full animate-spin"})});if(v)return t.jsx("div",{className:"flex items-center justify-center min-h-screen bg-background",children:t.jsxs("div",{className:"text-center space-y-4",children:[t.jsx("div",{className:"text-red-400 text-lg font-medium",children:e("error.connectionFailed")}),t.jsx("p",{className:"text-muted text-sm",children:e("error.checkBackend")}),t.jsx("button",{onClick:k,className:"px-4 py-2 bg-[#0066FF] text-white text-sm rounded-md hover:bg-[#0066FF]/90 transition-colors",children:e("action.retry")})]})});const S=t.jsx("div",{className:"flex items-center justify-center min-h-screen bg-background",children:t.jsx("div",{className:"w-5 h-5 border-2 border-[var(--border)] border-t-foreground rounded-full animate-spin"})});return t.jsx(Lo,{children:t.jsx(d.Suspense,{fallback:S,children:t.jsxs(Pe,{children:[t.jsx(N,{path:"/init",element:t.jsx(Co,{onDone:()=>{c(!0),u(!0),s(!1),g("/setup",{replace:!0})}})}),t.jsx(N,{path:"/setup",element:t.jsx(To,{authed:l,children:t.jsx(Io,{onDone:()=>{s(!0),g("/",{replace:!0})}})})}),t.jsx(N,{path:"/login",element:r?t.jsx(Fo,{onLogin:()=>u(!0)}):t.jsx(E,{to:"/init",replace:!0})}),t.jsx(N,{path:"/",element:t.jsx(M,{authed:l,setupDone:i,children:t.jsx(Po,{})})}),t.jsx(N,{path:"/instances/new",element:t.jsx(M,{authed:l,setupDone:i,children:t.jsx(jo,{})})}),t.jsx(N,{path:"/instances/:id",element:t.jsx(M,{authed:l,setupDone:i,children:t.jsx(re,{})})}),t.jsx(N,{path:"/instances/:id/:tab",element:t.jsx(M,{authed:l,setupDone:i,children:t.jsx(re,{})})}),t.jsx(N,{path:"/settings",element:t.jsx(M,{authed:l,setupDone:i,children:t.jsx(No,{})})}),t.jsx(N,{path:"*",element:t.jsx(E,{to:"/",replace:!0})})]})})})}H.createRoot(document.getElementById("root")).render(t.jsx(je.StrictMode,{children:t.jsx(Ne,{children:t.jsx(Do,{})})}));export{eo as $,zn as A,Ho as B,Vo as C,qa as D,Ya as E,Qa as F,Ba as G,_a as H,_o as I,Xa as J,Ua as K,io as L,Wa as M,Va as N,$a as O,Ka as P,ha as Q,fa as R,Yn as S,lo as T,Qn as U,ia as V,aa as W,na as X,xa as Y,zo as Z,L as _,Ko as a,qo as a0,wa as a1,ka as a2,ba as a3,Jo as a4,sa as a5,va as a6,ra as a7,da as a8,la as a9,ca as aA,Eo as aB,ua as aa,oa as ab,Kn as ac,ta as ad,Ja as ae,za as af,Ga as ag,Vn as ah,Wn as ai,Hn as aj,_n as ak,ea as al,Zn as am,$n as an,Yo as ao,Ha as ap,Bn as aq,La as ar,Ta as as,Da as at,Ra as au,Ma as av,Oa as aw,Xn as ax,Aa as ay,Uo as az,Un as b,qn as c,Na as d,ja as e,Ca as f,be as g,Fa as h,Sa as i,t as j,Go as k,Wo as l,$o as m,Bo as n,ge as o,Ea as p,he as q,Pa as r,En as s,ya as t,Ia as u,pa as v,ma as w,ga as x,Gn as y,Jn as z};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function c(t,e){var n;const s=((n=e.clipboardData)==null?void 0:n.getData("text"))??"";if(!s)return t;const a=e.currentTarget.selectionStart??t.length,o=e.currentTarget.selectionEnd??t.length;return`${t.slice(0,a)}${s}${t.slice(o)}`}export{c as g};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const e=[{id:"minimax",label:"MiniMax (国内)",group:"国内厂商",baseUrl:"https://api.minimaxi.com/v1",api:"openai-completions",models:[{id:"MiniMax-M2.7",name:"MiniMax M2.7",contextWindow:204800},{id:"MiniMax-M2.7-highspeed",name:"MiniMax M2.7 Highspeed",contextWindow:204800}]},{id:"minimax-intl",label:"MiniMax (国际)",group:"国际厂商",baseUrl:"https://api.minimax.io/anthropic",api:"anthropic-messages",authHeader:!0,models:[{id:"MiniMax-M2.7",name:"MiniMax M2.7",contextWindow:204800},{id:"MiniMax-M2.7-highspeed",name:"MiniMax M2.7 Highspeed",contextWindow:204800}]},{id:"moonshot",label:"Kimi (Moonshot)",group:"国内厂商",baseUrl:"https://api.moonshot.cn/v1",api:"openai-completions",models:[{id:"kimi-k2.5",name:"Kimi K2.5",contextWindow:256e3},{id:"moonshot-v1-128k",name:"Moonshot V1 128K",contextWindow:128e3},{id:"moonshot-v1-32k",name:"Moonshot V1 32K",contextWindow:32e3},{id:"moonshot-v1-8k",name:"Moonshot V1 8K",contextWindow:8e3}]},{id:"moonshot-coding",label:"Kimi (编码计划)",group:"国内厂商",baseUrl:"https://api.moonshot.cn/anthropic",api:"anthropic-messages",authHeader:!0,models:[{id:"kimi-k2.5",name:"Kimi K2.5",contextWindow:256e3},{id:"kimi-k2-thinking-turbo",name:"Kimi K2 Thinking Turbo",contextWindow:256e3},{id:"kimi-k2-thinking",name:"Kimi K2 Thinking",contextWindow:256e3},{id:"kimi-k2-0905-preview",name:"Kimi K2 0905 Preview",contextWindow:256e3},{id:"kimi-k2-turbo-preview",name:"Kimi K2 Turbo Preview",contextWindow:256e3}]},{id:"moonshot-intl",label:"Kimi (国际)",group:"国际厂商",baseUrl:"https://api.moonshot.ai/v1",api:"openai-completions",models:[{id:"kimi-k2.5",name:"Kimi K2.5",contextWindow:256e3},{id:"moonshot-v1-128k",name:"Moonshot V1 128K",contextWindow:128e3}]},{id:"zhipu",label:"智谱AI (GLM)",group:"国内厂商",baseUrl:"https://open.bigmodel.cn/api/paas/v4",api:"openai-completions",models:[{id:"glm-5.1",name:"GLM-5.1",contextWindow:2e5},{id:"glm-5",name:"GLM-5",contextWindow:2e5},{id:"glm-5-turbo",name:"GLM-5 Turbo",contextWindow:2e5},{id:"glm-4.7",name:"GLM-4.7",contextWindow:2e5},{id:"glm-4.7-flashx",name:"GLM-4.7 FlashX",contextWindow:2e5},{id:"glm-4.7-flash",name:"GLM-4.7 Flash (免费)",contextWindow:2e5},{id:"glm-4-plus",name:"GLM-4 Plus",contextWindow:128e3},{id:"glm-4-long",name:"GLM-4 Long",contextWindow:1e6}]},{id:"zhipu-intl",label:"Z.AI (GLM)",group:"国际厂商",baseUrl:"https://api.z.ai/api/paas/v4",api:"openai-completions",models:[{id:"glm-5.1",name:"GLM-5.1",contextWindow:2e5},{id:"glm-5",name:"GLM-5",contextWindow:2e5},{id:"glm-5-turbo",name:"GLM-5 Turbo",contextWindow:2e5},{id:"glm-4.7",name:"GLM-4.7",contextWindow:2e5},{id:"glm-4.7-flash",name:"GLM-4.7 Flash",contextWindow:2e5},{id:"glm-4-plus",name:"GLM-4 Plus",contextWindow:128e3}]},{id:"byteplus",label:"火山引擎国际版 (Doubao)",group:"国际厂商",baseUrl:"https://ark.ap-southeast.bytepluses.com/api/v3",api:"openai-completions",models:[{id:"seed-2-0-lite-260228",name:"Seed 2.0 Lite",contextWindow:256e3},{id:"seed-2-0-mini-260215",name:"Seed 2.0 Mini",contextWindow:256e3},{id:"seed-1-8-251228",name:"Seed 1.8",contextWindow:256e3}]},{id:"deepseek",label:"DeepSeek",group:"国内厂商",baseUrl:"https://api.deepseek.com/v1",api:"openai-completions",models:[{id:"deepseek-chat",name:"DeepSeek V3.2",contextWindow:128e3},{id:"deepseek-reasoner",name:"DeepSeek V3.2 (推理)",contextWindow:128e3}]},{id:"dashscope",label:"阿里云百炼",group:"国内厂商",baseUrl:"https://dashscope.aliyuncs.com/compatible-mode/v1",api:"openai-completions",models:[{id:"qwen3.5-plus",name:"Qwen 3.5 Plus",contextWindow:1e6},{id:"qwen3.5-flash",name:"Qwen 3.5 Flash",contextWindow:1e6},{id:"qwen3-max",name:"Qwen 3 Max",contextWindow:262144},{id:"qwen3-coder-plus",name:"Qwen 3 Coder Plus",contextWindow:1e6},{id:"qwen3-coder-next",name:"Qwen 3 Coder Next",contextWindow:262144},{id:"qwen3-coder-flash",name:"Qwen 3 Coder Flash",contextWindow:1e6},{id:"qwen-plus",name:"Qwen Plus",contextWindow:1e6},{id:"qwen-long",name:"Qwen Long (10M)",contextWindow:1e7}]},{id:"modelstudio",label:"阿里云百炼 (国际/Coding)",group:"国内厂商",baseUrl:"https://coding-intl.dashscope.aliyuncs.com/v1",api:"openai-completions",models:[{id:"qwen3.5-plus",name:"Qwen 3.5 Plus",contextWindow:1e6},{id:"qwen3-coder-plus",name:"Qwen 3 Coder Plus",contextWindow:1e6},{id:"qwen3-coder-next",name:"Qwen 3 Coder Next",contextWindow:262144}]},{id:"volcengine",label:"火山引擎 (豆包)",group:"国内厂商",baseUrl:"https://ark.cn-beijing.volces.com/api/v3",api:"openai-completions",models:[{id:"doubao-seed-2-0-pro-260215",name:"Doubao Seed 2.0 Pro (需替换为接入点ID)",contextWindow:256e3},{id:"doubao-seed-2-0-lite-260228",name:"Doubao Seed 2.0 Lite (需替换为接入点ID)",contextWindow:256e3},{id:"doubao-seed-2-0-code-preview-260215",name:"Doubao Seed 2.0 Code (需替换为接入点ID)",contextWindow:256e3},{id:"doubao-seed-2-0-mini-260215",name:"Doubao Seed 2.0 Mini (需替换为接入点ID)",contextWindow:256e3},{id:"doubao-seed-1-8-251228",name:"Doubao Seed 1.8 (需替换为接入点ID)",contextWindow:256e3}]},{id:"qianfan",label:"百度千帆 (ERNIE)",group:"国内厂商",baseUrl:"https://qianfan.baidubce.com/v2",api:"openai-completions",models:[{id:"ernie-5.0",name:"ERNIE 5.0",contextWindow:128e3},{id:"ernie-5.0-thinking-preview",name:"ERNIE 5.0 Thinking",contextWindow:128e3},{id:"ernie-4.5-turbo-128k",name:"ERNIE 4.5 Turbo (MoE)",contextWindow:128e3},{id:"ernie-x1.1",name:"ERNIE X1.1 (推理)",contextWindow:64e3},{id:"deepseek-v3.2",name:"DeepSeek V3.2 (千帆)",contextWindow:128e3}]},{id:"tencent",label:"腾讯混元",group:"国内厂商",baseUrl:"https://api.hunyuan.cloud.tencent.com/v1",api:"openai-completions",models:[{id:"hunyuan-2.0-thinking-20251109",name:"Hunyuan 2.0 Think (推理)",contextWindow:128e3},{id:"hunyuan-2.0-instruct-20251111",name:"Hunyuan 2.0 Instruct",contextWindow:128e3},{id:"hunyuan-t1-latest",name:"Hunyuan T1 (推理)",contextWindow:32e3},{id:"hunyuan-turbos-latest",name:"Hunyuan TurboS",contextWindow:32e3},{id:"hunyuan-a13b",name:"Hunyuan A13B (MoE)",contextWindow:224e3},{id:"hunyuan-lite",name:"Hunyuan Lite (免费)",contextWindow:25e4}]},{id:"xiaomi",label:"MiMo (小米)",group:"国内厂商",baseUrl:"https://api.xiaomimimo.com/v1",api:"openai-completions",models:[{id:"mimo-v2-pro",name:"MiMo V2 Pro (推理)",contextWindow:1048576},{id:"mimo-v2-omni",name:"MiMo V2 Omni (多模)",contextWindow:262144},{id:"mimo-v2-flash",name:"MiMo V2 Flash",contextWindow:262144}]},{id:"spark",label:"讯飞星火",group:"国内厂商",baseUrl:"https://spark-api-open.xf-yun.com/v1",api:"openai-completions",models:[{id:"spark-x",name:"Spark X1.5 (推理)",contextWindow:32768},{id:"4.0Ultra",name:"Spark 4.0 Ultra",contextWindow:32768},{id:"pro-128k",name:"Spark Pro 128K",contextWindow:131072},{id:"lite",name:"Spark Lite (免费)",contextWindow:8192}]},{id:"stepfun",label:"阶跃星辰",group:"国内厂商",baseUrl:"https://api.stepfun.com/v1",api:"openai-completions",models:[{id:"step-3.5-flash",name:"Step 3.5 Flash (推理)",contextWindow:262144},{id:"step-3",name:"Step 3 (多模推理)",contextWindow:65536},{id:"step-2-mini",name:"Step 2 Mini",contextWindow:32e3},{id:"step-1o-turbo-vision",name:"Step 1o Turbo Vision",contextWindow:32e3},{id:"step-1-256k",name:"Step 1 256K",contextWindow:256e3}]},{id:"openai",label:"OpenAI",group:"国际厂商",baseUrl:"https://api.openai.com/v1",api:"openai-completions",models:[{id:"gpt-5.4",name:"GPT-5.4",contextWindow:105e4},{id:"gpt-5.4-pro",name:"GPT-5.4 Pro",contextWindow:105e4},{id:"gpt-5.4-mini",name:"GPT-5.4 Mini",contextWindow:4e5},{id:"gpt-5.4-nano",name:"GPT-5.4 Nano",contextWindow:4e5},{id:"o3-pro",name:"o3-pro (推理)",contextWindow:2e5},{id:"o3",name:"o3 (推理)",contextWindow:2e5},{id:"o4-mini",name:"o4-mini (推理)",contextWindow:2e5},{id:"gpt-4.1",name:"GPT-4.1",contextWindow:1e6},{id:"gpt-4.1-mini",name:"GPT-4.1 Mini",contextWindow:1e6}]},{id:"anthropic",label:"Anthropic (Claude)",group:"国际厂商",baseUrl:"https://api.anthropic.com",api:"anthropic-messages",models:[{id:"claude-opus-4-6",name:"Claude Opus 4.6",contextWindow:1e6},{id:"claude-sonnet-4-6",name:"Claude Sonnet 4.6",contextWindow:1e6},{id:"claude-haiku-4-5",name:"Claude Haiku 4.5",contextWindow:2e5}]},{id:"google",label:"Google Gemini",group:"国际厂商",baseUrl:"https://generativelanguage.googleapis.com",api:"google-generative-ai",models:[{id:"gemini-3.1-pro-preview",name:"Gemini 3.1 Pro (Preview)",contextWindow:1048576},{id:"gemini-3-flash-preview",name:"Gemini 3 Flash (Preview)",contextWindow:1048576},{id:"gemini-3.1-flash-lite-preview",name:"Gemini 3.1 Flash Lite (Preview)",contextWindow:1048576},{id:"gemini-2.5-flash",name:"Gemini 2.5 Flash",contextWindow:1048576},{id:"gemini-2.5-pro",name:"Gemini 2.5 Pro",contextWindow:1048576}]},{id:"mistral",label:"Mistral AI",group:"国际厂商",baseUrl:"https://api.mistral.ai/v1",api:"openai-completions",models:[{id:"mistral-large-latest",name:"Mistral Large 3",contextWindow:262144},{id:"mistral-small-latest",name:"Mistral Small 4",contextWindow:256e3},{id:"codestral-latest",name:"Codestral (代码)",contextWindow:256e3},{id:"devstral-latest",name:"Devstral 2 (代码Agent)",contextWindow:256e3},{id:"devstral-2-latest",name:"Devstral 2 123B (代码)",contextWindow:256e3},{id:"magistral-medium-latest",name:"Magistral Medium (推理)",contextWindow:4e4}]},{id:"xai",label:"xAI (Grok)",group:"国际厂商",baseUrl:"https://api.x.ai/v1",api:"openai-completions",models:[{id:"grok-4.20-0309-reasoning",name:"Grok 4.20 (推理)",contextWindow:2e6},{id:"grok-4-1-fast-reasoning",name:"Grok 4 Fast (推理)",contextWindow:2e6},{id:"grok-4-1-fast-non-reasoning",name:"Grok 4 Fast",contextWindow:2e6},{id:"grok-4",name:"Grok 4",contextWindow:256e3},{id:"grok-code-fast-1",name:"Grok Code Fast 1 (代码)",contextWindow:256e3},{id:"grok-3",name:"Grok 3",contextWindow:131072},{id:"grok-3-mini",name:"Grok 3 Mini",contextWindow:131072}]},{id:"cohere",label:"Cohere",group:"国际厂商",baseUrl:"https://api.cohere.com/compatibility/v1",api:"openai-completions",models:[{id:"command-a-03-2025",name:"Command A",contextWindow:256e3},{id:"command-a-reasoning-08-2025",name:"Command A (推理)",contextWindow:256e3},{id:"command-a-vision-07-2025",name:"Command A (视觉)",contextWindow:128e3},{id:"command-r-plus-08-2024",name:"Command R+",contextWindow:128e3},{id:"command-r-08-2024",name:"Command R",contextWindow:128e3}]},{id:"groq",label:"Groq",group:"推理加速",baseUrl:"https://api.groq.com/openai/v1",api:"openai-completions",models:[{id:"openai/gpt-oss-120b",name:"GPT-OSS 120B",contextWindow:131072},{id:"llama-3.3-70b-versatile",name:"Llama 3.3 70B",contextWindow:131072},{id:"meta-llama/llama-4-scout-17b-16e-instruct",name:"Llama 4 Scout 17B",contextWindow:128e3},{id:"qwen/qwen3-32b",name:"Qwen 3 32B",contextWindow:128e3},{id:"llama-3.1-8b-instant",name:"Llama 3.1 8B",contextWindow:131072}]},{id:"fireworks",label:"Fireworks AI",group:"推理加速",baseUrl:"https://api.fireworks.ai/inference/v1",api:"openai-completions",models:[{id:"accounts/fireworks/models/deepseek-v3",name:"DeepSeek V3",contextWindow:131072},{id:"accounts/fireworks/models/deepseek-v3p1",name:"DeepSeek V3.1",contextWindow:163840},{id:"accounts/fireworks/models/deepseek-v3p2",name:"DeepSeek V3.2",contextWindow:163840},{id:"accounts/fireworks/models/deepseek-r1",name:"DeepSeek R1",contextWindow:163840},{id:"accounts/fireworks/models/llama-v3p3-70b-instruct",name:"Llama 3.3 70B",contextWindow:131072},{id:"accounts/fireworks/models/qwen2.5-coder-32b-instruct",name:"Qwen 2.5 Coder 32B",contextWindow:32768}]},{id:"sambanova",label:"SambaNova",group:"推理加速",baseUrl:"https://api.sambanova.ai/v1",api:"openai-completions",models:[{id:"gpt-oss-120b",name:"GPT-OSS 120B",contextWindow:131072},{id:"DeepSeek-R1-0528",name:"DeepSeek R1",contextWindow:65536},{id:"DeepSeek-V3-0324",name:"DeepSeek V3",contextWindow:65536},{id:"DeepSeek-V3.1",name:"DeepSeek V3.1",contextWindow:65536},{id:"DeepSeek-V3.2",name:"DeepSeek V3.2",contextWindow:65536},{id:"Meta-Llama-3.3-70B-Instruct",name:"Llama 3.3 70B",contextWindow:131072},{id:"Qwen3-235B",name:"Qwen 3 235B",contextWindow:65536}]},{id:"cerebras",label:"Cerebras",group:"推理加速",baseUrl:"https://api.cerebras.ai/v1",api:"openai-completions",models:[{id:"gpt-oss-120b",name:"GPT-OSS 120B",contextWindow:131072},{id:"qwen-3-235b-a22b-instruct-2507",name:"Qwen 3 235B (MoE)",contextWindow:131072},{id:"zai-glm-4.7",name:"Z.AI GLM 4.7",contextWindow:131072},{id:"llama-4-scout-17b-16e-instruct",name:"Llama 4 Scout 17B",contextWindow:131072}]},{id:"hyperbolic",label:"Hyperbolic",group:"推理加速",baseUrl:"https://api.hyperbolic.xyz/v1",api:"openai-completions",models:[{id:"gpt-oss-120b",name:"GPT-OSS 120B",contextWindow:131072},{id:"deepseek-ai/DeepSeek-V3-0324",name:"DeepSeek V3",contextWindow:131072},{id:"deepseek-ai/DeepSeek-R1-0528",name:"DeepSeek R1",contextWindow:131072},{id:"meta-llama/Llama-3.3-70B-Instruct",name:"Llama 3.3 70B",contextWindow:131072}]},{id:"openrouter",label:"OpenRouter",group:"聚合平台",baseUrl:"https://openrouter.ai/api/v1",api:"openai-completions",models:[{id:"openrouter/auto",name:"Auto (自动选择)",contextWindow:2e6},{id:"anthropic/claude-opus-4.6",name:"Claude Opus 4.6",contextWindow:1e6},{id:"openai/gpt-4.1",name:"GPT-4.1",contextWindow:1e6},{id:"google/gemini-2.5-flash",name:"Gemini 2.5 Flash",contextWindow:1048576},{id:"deepseek/deepseek-chat-v3.1",name:"DeepSeek V3.1",contextWindow:128e3},{id:"deepseek/deepseek-r1-0528",name:"DeepSeek R1",contextWindow:163840}]},{id:"together",label:"Together AI",group:"聚合平台",baseUrl:"https://api.together.xyz/v1",api:"openai-completions",models:[{id:"deepseek-ai/DeepSeek-V3.1",name:"DeepSeek V3.1",contextWindow:131072},{id:"deepseek-ai/DeepSeek-R1",name:"DeepSeek R1",contextWindow:163840},{id:"moonshotai/Kimi-K2.5",name:"Kimi K2.5",contextWindow:262144},{id:"meta-llama/Llama-3.3-70B-Instruct-Turbo",name:"Llama 3.3 70B Turbo",contextWindow:131072},{id:"Qwen/Qwen3-Coder-480B-A35B-Instruct-FP8",name:"Qwen 3 Coder 480B",contextWindow:131072}]},{id:"siliconflow",label:"SiliconFlow",group:"聚合平台",baseUrl:"https://api.siliconflow.cn/v1",api:"openai-completions",models:[{id:"deepseek-ai/DeepSeek-V3",name:"DeepSeek V3",contextWindow:128e3},{id:"deepseek-ai/DeepSeek-R1",name:"DeepSeek R1",contextWindow:128e3},{id:"Qwen/Qwen3-235B-A22B",name:"Qwen3 235B (MoE)",contextWindow:131072},{id:"moonshotai/Kimi-K2.5",name:"Kimi K2.5",contextWindow:262144},{id:"Pro/deepseek-ai/DeepSeek-V3",name:"DeepSeek V3 (Pro)",contextWindow:128e3}]},{id:"perplexity",label:"Perplexity",group:"聚合平台",baseUrl:"https://api.perplexity.ai",api:"openai-completions",models:[{id:"sonar-pro",name:"Sonar Pro (联网)",contextWindow:2e5},{id:"sonar",name:"Sonar (联网)",contextWindow:127072},{id:"sonar-reasoning-pro",name:"Sonar Reasoning Pro (联网推理)",contextWindow:128e3},{id:"sonar-deep-research",name:"Sonar Deep Research (深度研究)",contextWindow:128e3}]},{id:"deepinfra",label:"DeepInfra",group:"聚合平台",baseUrl:"https://api.deepinfra.com/v1/openai",api:"openai-completions",models:[{id:"deepseek-ai/DeepSeek-V3-0324",name:"DeepSeek V3",contextWindow:131072},{id:"deepseek-ai/DeepSeek-V3.1",name:"DeepSeek V3.1",contextWindow:131072},{id:"deepseek-ai/DeepSeek-R1-0528-Turbo",name:"DeepSeek R1 Turbo",contextWindow:131072},{id:"meta-llama/Llama-3.3-70B-Instruct-Turbo",name:"Llama 3.3 70B Turbo",contextWindow:131072},{id:"Qwen/Qwen3-235B-A22B-Instruct-2507",name:"Qwen 3 235B",contextWindow:131072},{id:"Qwen/Qwen2.5-Coder-32B-Instruct",name:"Qwen 2.5 Coder 32B",contextWindow:32768}]},{id:"nvidia",label:"NVIDIA NIM",group:"聚合平台",baseUrl:"https://integrate.api.nvidia.com/v1",api:"openai-completions",models:[{id:"meta/llama-3.3-70b-instruct",name:"Llama 3.3 70B",contextWindow:131072},{id:"deepseek-ai/deepseek-r1",name:"DeepSeek R1",contextWindow:131072}]},{id:"huggingface",label:"Hugging Face",group:"聚合平台",baseUrl:"https://router.huggingface.co/v1",api:"openai-completions",models:[{id:"meta-llama/Llama-3.3-70B-Instruct",name:"Llama 3.3 70B",contextWindow:131072},{id:"Qwen/Qwen2.5-Coder-32B-Instruct",name:"Qwen 2.5 Coder 32B",contextWindow:32768}]},{id:"novita",label:"Novita AI",group:"聚合平台",baseUrl:"https://api.novita.ai/v3/openai",api:"openai-completions",models:[{id:"deepseek/deepseek-chat-v3-0324",name:"DeepSeek V3",contextWindow:131072},{id:"deepseek/deepseek-r1",name:"DeepSeek R1",contextWindow:131072},{id:"meta-llama/llama-3.3-70b-instruct",name:"Llama 3.3 70B",contextWindow:131072}]},{id:"infini",label:"Infini-AI",group:"聚合平台",baseUrl:"https://cloud.infini-ai.com/maas/v1",api:"openai-completions",models:[{id:"deepseek-ai/DeepSeek-V3",name:"DeepSeek V3",contextWindow:128e3},{id:"deepseek-ai/DeepSeek-R1",name:"DeepSeek R1",contextWindow:128e3}]},{id:"venice",label:"Venice AI",group:"聚合平台",baseUrl:"https://api.venice.ai/api/v1",api:"openai-completions",models:[{id:"kimi-k2-5",name:"Kimi K2.5",contextWindow:262144}]},{id:"vercel-ai-gateway",label:"Vercel AI Gateway",group:"聚合平台",baseUrl:"https://ai-gateway.vercel.sh",api:"anthropic-messages",models:[{id:"anthropic/claude-opus-4.6",name:"Claude Opus 4.6",contextWindow:2e5}]},{id:"synthetic",label:"Synthetic",group:"聚合平台",baseUrl:"https://api.synthetic.new/anthropic",api:"anthropic-messages",models:[{id:"hf:MiniMaxAI/MiniMax-M2.7",name:"MiniMax M2.7",contextWindow:204800},{id:"hf:MiniMaxAI/MiniMax-M2.5",name:"MiniMax M2.5",contextWindow:204800}]},{id:"opencode",label:"OpenCode Zen",group:"聚合平台",baseUrl:"https://opencode.ai/zen/v1",api:"openai-completions",models:[{id:"claude-opus-4-6",name:"Claude Opus 4.6",contextWindow:2e5}]},{id:"ollama",label:"Ollama (本地)",group:"本地部署",baseUrl:"http://127.0.0.1:11434",api:"ollama",models:[]},{id:"vllm",label:"vLLM (本地)",group:"本地部署",baseUrl:"http://127.0.0.1:8000/v1",api:"openai-completions",models:[]},{id:"sglang",label:"SGLang (本地)",group:"本地部署",baseUrl:"http://127.0.0.1:30000/v1",api:"openai-completions",models:[]}];export{e as P};
|
|
1
|
+
const e=[{id:"minimax",label:"MiniMax (国内)",group:"国内厂商",baseUrl:"https://api.minimaxi.com/v1",api:"openai-completions",models:[{id:"MiniMax-M2.7",name:"MiniMax M2.7",contextWindow:204800},{id:"MiniMax-M2.7-highspeed",name:"MiniMax M2.7 Highspeed",contextWindow:204800}]},{id:"minimax-intl",label:"MiniMax (国际)",group:"国际厂商",baseUrl:"https://api.minimax.io/anthropic",api:"anthropic-messages",authHeader:!0,models:[{id:"MiniMax-M2.7",name:"MiniMax M2.7",contextWindow:204800},{id:"MiniMax-M2.7-highspeed",name:"MiniMax M2.7 Highspeed",contextWindow:204800}]},{id:"moonshot",label:"Kimi (Moonshot)",group:"国内厂商",baseUrl:"https://api.moonshot.cn/v1",api:"openai-completions",models:[{id:"kimi-k2.5",name:"Kimi K2.5",contextWindow:256e3},{id:"moonshot-v1-128k",name:"Moonshot V1 128K",contextWindow:128e3},{id:"moonshot-v1-32k",name:"Moonshot V1 32K",contextWindow:32e3},{id:"moonshot-v1-8k",name:"Moonshot V1 8K",contextWindow:8e3}]},{id:"moonshot-coding",label:"Kimi (编码计划)",group:"国内厂商",baseUrl:"https://api.moonshot.cn/anthropic",api:"anthropic-messages",authHeader:!0,models:[{id:"kimi-k2.5",name:"Kimi K2.5",contextWindow:256e3},{id:"kimi-k2-thinking-turbo",name:"Kimi K2 Thinking Turbo",contextWindow:256e3},{id:"kimi-k2-thinking",name:"Kimi K2 Thinking",contextWindow:256e3},{id:"kimi-k2-0905-preview",name:"Kimi K2 0905 Preview",contextWindow:256e3},{id:"kimi-k2-turbo-preview",name:"Kimi K2 Turbo Preview",contextWindow:256e3}]},{id:"moonshot-intl",label:"Kimi (国际)",group:"国际厂商",baseUrl:"https://api.moonshot.ai/v1",api:"openai-completions",models:[{id:"kimi-k2.5",name:"Kimi K2.5",contextWindow:256e3},{id:"moonshot-v1-128k",name:"Moonshot V1 128K",contextWindow:128e3}]},{id:"zhipu",label:"智谱AI (GLM)",group:"国内厂商",baseUrl:"https://open.bigmodel.cn/api/paas/v4",api:"openai-completions",models:[{id:"glm-5.1",name:"GLM-5.1",contextWindow:2e5},{id:"glm-5",name:"GLM-5",contextWindow:2e5},{id:"glm-5-turbo",name:"GLM-5 Turbo",contextWindow:2e5},{id:"glm-4.7",name:"GLM-4.7",contextWindow:2e5},{id:"glm-4.7-flashx",name:"GLM-4.7 FlashX",contextWindow:2e5},{id:"glm-4.7-flash",name:"GLM-4.7 Flash (免费)",contextWindow:2e5},{id:"glm-4-plus",name:"GLM-4 Plus",contextWindow:128e3},{id:"glm-4-long",name:"GLM-4 Long",contextWindow:1e6}]},{id:"zhipu-intl",label:"Z.AI (GLM)",group:"国际厂商",baseUrl:"https://api.z.ai/api/paas/v4",api:"openai-completions",models:[{id:"glm-5.1",name:"GLM-5.1",contextWindow:2e5},{id:"glm-5",name:"GLM-5",contextWindow:2e5},{id:"glm-5-turbo",name:"GLM-5 Turbo",contextWindow:2e5},{id:"glm-4.7",name:"GLM-4.7",contextWindow:2e5},{id:"glm-4.7-flash",name:"GLM-4.7 Flash",contextWindow:2e5},{id:"glm-4-plus",name:"GLM-4 Plus",contextWindow:128e3}]},{id:"byteplus",label:"火山引擎国际版 (Doubao)",group:"国际厂商",baseUrl:"https://ark.ap-southeast.bytepluses.com/api/v3",api:"openai-completions",models:[{id:"seed-2-0-lite-260228",name:"Seed 2.0 Lite",contextWindow:256e3},{id:"seed-2-0-mini-260215",name:"Seed 2.0 Mini",contextWindow:256e3},{id:"seed-1-8-251228",name:"Seed 1.8",contextWindow:256e3}]},{id:"deepseek",label:"DeepSeek",group:"国内厂商",baseUrl:"https://api.deepseek.com/v1",api:"openai-completions",models:[{id:"deepseek-chat",name:"DeepSeek V3.2",contextWindow:128e3},{id:"deepseek-reasoner",name:"DeepSeek V3.2 (推理)",contextWindow:128e3}]},{id:"dashscope",label:"阿里云百炼",group:"国内厂商",baseUrl:"https://dashscope.aliyuncs.com/compatible-mode/v1",api:"openai-completions",models:[{id:"qwen3.5-plus",name:"Qwen 3.5 Plus",contextWindow:1e6},{id:"qwen3.5-flash",name:"Qwen 3.5 Flash",contextWindow:1e6},{id:"qwen3-max",name:"Qwen 3 Max",contextWindow:262144},{id:"qwen3-coder-plus",name:"Qwen 3 Coder Plus",contextWindow:1e6},{id:"qwen3-coder-next",name:"Qwen 3 Coder Next",contextWindow:262144},{id:"qwen3-coder-flash",name:"Qwen 3 Coder Flash",contextWindow:1e6},{id:"qwen-plus",name:"Qwen Plus",contextWindow:1e6},{id:"qwen-long",name:"Qwen Long (10M)",contextWindow:1e7}]},{id:"modelstudio",label:"阿里云百炼 (国际/Coding)",group:"国内厂商",baseUrl:"https://coding-intl.dashscope.aliyuncs.com/v1",api:"openai-completions",models:[{id:"qwen3.5-plus",name:"Qwen 3.5 Plus",contextWindow:1e6},{id:"qwen3-coder-plus",name:"Qwen 3 Coder Plus",contextWindow:1e6},{id:"qwen3-coder-next",name:"Qwen 3 Coder Next",contextWindow:262144}]},{id:"volcengine",label:"火山引擎 (豆包)",group:"国内厂商",baseUrl:"https://ark.cn-beijing.volces.com/api/v3",api:"openai-completions",models:[{id:"doubao-seed-2-0-pro-260215",name:"Doubao Seed 2.0 Pro (需替换为接入点ID)",contextWindow:256e3},{id:"doubao-seed-2-0-lite-260228",name:"Doubao Seed 2.0 Lite (需替换为接入点ID)",contextWindow:256e3},{id:"doubao-seed-2-0-code-preview-260215",name:"Doubao Seed 2.0 Code (需替换为接入点ID)",contextWindow:256e3},{id:"doubao-seed-2-0-mini-260215",name:"Doubao Seed 2.0 Mini (需替换为接入点ID)",contextWindow:256e3},{id:"doubao-seed-1-8-251228",name:"Doubao Seed 1.8 (需替换为接入点ID)",contextWindow:256e3}]},{id:"qianfan",label:"百度千帆 (ERNIE)",group:"国内厂商",baseUrl:"https://qianfan.baidubce.com/v2",api:"openai-completions",models:[{id:"ernie-5.0",name:"ERNIE 5.0",contextWindow:128e3},{id:"ernie-5.0-thinking-preview",name:"ERNIE 5.0 Thinking",contextWindow:128e3},{id:"ernie-4.5-turbo-128k",name:"ERNIE 4.5 Turbo (MoE)",contextWindow:128e3},{id:"ernie-x1.1",name:"ERNIE X1.1 (推理)",contextWindow:64e3},{id:"deepseek-v3.2",name:"DeepSeek V3.2 (千帆)",contextWindow:128e3}]},{id:"tencent",label:"腾讯混元",group:"国内厂商",baseUrl:"https://api.hunyuan.cloud.tencent.com/v1",api:"openai-completions",models:[{id:"hunyuan-2.0-thinking-20251109",name:"Hunyuan 2.0 Think (推理)",contextWindow:128e3},{id:"hunyuan-2.0-instruct-20251111",name:"Hunyuan 2.0 Instruct",contextWindow:128e3},{id:"hunyuan-t1-latest",name:"Hunyuan T1 (推理)",contextWindow:32e3},{id:"hunyuan-turbos-latest",name:"Hunyuan TurboS",contextWindow:32e3},{id:"hunyuan-a13b",name:"Hunyuan A13B (MoE)",contextWindow:224e3},{id:"hunyuan-lite",name:"Hunyuan Lite (免费)",contextWindow:25e4}]},{id:"xiaomi",label:"MiMo (小米)",group:"国内厂商",baseUrl:"https://api.xiaomimimo.com/v1",api:"openai-completions",models:[{id:"mimo-v2-pro",name:"MiMo V2 Pro (推理)",contextWindow:1048576},{id:"mimo-v2-omni",name:"MiMo V2 Omni (多模)",contextWindow:262144},{id:"mimo-v2-flash",name:"MiMo V2 Flash",contextWindow:262144}]},{id:"spark",label:"讯飞星火",group:"国内厂商",baseUrl:"https://spark-api-open.xf-yun.com/v1",api:"openai-completions",models:[{id:"spark-x",name:"Spark X1.5 (推理)",contextWindow:32768},{id:"4.0Ultra",name:"Spark 4.0 Ultra",contextWindow:32768},{id:"pro-128k",name:"Spark Pro 128K",contextWindow:131072},{id:"lite",name:"Spark Lite (免费)",contextWindow:8192}]},{id:"stepfun",label:"阶跃星辰",group:"国内厂商",baseUrl:"https://api.stepfun.com/v1",api:"openai-completions",models:[{id:"step-3.5-flash",name:"Step 3.5 Flash (推理)",contextWindow:262144},{id:"step-3",name:"Step 3 (多模推理)",contextWindow:65536},{id:"step-2-mini",name:"Step 2 Mini",contextWindow:32e3},{id:"step-1o-turbo-vision",name:"Step 1o Turbo Vision",contextWindow:32e3},{id:"step-1-256k",name:"Step 1 256K",contextWindow:256e3}]},{id:"openai",label:"OpenAI",group:"国际厂商",baseUrl:"https://api.openai.com/v1",api:"openai-completions",models:[{id:"gpt-5.4",name:"GPT-5.4",contextWindow:105e4},{id:"gpt-5.4-pro",name:"GPT-5.4 Pro",contextWindow:105e4},{id:"gpt-5.4-mini",name:"GPT-5.4 Mini",contextWindow:4e5},{id:"gpt-5.4-nano",name:"GPT-5.4 Nano",contextWindow:4e5},{id:"o3-pro",name:"o3-pro (推理)",contextWindow:2e5},{id:"o3",name:"o3 (推理)",contextWindow:2e5},{id:"o4-mini",name:"o4-mini (推理)",contextWindow:2e5},{id:"gpt-4.1",name:"GPT-4.1",contextWindow:1e6},{id:"gpt-4.1-mini",name:"GPT-4.1 Mini",contextWindow:1e6}]},{id:"anthropic",label:"Anthropic (Claude)",group:"国际厂商",baseUrl:"https://api.anthropic.com",api:"anthropic-messages",models:[{id:"claude-opus-4-6",name:"Claude Opus 4.6",contextWindow:1e6},{id:"claude-sonnet-4-6",name:"Claude Sonnet 4.6",contextWindow:1e6},{id:"claude-haiku-4-5",name:"Claude Haiku 4.5",contextWindow:2e5}]},{id:"google",label:"Google Gemini",group:"国际厂商",baseUrl:"https://generativelanguage.googleapis.com",api:"google-generative-ai",models:[{id:"gemini-3.1-pro-preview",name:"Gemini 3.1 Pro (Preview)",contextWindow:1048576},{id:"gemini-3-flash-preview",name:"Gemini 3 Flash (Preview)",contextWindow:1048576},{id:"gemini-3.1-flash-lite-preview",name:"Gemini 3.1 Flash Lite (Preview)",contextWindow:1048576},{id:"gemini-2.5-flash",name:"Gemini 2.5 Flash",contextWindow:1048576},{id:"gemini-2.5-pro",name:"Gemini 2.5 Pro",contextWindow:1048576}]},{id:"mistral",label:"Mistral AI",group:"国际厂商",baseUrl:"https://api.mistral.ai/v1",api:"openai-completions",models:[{id:"mistral-large-latest",name:"Mistral Large 3",contextWindow:262144},{id:"mistral-small-latest",name:"Mistral Small 4",contextWindow:256e3},{id:"codestral-latest",name:"Codestral (代码)",contextWindow:256e3},{id:"devstral-latest",name:"Devstral 2 (代码Agent)",contextWindow:256e3},{id:"devstral-2-latest",name:"Devstral 2 123B (代码)",contextWindow:256e3},{id:"magistral-medium-latest",name:"Magistral Medium (推理)",contextWindow:4e4}]},{id:"xai",label:"xAI (Grok)",group:"国际厂商",baseUrl:"https://api.x.ai/v1",api:"openai-completions",models:[{id:"grok-4.20-0309-reasoning",name:"Grok 4.20 (推理)",contextWindow:2e6},{id:"grok-4-1-fast-reasoning",name:"Grok 4 Fast (推理)",contextWindow:2e6},{id:"grok-4-1-fast-non-reasoning",name:"Grok 4 Fast",contextWindow:2e6},{id:"grok-4",name:"Grok 4",contextWindow:256e3},{id:"grok-code-fast-1",name:"Grok Code Fast 1 (代码)",contextWindow:256e3},{id:"grok-3",name:"Grok 3",contextWindow:131072},{id:"grok-3-mini",name:"Grok 3 Mini",contextWindow:131072}]},{id:"cohere",label:"Cohere",group:"国际厂商",baseUrl:"https://api.cohere.com/compatibility/v1",api:"openai-completions",models:[{id:"command-a-03-2025",name:"Command A",contextWindow:256e3},{id:"command-a-reasoning-08-2025",name:"Command A (推理)",contextWindow:256e3},{id:"command-a-vision-07-2025",name:"Command A (视觉)",contextWindow:128e3},{id:"command-r-plus-08-2024",name:"Command R+",contextWindow:128e3},{id:"command-r-08-2024",name:"Command R",contextWindow:128e3}]},{id:"groq",label:"Groq",group:"推理加速",baseUrl:"https://api.groq.com/openai/v1",api:"openai-completions",models:[{id:"openai/gpt-oss-120b",name:"GPT-OSS 120B",contextWindow:131072},{id:"llama-3.3-70b-versatile",name:"Llama 3.3 70B",contextWindow:131072},{id:"meta-llama/llama-4-scout-17b-16e-instruct",name:"Llama 4 Scout 17B",contextWindow:128e3},{id:"qwen/qwen3-32b",name:"Qwen 3 32B",contextWindow:128e3},{id:"llama-3.1-8b-instant",name:"Llama 3.1 8B",contextWindow:131072}]},{id:"fireworks",label:"Fireworks AI",group:"推理加速",baseUrl:"https://api.fireworks.ai/inference/v1",api:"openai-completions",models:[{id:"accounts/fireworks/models/deepseek-v3",name:"DeepSeek V3",contextWindow:131072},{id:"accounts/fireworks/models/deepseek-v3p1",name:"DeepSeek V3.1",contextWindow:163840},{id:"accounts/fireworks/models/deepseek-v3p2",name:"DeepSeek V3.2",contextWindow:163840},{id:"accounts/fireworks/models/deepseek-r1",name:"DeepSeek R1",contextWindow:163840},{id:"accounts/fireworks/models/llama-v3p3-70b-instruct",name:"Llama 3.3 70B",contextWindow:131072},{id:"accounts/fireworks/models/qwen2.5-coder-32b-instruct",name:"Qwen 2.5 Coder 32B",contextWindow:32768}]},{id:"sambanova",label:"SambaNova",group:"推理加速",baseUrl:"https://api.sambanova.ai/v1",api:"openai-completions",models:[{id:"gpt-oss-120b",name:"GPT-OSS 120B",contextWindow:131072},{id:"DeepSeek-R1-0528",name:"DeepSeek R1",contextWindow:65536},{id:"DeepSeek-V3-0324",name:"DeepSeek V3",contextWindow:65536},{id:"DeepSeek-V3.1",name:"DeepSeek V3.1",contextWindow:65536},{id:"DeepSeek-V3.2",name:"DeepSeek V3.2",contextWindow:65536},{id:"Meta-Llama-3.3-70B-Instruct",name:"Llama 3.3 70B",contextWindow:131072},{id:"Qwen3-235B",name:"Qwen 3 235B",contextWindow:65536}]},{id:"cerebras",label:"Cerebras",group:"推理加速",baseUrl:"https://api.cerebras.ai/v1",api:"openai-completions",models:[{id:"gpt-oss-120b",name:"GPT-OSS 120B",contextWindow:131072},{id:"qwen-3-235b-a22b-instruct-2507",name:"Qwen 3 235B (MoE)",contextWindow:131072},{id:"zai-glm-4.7",name:"Z.AI GLM 4.7",contextWindow:131072},{id:"llama-4-scout-17b-16e-instruct",name:"Llama 4 Scout 17B",contextWindow:131072}]},{id:"hyperbolic",label:"Hyperbolic",group:"推理加速",baseUrl:"https://api.hyperbolic.xyz/v1",api:"openai-completions",models:[{id:"gpt-oss-120b",name:"GPT-OSS 120B",contextWindow:131072},{id:"deepseek-ai/DeepSeek-V3-0324",name:"DeepSeek V3",contextWindow:131072},{id:"deepseek-ai/DeepSeek-R1-0528",name:"DeepSeek R1",contextWindow:131072},{id:"meta-llama/Llama-3.3-70B-Instruct",name:"Llama 3.3 70B",contextWindow:131072}]},{id:"openrouter",label:"OpenRouter",group:"聚合平台",baseUrl:"https://openrouter.ai/api/v1",api:"openai-completions",models:[{id:"openrouter/auto",name:"Auto (自动选择)",contextWindow:2e6},{id:"anthropic/claude-opus-4.6",name:"Claude Opus 4.6",contextWindow:1e6},{id:"openai/gpt-4.1",name:"GPT-4.1",contextWindow:1e6},{id:"google/gemini-2.5-flash",name:"Gemini 2.5 Flash",contextWindow:1048576},{id:"deepseek/deepseek-chat-v3.1",name:"DeepSeek V3.1",contextWindow:128e3},{id:"deepseek/deepseek-r1-0528",name:"DeepSeek R1",contextWindow:163840}]},{id:"together",label:"Together AI",group:"聚合平台",baseUrl:"https://api.together.xyz/v1",api:"openai-completions",models:[{id:"deepseek-ai/DeepSeek-V3.1",name:"DeepSeek V3.1",contextWindow:131072},{id:"deepseek-ai/DeepSeek-R1",name:"DeepSeek R1",contextWindow:163840},{id:"moonshotai/Kimi-K2.5",name:"Kimi K2.5",contextWindow:262144},{id:"meta-llama/Llama-3.3-70B-Instruct-Turbo",name:"Llama 3.3 70B Turbo",contextWindow:131072},{id:"Qwen/Qwen3-Coder-480B-A35B-Instruct-FP8",name:"Qwen 3 Coder 480B",contextWindow:131072}]},{id:"siliconflow",label:"SiliconFlow",group:"聚合平台",baseUrl:"https://api.siliconflow.cn/v1",api:"openai-completions",models:[{id:"deepseek-ai/DeepSeek-V3",name:"DeepSeek V3",contextWindow:128e3},{id:"deepseek-ai/DeepSeek-R1",name:"DeepSeek R1",contextWindow:128e3},{id:"Qwen/Qwen3-235B-A22B",name:"Qwen3 235B (MoE)",contextWindow:131072},{id:"moonshotai/Kimi-K2.5",name:"Kimi K2.5",contextWindow:262144},{id:"Pro/deepseek-ai/DeepSeek-V3",name:"DeepSeek V3 (Pro)",contextWindow:128e3}]},{id:"perplexity",label:"Perplexity",group:"聚合平台",baseUrl:"https://api.perplexity.ai",api:"openai-completions",models:[{id:"sonar-pro",name:"Sonar Pro (联网)",contextWindow:2e5},{id:"sonar",name:"Sonar (联网)",contextWindow:127072},{id:"sonar-reasoning-pro",name:"Sonar Reasoning Pro (联网推理)",contextWindow:128e3},{id:"sonar-deep-research",name:"Sonar Deep Research (深度研究)",contextWindow:128e3}]},{id:"deepinfra",label:"DeepInfra",group:"聚合平台",baseUrl:"https://api.deepinfra.com/v1/openai",api:"openai-completions",models:[{id:"deepseek-ai/DeepSeek-V3-0324",name:"DeepSeek V3",contextWindow:131072},{id:"deepseek-ai/DeepSeek-V3.1",name:"DeepSeek V3.1",contextWindow:131072},{id:"deepseek-ai/DeepSeek-R1-0528-Turbo",name:"DeepSeek R1 Turbo",contextWindow:131072},{id:"meta-llama/Llama-3.3-70B-Instruct-Turbo",name:"Llama 3.3 70B Turbo",contextWindow:131072},{id:"Qwen/Qwen3-235B-A22B-Instruct-2507",name:"Qwen 3 235B",contextWindow:131072},{id:"Qwen/Qwen2.5-Coder-32B-Instruct",name:"Qwen 2.5 Coder 32B",contextWindow:32768}]},{id:"nvidia",label:"NVIDIA NIM",group:"聚合平台",baseUrl:"https://integrate.api.nvidia.com/v1",api:"openai-completions",models:[{id:"meta/llama-3.3-70b-instruct",name:"Llama 3.3 70B",contextWindow:131072},{id:"deepseek-ai/deepseek-r1",name:"DeepSeek R1",contextWindow:131072}]},{id:"huggingface",label:"Hugging Face",group:"聚合平台",baseUrl:"https://router.huggingface.co/v1",api:"openai-completions",models:[{id:"meta-llama/Llama-3.3-70B-Instruct",name:"Llama 3.3 70B",contextWindow:131072},{id:"Qwen/Qwen2.5-Coder-32B-Instruct",name:"Qwen 2.5 Coder 32B",contextWindow:32768}]},{id:"novita",label:"Novita AI",group:"聚合平台",baseUrl:"https://api.novita.ai/v3/openai",api:"openai-completions",models:[{id:"deepseek/deepseek-chat-v3-0324",name:"DeepSeek V3",contextWindow:131072},{id:"deepseek/deepseek-r1",name:"DeepSeek R1",contextWindow:131072},{id:"meta-llama/llama-3.3-70b-instruct",name:"Llama 3.3 70B",contextWindow:131072}]},{id:"infini",label:"Infini-AI",group:"聚合平台",baseUrl:"https://cloud.infini-ai.com/maas/v1",api:"openai-completions",models:[{id:"deepseek-ai/DeepSeek-V3",name:"DeepSeek V3",contextWindow:128e3},{id:"deepseek-ai/DeepSeek-R1",name:"DeepSeek R1",contextWindow:128e3}]},{id:"venice",label:"Venice AI",group:"聚合平台",baseUrl:"https://api.venice.ai/api/v1",api:"openai-completions",models:[{id:"kimi-k2-5",name:"Kimi K2.5",contextWindow:262144}]},{id:"vercel-ai-gateway",label:"Vercel AI Gateway",group:"聚合平台",baseUrl:"https://ai-gateway.vercel.sh",api:"anthropic-messages",models:[{id:"anthropic/claude-opus-4.6",name:"Claude Opus 4.6",contextWindow:2e5}]},{id:"synthetic",label:"Synthetic",group:"聚合平台",baseUrl:"https://api.synthetic.new/anthropic",api:"anthropic-messages",models:[{id:"hf:MiniMaxAI/MiniMax-M2.7",name:"MiniMax M2.7",contextWindow:204800},{id:"hf:MiniMaxAI/MiniMax-M2.5",name:"MiniMax M2.5",contextWindow:204800}]},{id:"opencode",label:"OpenCode Zen",group:"聚合平台",baseUrl:"https://opencode.ai/zen/v1",api:"openai-completions",models:[{id:"claude-opus-4-6",name:"Claude Opus 4.6",contextWindow:2e5}]},{id:"ollama",label:"Ollama (本地)",group:"本地部署",baseUrl:"http://127.0.0.1:11434",api:"ollama",local:!0,models:[]},{id:"vllm",label:"vLLM (本地)",group:"本地部署",baseUrl:"http://127.0.0.1:8000/v1",api:"openai-completions",local:!0,models:[]},{id:"sglang",label:"SGLang (本地)",group:"本地部署",baseUrl:"http://127.0.0.1:30000/v1",api:"openai-completions",local:!0,models:[]},{id:"custom",label:"Custom (OpenAI Compatible)",group:"本地部署",baseUrl:"",api:"openai-completions",local:!0,models:[]}];export{e as P};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/HermesChatPanel-mFSureyc.js","assets/index-DQsM6Joa.js","assets/vendor-react-Bk1hRGiY.js","assets/vendor-i18n-ucpM0OR0.js","assets/index-CPhVFEsx.css","assets/HermesConfigForm-DvR05LK1.js","assets/input-paste-CrNVAyOy.js","assets/providers-V-vwrExZ.js","assets/WeixinLoginPanel-CnjR8xMu.js"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{an as s,_ as m,h as c}from"./index-DQsM6Joa.js";import{r as p}from"./vendor-react-Bk1hRGiY.js";const g={openclaw:{installDepSlug:"openclaw",installLabel:"OpenClaw 基础镜像",supportsClone:!0},hermes:{installDepSlug:"hermes",installLabel:"Hermes 运行时",installHint:"首次安装需拉取约 2.4 GB 镜像,大约 5-10 分钟",supportsClone:!1,chatComponent:()=>m(()=>import("./HermesChatPanel-mFSureyc.js"),__vite__mapDeps([0,1,2,3,4])).then(e=>({default:e.HermesChatPanel})),configPanel:()=>m(()=>import("./HermesConfigForm-DvR05LK1.js"),__vite__mapDeps([5,1,2,3,4,6,7,8])).then(e=>({default:e.HermesConfigForm}))}};function f(e){const l=g[e.agentType]??{};return{agentType:e.agentType,displayName:e.displayName,description:e.description,required:e.required,isInstalled:n=>{var o,t,r,i;const a=(o=n==null?void 0:n.runtimes)==null?void 0:o[e.agentType];return a?!!a.installed&&!!a.imageReady:e.agentType==="openclaw"?!!((t=n==null?void 0:n.openclaw)!=null&&t.installed)&&!!(n!=null&&n.dockerImageReady):!!((r=e.installStatus)!=null&&r.installed)&&!!((i=e.installStatus)!=null&&i.imageReady)},installDepSlug:l.installDepSlug??e.agentType,installLabel:l.installLabel??e.displayName,installHint:l.installHint,supportsClone:l.supportsClone??!1,chatComponent:l.chatComponent,configPanel:l.configPanel}}const u=[{agentType:"openclaw",displayName:"OpenClaw",description:"默认 runtime,支持克隆、飞书 / 企业微信插件",required:!0,isInstalled:e=>{var l,n,a;return(n=(l=e==null?void 0:e.runtimes)==null?void 0:l.openclaw)!=null&&n.installed?!!e.runtimes.openclaw.imageReady:!!((a=e==null?void 0:e.openclaw)!=null&&a.installed)&&!!(e!=null&&e.dockerImageReady)},installDepSlug:"openclaw",installLabel:"OpenClaw 基础镜像",supportsClone:!0},{agentType:"hermes",displayName:"Hermes Agent",description:"NousResearch Hermes — Telegram / Discord / Slack / Signal 等 IM 接入",required:!1,isInstalled:e=>{var l,n;return!!((n=(l=e==null?void 0:e.runtimes)==null?void 0:l.hermes)!=null&&n.installed)},installDepSlug:"hermes",installLabel:"Hermes 运行时",installHint:"首次安装需拉取约 2.4 GB 镜像,大约 5-10 分钟",supportsClone:!1,chatComponent:()=>m(()=>import("./HermesChatPanel-mFSureyc.js"),__vite__mapDeps([0,1,2,3,4])).then(e=>({default:e.HermesChatPanel})),configPanel:()=>m(()=>import("./HermesConfigForm-DvR05LK1.js"),__vite__mapDeps([5,1,2,3,4,6,7,8])).then(e=>({default:e.HermesConfigForm}))}];function h(){const[e,l]=p.useState(u),[n,a]=p.useState(!0),[o,t]=p.useState(null);return p.useEffect(()=>{let r=!1;return s().then(i=>{if(r)return;const d=i.adapters.map(f);d.length>0&&l(d)}).catch(i=>{r||t((i==null?void 0:i.message)||"Failed to load runtime catalog")}).finally(()=>{r||a(!1)}),()=>{r=!0}},[]),{runtimes:e,loading:n,error:o}}async function C(e){const l=await c(e.agentType);return{taskId:l==null?void 0:l.taskId}}export{u as F,g as R,C as i,h as u};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r}from"./vendor-react-
|
|
1
|
+
import{r}from"./vendor-react-Bk1hRGiY.js";function i(n,u,c=!0){const s=r.useRef(n);s.current=n;const t=r.useRef(!1),e=r.useCallback(async()=>{if(!t.current){t.current=!0;try{await s.current()}finally{t.current=!1}}},[]);r.useEffect(()=>{if(!c)return;e();const f=setInterval(e,u);return()=>clearInterval(f)},[u,c,e])}export{i as u};
|