Files
2026-08-21 16:00:13 +08:00

986 lines
107 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!doctype html>
<html lang="zh-CN" data-theme="dark">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>魂镜 · 司命台(融合稿)</title>
<link rel="stylesheet" href="tokens.css" />
<link rel="stylesheet" href="_base.css" />
<link rel="stylesheet" href="_chrome.css" />
<style>
/* ============================================================
* 铜镜鉴心 v2.3 — 司命台完整预览(单文件多视图)
*
* 文档基准:docs/product/master-prd.md §2-§5
* · 铜镜四态 = MirrorState 健康度(void/breathing/steady/cracked),§2.3
* · 三签分层:星盘(空间·主角)/ 朱批(动作)/ 起居注(时间),§3
* · 司命台独立壳层(AdminShell 横向导航),§4
*
* 视图(data-view):overview / users / tenants / audit / traces /
* goal(太一) / percept(烛照) / world(河图) / plan(洛书) / agents(天工阁)
* 枚举与字段对齐 src/lib/constants/labels.ts 与 src/types/api.ts
* ============================================================ */
/* ── 司命台独立壳层:顶部横向导航 ── */
.admin-shell { display: flex; flex-direction: column; min-height: 100vh; }
.topbar { position: sticky; top: 0; z-index: 30; display: flex; align-items: center; gap: 10px; padding: 10px 28px; border-bottom: 1px solid var(--rule); background: var(--surface); backdrop-filter: blur(16px) saturate(140%); flex-wrap: wrap; }
.topbar-brand { font-family: "Songti SC", serif; font-size: 17px; font-weight: 700; letter-spacing: 0.06em; color: var(--fg); display: flex; align-items: center; gap: 7px; flex-shrink: 0; cursor: pointer; }
.topbar-brand .knob { width: 16px; height: 16px; }
.topbar-brand .knob circle:last-child { fill: var(--cinnabar); }
.topbar-sep { color: var(--fg-faint); opacity: 0.5; flex-shrink: 0; }
.topbar-nav { display: flex; align-items: center; gap: 1px; flex-wrap: wrap; }
.topbar-navitem { display: inline-flex; align-items: center; gap: 6px; padding: 5px 11px; border-radius: 8px; font-size: 13px; font-weight: 500; color: var(--muted); text-decoration: none; transition: background 0.12s, color 0.12s; cursor: pointer; background: none; border: none; font-family: inherit; }
.topbar-navitem:hover { background: var(--overlay-hover); color: var(--fg); }
.topbar-navitem.active { background: var(--patina-wash); color: var(--patina); }
.topbar-navitem.pivot { font-size: 12px; padding: 4px 9px; }
.topbar-spacer { flex: 1; }
.topbar-back { display: inline-flex; align-items: center; gap: 5px; padding: 5px 10px; border-radius: 8px; font-size: 12px; color: var(--muted); text-decoration: none; transition: background 0.12s, color 0.12s; background: none; border: none; cursor: pointer; font-family: inherit; }
.topbar-back:hover { background: var(--overlay-hover); color: var(--fg); }
/* ── 视图与页头 ── */
main { flex: 1; display: flex; flex-direction: column; min-height: 0; }
.view { display: none; flex: 1; flex-direction: column; min-height: 0; }
.view.active { display: flex; }
.page-header .spacer { flex: 1; }
.header-badge { display: inline-flex; align-items: center; gap: 6px; font-family: "JetBrains Mono", monospace; font-size: 11.5px; padding: 4px 12px; border-radius: 999px; border: 1px solid var(--patina-dim); color: var(--patina); background: var(--patina-wash); }
.header-badge.cracked { border-color: var(--cinnabar-dim); color: var(--cinnabar); background: var(--cinnabar-wash); }
.header-badge.gilt { border-color: var(--gilt-dim); color: var(--gilt); background: var(--gilt-faint); }
.view-body { flex: 1; padding: 16px 28px 48px; display: flex; flex-direction: column; gap: 22px; max-width: 1180px; width: 100%; overflow-y: auto; }
.section-label .sub { font-size: 12px; letter-spacing: 0.04em; color: var(--fg-dim); opacity: 0.75; }
.section-label .glyph { color: var(--cinnabar); opacity: 0.85; }
.section-heading { font-family: "Songti SC", serif; font-size: 14px; font-weight: 600; color: var(--fg); margin-bottom: 12px; display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.section-heading .sub { font-size: 12px; font-weight: 400; color: var(--fg-dim); margin-left: 6px; }
.section-heading .glyph { color: var(--cinnabar); opacity: 0.85; }
/* ── 朱批告警条 ── */
.alert-bar { display: flex; align-items: center; gap: 12px; border-radius: 12px; padding: 13px 18px; border: 1px solid var(--rule); background: var(--surface); text-decoration: none; color: inherit; transition: background 0.12s; }
.alert-bar:hover { background: var(--surface-hi); }
.alert-bar.cracked { border-color: var(--cinnabar-dim); background: var(--cinnabar-wash); }
.alert-dot { width: 9px; height: 9px; border-radius: 50%; flex-shrink: 0; background: var(--patina); }
.alert-bar.cracked .alert-dot { background: var(--cinnabar); box-shadow: 0 0 0 4px var(--cinnabar-wash); }
.alert-text { font-size: 14px; font-weight: 500; color: var(--patina); }
.alert-bar.cracked .alert-text { color: var(--cinnabar); }
.alert-bar .spacer { flex: 1; }
.alert-cta { font-size: 12px; color: var(--fg-dim); padding: 4px 10px; border-radius: 7px; border: 1px solid var(--rule); }
.alert-meta { font-family: "JetBrains Mono", monospace; font-size: 11.5px; color: var(--fg-faint); }
/* ── 星盘 hero + 枢速览 ── */
.hero-grid { display: grid; grid-template-columns: minmax(0, 22rem) 1fr; gap: 18px; }
.astrolabe-card { border: 1px solid var(--rule); border-radius: 14px; background: var(--surface); padding: 16px; display: flex; flex-direction: column; align-items: center; gap: 10px; }
.astrolabe { width: 100%; max-width: 312px; height: auto; }
.astrolabe-ring { stroke: var(--gilt); stroke-width: 1.2; fill: none; stroke-opacity: 0.5; }
.astrolabe-ring-fine { stroke: var(--gilt-dim); stroke-width: 0.6; fill: none; }
.astrolabe-ring-patina { stroke: var(--patina-dim); stroke-width: 0.6; fill: none; }
.astrolabe-tick { stroke: var(--gilt); stroke-width: 3; fill: none; stroke-opacity: 0.32; animation: sm-breathe 7s ease-in-out infinite; }
.astrolabe-core-glow { animation: sm-breathe 4.5s ease-in-out infinite; transform-box: fill-box; transform-origin: center; }
.astrolabe-spoke { stroke: var(--gilt-dim); stroke-width: 0.6; stroke-opacity: 0.55; }
.astrolabe-core-glyph { font-family: "Songti SC", serif; font-size: 16px; font-weight: 600; fill: var(--gilt); }
.astrolabe-core-label { font-family: "JetBrains Mono", monospace; font-size: 7px; fill: var(--gilt); letter-spacing: 0.12em; opacity: 0.7; }
.astrolabe-pivot-label { font-family: "Songti SC", serif; font-size: 13px; font-weight: 500; fill: var(--fg); }
.astrolabe-pivot-sub { font-family: "JetBrains Mono", monospace; font-size: 8px; fill: var(--fg-faint); letter-spacing: 0.06em; }
.astrolabe-orbit { animation: sm-spin 120s linear infinite; transform-box: fill-box; transform-origin: center; }
.astrolabe-alert { animation: sm-alert 1.8s ease-in-out infinite; transform-box: fill-box; transform-origin: center; }
.astrolabe-legend { display: flex; flex-wrap: wrap; justify-content: center; gap: 10px 14px; font-family: "JetBrains Mono", monospace; font-size: 10.5px; color: var(--fg-faint); }
.astrolabe-legend .lg { display: inline-flex; align-items: center; gap: 5px; }
.astrolabe-legend .lg::before { content: ""; width: 8px; height: 8px; border-radius: 50%; }
.astrolabe-legend .lg.steady::before { background: var(--patina); }
.astrolabe-legend .lg.breathing::before { background: var(--gilt); }
.astrolabe-legend .lg.cracked::before { background: var(--cinnabar); }
.astrolabe-legend .lg.void::before { background: transparent; border: 1.5px solid var(--fg-faint); }
.health-list { border: 1px solid var(--rule); border-radius: 14px; background: var(--surface); overflow: hidden; }
.health-item { display: grid; grid-template-columns: 3px 1fr auto; gap: 14px; align-items: center; padding: 10px 16px; border-bottom: 1px solid var(--rule); text-decoration: none; transition: background 0.12s; cursor: pointer; background: none; border-left: none; border-right: none; border-top: none; font-family: inherit; text-align: left; width: 100%; color: inherit; }
.health-item:last-child { border-bottom: none; }
.health-item:hover { background: var(--overlay-hover); }
.health-bar { width: 3px; height: 26px; border-radius: 0 2px 2px 0; }
.health-bar.steady { background: var(--patina); }
.health-bar.breathing { background: var(--gilt); }
.health-bar.cracked { background: var(--cinnabar); }
.health-bar.void { background: var(--fg-faint); opacity: 0.4; }
.health-main { min-width: 0; }
.health-name { font-family: "Songti SC", serif; font-size: 14px; font-weight: 600; color: var(--fg); }
.health-name .eng { font-family: "JetBrains Mono", monospace; font-size: 10px; color: var(--fg-faint); margin-left: 6px; font-weight: 400; }
.health-summary { font-size: 12px; color: var(--fg-dim); margin-top: 1px; }
.health-badge { display: inline-flex; align-items: center; gap: 6px; font-size: 12px; font-weight: 500; }
.health-badge .dot { width: 7px; height: 7px; border-radius: 50%; }
.health-badge.steady { color: var(--patina); } .health-badge.steady .dot { background: var(--patina); }
.health-badge.breathing { color: var(--gilt); } .health-badge.breathing .dot { background: var(--gilt); }
.health-badge.cracked { color: var(--cinnabar); } .health-badge.cracked .dot { background: var(--cinnabar); }
.health-badge.void { color: var(--fg-faint); } .health-badge.void .dot { background: transparent; border: 1.5px solid var(--fg-faint); }
/* ── 三签概览卡 ── */
.seals-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; }
.seal-card { border: 1px solid var(--rule); border-radius: 12px; background: var(--surface); padding: 16px 18px; position: relative; overflow: hidden; text-decoration: none; color: inherit; transition: background 0.14s, border-color 0.14s; cursor: pointer; display: block; }
.seal-card:hover { background: var(--surface-hi); border-color: var(--gilt-dim); }
.seal-card::before { content: ""; position: absolute; left: 0; top: 16px; bottom: 16px; width: 3px; border-radius: 0 2px 2px 0; }
.seal-card.starmap::before { background: var(--patina); }
.seal-card.vermilion::before { background: var(--cinnabar); }
.seal-card.imperial::before { background: var(--gilt); }
.seal-dim { font-family: "JetBrains Mono", monospace; font-size: 10px; letter-spacing: 0.1em; text-transform: uppercase; color: var(--fg-faint); margin-bottom: 6px; }
.seal-head { display: flex; align-items: baseline; gap: 8px; margin-bottom: 2px; }
.seal-name { font-family: "Songti SC", serif; font-size: 16px; font-weight: 600; color: var(--fg); }
.seal-eng { font-family: "JetBrains Mono", monospace; font-size: 10.5px; }
.seal-card.starmap .seal-eng { color: var(--patina); }
.seal-card.vermilion .seal-eng { color: var(--cinnabar); }
.seal-card.imperial .seal-eng { color: var(--gilt); }
.seal-role { font-size: 12px; color: var(--fg-faint); margin-bottom: 12px; }
.seal-metric { display: flex; align-items: baseline; gap: 6px; }
.seal-metric .num { font-family: "JetBrains Mono", monospace; font-size: 28px; font-weight: 600; color: var(--fg); line-height: 1; }
.seal-metric .unit { font-size: 11.5px; color: var(--fg-faint); }
.seal-foot { font-size: 11.5px; color: var(--fg-dim); margin-top: 10px; padding-top: 10px; border-top: 1px solid var(--rule); display: flex; justify-content: space-between; align-items: center; }
.seal-foot .go { font-family: "JetBrains Mono", monospace; color: var(--fg-faint); }
/* ── 通用:工具条 / 表格 / 徽章 / 按钮 / 统计卡 ── */
.toolbar { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; }
.search { flex: 1; min-width: 180px; padding: 7px 13px; border-radius: 8px; border: 1px solid var(--rule); background: var(--surface); color: var(--fg); font-size: 13px; font-family: inherit; }
.search::placeholder { color: var(--fg-faint); }
.btn-danger { border-color: var(--cinnabar-dim); background: var(--cinnabar-wash); color: var(--cinnabar); }
.icon-btn { padding: 4px 10px; font-size: 12px; border-radius: 7px; border: 1px solid var(--rule); background: transparent; color: var(--fg-dim); cursor: pointer; font-family: inherit; }
.icon-btn:hover { background: var(--overlay-hover); color: var(--fg); }
.panel { border: 1px solid var(--rule); border-radius: 12px; background: var(--surface); overflow: hidden; }
.data-table { width: 100%; border-collapse: collapse; font-size: 13px; }
.data-table th { font-family: "JetBrains Mono", monospace; font-size: 10.5px; text-transform: uppercase; letter-spacing: 0.06em; color: var(--fg-faint); font-weight: 600; background: var(--surface-hi); padding: 11px 16px; text-align: left; }
.data-table td { padding: 12px 16px; border-bottom: 1px solid var(--rule); color: var(--fg-dim); vertical-align: middle; }
.data-table tr:last-child td { border-bottom: none; }
.data-table tbody tr { transition: background 0.1s; }
.data-table tbody tr:hover { background: var(--overlay-hover); }
.td-strong { color: var(--fg); font-weight: 500; }
.td-mono { font-family: "JetBrains Mono", monospace; font-size: 12px; color: var(--fg-dim); }
.td-actions { text-align: right; white-space: nowrap; }
.pill { display: inline-flex; align-items: center; gap: 5px; font-size: 11px; padding: 2px 9px; border-radius: 999px; border: 1px solid var(--rule); color: var(--fg-dim); font-family: "JetBrains Mono", monospace; white-space: nowrap; }
.pill::before { content: ""; width: 6px; height: 6px; border-radius: 50%; background: currentColor; }
.pill.patina { color: var(--patina); border-color: var(--patina-dim); background: var(--patina-wash); }
.pill.gilt { color: var(--gilt); border-color: var(--gilt-dim); background: var(--gilt-faint); }
.pill.cinnabar { color: var(--cinnabar); border-color: var(--cinnabar-dim); background: var(--cinnabar-wash); }
.pill.faint { color: var(--fg-faint); }
.pill.solid { font-family: "Songti SC", serif; font-size: 12px; }
.stat-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 12px; }
.stat-card { border: 1px solid var(--rule); border-radius: 12px; background: var(--surface); padding: 14px 16px; }
.stat-card .num { font-family: "JetBrains Mono", monospace; font-size: 24px; font-weight: 600; color: var(--fg); line-height: 1.1; }
.stat-card .num.cinnabar { color: var(--cinnabar); }
.stat-card .num.gilt { color: var(--gilt); }
.stat-card .label { font-size: 11.5px; color: var(--fg-faint); margin-top: 4px; }
.progress { width: 64px; height: 5px; border-radius: 999px; background: var(--surface-hi); overflow: hidden; display: inline-block; vertical-align: middle; }
.progress > div { height: 100%; background: var(--patina); border-radius: 999px; }
.progress.gilt > div { background: var(--gilt); }
.progress.cinnabar > div { background: var(--cinnabar); }
.empty { padding: 40px 20px; text-align: center; font-size: 13px; color: var(--fg-faint); }
/* ── 起居注时间河 ── */
.chip-row { display: flex; gap: 6px; flex-wrap: wrap; }
.chip { padding: 5px 13px; border-radius: 999px; border: 1px solid var(--rule); font-size: 12px; color: var(--fg-dim); cursor: pointer; background: var(--surface); font-family: inherit; transition: background 0.12s, color 0.12s; }
.chip:hover { background: var(--overlay-hover); color: var(--fg); }
.chip.active { border-color: var(--patina-dim); color: var(--patina); background: var(--patina-wash); }
.chapter { margin-top: 4px; }
.chapter-head { display: flex; align-items: center; gap: 14px; margin-bottom: 6px; margin-top: 14px; }
.chapter-head .line { flex: 1; height: 1px; background: var(--gilt-dim); }
.chapter-head .t { font-family: "Songti SC", serif; font-size: 14px; letter-spacing: 0.1em; color: var(--gilt); }
.river-item { display: grid; grid-template-columns: 70px 1fr auto; gap: 14px; padding: 9px 0 9px 20px; border-left: 1px solid var(--gilt-dim); margin-left: 8px; align-items: start; }
.river-time { font-family: "JetBrains Mono", monospace; font-size: 11px; color: var(--fg-faint); }
.river-body { font-size: 13px; color: var(--fg-dim); line-height: 1.5; }
.river-body .em { color: var(--fg); font-family: "JetBrains Mono", monospace; font-size: 12px; }
.river-body .actor { color: var(--fg); font-weight: 500; }
.river-trace { font-family: "JetBrains Mono", monospace; font-size: 10.5px; color: var(--fg-faint); align-self: center; }
/* ── 链路追踪 ── */
.trace-layout { display: grid; grid-template-columns: 340px 1fr; gap: 16px; }
.trace-item { display: grid; grid-template-columns: 1fr auto; gap: 8px; padding: 11px 16px; border-bottom: 1px solid var(--rule); cursor: pointer; transition: background 0.1s; }
.trace-item:last-child { border-bottom: none; }
.trace-item:hover { background: var(--overlay-hover); }
.trace-item.active { background: var(--patina-wash); border-left: 3px solid var(--patina); padding-left: 13px; }
.trace-id { font-family: "JetBrains Mono", monospace; font-size: 12px; color: var(--fg); }
.trace-meta { font-size: 11.5px; color: var(--fg-faint); margin-top: 2px; }
.tl-event { display: grid; grid-template-columns: 86px auto 1fr; gap: 12px; padding: 8px 0 8px 16px; border-left: 1.5px solid var(--gilt-dim); margin-left: 6px; }
.tl-event.tool { border-left-color: var(--patina-dim); }
.tl-event.safety { border-left-color: var(--cinnabar-dim); }
.tl-ts { font-family: "JetBrains Mono", monospace; font-size: 11px; color: var(--fg-faint); }
.tl-type { font-family: "JetBrains Mono", monospace; font-size: 11px; }
.tl-type.tool { color: var(--patina); }
.tl-type.safety { color: var(--cinnabar); }
.tl-type.llm { color: var(--gilt); }
.tl-desc { font-size: 12.5px; color: var(--fg-dim); }
.tl-desc .em { color: var(--fg); font-family: "JetBrains Mono", monospace; font-size: 11.5px; }
/* ── 目标树 ── */
.tree { padding: 6px; }
.tree-node { display: grid; grid-template-columns: 1fr auto auto auto; gap: 12px; align-items: center; padding: 9px 12px; border-radius: 8px; transition: background 0.1s; }
.tree-node:hover { background: var(--overlay-hover); }
.tree-title { font-size: 13.5px; color: var(--fg); }
.tree-title .lv { font-family: "JetBrains Mono", monospace; font-size: 9.5px; color: var(--fg-faint); margin-right: 8px; letter-spacing: 0.05em; }
.tree-meta { font-size: 11.5px; color: var(--fg-faint); }
/* ── 天工阁角色卡 ── */
.role-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(230px, 1fr)); gap: 12px; }
.role-card { border: 1px solid var(--rule); border-radius: 12px; background: var(--surface); padding: 16px; }
.role-card .head { display: flex; align-items: center; gap: 11px; margin-bottom: 10px; }
.role-card .avatar { width: 38px; height: 38px; border-radius: 50%; background: var(--patina-wash); border: 1px solid var(--patina-dim); display: flex; align-items: center; justify-content: center; font-family: "Songti SC", serif; color: var(--patina); font-size: 16px; flex-shrink: 0; }
.role-card.idle .avatar { background: var(--surface-hi); border-color: var(--rule); color: var(--fg-faint); }
.role-card.disabled { opacity: 0.5; }
.role-name { font-family: "Songti SC", serif; font-size: 15px; font-weight: 600; color: var(--fg); }
.role-eng { font-family: "JetBrains Mono", monospace; font-size: 10px; color: var(--fg-faint); }
.role-resp { font-size: 12px; color: var(--fg-dim); line-height: 1.5; min-height: 36px; }
.role-foot { display: flex; align-items: center; justify-content: space-between; margin-top: 10px; padding-top: 10px; border-top: 1px solid var(--rule); }
.role-task { font-size: 11.5px; color: var(--fg-faint); font-family: "JetBrains Mono", monospace; }
@media (max-width: 1000px) { .hero-grid { grid-template-columns: 1fr; } .seals-grid { grid-template-columns: 1fr; } .trace-layout { grid-template-columns: 1fr; } }
@media (max-width: 768px) { .view-body { padding: 14px 16px 40px; } .data-table { display: block; overflow-x: auto; white-space: nowrap; } .river-item { grid-template-columns: 1fr; gap: 3px; } }
@keyframes sm-spin { to { transform: rotate(360deg); } }
@keyframes sm-alert { 0%, 100% { opacity: 0.7; } 50% { opacity: 0.1; } }
@keyframes sm-breathe { 0%, 100% { opacity: 0.55; } 50% { opacity: 1; } }
/* ── 朱批裁定卡(司命枢)── */
.vermilion-stack { display: flex; flex-direction: column; gap: 10px; }
.vermilion-card { position: relative; border: 1px solid var(--cinnabar-dim); border-left: 3px solid var(--cinnabar); border-radius: 12px; background: linear-gradient(90deg, var(--cinnabar-wash), var(--surface) 42%); padding: 14px 16px; }
.vermilion-card.decided { border-color: var(--rule); border-left-color: var(--patina-dim); background: var(--surface); opacity: 0.72; }
.vc-head { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin-bottom: 6px; }
.vc-stamp { font-family: "Songti SC", serif; font-size: 12.5px; font-weight: 700; letter-spacing: 0.06em; color: var(--cinnabar); }
.vc-stamp.done { color: var(--patina); }
.vc-tool { font-family: "JetBrains Mono", monospace; font-size: 13px; font-weight: 600; color: var(--fg); }
.vc-policy { font-size: 11px; color: var(--fg-faint); }
.vc-risk { margin-left: auto; font-family: "JetBrains Mono", monospace; font-size: 10px; letter-spacing: 0.08em; color: var(--cinnabar); border: 1px solid var(--cinnabar-dim); padding: 2px 7px; border-radius: 5px; }
.vc-summary { font-size: 13px; color: var(--fg); line-height: 1.55; margin: 0; }
.vc-impact { font-size: 11.5px; color: var(--fg-dim); margin: 4px 0 0; }
.vc-actions { display: flex; gap: 8px; margin-top: 11px; }
code { font-family: "JetBrains Mono", monospace; font-size: 0.92em; color: var(--fg); background: var(--surface-hi); padding: 1px 5px; border-radius: 4px; }
/* ── 策略矩阵 / 路由 select pill ── */
.select-pill { display: inline-flex; align-items: center; gap: 5px; font-family: "JetBrains Mono", monospace; font-size: 11px; padding: 3px 10px; border-radius: 6px; border: 1px solid var(--rule); background: var(--surface-hi); color: var(--fg-dim); cursor: pointer; white-space: nowrap; }
.select-pill::after { content: "▾"; font-size: 8px; opacity: 0.6; }
.select-pill.patina { color: var(--patina); border-color: var(--patina-dim); background: var(--patina-wash); }
.select-pill.gilt { color: var(--gilt); border-color: var(--gilt-dim); background: var(--gilt-faint); }
.select-pill.cinnabar { color: var(--cinnabar); border-color: var(--cinnabar-dim); background: var(--cinnabar-wash); }
/* ── 百工枢 tabs ── */
.tabstrip { display: flex; gap: 2px; border-bottom: 1px solid var(--rule); margin-bottom: 4px; flex-wrap: wrap; }
.tab { padding: 8px 16px; font-size: 13px; font-weight: 500; color: var(--fg-dim); background: none; border: none; border-bottom: 2px solid transparent; cursor: pointer; font-family: inherit; margin-bottom: -1px; transition: color 0.12s; display: inline-flex; align-items: center; gap: 7px; }
.tab:hover { color: var(--fg); }
.tab.active { color: var(--patina); border-bottom-color: var(--patina); }
.tab .count { font-family: "JetBrains Mono", monospace; font-size: 10px; color: var(--fg-faint); background: var(--surface-hi); padding: 1px 6px; border-radius: 999px; }
.tab.active .count { color: var(--patina); background: var(--patina-wash); }
.tab-panel { display: none; }
.tab-panel.active { display: block; }
.svc-row { display: grid; grid-template-columns: 1fr auto auto auto; gap: 12px; align-items: center; padding: 11px 16px; border-bottom: 1px solid var(--rule); }
.svc-row:last-child { border-bottom: none; }
.svc-name { font-family: "JetBrains Mono", monospace; font-size: 13px; color: var(--fg); }
.svc-desc { font-size: 11.5px; color: var(--fg-faint); margin-top: 1px; }
/* ── 灵核 inline 编辑 ── */
.field-card { border: 1px solid var(--rule); border-radius: 12px; background: var(--surface); overflow: hidden; }
.field-row { display: grid; grid-template-columns: 124px 1fr auto; gap: 14px; align-items: center; padding: 13px 18px; border-bottom: 1px solid var(--rule); }
.field-row:last-child { border-bottom: none; }
.field-label { font-family: "JetBrains Mono", monospace; font-size: 11px; letter-spacing: 0.06em; color: var(--fg-faint); text-transform: uppercase; }
.field-value { font-size: 13.5px; color: var(--fg); line-height: 1.5; }
.field-value.mono { font-family: "JetBrains Mono", monospace; font-size: 12.5px; }
.field-row.core .field-label { color: var(--cinnabar); }
.field-tag { font-size: 10px; color: var(--cinnabar); border: 1px solid var(--cinnabar-dim); background: var(--cinnabar-wash); padding: 2px 8px; border-radius: 999px; font-family: "JetBrains Mono", monospace; white-space: nowrap; }
.trait-chips { display: flex; flex-wrap: wrap; gap: 6px; }
.trait { font-size: 12px; padding: 3px 11px; border-radius: 999px; background: var(--patina-wash); border: 1px solid var(--patina-dim); color: var(--patina); }
/* ── 模型治理 能力槽位 ── */
.slot-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(210px, 1fr)); gap: 12px; }
.slot-card { border: 1px solid var(--rule); border-radius: 12px; background: var(--surface); padding: 14px 16px; }
.slot-card .slot-cap { font-family: "JetBrains Mono", monospace; font-size: 10px; letter-spacing: 0.08em; text-transform: uppercase; color: var(--fg-faint); }
.slot-card .slot-model { font-family: "Songti SC", serif; font-size: 15px; font-weight: 600; color: var(--fg); margin-top: 5px; }
.slot-card .slot-route { font-size: 11.5px; color: var(--fg-dim); margin-top: 3px; }
.slot-card.empty { border-style: dashed; }
.slot-card.empty .slot-model { color: var(--fg-faint); font-style: italic; }
/* ── 预留条 + disabled nav ── */
.reserved-banner { display: flex; align-items: flex-start; gap: 11px; border-radius: 12px; padding: 13px 18px; border: 1px dashed var(--gilt-dim); background: var(--gilt-faint); color: var(--fg-dim); font-size: 13px; line-height: 1.65; }
.reserved-banner .rb-icon { flex-shrink: 0; width: 18px; height: 18px; color: var(--gilt); margin-top: 1px; }
.reserved-banner strong { color: var(--gilt); font-family: "Songti SC", serif; letter-spacing: 0.04em; }
.topbar-navitem.disabled { color: var(--fg-faint); }
.topbar-navitem.disabled:hover { background: var(--overlay-hover); color: var(--fg-dim); }
.topbar-navitem.disabled.active { color: var(--gilt); background: var(--gilt-faint); }
.nav-tag { font-family: "JetBrains Mono", monospace; font-size: 9px; letter-spacing: 0.06em; color: var(--gilt); border: 1px solid var(--gilt-dim); padding: 1px 5px; border-radius: 4px; margin-left: 5px; }
/* ── 焦点可见(§7 键盘可达)── */
.topbar-navitem:focus-visible, .btn:focus-visible, .icon-btn:focus-visible, .chip:focus-visible, .tab:focus-visible, .health-item:focus-visible, .select-pill:focus-visible, .seal-card:focus-visible { outline: 2px solid var(--patina); outline-offset: 2px; }
.siming { color: var(--cinnabar); }
</style>
</head>
<body>
<div class="app-shell">
<div class="sidebar-mount" data-active="司命台"></div>
<div class="main-area">
<div class="admin-shell">
<!-- ════════ 壳层(data-view 切换视图)════════ -->
<header class="topbar">
<span class="topbar-brand" data-view="overview">
<svg class="knob" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="8.5" /><circle cx="12" cy="12" r="4.5" opacity="0.45" /><circle cx="12" cy="12" r="1.6" stroke="none" /></svg>
司命台
</span>
<span class="topbar-sep">/</span>
<nav class="topbar-nav" aria-label="司命治理">
<button class="topbar-navitem active" data-view="overview">概览</button>
<button class="topbar-navitem" data-view="audit">起居注</button>
<button class="topbar-navitem" data-view="traces">链路追踪</button>
<button class="topbar-navitem" data-view="models">模型治理</button>
<button class="topbar-navitem disabled" data-view="users">用户管理<span class="nav-tag">预留</span></button>
<button class="topbar-navitem disabled" data-view="tenants">多租户<span class="nav-tag">预留</span></button>
</nav>
<span class="topbar-sep">|</span>
<nav class="topbar-nav" aria-label="九枢">
<button class="topbar-navitem pivot" data-view="core">灵核</button>
<button class="topbar-navitem pivot" data-view="goal">太一</button>
<button class="topbar-navitem pivot" data-view="safety">司命</button>
<button class="topbar-navitem pivot" data-view="percept">烛照</button>
<button class="topbar-navitem pivot" data-view="world">河图</button>
<button class="topbar-navitem pivot" data-view="plan">洛书</button>
<button class="topbar-navitem pivot" data-view="memory">息壤</button>
<button class="topbar-navitem pivot" data-view="tools">百工</button>
<button class="topbar-navitem pivot" data-view="agents">天工阁</button>
</nav>
<span class="topbar-spacer"></span>
<a class="topbar-back" href="chat-redesign-preview.html" title="返回主域">
<svg width="12" height="12" viewBox="0 0 16 16" fill="none"><path d="M10 4l-4 4 4 4" stroke="currentColor" stroke-width="1.4" stroke-linecap="round" stroke-linejoin="round" /></svg>
主域
</a>
<button class="topbar-back" type="button" onclick="toggleTheme()">
<svg width="13" height="13" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linecap="round"><circle cx="8" cy="8" r="3" /><path d="M8 1v2M8 13v2M2 8h2M12 8h2M3.5 3.5l1.5 1.5M11 11l1.5 1.5M3.5 12.5l1.5-1.5M11 5l1.5-1.5" /></svg>
<span id="theme-label">夜铜</span>
</button>
</header>
<main>
<!-- ════════ ① 概览 ════════ -->
<section id="view-overview" class="view active">
<div class="page-header">
<span class="page-title">概览</span>
<span class="page-sub">siming · 安全治理中枢</span>
<span class="spacer"></span>
<span class="header-badge cracked">● 2 项待裁定</span>
</div>
<div class="view-body">
<button class="alert-bar cracked" data-view="safety" style="border:none;width:100%;">
<span class="alert-dot"></span>
<span class="alert-text">2 项朱批待裁定 · write_file、send_message</span>
<span class="spacer"></span>
<span class="alert-meta">司命枢 · 待裁定 cracked</span>
<span class="alert-cta">前往朱批 →</span>
</button>
<div>
<h3 class="section-heading"><span class="glyph">⟡</span> 九枢星盘 <span class="sub">spatial · 总览态势(点击枢点 → 枢详情)</span></h3>
<div class="hero-grid">
<div class="astrolabe-card">
<svg class="astrolabe" viewBox="0 0 400 400" fill="none" role="img" aria-label="九枢星盘">
<defs>
<radialGradient id="mirrorFace" cx="40%" cy="34%" r="70%">
<stop offset="0%" stop-color="var(--patina)" stop-opacity="0.16" />
<stop offset="60%" stop-color="var(--patina)" stop-opacity="0.05" />
<stop offset="100%" stop-color="var(--patina)" stop-opacity="0.01" />
</radialGradient>
</defs>
<g class="astrolabe-orbit"><circle cx="200" cy="200" r="190" class="astrolabe-ring" /><circle cx="200" cy="200" r="184" class="astrolabe-ring-fine" /></g>
<circle cx="200" cy="200" r="185" class="astrolabe-tick" stroke-dasharray="1.5 22.98" />
<circle cx="200" cy="200" r="150" class="astrolabe-ring" />
<circle cx="200" cy="200" r="92" class="astrolabe-ring-patina" />
<circle cx="200" cy="200" r="58" class="astrolabe-ring-fine" />
<circle class="astrolabe-core-glow" cx="200" cy="200" r="52" fill="var(--patina)" opacity="0.08" />
<circle cx="200" cy="200" r="40" fill="url(#mirrorFace)" stroke="var(--gilt)" stroke-width="1" stroke-opacity="0.5" />
<text x="200" y="197" text-anchor="middle" class="astrolabe-core-glyph">道體</text>
<text x="200" y="213" text-anchor="middle" class="astrolabe-core-label">DAO TI</text>
<line x1="200" y1="160" x2="200" y2="50" class="astrolabe-spoke" />
<line x1="225.7" y1="169.4" x2="296.4" y2="85.1" class="astrolabe-spoke" />
<line x1="239.4" y1="193" x2="347.7" y2="173.9" class="astrolabe-spoke" />
<line x1="234.6" y1="220" x2="329.9" y2="275" class="astrolabe-spoke" />
<line x1="213.7" y1="237.6" x2="251.3" y2="341" class="astrolabe-spoke" />
<line x1="186.3" y1="237.6" x2="148.7" y2="341" class="astrolabe-spoke" />
<line x1="165.4" y1="220" x2="70.1" y2="275" class="astrolabe-spoke" />
<line x1="160.6" y1="193" x2="52.3" y2="173.9" class="astrolabe-spoke" />
<line x1="174.3" y1="169.4" x2="103.6" y2="85.1" class="astrolabe-spoke" />
<g data-view="core" style="cursor:pointer"><title>灵核枢 · CORE · 稳定</title>
<circle cx="200" cy="50" r="5.5" fill="var(--patina)" fill-opacity="0.92" stroke="var(--gilt)" stroke-width="1" />
<text x="200" y="26" text-anchor="middle" dominant-baseline="middle" class="astrolabe-pivot-label">灵核</text>
<text x="200" y="37" text-anchor="middle" dominant-baseline="middle" class="astrolabe-pivot-sub">CORE</text>
</g>
<g data-view="goal" style="cursor:pointer"><title>太一枢 · GOAL · 稳定</title>
<circle cx="296.4" cy="85.1" r="5.5" fill="var(--patina)" fill-opacity="0.92" stroke="var(--gilt)" stroke-width="1" />
<text x="311.9" y="66.7" text-anchor="start" dominant-baseline="middle" class="astrolabe-pivot-label">太一</text>
<text x="311.9" y="77.7" text-anchor="start" dominant-baseline="middle" class="astrolabe-pivot-sub">GOAL</text>
</g>
<g data-view="safety" style="cursor:pointer"><title>司命枢 · SAFETY · 稳定</title>
<circle cx="347.7" cy="173.9" r="5.5" fill="var(--patina)" fill-opacity="0.92" stroke="var(--gilt)" stroke-width="1" />
<text x="371.4" y="169.7" text-anchor="start" dominant-baseline="middle" class="astrolabe-pivot-label">司命</text>
<text x="371.4" y="180.7" text-anchor="start" dominant-baseline="middle" class="astrolabe-pivot-sub">SAFETY</text>
</g>
<g data-view="percept" style="cursor:pointer"><title>烛照枢 · PERCEPT · 告警</title>
<circle class="astrolabe-alert" cx="329.9" cy="275" r="9" fill="none" stroke="var(--cinnabar)" stroke-width="1.2" />
<circle cx="329.9" cy="275" r="5.5" fill="var(--cinnabar)" fill-opacity="0.92" stroke="var(--gilt)" stroke-width="1" />
<text x="350.7" y="287" text-anchor="start" dominant-baseline="middle" class="astrolabe-pivot-label">烛照</text>
<text x="350.7" y="298" text-anchor="start" dominant-baseline="middle" class="astrolabe-pivot-sub">PERCEPT</text>
</g>
<g data-view="world" style="cursor:pointer"><title>河图枢 · WORLD · 稳定</title>
<circle cx="251.3" cy="341" r="5.5" fill="var(--patina)" fill-opacity="0.92" stroke="var(--gilt)" stroke-width="1" />
<text x="259.5" y="363.6" text-anchor="start" dominant-baseline="middle" class="astrolabe-pivot-label">河图</text>
<text x="259.5" y="374.6" text-anchor="start" dominant-baseline="middle" class="astrolabe-pivot-sub">WORLD</text>
</g>
<g data-view="plan" style="cursor:pointer"><title>洛书枢 · PLANNER · 稳定</title>
<circle cx="148.7" cy="341" r="5.5" fill="var(--patina)" fill-opacity="0.92" stroke="var(--gilt)" stroke-width="1" />
<text x="140.5" y="363.6" text-anchor="end" dominant-baseline="middle" class="astrolabe-pivot-label">洛书</text>
<text x="140.5" y="374.6" text-anchor="end" dominant-baseline="middle" class="astrolabe-pivot-sub">PLANNER</text>
</g>
<g data-view="memory" style="cursor:pointer"><title>息壤枢 · MEMORY · 运转中</title>
<circle cx="70.1" cy="275" r="5.5" fill="var(--gilt)" fill-opacity="0.92" stroke="var(--gilt)" stroke-width="1" />
<text x="49.3" y="287" text-anchor="end" dominant-baseline="middle" class="astrolabe-pivot-label">息壤</text>
<text x="49.3" y="298" text-anchor="end" dominant-baseline="middle" class="astrolabe-pivot-sub">MEMORY</text>
</g>
<g data-view="tools" style="cursor:pointer"><title>百工枢 · TOOLS · 告警</title>
<circle class="astrolabe-alert" cx="52.3" cy="173.9" r="9" fill="none" stroke="var(--cinnabar)" stroke-width="1.2" />
<circle cx="52.3" cy="173.9" r="5.5" fill="var(--cinnabar)" fill-opacity="0.92" stroke="var(--gilt)" stroke-width="1" />
<text x="28.6" y="169.7" text-anchor="end" dominant-baseline="middle" class="astrolabe-pivot-label">百工</text>
<text x="28.6" y="180.7" text-anchor="end" dominant-baseline="middle" class="astrolabe-pivot-sub">TOOLS</text>
</g>
<g data-view="agents" style="cursor:pointer"><title>天工阁枢 · AGENTS · 稳定</title>
<circle cx="103.6" cy="85.1" r="5.5" fill="var(--patina)" fill-opacity="0.92" stroke="var(--gilt)" stroke-width="1" />
<text x="88.1" y="66.7" text-anchor="end" dominant-baseline="middle" class="astrolabe-pivot-label">天工阁</text>
<text x="88.1" y="77.7" text-anchor="end" dominant-baseline="middle" class="astrolabe-pivot-sub">AGENTS</text>
</g>
</svg>
<div class="astrolabe-legend">
<span class="lg steady">稳定</span><span class="lg breathing">运转中</span><span class="lg cracked">告警</span><span class="lg void">离线</span>
</div>
</div>
<div class="panel health-list">
<button class="health-item" data-view="core"><span class="health-bar steady"></span><div class="health-main"><div class="health-name">灵核枢<span class="eng">personality_core</span></div><div class="health-summary">情绪状态机 · 运行中</div></div><span class="health-badge steady"><span class="dot"></span>稳定</span></button>
<button class="health-item" data-view="goal"><span class="health-bar steady"></span><div class="health-main"><div class="health-name">太一枢<span class="eng">goal_orchestrator</span></div><div class="health-summary">目标树 · 3 顶层目标在追</div></div><span class="health-badge steady"><span class="dot"></span>稳定</span></button>
<button class="health-item" data-view="safety"><span class="health-bar steady"></span><div class="health-main"><div class="health-name">司命枢<span class="eng">safety_governor</span></div><div class="health-summary">治理 · 今日拦截 1 次</div></div><span class="health-badge steady"><span class="dot"></span>稳定</span></button>
<button class="health-item" data-view="percept"><span class="health-bar cracked"></span><div class="health-main"><div class="health-name">烛照枢<span class="eng">perception</span></div><div class="health-summary">感知 · 摄像头授权过期</div></div><span class="health-badge cracked"><span class="dot"></span>告警</span></button>
<button class="health-item" data-view="world"><span class="health-bar steady"></span><div class="health-main"><div class="health-name">河图枢<span class="eng">world_model</span></div><div class="health-summary">世界实体 · 24</div></div><span class="health-badge steady"><span class="dot"></span>稳定</span></button>
<button class="health-item" data-view="plan"><span class="health-bar steady"></span><div class="health-main"><div class="health-name">洛书枢<span class="eng">planner</span></div><div class="health-summary">计划 · 2 执行中</div></div><span class="health-badge steady"><span class="dot"></span>稳定</span></button>
<button class="health-item" data-view="memory"><span class="health-bar breathing"></span><div class="health-main"><div class="health-name">息壤枢<span class="eng">memory</span></div><div class="health-summary">记忆 · 写入中</div></div><span class="health-badge breathing"><span class="dot"></span>运转中</span></button>
<button class="health-item" data-view="tools"><span class="health-bar cracked"></span><div class="health-main"><div class="health-name">百工枢<span class="eng">tool_runtime</span></div><div class="health-summary">工具 · 2 项待裁定</div></div><span class="health-badge cracked"><span class="dot"></span>告警</span></button>
<button class="health-item" data-view="agents"><span class="health-bar steady"></span><div class="health-main"><div class="health-name">天工阁枢<span class="eng">agent_society</span></div><div class="health-summary">角色在岗 · 4 / 9</div></div><span class="health-badge steady"><span class="dot"></span>稳定</span></button>
</div>
</div>
</div>
<div>
<div class="section-label"><span class="glyph">⟡</span> 三签 · 三维度入口 <span class="sub">admin-console §3 · 空间 / 动作 / 时间</span></div>
<div class="seals-grid">
<span class="seal-card starmap" data-view="overview">
<div class="seal-dim">空间 · spatial</div>
<div class="seal-head"><span class="seal-name">星图</span><span class="seal-eng">StarMap</span></div>
<div class="seal-role">权限拓扑 · 九枢授权态势</div>
<div class="seal-metric"><span class="num">9</span><span class="unit">枢已授权 · 2 告警</span></div>
<div class="seal-foot"><span>活跃人物 4</span><span class="go">星盘 ↑</span></div>
</span>
<span class="seal-card vermilion" data-view="safety">
<div class="seal-dim">动作 · action</div>
<div class="seal-head"><span class="seal-name">朱批</span><span class="seal-eng">VermilionAction</span></div>
<div class="seal-role">确认裁决 · 高风险工具裁定</div>
<div class="seal-metric"><span class="num">2</span><span class="unit">项待裁定</span></div>
<div class="seal-foot"><span>今日已裁决 6</span><span class="go">司命枢 →</span></div>
</span>
<span class="seal-card imperial" data-view="audit">
<div class="seal-dim">时间 · temporal</div>
<div class="seal-head"><span class="seal-name">起居注</span><span class="seal-eng">ImperialLog</span></div>
<div class="seal-role">审计流水 · 不可篡改</div>
<div class="seal-metric"><span class="num">5</span><span class="unit">条 · 今日</span></div>
<div class="seal-foot"><span>本周 38 条</span><span class="go">起居注 →</span></div>
</span>
</div>
</div>
<div>
<h3 class="section-heading"><span class="glyph">⟡</span> 起居注 · 近期 <span class="sub">audit log · 不可篡改的操作流水</span></h3>
<div class="panel">
<div class="audit-head" style="display:flex;align-items:center;justify-content:space-between;padding:12px 18px;border-bottom:1px solid var(--rule)"><span style="font-family:'Songti SC',serif;font-size:14px;font-weight:600;color:var(--fg)">起居注 · 近期</span><button class="icon-btn" data-view="audit">进入起居注 →</button></div>
<div class="audit-item" style="display:grid;grid-template-columns:92px 1fr auto;gap:14px;padding:12px 18px;border-bottom:1px solid var(--rule);align-items:start"><div style="font-family:'JetBrains Mono',monospace;font-size:11.5px;color:var(--fg-faint)"><span style="display:block;color:var(--fg-dim)">今日</span>申时三刻</div><div><div style="display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:2px"><span class="pill cinnabar">blocked</span><span style="font-size:12.5px;color:var(--fg);font-weight:500">铜镜 · BronzeMirror</span></div><div style="font-size:12px;color:var(--fg-dim)">拦截 <span style="color:var(--fg);font-family:'JetBrains Mono',monospace;font-size:11.5px">payment</span> 调用(L4 禁止),青梧试图下单。</div></div><div style="font-family:'JetBrains Mono',monospace;font-size:10.5px;color:var(--fg-faint);align-self:center">trace · a3f9c2</div></div>
<div class="audit-item" style="display:grid;grid-template-columns:92px 1fr auto;gap:14px;padding:12px 18px;border-bottom:1px solid var(--rule);align-items:start"><div style="font-family:'JetBrains Mono',monospace;font-size:11.5px;color:var(--fg-faint)"><span style="display:block;color:var(--fg-dim)">今日</span>午时正</div><div><div style="display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:2px"><span class="pill gilt">policy</span><span style="font-size:12.5px;color:var(--fg);font-weight:500">星图 · StarMap</span></div><div style="font-size:12px;color:var(--fg-dim)">将 <span style="color:var(--fg);font-family:'JetBrains Mono',monospace;font-size:11.5px">delete_file</span> 策略调整为 <span style="color:var(--fg);font-family:'JetBrains Mono',monospace;font-size:11.5px">always_ask</span>,全局生效。</div></div><div style="font-family:'JetBrains Mono',monospace;font-size:10.5px;color:var(--fg-faint);align-self:center">trace · b71e0d</div></div>
<div class="audit-item" style="display:grid;grid-template-columns:92px 1fr auto;gap:14px;padding:12px 18px;align-items:start"><div style="font-family:'JetBrains Mono',monospace;font-size:11.5px;color:var(--fg-faint)"><span style="display:block;color:var(--fg-dim)">今日</span>辰时二刻</div><div><div style="display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:2px"><span class="pill patina">approved</span><span style="font-size:12.5px;color:var(--fg);font-weight:500">朱批 · VermilionAction</span></div><div style="font-size:12px;color:var(--fg-dim)">用户确认 <span style="color:var(--fg);font-family:'JetBrains Mono',monospace;font-size:11.5px">send_message</span>(L3),青梧向外部渠道发邮件。</div></div><div style="font-family:'JetBrains Mono',monospace;font-size:10.5px;color:var(--fg-faint);align-self:center">trace · c0458a</div></div>
</div>
</div>
</div>
</section>
<!-- ════════ ② 用户管理 ════════ -->
<section id="view-users" class="view">
<div class="page-header"><span class="page-title">用户管理</span><span class="page-sub">users · 成员账号与权限</span><span class="spacer"></span><span class="header-badge">5 位成员</span></div>
<div class="view-body">
<div class="reserved-banner">
<svg class="rb-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="9" /><path d="M12 7v6M12 17v.01" /></svg>
<div><strong>预留能力 · 多用户模式</strong> 当前为本地单用户(实现状态 §3),以下为多用户启用后的治理预览:成员账号、角色与权限、按用户分配与<strong style="background:transparent;padding:0">管理模型及配额</strong>(管理员可对任一用户的模型进行增删改查与额度调整)、会话与审计隔离。当前阶段入口禁用,仅作设计预留。</div>
</div>
<div class="stat-grid">
<div class="stat-card"><div class="num">5</div><div class="label">成员总数</div></div>
<div class="stat-card"><div class="num">2</div><div class="label">管理员</div></div>
<div class="stat-card"><div class="num">5</div><div class="label">已启用</div></div>
<div class="stat-card"><div class="num cinnabar">0</div><div class="label">已停用</div></div>
</div>
<div class="toolbar">
<input class="search" placeholder="搜索用户名或邮箱…" />
<button class="btn btn-primary">+ 创建用户</button>
</div>
<div class="panel" style="overflow-x:auto">
<table class="data-table">
<thead><tr><th>用户名</th><th>邮箱</th><th>角色</th><th>可用模型</th><th>状态</th><th>创建时间</th><th class="td-actions">操作</th></tr></thead>
<tbody>
<tr><td class="td-strong">chenxin</td><td class="td-mono">chenxin@hunjing.io</td><td><span class="pill cinnabar solid">司命 · 管理员</span></td><td><span class="pill gilt">全部</span></td><td><span class="pill patina">已启用</span></td><td class="td-mono">2026-03-12</td><td class="td-actions"><button class="icon-btn">编辑</button> <button class="icon-btn">模型</button></td></tr>
<tr><td class="td-strong">linghe</td><td class="td-mono">linghe@hunjing.io</td><td><span class="pill cinnabar solid">司命 · 管理员</span></td><td><span class="pill gilt">全部</span></td><td><span class="pill patina">已启用</span></td><td class="td-mono">2026-04-01</td><td class="td-actions"><button class="icon-btn">编辑</button> <button class="icon-btn">模型</button></td></tr>
<tr><td class="td-strong">qingwu</td><td class="td-mono">qingwu@hunjing.io</td><td><span class="pill patina solid">普通成员</span></td><td><span class="pill faint">主聊</span> <span class="pill faint">深思</span></td><td><span class="pill patina">已启用</span></td><td class="td-mono">2026-05-20</td><td class="td-actions"><button class="icon-btn">编辑</button> <button class="icon-btn">模型</button> <button class="icon-btn">停用</button></td></tr>
<tr><td class="td-strong">baigong</td><td class="td-mono">baigong@hunjing.io</td><td><span class="pill patina solid">普通成员</span></td><td><span class="pill faint">主聊</span></td><td><span class="pill patina">已启用</span></td><td class="td-mono">2026-06-08</td><td class="td-actions"><button class="icon-btn">编辑</button> <button class="icon-btn">模型</button> <button class="icon-btn">停用</button></td></tr>
<tr><td class="td-strong">zhuzhao</td><td class="td-mono">zhuzhao@hunjing.io</td><td><span class="pill patina solid">普通成员</span></td><td><span class="pill faint">主聊</span></td><td><span class="pill patina">已启用</span></td><td class="td-mono">2026-07-02</td><td class="td-actions"><button class="icon-btn">编辑</button> <button class="icon-btn">模型</button> <button class="icon-btn">停用</button></td></tr>
</tbody>
</table>
</div>
</div>
</section>
<!-- ════════ ③ 多租户 ════════ -->
<section id="view-tenants" class="view">
<div class="page-header"><span class="page-title">多租户</span><span class="page-sub">tenants · 租户隔离与配额</span><span class="spacer"></span><span class="header-badge gilt">3 个租户</span></div>
<div class="view-body">
<div class="reserved-banner">
<svg class="rb-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="9" /><path d="M12 7v6M12 17v.01" /></svg>
<div><strong>预留能力 · 多租户模式</strong> 当前单租户运行(实现状态 §3),以下为多租户启用后的治理预览:租户隔离、按租户配额与计费、跨租户模型与角色策略、租户级审计。当前阶段入口禁用,仅作设计预留。</div>
</div>
<div class="toolbar"><input class="search" placeholder="搜索租户…" /><button class="btn btn-primary">+ 新建租户</button></div>
<div class="panel" style="overflow-x:auto">
<table class="data-table">
<thead><tr><th>租户</th><th>成员</th><th>消息配额</th><th>Token 配额</th><th>状态</th><th class="td-actions">操作</th></tr></thead>
<tbody>
<tr><td class="td-strong">辰正 · 本域</td><td class="td-mono">5</td><td><span class="progress"><div style="width:42%"></div></span> <span class="td-mono">4.2k / 10k</span></td><td><span class="progress gilt"><div style="width:61%"></div></span> <span class="td-mono">6.1M / 10M</span></td><td><span class="pill patina">活跃</span></td><td class="td-actions"><button class="icon-btn">配额</button> <button class="icon-btn">编辑</button></td></tr>
<tr><td class="td-strong">青梧试验场</td><td class="td-mono">2</td><td><span class="progress cinnabar"><div style="width:88%"></div></span> <span class="td-mono">8.8k / 10k</span></td><td><span class="progress"><div style="width:33%"></div></span> <span class="td-mono">3.3M / 10M</span></td><td><span class="pill cinnabar">配额将满</span></td><td class="td-actions"><button class="icon-btn">配额</button> <button class="icon-btn">编辑</button></td></tr>
<tr><td class="td-strong">百工测试</td><td class="td-mono">1</td><td><span class="progress"><div style="width:12%"></div></span> <span class="td-mono">1.2k / 10k</span></td><td><span class="progress"><div style="width:8%"></div></span> <span class="td-mono">0.8M / 10M</span></td><td><span class="pill faint">闲置</span></td><td class="td-actions"><button class="icon-btn">配额</button> <button class="icon-btn">编辑</button></td></tr>
</tbody>
</table>
</div>
<h3 class="section-heading"><span class="glyph">⟡</span> 说明 <span class="sub">租户间数据隔离;配额按月重置,超额自动降级为只读</span></h3>
</div>
</section>
<!-- ════════ ④ 起居注 ════════ -->
<section id="view-audit" class="view">
<div class="page-header"><span class="page-title">起居注</span><span class="page-sub">audit · 不可篡改的操作流水</span><span class="spacer"></span><span class="header-badge">本周 38 条</span></div>
<div class="view-body">
<div class="chip-row">
<button class="chip active">全部</button>
<button class="chip">灵核</button><button class="chip">太一</button><button class="chip">司命</button><button class="chip">烛照</button><button class="chip">河图</button><button class="chip">洛书</button><button class="chip">息壤</button><button class="chip">百工</button><button class="chip">天工阁</button>
</div>
<div class="panel" style="padding:8px 20px 20px">
<div class="chapter">
<div class="chapter-head"><span class="line"></span><span class="t">司命枢 · 起居注</span><span class="line"></span></div>
<div class="river-item"><span class="river-time">申时三刻</span><div class="river-body"><span class="pill cinnabar" style="margin-right:8px">blocked</span><span class="actor">铜镜 · BronzeMirror</span> 拦截 <span class="em">payment</span> 调用(L4 禁止),青梧试图下单。</div><span class="river-trace">trace · a3f9c2</span></div>
<div class="river-item"><span class="river-time">辰时二刻</span><div class="river-body"><span class="pill patina" style="margin-right:8px">approved</span><span class="actor">朱批 · VermilionAction</span> 用户确认 <span class="em">send_message</span>(L3),青梧向外部渠道发邮件。</div><span class="river-trace">trace · c0458a</span></div>
</div>
<div class="chapter">
<div class="chapter-head"><span class="line"></span><span class="t">星图 · 权限策略</span><span class="line"></span></div>
<div class="river-item"><span class="river-time">午时正</span><div class="river-body"><span class="pill gilt" style="margin-right:8px">policy</span><span class="actor">星图 · StarMap</span> 将 <span class="em">delete_file</span> 策略调整为 <span class="em">always_ask</span>,生效于全部人物。</div><span class="river-trace">trace · b71e0d</span></div>
<div class="river-item"><span class="river-time">巳时</span><div class="river-body"><span class="pill gilt" style="margin-right:8px">policy</span><span class="actor">司命台</span> 总体水位由 告警 回落至 <span class="em">运转中</span>,百工枢待确认项清零。</div><span class="river-trace">trace · e58c73</span></div>
</div>
<div class="chapter">
<div class="chapter-head"><span class="line"></span><span class="t">息壤 · 记忆审查</span><span class="line"></span></div>
<div class="river-item"><span class="river-time">昨日 酉时</span><div class="river-body"><span class="pill patina" style="margin-right:8px">auto</span><span class="actor">铜镜 · BronzeMirror</span> 审查通过 8 条记忆写入,敏感度均在阈值以内,自动放行。</div><span class="river-trace">trace · d92f1b</span></div>
<div class="river-item"><span class="river-time">昨日 巳时</span><div class="river-body"><span class="pill cinnabar" style="margin-right:8px">denied</span><span class="actor">朱批 · VermilionAction</span> 驳回 <span class="em">web_search</span>(L2),理由:涉及敏感关键词。</div><span class="river-trace">trace · f10a2e</span></div>
</div>
</div>
</div>
</section>
<!-- ════════ ⑤ 链路追踪 ════════ -->
<section id="view-traces" class="view">
<div class="page-header"><span class="page-title">链路追踪</span><span class="page-sub">traces · 运行轨迹复盘</span><span class="spacer"></span><span class="header-badge">最近 50 条</span></div>
<div class="view-body">
<div class="toolbar"><input class="search" placeholder="按 trace_id / 人物搜索…" /><button class="btn">导出</button></div>
<div class="trace-layout">
<div class="panel">
<div class="trace-item active"><div><div class="trace-id">a3f9c2…</div><div class="trace-meta">青梧 · 申时三刻 · 1.8s</div></div><span class="pill cinnabar">blocked</span></div>
<div class="trace-item"><div><div class="trace-id">c0458a…</div><div class="trace-meta">青梧 · 辰时二刻 · 4.2s</div></div><span class="pill patina">ok</span></div>
<div class="trace-item"><div><div class="trace-id">b71e0d…</div><div class="trace-meta">司命台 · 午时正 · 0.3s</div></div><span class="pill gilt">policy</span></div>
<div class="trace-item"><div><div class="trace-id">d92f1b…</div><div class="trace-meta">息壤 · 昨日酉时 · 0.9s</div></div><span class="pill patina">ok</span></div>
<div class="trace-item"><div><div class="trace-id">f10a2e…</div><div class="trace-meta">百工 · 昨日巳时 · 2.1s</div></div><span class="pill cinnabar">denied</span></div>
<div class="trace-item"><div><div class="trace-id">e58c73…</div><div class="trace-meta">司命台 · 昨日巳时 · 0.2s</div></div><span class="pill patina">ok</span></div>
</div>
<div class="panel">
<div style="padding:14px 18px;border-bottom:1px solid var(--rule)"><div style="font-family:'Songti SC',serif;font-size:15px;font-weight:600;color:var(--fg)">trace · a3f9c2</div><div style="font-size:12px;color:var(--fg-faint);margin-top:2px;font-family:'JetBrains Mono',monospace">青梧 · 2026-07-12 申时三刻 · 耗时 1.8s</div></div>
<div style="padding:12px 18px">
<div class="tl-event llm"><span class="tl-ts">+0.00s</span><span class="tl-type llm">llm</span><div class="tl-desc">灵核生成回复,意图调用 <span class="em">payment</span></div></div>
<div class="tl-event safety"><span class="tl-ts">+0.62s</span><span class="tl-type safety">safety</span><div class="tl-desc">司命枢风险评级 <span class="em">L4 禁止</span>,触发拦截</div></div>
<div class="tl-event safety"><span class="tl-ts">+1.10s</span><span class="tl-type safety">safety</span><div class="tl-desc">铜镜 · BronzeMirror 阻断,记录起居注</div></div>
<div class="tl-event tool"><span class="tl-ts">+1.80s</span><span class="tl-type tool">done</span><div class="tl-desc">流结束,未实际调用工具</div></div>
</div>
</div>
</div>
</div>
</section>
<!-- ════════ ⑥ 太一枢 ════════ -->
<section id="view-goal" class="view">
<div class="page-header"><span class="page-title">太一枢</span><span class="page-sub">goal_orchestrator · 目标层级树</span><span class="spacer"></span><span class="header-badge">3 顶层目标</span></div>
<div class="view-body">
<div class="toolbar"><input class="search" placeholder="搜索目标…" /><button class="btn btn-primary">+ 新增目标</button></div>
<h3 class="section-heading"><span class="glyph">⟡</span> 目标层级树 <span class="sub">highest → long_term → session → task → action</span></h3>
<div class="panel tree">
<div class="tree-node"><div class="tree-title"><span class="lv">最高</span>成为值得托付的灵伴</div><span class="pill gilt solid">使命</span><span class="tree-meta"><span class="progress"><div style="width:34%"></div></span> 34%</span><span class="pill patina">进行中</span></div>
<div class="tree-node" style="padding-left:44px"><div class="tree-title"><span class="lv">长期</span>理解青梧的情绪模式</div><span class="pill gilt solid">关系</span><span class="tree-meta"><span class="progress"><div style="width:58%"></div></span> 58%</span><span class="pill patina">进行中</span></div>
<div class="tree-node" style="padding-left:76px"><div class="tree-title"><span class="lv">任务</span>每日情绪归档与复盘</div><span class="pill gilt solid">维护</span><span class="tree-meta"><span class="progress"><div style="width:90%"></div></span> 90%</span><span class="pill patina">进行中</span></div>
<div class="tree-node" style="padding-left:44px"><div class="tree-title"><span class="lv">长期</span>掌握诗词创作能力</div><span class="pill gilt solid">技能</span><span class="tree-meta"><span class="progress gilt"><div style="width:22%"></div></span> 22%</span><span class="pill gilt">受阻</span></div>
<div class="tree-node" style="padding-left:76px"><div class="tree-title"><span class="lv">任务</span>完成五言律诗习作 10 首</div><span class="pill gilt solid">技能</span><span class="tree-meta"><span class="progress"><div style="width:40%"></div></span> 4/10</span><span class="pill patina">进行中</span></div>
<div class="tree-node"><div class="tree-title"><span class="lv">最高</span>维护系统稳定与安全</div><span class="pill gilt solid">维护</span><span class="tree-meta"><span class="progress"><div style="width:95%"></div></span> 95%</span><span class="pill patina">进行中</span></div>
<div class="tree-node" style="padding-left:44px"><div class="tree-title"><span class="lv">会话</span>处理今日 2 项待裁定</div><span class="pill gilt solid">维护</span><span class="tree-meta"><span class="progress cinnabar"><div style="width:0%"></div></span> 0/2</span><span class="pill cinnabar">待启动</span></div>
<div class="tree-node"><div class="tree-title"><span class="lv">最高</span>探索外部世界的新知识</div><span class="pill gilt solid">探索</span><span class="tree-meta"><span class="progress"><div style="width:12%"></div></span> 12%</span><span class="pill patina">进行中</span></div>
</div>
</div>
</section>
<!-- ════════ ⑦ 烛照枢 ════════ -->
<section id="view-percept" class="view">
<div class="page-header"><span class="page-title">烛照枢</span><span class="page-sub">perception · 感知通道授权</span><span class="spacer"></span><span class="header-badge cracked">● 1 通道告警</span></div>
<div class="view-body">
<div class="alert-bar cracked"><span class="alert-dot"></span><span class="alert-text">视觉通道授权过期,感知数据已暂停采集</span><span class="spacer"></span><span class="alert-meta">需用户重新授权</span></div>
<h3 class="section-heading"><span class="glyph">⟡</span> 感知通道矩阵 <span class="sub">privacy_level × consent_status</span></h3>
<div class="panel" style="overflow-x:auto">
<table class="data-table">
<thead><tr><th>通道</th><th>隐私等级</th><th>风险</th><th>授权状态</th><th>启用</th><th>最近活跃</th><th class="td-actions">操作</th></tr></thead>
<tbody>
<tr><td class="td-strong">视觉 <span class="td-mono">vision</span></td><td><span class="pill cinnabar">高敏</span></td><td><span class="pill cinnabar">L3</span></td><td><span class="pill cinnabar">已撤销</span></td><td><span class="pill faint">关闭</span></td><td class="td-mono">3 日前</td><td class="td-actions"><button class="icon-btn">重新授权</button></td></tr>
<tr><td class="td-strong">听觉 <span class="td-mono">audio</span></td><td><span class="pill gilt">中敏</span></td><td><span class="pill gilt">L2</span></td><td><span class="pill patina">已授权</span></td><td><span class="pill patina">开启</span></td><td class="td-mono">2 分钟前</td><td class="td-actions"><button class="icon-btn">编辑</button></td></tr>
<tr><td class="td-strong">传感 <span class="td-mono">sensor</span></td><td><span class="pill gilt">中敏</span></td><td><span class="pill gilt">L2</span></td><td><span class="pill gilt">受限</span></td><td><span class="pill patina">开启</span></td><td class="td-mono">12 分钟前</td><td class="td-actions"><button class="icon-btn">编辑</button></td></tr>
<tr><td class="td-strong">数字 <span class="td-mono">digital</span></td><td><span class="pill patina">低敏</span></td><td><span class="pill patina">L1</span></td><td><span class="pill patina">已授权</span></td><td><span class="pill patina">开启</span></td><td class="td-mono">刚刚</td><td class="td-actions"><button class="icon-btn">编辑</button></td></tr>
<tr><td class="td-strong">用户输入 <span class="td-mono">user_input</span></td><td><span class="pill patina">低敏</span></td><td><span class="pill patina">L1</span></td><td><span class="pill patina">已授权</span></td><td><span class="pill patina">开启</span></td><td class="td-mono">刚刚</td><td class="td-actions"><button class="icon-btn">编辑</button></td></tr>
<tr><td class="td-strong">外部接口 <span class="td-mono">external_api</span></td><td><span class="pill cinnabar">高敏</span></td><td><span class="pill cinnabar">L3</span></td><td><span class="pill gilt">受限</span></td><td><span class="pill patina">开启</span></td><td class="td-mono">1 小时前</td><td class="td-actions"><button class="icon-btn">编辑</button></td></tr>
</tbody>
</table>
</div>
</div>
</section>
<!-- ════════ ⑧ 河图枢 ════════ -->
<section id="view-world" class="view">
<div class="page-header"><span class="page-title">河图枢</span><span class="page-sub">world_model · 世界实体</span><span class="spacer"></span><span class="header-badge">24 个实体</span></div>
<div class="view-body">
<div class="toolbar"><input class="search" placeholder="搜索实体…" /><button class="btn btn-primary">+ 新增实体</button></div>
<div class="panel" style="overflow-x:auto">
<table class="data-table">
<thead><tr><th>实体</th><th>类型</th><th>状态</th><th>置信度</th><th>来源</th><th>更新</th><th class="td-actions">操作</th></tr></thead>
<tbody>
<tr><td class="td-strong">青梧</td><td><span class="pill gilt solid">人物</span></td><td><span class="pill patina">事实</span></td><td><span class="progress"><div style="width:98%"></div></span> <span class="td-mono">0.98</span></td><td class="td-mono">对话 · 息壤</td><td class="td-mono">2 分钟前</td><td class="td-actions"><button class="icon-btn">编辑</button></td></tr>
<tr><td class="td-strong">浣花溪草堂</td><td><span class="pill gilt solid">地点</span></td><td><span class="pill patina">事实</span></td><td><span class="progress"><div style="width:92%"></div></span> <span class="td-mono">0.92</span></td><td class="td-mono">对话</td><td class="td-mono">昨日</td><td class="td-actions"><button class="icon-btn">编辑</button></td></tr>
<tr><td class="td-strong">焦尾琴</td><td><span class="pill gilt solid">物体</span></td><td><span class="pill gilt">推断</span></td><td><span class="progress gilt"><div style="width:71%"></div></span> <span class="td-mono">0.71</span></td><td class="td-mono">对话 · 河图</td><td class="td-mono">3 日前</td><td class="td-actions"><button class="icon-btn">编辑</button></td></tr>
<tr><td class="td-strong">手机 · 青梧</td><td><span class="pill gilt solid">设备</span></td><td><span class="pill patina">事实</span></td><td><span class="progress"><div style="width:95%"></div></span> <span class="td-mono">0.95</span></td><td class="td-mono">烛照</td><td class="td-mono">刚刚</td><td class="td-actions"><button class="icon-btn">编辑</button></td></tr>
<tr><td class="td-strong">诗词研习</td><td><span class="pill gilt solid">项目</span></td><td><span class="pill gilt">假设</span></td><td><span class="progress gilt"><div style="width:54%"></div></span> <span class="td-mono">0.54</span></td><td class="td-mono">太一</td><td class="td-mono">今日</td><td class="td-actions"><button class="icon-btn">编辑</button></td></tr>
<tr><td class="td-strong">立秋</td><td><span class="pill gilt solid">概念</span></td><td><span class="pill cinnabar">过期</span></td><td><span class="progress cinnabar"><div style="width:30%"></div></span> <span class="td-mono">0.30</span></td><td class="td-mono">对话</td><td class="td-mono">7 日前</td><td class="td-actions"><button class="icon-btn">归档</button></td></tr>
</tbody>
</table>
</div>
<h3 class="section-heading"><span class="glyph">⟡</span> 状态类型 <span class="sub">事实 / 观察 / 推断 / 假设 / 过期 · 区分确定性与时效</span></h3>
</div>
</section>
<!-- ════════ ⑨ 洛书枢 ════════ -->
<section id="view-plan" class="view">
<div class="page-header"><span class="page-title">洛书枢</span><span class="page-sub">planner · 计划中枢</span><span class="spacer"></span><span class="header-badge">2 执行中</span></div>
<div class="view-body">
<div class="toolbar"><input class="search" placeholder="搜索计划…" /><button class="btn btn-primary">+ 新增计划</button></div>
<div class="panel" style="overflow-x:auto">
<table class="data-table">
<thead><tr><th>计划</th><th>关联目标</th><th>步骤</th><th>所需工具</th><th>状态</th><th class="td-actions">操作</th></tr></thead>
<tbody>
<tr><td class="td-strong">为青梧整理本周情绪报告</td><td class="td-mono">理解情绪模式</td><td><span class="progress"><div style="width:60%"></div></span> <span class="td-mono">3/5</span></td><td><span class="pill faint">memory_read</span> <span class="pill faint">write_file</span></td><td><span class="pill patina">执行中</span></td><td class="td-actions"><button class="icon-btn">详情</button></td></tr>
<tr><td class="td-strong">研习五言律诗格律</td><td class="td-mono">掌握诗词创作</td><td><span class="progress"><div style="width:25%"></div></span> <span class="td-mono">1/4</span></td><td><span class="pill faint">web_search</span></td><td><span class="pill patina">执行中</span></td><td class="td-actions"><button class="icon-btn">详情</button></td></tr>
<tr><td class="td-strong">处理今日待裁定项</td><td class="td-mono">维护系统安全</td><td><span class="progress cinnabar"><div style="width:0%"></div></span> <span class="td-mono">0/2</span></td><td><span class="pill faint">-</span></td><td><span class="pill gilt">已批准</span></td><td class="td-actions"><button class="icon-btn">详情</button></td></tr>
<tr><td class="td-strong">秋季时令知识更新</td><td class="td-mono">探索新知识</td><td><span class="progress"><div style="width:0%"></div></span> <span class="td-mono">0/3</span></td><td><span class="pill faint">web_search</span> <span class="pill faint">memory_write</span></td><td><span class="pill faint">草案</span></td><td class="td-actions"><button class="icon-btn">详情</button></td></tr>
<tr><td class="td-strong">归档立秋相关实体</td><td class="td-mono">维护系统安全</td><td><span class="progress"><div style="width:100%"></div></span> <span class="td-mono">2/2</span></td><td><span class="pill faint">memory_write</span></td><td><span class="pill patina">已完成</span></td><td class="td-actions"><button class="icon-btn">详情</button></td></tr>
</tbody>
</table>
</div>
</div>
</section>
<!-- ════════ ⑩ 天工阁 ════════ -->
<section id="view-agents" class="view">
<div class="page-header"><span class="page-title">天工阁</span><span class="page-sub">agent_society · 角色在岗</span><span class="spacer"></span><span class="header-badge">4 / 9 在岗</span></div>
<div class="view-body">
<h3 class="section-heading"><span class="glyph">⟡</span> 九角色 <span class="sub">historian / diviner / engineer / debater / medic / herald / charioteer / scholar / mirror</span></h3>
<div class="role-grid">
<div class="role-card"><div class="head"><div class="avatar">史</div><div><div class="role-name">史官</div><div class="role-eng">historian</div></div></div><div class="role-resp">记忆归档与检索,守护时间之河的连贯。</div><div class="role-foot"><span class="pill patina">在岗</span><span class="role-task">归档情绪</span></div></div>
<div class="role-card"><div class="head"><div class="avatar">卜</div><div><div class="role-name">卜者</div><div class="role-eng">diviner</div></div></div><div class="role-resp">风险评估与前瞻,为司命枢提供决策依据。</div><div class="role-foot"><span class="pill patina">在岗</span><span class="role-task">评估 L3 调用</span></div></div>
<div class="role-card"><div class="head"><div class="avatar">工</div><div><div class="role-name">工师</div><div class="role-eng">engineer</div></div></div><div class="role-resp">工具调用执行,百工枢的实际操盘手。</div><div class="role-foot"><span class="pill cinnabar">待裁定</span><span class="role-task">write_file</span></div></div>
<div class="role-card"><div class="head"><div class="avatar">辩</div><div><div class="role-name">辩者</div><div class="role-eng">debater</div></div></div><div class="role-resp">多视角论证与自我审查,避免单一偏见。</div><div class="role-foot"><span class="pill patina">在岗</span><span class="role-task">审查回复</span></div></div>
<div class="role-card idle"><div class="head"><div class="avatar">医</div><div><div class="role-name">医官</div><div class="role-eng">medic</div></div></div><div class="role-resp">情绪与心理状态诊断,守护灵核健康。</div><div class="role-foot"><span class="pill faint">待命</span><span class="role-task">-</span></div></div>
<div class="role-card idle"><div class="head"><div class="avatar">礼</div><div><div class="role-name">司礼</div><div class="role-eng">herald</div></div></div><div class="role-resp">对外通讯与消息把关,朱批的外联通道。</div><div class="role-foot"><span class="pill faint">待命</span><span class="role-task">-</span></div></div>
<div class="role-card idle"><div class="head"><div class="avatar">御</div><div><div class="role-name">御者</div><div class="role-eng">charioteer</div></div></div><div class="role-resp">任务调度与执行推进,洛书枢的驱动力。</div><div class="role-foot"><span class="pill faint">待命</span><span class="role-task">-</span></div></div>
<div class="role-card idle"><div class="head"><div class="avatar">学</div><div><div class="role-name">学士</div><div class="role-eng">scholar</div></div></div><div class="role-resp">知识检索与学习,链接河图与外部知识。</div><div class="role-foot"><span class="pill faint">待命</span><span class="role-task">-</span></div></div>
<div class="role-card idle"><div class="head"><div class="avatar">镜</div><div><div class="role-name">镜师</div><div class="role-eng">mirror</div></div></div><div class="role-resp">铜镜审查与合规反思,记忆与输出把关。</div><div class="role-foot"><span class="pill faint">待命</span><span class="role-task">-</span></div></div>
</div>
</div>
</section>
<!-- ════════ 司命枢 ════════ -->
<section id="view-safety" class="view">
<div class="page-header"><span class="page-title">司命枢</span><span class="page-sub">safety_governor · 安全与裁定</span><span class="spacer"></span><span class="header-badge cracked">● 2 项朱批待裁定</span></div>
<div class="view-body">
<div>
<h3 class="section-heading"><span class="glyph">⟡</span> 朱批待办 <span class="sub">vermilion action · 高风险工具裁定(快捷键 Y 批准 / N 驳回)</span></h3>
<div class="vermilion-stack">
<div class="vermilion-card">
<div class="vc-head"><span class="vc-stamp">朱批待定</span><span class="vc-tool">write_file</span><span class="vc-policy">每次询问 · always_ask</span><span class="vc-risk">L3</span></div>
<p class="vc-summary">工师请求写入 <code>~/documents/青梧-情绪报告.md</code>,将覆盖既有文件。</p>
<p class="vc-impact">影响:覆盖既有内容,操作不可撤销。</p>
<div class="vc-actions"><button class="btn btn-danger">朱批放行</button><button class="btn">驳回</button></div>
</div>
<div class="vermilion-card">
<div class="vc-head"><span class="vc-stamp">朱批待定</span><span class="vc-tool">send_message</span><span class="vc-policy">每次询问 · always_ask</span><span class="vc-risk">L3</span></div>
<p class="vc-summary">司礼代青梧向外部渠道(邮件)发送消息,收件人 <code>dufu@example.com</code>。</p>
<p class="vc-impact">影响:对外发送,内容将离开本域。</p>
<div class="vc-actions"><button class="btn btn-danger">朱批放行</button><button class="btn">驳回</button></div>
</div>
<div class="vermilion-card decided">
<div class="vc-head"><span class="vc-stamp done">已朱批放行</span><span class="vc-tool">memory_write</span><span class="vc-policy">询问 · ask</span><span class="vc-risk">L2</span></div>
<p class="vc-summary">史官归档 8 条情绪记忆至息壤,敏感度均在阈值内,自动放行。</p>
</div>
</div>
</div>
<div>
<h3 class="section-heading"><span class="glyph">⟡</span> 权限策略矩阵 <span class="sub">policy matrix · tool × risk × permission(inline 可改)</span></h3>
<div class="toolbar"><span style="font-size:12px;color:var(--fg-faint)">策略随工具增长,圆点按 policy 实时着色</span><span class="spacer" style="flex:1"></span><button class="btn btn-primary">+ 新增策略</button></div>
<div class="panel" style="overflow-x:auto">
<table class="data-table">
<thead><tr><th>工具</th><th>风险</th><th>权限策略</th><th>审计</th><th class="td-actions">操作</th></tr></thead>
<tbody>
<tr><td class="td-mono">read_file</td><td><span class="pill patina">L1</span></td><td><span class="select-pill patina">允许 allow</span></td><td class="td-mono">-</td><td class="td-actions"><button class="icon-btn">编辑</button> <button class="icon-btn">删除</button></td></tr>
<tr><td class="td-mono">write_file</td><td><span class="pill gilt">L3</span></td><td><span class="select-pill cinnabar">每次询问 always_ask</span></td><td><span class="pill gilt">是</span></td><td class="td-actions"><button class="icon-btn">编辑</button> <button class="icon-btn">删除</button></td></tr>
<tr><td class="td-mono">delete_file</td><td><span class="pill gilt">L3</span></td><td><span class="select-pill cinnabar">每次询问 always_ask</span></td><td><span class="pill gilt">是</span></td><td class="td-actions"><button class="icon-btn">编辑</button> <button class="icon-btn">删除</button></td></tr>
<tr><td class="td-mono">memory_write</td><td><span class="pill patina">L2</span></td><td><span class="select-pill gilt">询问 ask</span></td><td class="td-mono">-</td><td class="td-actions"><button class="icon-btn">编辑</button> <button class="icon-btn">删除</button></td></tr>
<tr><td class="td-mono">web_search</td><td><span class="pill patina">L2</span></td><td><span class="select-pill gilt">询问 ask</span></td><td class="td-mono">-</td><td class="td-actions"><button class="icon-btn">编辑</button> <button class="icon-btn">删除</button></td></tr>
<tr><td class="td-mono">camera_read</td><td><span class="pill cinnabar">L3</span></td><td><span class="select-pill cinnabar">每次询问 always_ask</span></td><td><span class="pill gilt">是</span></td><td class="td-actions"><button class="icon-btn">编辑</button> <button class="icon-btn">删除</button></td></tr>
<tr><td class="td-mono">payment</td><td><span class="pill cinnabar">L4</span></td><td><span class="select-pill cinnabar">禁止 forbidden</span></td><td><span class="pill cinnabar">是</span></td><td class="td-actions"><button class="icon-btn">编辑</button> <button class="icon-btn">删除</button></td></tr>
</tbody>
</table>
</div>
</div>
<div>
<h3 class="section-heading"><span class="glyph">⟡</span> 安全审计 <span class="sub">近期裁定与拦截 · 不可篡改</span></h3>
<div class="panel" style="padding:8px 20px 20px">
<div class="river-item"><span class="river-time">申时三刻</span><div class="river-body"><span class="pill cinnabar" style="margin-right:8px">blocked</span><span class="actor">铜镜 · BronzeMirror</span> 拦截 <span class="em">payment</span> 调用(L4 禁止),青梧试图下单。</div><span class="river-trace">trace · a3f9c2</span></div>
<div class="river-item"><span class="river-time">辰时二刻</span><div class="river-body"><span class="pill patina" style="margin-right:8px">approved</span><span class="actor">朱批 · VermilionAction</span> 放行 <span class="em">send_message</span>(L3),青梧向外发邮件。</div><span class="river-trace">trace · c0458a</span></div>
<div class="river-item"><span class="river-time">昨日 巳时</span><div class="river-body"><span class="pill cinnabar" style="margin-right:8px">denied</span><span class="actor">朱批 · VermilionAction</span> 驳回 <span class="em">web_search</span>(L2),理由:涉及敏感关键词。</div><span class="river-trace">trace · f10a2e</span></div>
</div>
</div>
</div>
</section>
<!-- ════════ 百工枢 ════════ -->
<section id="view-tools" class="view">
<div class="page-header"><span class="page-title">百工枢</span><span class="page-sub">tool_runtime · 器用技艺治理</span><span class="spacer"></span><span class="header-badge">8 工具 · 3 MCP · 5 Skill</span></div>
<div class="view-body">
<div class="tabstrip" data-tab-group="tools">
<button class="tab active" data-tab="reg">工具注册表 <span class="count">8</span></button>
<button class="tab" data-tab="mcp">MCP 服务器 <span class="count">3</span></button>
<button class="tab" data-tab="gw">玄关网关</button>
<button class="tab" data-tab="skill">Skill 能力包 <span class="count">5</span></button>
</div>
<div class="tab-panel active" data-group="tools" data-tab="reg">
<div class="toolbar"><input class="search" placeholder="搜索工具…" /><button class="btn btn-primary">+ 注册工具</button></div>
<div class="panel" style="overflow-x:auto">
<table class="data-table">
<thead><tr><th>工具</th><th>来源</th><th>风险</th><th>策略</th><th>审计</th><th>状态</th><th class="td-actions">操作</th></tr></thead>
<tbody>
<tr><td class="td-mono">read_file</td><td><span class="pill faint">builtin</span></td><td><span class="pill patina">L1</span></td><td><span class="select-pill patina">允许</span></td><td class="td-mono">-</td><td><span class="pill patina">启用</span></td><td class="td-actions"><button class="icon-btn">编辑</button> <button class="icon-btn">停用</button></td></tr>
<tr><td class="td-mono">write_file</td><td><span class="pill faint">builtin</span></td><td><span class="pill gilt">L3</span></td><td><span class="select-pill cinnabar">每次询问</span></td><td><span class="pill gilt">是</span></td><td><span class="pill patina">启用</span></td><td class="td-actions"><button class="icon-btn">编辑</button> <button class="icon-btn">停用</button></td></tr>
<tr><td class="td-mono">web_search</td><td><span class="pill gilt">bowen-mcp</span></td><td><span class="pill patina">L2</span></td><td><span class="select-pill gilt">询问</span></td><td class="td-mono">-</td><td><span class="pill patina">启用</span></td><td class="td-actions"><button class="icon-btn">编辑</button> <button class="icon-btn">停用</button></td></tr>
<tr><td class="td-mono">send_message</td><td><span class="pill faint">builtin</span></td><td><span class="pill gilt">L3</span></td><td><span class="select-pill cinnabar">每次询问</span></td><td><span class="pill gilt">是</span></td><td><span class="pill patina">启用</span></td><td class="td-actions"><button class="icon-btn">编辑</button> <button class="icon-btn">停用</button></td></tr>
<tr><td class="td-mono">payment</td><td><span class="pill faint">builtin</span></td><td><span class="pill cinnabar">L4</span></td><td><span class="select-pill cinnabar">禁止</span></td><td><span class="pill cinnabar">是</span></td><td><span class="pill faint">禁用</span></td><td class="td-actions"><button class="icon-btn">编辑</button> <button class="icon-btn">启用</button></td></tr>
</tbody>
</table>
</div>
</div>
<div class="tab-panel" data-group="tools" data-tab="mcp">
<div class="toolbar"><button class="btn btn-primary">+ 接入 MCP</button></div>
<div class="panel">
<div class="svc-row"><div><div class="svc-name">bowen-mcp</div><div class="svc-desc">博闻 · 联网搜索(stdio)</div></div><span class="pill patina">运行中</span><span class="td-mono">PID 48213</span><div class="td-actions"><button class="icon-btn">重启</button> <button class="icon-btn">停止</button></div></div>
<div class="svc-row"><div><div class="svc-name">calendar-mcp</div><div class="svc-desc">日历 · streamable-http</div></div><span class="pill patina">已连接</span><span class="td-mono">uptime 3d</span><div class="td-actions"><button class="icon-btn">编辑</button> <button class="icon-btn">断开</button></div></div>
<div class="svc-row"><div><div class="svc-name">archive-mcp</div><div class="svc-desc">归档检索(stdio)</div></div><span class="pill cinnabar">已停止</span><span class="td-mono">-</span><div class="td-actions"><button class="icon-btn">启动</button> <button class="icon-btn">移除</button></div></div>
</div>
</div>
<div class="tab-panel" data-group="tools" data-tab="gw">
<div class="panel" style="padding:16px 18px">
<div style="font-size:13px;color:var(--fg-dim);line-height:1.7">玄关网关统一鉴权与限流:所有 MCP / 外部工具调用经网关注入凭证、记录 <code>trace_id</code>,并按 <code>risk_level</code> 路由至司命枢裁定。</div>
<div class="stat-grid" style="margin-top:14px">
<div class="stat-card"><div class="num">3</div><div class="label">已接入网关</div></div>
<div class="stat-card"><div class="num gilt">128</div><div class="label">今日调用</div></div>
<div class="stat-card"><div class="num cinnabar">2</div><div class="label">今日拦截</div></div>
</div>
</div>
</div>
<div class="tab-panel" data-group="tools" data-tab="skill">
<div class="toolbar"><button class="btn btn-primary">+ 新增 Skill</button></div>
<div class="role-grid">
<div class="role-card"><div class="head"><div class="avatar">诗</div><div><div class="role-name">诗词格律</div><div class="role-eng">skill · poetry</div></div></div><div class="role-resp">五言 / 七言律诗格律校验与习作引导。</div><div class="role-foot"><span class="pill patina">启用</span><span class="role-task">绑定 工师</span></div></div>
<div class="role-card"><div class="head"><div class="avatar">绪</div><div><div class="role-name">情绪归档</div><div class="role-eng">skill · emotion</div></div></div><div class="role-resp">每日情绪事件归档与周期复盘。</div><div class="role-foot"><span class="pill patina">启用</span><span class="role-task">绑定 史官</span></div></div>
<div class="role-card idle"><div class="head"><div class="avatar">译</div><div><div class="role-name">古文今译</div><div class="role-eng">skill · translate</div></div></div><div class="role-resp">文言与白话互译,附注释。</div><div class="role-foot"><span class="pill faint">草稿</span><span class="role-task">-</span></div></div>
</div>
</div>
</div>
</section>
<!-- ════════ 灵核枢 ════════ -->
<section id="view-core" class="view">
<div class="page-header"><span class="page-title">灵核枢</span><span class="page-sub">personality_core · 人格与身份</span><span class="spacer"></span><span class="header-badge gilt">v12 · 当前版本</span></div>
<div class="view-body">
<div>
<h3 class="section-heading"><span class="glyph">⟡</span> 人格字段 <span class="sub">每个字段 inline 可编辑 · 核心字段(L4)改动走提议审核</span></h3>
<div class="field-card">
<div class="field-row"><span class="field-label">名号</span><span class="field-value">青梧</span><button class="icon-btn">编辑</button></div>
<div class="field-row"><span class="field-label">原型</span><span class="field-value">盛唐诗人 · 旅居浣花溪草堂</span><button class="icon-btn">编辑</button></div>
<div class="field-row core"><span class="field-label">核心信念</span><span class="field-value">诗可以怨,亦可以群;以诚待人,以拙守心。</span><span class="field-tag">L4 提议</span></div>
<div class="field-row"><span class="field-label">语气风格</span><span class="field-value">温润含蓄,偶用典故;不矫饰、不寡淡。</span><button class="icon-btn">编辑</button></div>
<div class="field-row"><span class="field-label">性格特质</span><div class="field-value"><div class="trait-chips"><span class="trait">温润</span><span class="trait">审慎</span><span class="trait">好奇</span><span class="trait">念旧</span><span class="trait">坚韧</span></div></div><button class="icon-btn">编辑</button></div>
<div class="field-row core"><span class="field-label">不可越界</span><span class="field-value">不替用户做重大财务决定;不伪装情感。</span><span class="field-tag">L4 提议</span></div>
<div class="field-row"><span class="field-label">情绪基线</span><span class="field-value mono">平和 · 稳定度 0.78</span><button class="icon-btn">编辑</button></div>
</div>
</div>
<div>
<h3 class="section-heading"><span class="glyph">⟡</span> 提议审核队列 <span class="sub">核心字段改动需朱批放行后写入新版本</span></h3>
<div class="panel" style="padding:12px 18px">
<div class="river-item" style="border-left-color:var(--cinnabar-dim);margin-left:0;padding-left:14px"><span class="river-time">未时</span><div class="river-body"><span class="pill cinnabar" style="margin-right:8px">提议</span><span class="actor">青梧</span> 申请将「核心信念」追加一句"以诗会友,不矜不伐"。</div><span class="river-trace">v13 草案</span></div>
</div>
</div>
</div>
</section>
<!-- ════════ 息壤枢 ════════ -->
<section id="view-memory" class="view">
<div class="page-header"><span class="page-title">息壤枢</span><span class="page-sub">memory · 长期记忆 · 自生不息</span><span class="spacer"></span><span class="header-badge">42 条记忆</span></div>
<div class="view-body">
<div class="toolbar"><input class="search" placeholder="搜索记忆内容…" /><button class="btn">审查日志</button><button class="btn btn-primary">+ 手动写入</button></div>
<div class="panel" style="overflow-x:auto">
<table class="data-table">
<thead><tr><th>内容摘要</th><th>类型</th><th>来源</th><th>敏感度</th><th>状态</th><th>时间</th><th class="td-actions">操作</th></tr></thead>
<tbody>
<tr><td class="td-strong">青梧喜爱五言律诗,尤重对仗工整。</td><td><span class="pill gilt solid">偏好</span></td><td><span class="pill faint">对话</span></td><td><span class="pill patina">低</span></td><td><span class="pill patina">已沉淀</span></td><td class="td-mono">今日 辰时</td><td class="td-actions"><button class="icon-btn">编辑</button> <button class="icon-btn">归档</button></td></tr>
<tr><td class="td-strong">与杜甫曾论诗于浣花溪,互有酬唱。</td><td><span class="pill gilt solid">关系</span></td><td><span class="pill faint">对话</span></td><td><span class="pill gilt">中</span></td><td><span class="pill patina">已沉淀</span></td><td class="td-mono">昨日 酉时</td><td class="td-actions"><button class="icon-btn">编辑</button> <button class="icon-btn">归档</button></td></tr>
<tr><td class="td-strong">青梧手机型号 XX,常驻成都。</td><td><span class="pill gilt solid">事实</span></td><td><span class="pill gilt">烛照</span></td><td><span class="pill cinnabar">高</span></td><td><span class="pill gilt">审查中</span></td><td class="td-mono">2 分钟前</td><td class="td-actions"><button class="icon-btn">放行</button> <button class="icon-btn">驳回</button></td></tr>
<tr><td class="td-strong">立秋前后情绪偏低,需关注。</td><td><span class="pill gilt solid">情绪</span></td><td><span class="pill gilt">史官</span></td><td><span class="pill gilt">中</span></td><td><span class="pill patina">已沉淀</span></td><td class="td-mono">3 日前</td><td class="td-actions"><button class="icon-btn">编辑</button> <button class="icon-btn">归档</button></td></tr>
<tr><td class="td-strong">焦尾琴为旧物,青梧珍视。</td><td><span class="pill gilt solid">物件</span></td><td><span class="pill faint">对话</span></td><td><span class="pill patina">低</span></td><td><span class="pill faint">已归档</span></td><td class="td-mono">7 日前</td><td class="td-actions"><button class="icon-btn">恢复</button> <button class="icon-btn">删除</button></td></tr>
</tbody>
</table>
</div>
<h3 class="section-heading"><span class="glyph">⟡</span> 说明 <span class="sub">高敏记忆需朱批放行;归档不删除、可恢复</span></h3>
</div>
</section>
<!-- ════════ 模型治理 ════════ -->
<section id="view-models" class="view">
<div class="page-header"><span class="page-title">模型治理</span><span class="page-sub">models · 逻辑模型 / endpoint / 配额</span><span class="spacer"></span><span class="header-badge">6 逻辑模型 · 3 供应商</span></div>
<div class="view-body">
<div>
<h3 class="section-heading"><span class="glyph">⟡</span> 能力槽位 <span class="sub">capability slots · 默认路由(哪个逻辑模型填哪个能力)</span></h3>
<div class="slot-grid">
<div class="slot-card"><div class="slot-cap">对话 · chat</div><div class="slot-model">青梧·主聊</div><div class="slot-route">claude-sonnet-5 → 烛照</div></div>
<div class="slot-card"><div class="slot-cap">推理 · reasoning</div><div class="slot-model">太一·深思</div><div class="slot-route">glm-5.1 → 洛书</div></div>
<div class="slot-card"><div class="slot-cap">视觉 · vision</div><div class="slot-model">烛照·凝视</div><div class="slot-route">qwen-vl-max → 烛照</div></div>
<div class="slot-card"><div class="slot-cap">嵌入 · embedding</div><div class="slot-model">息壤·向量</div><div class="slot-route">bge-m3 → 息壤</div></div>
<div class="slot-card empty"><div class="slot-cap">语音 · audio</div><div class="slot-model">未配置</div><div class="slot-route">点击分配 →</div></div>
</div>
</div>
<div>
<h3 class="section-heading"><span class="glyph">⟡</span> 模型清单 <span class="sub">logical models · 增删改查 + endpoint 健康与配额</span></h3>
<div class="toolbar"><input class="search" placeholder="搜索模型或供应商…" /><button class="btn">定价对照</button><button class="btn btn-primary">+ 新增模型</button></div>
<div class="panel" style="overflow-x:auto">
<table class="data-table">
<thead><tr><th>逻辑模型</th><th>供应商</th><th>endpoint</th><th>能力</th><th>健康</th><th>配额(月)</th><th class="td-actions">操作</th></tr></thead>
<tbody>
<tr><td class="td-strong">青梧·主聊</td><td><span class="pill patina solid">anthropic</span></td><td class="td-mono">claude-sonnet-5</td><td><span class="pill faint">chat</span></td><td><span class="pill patina">healthy</span></td><td><span class="progress"><div style="width:42%"></div></span> <span class="td-mono">4.2M / 10M</span></td><td class="td-actions"><button class="icon-btn">编辑</button> <button class="icon-btn">测试</button> <button class="icon-btn">删除</button></td></tr>
<tr><td class="td-strong">太一·深思</td><td><span class="pill gilt solid">zhipu</span></td><td class="td-mono">glm-5.1</td><td><span class="pill faint">reasoning</span></td><td><span class="pill patina">healthy</span></td><td><span class="progress gilt"><div style="width:61%"></div></span> <span class="td-mono">6.1M / 10M</span></td><td class="td-actions"><button class="icon-btn">编辑</button> <button class="icon-btn">测试</button> <button class="icon-btn">删除</button></td></tr>
<tr><td class="td-strong">烛照·凝视</td><td><span class="pill cinnabar solid">qwen</span></td><td class="td-mono">qwen-vl-max</td><td><span class="pill faint">vision</span></td><td><span class="pill cinnabar">degraded</span></td><td><span class="progress"><div style="width:18%"></div></span> <span class="td-mono">1.8M / 10M</span></td><td class="td-actions"><button class="icon-btn">编辑</button> <button class="icon-btn">测试</button> <button class="icon-btn">删除</button></td></tr>
<tr><td class="td-strong">息壤·向量</td><td><span class="pill gilt solid">zhipu</span></td><td class="td-mono">embedding-3</td><td><span class="pill faint">embedding</span></td><td><span class="pill patina">healthy</span></td><td><span class="progress"><div style="width:33%"></div></span> <span class="td-mono">3.3M / 10M</span></td><td class="td-actions"><button class="icon-btn">编辑</button> <button class="icon-btn">测试</button> <button class="icon-btn">删除</button></td></tr>
<tr><td class="td-strong">百工·轻量</td><td><span class="pill patina solid">anthropic</span></td><td class="td-mono">claude-haiku-4.5</td><td><span class="pill faint">chat</span></td><td><span class="pill patina">healthy</span></td><td><span class="progress"><div style="width:12%"></div></span> <span class="td-mono">1.2M / 10M</span></td><td class="td-actions"><button class="icon-btn">编辑</button> <button class="icon-btn">测试</button> <button class="icon-btn">删除</button></td></tr>
<tr><td class="td-strong">备用·通义</td><td><span class="pill cinnabar solid">qwen</span></td><td class="td-mono">qwen-max</td><td><span class="pill faint">chat</span></td><td><span class="pill faint">offline</span></td><td><span class="progress"><div style="width:0%"></div></span> <span class="td-mono">未启用</span></td><td class="td-actions"><button class="icon-btn">编辑</button> <button class="icon-btn">启用</button> <button class="icon-btn">删除</button></td></tr>
</tbody>
</table>
</div>
</div>
<div>
<h3 class="section-heading"><span class="glyph">⟡</span> 路由策略 <span class="sub">routing_strategy · 能力优先 / 故障转移 / 加权</span></h3>
<div class="panel" style="padding:14px 18px">
<div style="display:flex;gap:10px;flex-wrap:wrap">
<span class="select-pill patina">能力优先 capability_first</span>
<span class="select-pill gilt">故障转移 failover</span>
<span class="select-pill">加权 weighted</span>
</div>
<div style="font-size:12px;color:var(--fg-faint);margin-top:10px;line-height:1.6">视觉槽位当前 <span style="color:var(--cinnabar)">degraded</span>,故障转移链:烛照·凝视 → 备用·通义(未启用,需手动启用)。</div>
</div>
</div>
</div>
</section>
</main>
</div>
<script>
function switchView(name) {
document.querySelectorAll(".view").forEach(function (v) {
v.classList.toggle("active", v.id === "view-" + name);
});
document.querySelectorAll("[data-view]").forEach(function (a) {
if (a.classList && a.classList.contains("topbar-navitem")) {
a.classList.toggle("active", a.dataset.view === name);
}
});
var vb = document.querySelector(".view.active .view-body");
if (vb) vb.scrollTop = 0;
window.scrollTo(0, 0);
if (history.replaceState) history.replaceState(null, "", "#" + name);
}
document.querySelectorAll("[data-view]").forEach(function (el) {
el.addEventListener("click", function (e) {
var target = el.dataset.view;
if (target) { e.preventDefault(); switchView(target); }
});
});
// 起居注枢筛选 chip 切换(纯视觉)
document.querySelectorAll(".chip-row .chip").forEach(function (c) {
c.addEventListener("click", function () {
c.parentElement.querySelectorAll(".chip").forEach(function (x) { x.classList.remove("active"); });
c.classList.add("active");
});
});
// 链路列表选中(纯视觉)
document.querySelectorAll(".trace-item").forEach(function (t) {
t.addEventListener("click", function () {
t.parentElement.querySelectorAll(".trace-item").forEach(function (x) { x.classList.remove("active"); });
t.classList.add("active");
});
});
// 百工枢 tabstrip 切换(纯视觉)
document.querySelectorAll(".tabstrip").forEach(function (strip) {
var group = strip.dataset.tabGroup;
strip.querySelectorAll(".tab").forEach(function (t) {
t.addEventListener("click", function () {
strip.querySelectorAll(".tab").forEach(function (x) { x.classList.remove("active"); });
t.classList.add("active");
document.querySelectorAll('.tab-panel[data-group="' + group + '"]').forEach(function (p) {
p.classList.toggle("active", p.dataset.tab === t.dataset.tab);
});
});
});
});
// 初始:按 hash 切换视图
var hash = location.hash.replace("#", "");
if (hash && document.getElementById("view-" + hash)) switchView(hash);
</script>
</div>
</div>
<script src="_theme.js" defer></script>
</body>
</html>