feat: add Reasonix session management

This commit is contained in:
liujing
2026-07-16 22:57:45 +08:00
parent 0015774cd4
commit 5118e1f0ab
10 changed files with 644 additions and 12 deletions
+12 -3
View File
@@ -17,7 +17,7 @@
<h1 class="logo-title">智能体观测中心</h1>
<span class="logo-badge">混合引擎</span>
</div>
<p class="logo-sub">Codex · Claude · Agy · OpenCode 协同会话追踪平台</p>
<p class="logo-sub">Codex · Claude · Agy · OpenCode · Reasonix 协同会话追踪平台</p>
</div>
</div>
</div>
@@ -159,6 +159,7 @@ const engineOptions = [
{ key: 'claude', label: 'Claude', icon: '🧠', short: 'Claude' },
{ key: 'agy', label: 'Agy', icon: '⚙', short: 'Agy' },
{ key: 'opencode', label: 'OpenCode', icon: '🔓', short: 'OpenCode' },
{ key: 'reasonix', label: 'Reasonix', icon: '🔍', short: 'Reasonix' },
]
const tabs = [
@@ -416,11 +417,19 @@ code, .mono { font-family: 'SF Mono', 'Fira Code', monospace; }
.footer-addr { font-family: 'SF Mono', monospace; color: var(--accent-light); font-weight: 600; }
.main-content { flex: 1; overflow-y: auto; padding: 24px; min-width: 0; }
.engine-switcher-mobile { display: none; gap: 4px; margin-bottom: 12px; }
.engine-switcher-mobile .engine-btn { flex: 1; justify-content: center; padding: 8px 4px; border-radius: 8px; border: 1px solid var(--border); background: transparent; color: var(--text-muted); font-size: 11px; font-weight: 600; cursor: pointer; }
.engine-switcher-mobile { display: none; gap: 8px; margin-bottom: 12px; overflow-x: auto; padding: 4px; scrollbar-width: none; -webkit-overflow-scrolling: touch; }
.engine-switcher-mobile::-webkit-scrollbar { display: none; }
.engine-switcher-mobile .engine-btn { flex-shrink: 0; justify-content: center; padding: 10px 16px; min-height: 44px; min-width: 80px; border-radius: 8px; border: 1px solid var(--border); background: transparent; color: var(--text-muted); font-size: 11px; font-weight: 600; cursor: pointer; }
.engine-switcher-mobile .engine-btn.active { color: #fff; border: none; }
.sidebar-overlay { display: none; }
@media (max-width: 1200px) {
.logo-sub { display: none; }
}
@media (max-width: 1100px) {
.header-stats { display: none; }
}
@media (max-width: 768px) {
.mobile-menu-btn { display: block; }
.engine-switcher { display: none; }
+1
View File
@@ -117,6 +117,7 @@ export const ENGINE_META = {
claude: { color: '#a855f7', bg: 'rgba(168,85,247,0.1)', label: 'Claude', border: 'rgba(168,85,247,0.2)', icon: '🧠' },
agy: { color: '#10b981', bg: 'rgba(16,185,129,0.1)', label: 'Agy', border: 'rgba(16,185,129,0.2)', icon: '⚙' },
opencode: { color: '#f59e0b', bg: 'rgba(245,158,11,0.1)', label: 'OpenCode', border: 'rgba(245,158,11,0.2)', icon: '🔓' },
reasonix: { color: '#ef4444', bg: 'rgba(239,68,68,0.1)', label: 'Reasonix', border: 'rgba(239,68,68,0.2)', icon: '🔍' },
}
export function getEngineMeta(engine) {
+1 -1
View File
@@ -85,7 +85,7 @@ const sessions = ref([])
const totalSessions = ref(0)
const errorCount = ref(0)
const engineLabel = computed(() => {
const labels = { all: '全部引擎', codex: 'Codex', claude: 'Claude', agy: 'Agy', opencode: 'OpenCode' }
const labels = { all: '全部引擎', codex: 'Codex', claude: 'Claude', agy: 'Agy', opencode: 'OpenCode', reasonix: 'Reasonix' }
return labels[selectedEngine.value] || selectedEngine.value
})
+1 -1
View File
@@ -149,7 +149,7 @@ const maxSessionCount = ref(0)
const engineLabel = computed(() => {
if (selectedEngine.value === 'all') return '全部引擎'
const labels = { codex: 'Codex', claude: 'Claude', agy: 'Agy' }
const labels = { codex: 'Codex', claude: 'Claude', agy: 'Agy', opencode: 'OpenCode', reasonix: 'Reasonix' }
return labels[selectedEngine.value] || selectedEngine.value
})