Files
skyseek 75e68e2998 feat: 完成终端引擎与消息链路阶段性重构,补齐会话创建与语义派发能力,并修复终端稳定性/输入一致性/UI 状态问题
- 重构终端架构,按 platform/engine/runtime/message_service/ui_gateway/orchestration 分层迁移
- 拆分会话与引擎内部模块(session state、semantic worker、resume poller、timestamps、snapshot)
- 引入 message pipeline 与 semantic stream,补齐平台状态能力
- 补齐会话与扩展能力(skills、create terminal、create user)
- 修复终端关键问题(渲染、attach/resize/webgl 稳定性、屏幕历史、好友删除流程、状态递增与重试、退出覆盖新会话)
- 优化稳定性与性能(队列派发、4 分屏逻辑、低开销模式、语义线程按需创建)
- 修复输入一致性问题(光标不同步、覆盖行)并收敛 UI 状态异常
2026-03-01 20:48:49 +08:00

82 lines
2.8 KiB
HTML

<!DOCTYPE html>
<html lang="en" class="dark" data-theme="dark">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>golutra</title>
<script>
(() => {
const root = document.documentElement;
const themeKey = 'golutra-theme';
const localeKey = 'golutra-locale';
const isValidTheme = (value) => value === 'light' || value === 'dark' || value === 'system';
const isValidLocale = (value) => value === 'en-US' || value === 'zh-CN';
const storedTheme = window.localStorage.getItem(themeKey);
const storedLocale = window.localStorage.getItem(localeKey);
const theme = isValidTheme(storedTheme) ? storedTheme : 'dark';
root.dataset.theme = theme;
const resolvedTheme = theme === 'system'
? (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light')
: theme;
root.dataset.resolvedTheme = resolvedTheme;
root.classList.toggle('dark', resolvedTheme === 'dark');
const locale = isValidLocale(storedLocale) ? storedLocale : (isValidLocale(root.lang) ? root.lang : 'en-US');
root.lang = locale;
window.__GOLUTRA_THEME__ = theme;
window.__GOLUTRA_LOCALE__ = locale;
})();
</script>
<style>
/* Custom Scrollbar */
::-webkit-scrollbar {
width: 6px;
height: 6px;
}
::-webkit-scrollbar-track {
background: transparent;
}
::-webkit-scrollbar-thumb {
background: rgb(var(--scrollbar-thumb));
border-radius: 3px;
}
::-webkit-scrollbar-thumb:hover {
background: rgb(var(--scrollbar-thumb-hover));
}
.glass-panel {
background: rgb(var(--color-panel) / 0.7);
backdrop-filter: blur(12px);
-webkit-backdrop-filter: blur(12px);
border: 1px solid rgb(var(--color-border) / 0.08);
}
.glass-modal {
background: rgb(var(--color-panel-strong) / 0.95);
backdrop-filter: blur(24px);
-webkit-backdrop-filter: blur(24px);
border: 1px solid rgb(var(--color-border) / 0.1);
box-shadow: var(--shadow-modal);
}
.bg-glass-header {
background: rgb(var(--color-panel) / 0.6);
}
.bg-glass-sidebar {
background: transparent;
border-color: transparent;
border-right-color: rgb(var(--color-border) / 0.12);
}
.text-shadow {
text-shadow: 0 1px 2px rgba(0,0,0,0.5);
}
</style>
</head>
<body class="text-white h-screen overflow-hidden selection:bg-primary/30 selection:text-white">
<div id="app"></div>
<script type="module" src="/src/main.ts"></script>
</body>
</html>