mirror of
https://github.com/hansjone/oclaw.git
synced 2026-10-09 05:50:44 +08:00
Use a current WA protocol version, start the sidecar via local tsx with inherited proxy, and stop auto-opening the QR UI on unbound connecting. Co-authored-by: Cursor <cursoragent@cursor.com>
161 lines
9.4 KiB
HTML
161 lines
9.4 KiB
HTML
<!doctype html>
|
|
<html lang="zh-CN">
|
|
<head>
|
|
<meta charset="utf-8" />
|
|
<meta name="viewport" content="width=device-width,initial-scale=1" />
|
|
<title>oliver</title>
|
|
<!-- Avoid render-blocking external fonts (can stall first paint ~30s on blocked networks). -->
|
|
<link rel="stylesheet" href="/admin/assets/styles.css?v=20260817-wa12" />
|
|
<link rel="stylesheet" href="/admin/assets/theme-deepseek.css?v=20260817-wa12" />
|
|
<link rel="stylesheet" href="/admin/assets/theme-presets.css?v=20260817-wa12" />
|
|
<style>
|
|
/* First paint before app.js runs: keep admin from showing a blank dark screen. */
|
|
.admin-boot-splash {
|
|
padding: 16px;
|
|
border: 1px solid var(--ds-splash-border, rgba(255, 255, 255, 0.1));
|
|
border-radius: 14px;
|
|
background: var(--ds-splash-bg, rgba(255, 255, 255, 0.04));
|
|
color: var(--ds-text, #e8e8e8);
|
|
line-height: 1.5;
|
|
max-width: 520px;
|
|
}
|
|
.admin-boot-splash__title {
|
|
font-weight: 650;
|
|
display: flex;
|
|
gap: 10px;
|
|
align-items: center;
|
|
margin-bottom: 8px;
|
|
}
|
|
.admin-boot-splash__spinner {
|
|
width: 18px;
|
|
height: 18px;
|
|
border: 2px solid var(--ds-splash-spinner-track, rgba(255, 255, 255, 0.15));
|
|
border-top-color: var(--ds-splash-spinner-active, rgba(255, 255, 255, 0.75));
|
|
border-radius: 999px;
|
|
animation: admin-boot-spin 1s linear infinite;
|
|
flex: 0 0 auto;
|
|
}
|
|
@keyframes admin-boot-spin {
|
|
to {
|
|
transform: rotate(360deg);
|
|
}
|
|
}
|
|
.admin-boot-splash__muted {
|
|
opacity: 0.78;
|
|
font-size: 13px;
|
|
white-space: pre-wrap;
|
|
}
|
|
</style>
|
|
</head>
|
|
<body class="theme-ds-body">
|
|
<script src="/admin/assets/admin-theme.js"></script>
|
|
<div class="layout">
|
|
<aside class="sidebar">
|
|
<div class="brand">
|
|
<div class="brand__logoWrap">
|
|
<img
|
|
class="brand__logo"
|
|
src="/admin/brand-assets/logo.svg"
|
|
alt="site logo"
|
|
onerror="if(!this.dataset.fallback){this.dataset.fallback='1';this.src='/admin/assets/oliver.svg';}"
|
|
/>
|
|
</div>
|
|
</div>
|
|
<nav class="nav">
|
|
<div class="nav__group">
|
|
<div class="nav__groupTitle" data-i18n="nav.group.system">系统与运行</div>
|
|
<a class="nav__item" data-page="stack" href="#/stack" data-i18n="nav.stack">Runtime</a>
|
|
<a class="nav__item" data-page="scheduled-jobs" href="#/scheduled-jobs" data-i18n="nav.scheduledJobs">定时任务</a>
|
|
<a class="nav__item" data-page="workspace-paths" href="#/workspace-paths" data-i18n="nav.workspacePaths">工作区路径</a>
|
|
<a class="nav__item" data-page="attachments" href="#/attachments" data-i18n="nav.attachments">附件</a>
|
|
</div>
|
|
<div class="nav__group">
|
|
<div class="nav__groupTitle" data-i18n="nav.group.models">模型与插件</div>
|
|
<a class="nav__item" data-page="models" href="#/models" data-i18n="nav.models">模型管理</a>
|
|
<a class="nav__item" data-page="plugins" href="#/plugins" data-i18n="nav.plugins">Plugins</a>
|
|
<a class="nav__item" data-page="skills" href="#/skills" data-i18n="nav.skills">Skills</a>
|
|
</div>
|
|
<div class="nav__group">
|
|
<div class="nav__groupTitle" data-i18n="nav.group.governance">治理与审计</div>
|
|
<a class="nav__item" data-page="memory" href="#/memory" data-i18n="nav.memory">Memory</a>
|
|
<a class="nav__item" data-page="audit" href="#/audit" data-i18n="nav.audit">Audit & Trace</a>
|
|
</div>
|
|
<div class="nav__group">
|
|
<div class="nav__groupTitle" data-i18n="nav.group.users">用户与配置</div>
|
|
<a class="nav__item" data-page="users" href="#/users" data-i18n="nav.users">用户管理</a>
|
|
<a class="nav__item" data-page="profile" href="#/profile" data-i18n="nav.profile">设置</a>
|
|
</div>
|
|
</nav>
|
|
<div class="sidebar__footer">
|
|
<div class="muted" data-i18n="notice.noLogin">v1 无登录:请仅在内网访问</div>
|
|
</div>
|
|
</aside>
|
|
<main class="main">
|
|
<header class="topbar">
|
|
<div id="topTitle" class="topbar__title">Runtime</div>
|
|
<div class="topbar__actions">
|
|
<span id="authUser" class="muted"></span>
|
|
<label class="admin-theme-wrap">
|
|
<span class="muted u-fs-12" data-i18n="theme.label">配色</span>
|
|
<select id="adminThemeSelect" class="input input--compact u-theme-select" aria-label="theme">
|
|
<option value="netx" data-i18n="theme.netx">NetX</option>
|
|
<option value="deepseek" data-i18n="theme.deepseek">DeepSeek</option>
|
|
<option value="github" data-i18n="theme.github">GitHub</option>
|
|
<option value="nord" data-i18n="theme.nord">Nord</option>
|
|
<option value="dracula" data-i18n="theme.dracula">Dracula</option>
|
|
<option value="forest" data-i18n="theme.forest">Forest</option>
|
|
<option value="catppuccin" data-i18n="theme.catppuccin">Catppuccin</option>
|
|
<option value="light" data-i18n="theme.light">Light</option>
|
|
</select>
|
|
</label>
|
|
<a id="btnBackChat" class="btn btn--primary" data-i18n="nav.chat" href="chat">对话</a>
|
|
<button id="btnLogout" class="btn btn--ghost" type="button" data-i18n="auth.logout">退出登录</button>
|
|
<button id="btnLang" class="btn btn--ghost" type="button">中文</button>
|
|
<button id="btnRefresh" class="btn btn--ghost" type="button" data-i18n="action.refresh">刷新</button>
|
|
</div>
|
|
</header>
|
|
<section id="content" class="content">
|
|
<div id="admin-boot-splash" class="admin-boot-splash" role="status" aria-live="polite">
|
|
<div class="admin-boot-splash__title">
|
|
<span class="admin-boot-splash__spinner" aria-hidden="true"></span>
|
|
<span data-i18n="boot.loading">正在加载管理台…</span>
|
|
</div>
|
|
<div class="admin-boot-splash__muted" data-i18n="boot.loadingHint">若长时间停留在此,请检查网络/代理是否拦截外部资源。</div>
|
|
</div>
|
|
</section>
|
|
</main>
|
|
</div>
|
|
<!-- Keep in sync with js/asset-v.js ADMIN_ASSET_V. Remaps resolved module URLs so nested imports bust cache. -->
|
|
<script type="importmap">
|
|
{
|
|
"imports": {
|
|
"/admin/assets/app.js": "/admin/assets/app.js?v=20260817-wa12",
|
|
"/admin/assets/js/asset-v.js": "/admin/assets/js/asset-v.js?v=20260817-wa12",
|
|
"/admin/assets/js/core.js": "/admin/assets/js/core.js?v=20260817-wa12",
|
|
"/admin/assets/js/i18n/index.js": "/admin/assets/js/i18n/index.js?v=20260817-wa12",
|
|
"/admin/assets/js/i18n/messages-en.js": "/admin/assets/js/i18n/messages-en.js?v=20260817-wa12",
|
|
"/admin/assets/js/i18n/messages-zh.js": "/admin/assets/js/i18n/messages-zh.js?v=20260817-wa12",
|
|
"/admin/assets/js/main.js": "/admin/assets/js/main.js?v=20260817-wa12",
|
|
"/admin/assets/js/pages/attachments.js": "/admin/assets/js/pages/attachments.js?v=20260817-wa12",
|
|
"/admin/assets/js/pages/audit.js": "/admin/assets/js/pages/audit.js?v=20260817-wa12",
|
|
"/admin/assets/js/pages/authz.js": "/admin/assets/js/pages/authz.js?v=20260817-wa12",
|
|
"/admin/assets/js/pages/legacy-admin.js": "/admin/assets/js/pages/legacy-admin.js?v=20260817-wa12",
|
|
"/admin/assets/js/pages/legacy.js": "/admin/assets/js/pages/legacy.js?v=20260817-wa12",
|
|
"/admin/assets/js/pages/login.js": "/admin/assets/js/pages/login.js?v=20260817-wa12",
|
|
"/admin/assets/js/pages/memory.js": "/admin/assets/js/pages/memory.js?v=20260817-wa12",
|
|
"/admin/assets/js/pages/models.js": "/admin/assets/js/pages/models.js?v=20260817-wa12",
|
|
"/admin/assets/js/pages/plugins.js": "/admin/assets/js/pages/plugins.js?v=20260817-wa12",
|
|
"/admin/assets/js/pages/profile.js": "/admin/assets/js/pages/profile.js?v=20260817-wa12",
|
|
"/admin/assets/js/pages/scheduled-jobs.js": "/admin/assets/js/pages/scheduled-jobs.js?v=20260817-wa12",
|
|
"/admin/assets/js/pages/skills.js": "/admin/assets/js/pages/skills.js?v=20260817-wa12",
|
|
"/admin/assets/js/pages/stack.js": "/admin/assets/js/pages/stack.js?v=20260817-wa12",
|
|
"/admin/assets/js/pages/users.js": "/admin/assets/js/pages/users.js?v=20260817-wa12",
|
|
"/admin/assets/js/pages/workspace-paths.js": "/admin/assets/js/pages/workspace-paths.js?v=20260817-wa12",
|
|
"/admin/assets/js/router.js": "/admin/assets/js/router.js?v=20260817-wa12",
|
|
"/admin/assets/js/state.js": "/admin/assets/js/state.js?v=20260817-wa12"
|
|
}
|
|
}
|
|
</script>
|
|
<script type="module" src="/admin/assets/app.js?v=20260817-wa12" onerror="(function(){var lang='zh';try{lang=String(localStorage.getItem('ops_admin_lang')||'zh').toLowerCase();}catch(e){}if(lang!=='en')lang='zh';var msg=lang==='en'?{t:'Failed to load admin scripts',h:'Confirm /admin/assets/app.js and /admin/assets/js/ are reachable.'}:{t:'无法加载管理台脚本',h:'请确认 /admin/assets/app.js 与 /admin/assets/js/ 可访问。'};var s=document.getElementById('admin-boot-splash');if(s){var a=s.querySelector('.admin-boot-splash__title span:last-child');var b=s.querySelector('.admin-boot-splash__muted');if(a)a.textContent=msg.t;if(b)b.textContent=msg.h;}})()"></script>
|
|
</body>
|
|
</html>
|